InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

抛砖引玉——重构是必要的浪费

作者 Amr Elssamadisy 译者 李剑 发布于 2007年12月18日

领域
架构 & 设计,
过程 & 实践
主题
设计 ,
敏捷
标签
重构 ,
精益

重构是敏捷开发人员工具箱中的一项核心实践。按照重构的定义——修改内部结构(设计)而不影响外部行为——来讲,它并不能为客户创造可衡量的价值。在精益世界中,任何不能为客户创造价值的做法都是浪费,客户所能够感知到的只是行为/功能,而非结构。

但是精益定义了两种类型的浪费:“纯粹的浪费”和“必要的浪费”。“纯粹的浪费”指的是那种既不能给开发团队也不能给客户带来好处的做法。“必要的浪费”是指某些行为,即便它不能给客户创造价值,但也是在我们所知的范围内完成一项工作的最佳方式。重构就是典型的后者之一。

那又为什么要把一个有价值的做法称作“必要的浪费”呢?呃,这里的着眼点在于,它对于客户而言是没有价值的。所以我们应该把在这方面投入的 精力尽量减到最少,而且需要不断寻找更好的替代方案。可如果我们没有把它识别为一种浪费的话,我们就会把它理解为正确完成工作的唯一方式,不再寻找解决途 径——想一下“预先做大量的设计(Big Design Up Front)”吧。

如果看完了上面的话以后,你仍然赞同我的观点,那么接 下来就有一个问题等着你了:“那又怎么样?理解也好,不理解也罢,会有多大影响吗?”当开发人员把重构看作是必要的浪费时,他可能就会尽量减少重构,只重 构那些不再符合客户需求的代码。也即,如果你在编码的过程中发现了类中的某个方法有“坏味道”,但是它和你正在实现的需求并无联系,那就把它放到一边去。

查看英文原文Opinion: Refactoring is a Necessary Waste

译者 李剑 李剑──ThoughtWorks高级咨询师,在持续集成、重构等领域具有丰富的经验;多次为国内大型企业敏捷组织转型提供咨询和培训服务。

浪费就是浪费 发表人 He Yiding 发表于
重构不能为客户创造价值? 发表人 zane dennis 发表于
同意,重构也在创造价值,Amr Elssamadisy 的一些论点是不对的。 发表人 Zhang Charlie 发表于
要注意度的问题 发表人 Yao Andy 发表于
作者是说no measurable customer value 发表人 B Necromancer 发表于
偶觉得还是挺有道理的 发表人 X 1073 发表于
  1. 返回顶部

    浪费就是浪费

    发表人 He Yiding

    浪费就是浪费,它的定义还需要多做说明吗?重构的直接目的并不是为了给客户创造价值,这已经很清楚了,那为什么还要以“对于客户而言是没有价值的”这样的标准来将重构归类为“浪费”呢?

    实际上不止是重构,项目的任何实践都应该避免过度,在必要的前提下避免浪费。这不过是节约成本的需要,并不是什么新观点。

  2. 返回顶部

    重构不能为客户创造价值?

    发表人 zane dennis

    重构就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。那么软件的设计模式和架构更合理,扩展性和可维护性更高,显然就能够更快地响应客户的需求变化,对于客户的后期维护开发也有很大的价值,怎么能说不能为客户创造价值呢?

  3. 返回顶部

    要注意度的问题

    发表人 Yao Andy

    也就是怎么确定文中的“纯粹的浪费”和“必要的浪费”。
    虽然下了定义,但是各个project中的情况是不一样的,还是要把握度的问题

  4. 返回顶部

    同意,重构也在创造价值,Amr Elssamadisy 的一些论点是不对的。

    发表人 Zhang Charlie

    如题

  5. 返回顶部

    作者是说no measurable customer value

    发表人 B Necromancer

    重构真的是不可衡量的?或者换个角度问:为什么作者认为可衡量客户价值才是客户价值?

  6. 返回顶部

    偶觉得还是挺有道理的

    发表人 X 1073

    因为开发者自身的问题导致代码中的坏味道,站在用户的角度他可没有义务为此付出代价,坏味道是开发者的责任,那用户当然有理由认为修正这些坏味道是浪费他的资源。但是软件开发中很多的不确定性致使开发者无法彻底避免这些坏味道,而且坏味道对系统的影响是显而易见的,修改他们是必须的。修改坏味道的花费自然就是“必要的浪费”了。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。