技术开发 频道

PHP开发必备 PHP持续集成工具介绍(上)

  PHP CodeSniffer

  PHP CodeSniffer是一个PHP的代码风格检测器,它根据预先设定好的PHP编码风格和规则,去检查应用中的代码风格情况,内置了ZEND,PEAR的编码风格规则,当然开发者也可以进行自定义。项目的地址在:http://pear.php.net/package/PHP_CodeSniffer/redirected,安装方法如下:

sudo pear install PHP_CodeSniffer

phpcs
--standard=Zend c:\phpcode

   其中phpcs –standard后指定了使用Zend的建议代码风格标准进行检查,最后一个参数是要检查的PHP文件所在的目录。运行后,检查的一个效果图如下图所示:

PHP CodeSniffer
▲点击查看大图

  PHP Depend

  PHP Depend(http://pdepend.org/)是一个PHP中静态代码分析的工具。它可以用来检查你的PHP项目中的代码规模和复杂程度。安装方法如下:

  sudo pear channel-discover pear.pdepend.org

  sudo pear install pdepend
/PHP_Depend-beta

   使用的一个例子如下:

  pdepend --jdepend-xml=../jdepend.xml --jdepend-chart=../dependencies.svg --overview-pyramid=../overview-pyramid.svg

  上面会生成一个XML文件,两个SVG的图形文件。其中XML文件说明了项目中各PHP文件的互相依赖调用(引用)情况及每个方法、函数,类的代码行,一个例子如下:

<?xml version=1.0” encoding=”UTF-8?>
<metrics noc=3” nof=0” noi=0” nom=6>
<package name=+global” noc=17” nof=0” noi=0” nom=237>
<class name=”data_container”nom=55>
<file name=/home/case-study/libs/data/container.php”/>
</class>
<class name=”data_download” nom=10>
<file name=/home/case-study/libs/data/download.php”/>
</class>

   其中的noc含义是类的代码的行书,nof为函数的代码行数,noi为接口代码行数,nom为方法method代码行数。

  接下来我们来看下产生的一张SVG图,该图如下所示:

PHP CodeSniffer

  这张图的反映了项目中包的依赖性度量情况。其基本理论来源于Robert C. Martin的论文(http://www.objectmentor.com/resources/articles/oodmetrc.pdf)中所介绍的关于软件中模块依赖性和稳定性的度量。其中,提到了如下概念:

  Afferent Couplings (Ca)

  依赖于被分析package的其他package的数量,用于衡量pacakge的职责。

  简单来说,即有多少其他的包或模块调用了被分析的包或模块。

  Efferent Couplings (Ce)

  被分析package的类所依赖的其他package的数量,用于衡量package的独立性。

  即它调用了多少其他包。

  Abstractness (A)

  被分析package中的抽象类和接口与所在package所有类数量的比例,取值范围为0-1。如果该值为0,证明包中没任何抽象类,有的只是具体实现逻辑方法的类,如果该值为1,则包中只有抽象类或接口了

  Instability (I)

  I=Ce/(Ce+Ca),用于衡量package的不稳定性,取值范围为0到1。I=0表示最稳定,I=1表示最不稳定。

  Distance (D)

  用于衡量package在稳定性和抽象性之间的平衡。可以看到,最理想的情况是A+I越趋近1的,这样能获得抽象性和稳定性的非常好的平衡。

  此外,介绍php depend中生成的另外一张图的含义,图片如下:

PHP CodeSniffer

  在这张图中,最上面的ANDC表示继承其他类的平均数目,即项目中有多少类是继承其他的类;AHH是继承其他类的层次数。CALLS是方法被调用的总的次数,FANOUT是类所引用的类型数目。而CYCLO是圈复杂度(关于圈复杂度的解析,请参考(http://en.wikipedia.org/wiki/Cyclomatic_complexity)。LOC是代码行数,NOM是项目中的方法的数目,NOC为项目中类的数目,NOP为项目中包的数目。根据上图中标明的除法规则,可以计算出相关的数据。更多的请参考php depend手册(http://pdepend.org/documentation/handbook/reports/overview-pyramid.html)的详细解析。

0
相关文章