1、引子
一直以来,对单元测试、部件测试、配置项测试、系统测试几个测试阶段理解比较含糊,于是找到相关的标准,梳理下究竟是如何描述和要求的。
有关的标准目前找到的是GJB 2786A、GJB438C、GJB/Z 141-2004.
438C是套文档模板,没有以上的概念,笼统的规定了“软件测试”文档的章节内容。
查看了下,GJB/Z 141-2004引用的是GJB 2786、GJB 438,都是90年代的标准了,按理说已经跟不上时代了,但没能找到更新的替代标准,我仍然用它来梳理一些关于测试方面的理解。后面有替代标准了我再更新自己的知识库。
GJB 2786A替代了GJB 2786-1996,GJB 2786A中大量引用GJB/Z 141-2004,而GJB/Z 141-2004又引用了GJB 2786-1996,真是个奇怪的引用链条。GJB/Z 141-2004的修订太不及时了。
2、GJB 2786A中关于几个测试的要求
单元测试
软件实现:。。。。。。注1:设计中的软件单元与实现它们的代码和数据实体(子程序、过程、数据库、数据文件等)或包含这些实体的计算机文件之间并不一定存在一一对应关系。
单元测试的准备:开发方应为与每个软件单元相对应的软件制定测试计划(包括规定测试需求和进度)、准备测试用例(按照输入、预期的结果和评价准则进行描述)、测试规程和测试数据。测试用例应覆盖该单元详细设计的所有方面。开发方应在相应的软件开发文件(SDF)中记录这些信息。
单元集成和测试
单元集成与测试和准备:开发方应为进行单元集成和测试制定计划,包括规定测试需求、测试策略和进度安排,并准备测试用例(按照输入、预期结果和评价准则进行描述)、测试规程和测试数据。测试用例应覆盖CSCI级设计决策和CSCI体系结构设计的所有方面。
分析和记录单元集成和测试的结果:。。。。。。注1:单元集成和测试是指将两个或两个以上的软件单元所对应的软件集成起来,并测试集成后的软件,以确保它能按设计要求工作,并将这项工作持续到每个CSCI中的所有软件都被集成和测试为止。这种测试的最后一步是开发方内部的CSCI测试。因为软件单元可以由其他软件单元组成,所以有些软件单元的集成与测试工作可以在单元测试期间进行。5.9的要求并不是要重复这些活动。
CSCI合格性测试
CSCI合格性测试的独立性:负责进行CSCI合格性测试的人员不应是从事该CSCI详细设计和实现的人员,但不排除进行CSCI详细设计及实现的人员为该测试过程作贡献,例如,提供一些依赖于该CSCI内部实现知识的测试用例。
在目标计算机系统上进行测试:CSCI合格性测试应在目标计算机系统或在需方批准的替代系统上进行。
CSCI合格性测试的预演:如果CSCI合格性测试要由需方见证,开发方应对测试用例和规程进行预演,以确保它们完备与准确,并确保该软件已经为见证测试做好了准备。开发方应在相应的软件开发文件(SDF)中记录这些活动的结果,并相应地更新CSCI测试用例和规程。
分析并记录CSCI合格性测试的结果:。。。。。。注1:执行CSCI合格性测试是为了向需方证明CSCI的需求已经得到满足。该测试覆盖软件需求规格说明(SRS)和相关的接口需求规格说明(IRS)中对该CSCI的需求。
CSCI/HWCI集成和测试
CSCI/HWCI集成和测试的准备:开发方应参与制定和记录用于执行CSCI/HWCI集成和测试的测试计划,包括规定测试需求、测试策略和进度安排,并参与开发和记录测试用例(按照输入、预期结果及评价准则进行描述)、测试规程和测试数据。测试用例应覆盖系统级设计决策和系统体系结构设计的各个方面。开发方应将与软件有关的信息记录在相应的软件开发文件(SDF)中。
分析和记录CSCI/HWCI集成和测试的结果:。。。。。。注1:CSCI/HWCI集成和测试是指将CSCI与接口连接的HWCI和CSCI集成起来,并测试其组合结果,以确定它们能否按设计要求工作,持续执行这个过程直到该系统中所有的CSCI和HWCI都被集成和测试完成。这种测试的最后一个阶段就是开发方内部的系统测试。注2:CSCI/HWCI集成的每一步结果都是一个层次的系统,每一步集成后的测试相当于整个系统的一个中间层次的局部系统的测试。关于CSCI/HWCI集成测试的进一步要求,参见GJB/Z141-2004中第8章“系统测试”和第9章“回归测试”。
系统合格性测试
系统合格性测试的独立性:负责系统合格性测试的人员不应是从事该系统中软件的设计或实现的人员,但不排除这些人员对系统合格性测试作贡献,例如,提供一些依赖于系统内部实现知识的测试用例。
在目标计算机系统上进行测试:开发方的系统合格性测试应在目标计算机系统上或在经需方批准的替代系统上进行。
系统合格性测试的预演:若要由需方见证系统合格性测试,开发方应参与系统测试用例和规程的预演,以确保它们完备与准确,并确保系统已为见证测试做好准备。开发方应将这项活动中与软件有关的结果记录在相应的软件开发文件(SDF)中,并应参与对系统测试用例与规程作相应的更新。
系统合格性测试的执行:开发方应参与系统合格性测试。这种参与应按照系统测试的计划、用例和规程进行。
分析并记录系统合格性测试的结果:......注1:执行系统合格性测试的目的是为了向需方表明系统需求已经得到满足。这种测试覆盖系统/子系统规格说明(SSS)和相关联的接口需求规格说明(IRS)中的系统需求。注2:关于系统测试的进一步要求,参见GJB/Z141-2004中第8章和第9章。
3、GJB/Z 141-2004
如果是小、微型项目,或安全性关键等级为C、D级项目,测试计划与测试说明可以合并(遗憾才看到这条,早看到之前的几个项目可以少出好几份无用的文档)
单元测试
目的:软件单元测试的目的是检查每个软件单元能否正确地实现设计说明中的功能、性能、接口和其它设计约束等要求,发现单元内可能存在的各种错误。
技术要求:对软件设计文档规定的软件单元的功能、性能、接口等应逐项进行测试;每个软件特性应至少被一个正常测试用例和一个被认可的异常测试用例覆盖;测试用例的输入应至少包括有效等价类值、无效等价类值和边界数据值;在对软件单元进行动态测试之前,一般应对软件单元的源代码进行静态测试;语句覆盖率达到100%;分支覆盖率要达到100%;对输出数据及其格式进行测试。对具体的软件单元,可根据软件测试任务书(合同或项目计划)及软件单元的重要性、安全性关键等级等要求对上述内容进行裁剪。
测试内容:当静态测试时,所测试的内容与选择的测试方法有关。如,采用代码审查方法,通常要对寄存器的使用、程序格式、入口和出口的连接、程序语言的使用、存储器的使用等内容进行检查;采用静态分析方法,通常要对软件单元的控制流、数据流、接口、表达式等内容进行分析。详细内容可参见附录A.1中各种静态测试方法的描述。当动态测试时,通常对软件单元的功能、性能、接口、局部数据结构、独立路径、错误处理、边界条件和内存使用情况进行测试。通常对软件单元接口的测试应先于其它内容的测试。对具体的软件单元,应根据软件测试任务书(合同或项目计划)、软件设计文档的要求及选择的测试方法确定测试的具体内容。
部件测试
测试对象:软件部件的组装过程;组装得到的软件部件。
测试目的:软件部件测试的目的是检验软件单元和软件部件之间的接口关系,并验证软件部件是否符合设计要求。
技术要求:。。。。。。对具体的软件部件,可根据软件测试任务书(合同或项目计划)及软件部件的重要性、安全性关键等级等要求对上述内容进行裁剪。
测试内容:当对软件部件进行必要的静态测试时,所测试的内容与选择的静态测试方法有关。详见5.4.1中的静态测试内容部分。当动态测试时,本指导性技术文件从全局数据结构及软件部件的适合性、准确性、互操作性、容错性、时间特性、资源利用性这几个软件质量子特性方面考虑,确定测试内容。对具体的软件部件,应根据软件测试任务书(合同或项目计划)、软件设计文档的要求及选择的测试方法来确定测试的具体内容。
配置项测试
测试对象:软件配置项测试的对象是软件配置项。软件配置项是为独立的配置管理而设计的并且能满足最终用户功能的一组软件。
测试目的:软件配置项测试的目的是检验软件配置项与软件需求规格说明的一致性。
技术要求:。。。。。。对具体的软件配置项,可根据软件测试任务书(合同或项目计划)及软件配置项的重要性、安全性关键等级等要求对上述内容进行裁剪。
测试内容:本指导性技术文件从GJB5236—2004定义的软件质量子特性角度出发,确定软件配置项的测试内容。即,从适合性、准确性、互操作性、安全保密性、容错性、成熟性、易恢复性、易理解性、易学性、易操作性、吸引性、时间特性、资源利用性、易改变性、稳定性、易测试性、易分析性、适应性、易安装性、易替换性、共存性和依从性方面考虑,确定测试内容。
系统测试
测试对象:系统测试的对象是完整的、集成的计算机系统,重点是新开发的软件配置项的集合。
测试目的:系统测试的目的是在真实系统工作环境下检验完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发任务书规定的要求。
技术要求:。。。。。。
测试内容:本指导性技术文件从GJB5236—2004定义的软件质量子特性角度出发,确定系统测试的测试内容。即,从适合性、准确性、互操作性、安全保密性、容错性、成熟性、易恢复性、易理解性、易学性、易操作性、吸引性、时间特性、资源利用性、易改变性、稳定性、易测试性、易分析性、适应性、易安装性、易替换性、共存性和依从性方面考虑,确定测试内容。
4、点滴感想
本来觉得有些理解了,现在过了下,似乎更迷惑了。
2786A中的单元集成测试,要一直做到开发方内部的CSCI测试,在这里的CSCI测试是算141中的部件测试吗?
2786A中的CSCI与HWCI集成测试,似乎是归于开发方的内部测试,但从测试级别上,在141中算哪种测试呢?按我之前的理解,把它放系统测试阶段,但按现在的理解,系统测试是针对完整系统的整体测试,而CSCI与HWCI的集成测试又是逐个集成的测试,而且是内部测试——“这种测试的最后一个阶段就是开发方内部的系统测试”,和单元集成测试类似。
是否可以这样来理解:在单元集成测试的最后阶段,进行的是内部的CSCI测试;在CSCI于HWCI测试的最后阶段,进行的是内部的系统测试。这两个最后阶段的测试,分别是CSCI合格性测试、系统测试的预研。CSCI合格性测试、系统测试可以使用这两个测试的用例,根据预研进行稍微适应性的修改,再执行一遍给用户看。
还有另外一种情况,CSCI测试、系统测试是由第三方进行的测试,相当于我们交付的产品在交付前当然应该做全面的自测——包括模拟真实应用场景的测试,但作为用户还需要进行用户测试——可能是委托第三方测试——最好是在真实应用场景下的测试。但现在用户可能不亲自找第三方,而是由供应商找一家用户认可的第三方。这么看,这种测试要求是合情合理的。