2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Kent Beck 建议超短项目跳过测试

  • 2009-06-23
  • 本文字数:1948 字

    阅读完需:约 6 分钟

Kent Beck 《解析极限编程》《测试驱动开发》的作者,他认为软件开发就如同高尔夫一样,是一项长期和短期相结合的运动。JUnit 是适合于长期运动项目的例子——大量的用户,稳定的收入(如果收入不幸是分文无有的话,对所有参与者都是可悲的),其关键目标是要保证开发领先于使用者的需要。

当我开始实现 JUnit Max 时,才逐渐明白规则已经发生了变化。最要命的问题曾经是(现在也是):“哪些功能可以吸引付费客户?”从定义来看,这是一个无解的问题。如果 JUnit(或任何其他免费软件)实现了一个同样的功能,没有人会为 Max 付费。

JUnit Max 的成功之处在于它开始赢利并不断扩大收入:付费用户越来越多,每个用户所带来的收入越来越多,病毒传播系数【译者注】也越来越高。从定义来看,既然取得成功的方式不为人知,那就进行大量实验,并结合实际使用得到的反馈,这就可以使得成功的机率最大化。

JUnit Max 将所有内部错误报告到一台中央服务器,一旦问题出现,Kent 就立即可以获悉。这种错误日志可以帮助找出两个问题。对于第一个问题,他可以写一个简单的测试使之重现,并验证相应的修补程序。第二个问题解决起来很容易,但 Kent 预计需要几个小时才能为它写出一个测试。在这样的情况下,他就直接修复问题并交付了。

Kent 接着说:

当我开始实现 Max 时,在第一个月里没有做任何自动化测试,所有的测试都是我手动做的。有了最初几个付费用户后,我才回头为已有的功能写测试。并且,我认为这种工作次序让我在单位时间内可以验证的实验数量最多。只用少许或根本不写代码、不写测试,这让我可以更快地开始(我花了近一周的时间才写完第一个测试)。一旦前面的代码被证明是有价值的(就这个项目来说,我的一些朋友愿意为它付费),这种测试就能让我能更有信心地快速完成实验。

是否进行自动化测试,需要对一系列因素进行权衡。即使在 Max 项目中我也写了不少的测试。如果我能找到一种简单的方式写测试,我就会先为所有功能开发验收测试。尤其是在我不能确定某个功能该如何实现时,写测试会给我很好的想法。在 Max 项目中,是否写测试这个问题发生了变化,变成了测试能否有助于我在单位时间内验证更多实验。如果有帮助,那我就写测试。如果没有就不写,甭管有啥危险。我正在力图通过 Max 获得更多收入。要论证围绕设计所付出的努力,这个过程同样复杂,只不过那是下一篇文章要讨论的话题了。

Ron Jeffries 是《极限编程实施》的作者,他回应说:“我相信你,此外还包括三个人,你们能在短期项目中做出正确决策。多年来的经验告诉我:在针对短期项目的决策影响曲线中有一个拐点,项目的可靠性和开发进度会从该点急剧下降。

Johannes Link 是敏捷软件教练 ,他说: “我看到有那么几个开发人员能够作出合理的短期或长期决定,但还没见到过能做到这一点的团队,更不用说一个组织了。”

Michael O’Brien 则给出了不同的评论:“在我看来,这是出色的文章,他也作出了正确的决定。我们在写代码时常常陷于追求漂亮和一致,而忘记了写代码的目的 。我写测试,是因为这可以让我写起代码来更容易,而且让我确信代码按我预想的方式工作。如果写测试不能帮我达到上面的目的,我会说:跳过它。”

Olof Bjarnason 认为:“Kent 提出了反馈流的概念。如果我们着眼于让单位时间内的反馈流多起来,那就走对方向了。例如,他提到在JUnitMax 这个短期项目中,他发布的功能都没有经过测试,这样在项目一开始就可以带来最多反馈流,其原因在于编写第一个测试太困难了,竟用了他一个多星期时间。他通过频繁地修改和发布获得了很高的反馈流。他的‘红色测试’是由早期的少数用户和他们的反馈意见构成。”

Guilherme Chapiewski 有这样的顾虑:在很多情况下人们会误认为某些项目是短期项目。Guilherme 遇到的情况是:之前为了验证某个想法,他打算开发一个没有任何测试的小项目。项目完成后人们开始使用它,很快就找到一些无法修复的 bug。最后,他得出结论: 代码写得太烂,根本无法测试。他只得扔掉已有代码,再从头来过。

Kent 对许多评论做出了回复:“我同意,实践和原则的混乱会导致问题。测试会产生更好的设计。这就是为什么我有大概 30 个功能测试和 25 个单元测试(奇怪的平衡吧,这是由于 Eclipse 应用很难进行测试)。几乎所有的新功能我都先加了验收测试。这样做减少了整个周期耗费的时间。”

这个想法能安全应用到不止一、两个人的团队中吗?除了 Kent Beck,人们是否有能力去判断该不该采用这种方式呢?

译者注:病毒传播系数,英文名为 viral coefficient,用来度量每个已有用户带来的新用户数,与“病毒营销(viral marketing)”相关。可参考: http://robert.zubek.net/blog/2008/01/30/viral-coefficient-calculation/

查看英文原文: Kent Beck Suggests Skipping Testing for Very Short Term Projects

2009-06-23 04:422075
用户头像

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

关注

评论

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

观测云产品更新 | 监控器、查看器、基础设施容器等

观测云

监控

从小白到高手 我只用了30天【全栈开发与测试定向培养班】

测试人

软件测试

分享:在 Apifox 中使用 CryptoJS 进行 AES 加密

Apifox

前端 后端 Apifox CryptoJS AES 加密

LLM 推理优化探微 (4) :模型性能瓶颈分类及优化策略

Baihai IDP

程序员 AI LLM 白海科技 企业号 4 月 PK 榜

从小白到高手,我只用了一个月

霍格沃兹测试开发学社

8毫秒即可出站:浪潮云海筑基云收费站

财见

前端代码规范 - 代码注释

南城FE

前端 代码质量 代码 代码注释

百度一站式数据自助分析平台(TDA)建设

百度Geek说

数据分析 企业号 4 月 PK 榜 一站式自助分析BI

高质量ChatGPT Prompts 精选

蓉蓉

#人工智能 ChatGPT GPT-4 Prompt

从小白到高手 我只用了30天【全栈开发与测试定向培养班】

测吧(北京)科技有限公司

测试

微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗

JackJiang

即时通讯;IM;网络编程

实况窗助力美团打造鸿蒙原生外卖新体验,用户可实时掌握外卖进展

HarmonyOS SDK

HarmonyOS

MES与WMS的区别

万界星空科技

wms mes 生产管理 仓库管理系统 智能仓库

通过WebShell登录SQL Server主机并使用SSRS报表服务

阿里云瑶池数据库

数据库 阿里云 数据库开发 SQL sever

“大模型驱动的软件研发” 华为云助推企业研发智能化升级

人工智能 云计算 数字化 华为云

万界星空科技低代码平台,快速搭建MES系统

万界星空科技

低代码 低代码平台 mes 万界星空科技

MES系统怎么解决车间生产调度难的问题?

万界星空科技

mes 万界星空科技 生产管理 生产调度 车间管理

Kent Beck建议超短项目跳过测试_研发效能_Mark Levison_InfoQ精选文章