写点什么

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

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

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

关注

评论

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

快速上手TiDB,体验全新的一栈式实时HTAP数据库

TiDB 社区干货传送门

安装 & 部署

TiDB 迁移升级思考

TiDB 社区干货传送门

版本升级 管理与运维 应用适配 7.x 实践

如何使用GPT-4o?GPT-4o 有什么新功能?如何使用 GPT-4o API?如何升级GPT4Plus?

蓉蓉

openai GPT-4 gpt4o

阿里巴巴中国站关键字搜索API返回值研究:电商数据驱动的用户体验优化

技术冰糖葫芦

api 货币化 API 安全 API 文档

和鲸“101数智领航计划”——在武大解码 GeoAI,地理空间智能(GeoAI)学术研讨会及编程工作坊圆满落幕

ModelWhale

人工智能 遥感影像 气象预测 地球科学 地理空间智能

Aloudata 重磅发布《NoETL 开启自动化数据管理新时代》白皮书

Aloudata

数据管理 noetl

数据同步新突破!一招解决文化公司系统对接难题!

聚道云软件连接器

案例分享

星辰资讯:TiDB v8.1.0 发版!稳!

TiDB 社区干货传送门

新版本/特性解读 8.x 实践

深入剖析 Kubernetes 原生 Sidecar 容器

Se7en

一文对比 Amazon Aurora 与 TiDB

TiDB 社区干货传送门

数据库架构选型 数据库架构设计

TiUP 源码初探

TiDB 社区干货传送门

集群管理 管理与运维 安装 & 部署 TiDB 源码解读

TiDB多数派节点故障恢复指南

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 6.x 实践

PingCAP 成为唯一获评 2024 Gartner® Peer Insights™ 云数据库管理系统「客户之选」的中国厂商

先锋IT

程序员转行8大方向,都考虑一下

秃头小帅oi

墨天轮《2023年中国数据库行业年度分析报告》正式发布!

墨天轮

人工智能 数据库 时序数据库 图数据库 向量数据库

深入揭秘 TiDB LTS v8.1.0:为何这次更新是数据管理者的福音?

TiDB 社区干货传送门

8.x 实践

TiDB Vector + Dify 快速构建 AI Agent

TiDB 社区干货传送门

实践案例 应用适配 数据库前沿趋势

小梅西、狮子哥和Tidb升级赛跑记

TiDB 社区干货传送门

性能测评 新版本/特性解读 6.x 实践 7.x 实践 8.x 实践

喜讯!MIAOYUN入围新疆信息产业公司多项技术服务框架采购协议!

MIAOYUN

运维 云原生 数字化 智慧电力 AI人工智能

业技融合:“业、产、研”一体的需求管理指南

嘉为蓝鲸

DevOps 研发管理 产研团队

反向代购系统搭建|逆向海淘平台搭建|对接淘宝京东1688微店拼多多等国内平台货源

tbapi

淘宝代购系统 逆向淘宝代购系统 海淘系统

【TiDB 社区第三届专栏征文大赛】TiDB 在单机上模拟部署生产环境集群

TiDB 社区干货传送门

版本测评 安装 & 部署 8.x 实践

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