过程改进并不是IT行业专有的词汇。自从有质量活动以来,人们就开始广泛地关注过程改进。在著名的Deming循环中,过程改进甚至被赋予了举足轻重的地位。我们知道在这个循环中(即计划、实施、检查、改进循环),过程改进既是一次质量活动的终点,又是下次质量活动的原点,它起着承上启下的作用。Deming循环中过程改进的理念是如此鲜明而且深入人心,以致CMM的起草者,卡内基梅隆大学软件工程研究所直接将它作为成为CMM进行持续过程改进的基本模型。
尽管过程改进已经不再是新的名词,然而,提出软件测试过程改进却是近些年的事情。读者不妨查阅一下IEEE、ISO、CMM或者CMMI。在这些文献中,有关软件测试过程改进的描述少之又少。那么这是不是意味着软件测试就不需要做过程改进了呢?显然不是这样。首先,测试作为质量控制的重要活动,天然属于Deming循环的应用范畴。这是因为Deming循环最初就是针对质量控制而提出的。其次,软件测试真正进入大众的视野也仅仅是近20年间的事,相关的研究工作做得都还不够。
鉴于资料的严重缺乏,本文仅从工程实践的角度,对软件测试过程改进做一个浅显的介绍与探讨,并欢迎读者朋友来信交流。
软件测试过程的提出
在软件作为手工艺品产出的年代,软件过程的概念还没有萌芽,就谈不上软件测试过程了。直到人们意识到必须用工程化的手段来规范软件生产,软件过程才开始广受关注。一些激进的理论家甚至提出“软件工厂”的概念。顾名思义,这个词很形象地表达了人们对软件开发行业的一种“流程化”的愿望:即开发过程遵循一定的开发步骤,各司其职,井然有序,如同流水线作业一般完成软件产品的开发。不错,在工程思想上,它们的生产过程的确有可以类比的地方,不同的是,流水线生产的冰箱、彩电都是有形的,而软件是无形的。
我们假想一下冰箱的生产过程,在冰箱开始组装之前,所需的所有组件都必须采购或生产出来,并且这些组件必须是严格按照要求的大小、规格、质量完成的,这样才能够组装在一起,达到相应的功能和性能指标。如果冰箱的门比柜体高了2厘米或者说某个螺丝的直径小了1毫米,那么这批冰箱是不能正常使用甚至是不能销售的。
假设冰箱质量检查的流程是这样的:明确标准(也就是知道冰箱的柜体的尺寸,冰箱门的尺寸)→验证标准(验证冰箱柜体的尺寸,冰箱门的尺寸是否匹配)→发现不符合的产品(冰箱门比柜体高了2厘米)→采取措施(更换冰箱柜体或者更换冰箱门)→重新验证(确定冰箱门与柜体的尺寸相匹配了)。
软件测试流程与上述冰箱质量检查流程是类似的,一个较为典型的软件测试流程可以这样描述:制定测试计划→撰写测试用例→执行测试用例→记录并提交缺陷→修改缺陷→回归测试。
把两个过程一一对应起来,得到如下映射关系:制定测试计划、撰写测试用例,也就是明确标准,类似于在生产冰箱的时候,需要根据设计图纸、生产程序,零部件样品逐一确定冰箱的零部件检验标准。执行测试用例,也就是验证标准,类似于逐一分解冰箱的零部件,逐一检查生产质量。记录并提交缺陷,也就是发现不符合的产品。这里略有不同,冰箱的零部件一旦被发现不符合标准,就可能被扔进废品堆,软件部件却不会因此全部都被废弃掉。所以详细的记录缺陷的操作步骤、便于开发人员进行缺陷修复是很有必要的。修改缺陷,类似于冰箱生产过程中发现问题后采取措施,可能是图纸设计的时候尺寸标注错误,也可能试生产系统参数设置的错误,还可能是工人操作不当,总之真正的原因是一定要被找到的。回归测试,类似于冰箱返工后的重新验证,一般找到不符合标准的零件原因后,冰箱除更换相关零部件还需经过二次检测。软件产品也是这样,修正缺陷后仍需进行回归测试。