写点什么

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

  • 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:501271
用户头像

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

关注

评论

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

WebGL开发3D展示软件

北京木奇移动技术有限公司

软件外包公司 webgl开发 3D软件开发

【每日学点HarmonyOS Next知识】span问题、组件标识属性、属性动画回调、图文混排、相对布局问题

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】拖拽调整列表顺序、tab回弹、自定义弹窗this、状态变量修饰枚举

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】顶部状态栏、文本最大行数后缀、弹窗背景、状态栏颜色、导航

轻口味

HarmonyOS HarmonyOS NEXT

京东商品评论API接口全攻略

tbapi

京东API 京东商品评论API 京东评论数据接口 京东评论采集

【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸

轻口味

HarmonyOS HarmonyOS NEXT

NocoBase v1.6.0 正式版发布

NocoBase

开源 低代码 集群 无代码 版本更新

Easysearch 磁盘水位线注意事项

极限实验室

easysearch

查询队列(Query Queue)快速入门

阿里云大数据AI技术

大数据 阿里云 OLAP hologres 查询队列

国产大模型崛起!ERP国产替代破局时刻到来!

用友BIP

智能体 数智化 用友BIP ERP国产替代

KCD 北京站丨Volcano 邀您畅聊云原生智能调度技术与应用

华为云原生团队

云计算 容器 云原生 Volcano

精细化运营成共识,分享三点经验一个模型

奇点云

互联网 运营 数字化

京东商品列表API接口全攻略

tbapi

淘宝API 京东商品列表数据采集 京东商品列表API

【每日学点HarmonyOS Next知识】自定义对话框关闭、WaterFlow嵌套、状态栏颜色、滚动吸附、滚动动效

轻口味

HarmonyOS HarmonyOS NEXT

鸿蒙二十四节气应用

坚果

鸿蒙 HarmonyOS

【每日学点HarmonyOS Next知识】重叠顺序、对话框位置、事件总线、PageMap显示、多表多item类型

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】上下拉刷新、scroll嵌套web、this指向、路由方案、输入法遮挡

轻口味

HarmonyOS HarmonyOS NEXT

AI大模型运维开发探索第四篇:智能体分阶段演进路线

阿里云大数据AI技术

开源 AI 中间件 智能运维 大模型

医疗 AI 劲旅登场,狄耐克鸿蒙智慧医院稳步前行

新消费日报

LED显示屏在数字广告中的应用

Dylan

广告 LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

优秀团队的“双向奔赴”:新晋 Committer 的进化之路

Apache IoTDB

烟草公司×中烟创新 | 同频共振,共赴数字征程

中烟创新

Blackbox.Ai体验:AI编程插件如何提升开发效率

袁袁袁袁满

大模型 ChatGPT AI插件 免费AI工具

【每日学点HarmonyOS Next知识】自定义弹窗背景、状态管理V2实践、底部安全高度、OCR识别结果处理、Grid分割线

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】防止重复点击、对话框收拾拦截、自定义键盘焦点、页面层级、自定义对话框创建

轻口味

HarmonyOS HarmonyOS NEXT

用友BIP数智采购:以AI 驱动的SRM提高采购决策

用友BIP

智能体 数智化 用友BIP 采购

【每日学点HarmonyOS Next知识】swiper样式、日期选择、自定义弹窗键盘、文本组件换行、富文本适配

轻口味

HarmonyOS HarmonyOS NEXT

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