软件设计的两句箴言:维护成本与系统复杂度的关系

本文揭示了软件设计的核心原则:降低维护成本比降低实现成本更重要,而维护成本与系统复杂度成正比。通过这两条原则,可以推导出其他软件开发的基本原则。

软件设计的两句箴言

2010年5月13日 · Max Kanat-Alexander

在《软件设计方程》的背景下,现在可以将软件设计的主要原则简化为两句话:

  1. 降低维护成本比降低实现成本更重要
  2. 维护成本与系统复杂度成正比

这就是核心。如果你只了解这两条原则和软件的目的,就可以推导出软件开发的所有其他通用原则。

——Max

读者讨论精选

Mark Castillo(2010年5月13日):
嘿嘿…我还在寻找“实现和维护零成本”的原则。也许这里可以总结为:“零成本是不可实现的”。

Wanderson Santos(2010年5月18日):
完全同意,但能否将其与敏捷原则(如XP中的“简单设计”)对齐?

Max回复
我不完全认同任何现有的软件方法论。如果有人觉得这些原则与XP类似并能结合使用,那很好。但如果只是为了强行对齐而对齐,则意义不大。方法论推广者往往带有利益动机(如卖书或咨询),但不应仅因利益而传播观点。

Ape(2010年6月12日):
能否举例说明如何从这两条原则推导其他原则?

Max回复

  • 降低复杂度:松散耦合能减少组件间依赖,从而降低复杂度。
  • 减少维护时间:自动化测试能提前捕获缺陷,减少后期修复时间。
    几乎所有软件开发原则(除人机交互外)均可由此衍生。

Harald Wellmann(2010年10月27日):
维护成本与系统规模的关系可能非线性(如O(c log c)或O(c²))。

Max回复
更准确的表述应为“维护成本是系统复杂度的函数”,但为避免理解障碍,保留了原表述。

Mike W.(2017年9月21日):
“维护成本与复杂度成正比”使用的是日常语义。若用数学表达可改为:“系统复杂度增加时,维护成本增加。”


延伸思考

技术债务的真相(Max Kanat-Alexander, 2017年6月4日)
技术债务的价值多是神话。糟糕的工程决策会在几小时到几周内拖慢进度。正确的设计通常只需多花几小时,且能立即收回成本。长期累积的债务会导致系统陷入无法修复的泥潭。

如何应对变更抵触(Max Kanat-Alexander, 2010年5月29日)
用户对系统变更的负面反馈常源于“变更厌恶”而非真实问题。可通过以下方式区分:

  1. 抵触情绪通常在3-10天内消退;
  2. 情绪化反馈(如“新菜单颜色难看”)多为抵触,而事实性反馈(如“性能下降10倍”)需认真对待。

本文通过简洁原则揭示了软件设计的本质,并辅以实例和讨论,为开发者提供了实用指导。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计