图2-2 关于软件工程中工作量的经验数据
(数据来自美国国防部)
目前,国内的绝大部分软件公司很难达到每千行代码小于0.01个缺陷的标准,原因如下。
●测试活动多集中在开发的后期阶段,即系统测试前期介入力度不够,职责不明确,且没有一套规范化、系统化的测试过程。
●测试设计和测试执行没有分离。
●一些质量保证活动(如工作产品评估、可跟踪性分析、接口分析、关键性分析等)是零散的、不自觉的行为,既没有进行相应的规划和监控,也无明确的输出。
目前国内软件公司存在的主要问题是测试活动多集中于后期,并且没有明确、清晰、规范的软件测试过程。因此,需要以一套切实可行的测试过程作为理论依据。目前,验证与确认(Verification and Validation,V&V)模型就是使用比较广泛的一种模型。
具体地说,V&V模型用于验证是否做了正确的事情,确认是否把事情做正确了。
●验证:保证软件正确地实现了特定功能的一系列活动。在验证过程中,提供证据,表明软件及相关产品与所有生命周期活动的要求(如正确性、完整性、一致性、准确性等)一致;验证是否满足生命周期过程中的标准、时间和约定;验证为判断每一个生命周期活动是否已经完成以及是否可以启动其他生命周期活动建立的准则。
●确认:保证所生产的软件可追溯到用户需求的一系列活动。在确认过程中,提供证据,表明软件是否满足系统需求(指分配给软件的需求),并解决了相应的问题。
Boehm对V&V的解释如下。
●Verification:Are we building the product rightly?(是否正确地构建了产品?)
●Validation:Are we building the right product?(是否构建了正确的产品?)
基于V&V理论,建立了测试过程双V模型,如图2-3所示。
CMM(Capability Maturity Model,能力成熟度模型)关于过程的要素包括如下几个方面。
●角色(role)。
●入口准则(entry criteria)。
●输入(input)。
●活动(activity)。
●输出(output)。
●出口准则(exit criteria)。
●评审和审计(review and audit)。
●可管理和受控的工作产品(work product managed and controlled)。
●测量(measurement)。
●书面规程(documented procedure)。
●培训(training)。
●工具(tool)。
CMM重视过程的定义和改进,一个过程应该由上面一些或全部要素组成。测试过程的定义也应该包含上面这些部分,包括各阶段输入、输出、入口和出口准则、角色的定义等,本章只就其中的测试阶段划分和输入/输出文档做初步介绍。
如表2-1所示,软件测试主要包括系统测试、集成测试、单元测试3个大的阶段,而每个大阶段又包含4个小阶段,每个小的阶段都有相应的输入、输出、入口和出口准则以及角色的定义。测试阶段的输入/输出如图2-4所示。
表2-1 软件测试阶段的划分