写点什么

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

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

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

关注

评论

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

graphpad prism for Mac(专业医学绘图工具) v10.1.1完美激活版

mac

苹果mac Windows软件 GraphPad Prism 科学和统计分析软件

实战营|阿里云 x StarRocks 邀你现场体验云上极速湖仓--深圳站

StarRocks

数据库 数据仓库 数据分析 StarRocks

centos7下docx转为pdf

麦兜

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

SEAL安全

Kubernetes 运维 Helm Prometheus

BACK Stack会成为平台工程的新趋势吗?

杨振涛

云原生 平台工程 内部开发者平台 平台工程社区 PECommunity

幸福是什么

Geek_35a87b

自我

用友全球司库十问(完结篇)|如何构建司库信创体系化能力?

用友BIP

全球司库

一文了解:仿真技术的巨头——美国Altair公司

智造软件

CAE CAE软件 altair

极狐GitLab x 智众医疗 | 成为3.5亿慢病患者的健康管家

极狐GitLab

QCN9274: A new generation core force in wireless communications

wallysSK

"5.25秒变0.023秒:小程序图片优化全攻略"

陇锦

小程序 微信小程序 前端 前端开发 js

一篇文章了解做仿真软件的达索系统-达索代理商

思茂信息

cst abaqus软件 达索系统

当创建pvc后,kubernetes组件如何协作

华为云开发者联盟

Kubernetes 开发 华为云 华为云开发者联盟

强大的iOS系统恢复:Fix My iPhone最新激活

胖墩儿不胖y

Mac软件 修复软件 iOS修复工具

系统存储架构升级分享

京东科技开发者

概念回顾:MQTT?

NGINX开源社区

nginx 物联网 HTTP TCP/IP mqtt

AI实践 | 一文简述语音克隆实践

云起无垠

2024律师课程推荐:iCourt律师执行实务集训营(赠《执行实务大礼包》)

科技汇

【第七在线】如何让智能商品系统提供深入的供应链决策支持?

第七在线

数据采集才是MES系统中的核心功能

万界星空科技

数据采集 MES系统 mes 设备管理 万界星空科技mes

详解GaussDB(DWS)通信安全的小妙招:连接认证机制

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

数据资产入表:工业数字化新机遇

用友BIP

数据资产

强大的蓝光播放器 Aiseesoft Blu-ray Player激活最新

mac大玩家j

Mac软件推荐 蓝光播放器 视频播放器软件

万界星空科技家具制造业MES系统解决方案

万界星空科技

生产管理系统 mes 家居设计 万界星空科技mes 家具生产管理系统

【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)

洛神灬殇

oauth2.0 分布式技术 2024年第七篇文章 授权认证协议

户外交通LED显示屏必须具备的特点

Dylan

技术 网络 计算机 LED显示屏 led显示屏厂家

性能持续突破!火山引擎ByteHouse上线向量检索能力

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 1 月 PK 榜

代码混淆:保护您的应用程序

雪奈椰子

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