软件测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试仅处于编码之后、运行维护阶段之前,是软件产品交付用户使用之前软件质量保证的最后手段。这是一种误导,我们已经在“ 第1回 V模型,我的完整诠释”作了很好说明,软件生命周期每一阶段中都应包含测试,从静态测试到动态测试,要求检验每一个阶段的成果是否符合质量要求和达到定义的目标,尽可能早的发现错误并加以修正。如果不在早期阶段进行测试,错误的不断扩散、积累常常会导致最后成品测试的巨大困难、开发周期的延长、开发成本的剧增等等。
事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要通过测试来发现,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分,一直伴随着软件开发走过了半个多世纪。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。
一般规范的软件测试流程包括项目计划检查、测试计划创建、测试设计、执行测试、更新测试文档,而SQA的活动可总结为:协调度量、风险管理、文档检查、促进/协助流程改进、监察测试工作。它们的相同点在于二者都是贯穿整个软件开发生命周期的流程。
软件质量保证(SQA)的职能是向管理层提供正确的可视化的信息,从而促进与协助流程改进。SQA还充当测试工作的指导者和监督者,帮助软件测试建立质量标准、测试过程评审方法和测试流程,同时通过跟踪、审计和评审,及时发现软件测试过程中的问题,从而帮助改进测试或整个开发的流程等,因此有了SQA,测试工作就可以被客观的检查与评价,同时也可以协助测试流程的改进。
而测试为SQA提供数据和依据,帮助SQA更好地了解质量计划的执行情况、过程质量、产品质量和过程改进进展,从而使SQA更好地做好下一步工作。
它们的不同之处在于SQA侧重对流程中过程的管理与控制,是一项管理工作,侧重于流程和方法。而测试是对流程中各过程管理与控制策略的具体执行实施,其对象是软件产品(包括阶段性的产品),即测试是对软件产品的检验,是一项技术性的工作。测试,常常被认为是质量控制的最主要手段。但是,随着时间的推移,软件质量保证和软件质量控制之间的界限越来越模糊了,两者合二为一。也就是说,软件测试是SQA中的重要手段,SQA的主要功能在软件测试中得到体现,集中在静态测试中,两者的关系越来越紧密,已无法分开。
版权所有,软件测试演义® ——系列讨论的目录,见: 软件测试演义——中高级系列(序)