系统架构设计师 软件工程概述

124 阅读4分钟

重点 这里软件工程上午题以选择题为主

软件工程下午题的案例题会涉及到系统建模的题目,即开发方法中使用的工具,会有所考察

在论文中会涉及到开发方法和开发模型这样的题

软件工程的由来

因为软件危机,这个我的个人理解是,由于大量不规范的代码书写导致后期的维护工作无法进行,进而导致系统无法进行维护或更新,导致被迫停用。说人话,写的屎山代码,还没有文档,也没有注释,变量名还不规范,后期维护人员看得一脸懵逼。

下面是官方的解释

由于时代的发展,软件的需求量暴增,导致之前那种小作坊式的软件开发不能满足需求,为了解决这个问题,专业人士寻思着从其他的工程领域如建筑工程领域找解决办法,你建造房子,我觉得应该经过如下步骤

  1. 需求明确,建造什么样的房子对吧,预算问题
  2. 画图纸和选址,这个图纸以何种方式能让别人一看就能看得懂呢?施工用到的材料可能不一样,标准怎么定呢?地址选定在哪里呢?
  3. 施工了,怎么施工,施工工具,拿勺子挖土?还是拿现代化工具来?
  4. 交付
  5. 维护

软件开发中的设计模式也是这么干的,因为设计模式起源于建筑工程领域

软件工程三要素

  • 方法
  • 工具
  • 过程

软件开发生命周期

分为软件定义,软件开发,软件运行和维护

软件定义

包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的目标. 分为问题定义,可行性研究,需求分析。选择择题可能会将这一块与生命周期搞混

下面是详细展开的

  1. 问题定义 说人话,要做什么系统,比如做一个购物的还是游戏的还是通讯的,即定位。
  2. 可行性研究 说人话就是能不能做,让你做一个只要摇一摇手机就能将周围用户的银行卡中的钱转给你,你觉得能做吗?真可刑 包括技术可行性(你在开发过程中涉及到的软硬件是怎么来的,自主研发还是采购的),经济可行性(预算够不够),操作可行性和社会可行性(做一个违反法律的能做?)等等,确定是否有界,解决办法是否可行
  3. 需求分析 研究系统的功能性需求(就是必须要完成的)和非功能性需求(就比如安全性,可靠性,可维护性,结果的精度,容错性,响应速度和适应性)

软件开发

软件的设计与实现了,分为概要(总体)设计详细设计编码测试等等 概要设计是在软件需求规格说明的基础上,建立系统的总体结构(含子系统的划分)和模块间的关系,定义功能模块及各功能模块之间的关系

就比如ERP,有物料的管理功能,一些其他的人力资源管理的功能 概要设计就是拆模块,定义模块的功能以及模块之间的关系

详细设计就是对模块内逐步细化了,详细设计包括算法与数据结构、数据分布、数据组织、模块间接口信息和用户界面等的设计,并写出详细设计报告。

测试分成单元测试、集成测试、确认测试和系统测试等等,通常把编码和测试称之为系统的实现

软件运行和维护

这个很好理解,前者就是上线了,维即满足客户的需求或随着业务的发展而新增的需求,这个不是重点,是运维干的活