第02章 软件生命周期
一、软件生命周期和软件工程
1、人的生命周期
1)孕育——出生——生长、发育——成熟——衰老——死亡
2、软件的生命周期
1)立项——需求分析——设计、编码、测试——发布——运行维护——淘汰
3、软件工程
1)软件危机:指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护中出现一系列严重问题的现象。
2)软件工程:基于软件危机对于计算机发展的阻碍,1968年,在联邦德国召开的国际会议上,北大西洋公约组织的计算机科学家讨论软件危机问题。提出了软件工程这个名词,从此软件生产进入工程化时代。
3)软件工程包括两方面的内容:
(1)软件开发技术:软件开发方法学、软件工具和软件工程环境;
(2)软件项目管理:软件质量、项目估算、进度控制、人员组织、配置管理、项目计划等。
①引起软件危机的主要问题是软件质量问题软件工程主要解决的就是软件质量问题。
③软件测试是软件质量管理体系中一个非常重要的手段。
二、软件开发过程模型
1、瀑布模型:最早提出的软件开发的过程模型
1)计划 《项目计划》
2)需求分析《需求规格说明书》(SRS, software requirement specification)
3)软件设计
①《概要设计》(HLD, high level design)
②《详细设计》(LLD, low level design)
4)程序开发(编码)
5)软件测试
6)集成维护(维护和运行)
7)优点
(1)为项目提供按阶段划分的检查点。
(2)当前一阶段完成后,只需要去关注后续阶段。
8)缺点
(1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了 工作量
(2)线性开发,用户等到整个过程的末期才能见到开发成果,从而增加了 开发风险
(3)瀑布模型不适应用户需求的变化
9)存在的问题:
(1)强调时间顺序的严格执行;前阶段不完成后阶段不开始
(2)将测试放在了编码之后;未体现测试贯穿软件生命周期的原则,软件 测试贯穿软件生命周期(从需求就开始)可以避免需求类问题一直延续 到代码完成才暴露
(3)不适应用户需求的变化
2、快速模型
1)原型:即一个模型。可以模拟操作、简单运行。
2)迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员与客户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
3)这种模型适合预先不能确切定义需求的软件系统的开发。
4)优点
(1)克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
5)缺点
(1)所选用的开发技术和工具不一定符合主流的发展;
(2)快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
6)典型应用和工具:Axure,作用:制作原型
3、增量模型
1)增量模型是待开发的把软件系统进行模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。(可每次只交付一个模块)
2)优点
(1)可以分批次地提交软件产品;
(2)以组件为单位进行开发降低了软件开发的风险;
(3)开发顺序灵活。
3)缺点
(1)打破软件的原始结构和框架,可能带来一定的风险。
4)限制
(1)要求项目管理人员把握全局的水平要高。
5)应用:
(1)增量模型一般和迭代模型一起应用。迭代模型强调的是深化,强化模型是每次发布都会增加一个新功能(新模块)。
(2)软件增加了新功能;
(3)优化了…功能;
(4)修复了某些未知/已知bug;
4、迭代模型
1)计划 业务工程 需求 分析设计 实施 部署 测试 评估
2)迭代包括产生产品发布(稳定、可执行的产品版本:最开始分布的版本即为稳定可执行的)的全部开发活动和要使用该发布必需的所有其他元素,强调开发的深入(优化)。解释:在一个初级版本的基础上不断的深入……产生更高级的版本……
3)在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。
4)迭代过程具有以下优点:
(1)降低了在一个增量上的开支风险;
(2)降低了产品无法按照既定进度进入市场的风险;
(3)加快了整个开发工作的进度;
(4)迭代过程这种模式使适应需求的变化更加容易。
5、螺旋模型
1)螺旋模型是一种演化软件开发模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。
2)优点
(1)引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。
(2)螺旋模型更适合大型的昂贵的系统级的软件应用。
6、敏捷开发模型
1)敏捷宣言:即敏捷软件开发宣言,正式宣布了对四种核心价值和十二条原则,可以指导迭代的以人为中心的软件开发方法。(灵敏 快速)
2)工作的软件:工作过程中选择合适的软件
3)要求:
(1)个体和互动 高于 流程和工具 (灵活)
(2)工作的软件 高于 详尽的文档
(3)客户合作 高于 合同谈判
(4)响应变化 高于 遵循计划
三、软件测试过程模型
1、软件测试过程概述
1)软件测试过程是一种抽象模型,用于定义软件测试的流程和方法。
2)测试过程的质量将直接影响测试结果的准确性和有效性。软件测试过程和软件开发过程一样,都遵循软件工程原理,遵循管理学原理。
3)一个标准的软件测试过程中,应当包含以下测试活动:需求分析、测试计划、测试设计、测试执行、测试总结……
4)软件测试流程
(1)获取测试需求
(2)编写测试计划
(3)制定测试方案
(4)开发与设计测试用例
(5)执行测试
(6)提交缺陷报告
(7)测试分析与评审
(8)提交测试总结
(9)准备下一版本测试
2、V模型
1)揭示了开发过程与测试过程中各阶段的对应关系
2)缺点与不足:(测试介入的时间太晚)
(1)V模型仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽略了测试对需求分析、系统设计的验证;
(2)需求的满足情况一直到后期的验收测试才被验证;
(3)没有体现“尽早和不断进行软件测试”的原则。
3、W模型
1)由两个V模型组成,分别表示测试和开发过程,明确表示出了测试与开发的并行关系。
(1)用户需求阶段:验收测试设计
(2)需求分析与系统设计阶段:确认与系统测试设计
(3)概要设计阶段:集成测试设计
(4)详细设计阶段:单元测试设计
(5)编码
(6)集成阶段:集成测试
(7)实施阶段:确认测试与系统测试
(8)交付阶段:验收测试
2)优点:
(1)测试的活动与软件开发同步进行;
(2)测试对象不仅仅是程序,包括需求和设计;
(3)尽早发现软件缺陷可降低软件开发的成本。
3)局限性:
(1)在W模型中,需求、设计、编码等活动被视为串行的,这样就无法支持灵活的迭代。
4、H模型
1)H模型(测试外包):H模型将测试过程完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。
2)图中标注的其他流程可以是任意开发流程,只要测试条件成熟了,图中测试准备活动完成了,测试执行活动即可(或说需要)进行。
3)H模型揭示了一个原理:软件测试是一个独立的流程!
4)H模型指出软件测试要尽早准备,尽早执行,只要某个测试达到准备就绪点,测试执行活动就可以开展,并且不同的测试活动可按照某个次序先后进行,也可反复进行。
5、X模型
1)X模型是对V模型的改进,X模型提出针对单独的程序片段进行相互分离的编码和测试,此后通过频繁的交接,通过继承最终合成为可执行程序。
2)X模型还定位了探索性测试,这是不进行事先计划的特殊类型测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。
3)测试过程(工作独立性)
(1)A:研发团队内部的测试岗位 B:企业内部的独立于研发部门的测试岗位 C:专门的测试外包公司的岗位 D:开发人员自己测试
(2)独立性由高到低:C>B>A>D
6、测试过程理念
1)尽早测试
(1)测试人员早期参与软件项目;
(2)尽早的开展测试执行工作。
2)全面测试
(1)对软件的所有产品进行全面的测试;
(2)软件开发及测试人员(有时包括用户(内测、公测))全面地参与到测试工作中。
3)全过程测试
(1)测试人员要充分关注开发过程;
(2)测试人员要对测试的全过程进行全面的跟踪。
4)独立的、迭代的测试
(1)测试活动式独立的;
(2)测试活动应该是循环往复、不断的进行。
5)问题:一个加法计算器,可进行任意两位整数的加法求和。
(1)当你能确定1+1 1+2 1+3 43+56这些都能计算无误,要不要测试其它更多的数据?
(2)那我们要测试多少个?
整数:MySQL数据库中,占用几个字节?取值范围是多少?
(3)1+2计算正确,要不要进行2+1?要不要测试?要