写点什么

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

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

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

关注

评论

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

基于 CoT 协调多 MCP Tool — 智能运维 Redshift

亚马逊云科技 (Amazon Web Services)

YashanDB数据库助力企业构建高效智能数据平台

数据库砖家

Sentieon项目文章 | 泛基因组揭示小麦结构变异与栖息地及育种的关联

INSVAST

Sentieon 变异检测 生信分析服务 小麦 分子育种

基于开发者空间开发平台工作流构建旅行行程规划应用

华为云开发者联盟

人工智能 华为开发者空间 Versatile Agent.

YashanDB数据库中常见的设计模式与应用实例

数据库砖家

YashanDB数据库助力金融行业实现高效数据管理

数据库砖家

qData 数据中台【开源版】发布 1.0.5 版本,全面提升规则治理、非结构化数据处理与部署体验

千桐科技

qData 开源数据中台 Java数据中台 千数平台 数据治理平台

LED显示屏校准流程详解

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

行业分享丨基于SimSolid的大型汽车连续冲压模具刚度分析

Altair RapidMiner

汽车 仿真 CAE SimSolid 无网格仿真

CAD二次开发的费用

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

软件外包公司 CAD二次开发 CAD开发

淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由

StarRocks

阿里巴巴 StarRocks 物化视图 paimon 实时湖仓架构

基于华为开发者空间项目同步能力实现java电商项目部署

华为云开发者联盟

云主机 华为开发者空间 Gitcode

基于华为开发者空间实现花卉识别

华为云开发者联盟

神经网络 CodeArts 华为开发者空间

哈尔滨二级等保办理全流程:从准备到完成的清晰指引

等保测评

哈尔滨二级等保实施重点:安全建设与管理的关键环节

等保测评

筑牢合规防线:AI全流程平台助力烟草企业规范执法

中烟创新

基于仓颉编程语言的四则运算解释器开发秘籍

华为云开发者联盟

CodeArts 仓颉 华为开发者空间

YashanDB数据库中的数据可视化工具应用

数据库砖家

YashanDB数据库中的数据分区与所带来的好处

数据库砖家

YashanDB数据库中的索引优化:提高检索效率的技巧

数据库砖家

构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

华为云开发者联盟

springboot Gauss DB 华为开发者空间

来看低代码平台的“七十二变”

秃头小帅oi

链表操作秘籍—通讯录管理全接触

华为云开发者联盟

数据结构 vscode 链表 华为开发者空间

低代码高效搭建应用,轻松应对多场景需求

引迈信息

微信小程序端智能项目工程化实践

vivo互联网技术

微信小程序 AI 前端 端智能

RFID入场十年,零售为何仍在“试水”

斯科信息

RFID读写器 AI算法RFID门禁 RFID收银系统 RFID通道机 RFID手持终端

YashanDB数据库中的索引策略与设计

数据库砖家

CSS 特异性控制:层叠层 vs. BEM vs. 工具类

qife122

CSS 样式管理

有了 AI 写代码,还缺什么?资深工程师:28 寸专业编程显示器 + Cursor 告别代码疲劳

鸽芷咕

显示器 明基RD320U 编码体验

黑龙江等保测评公司选择关键维度:服务能力与适配性

等保测评

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