因此,一些开发人员/经理认为编写更少的代码来完成工作具有价值,因此我们需要维护的代码更少
这是对实际目标视而不见的问题。
重要的是减少开发时间。那是按时间(或等效工作量)而不是代码行来衡量的。
这就像在说汽车制造商应该用更少的螺丝钉来制造汽车,因为每个螺丝钉的插入时间都不为零。虽然这是正确的做法,但汽车的市场价值并不取决于它的螺丝钉数量。或没有。首先,汽车必须具有高性能,安全性和易于维护的特点。
剩下的答案是干净代码如何导致时间节省的示例。
记录中
使用没有日志记录的应用程序(A)。现在创建应用程序B,它与应用程序A相同,但带有日志记录。B总是会有更多的代码行,因此您需要编写更多的代码。
但是,很多时间会投入到调查问题和错误,并找出问题出在哪里。
对于应用程序A,开发人员将被困在阅读代码的过程中,并且不得不不断重现问题并逐步遍历代码以查找问题的根源。这意味着开发人员必须在每个使用的层中从执行开始到结束进行测试,并且需要观察每个使用的逻辑。
也许他很幸运能够立即找到它,但是答案可能会在他认为要寻找的最后位置。
对于应用程序B,假设日志记录完美,开发人员将观察日志,可以立即识别出故障组件,并且现在知道在哪里查找。
这可以节省几分钟,几小时或几天。取决于代码库的大小和复杂性。
回归分析
以完全不适合DRY的应用程序A为例。
以应用程序B为例,它是DRY,但由于附加的抽象,最终需要更多的行。
提出了更改请求,这要求更改逻辑。
对于应用程序B,开发人员根据更改请求更改(唯一,共享)逻辑。
对于应用程序A,开发人员必须在他记得正在使用该逻辑的地方更改此逻辑的所有实例。
- 如果他设法记住所有实例,则仍然必须多次实施相同的更改。
- 如果他不能记住所有实例,那么您现在正在处理与自己矛盾的不一致的代码库。如果开发人员忘记了很少使用的代码,则该错误可能直到很长一段时间才对最终用户显而易见。那时,最终用户是否会确定问题的根源?即使是这样,开发人员也可能不记得所做的更改,因此必须找出如何更改此被遗忘的逻辑。也许那时开发人员甚至不在公司工作,然后其他人现在必须从头开始解决所有问题。
这会导致大量的时间浪费。不仅在开发中,而且还在寻找和发现错误中。应用程序可能会以开发人员无法轻易理解的方式开始出现异常行为。这将导致冗长的调试会话。
开发人员互换性
开发人员A创建的应用程序A。代码虽然不干净也不可读,但是它的工作原理就像一个魅力,已经在生产中运行。毫不奇怪,也没有文档。
由于假期,开发商A缺席一个月。紧急更改请求已提交。迫不及待要等三个星期,开发人员A才能返回。
开发人员B必须执行此更改。他现在需要读取整个代码库,明白了一切是如何工作的,为什么它的工作原理,以及它试图完成的任务。这需要很长时间,但可以说他可以在三周后完成。
同时,应用程序B(由开发人员B创建)处于紧急状态。开发人员B被占用,但开发人员C可用,即使他不知道代码库也是如此。我们做什么?
- 如果我们让B在A上工作,而让C在B上工作,那么我们有两个开发人员不知道他们在做什么,那么工作就无法达到最佳效果。
- 如果我们将B从A上拉开,然后让他去做B,现在我们将C放在A上,那么开发人员B的所有工作(或其中很大一部分)都可能最终被丢弃。这可能浪费了数天/数周的精力。
开发人员A休假回来,发现B不理解该代码,因此实施得很糟糕。这不是B的错,因为他使用了所有可用的资源,所以源代码只是不够可读。现在A是否必须花时间修复代码的可读性?
所有这些问题,甚至更多,最终都浪费了时间。是的,在短期内,干净的代码现在需要付出更多的努力,但是当需要解决不可避免的错误/更改时,它将最终在将来获得回报。
管理层需要了解,现在一个短任务将在将来为您节省一些长任务。不计划就是计划失败。
如果是这样,我可以使用哪些论据来证明已编写了更多LOC这一事实呢?
我的解释是询问管理人员他们更喜欢什么:一个可以在三个月内开发的带有100KLOC代码库的应用程序,或者可以在六个月内开发的一个50KLOC代码库的应用程序。
他们显然会选择较短的开发时间,因为管理层并不关心KLOC。专注于KLOC的经理在进行微观管理的同时,不了解他们要管理的内容。