在CMM的发展进程中,曾经提议将软件评价与测试(Evaluation and Test)作为CMM的一个KPA加入到CMM中,虽然这一提议最终未获通过,但通过对这一提议的讨论,我们可以得到很多与软件测试相关的一些有益的东西。
一、软件评价与测试在整个软件生命周期中的作用
评价是对软件开发过程中产生的各种系统规格和模型进行的验证活动。测试则是一种基于机器的对代码执行、确认的活动。大部分组织对评价和测试的定义都相对狭义,一般是指对代码执行物理测试用例的活动。事实上,很多公司甚至直到编码已经开始时才指定或安排测试人员。更有甚者,他们将这一活动的范围仅仅限于功能测试,也许有时做一下性能测试。这种观点在目前的CMM有关评价与测试的描述中被进一步强调,这就是SPE,软件产品工程KPA。在SPE KPA活动中,活动5、6、7,仅仅用了基于代码的测试作为例子,只明确地提到了功能测试。其他类型的测试只是用一句非常含糊的话来指代:“保证软件满足软件需求 ”。
另一方面,建造摩天大厦的人们,则远在砌第一块砖之前就将评价和测试集成到了开发过程之中。通过建模来验证稳定性、防水性、照明布置以及电源的需求等等,从而实施评价。而目前,组织所使用软件评价和测试方法就像是设计师一直等到大楼已经建成才进行测试,而此时的测试只是能保证给水和照明可以工作而已。
CMM只是进一步将评价和测试的部分思想进行融合,用一个特殊的评价技术来代替,这个技术就是CMM中的一个KPA,同行评审。这也意味着,在提交代码之前,唯一可干的评价就是同行评审,且已经足够了。事实上,对于一件事情的评价和测试的步骤包括:
(1)定义成功准则;
(2)涉及覆盖这些准则的用例;
(3)执行用例;
(4)验证结果,验证所有的内容都已覆盖。同行评审只是提供了一个基于纸面的测试机制。它既不能从根本上提供成功准则,也不能提供任何正式的机制以支持用例定义以用于同行评审中。同行评审本质是主观的,因此,基于误解使程序员将缺陷引入产品,而到同行评审时,基于同样的误解,也使得人们无法发现这些缺陷。
评价和测试的一个相对坚固的内涵范围必须包括项目在开发周期每一个阶段的每一个交付产品。它也必须考虑每个交付产品的每一个预期特性。而且必须包括每一个评价/测试步骤。下面我们看两个例子:评价需求和对一个设计的评价。
一个需求文档必须是完备的、一致的、正确的和清晰的。那么第一步就是基于项目/产品目标(即为什么要做这个项目的说明)对需求进行确认。这能够保证我们定义了正确的功能集。下一步评价就是遍历use-case脚本走查各功能规则,如果可能的话,最好用一些原型工具(screen prototype)作为辅助工具。第三步评价是有领域专家进行的对文档的同行评审。第四步是由非领域专家进行的正式的含糊性评审(他们无法读懂文档里的功能知识,这将帮助确保各种规则是明确定义的,而不是隐含定义)。第五步评价是将需求转换为布尔逻辑图。这可以鉴别规则之间的顺序问题,同时也能发现漏掉的用例(cases)。第五步评价是在CASE工具的辅助下进行的逻辑一致性检查。第七步评价是由领域专家进行的对测试脚本的评审,这些脚本是从需求导出来的。
对设计的评价一样可以进行一系列补救。一个是对照需求对设计文档进行走查。另一评价是构建一个模型来验证设计的完整性(例如构造一个操作系统的资源分配模式来保证不会发生死锁)。第三种评价是建立模型来验证性能特征。第四种是将形成的设计与其他公司的现成系统进行对比,以确保所设计的配置能够处理预期的处理规模和数据规模。
上面的评价只有一部分