本节书摘来自华章计算机《 测试反模式:有效规避常见的92种测试陷阱》一书中的第2章,第2.1节,作者:(美) donald g. firesmith 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
本章提供了测试陷阱的概要描述,包括可以识别它们的症状。
这些一般测试陷阱不是主要针对任何单一类型的测试。
2.1.1 测试计划和进度陷阱
以下陷阱与测试计划和进度相关:
1.没有单独的测试计划文档(gen-tps-1)
没有单独的针对测试的计划文档,只是在总体计划文档中有不完整的、概要的测试概述。
2.测试计划不完整(gen-tps-2)
测试计划及其相关文档对于系统的开发周期的当前点而言是不够完整的。
3.忽视测试计划(gen-tps-3)
一旦开发和交付时,忽视测试计划文档(也就是说,它被“束之高阁”)。既不使用也不维护。
4.测试用例文档作为测试计划(gen-tps-4)
错误地将记录具体的测试用例的测试用例文档作为测试计划。
5.测试进度安排不足(gen-tps-5)
测试进度不足以完成适当的测试。
6.在结束时测试(gen-tps-6)
所有测试在开发周期后期进行,很少或根本没有对可执行的模块或单元的测试,或在开发周期的早期和中期阶段进行计划或执行的集成测试。
2.1.2 利益相关者参与和承诺的陷阱
以下陷阱与利益相关者参与和承诺测试相关:
7.错误的测试心态(gen-sic-1)
一些测试人员和测试利益相关者有不正确的测试心态,如:测试的目的是为了证明该系统工作正常,而不是确定在何处以及如何失败;验证或“证明”系统是工作的是测试人员的责任;系统被假定为工作,所以没有理由去证明它是不工作的;测试被视为成本中心(即费用),而不是作为一种投资(或可以减少日后开支)。
8.不切实际的测试期望(gen-sic-2)
测试利益相关者(尤其是客户代表和管理人员)有不切实际的测试期望,如:测试检测到所有(或甚至大部分)的缺陷;测试证明没有剩余的缺陷,因此该系统按预期工作;测试是可以为所有实际的目的穷尽的;可以依赖测试做所有验证,即使有些需求通过分析、演示、审查能更好地验证;测试(如果是自动的)将保证测试的质量,并且减少测试工作量。
9.缺乏利益相关者对测试的承诺(gen-sic-3)
利益相关者对测试工作的承诺不充分,没有分配给测试工作足够的资源(例如,人、进度时间、工具或资金)。
2.1.3 管理相关的测试陷阱
以下陷阱与管理上的失误相关:
10.测试资源不足(gen-mgmt-1)
管理层分配给测试的资源不充分,包括进度计划中的测试时间保留不足;充分培训的和有经验的测试人员和评审人员;资金;测试工具、测试环境(例如,集成测试床和测试数据库)和测试设备。
11.不适当的外部压力(gen-mgmt-2)
管理人员和其他有权力的人员施加给测试人员不适当的外部压力。
12.测试相关风险管理不足(gen-mgmt-3)
在项目正式的风险库中测试相关的风险识别得太少,而且那些识别的风险有不恰当的低概率、低严重程度和低优先级。
13.测试度量不足(gen-mgmt-4)
产生、分析、报告并用于决策的测试相关的度量指标太少。
14.忽视不方便的测试结果(gen-mgmt-5)
管理层忽视或轻率对待不方便的负面测试结果(尤其是那些对进度、预算或系统质量造成的负面后果)。
15.忽视测试经验教训(gen-mgmt-6)
忽视以往项目测试的经验教训,且没有在当前项目中付诸实践。
2.1.4 人员配备陷阱
这些陷阱源于这样或那样的人员问题:
16.缺乏独立性(gen-stf-1)
测试组织或项目测试团队缺乏足够的技术、管理和财务上的独立性,使其能够承受从开发(行政和技术)管理来的偷工减料的不当压力。
17.测试职责不清晰(gen-stf-2)
测试职责不清晰,没有充分明确哪些组织、团队和个人要负责和执行不同类型的测试。
18.测试专业技能不足(gen-stf-3)
一些测试人员和测试利益相关者没有足够的测试相关的认识、专业知识、经验或培训。
19.开发人员负责所有测试(gen-stf-4)
没有单独的专职测试人员的角色。相反,开发团队的每个成员负责测试他所设计和实施的。
20.测试人员负责所有测试(gen-stf-5)
测试人员负责所有系统开发过程中的测试。开发人员甚至没有进行单元测试(要么自己的软件,或者他们同伴的)。
2.1.5 测试过程陷阱
这些陷阱都与测试过程而不是执行测试的人相关:
21.测试和工程过程没有集成(gen-pro-1)
测试过程没有充分地集成到整体系统工程过程,而是被视为独立的专业工程活动,仅与主工程活动有有限的接口。
22.一刀切测试(gen-pro-2)
所有测试都以相同的方式进行,同一严格等级,而不管其关键性。
23.测试优先级排序不足(gen-pro-3)
测试优先级排序不足(例如,所有类型的测试具有相同的优先级)。
24.过分强调功能测试(gen-pro-4)
过分强调对功能的测试,而不是对质量、数据和接口需求的测试,以及对架构、设计和实施约束的测试。
25.过分强调黑盒系统测试(gen-pro-5)
过分强调对于需求的一致性的黑盒系统测试,而很少有白盒单元测试和架构、设计与实现验证的集成测试。
26.黑盒系统测试重视不足(gen-pro-6)
过分强调白盒单元测试和集成测试,而很少时间花在黑盒系统测试上以验证是否符合需求。
27.不够成熟进行测试(gen-pro-7)
产品交付测试时是不成熟的,没有准备好进行测试。
28.测试资产的评估不足(gen-pro-8)
测试资产的质量在使用之前没有充分评估。
29.测试资产的维护不足(gen-pro-9)
测试资产没有适当维护(即充分地更新和迭代),因为缺陷发现后,被测系统或软件就改变了。
30.测试作为一个阶段(gen-pro-10)
将测试视作发生在顺序(也称为瀑布)开发周期后期的一个阶段,而不是不断发生在迭代的、增量和并发(进化或者敏捷)开发周期的持续性活动。[6]
31.测试人员早期不参与(gen-pro-11)
测试人员不是在项目开始时参与,而是只当一个实现存在测试时参与。
32.测试不完整(gen-pro-12)
测试人员不适当地没有测试某些可测的行为、特征或系统的组件。
33.没有运行测试(gen-pro-13)
代表用户没有在实际运行条件下对“完成”的系统进行任何运行测试。
34.测试数据不足(gen-pro-14)
测试数据(包括单独的测试数据和测试数据集)是不完整的或无效的。
35.测试类型混淆(gen-pro-15)
一种测试类型的测试用例在另一种测试类型中冗余重复使用,即使测试类型之间有十分不同的目的和范围。
2.1.6 测试工具和环境陷阱
这些陷阱都与用于执行测试的工具和环境相关:
36.过度依赖手动测试(gen-tte-1)
测试人员过度依赖手动测试,使得大多数的测试是手动进行的,没有足够的测试工具或者测试脚本的支持。
37.过度依赖测试工具(gen-tte-2)
测试人员和其他测试利益相关者过多依赖商用现成品(cots)和自主开发的测试工具。
38.目标平台太多(gen-tte-3)
测试团队和测试人员没有充分准备好来测试将要在众多目标平台(例如,硬件、操作系统和中间件)上运行的应用程序。
39.目标平台难以访问(gen-tte-4)
当目标平台没有设计成允许测试时访问时,测试人员没有准备好进行充分的测试。
40.测试环境不足(gen-tte-5)
没有足够的测试工具、测试环境或测试床、测试实验室或设备,所以在进度和人员的限制内不能进行充分的测试。
41.测试环境的保真度差(gen-tte-6)
测试人员建立和使用的测试环境或测试床对于被测软件或系统(sut)的运行环境的保真度差,这将导致不确定或者不正确的测试结果(假阳性和假阴性结果)。
42.测试环境质量不足(gen-tte-7)
一个或多个测试环境的质量由于缺陷数量过多而不足。
43.测试资产未交付(gen-tte-8)
开发人员交付给维护人员的系统或软件没有相关的测试资产。例如,既不要求也不计划交付测试资产(如测试计划、测试报告、测试用例、测试神谕、测试驱动程序或脚本、测试桩和测试环境)。
44.测试配置管理不足(gen-tte-9)
测试工作产品(例如,测试用例、测试脚本、测试数据、测试工具和测试环境)都没有进行配置管理(cm)。
45.开发人员忽视可测性(gen-tte-10)
因为开发人员在设计和实现他们的系统或软件时不考虑测试,那么开发自动化测试就有不必要的困难。
2.1.7 测试沟通陷阱
这些陷阱都与测试沟通不畅相关:
46.架构或设计文档不足(gen-com-1)
架构人员和设计人员制作的架构或设计文档(例如,模型和文档)不足以支持白盒(结构)单元测试和集成测试。
47.缺陷报告不足(gen-com-2)
测试人员和其他人员创建的缺陷报告(也称为错误和故障报告)是不完整的、包含不正确的信息或难以阅读。
48.测试文档不足(gen-com-3)
测试人员创建的测试文档不完整或包含不正确的信息。
49.没有维护源文档(gen-com-4)
开发人员没有妥善维护需要作为开发测试的输入的需求规格书、架构文档、设计文档和相关模型。
50.关于测试的沟通不足(gen-com-5)
测试人员和其他测试利益相关者的关于测试的口头和书面沟通不足。
2.1.8 需求相关测试陷阱
这些陷阱都与差劲的需求对测试造成的负面后果相关:
51.需求含糊不清(gen-req-1)
测试人员曲解了大量模糊的需求,从而基于对需求的不正确理解进行测试。
52.需求过时(gen-req-2)
测试人员浪费精力和时间测试被测系统或软件(sut)是否正确实现了许多过时的需求。
53.需求遗漏(gen-req-3)
测试人员忽略了许多未文档化的需求,因此没有计划、开发或执行相关忽略的测试用例。
54.需求不完整(gen-req-4)
测试人员无法检测到很多需求是不完整的。因此,他们开发并运行相应的不完整或不正确的测试用例。
55.需求不正确(gen-req-5)
测试人员无法检测到很多需求是不正确的,因此开发并运行了相应的不正确的测试用例,产生假阳性和假阴性的测试结果。
56.需求扰动(gen-req-6)
测试人员浪费大量时间和精力基于许多不足够稳定的需求开发和运行测试用例,并且因此在交付之前变更一次或更多。
57.不恰当的衍生需求(gen-req-7)
测试人员基于不恰当衍生需求进行测试,导致测试用例遗漏、错误抽象级别的测试用例、基于没有修改就分配到多个架构组件的相互交叉的需求的不正确的测试用例。
58.未指定验证方法(gen-req-8)
测试人员(或其他开发人员)未就每个需求正确地指定验证方法,从而导致使用不必要的低效或无效的验证方法对需求进行验证。
59.缺乏需求跟踪(gen-req-9)
测试人员不跟踪需求到单个测试或测试用例,从而使得不必要地难以确定测试是否不足或过量。