|
|
51CTO旗下网站
|
|
移动端

开发高质量软件需要更高成本吗?

ThoughtWorks 首席科学家 Martin Fowler 指出,软件开发项目中存在一种常见争论,即“花时间提高软件质量,还是专注于发布更有价值的功能?”

作者:xplanet来源:开源中国|2019-05-31 09:17

ThoughtWorks ***科学家 Martin Fowler 指出,软件开发项目中存在一种常见争论,即“花时间提高软件质量,还是专注于发布更有价值的功能?”他认为“提供功能的压力常常主导着讨论,导致许多开发人员抱怨他们没有时间研究架构和代码质量”。于是,Martin 近日在个人博客发布了一篇名为《高质量软件值得这么多成本吗?》的文章,就此展开讨论。

通常,这样的反问句答案显然是否定的。不过,Martin 接下来的阐述进一步颠覆了问题本身,这个问题假定了质量和成本之间的共同权衡,可在他看来,这种权衡并不适用于软件——“高质量的软件实际上生产成本更低”。

这种说法是否颠覆了你的认知?人们习惯于在质量和成本之间进行权衡,“一分钱一分货”不无道理。当然,Martin 承认该假设在大多数情况下是正确的,更高的质量会花费更多。但他强调这并非一个绝对规则。

软件质量意味诸多

Martin 首先对“软件质量”做出了界定。有很多方面可以囊括在内:用户界面清晰吗?软件足够可靠吗?架构合理、明确吗?

用户可以判断用户界面是否良好;高管可以判断软件是否使工作更高效;消费者会注意到系统缺陷,特别是当软件出故障时。但用户可能无法体会软件架构——这对开发者来说是软件质量的判定标准之一。

所以,这篇文章将软件质量属性划分为外部(例如 UI 和缺陷)和内部(架构)。区别在于,用户和消费者可以看到软件产品具有高外部质量的原因,却难以分辨出内部质量的高低。

内部质量看似对用户无关紧要

用户可以判断他们是否想要支付更多费用以获取更好的用户界面,但对于内部模块化结构难以做出判断。试想一下,如果有两个近乎完全相同的应用程序,一个卖 6 美元,另一个售价 10 美元,区别仅仅在于后者的源码整齐有序而前者较为混乱。这并不影响程序正常运行,客户为何要多花 4 美元购买后者?既然如此,为什么软件开发人员还要花时间和精力来提高工作的内部质量?

Martin 在此引出了“技术债务”(Technical Debt)的概念。由于代码混乱而造成的难以清理的残余项(cruft)便是积累技术债务的罪魁祸首,为增加新功能所付出的额外努力则是债务利息。

如果模块结构足够清晰,假设添加一个新功能需要四天时间,但由于逻辑混乱或数据难以理解等代码规范问题,这一工作可能将会被延长至六天。

这些繁琐的部分不仅会更加耗费开发人员的时间和精力,也加大了出错的可能性,那么以后将需要花费更多成本来进行修补。

由此看来,内部质量实际上对用户来说也至关重要。因为更好的内部质量使得添加新功能更快、更容易,成本也更低。

内部质量的影响

Martin 表示,“内部质量的基本作用是降低未来变革的成本。但是编写好的软件需要额外的努力,这在短期内会产生一些成本”。为此,他提供了两张图表,以可视化的方式来呈现将内部质量的影响。

上图是软件内部质量较差的情况。可以看到,在最初一段时间,工作进展很快,但随着时间的推移,添加新功能变得愈发困难。这也是大多数软件工作的境况。

专注于高内部质量很可能造成生产力下降,但开发人员可以通过利用先前的工作轻松构建新功能。这一目标需要一支技术精湛,训练有素的团队来实现。

加上高内部质量的曲线之后,一些微妙之处显现出来:前期低内部质量比高内部质量的软件更具有生产力,在此期间,质量和成本之间存在某种权衡关系。问题是,它能持续多久?

Martin 综合参考了一些熟练开发者的意见,发现质量差的代码会在几周内显著降低生产速度,拥有高内部质量的软件随后远远反超。因此,从长远看来,不必太费心思在质量与成本之间权衡。

即便***的团队也会产生垃圾

即使是***秀的团队也会在工作时不可避免地产生一些无用且琐碎的东西(cruft)。

许多人将构建软件比作建造摩天大楼,想想为什么高级程序员被称为“架构师”?但软件构建于物理世界未知的不确定世界中,软件开发的构建模块——语言、库和平台——每隔几年就会发生重大变化。鉴于这种程度的变化,软件项目总是创造出新颖的东西。Martin 说他常常听到团队只有在花了一年左右的时间构建它之后,才能真正理解软件的架构。即使是***的团队也会在他们的软件中肆意妄为。

不同的是,好的团队即使创造了垃圾,也能及时清理掉它们,他们可以继续快速添加功能。此外,他们还会花时间创建自动化测试,也经常进行重构,以便快速解决问题、清理残余。

Martin 用清理厨房来比喻这项工作:做饭时如果不快速清理台面污渍,之后更难去除,所有肮脏的东西会妨碍烹饪下一道菜。

高质量的软件生产成本更低

总结一下:

  • 忽视内部质量会导致 cruft 快速产生
  • 这将进一步延缓功能开发
  • 即使是一个伟大的团队也会产生这样的问题,但通过保持内部质量,可以控制它
  • 高内部质量使团队能够以更少的工作量、时间和成本开发新功能

一些开发团队向 Martin 诉苦:“管理层阻碍我们写出质量好的代码,因为它需要花费太长时间”。对此 Martin 再次呼吁,高内部质量实际上降低了未来成本,了解内部质量与成本之间的关系对于以***效率开发软件来说至关重要。

【编辑推荐】

  1. 我这个人不懂什么CPU,于是我用代码模拟出了一个
  2. 让前端开发者失业的技术,Flutter Web初体验
  3. 开发者真正想要得到的是什么?
  4. 那些被开发者所青睐的浏览器扩展插件
  5. 驳回开发者请求,Android Q 中会继续限制 Wi-Fi 自动扫描
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月获赞

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

Linux编程技术详解

本书全面介绍了Linux编程相关的知识,内容涵盖Linux基本知识、如何建立Linux开发环境、Linux开发工具、Linux文件系统、文件I/O操作、设备文...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客