如果对我的一个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代码库中应该较低吗?
  • 没有使用 namespace ,是好是坏?

  • 最后一个问题您如何使用phploc的输出分析代码库?

    最佳答案

    低圈复杂度是好的,高圈是不好的; statics are hard to unit test,但是(虽然有些人认为它们和eval一样糟糕),但它们确实是有目的的; phploc的其他措施可能会有解释。

    但是,您实际上应该将phploc与其他工具(例如pdependphpmd)一起使用。 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统计信息

    10-08 19:14