写点什么

何时应该打破规则?

  • 2008-09-19
  • 本文字数:1010 字

    阅读完需:约 3 分钟

作为 JUnit 测试框架的作者,Kent Beck 在《赶紧交付吧,宝贝儿》一文中提醒我们:所有的敏捷过程和实践,都是为了开发出可以交付的软件。如果有什么成为软件交付的障碍,也许你就得打破规则了。

Kent 引用了 Oakland Raider 公司总经理 Al Davis 的话“赶紧获胜啊,宝贝儿”,他还描述了自己遇到的麻烦,当时他在开发一个 Eclipse 插件,并试图先编写测试来验证之前的一个想法。

几周的时间里,我总共花了 6 到 8 个小时来编写第一个测试并使之运行。为 Eclipse 插件写测试可不容易,所以遇到问题也很正常。我就是反复不断地琢磨这个问题,想让我的第一个测试顺畅运行。

8 个小时的工作之后,他还是没有得到一个有用的测试,而且也没能成功测试最早的想法。几天后,他在 Eclipse 中尝试了另外一种不用做测试的方法。他投入了三个小时的工作,发现原先的想法并不怎么样,这让他觉得很不开心。

Piergiuliano Bossi 认为 Kent 传递了错误的信息。他觉得 Kent 只是做了一个探索性的开发(spike),对 Eclipse 的插件架构体系进行了了解,并且试图找出如何在那个环境中编写测试。Piergiuliano 认为不通过 TDD 的方式来搞清楚 api 的用途是很正常的,等到对 api 有了足够的理解之后再重新编写代码,也许效果更好。他想知道是不是有可以暂时不用考虑规则的情况,以及这样做会带来什么后果:

咱们考虑这样一种状况:如果可以暂时不遵守某些实践,就能马上得到一些短期的交付。在这种状况下,团队会很容易欠下一些很严重的技术债务,甚至有可能大大影响系统的质量。 ……

还有其他的状况:系统已经糟糕到一定地步,不允许再发生任何技术债务,软件再有任何差池,都将会导致财务上的损失(甚至更差)。经验告诉我,这些损失是很容易发生的,一旦出现,结果很可能更具破坏性。光说“赶紧交付吧,宝贝儿”会造成灾难性后果,而且是完全不负责任的做法。

他担心 Kent 的文章会“鼓励粗鄙的、不计后果式的编程文化”。

五年前, Bob 大叔写过同样的话题:

傻瓜才会盲目遵从规则。我们的脑子足可以分辨规则何时有用,何时不行。我们有责任不断判断规则是否有用。

但是他又从另一面做了解释:

我们的职业自豪感才是解决问题的根本。这种自豪感既冰冷残酷,又炽热夺目。它不会让我们因为恐惧而将规则摒弃一边,如果这么做,也是因为职业自豪感让我们发现:某些规则会让我们交付垃圾软件。

所以,Piergiuliano 和 Bob 大叔一定认为:要将“质量第一”牢记心中。

查看英文原文: When is Ok to Break the Rule

2008-09-19 06:091750
用户头像

发布了 479 篇内容, 共 182.7 次阅读, 收获喜欢 53 次。

关注

评论

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

CodeBuddy 助力小程序开发,搓了一款面试刷题小程序

悟空聊架构

小程序 人工智能 AI 代码助手 CodeBuddy首席试玩官

K8s进阶之一文搞懂PV,PVC及SC

电子尖叫食人鱼

Kubernetes 容器

【浪潮海岳inDatax数据中台专栏】海岳inDataX“易宝特”流程自动化平台建设与实践

inBuilder低代码平台

CodeBuddy + MCP 实现一个炫酷的贪吃蛇

悟空聊架构

人工智能 AI 代码助手 MCP CodeBuddy首席试玩官

热点追踪+精准解读——火山引擎 AI 域名推荐上线!

火山引擎边缘云

域名解析 域名 域名备案 域名系统 AI Agent,

十年一诺:一张SPN获奖证书背后的技术征途

脑极体

通信

如何在通义灵码里使用 MCP 能力?

阿里云云效

阿里云 通义灵码 MCP

如何在通义灵码里使用 MCP 能力?

阿里巴巴云原生

阿里云 云原生 通义灵码 MCP

【免费开源】积木报表MongoDB数据集使用实战

JEECG低代码

mongodb 数据可视化 报表 报表工具

React-native脚手架探索

溪抱鱼

typescript html React

混合编程会是软件产业发展的必然选择吗?

代码制造者

混合编程

2025年PM产品力领航者大会 | 上海巅峰论道

新消费日报

CodeBuddy 接入 MCP,一键生成网站!

悟空聊架构

人工智能 编程 AI 代码助手 CodeBuddy首席试玩官

YashanDB 知识库|主备切换怎么做?一主一备 & 一主两备完整操作指引

数据库砖家

数据库

YashanDB 知识库|内存参数这么多,Share Pool 怎么配才不会报错?

数据库砖家

数据库

YashanDB 知识库|IMP 跨网络导入太慢?一文看懂原因与优化建议

数据库砖家

数据库

YashanDB 知识库|insert 写入乱码字符,CPU 占满、线程卡死?你可能踩到了 lex 死循环的坑

数据库砖家

数据库

一分钟用 MCP 上线一个 2048 小游戏(CodeBuddy版)

悟空聊架构

人工智能 编程 AI 代码助手 CodeBuddy首席试玩官

Python 3.14 新特性盘点,更新了些什么?

不在线第一只蜗牛

Python

【免费开源】积木报表ElasticSearch数据集使用实战

JEECG低代码

elasticsearch 数据可视化 报表 报表工具

微服务架构原理与开发实战!

程序员高级码农

程序员 微服务 架构师

YashanDB 知识库|删除用户组后 yasql 免密登录失效?问题可能出在这儿

数据库砖家

数据库

YashanDB 知识库|GBK 库插入生僻字乱码?别忽视编码转换这一环

数据库砖家

数据库

大型网站架构实战!

程序员高级码农

Java 程序员 架构师

重磅预告|开源鸿蒙开发者大会2025举办在即

最新动态

遭遇DDoS攻击为什么不能反击回去?

网络安全服务

CDN 服务器 DDoS 带宽 高防IP

「智元机器人」“稚晖君”彭志辉:机器人不玩“后空翻”,选择实用主义优先路线!

机器人头条

科技 大模型 人形机器人 具身智能

按钮导航组件 | 纯血鸿蒙组件库AUI

华哥的全栈次元舱

鸿蒙开发 纯血鸿蒙 ArkUI / eTS 鸿蒙组件库AUI AI极客

CodeBuddy Craft,我的编程搭子

悟空聊架构

集成指南:如何基于融云 Flutter IMKit 实现双端丝滑社交体验

融云 RongCloud

【免费开源】积木报表文件数据集使用实战

JEECG低代码

数据可视化 报表 报表工具

何时应该打破规则?_研发效能_Mark Levison_InfoQ精选文章