软件工程基础
考点概要
开发模型、敏捷开发发方、ISO/IEC 9126软件质量模型、软件能力成熟度模型集成(CMMI)、软件开发方法、需求分析、软件设计、内聚与耦合、测试与维护、McCabe复杂度、软件质量保证、软件过程改进、项目管理基础、Gant图与Pert图、风险管理
1、软件工程概述
- 计算机软件是指计算机系统中的程序及其文档。
- 计算机软件十大分类:① 系统软件; ② 应用软件;③ 工程科学件;④ 嵌入式软件;⑤ 产品线软件;⑥ Web 应用软件(Web APP);⑦ 人工智能软件;⑧ 开放计软件;⑨ 网络资源;⑩ 开源软件。
- 软件工程的七条基本原则:① 分阶段的生命周期计划严格管理;② 坚持进行阶段评审;③ 实现严格的产品控制;④ 采用现序设计技术;⑤ 结果应能清楚地审查;⑥ 开发小组的人员应少而精;⑦ 承认不断改进软件工程实践的必要性。
- 软件生存周期:① 可行性分析与项目开发计划; ② 需求分析;③ 概要设计;④ 详细设计;⑤ 编码;⑥ 测试;⑦ 维护;
2、软件过程
2.1 CMM(能力成熟度模型)
2.2 能力成熟度集成模型(CMMI)
- 阶段式模型:关注组织的成熟度
- 连续式模型:关注每个过程域的能力
3、软件过程模型
软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型、基于构件的开发模型和形式化方法模型等。
3.1 瀑布模型
-
瀑布模式适合开发
需求明确
的,需求大致固定不会随意变更的系统 -
V模式的关键字在于质量保证、活动和沟通,基本问题逐步细化
有过类似的开发经验那就是暗示该系统的需求很明确了
替换原有的系统也是暗示需求明确
系统的功能有清晰的定义暗示需求明确
3.2 增量模型
优点:
-
增量模型拥有瀑布模型的所有优点
-
每一个增量都是可操作的产品
-
第一个可交付版本所需要的成本和时间很少;
-
开发由增量表示的小系统所承担的风险不大;
-
它主要的特点是可以快速构造可运行的产品
3.3 演化模型
3.3.1 原型模型
- 原型模型不适合大规模的系统开发
- 需求不明确时
- 快速、低成本构建原型
3.3.2 螺旋模型
- 螺旋模型的特点是加入了风险分析,适合大规模高风险的,需求变化的系统
- 缺点:多次迭代增加了开发成本,延迟提交时间
3.4 喷泉模型
- 以对象作为驱动模型,适合面向对象的开发方法
- 开发过程迭代性和无间隙性
3.5 基于构件的开发模型
- 可复用构件
3.6 形式化方法模型
3.7 统一过程(UP)模型
3.7 敏捷方法
敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付” 使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。
3.7.1 极限编程(XP)
3.7.2 水晶法(Crystal)
3.7.3 并列争求法(Scrum)
3.7.4 自适应软件开发(ASD)
3.7.5 敏捷统一过程(AUP)
3.7.6 真题
3.8 总结
- 瀑布模型:需求明确
- 增量模型:快速构造可运行的产品
- 原型模型:需求不明确,不适合大规模的系统开发
- 螺旋模型:加入了风险分析,适合大规模高风险的,需求变化的系统
- 喷泉模型:以对象作为驱动模型,适合面向对象的开发方法,开发过程迭代性和无间隙性
- 统一过程模型:用例和风险驱动,以架构为中心,迭代并且增量,定义了起始、精化、构建、移交四个阶段
4、软件项目需求分析
5、软件项目系统分析
5.1 概要设计
5.2 详细设计
5.3 真题
6、软件测试
6.1 系统测试
- 系统测试阶段的测试目标来自于需求分析阶段
6.2 传统软件的测试策略
6.2.1 单元测试
单元测试内容:模块接口、局部数据结构、重要的执行路径、出错处理、边界条件
单元测试过程
6.2.2 集成测试
- 自顶向下集成不需要驱动模块
- 自底向上不需要桩模块
- 回归测试有助于保证变更不引入无意识行为或额外的错误。
6.2.3 确认测试
6.2.4 系统测试
包括恢复测试、安全性测试、压力测试、性能测试、部署测试
6.3 测试方法
- 静态测试
- 人工测试
- 计算机辅助静态分析
- 动态测试:通过运行程序发现错误
- 黑盒测试:在完全不考虑软件的内部结构和特性的情况下测试软件外部特性
- 白盒测试:根据程序的内部结构和逻辑来设计测试用例
6.4 黑盒测试
① 等价类划分
② 边界值分析
③ 错误推测
④ 因果图
真题
多个测试用例都不在合法范围内的都不是好的测试用例
6.6 白盒测试
① 语句覆盖
每条可执行语句至少执行一次
② 判定覆盖(分支覆盖)
每个判定表达式至少获得一次 真 和
假 值
③ 条件覆盖
条件覆盖就是判定表达式的所有条件都要最少取得一真一假,例如上面那个图的第一个判定表达式的条件如下,有两个条件,每个条件要最少取一真一假
④ 判定/条件覆盖
其实就是要同时满足判定覆盖和条件覆盖反正记得判定覆盖就是判定表达式最少一真一假,条件覆盖就是判定表达式的所有条件最少一真一假
⑤ 条件组合覆盖
也就是判定表达式的所有条件的真假不同组合必须都有,两个条件就是四种组合,例如下面的
⑥ 路径覆盖
真题
答案是6和4
在白盒测试中计算环路复杂度就直接是判定条件的数量+1,例如这个题的判定条件有三个+1=4,所以环路复杂度是4
答案是两个4
注意这里的for循环中也是有判断条件的,所以这里应该是由两个判断条件,所以环路复杂度为3
7、软件质量
7.1 软件质量模型 🤳
① ISO/IEC 9126 软件质量模型
② Mc Call软件质量模型
真题
7.2 软件评审
7.3 容错技术
8、软件项目管理
有效的软件项目管理集中在4个P上,即人员(Person)、产品(Product)、过程(Procedure)
和项目(Project)。
8.1 软件项目估算
COCOMO 估算模型
COCOMOII 模型
8.2 进度管理
Gantt图(甘特图)
- Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
PERT图
只有流入该结点的所有任务都结束时,结点所表示的事件才出现
- 最早开始时间:如果有多个流指向一个事件,那最早时刻取最大值,开始结点的最早时刻 = 0
- 最迟开始时间:从结束结点往前推,结束结点的最迟时刻 = 结束结点的最早时刻,最迟 - 路径时间,如果一个事件有多个分流,那最晚时刻取最小值
- 松弛时间 = 最晚时间-最早时间
- 关键路径是开始到结束路径和最大的
PERT 图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其所需完成的时间。但是,PERT图不能反映任务之间的并行关系。
项目活动图
找到FG,然后看经过FG到终点的路径是哪一条,这里是ADFGJ,然后从J倒着求到F点(但是这里有三条路径,一定记得是沿着前面给出的ADFGJ路径,因为它这个路径包含了FG),看看F点的最晚时间是多少,最后求最早和最晚的时间差值就是FG的松弛时间
画项目活动图
首先要会画图,注意那个图线上标的值是前驱的值,其次就是理解不能通过缩短活动工期来缩短整个项目的完成时间这句话,这其实就是求非关键路径的结点,因为这个关键路径的结点松弛时间是为0的,所以不能再缩短了
8.3 风险管理
风险识别
风险预测
风险评估
风险监控
真题
风险避免是最好的风险控制策略
9、软件度量
McCabe度量法
V = m - n +2 = 闭合区域 + 1
,m是有向弧树,n是结点树
答案是D
10、软件可靠性、可用性、可维护性的表达式 🤳
MTTF平均无故障时间,MTBF平均失效间隔时间,MTTR平均修复时间
-
可靠性:可靠性是指一个系统对于给定的时间间隔内、在给定条件下无失效运作的概率。
MTTF /(1+MTTF)
-
可用性:可用性是在给定的时间点上,一个系统能够按照规格说明正确运作的概率。
MTBF /(1+MTBF)
-
可维护性:可维护性是在给定的使用条件下,在规定的时间间隔内,使用规定的过程和资源完成维护活动的概率。
1/(1+MTTR)
11、软件维护
11.1 系统可维护性评估指标
11.2 软件维护
正确性主要就行修改错误
适应性主要是是变化了所以要适应,题目中有变化或者暗示变化那就是适应性
完善性主要是新增功能和需求这两个点
预防性主要是预防两字
11.3 软件文档
编写高质量文档可以提高软件开发的质量。文档也是软件产品的一部分,没有文档的软件就不能称之为软件。
软件文档的编制在软件开发工作中占有突出的地位和相当大的工作量。
高质量文档对于软件产品的效益有着重要的意义,总的来说,软件文档只好不坏,选项中说软件文档不好的就是不正确的。
12、沟通路径
沟通路径无主程序员的公式(n-1)* n/2
有主程序员n-1,其中n为程序员的个数
评论区