《软件建模与设计》学习笔记(三)——软件生存周期模型和过程
1、瀑布模型是最早被广泛使用的软件生存周期模型。
1.1、瀑布生存周期模型
瀑布模型是一个理想化的过程模型,它规定每一阶段完成后才能启动下一阶段,另外,一个项目在没有迭代和重复的情况下从一个阶段移动到下一个阶段。
1.2、瀑布模型的局限性
(1)软件需求作为软件开发项目中的一个关键因素,无法进行何时的测试,直至一个工作系统被开发出来并能演示给最终用户。
(2)只有在生存周期的后期才能得到一个工作的系统。
1.3、抛弃型原型
有助于阐明用户需求。能用于确定特定的算法是否逻辑正确,或者用于确定它们是否满足性能目标。
1.4、通过增量开发的演化式原型
是增量开发的一种形式,在增量开发中,原型从几个中间步骤的可运行系统逐步演化为可交付系统。该方法可用于确定系统是否满足性能目标,并用于测试设计中所涵盖的关键构件。另外,通过将实现分布在一个较长的时间段内也降低了开发的风险。
1.5、抛弃型原型和增量开发的结合
能够更早地得到一个以演化式原型为形式的工作系统。
注意:从一开始就必须将软件质量考虑进来,而不能将其作为一种事后产物添加进来。特别是,需要仔细地设计软件体系结构并且指明所有的接口。
1.6、螺旋模型
是一个风险驱动的过程模型。旨在涵盖其他生存周期模型。
包含4个象限:
(1)定义目标、候选方法和约束。此次循环的详细计划:确定目标以及用来实现目标的各种候选方法。
(2)分析风险。对当前项目风险进行详细评估;为了减轻风险,计划待执行的活动。
(3)开发产品。进行产品开发,例如需求分析、设计或者编码。
(4)计划下一次循环。对此次循环的成果进行评估,并开始计划下一次循环。
1.7、统一软件开发过程
使用UML表示法的一种用例驱动的软件过程。USDP/RUP是一种基于UML的软件开发过程。
1.7.1、USDP
包含5个核心工作流和4个阶段。USDP是可迭代的。
制品被定义为由一个过程生产、修改或使用的信息。
工作流被定义为生产可观测结果的一系列活动。
阶段被定义为两个里程碑之间的一段时间,再次过程中一组事先定义的开发目标得到了满足,完成了一些制品,同时做出了是否进入下一阶段的决定。
每个工作流及其产物:
(1)需求。需求工作流的产物是用例模型。
(2)分析。分析工作流的产物是分析模型。
(3)设计。设计工作流的产物是设计模型和部署模型。
(4)实现。实现工作流的产物是实现模型。
(5)测试。测试工作流的产物是测试模型。
USDP的生存周期阶段如下:
(1)初始。在初始阶段,制定出达到足够水平的初步想法,用以证明有能力进入细化阶段。
(2)细化。在细化阶段,定义软件体系结构。
(3)构造。在构造阶段,开发出能够发布给用户的软件产品。
(4)交付。在交付阶段,软件被交付给用户。
2、设计验证和确认
软件确认。目标是要确保软件开发团队“构建了正确的系统”。
软件验证。目标是要确保软件开发团队“正确地构建系统”。
2.1、软件质量保证
指一系列确保软件产品质量的活动。重要目标是软件验证和确认。
软件技术评审能够为软件验证和确认带来很大的帮助。
2.2、软件设计的性能分析
在系统实现之前分析软件设计的性能来评估设计是否满足性能目标是十分有必要的。
评估软件设计的方法使用排队模型和模拟模型。
对于并行系统而言,能够使用Petri网来建模和分析并行设计。
在(Gomaa 2000)中描述的一个方法是通过使用实时调度理论来分析实时设计的性能。
3、软件生存周期的活动
软件工程活动将执行以下步骤:
3.1、需求分析和规约
识别和分析用户的需求。
3.2、体系结构设计
一个软件体系结构通过描述构件及其连接的方式,将系统的整体结构与单个构件的内部实现细节进行分离。
3.3、详细设计
定义每一个系统构件的算法细节。
3.4、编码
使用为这个项目所选择的编程语言对每一个构件进行编码。
4、软件测试
在多个阶段都要进行软件测试。
单元测试和集成测试是“白盒”测试方法,需要了解软件的内部知识。
系统测试是基于软件需求规约的“黑盒”测试方法,不需要了解软件内部结构。
4.1、单元测试
表示在单个构件与其他构件进行组合之前对其进行单独的测试。
方法。测试覆盖准则。
测试覆盖准则包括语句覆盖和分支覆盖。
4.2、集成测试
将已测试的单个构件逐步地组合为更复杂的构建组,然后对这些构件组进测试,直到组合成完整的软件系统,同时构件间的接口都已经被测试过。
4.3、系统测试
测试一个经过集成的硬件和软件系统来验证系统是否满足特定需求的一个进程。
需要测试软件系统的几个特征:
功能测试。判定系统执行了需求规约中所描述的功能。
负载(压力)测试。判定当系统运行时是否能够处理计划中的大量的和变化的负载。
性能测试。测试系统满足响应事件的需求。
4.4、验收测试
在验收系统之前,通常在用户安装阶段,用户组织或其代表都会进行验收测试。
5、总结
从软件生存周期的视角讲述软件开发,其中简要描述和对比了不同种类的软件生存周期模型,也被称为软件过程模型。还讨论了设计验证和确认以及软件测试这几项工作所承担的角色。
6、练习
(1)什么是软件生存周期——一个开发软件的阶段性方法
(2)瀑布生存周期模型是什么——一个过程模型,在这个模型中每一个阶段在下一个阶段开始之前完成
(3)下面哪一项表示了瀑布生存周期模型的局限性——除非一个可用的系统被开发完成,否则不适合测试软件需求
(4)下面哪个方法能克服上一个问题中所指出的局限性——抛弃型原型
(5)什么是演化式原型——分阶段软件开发
(6)螺旋模型强调的方法是什么——风险驱动的开发
(7)软件确认的目标是什么——构造正确的系统
(8)软件验证的目标是什么——正确地构造系统
(9)什么是“白盒”测试——使用系统内部知识的测试
(10)什么是“黑盒”测试——不使用系统内部知识的测试