50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

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

关注

评论

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

一文了解greenplum

数据社

数据库 greenplum MPP

数据中台建设方法论

数据社

大数据 数据中台

第十周作业

方堃

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑

程序员生活志

程序员

解决 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

邵俊达

Linux SSH

架构师训练营第十章作业

叮叮董董

week10 学习总结

任小龙

django-admin和manage.py用法

BigYoung

Python django django-admin manage.py

凉了!张三同学没答好「进程间通信」,被面试官挂了....

小林coding

操作系统 计算机基础 进程

微服务和DDD总结

周冬辉

微服务 DDD

微服务架构的思考

Season

Django如何编写自定义manage.py 命令

BigYoung

Python django manage.py

CDH部署指南

数据社

大数据 CDH

关于微服务架构的思考和认知

任小龙

Dubbo微服务框架请求流程

GalaxyCreater

架构

Flink 支持的重启策略有哪些

奈学教育

flink

什么是死锁?如何解决死锁?

奈学教育

什么是死锁?如何解决死锁?

古月木易

死锁

一周信创舆情观察(8.3~8.9)

统小信uos

Flink 支持的重启策略有哪些

古月木易

flink

架构师训练营 week10 summary

Nick

Jira 和 Confluence 企业最佳部署方式

Atlassian

项目管理 敏捷开发 Atlassian Jira

华章科技好书5折优惠,满99再减10元

华章IT

Python AI 数字化转型 Java 25 周年 计算机科学丛书

架构师训练营第十周作业

一剑

只加两行代码,为什么用了整整两天时间?

程序员生活志

编程 bug

anyRTC 4.0 以心铸造,以梦相承

anyRTC开发者

anyRTC 4.0 官网升级

Kubernetes 网络通讯模型解析

ninetyhe

数据库的那些事

数据社

数据库 大数据

报警不响,黄金万两的“稳定性成熟度”干货

滴滴普惠出行

聊聊数据库

数据社

数据库 大数据

架构师训练营 week10 homework

Nick

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