PHP CodeSniffer有多大用处?一般代码标准执行?[已关闭]

2022-08-30 10:07:28

我正在涉足在我们的持续集成服务器上设置PHP CodeSniffer的想法,以提高我们代码库的质量。阅读文档后,我对规范化和实施编码标准的想法感到非常兴奋。但是,我想知道我们产品的实际改进。我很清楚嗅探器只检测违反定义的编码标准的违规行为,但是干净,一致的代码库提供了什么类型的好处?是否值得用10万多行代码重构一个项目以符合PEAR标准?

对于那些不熟悉PHP CodeSniffer或一般代码嗅觉的人,这里有一个示例输出:

文件: /path/to/code/myfile.php
找到 5 个影响 2 行的错误
--
2 |错误|缺少文件文档注释
20 |错误|PHP关键字必须小写;预期为“假”,但发现“假”
47 |错误|行未正确缩进;原定有4个车位,但发现 1
51 个车位|错误|缺少函数文档注释
88 |错误|行未正确缩进;预计有9个车位,但发现6个

严格来说,用户/客户不会注意到重构为符合标准的产品有任何差异,但我想知道是否还有其他隐藏的好处。

现在,我们的代码绝不是草率的,我们试图遵循我们自己的个人标准,这些标准在很大程度上来自Pear的编码标准,但训练有素的眼睛可以发现差异。

所以我的问题是,它们在多大程度上提高了产品的质量。它带来了什么样的潜在利益?

我只是痴迷于强迫我的愿望,使我们的产品更接近一套标准?这值得吗?如果是这样,您使用了哪种策略来实现代码嗅探器并更正检测到的后续冲突?


答案 1

首先,我是PHP_CodeSniffer的维护者,所以我显然在这方面有偏见。但是在我作为PHP开发人员的10年中,我也在一些大型代码库上工作过,所以我希望我能带来一些具体的理由来解释为什么编码标准是一件好事。我可以写一个关于这个主题的博客系列,但我只是给你一个关于PHP_CodeSniffer是如何产生的小故事,这样你就可以理解这个工具为我解决的问题。

我参与过几个大型CMS项目。第一个背后有一堆代码和一个相对较小的开发团队。我们没有标准。但我们没有真正的问题。团队很小,在一起呆了很长一段时间。我们习惯了彼此。

然后我们构建了一个新的 CMS。我们从几个开发人员开始。那时我是一个只有两个开发人员的团队的一员。同样,编码标准并没有给我们带来任何问题。我和另一位开发人员来自相同的背景,并且已经建立了一些我们遵循的准则。那时我们不需要PHPCS。

但是这个团队一次成长为一个开发人员,最终达到了12个全职开发人员,还有不少人来来去去。有些来自旧的CMS,有些来自公司外部。它们都有不同的背景和不同的发展方法。很明显,谁写了什么代码,因为风格是如此不同。每当你处理一些复杂的事情时,你首先必须适应他们的风格,因为这不是你习惯于看到代码的方式。这就像是第一次读莎士比亚。你需要先习惯它,然后才能以自然的速度阅读。

对于开发人员来说,必须停下来弄清楚另一种编码风格的额外时间纯粹是浪费时间。这是一个想法溜走的机会,而你却陷入了间距,缩进和括号位置的困境。归根结底,这些事情并不重要。但让我告诉你,如果它们导致开发人员打破他们的流程,它们很重要。因此,我们需要一种方法来让他们摆脱困境,让开发人员做他们最擅长的事情。

与此同时,我们进一步深入研究 JavaScript。一种新语言,风格通常被扔出窗外。代码是从示例站点复制/粘贴并混搭在一起的。当学习用一种新的语言开发复杂的代码时,找到一种方法使我们的JS看起来类似于我们的PHP是有意义的。我们可以在以后将其最小化,但是我们需要能够在语言之间快速切换,以保持我们的流程。

所以PHP_CodeSniffer生来就是为了做到这一点。它帮助开发人员使用相同的编码风格,使格式化和其他诱饵问题完全摆脱困境。它允许你在一定程度上像对待你的PHP一样对待你的JS。我用它来检测特定于产品的气味,例如未翻译的字符串或开发人员未使用我们正确的类包含代码。我还将其用于特定于语言的气味,例如确保不会留下杀死IE的JS逗号。您可以将其用于任何您想要的东西。它带有一堆嗅探,这些嗅探很容易使用XML规则集文件合并在一起。你也可以写你自己的。您可以集成第三方工具,使其成为静态代码分析的一站式商店。您可以像自己喜欢的那样认真对待标准和代码气味。

PHP_CodeSniffer,就像任何开发工具一样,应该适合你。你不为它工作。如果它产生了太多你不关心的错误,请自定义标准以删除你不想要的错误,或者将错误变成警告。但是,如果我的故事听起来像是你正在经历或将来可能经历的事情,那么值得仔细看看PHP_CodeSniffer,看看它是否能帮助你。

我希望这有助于您和其他人理解为什么编码标准对某些项目和开发人员非常重要。这与细节无关。这是关于从导致开发人员失去焦点的事情列表中删除编码风格。


答案 2

拥有编码样式约定是一个好主意,因为它可以帮助开发人员在处理未编写的代码时不会因以不同样式编写的代码而分心。这将使你的代码库表面上更干净。如果您可以自动化它,那就太好了,但是通常不需要花费大量精力来遵守(除非当前的样式很糟糕)。如果你已经有一个足够好的标准,坚持下去。

代码嗅觉是不同的:它是(一组)症状,可能表明代码存在更深层次的问题。例如,循环复杂性、长方法名称、大型类、非描述性名称、重复代码等。这通常更成问题,因为它可能会彻底损害代码的可维护性。你绝对应该解决这些问题。

PHP CodeSniffer似乎主要用于检查样式约定,而不是代码气味。如果你能用它来帮助强制实施样式约定,那就太好了。但要注意,它不会使您的代码库大大改善。您将需要进行手动审核才能完成此操作。

如果你想用它来检查你是否符合你目前的标准,这似乎是可能的,请参阅问题的答案“我不同意你的编码标准!我能让PHP_CodeSniffer强制执行自己的吗?在他们的常见问题解答中


推荐