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

开发 后端
在本文中,将介绍在目前软件工程中经常用到的持续集成概念,并且会介绍在PHP开发中,如何能用好PHP目前开源的一些持续集成管理工具,去管理好项目。

在本文中,将介绍在目前软件工程中经常用到的持续集成概念,并且会介绍在PHP开发中,如何能用好PHP目前开源的一些持续集成管理工具,去管理好项目。

持续集成的概念

持续集成的概念是在现代软件工程中提出的,最早见于敏捷开发方法论中,大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

下面介绍PHP中的持续集成工具:

PHPUNIT

首先,PHPUNIT是PHP中的单元测试利器,项目地址在:http://www.phpunit.it。它

能自动运行你编写的单元测试代码,并给出是否通过的结果。安装步骤如下,可以使用PHP中的PEAR安装:

  1. sudo apt-get install php5-curl php-pear php5-dev  
  2. sudo pear upgrade pear  
  3. sudo pear channel-discover pear.phpunit.de  
  4. sudo pear channel-discover components.ez.no  
  5. sudo pear channel-discover pear.symfony-project.com  
  6. sudo pear install phpunit/PHPUnit 

 之后,就可以在命令行下,以如下格式执行phpunit:

Phpunit 单元测试的php文件名.php

此外,还可以执行如下命令,生成单元测试的覆盖报告:

phpunit --coverage-html ../CodeCoverage

这将在指定的目录中生成单元测试的覆盖报告,比如这个例子中,将在目录CodeCoverage中生成单元测试覆盖报告,如下图:

PHP开发必备 PHP持续集成工具介绍(上)
▲点击看大图

如果点上图的每一个PHP文件,还可以具体看到每个文件的单元测试覆盖情况,如下图:

PHP开发必备 PHP持续集成工具介绍(上)
▲点击看大图

从上图中,可以看到每个PHP文件中,调用的方法的单元测试覆盖情况,还可以看到具体哪些代码行是已经单元测试覆盖过,哪些没有覆盖过(绿色表示已经覆盖,橙色表示还没覆盖),如下图:

PHP开发必备 PHP持续集成工具介绍(上)
▲点击看大图

PHP CodeSniffer

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

  1. sudo pear install PHP_CodeSniffer  
  2. phpcs --standard=Zend c:\phpcode 

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

PHP CodeSniffer
▲点击查看大图

PHP Depend

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

  1. sudo pear channel-discover pear.pdepend.org  
  2. 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文件的互相依赖调用(引用)情况及每个方法、函数,类的代码行,一个例子如下:

  1. <?xml version=”1.0” encoding=”UTF-8”?>  
  2. <metrics noc=”3” nof=”0” noi=”0” nom=”6”>  
  3. <package name=”+global” noc=”17” nof=”0” noi=”0” nom=”237”>  
  4. <class name=”data_container”nom=”55”>  
  5. <file name=”/home/case-study/libs/data/container.php”/>  
  6. </class>  
  7. <class name=”data_download” nom=”10”>  
  8. <file name=”/home/case-study/libs/data/download.php”/>  
  9. </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)的详细解析。

【编辑推荐】

  1. 草根语言PHP的进化史
  2. 中国应用开源脚本语言PHP的水平如何?
  3. 是什么造成PHP远程文件包含漏洞产生
  4. AJAX/PHP/JQuery/CSS设计拖拉式购物车
责任编辑:于铁 来源: IT168
相关推荐

2011-05-12 14:11:12

2017-02-27 18:24:34

交付开发工具

2019-04-18 10:35:30

持续集成工具Buddy

2012-02-23 10:22:03

JavaTeamCity

2023-09-04 13:26:27

PHP开发工具

2011-05-19 11:03:02

PHPDwoo

2020-12-15 11:34:35

持续集成工具

2023-03-19 11:47:57

Taro小程序持续集

2012-07-04 15:05:14

ibmdw

2011-11-30 09:11:03

PHP

2015-08-06 09:22:19

开源持续集成服务器工具

2017-02-27 18:35:23

集成交付部署

2016-08-05 17:19:37

持续集成持续交付系统运维

2015-12-02 14:56:07

Docker开发模式持续集成

2017-10-19 09:47:55

容器化微服务集成

2021-03-31 09:00:00

管道集成工具

2018-01-12 08:29:11

持续集成工具

2009-06-14 18:05:58

ibmdwWebSphere

2015-07-27 11:32:24

Docker持续集成Docker部署

2015-09-24 09:43:08

阮一峰持续集成
点赞
收藏

51CTO技术栈公众号