phpUnderControl 㧠CakePHP ã使ã
éãããã¦ãã¾ãã¾ãããã
ã®ç¶ãã§ããCakePHP 勉強会で話した内容 ã®ããããï¼ãã詳細ãªã¨ããã§ãã
ä½ãããããã
phpUnderControl 㯠unit test 㧠PHPUnit ã使ãåæã§ä½ããã¦ãã¾ãï¼ã¨ããã PHPUnit ã¨åã phpunit.de ã§é å¸ããã¦ãã¾ãï¼ããCakePHP ã§ã¯ SimpleTest ã使ãããã«ãªã£ã¦ãã¾ãã
CI ã§ä¸çªéè¦ã ã¨æãããããã¹ãã«å¤±æããå ´åã«éçºè ã«éç¥ãããã¨ããã ããå®æ½ãããå ´åã¯ã
<target name="phpunit"> <exec executable="${basedir}/source/cake/console/cake" dir="${basedir}/source" failonerror="on"> <arg line="testsuite -app ${basedir}/source/app app all"/> </exec> </target>
ã¨ããæãã«ãã¦ãã¾ãã°ãããããªæ°ã¯ãããã§ããï¼åä½ã¯ç¢ºèªãã¦ã¾ããï¼ãããã ãã§ã¯ phpUnderControl ãåºåãã¦ãããã¬ãã¼ãæ©è½ãæ´»ãããã¨ãã§ãã¾ããã
ãã®ç»åãè¦ã¦ã®ã¨ãããä¸è¨ã®ã¿ã¹ã¯ã追å ããã ãã§ã¯ã
- ã°ã©ããçã£ç½ãªç®æããã
- ãã¹ãã® NG ãæ¾ãã¦ããªãï¼ãã¹ã¦ OK ã«ãªã£ã¦ããï¼
- ï¼ãã®ç»åããã¯èªã¿åãã¾ãããï¼ãã¹ãã® NG ç®æã«ã¤ãã¦è©³ç´°ãªæ å ±ãé²è¦§ã§ããªã
ã¨ãã£ãç¹ãå¿ä½ç¡ãã§ãã
ãããªããã§ããããã®åé¡ã解決ããã®ãä»åã®ç®æ¨ã§ãã
ã¬ãã¼ãçæã®æµã
ã¾ããphpUnderControl ãã¬ãã¼ããã°ã©ããçæããã¾ã§ã®æµãã説æãã¦ããã¾ãã
phpUnderControl 㯠build.conf ã®è¨å®ã«å¾ã£ã¦ phpDocumentorãPHP_CodeSnifferãPHPUnit çãå¼ã³åºãããã®çµæãä¸ã¤ã® XML ãã¡ã¤ã«ï¼CruiseControl é ä¸ã® logs/ï¼ããã¸ã§ã¯ãåï¼/logï¼ã¿ã¤ã ã¹ã¿ã³ãï¼ï¼ãã«ãçªå·ï¼.xmlï¼ã«ã¾ã¨ãã¾ãã
ãã®å¾ããã® XML ã input ã¨ãã¦ã
ã»JSP å
㧠XSL ãå©ç¨ããã¬ãã¼ããçæ
ã»phpuc graph å
㧠DOMXPath ãå©ç¨ããã°ã©ãçæï¼æå¦å¤å®
ãè¡ã£ã¦ãã¾ããï¼ãã®ããã«äºç¨®é¡ã®å¦çãããã®ã§ããã以éé¢åãªã®ã§ã¾ã¨ã㦠XSL ã¨è¨è¿°ãã¾ããï¼
å³ã«ããã¨ãã ããããããªæãã§ãã
ãã¦ãSimpleTest ã§ã XML ã§åºåããä»çµã¿ï¼XMLReporterï¼ãããã¾ããããããä½ã XML ã¯ãæ®å¿µãªãã PHPUnit ã® XML ã¨ã¯å½¢å¼ãç°ãªãã¾ãããã®ãããXSL ã«ããå¤æã§æå³ã©ããã®è§£æãã§ãã¾ããã
ããã解決ãããã¨ããã¨ãäºç¨®é¡ã®æ¹æ³ãããã¾ãã
(1) XSL ãæ¸ãæãã¦ãSimpleTest ã§ä½æãã XML ãèªã¿è¾¼ããããã«ãã
ããã®ã³ã¡ã³ãæ¬ã§è»½ã触ãããã¦ããæ¹æ³ã§ããããããã¡ããæ£æ»æ³ã§ããæè»æ§ã¯ããã¾ãããSimpleTest ã§ã©ãããã¬ãã¼ããåºåãã¹ããï¼ã¨ããæ¹åæ§ã決ã¾ã£ã¦ããªãã¨ã´ã¼ã«ãè¦ãã«ããæ°ããã¾ããï¼ä¿ºãã©ã¼ããããããããã§ãã¦ãã¾ããããï¼
(2) SimpleTest å´ã§ PHPUnit ã¨åãæ§é ã® XML ãåãã¦ãã
å°ã è¡æ£èãæ¹æ³ã§ããããã¾ããã㨠PHPUnit ã®ã¬ãã¼ããå©ç¨ããä»ã®ã½ããã§ããSimpleTest ã使ããããã«ãªãããããã¾ããã
(1) ã¯ãããã£ã¦ãã人ãããããã§ãããç§ã¯ (2) ã®æ¹æ³ã試ãã¦ã¿ã¾ããã
å®éãã£ã¦ã¿ãã¨
PHPUnit ã¨ã¯ãã¹ãã±ã¼ã¹ã®æ§é ãéãï¼SimpleTest ã¯ãã¹ãã±ã¼ã¹ããã¹ãããå½¢ã«ãªãï¼ï¼ããã§ãå®å ¨ã«åãå½¢ã«ããã®ã¯å¤§å¤ããã§ãããã¨ãããã XML ãèªã¿è¾¼ãå´ã®è¨å®ã«ç¡çããåãã㦠XML ãä½ããã¨ã«ãã¾ãã
å ·ä½çã«ã¯ã以ä¸ã®ç®æã« XPath çã®è¨è¿°ãããã®ã§ããã®è¨è¿°ã«åãã㦠XMLReporter ãã«ã¹ã¿ãã¤ãºãã¾ãã
- ç»é¢ã®è¡¨ç¤ºç®æï¼XSL ã使ç¨ãã¦ããç®æï¼
- path/to/cruisecontrol/webapps/cruisecontrol/xsl é ä¸ã® .xsl ãã¡ã¤ã«
- ã°ã©ãæç»ç®æ
- PEAR ãã£ã¬ã¯ããªé ä¸ã® phpUnderControl/Graph/Input é ä¸ã®åãã¡ã¤ã«
ãã¡ã¤ã«å | çæãã.svg | ã°ã©ãã®èª¬æ |
---|---|---|
BuildBreakdownInput.php | 01-breakdown-of-build-types | Breakdown of Build Types |
BuildBreakdownTimelineInput.php | 02-breakdown-of-build-timeline | Breakdown of Build Timeline |
UnitCoverageInput.php | 03-unit-coverage | Unit Coverage |
UnitTestInput.php | 04-unit-tests | Unit Tests |
TestCodeRatioInput.php | 05-test-to-code-ratio | Test to Code Ratio |
CodeViolationInput.php | 06-coding-violations | Coding Violations |
UnitTestExecutionTimeInput.php | 07-test-execution-time | Test Execution Time |
- æå¦å¤å®ç®æ
- phpUnderControl/Data/Logs/PHPUnitTestLogAggregator.php
ã¾ããCakePHP ã«ã¯ CUI ã§å ¨ãã¹ããå®æ½ãã
cake testsuite app all
ã¨ããã³ãã³ããããã¾ããããã®åä½ãå°ãå¤ãã testreport ã¨ããã·ã§ã«ãç¨æãã¦ãXMLReporter ãå©ç¨ããããã«ãã¾ãã
å®æå
XMLReporter ã®ã«ã¹ã¿ãã¤ãºï¼testreport ã·ã§ã«ã®è¿½å ãè¡ããããã§ãã
対å¿ãã¼ã¸ã§ã³ã¯
- CakePHP 1.2.3.8166
- SimpleTest 1.0.1
ã§ãsvn diff --summarize ã§ããã¨
M vendors\simpletest\xml.php
A cake\console\libs\testreport.php
ãããªæãã®æ§æã«ãªã£ã¦ãã¾ãã®ã§ãSimpleTest ã vendors/simpletest ã«å±éãã¦ããå¿ è¦ãããã¾ãã
使ãæ¹
ä¸è¨ã®ããããé©ç¨å¾ã以ä¸ã®ç·¨éãè¡ãå¿ è¦ãããã¾ãã
cake\console\libs\testreport.php å ã«åºåå ã®ãã¹ããã¿æ¸ãããã¦ãã¾ãã®ã§ã
file_put_contents('path/to/project/build/logs/phpunit.xml', ob_get_contents());
ã®è¡ãç·¨éãã¦ãã ããã
ãã®å¾ãbuild.xml ãç·¨éãã¾ãã
<target name="phpunit"> <exec executable="${basedir}/source/cake/console/cake" dir="${basedir}/source" failonerror="on"> <arg line="testreport -app ${basedir}/source/app app all"/> </exec> </target>
ã¨ãã£ãæãã§ä½¿ããã¯ãã§ããï¼cake ã«å®è¡æ¨©éãã¤ãã¦ããå¿ è¦ãããã¾ããï¼
ãªããtestreport.php 㯠testsuite.php ãå ã«ãããã¡ã¤ã«ã§ãã®ã§ãSVN ã§ã¡ããã¨ç®¡çãããæ¹ã¯
svn cp cake\console\libs\testsuite.php cake\console\libs\testreport.php
ã¨ãããã¨ã§ testreport.php ãåé¤âãããé©ç¨ã¨ãã£ãæµãã§ä½æ¥ããã¨ããããããã¾ããã
é å¸å½¢æ ã«ã¤ãã¦
æ¬å½ã¯
- CakePHP æ¬å®¶ã®ã½ã¼ã¹ã fork
- SimpleTest ãããã«ã³ãã¼
- å¿ è¦ãªå¤æ´ãå®æ½
ã¨ããæµãã§è¡ããã¨æã£ã¦ãããã§ãããã©ã¤ã»ã³ã¹å¨ããé¢åãªã®ã§ãããå½¢å¼ã§ã®é å¸ã«ãã¦ãã¾ãã
ä½ãé¢åãã¨ããã¨ã
- CakePHP 㯠MIT License
- SimpleTest 㯠LGPLï¼Open Group Test Suite License ãä½µè¨ããã¦ãããã©è©³ç´°ä¸æï¼
ã¨ãªã£ã¦ãããCakePHP ã®ãªãã¸ããªã« LGPL ã®ã½ã¼ã¹ãæ··å
¥ããã®ãé¿ãããã£ãããã§ãã
ï¼å
ã
GPL ã LGPL 㯠PHP ã®ãããªå½¢æ
ãæ³å®ãã¦ããªãã©ã¤ã»ã³ã¹ãªã®ã§ãã©ãæ±ãã®ãé©åãªã®ããããããã¾ãããXMLReporter ãå
ã«ããä¸ããä½ããªããã°ãã©ã¤ã»ã³ã¹ãªããæ°ã«ããªãã¦ãããã§ããããã©ãï¼
æ¹åã§ããç¹ï¼ã§ããªãã£ãç¹
ç¾ç¶ã§ã¯ãããªæãã§ãã
- ãã¹ãã® NG ããã«ãã¨ã©ã¼æ±ãã«ã§ããããã«ãªã£ã
- ãã¹ãã®ä»¶æ°ãæ¾ããããã«ãªã£ã
- Unit Tests ã®ã°ã©ãã¨ãTest to Code Ratio ã®ã°ã©ãã®ãã¹ãã«é¢ããé ç®ã表示ããã
- ãã¹ãã® NG ç®æã«ã¤ãã¦è©³ç´°ãªæ å ±ãæ¾ããããã«ãªã£ã
ä»å¾ã®èª²é¡ã¨ãã¦ã
- ãã¹ãã®ã¬ãã¼ããã¾ããã«æ´å½¢ãã
- å 容ã«ãã£ã¦ã¯ãããªæãï¼æ¨ªå¹ 2600 px ã¨ãï¼ã§ãã¶ã¤ã³ãå´©ãã¦ãã¾ãã¾ã
- ãã¹ãã®æè¦æéãåå¾ãã
ã¨ãã£ãç¹ãæãããã¾ãã
ã¾ããæä½éã®å¤æ´ããè¡ã£ã¦ããªãããã以ä¸ã®ç¹ã§ä¿å®æ§ãæªããªã£ã¦ãã¾ãã
- åºåå
ã®ãã¹ããã¿æ¸ããã¦ãã
- cake ã®å¼æ°ã¨ãã¦æ¸¡ããããã«ãããã£ãããå°æ¥çã«ã«ãã¬ãã¸æ¸¬å®ãå ¥ããã¨ãªã㨠cov ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ãåããããªãã£ãã®ã§æ¾ç½®ãã¦ãã¾ã
- ob_xxxxxx ã§ç¡çãããã¡ã¤ã«ã«åãåºãã¦ãã
- å ã æ¨æºåºåã«åãå½¢ã§å®è£ ããã¦ããããå¤æ´ç¹ãå°ãªããããããã®å½¢ã§å®è£ ãã¦ãã¾ã
ããã¾ã§ãåèã«ã¨ã©ãã¦ãæ°ãã Reporter ãæ¸ãç´ãï¼XSL ã«æãå ¥ããã»ããæã£åãæ©ãããããã¾ããã
ãã®ä»ã§ããªãã£ããã¨
ã¤ãã§ã«ä»å¾ããããã®ã使ããããªã¼ãã¨èãã¦ãããã¼ã«ã«ã¤ãã¦ãæ¸ãã¦ããã¾ããç§ã¯ãã°ãã PHP æ¡ä»¶ã«ä¿ãããªãäºæãããã®ã§ãæ°ãåããæ¹ã¯è©¦ãã¦ã¿ã¦ãã ããã
phpmd ã phpcpd ã使ãã° PHPUnit PMD ç¸å½ã®ãã¨ãã§ããããã
PHP ã® software metrics ãã¼ã«ãphpUnderControl ä½è ï¼ï¼ï¼ã® Manuel Pichler æ°ã¯æè¿ãã£ã¡ã«æ³¨åãã¦ãããããã