如果对我的一个PHP项目(开放源代码)运行phploc
,则会看到此输出。
phploc 1.6.4 by Sebastian Bergmann.
Directories: 3
Files: 33
Lines of Code (LOC): 2358
Cyclomatic Complexity / Lines of Code: 0.08
Comment Lines of Code (CLOC): 903
Non-Comment Lines of Code (NCLOC): 1455
Namespaces: 0
Interfaces: 3
Classes: 28
Abstract: 1 (3.57%)
Concrete: 27 (96.43%)
Average Class Length (NCLOC): 49
Methods: 149
Scope:
Non-Static: 128 (85.91%)
Static: 21 (14.09%)
Visibility:
Public: 103 (69.13%)
Non-Public: 46 (30.87%)
Average Method Length (NCLOC): 9
Cyclomatic Complexity / Number of Methods: 1.69
Anonymous Functions: 0
Functions: 3
Constants: 9
Global constants: 0
Class constants: 9
通过这种静态分析,如何判断该代码库是好是坏?还是写得好不好?
3.57%
抽象类是好是坏? 14.09%
静态方法。它在OOP代码库中应该较低吗? 最后一个问题您如何使用phploc的输出分析代码库?
最佳答案
低圈复杂度是好的,高圈是不好的; statics are hard to unit test,但是(虽然有些人认为它们和eval一样糟糕),但它们确实是有目的的; phploc的其他措施可能会有解释。
但是,您实际上应该将phploc与其他工具(例如pdepend和phpmd)一起使用。 pdepend站点特别说明了很多分析方法,而phpmd输出非常不言自明。
编辑
作为比较,我目前正在使用的代码(https://github.com/MarkBaker/PHPGeodetic):我对抽象/具体类的级别感到满意,尽管它可能会更高一些。我有一种方法具有较高的圈数复杂度,足以使这些数字有些偏斜,但是这种方法不容易分解。和少数更长的方法(但不足以触发phpmd警告)。
Lines of Code (LOC): 4003
Cyclomatic Complexity / Lines of Code: 0.07
Comment Lines of Code (CLOC): 1580
Non-Comment Lines of Code (NCLOC): 2423
Namespaces: 0
Interfaces: 1
Traits: 0
Classes: 25
Abstract: 4 (16.00%)
Concrete: 21 (84.00%)
Average Class Length (NCLOC): 103
Methods: 160
Scope:
Non-Static: 129 (80.62%)
Static: 31 (19.38%)
Visibility:
Public: 131 (81.88%)
Non-Public: 29 (18.12%)
Average Method Length (NCLOC): 16
Cyclomatic Complexity / Number of Methods: 2.12
Anonymous Functions: 2
Functions: 0
Constants: 66
Global constants: 0
Class constants: 66
总的来说,我很想对公共(public)/私有(private),非静态/静态和具体/抽象使用80:20规则;但很大程度上取决于您实际编码的内容
可能更重要的是环复杂度/方法数量...我不喜欢这个数字太高;但是,如果它上升到高于2.5的平均值,我会更仔细地查看phpmd统计信息