我不认为我是极端主义者。 我知道代码质量永远不可能完美,它总是可以提高的(例如Bob叔叔在CC的“ 连续精化”中所展示的 ),因此找到合适质量的适当水平总是很重要的。 而且我承认有些代码对质量的要求并不重要,例如一次性使用的一次性工具。 但是,当谈到将要运行5年,10年,20年的企业软件时,代码质量绝不能牺牲。 您可能会通过使用快速破解解决方案来获得暂时的提速,但您因此而造成了技术债务,这种债务将很可能在软件开发期间,当然在软件维护以及长期使用期间的进一步开发期间,已经支付了数倍的费用。 。 相信我,我去过那里,我已经看过,我付出了代价,并诅咒了黑客的作者。
什么是代码质量?
为了使自己更清楚,我应该解释一下术语“代码质量”的含义:
- 正确的代码结构
- 分离,隔离和“凝结”各个关注点,从而使一段代码可以完成一件特定的事情,而其他任何一段代码都不会做到–因此,如果您需要更改该功能,则只需要触摸一个位置
- 可读性–表达性的方法,类和变量名,对代码进行结构化,以便使其像故事一样读–在企业项目的整个生命周期中,许多开发人员会来来往往,并且比编写代码更频繁地阅读代码
- 测试–尽管不是直接作为代码库的一部分,但单元测试是许多代码质量特征的启用和强制因素
关于代码质量,我非常感谢Kent Beck的四个简单设计规则 。
您将为忽略代码质量付出很多
如果您不关心代码质量,那么您最终将得到意大利面条代码,因为它们之间的不同关注点(表示,业务逻辑,安全性,日志记录,不同的业务需求等)交织在一起,因此没人能再次将它们分开。 较长的代码段会执行数千种不同的操作(通过复制和粘贴编程在许多地方使用相同的功能),其中包含复杂的多级if-else语句,最好使用魔术常数和神秘命名的变量,这些代码块没有明确的目的,没人知道它们非常有用,但是没有人敢删除它们。更改此类代码中的任何内容都是极具风险的,因为经常需要在很多地方进行更改(您不知道这些地方)。 试图理解代码将花费您很多时间,并且可能会导致大脑在设法掌握代码的作用,原因和方式之前就开始燃烧。 您极有可能无意间破坏某些东西,并且因为您没有单元测试,而且因为代码没有单元而无法创建任何代码,所以它无法创建任何东西,它是有机的,无定形的野兽,除非有太晚的时间,否则没有任何通知您的问题。
当然,这是最糟糕的情况,在这种情况下,大规模(即代码的体系结构)以及单个对象和方法的微观规模都被忽略了。 在这两个中,第一个更糟,因为它不可能部分地改进代码,但是它们都倾向于导致代码的进一步衰减。 开发该软件的开发人员将学习错误的习惯,并为跌倒做进一步的贡献。
如果在5、10年内使用该软件并对其进行了进一步开发,则许多人将尝试使用该软件,并且每个人都将为解决这些问题而苦苦挣扎,并在尝试理解代码,进行修改时付出了很多时间。非模块化的,无定形的,复制和粘贴的代码绝对不适合任何可扩展性,并且最终在寻找由那些失败的尝试引起的错误时也是如此。 这些人的时间非常昂贵,最初是客户应该从快速破解解决方案中获利,然后才是账单。
结论
代码质量,特别是在整体结构级别上,是企业软件的基本属性,随着软件的进一步维护,修改和调整,代码质量直接转换为财务损失或收益。 客户可能不了解他的无形财产,因此,作为技术人员,我们有责任对其进行解释和维护。 我们必须努力争取良好的代码质量,以使代码能够继续存在而不会随着时间的流逝而腐烂。 质量永远不会是完美的,但是它必须足够好-这在一定程度上可以通过各种复杂性指标等来衡量-我们应该遵循Bob叔叔对代码质量的男孩子探究规则:当您处理一段代码时,以更好(永远不会更糟!)的状态返回它,那么您就明白了。 这意味着,如果有机会,他们应该毫不犹豫地进行小规模改进。 结果将是,随着时间的流逝,代码的整体质量将提高,而不是像通常那样衰减。 客户的钱包会为此而爱你。
参考: 代码质量对客户至关重要。 很多。 来自我们的JCG合作伙伴Jakub Holy 。
相关文章:
翻译自: https://www.javacodegeeks.com/2011/04/code-quality-matters-to-customers-lot.html