一、软件的生命周期
二、开发模型
三、测试模型
四、测试流程
五、缺陷管理流程
六、软件和质量
一、软件的生命周期(基于瀑布模型的生命周期)
软件的生命周期:是指从产生到淘汰的过程
包括:计划(开发方与需求方讨论)、需求分析、设计、编码、测试(单元测试、集成测试、系统测试、验收测试)、运行维护、淘汰升级等
1、可行性研究及计划
开发方和需求方共同讨论,确定软件的开发目的及可行性,并制定实施计划
通过确定软件开发目的,给出软件的功能、性能、可靠性、接口等方面的设想
研究完成这个项目的可行性,问题的解决方案,对资源、成本的估计,制定实施计划
2、需求分析
由需求分析人员和用户共同讨论
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析
弄清用户对软件系统的全部需求,明确哪些需求可以满足,哪些不可以,并给出确切描述
产出《需求规格说明书》
注:唯一不变的是变化本身,同样需求在整个软件开发过程中会不断变化,所以,要制定需求变更计划来应对这种变化
来保证项目的顺利进行
3、软件设计
此阶段是核心,由架构师完成
根据需求分析的结果,对整个软件系统进行设计,如:系统框架设计、数据库设计等
软件设计:分为概要设计(HLD)和详细设计(LLD)
产出《设计说明书》
- 概要设计(HLD)-----集成测试(接口)
- 详细设计(LLD)-----单元测试(代码)
4、编码
按照软件设计的结果,程序员开始编写代码
5、软件测试
软件编写完成后,要经过严密的测试,以发现问题并加以纠正
整个测试过程分为:单元测试、集成测试、系统测试、验收测试
测试方法主要有:黑盒测试、白盒测试
在测试过程中,要建立详细的测试计划并严格按照测试计划进行,减少测试的随意性
- 单元测试:对代码的测试,一般由开发完成
- 集成测试:对接口的测试,在单元测试之后进行,由开发完成
- 系统测试:比对需求规格说明书,根据测试用例进行完整的测试,如各功能是否满足需求,系统运行是否存在漏洞
- 验收测试:用户对软件进行验收,客户拿到软件后,会根据用户需求来进行判定软件是否达到需求
单元测试、集成测试、系统测试之间,好比:砖、墙、楼
6、运行维护
是软件生命周期中,持续时间最长的阶段
软件投入使用后,由于多方面原因,软件不能继续适应用户的要求或要延续软件的使用寿命,就要对软件进行维护
软件的维护:包括纠错性维护、改进性维护
7、淘汰升级
生命周期示意图:
二、开发模型
软件开发模型:边做边改模型、瀑布模型、快速原型模型、螺旋模型、增量模型、迭代模型、演化模型
喷泉模型、混合模型、敏捷开发模型
1、边做边改模型
这种模型,没有规格说明,也没有经过设计,开发人员拿到项目会立即根据需求编写程序
软件会伴随客户的要求不断被修改,直至客户满意
缺点:缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改
忽略需求环节,给软件开发带来很大的风险
没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难
2、瀑布模型
瀑布模型中,包括计划、需求分析、设计、编码、测试、运行维护等六个基本活动
规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落,是一种线性模型
瀑布模型强调文档的作用,要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化
已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
(1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
(2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险
(3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果
3、快速原型模型
本质是,开发人员对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求
快速原型模型中,第一步:通过一些快速原型语言先构建出软件产品的原型系统,可快速的和用户交互
用户通过该原型系统具体的了解该款软件,对原型进行评价,进一步细化待开发软件的需求。通过逐步
调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步:则在第一步的基础上
开发客户满意的软件产品
快速原型,可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果
4、螺旋模型
螺旋模型,将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,适合于大型复杂的系统
螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:
(1) 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
(2) 风险分析:分析评估所选方案,考虑如何识别和消除风险
(3) 实施工程:实施软件开发和验证
(4) 客户评估:评价开发工作,提出修正建议,制定下一步计划
螺旋模型也有一定的限制条件,具体如下:
(1)在软件开发的每个阶段,都增加一个风险分析过程
(2)螺旋模型强调风险分析,但要求客户接受这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。
(3)如果执行风险分析会影响项目的利润,那进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。
(4)软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险
在软件开发的每个阶段,都增加一个风险分析过程
5、增量模型
与建造大厦相同,软件也是一步一步建造起来的
增量模型,就是把待开发的软件系统进行模块化,把每个模块都看作一个增量组件,从而分批次的分析、设计
编码和测试这些增量组件。运用增量模型的软件开发过程,就是递增式的过程
相较于瀑布模型,开发人员不需要一次性地把整个软件产品交给用户,可以分批次进行提交
例如:要开发A、B、C、D四个业务功能,增量方法就可以将四个功能分为两次增量来完成
第一个增量完成A、B功能,第二次增量完成C、D功能
其实,增量就是:一块一块来进行测试
比如画一幅人物画,用增量,就是先画人的头部,再画身体,再画手脚