1 软件过程
1.1 能力成熟度模型(CMM)
![](https://img-blog.csdnimg.cn/img_convert/d5969a3cf49aa7ec44acdb587f57e688.png)
初始(混乱)->可重复(建立基本、重复以往)->已定义(文档化、标准化)->已管理(制定产品质量标准)->优化(新技术改进)
1.2 能力成熟度模型集成(CMMI)
两种表示方法:阶段式模型、连续式模型。
阶段式模型
![](https://img-blog.csdnimg.cn/img_convert/87925ba9343c1c55c9018c0a71be8697.png)
连续式模型
![](https://img-blog.csdnimg.cn/img_convert/1502d43c8055d7d4d49f386da1ecd960.png)
L0(未执行、未得到)->L1(可标识输入转为可标识输出)->L2(已管理的制度化)->L3(已定义的制度化)->L4(可定量管理的制度化)->L5(优化)
2 软件过程模型
适合需求明确的情况。
2.1 瀑布模型
![](https://img-blog.csdnimg.cn/img_convert/b65c766fba5272439d4b17e9526b13f2.png)
![](https://img-blog.csdnimg.cn/img_convert/938d6517aa2fd02c4047b7c4d5455b11.png)
2.2 V模型
![](https://img-blog.csdnimg.cn/img_convert/3b636543aff0ef657748e797178a9be1.png)
2.3 增量模型
一开始就需求明确,将需求分解为多个增量进行开发,可以快速提供一个版本。
![](https://img-blog.csdnimg.cn/img_convert/e17229272e8937225a3b458addc2248d.png)
![](https://img-blog.csdnimg.cn/img_convert/84386cbc5a0ebb67941caaefa9f499c9.png)
3 演化模型
应对对于需求认识不明晰,需求经常变化的情况而产生的模型,能够快速发布初始版本。
3.1 原型模型
适合系统规模不是很大,需求不明晰的情况。
![](https://img-blog.csdnimg.cn/img_convert/5f144f76b85eaca9156801c8e7b54f11.png)
3.2 螺旋模型
融合瀑布模型和演化模型,加入了风险分析,弥补了这两种模型的不足,适合大型项目。
![](https://img-blog.csdnimg.cn/img_convert/6c78dae3359188b955c9d451e5eae3d3.png)
![](https://img-blog.csdnimg.cn/img_convert/6e160f5ece67d86c33e2f9899be1ff60.png)
4 喷泉模型
克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。具有迭代行和无间隙性(无边界,可各部门同步开发)。
![](https://img-blog.csdnimg.cn/img_convert/a2a042f033357bd4d1dd732210539d91.png)
![](https://img-blog.csdnimg.cn/img_convert/dc43adf8c016b395ed7021789eec129d.png)
5 统一过程(up)模型
![](https://img-blog.csdnimg.cn/img_convert/0f37d58139dccbcba59e67f075f866fa.png)
6 敏捷方法
目标:尽可能早的、持续的对有价值的软件进行交付。
6.1 极限编程法(XP)
由价值观、原则、实践、行为组成。
![](https://img-blog.csdnimg.cn/img_convert/d6db6e29dfe26bfb95a0eea4362b14d3.png)
6.2 水晶法
每个项目都需要一套不同的策略、约定和方法论。
6.3 并列争求法
30天一次的迭代称为一个冲刺。
6.4 自适应软件开发
![](https://img-blog.csdnimg.cn/img_convert/3e5892055ddcbce5a225b5cb548b39dd.png)
6.5 敏捷统一过程
在大型上连续,在小型上迭代,敏捷统一编程包含以下活动(建模、实现、测试、部署、配置及项目管理、环境管理)。
7 需求分析
功能需求:考虑系统要做什么?在何时做?如何修改提升?
性能需求:考虑软件开发的技术性指标。如容量限制、执行时间、相应时间、吞吐量。
数据需求:考虑输入输出的数据格式。
了解即可:
![](https://img-blog.csdnimg.cn/img_convert/bace532e27e47252eb5dcb713e20a69f.png)
8 系统设计
8.1 概要设计
设计软件系统总体结构
关键一步,将系统划分为若干模块,确定每个模块功能、模块间调用关系、模块接口、评估模块质量。
数据结构及数据库设计
数据库设计(概念设计、逻辑设计、物理设计)
编写概要设计文档
概要设计说明书、数据库设计说明书、用户手册、修订测试计划。
评审
是否完成相应功能、性能,方法是否可行。
8.2 详细设计
重要基础。
对每个模块进行详细的算法设计。
对模块内数据结构进行设计。
对数据库进行物理设计,确定物理结构。
其他设计(代码格式、输入输出格式、UI设计)
编写详细设计说明书。
对算法和数据库物理结构进行评审。
9 系统测试
9.1 系统测试意义、目的和原则
意义:为了发现错误,是保证系统质量的关键。
目的:最少的人力和时间发现错误。
原则:遍布所有阶段、不让开发人员测试自己、设定输入和预期输出、测试不合理的输入、检验系统是否做了不该做的事、严格按照测试计划、妥善保存测试用例、精心设计测试用例增加复用性、测试目标源自需求。
![](https://img-blog.csdnimg.cn/img_convert/a0feb9ca146ce08ce4eda756e1c7933b.png)
9.2 单元测试
又称模块测试,对模块中内部逻辑和数据结构进行测试,一般采用白盒测试,高内聚低耦合可以简化单元测试。
(1)测试内容
模块接口
局部数据结构
重要的执行路径
出错处理
边界条件
(2)单元测试过程
![](https://img-blog.csdnimg.cn/img_convert/cb03994f330e51df1c1a80ba772d2b33.png)
![](https://img-blog.csdnimg.cn/img_convert/316cb139f3263192d11cc3e381a58f7a.png)
9.3 集成测试
(1)自顶向下集成测试
增量测试,采用深度优先或广度优先由主控开始搜,不用写驱动模块。
![](https://img-blog.csdnimg.cn/img_convert/c3c8415fef0b545f49a799e89f48742d.png)
(2)自底向上集成测试
不用写桩模块。
![](https://img-blog.csdnimg.cn/img_convert/15b642d09b2826bca331e2f9a187ba95.png)
(3)回归测试
从头测,防止回退。
(4)冒烟测试
9.4 测试方法
静态测试
人工检测
计算机静态辅助分析
动态测试
在程序运行阶段对程序进行测试。
黑盒测试
不关心内部结构,其测试技术有等价类划分、边界值分析、错误推断、因果图。
(1)等价类划分
如有效值是0<x<100,那么1~99都叫做有效等价类,其他数都叫做无效等价类。
(2)边界值分析
基于上例,0和100就是边界值。
(3)错误推断
根据经验和直觉推断错误,设计测试用例。
(4)因果图
通过输入(因)和输出或状态改变(果)来构建因果图,转化为判定表。
白盒测试
根据程序的结构和内部逻辑来设计测试用例。
(1)逻辑覆盖
考察用测试数据运行被测程序时对程序逻辑的覆盖程度,下属几种覆盖性依次增强。
a)语句覆盖:选择足够的测试数据,使程序中每条语句至少被执行一次(没有语句的路可以不覆盖)。
b)判定覆盖(分支覆盖):每个判定表达式“真”和“假”至少各通过一次。
c)条件覆盖:每个条件的每个可能值都要满足一次,如条件为A>0 && B>0,那么要A>0、A<=0、B>0、B<=0都测一遍,如两条测试用例分别为A=1,B=1和A=0,B=0。
d)判定/条件覆盖:“真”“假”各至少出现一次,条件中个值的“真”和“假”也各至少出现一次(前两种的结合)。
e)条件组合覆盖:每个条件中的可能值的组合都要出现一次,如条件为A>0 && B>0,那就要A真+(B假/B真)、A假+(B真/假)四种组合都出现。
f)所有路径都覆盖。
(2)循环覆盖
执行足够的测试用例使得每个条件都得到验证。
(3)基本路径测试
通过分析控制流图环路复杂性设计用例。
白盒测试原则:
![](https://img-blog.csdnimg.cn/img_convert/92fbce0f4a7700a8626e31bb6c6041c2.png)
测试用例:由测试输入数据+预期输出数据组成,应同时包含合理的和不合理的输入,不合理的输入越多越不合理。
9.5 McCabe度量法
![](https://img-blog.csdnimg.cn/img_convert/6886185ad44228997e3eb05ae424ced8.png)
环路个数也等于闭合区域数+1。
10 运行和维护知识
(1)系统维护
可维护性评价指标:可理解性、可测试性、可修改性。
(2)系统文档和用户文档
用系统文档测试、用用户文档维护。软件运维不属于开发阶段,但开发阶段要保证可维护性。文档是运维的关键因素。
![](https://img-blog.csdnimg.cn/img_convert/37448995542bc7958c6e92d2de1c5500.png)
(3)软件维护内容
分为硬件维护、软件维护、数据维护,软件维护重要。
软件维护有以下几方面:
正确性维护:测试阶段未发现问题、运行阶段发现了,需修正。
适应性维护:根据需求和运行环境需要软件来适应。
完善性维护:增加一些系统分析和设计阶段未规定的功能和特性。
预防性维护:增加一些预防性新功能,避免被淘汰。
(4)软件可靠性、可用性、可维护性
![](https://img-blog.csdnimg.cn/img_convert/adae6770ac238341593afc6cdf20265a.png)
11 COCOMO模型
基本COCOMO模型:静态单变量模型。
中级COCOMO模型:静态多变量模型。
详细COCOMO模型:分为系统、子系统和模块三层。
COCOMOII模型:分为应用组装模型、早期设计阶段模型、体系结构阶段模型。有三种规模估算选择为对象点、功能点和代码行。
12 甘特图
![](https://img-blog.csdnimg.cn/img_convert/cc5b5c6bb705f1db989b75b3589cf5c2.png)
13 PERT图
箭头表示任务,每个节点的流入表示流入箭头所指任务结束,流出表示流出箭头所指任务开始,只有当流入任务都结束时,节点所表示的事件才出现,事件仅表示一个时间点。最早时刻表示从该事件出发的任务不可能在本节点的最早时刻之前开始,最迟时刻表示从该事件出发的任务必须在此时刻之前开始,否则整个工程无法如期完成。
开始节点的最早开始时刻为0,结束节点的最迟时刻等于结束节点的最早时刻,每个节点最早和最迟时刻差就是松弛时间。
最早和最迟时刻相等的节点组成的路径就是关键路径。
![](https://img-blog.csdnimg.cn/img_convert/69d11be5be22beac5f26158ac77722b0.png)
最早时刻计算:
![](https://img-blog.csdnimg.cn/img_convert/cb749f97082c9a87345386e2a78c47a1.png)
最迟时刻计算:
![](https://img-blog.csdnimg.cn/img_convert/f0a12f23ddb3f06eb45c1c303cf5c882.png)
PERT图不能表现任务的并行关系。
13 项目活动图
![](https://img-blog.csdnimg.cn/img_convert/ebe26abead97186f1fa95f9a68664597.png)
14 软件配置管理
![](https://img-blog.csdnimg.cn/img_convert/1ea04bfc76c94b63acf0591ef80ac3cc.png)