软件测试之魂:核心测试设计精解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 解读测试设计

测试设计,可以理解为它是对测试工作进行有目的、有计划的、创造性的商业活动,这种创造性活动与设计者本身所掌握的测试技术及拥有经验的丰富程度密切相关。测试界大师Glenford J.Myers在《软件测试的艺术》一书中说到“测试是极度富有想象力和高智商的、有挑战性的工作”。实际上,很多既设计又开发软件的人承认,他们通过创造力的软件测试获得了更多艺术上的满足感。

谈起测试设计,大家可能首先想起的就是测试用例的设计,因为无论采用何种方式来测试,测试用例都是离不开的。一个高效的测试用例,如同一面明亮的宝镜,很容易暴露隐藏的Bug。特别当版本稳定,容易发现的Bug很少,余下的都是一些隐藏得很深的偶发严重Bug时,此时再往下挖掘如同大海捞针。由于软件本身的特殊性,以及在实际的项目测试中还要考虑时间与代价,不允许我们做到100%的穷举测试,这也注定了我们不可能把所有的Bug都找出来。这就意味着总有一些Bug还在我们身边。在这个阶段,一个人的Bug敏感度尤显重要,而对Bug的敏感度依赖于过硬的技术积累与极富挑战性的创造性思维。而这种技术的积累与创造性的思维相结合迸发出来的一种思想,往往能带来一种高效地改进现有测试方法或流程的新设计。

测试设计是一个过程,不仅仅是解决某一个问题的方法,它主要包括测试管理的设计以及各种测试技术应用的设计,其中测试管理中的团队管理方法设计与测试流程设计是重中之重,犹如游戏中的游戏规则。

在软测领域,测试方法众多。从了解软件系统内部程序结构的程度不同来看,可分为白盒测试、灰盒测试、黑盒测试;从程序的运行状态来看,有静态测试、动态测试;从测试人员角色来看,可分为手工测试、自动化测试;从测试阶段来划分,又可分为单元测试、集成测试、系统测试、验收测试(包括Alpha测试和Beta测试),等等。而这些方法之间是存在交集的,单元测试属于白盒测试,同时可以是动态测试,也可以是静态测试,如代码走查;集成测试可以归并为灰盒测试,是有静有动的结合体;黑盒测试也属于动态测试。对于这些常见专业名称的解释见附录A(专业名称解释)。在进行测试设计,也就是测试之初进行测试的分析时,在测试方法的选择上,面对林林总总的方法,该选取哪些方法或哪些方法的组合是对测试设计人员的考验与挑战。现假如模块S是整个系统的核心,处于系统架构的中间层,它的逻辑处理复杂,向下与底层的操作系统交互,向上给业务模块提供接口。由于这些特殊性,以及其输入与输出在业务层的表现并不那么透明等特点,最后测试设计人员决定采取如图3-2所示的测试策略,各阶段分别采用不同的测试方法来验证模块以保证它的质量。

图3-2 “业务支持核心层”的测试技术应用设计

通常,一个项目的完整测试过程,它是由多个环节组成的,每个节点的工作重点是什么,该做好哪些工作,哪些环节可以合并,哪些不可以跳过,根据项目的需求与约束,是需要设计(也可理解为策划)的。如图3-3所示是常见的测试阶段与输出流程图。

图3-3 测试阶段与输出

注:图中的实线表示测试环节,虚线为各环节上的输出

测试流程管理的设计,还包括采用什么工具管理测试发现的缺陷,用什么工具来管理测试用例;当一个或多个测试团队一起工作时用例设计的规范如何定义;测试工具的代码、或自动化测试脚本、测试数据生成工具等输出工件如何进行配置管理等,如表3-1所示是一个需纳入流程管理的内容记录示例。

表3-1 测试流程管理的内容

测试过程的设计犹如运筹学中提到的寻求最短路径问题,从起点A出发到达终点Z,中间的路径很多,在每一个中间节点上可以选择分支,也可以在某个节点走直线,权衡利弊而做出最优的选择,这种选择的过程实质就是线路设计的过程。设计服务于过程,过程体现设计,推动着设计的改进,设计与过程是分不开的,测试设计就是一个不断改进的过程。如同马克思主义的实践发展观“实践是不断发展着的,科学的发展来自于不断的实践,实践推动着科学的不断发展”。

测试设计,给测试创新带来机遇,也带来挑战。通常测试设计是针对项目任务提出的解决策略、思路或方法,强调实用性。测试创新,可以是一种思路或一种方法,或一种流程规范,要结合项目任务来体现,以说明它的可行性与价值。测试创新也是一种设计,但这种设计是新的,是没有经过验证的,在得到证实之前,有种摸索的感觉。犹如摸着石头过河,有险情,但险情过后,是难得的喜悦,或者说是创新成功。这样,项目任务成了改革创新的实验田。

小贴士:

测试设计是一个过程,它主要包括测试管理的设计,以及各种测试技术应用的设计,其中测试管理中的团队管理方法设计与测试流程设计是重中之重,犹如游戏中的游戏规则。