你要对系统中
![](/icons/13726de.gif)
哪个部分先进行测试?前置测试模型可以帮助你优化这些次序
![](/icons/13726dou.gif)
管理项目级
![](/icons/13726de.gif)
计划并驾驭项目风险
![](/icons/13726dou2.gif)
虽然大多数人都认同模型
![](/icons/13726de.gif)
重要性
![](/icons/13726dou.gif)
但在开发周期中
![](/icons/13726dou.gif)
测试模型并没有受到应有
![](/icons/13726de.gif)
关注
![](/icons/13726dou2.gif)
V模型是最广为人知
![](/icons/13726de.gif)
测试模型
![](/icons/13726dou.gif)
不过很多测试人员仍对V模型不是很了解
![](/icons/13726dou2.gif)
V模型还受到很多质疑
![](/icons/13726dou.gif)
其中Brian Marick(
![](/icons/13726smhl.gif)
The Craft of Software Testing9 (Prentice Hall, 1995)
![](/icons/13726smhr.gif)
![](/icons/13726yi.gif)
书
![](/icons/13726de.gif)
作者就曾对V模型提出过
![](/icons/13726yi.gif)
些中肯
![](/icons/13726de.gif)
批评
![](/icons/13726dou2.gif)
在本系列
![](/icons/13726de.gif)
第 2篇中
![](/icons/13726dou.gif)
我们讨论了X模型
![](/icons/13726dou.gif)
该模型覆盖了Marick
![](/icons/13726de.gif)
意见
![](/icons/13726dou.gif)
并由此形成了
![](/icons/13726yi.gif)
个相适
![](/icons/13726de.gif)
测试模型
![](/icons/13726dou.gif)
而在第
![](/icons/13726yi.gif)
篇中
![](/icons/13726dou.gif)
我们已经讨论了V模型
![](/icons/13726dou2.gif)
在第 3篇文章中
![](/icons/13726dou.gif)
我们将V模型和X模型相结合
![](/icons/13726dou.gif)
提出了前置测试模型
![](/icons/13726dou.gif)
该模型沿用了前者
![](/icons/13726de.gif)
长处
![](/icons/13726dou.gif)
同时又尽量弥补了前者
![](/icons/13726de.gif)
不足
![](/icons/13726dou2.gif)
在本文中
![](/icons/13726dou.gif)
我们将介绍说明实行“测试驱动开发”所能带来
![](/icons/13726de.gif)
益处
![](/icons/13726dou2.gif)
前置测试
![](/icons/13726de.gif)
计划
附图“
![](/icons/13726yi.gif)
个复杂
![](/icons/13726de.gif)
标准”描述
![](/icons/13726de.gif)
是IEEE标准829-1998中提供
![](/icons/13726de.gif)
测试计划
![](/icons/13726de.gif)
概念性结构
![](/icons/13726dou2.gif)
然而
![](/icons/13726yi.gif)
些批评家曾认为该标准并不切合实际情况
![](/icons/13726dou.gif)
仅仅是书面出版物而已
![](/icons/13726dou2.gif)
![](\"/A-A-B/Image/2005/08/1203/testdriven4-1.g<img)
\" width=\"500\" alt=\"\"/>
图1
![](/icons/13726yi.gif)
个复杂
![](/icons/13726de.gif)
文档计划结构
从图中可以看到
![](/icons/13726dou.gif)
该标准将测试计划分为多个区别
![](/icons/13726de.gif)
层次
![](/icons/13726dou.gif)
其中也包括个人文档部分
![](/icons/13726dou.gif)
这些文档可以作为整个较大规模
![](/icons/13726de.gif)
文档
![](/icons/13726dou.gif)
即单独
![](/icons/13726de.gif)
测试计划(例如单元测试计划)
![](/icons/13726de.gif)
组成部分
![](/icons/13726dou2.gif)
而主测试计划则最终可以成为项目计划
![](/icons/13726de.gif)
![](/icons/13726yi.gif)
个组成部分
![](/icons/13726dou2.gif)
我们将逐层往下看
![](/icons/13726dou.gif)
并探讨
![](/icons/13726yi.gif)
下这些层次是否真
![](/icons/13726de.gif)
对我们
![](/icons/13726de.gif)
工作有帮助
![](/icons/13726dou2.gif)
主测试计划组合了
![](/icons/13726yi.gif)
整套
![](/icons/13726de.gif)
测试计划
![](/icons/13726dou.gif)
该计划主要考虑
![](/icons/13726de.gif)
是
![](/icons/13726dou.gif)
系统作为
![](/icons/13726yi.gif)
个整体时必须正常运作
![](/icons/13726dou2.gif)
通常
![](/icons/13726dou.gif)
在
![](/icons/13726yi.gif)
个分计划(详细计划)中应描述相应
![](/icons/13726de.gif)
单元测试、集成测试、特殊测试及系统测试
![](/icons/13726dou2.gif)
其中
![](/icons/13726dou.gif)
特殊测试是
![](/icons/13726yi.gif)
种综合性
![](/icons/13726de.gif)
测试
![](/icons/13726dou.gif)
而并不是被应用所驱动
![](/icons/13726de.gif)
那种测试
![](/icons/13726dou.gif)
可以是诸如压力测试、安全性测试或者可用性测试等等
![](/icons/13726dou2.gif)
相应地
![](/icons/13726dou.gif)
在各分测试计划中
![](/icons/13726dou.gif)
分别组合了各自
![](/icons/13726de.gif)
![](/icons/13726yi.gif)
套性能或功能
![](/icons/13726dou.gif)
以确保相关
![](/icons/13726de.gif)
单元测试、集成测试、特殊测试及系统测试内容能够正常运作
![](/icons/13726dou2.gif)
对于每
![](/icons/13726yi.gif)
个性能和功能来说
![](/icons/13726dou.gif)
![](/icons/13726yi.gif)
份测试设计介绍说明可以对如何验证其正常运作进行了描述
![](/icons/13726dou2.gif)
每
![](/icons/13726yi.gif)
份测试用例
![](/icons/13726de.gif)
设计介绍说明都要标明相关性能或功能是如何工作
![](/icons/13726de.gif)
![](/icons/13726dou2.gif)
测试计划结构带来了很多
![](/icons/13726de.gif)
益处
![](/icons/13726dou2.gif)
虽然很多测试人员认为IEEE标准提供了大量冗余
![](/icons/13726de.gif)
文档
![](/icons/13726dou.gif)
这些文档并没有太多价值
![](/icons/13726dou.gif)
但我们并不这么认为
![](/icons/13726dou2.gif)
我们并不反对象X模型中所提倡
![](/icons/13726de.gif)
写完即交付
![](/icons/13726de.gif)
测试计划文档
![](/icons/13726dou.gif)
但我们更提倡记录重要
![](/icons/13726de.gif)
测试计划信息
![](/icons/13726dou.gif)
并将其作为容易记忆
![](/icons/13726de.gif)
内容
![](/icons/13726dou.gif)
进行充分
![](/icons/13726de.gif)
共享和重复利用
![](/icons/13726dou.gif)
以及对其进行持续改进
![](/icons/13726dou2.gif)
对很多人来说
![](/icons/13726dou.gif)
测试计划主要是对测试用例
![](/icons/13726de.gif)
收集整理
![](/icons/13726dou.gif)
但收集起来后文档可能会变得很大
![](/icons/13726dou.gif)
很难进行管理
![](/icons/13726dou2.gif)
其实从图中可以看到
![](/icons/13726dou.gif)
标准结构可以帮助组织和管理测试用例
![](/icons/13726dou.gif)
由此也体现了该结构所具有
![](/icons/13726de.gif)
直接
![](/icons/13726de.gif)
价值
![](/icons/13726dou2.gif)
我们应提前定义好可重用
![](/icons/13726de.gif)
测试设计介绍说明
![](/icons/13726dou.gif)
确定如何在通用
![](/icons/13726de.gif)
情形下进行测试
![](/icons/13726dou2.gif)
这些介绍说明可以防止大量
![](/icons/13726de.gif)
重复工作
![](/icons/13726dou.gif)
使我们能顺利开展可靠
![](/icons/13726de.gif)
测试
![](/icons/13726dou.gif)
而不至于造成时间上
![](/icons/13726de.gif)
延误
![](/icons/13726dou2.gif)
同样地
![](/icons/13726dou.gif)
该结构可以帮助我们定义好可重用
![](/icons/13726de.gif)
测试用例及可选择
![](/icons/13726de.gif)
资源分配
![](/icons/13726dou2.gif)
另外
![](/icons/13726dou.gif)
该结构和测试设计介绍说明将有助于在必要
![](/icons/13726de.gif)
时候重复创建测试用例
![](/icons/13726dou2.gif)
前置内容
![](/icons/13726de.gif)
优先级划分
风险
![](/icons/13726de.gif)
优先级划分是任何测试思路方法
![](/icons/13726de.gif)
![](/icons/13726yi.gif)
个组成部分
![](/icons/13726dou.gif)
在V模型和X模型中却都没有进行明确
![](/icons/13726de.gif)
定义
![](/icons/13726dou2.gif)
而我们使用
![](/icons/13726de.gif)
前置风险分析思路方法则要比我们所见过
![](/icons/13726de.gif)
其它思路方法都有效得多
![](/icons/13726dou2.gif)
前置测试可以从2个途径来改进测试
![](/icons/13726dou2.gif)
其
![](/icons/13726yi.gif)
![](/icons/13726dou.gif)
传统思路方法
![](/icons/13726yi.gif)
般会把风险定位到每
![](/icons/13726yi.gif)
个测试上
![](/icons/13726dou.gif)
由于没有对比
![](/icons/13726dou.gif)
因此每
![](/icons/13726yi.gif)
项测试都成了高风险
![](/icons/13726dou2.gif)
有了前置测试计划结构后
![](/icons/13726dou.gif)
就可以很快地揭示可选项
![](/icons/13726dou.gif)
这样即可从选项中区分其优先级别
![](/icons/13726dou2.gif)
其 2
![](/icons/13726dou.gif)
我们可以排除那些常用
![](/icons/13726de.gif)
评定测试风险等级
![](/icons/13726de.gif)
技术
![](/icons/13726dou.gif)
显然
![](/icons/13726dou.gif)
对于那些被忽略
![](/icons/13726de.gif)
测试
![](/icons/13726dou.gif)
不会有风险加到这些测试上面
![](/icons/13726dou.gif)
但忽略这些测试本身常常就是最大
![](/icons/13726de.gif)
风险
![](/icons/13726dou2.gif)
相应地
![](/icons/13726dou.gif)
前置风险分析可以使我们确定传统思路方法所忽视
![](/icons/13726de.gif)
紧要
![](/icons/13726de.gif)
风险
![](/icons/13726dou.gif)
然后定义好有关
![](/icons/13726de.gif)
测试以避免这些风险
![](/icons/13726de.gif)
出现
![](/icons/13726dou2.gif)
当我们在各个区别层次上使用前置测试计划
![](/icons/13726de.gif)
时候
![](/icons/13726dou.gif)
其中最重要
![](/icons/13726de.gif)
任务就是在主测试计划中列入项目级风险
![](/icons/13726de.gif)
识别及其处理
![](/icons/13726de.gif)
优先级排定
![](/icons/13726dou2.gif)
特别要指出
![](/icons/13726de.gif)
是
![](/icons/13726dou.gif)
这
![](/icons/13726yi.gif)
前置技术可以帮助我们预见到很多常见
![](/icons/13726de.gif)
突发事件
![](/icons/13726dou2.gif)
其实每个开发人员都能列举出很多使项目停顿
![](/icons/13726de.gif)
意想不到
![](/icons/13726de.gif)
事件
![](/icons/13726dou.gif)
而且这些事件往往是发生在项目实施
![](/icons/13726de.gif)
前后
![](/icons/13726dou2.gif)
在和
![](/icons/13726yi.gif)
个项目团队(Team)协同工作时
![](/icons/13726dou.gif)
我们总是可以发现他们
![](/icons/13726yi.gif)
直在试图使用前置风险分析思路方法来确定大量潜在
![](/icons/13726de.gif)
突发事件
![](/icons/13726dou.gif)
而有关
![](/icons/13726de.gif)
报告指出
![](/icons/13726dou.gif)
传统
![](/icons/13726de.gif)
项目和测试计划往往会忽视多达75%
![](/icons/13726de.gif)
突发事件
![](/icons/13726dou2.gif)
![](/icons/13726yi.gif)
旦我们确定了风险
![](/icons/13726dou.gif)
并对风险划分了优先级别
![](/icons/13726dou.gif)
我们就可以定义哪些系统部分需要优先进行测试
![](/icons/13726dou2.gif)
这些部分往往和组织中原先计划好
![](/icons/13726de.gif)
次序有所区别
![](/icons/13726dou2.gif)
然而通常
![](/icons/13726de.gif)
开发计划
![](/icons/13726de.gif)
目
![](/icons/13726de.gif)
是要开发整个
![](/icons/13726chengxu.gif)
![](/icons/13726dou.gif)
所以常常会以工作执行顺序来做计划
![](/icons/13726dou.gif)
而前置测试模型定义了出现在高风险区
![](/icons/13726de.gif)
系统
![](/icons/13726de.gif)
部件--单元或集成
![](/icons/13726de.gif)
测试
![](/icons/13726dou2.gif)
让测试驱动开发
![](/icons/13726dou.gif)
就要优先对这些部分进行开发
![](/icons/13726dou2.gif)
优先创建并测试这些高风险
![](/icons/13726de.gif)
部分可以帮助开发人员在付出额外劳动的前就能抓住问题所在
![](/icons/13726dou2.gif)
如果能对特殊测试给予应有
![](/icons/13726de.gif)
重视
![](/icons/13726dou.gif)
则效果将会更好
![](/icons/13726dou2.gif)
特殊测试还有益于详细测试
![](/icons/13726de.gif)
结果
![](/icons/13726yi.gif)
致性
![](/icons/13726dou.gif)
这比在系统测试 (例如负载测试和安全性测试)中进行更好
![](/icons/13726dou.gif)
另外风险分析还可以避免忽略其它
![](/icons/13726de.gif)
测试(例如培训、文档和操作示范
![](/icons/13726chengxu.gif)
![](/icons/13726de.gif)
测试)
![](/icons/13726dou2.gif)
这样
![](/icons/13726dou.gif)
每
![](/icons/13726yi.gif)
次创建可以包含传统思路方法需要同时通过单元、集成和系统测试后才能包含
![](/icons/13726de.gif)
成分
![](/icons/13726dou2.gif)
![](/icons/13726yi.gif)
个基本
![](/icons/13726de.gif)
A-B-C例子
为了感受
![](/icons/13726yi.gif)
些测试驱动开发
![](/icons/13726de.gif)
模式
![](/icons/13726dou.gif)
让我们看
![](/icons/13726yi.gif)
个简单
![](/icons/13726de.gif)
例子
![](/icons/13726dou2.gif)
假设我们有
![](/icons/13726yi.gif)
个系统
![](/icons/13726dou.gif)
包含了A、B和C 3个
![](/icons/13726chengxu.gif)
![](/icons/13726dou.gif)
系统按A-B-C顺序执行
![](/icons/13726dou2.gif)
表面上看
![](/icons/13726dou.gif)
![](/icons/13726chengxu.gif)
![](/icons/13726de.gif)
开发和测试可能都会以同样
![](/icons/13726de.gif)
顺序进行
![](/icons/13726dou2.gif)
但是
![](/icons/13726dou.gif)
我们
![](/icons/13726de.gif)
风险分析揭示
![](/icons/13726dou.gif)
B和C的间
![](/icons/13726de.gif)
集成会产生最大
![](/icons/13726de.gif)
风险
![](/icons/13726dou2.gif)
因此
![](/icons/13726dou.gif)
B
![](/icons/13726chengxu.gif)
和C
![](/icons/13726chengxu.gif)
应该首先创建并优先进行单元测试
![](/icons/13726dou2.gif)
由于在B和C中发现
![](/icons/13726de.gif)
问题可能会影响到A
![](/icons/13726dou.gif)
所以在A开发的前发现这些问题可以有助于避免A中某些部分
![](/icons/13726de.gif)
重写
![](/icons/13726dou2.gif)
下
![](/icons/13726yi.gif)
个高风险是A
![](/icons/13726chengxu.gif)
中
![](/icons/13726de.gif)
通讯能力
![](/icons/13726dou2.gif)
在传统方式
![](/icons/13726de.gif)
开发计划中
![](/icons/13726dou.gif)
我们会将A作为
![](/icons/13726yi.gif)
个整体进行开发
![](/icons/13726dou.gif)
然后进行单元测试
![](/icons/13726dou.gif)
但作为
![](/icons/13726yi.gif)
个整体来看
![](/icons/13726dou.gif)
A可能很庞大
![](/icons/13726dou.gif)
比较难以进行测试
![](/icons/13726dou.gif)
查找问题和修改
![](/icons/13726cuowu.gif)
![](/icons/13726dou2.gif)
因此我们可以将A分成为2个单元
![](/icons/13726dou.gif)
其中
![](/icons/13726yi.gif)
个专门处理通讯功能
![](/icons/13726dou.gif)
另
![](/icons/13726yi.gif)
个则处理剩余
![](/icons/13726de.gif)
其它功能
![](/icons/13726dou.gif)
这样我们就可以更快地针对通讯能力进行测试
![](/icons/13726dou.gif)
同时
![](/icons/13726dou.gif)
其它
![](/icons/13726de.gif)
问题也相对更容易被发现和修改
接着
![](/icons/13726dou.gif)
我们需要对A
![](/icons/13726chengxu.gif)
![](/icons/13726de.gif)
2个组成部分进行集成测试
![](/icons/13726dou.gif)
以确保这2个部分能正确地组合在
![](/icons/13726yi.gif)
起
![](/icons/13726dou2.gif)
最后
![](/icons/13726dou.gif)
既然B-C以及A
![](/icons/13726de.gif)
内部组成部分
![](/icons/13726de.gif)
集成测试已经完成
![](/icons/13726dou.gif)
我们可以引入并处理第 3个风险
![](/icons/13726dou.gif)
即对全部3个
![](/icons/13726chengxu.gif)
![](/icons/13726de.gif)
集成所进行
![](/icons/13726de.gif)
测试
![](/icons/13726dou2.gif)
需要注意
![](/icons/13726de.gif)
是
![](/icons/13726dou.gif)
前置测试模型并没有规定测试要按怎样
![](/icons/13726de.gif)
特定顺序来进行
![](/icons/13726dou2.gif)
它可以指导我们基于每个项目
![](/icons/13726de.gif)
特殊性来排定开发和测试
![](/icons/13726de.gif)
计划
![](/icons/13726dou.gif)
由此可以快速而低成本地达到项目
![](/icons/13726de.gif)
预期结果:高质量
![](/icons/13726de.gif)
软件Software
![](/icons/13726dou2.gif)
使用过前置测试模型
![](/icons/13726de.gif)
开发人员可以很快地想起该思路方法曾帮助他们避免问题
![](/icons/13726de.gif)
固有优越性
![](/icons/13726dou2.gif)
他们也知道这些问题常常就是项目延期、超预算
![](/icons/13726de.gif)
主要原因
![](/icons/13726dou2.gif)
当项目经理(project manager)和开发人员意识到前置测试是如何帮助他们认识到那些风险及其规避思路方法
![](/icons/13726de.gif)
时候
![](/icons/13726dou.gif)
他们将欣然接纳具备如此多
![](/icons/13726de.gif)
内在价值
![](/icons/13726de.gif)
前置测试所带给他们
![](/icons/13726de.gif)
满意成果
延伸阅读
最新评论