内部质量是否重要

内容质量很重要,从以下几点可以看出来:1、内部质量使软件增强更容易;2、客户确实关心新功能很快交付;3、可视化内部质量的影响。关于内容质量是否重要的具体内容我们将在文章中展开描述。

1、内部质量使软件增强更容易

为什么软件开发人员会因为内部质量而提出问题呢?

程序员大部分时间都花在修改代码上。即使在新系统中,几乎所有的编程都是在现有代码库的上下文中完成的。当我想向软件添加新功能时,我的首要任务是弄清楚该功能如何适应现有应用程序的流程。然后我需要更改该流程以让我的功能适应。我经常需要使用应用程序中已有的数据,因此我需要了解数据代表什么,它与周围数据的关系,以及我可以使用哪些数据需要为我的新功能添加。

所有这些都是关于我对现有代码的理解。但是软件很容易让人难以理解。逻辑可能会变得混乱,数据可能难以理解,用于指代事物的名称在六个月前对托尼来说可能有意义,但对我来说就像他离开公司的原因一样神秘。所有这些都是开发人员所说的cruft 的形式——当前代码与理想情况下的差异。

cruft 的一个常见比喻是技术债务,添加功能的额外成本就像支付利息,清理垃圾就像支付本金一样。虽然这是一个有用的比喻,但它确实鼓励许多人相信 cruft 比在实践中更容易测量和控制。

内部质量的主要价值之一是让我更容易弄清楚应用程序的工作原理,以便我可以了解如何添加内容。如果将软件很好地划分为单独的模块,我不必阅读所有 500,000 行代码,我可以在几个模块中快速定位到少数的几百行。如果我们全力进行清晰的命名,我可以快速了解代码的各个部分的作用,而不必费解细节。如果数据明智地遵循基础业务的语言和结构,我就可以轻松理解它与我从客户服务代表那里得到的请求之间的关系。Cruft 增加了我理解如何进行更改所需的时间,也增加了我犯错误的机会。如果我发现了我的错误,那么就会损失更多的时间,因为我必须了解错误是什么以及如何解决它。如果我没有发现它们,那么我们就会出现生产缺陷,并且以后会花更多的时间来修复问题。

我的改变也会影响未来。我可能会看到一种快速添加此功能的方法,但它与程序的模块化结构背道而驰,增加了 cruft。如果我走这条路,我今天会做得更快,但会减慢在未来几周和几个月内必须处理此代码的其他所有人的速度。一旦团队的其他成员做出同样的决定,一个易于修改的应用程序会迅速积累到每一个小的变化都需要数周的努力的地步。

2、客户确实关心新功能很快交付

在这里,我们看到了为什么内部质量对用户和客户很重要的线索。更好的内部质量使添加新功能更容易,因此更快、更便宜。Rebecca 和我现在可能有相同的应用程序,但在接下来的几个月里,Rebecca 的高内在质量使她每周都能添加新功能,而我却被困在尝试剔除繁琐程序,只推出一个新功能。我无法与 Rebecca 的速度相提并论,很快她的软件就比我的功能强大多了。然后我所有的客户都删除了我的应用程序,取而代之的是 Rebecca,即使她的价格更高。

3、可视化内部质量的影响

内部质量的根本作用是降低未来变革的成本。但是编写好的软件需要一些额外的努力,这在短期内确实会带来一些成本。

将这一点可视化的一种方法是使用以下示意图,我绘制了软件的累积功能与生成它的时间(以及成本)的关系。对于大多数软件工作,曲线看起来像这样。

这就是内部质量差的情况。最初进展很快,但随着时间的推移,添加新功能变得越来越困难。即使是很小的改动也需要程序员理解大范围的代码,那些难以理解的代码。当他们进行更改时,会发生意外损坏,导致测试时间过长和需要修复的缺陷。

专注于高内部质量是为了减少生产力的下降。事实上,一些产品看到了相反的效果,开发人员可以加快速度,因为可以通过利用以前的工作轻松构建新功能。这种愉快的情况很少见,因为它需要一支技术娴熟、纪律严明的团队才能实现。但我们偶尔会看到。

这里的微妙之处在于,有一段时间,低内在质量比高内在质量更有效率。在此期间,质量和成本之间存在某种权衡。当然,问题是:在两条线交叉之前的这段时间有多长?

这一点也是为什么这是一个示意图的原因。我们没有办法衡量软件团队交付的功能,由于无法衡量产出,因此无法衡量生产力,因此无法对低内部质量(这也难以衡量)的后果给出可靠的数字。无法衡量产出在专业工作中很常见——我们如何衡量律师或医生的生产力?

我评估线路交叉点的方法是征求我所知道的熟练开发人员的意见。而答案却出乎很多人的意料。开发人员发现低质量的代码会在几周内显著降低他们的速度。因此,内部质量和成本之间的权衡适用的跑道并不多。即使是小的软件工作也受益于对良好软件实践的关注,这当然可以从我的经验中证明。


最后,推荐我们的管理工具给大家