可交易质量假设

2011年2月21日

我经常遇到一些感到沮丧的开发人员,因为“管理层想要更多功能,他们不在乎质量”。每当我听到这种说法时,我都会感到难过,因为我知道当听到这种说法时,开发人员、管理层和他们的客户已经输了。他们的失败是由将这种情况归咎于 *可交易质量假设* 造成的。

在生活的许多方面,质量是我们为了成本而权衡的东西。一辆更好的汽车会更贵,所以我们可能会放弃那辆我们喜欢的法拉利,选择更便宜的东西。我应该花额外的钱在特纳买真正新鲜的鱼,还是去超市买?因此,我们习惯了质量成本更高的想法。有时我们愿意支付,有时我们会选择更便宜的选择。

有时你会听到这种概念被应用于软件,特别是软件设计。重构一些混乱的代码需要时间,我们宁愿添加更多功能。这里潜在的假设是质量是可以交易的,通过降低质量,我们在成本、范围或速度等其他方面获得收益。

当我们检验这个假设时,我们首先要考虑我们对质量的定义。质量对不同的人意味着不同的东西。在软件环境中,我们可能会将质量定义为用户界面的愉悦程度,或出现的缺陷数量,或软件的模块化程度。

我遵循肯特·贝克的观点,将内部质量和外部质量区分开来。用户界面的愉悦性和有效性是外部质量,因为它可以被系统的用户感知。这是可以合理地进行权衡的——我是否希望在使功能 A 更易于使用方面投入更多工作,或者我应该添加功能 B?

然而,软件的内部结构并不是用户可以直接感知到的。我无法从使用程序中判断其内部结构是否构建良好。因此,内部质量是一个更隐藏的属性。当有人说我们应该做一些降低系统设计质量以构建更多功能的事情时,这个人正在将可交易质量假设应用于内部质量。

这样做的问题在于,如果内部质量是可以交易的,那么根本没有必要在内部质量上投入任何努力。如果良好的设计阻止我们添加功能并且对用户没有益处,那么为什么要这样做呢?

人们关心内部质量的原因是他们认为另一个假设适用——设计持久性假设。在这个假设中,内部质量是不可交易的,因为 **降低内部质量会减慢我们的速度。** 确实,不关注设计可以在短期内加快速度,但这只是在很短的时间范围内——远比大多数人想象的要短。

但悲剧的是,一旦你将内部质量定义为可交易的,你就输了。人们已经习惯了质量是可以交易的,即使在最好的情况下,你也难以克服它。说我们需要花更少的时间添加新功能来提高质量,这只是在盖棺定论。

相反,至关重要的是要关注内部质量的真正价值——它是速度的推动者。内部质量的目的是更快。当然,这也有两面性,这也意味着你应该了解如何花一些时间进行重构将有助于你更快地完成工作,否则你不应该这样做。

顺便说一下,这也是我对软件工艺隐喻感到不安的另一个来源。当你对人们说“工艺”时,他们会想象精美的工艺,皮革镶板,光滑的接缝——因此成本更高。单词“工艺”强化了可交易质量假设——这对那些知道速度需要良好设计的人来说是一个致命的劣势。