我的观点是,测试计划是由很多困难的决定所组成,这些决定包括人员组织安排、机器资源配置、测试设计的时间定位、测试支持代码的数量、哪些测试要做自动化,等等。这些决定应根据单独的交接中的内容信息来作出。如果仅有一次交接,那么你可以更顺利一些。测试计划还应继续考虑以下问题:
1. 风险分析,谁会因此受到损害,以什么方式?
2. 选定一种测试途径来定位特定的风险。
3. 对测试设计和执行的周期和成本进行估计。
4. 在项目进度上的特定位置,将计划纳入执行的行动:
A)开始对测试进行设计…
B)… 同时设计和创建一些支持测试的代码…
C)… 在全部测试完成以前就执行部分的测试,因为可能存在不只一次的交接,在每一次交接的测试规划中,可能存在一些潜在的复杂的相互影响。工作安排不得不进行一些调整以达到相互间的平衡。测试支持代码和工具需要在各项任务中得到共享。你还必须考虑到在什么程度上让那些为早先的交接所设计的测试在以后重新执行,等等。
这看起来很复杂。看上去似乎有太多的内容需要跟踪,而且太多的内容可能被忽略。也许你认为我是在要求你要对每一次交接来执行IEEE 829 [IEEE98]中关于测试计划的要求,然后把它们合并为一份贯穿整个项目的针对交接进行测试的测试计划。
是,也不是。思考问题总是要占用时间的。太多的计划可能会减少结果的产出。在有些时候,你需要做的是停止计划并开始行动。例如,你无法思考并描述每一个bug修复,尽管bug修复也是一种交接。
但是bug修复是实际工作中现实存在的问题。总体项目计划中应该包含bug修复。需要强调的是,你应该有一个默认的bug修改处理的标准过程,该过程应包括运行于每一个提交的bug修复的验证过程。你还需要努力地去思考问题。很多时候,各项验证是被放在一起同时进行并完成的。
比较现实地来说,一个模型应该允许一些机械式行为,例如,“不管是哪一个X类型的交接,都要执行下列操作”。同时我们鼓励对特定的交接执行刚刚够的检查,对于风险越小的交接,就越可以采用机械式的测试行为。
一个明确考虑到基本的测试现实的模型肯定会比忽略这些现实或者把你的工作复杂性完全抽象化的模型做得更好。文档则是另一个例子。
我还没有提到需求及规格说明书,或者设计文档。某个交接中产生的一系列变化会引起很多争议。这些文档所扮演的角色是什么呢?它们常常是这么被使用的:
图2 测试中对开发文档的利用