使用指标的优点和缺点
在本书的前两章中,你已经了解了许多工具和度量标准,它们的存在完全是为了帮助你编写更好的软件。成百上千甚至数以千计的软件工程师的知识、智慧和无数个小时的努力,都可以在几分钟内添加到你的项目中。
硬币的另一面是,你可能已经被大量的可能性压得喘不过气来。你应该选择哪些工具?未来应该关注哪些指标?
如果你已经有了这种感觉,请不要担心。在接下来的章节中,我们不会让你独自面对这些混乱,而是会帮助你找到适合自己的设置。首先,让我们花点时间看看使用代码质量度量的优点和缺点。
优点
首先,每个软件项目都是独一无二的。它的发展基于特定的环境,如开发人员的技能组合和当时可用的软件包或框架,同时也受到外部因素的影响,如截止日期,这些因素往往会对代码质量产生负面影响。
代码度量可以帮助你全面了解项目的当前状态。例如,如果你接手了一个由前团队成员开发的项目,你想知道等待你的是什么。通过对代码质量的了解,你可以立即调整对未来项目的预期努力方向。
代码质量度量还能帮助你了解代码需要改进的地方。重构代码是一项极好的培训,通过使用度量标准,你可以知道自己何时取得了成功。不管你是在做自己的小项目,还是想为开源项目做贡献,或者是在一个团队中工作,最终在报告上获得更多的绿灯总是一个不错的成就。
如果你发现有一段代码由于合理的原因急需重构,但你的项目经理却不希望你这样做,你就可以利用度量指标向他们展示事情有多么糟糕,而这只是基于你自己的观点做出的判断。代码度量是公正的,也是(令人痛苦的)诚实的。
最后,这些度量标准的另一个重要用例是防止你写出糟糕的代码。有时,编写符合所有这些规则的代码可能会有点恼人,但请放心,付出终会有回报。
缺点
之前我们说过,截止日期会损害代码质量,因为它们会阻止我们重构代码或添加更多测试。虽然这是事实,但我们必须意识到,一旦开始衡量代码质量,一些开发人员就会开始重构比必要多得多的代码,因为他们获得了更好的指标奖励。为什么会出现这种问题呢?
举个例子,假设你当前项目中有一个类,它的可维护性指数很低,NPath 复杂性很高,只要看一眼,你就能立刻发现它有多糟糕。然而,随着时间的推移,它已经逐渐成熟,经常被修复,以至于在某些时候,它已经被证明可以正常工作而不会出现错误。现在,你的工具告诉你,这个类的质量很差。你还应该对它进行重构吗?
当然,这没有明确的答案。如前所述,如果你在业余时间处理代码,那么重构一个类以去除大部分代码气味是有意义的(而且也很有趣)。如果你从事的是商业项目,比如以软件工程师为生,你就不一定有时间这样做。一方面要挤掉让软件用户不满意的漏洞,另一方面要实现用户迫切期待的功能。总之,满意的客户才是买单的人。要在开发速度和代码质量之间找到最佳平衡点绝非易事—你只需意识到,有时你不得不忍痛割爱,暂时搁置糟糕的代码。
不要利用指标来与同事竞争,或者更糟糕的是,利用指标来诋毁那些让你独自承担项目的前任开发人员。要知道,每个人都会根据自己的技能尽可能地做好工作。没有人会故意写出糟糕的代码—这种情况经常发生,因为开发人员从未听说过简洁编码原则,或者他们面临着巨大的时间压力,为了让经理或客户满意,他们不得不进行复制和粘贴编码。你的工作环境应该是一个充满尊重、乐于助人和宽容的地方,而不是竞争的地方。
总结
本章向你介绍了 PHP 世界中最常用的一些代码质量指标。此外,我们还向你介绍了帮助你收集这些指标的工具。当然,还有许多内容是本书无法涵盖的,但你不必全部了解,现在你已经对代码质量度量有了扎实的了解,这将有助于你的日常工作。
代码质量工具和度量标准肯定不是解决所有问题的灵丹妙药。一方面,它们对改进代码非常有帮助。另一方面,你也不应将它们作为终极衡量标准。有许多成功的软件类型都无法通过这些质量检查,例如 WordPress。不过可以肯定的是,如果 WordPress 的创建者事先知道的话,他们一定会采取不同的做法。
在下一章中,我们将离开理论领域。我们将学习如何将前两章介绍的工具组织到我们的项目中。每个项目都是独一无二的,因此我们将为你提供不同的口味,以满足你的需求。
进一步阅读
-
dePHPend (https://dephpend.com/) 是一款可以为 PHP 代码绘制 UML 图表的工具,可用于发现架构中的问题。