写点什么

工具能帮助我们减少测试驱动开发的工作量吗?

  • 2008-01-30
  • 本文字数:1076 字

    阅读完需:约 4 分钟

随着像 Agitar One Parasoft’s JTest 这样高质量测试代码生成工具的出现,很多人开始质疑,是否还有必要手动编写测试代码? Bob(Martin)大叔深入剖析了这种想法的弱点,给了它重重一击。

这些工具是被设计用于检查已有代码块的,它将以分支、循环等为基础,综合生成一套针对代码的观测报告,开发者可以通过审查这些报告,选择为自己关心的部分 生成整套的测试用例。对于遗留代码,这种方式是了解已有行为的一种非常有效的方式,让开发者可以在进行改变之前,先创建一张安全网。

然而,任何技术都是有限制的:这些工具只是针对代码生成一套观察报告,它们并不能理解算法或是开发者的意图。下面是来自 Bob 的说明:

作为一个简单的示例,我试着使用两款知名的测试生成工具来为保龄球游戏程序生成测试代码。保龄球游戏的接口看上去是这样的:

public class BowlingGame {<br></br> public void roll(int pins) {...}<br></br> public int score() {...}<br></br> } 设计思想是:在每次投球后调用 roll 方法,在游戏结束后调用 score 方法得到本次游戏的得分。 显而易见,测试生成器并不能随机生成有效的游戏。一次有效的游戏应该是一个有 12 到 21 次投球的序列,每次投球得分应该在 0 到 10 之间,还有什么?那就是 在每一格内,投球的得分总数不能超过 10,对于处在目前阶段的随机生成器来说,要实现这些约束条件确实太困难了。

另一个方面,测试驱动开发(TDD)要求先写测试、再写产品代码的工作方法与众不同。TDD 能起到作用,那是因为它会对开发 人员编写的代码进行即时的反馈。在做出任何小修改后,只要运行测试,开发者就可以知道这些改变是否正确;TDD 确保了代码与我们通过测试代码表达的意图是 相匹配的;TDD 让我们以一个消费者、而不仅仅是创造者的角度来思考如何设计代码,它让我们针对每一个条件和回路进行思考;而且,就像 James Carr 提到的那样, TDD 迫使我们去考虑代码耦合的程度,看看 Bob 对此又是怎么说的:

使用测试生成器破坏了这个原则,因为生成器是以产品代码作为输入来生成测试的,而且因为它是全自动转换的,所以其生成的测试代码也不便于阅读。人类的意图 只是通过产品代码进行了体现,而无法通过阅读所生成的测试代码来获得验证,更无法通过它来确认产品代码是否已经实现了人类的意图。虽然人类会去检查自动生 成的报告,但相比 TTD 而言,这只是一个很被动的行为,远不及 TTD 对于缺陷、设计和意图体现上的洞察力。

……这并不是在说测试代码生成器没有用……我想它们有助于部分标识出大量遗留代码的特性。

查看英文原文 Can Tools Reduce the Effort Involved in Test Driven Development?

2008-01-30 05:501288
用户头像

发布了 90 篇内容, 共 16.8 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

技术分享| 调度平台的好助手-快对讲

anyRTC开发者

音视频 调度 实时消息 快对讲 视频对讲

GaussDB(for Redis)即将亮相华为云快成长直播间,让成本直降75%!

IT资讯搬运工

人工智能’

RPC接口测试技术-websocket 自动化测试实践

霍格沃兹测试开发学社

技术门槛高?来看 Intel 机密计算技术在龙蜥社区的实践 | 龙蜥技术

OpenAnolis小助手

云原生 intel sig 龙蜥技术 机密计算

基于深度学习下的航空领域真空羽流解决方案

GPU算力

云南林职院 x WeLink一站式智慧迎新, 打造西南数字化职校新标杆

IT资讯搬运工

人工智能’

OPPO的航船:小布生命体将驶向怎样的科技彼岸?

脑极体

UI 自动化测试应不应该投入?有没有前途?怎样做最明智?

霍格沃兹测试开发学社

从检测角度思考美燃油管道商遭勒索攻击事件

科技怪咖

阿里云视觉智能开放平台9月特惠来袭

夏夜许游

宿舍全屋智能开发指南

OpenHarmony开发者

OpenHarmony

iOS如何实现验证码登录丨MobTech

MobTech袤博科技

ios xcode

华为云WeLink助力平房区打造智慧政务办公系统

IT资讯搬运工

人工智能’

NFT数字藏品系统开发:怎么开发自己的数字藏品平台?

开源直播系统源码

数字藏品 数字藏品系统软件开发 数字藏品开发 数字藏品系统 数字藏品软件

Python 自动化测试(四)

霍格沃兹测试开发学社

app自动化测试(iOS)元素定位(新手篇)

霍格沃兹测试开发学社

【云原生 | Docker】部署 Django & Nginx & Gunicorn

计算机魔术师

8月月更

Carina 全新版本 v0.11.0 上线!重磅升级不可错过

BoCloud博云

云计算 云原生 #开源

小程序可以在智能设备上运行?

Speedoooo

小程序 物联网 IoT 智能设备 小程序容器

go语言逆向技术之---恢复函数名称算法

科技怪咖

软件测试 | 接口自动化测试,如何实现多套环境的自动化测试?

测试人

软件测试 自动化测试 接口测试 测试开发

设计模式的艺术 第十五章代理设计模式练习(设计一款基于C/S的网络图片查看器,用户只需在图片查看器中输入网页URL,程序将自动将网页所有图片下载到本地。)

代廉洁

设计模式的艺术

漫谈软件成分分析(SCA)安全测试技术

科技怪咖

区块链入局,远程医疗这回“靠谱”了!

旺链科技

区块链 产业区块链 远程医疗 企业号九月金秋榜

云速ERP(WeLink认证版)上线,加速中小微企业数字化经营创新

IT资讯搬运工

人工智能’

Android如何实现自定义短信登录丨MobTech

MobTech袤博科技

android

UI 自动化测试实战(二)| 测试数据的数据驱动

霍格沃兹测试开发学社

pe文件签名信息检测技术

科技怪咖

二进制SCA检测工具---技术短板及应对措施

科技怪咖

MobTech 短信验证REST API

MobTech袤博科技

REST API MobTech袤博科技

Z世代的开学季:华为技能加持,你就是焦点!

最新动态

工具能帮助我们减少测试驱动开发的工作量吗?_研发效能_Mark Levison_InfoQ精选文章