1. Continuous Integration in PHP
Why, what and how?
Wilco Jansen
October 4th 2009
Tdose, at the Fontys University of
Applied Science in Eindhoven, Netherlands
2. Wilco Jansen
Formerly Involved in Joomla
• Board member Open Source matters
• Core team member
• (first ever) Development coordinator
• Creator of the Joomla bug-squad
• Google Summer of Code program
manager 2006, 2007 and 2008 editions
• Google Highly Open participation content program manager in
2008
8. Why use continuous integration?
● The earliest possible detection of problems in the software
● Detection of integration problems, no last minute hiatus
before releases
● Early warning of broken/incompatible code
● Early warning of conflicting changes
● Immediate unit testing of all changes
● Constant availability of a “current” build for testing, demo
or release purposes
● The immediate impact of checking in incomplete or broken
code acts as an incentive to developers to learn to work
more incrementally with shorter feedback cycles
11. The classic approach
● Write a test program (or be the tester)
● Run the test program (or perform the test
yourself)
● Manually verify the output
● Delete the test program
20. ● Defacto standard for unit testing of PHP
applications
● Member of the xUnit family
● Inspired by tools like Junit, TestNG, Junitour,
JExample etc.
● Latest stable version 3.4.0 (released 16
September 2009)
23. Software testing categories
● Small – Unit tests
● Check conditional logic in the code
● No debugger required
● Runs in less than 1 ms
● Small – Functional tests
● Check whether the interface between classes abide
by their contacts
27. PHP Unit and code coverage analyses
● Helps you with analyzing which statements,
branches and paths are executed within the
test run:
● Statement coverage
● Branch coverage
● Path coverage
● 100% code coverage is preferred, but does not
say anything about the test completeness!
30. PHP Code Sniffer “Sniffs”...
● PHP
● Javascript
● CSS
To detect violations of defined coding standards
with as main goal to ensure code remains clean
and consistent.
Following coding standards are default available:
MySource, PHPCS, Zend, PEAR and Squiz
32. Other available tools
● PHP copy/paste detector
● PHP Depend – software metric tool
● PHP Loc – Lines of code analyses
● PHP PMD – Project Mess Detector
Note: only copy/paste detection will be part of this presentation
38. General mode of operation
● Developer commits code
● Commit triggers a build (initiated by versioning
system, or by polling the version system)
● Build script is run
● Output is processed, notification send
44. One of the hardest things to express about
continuous integration is that makes a
fundamental shift to the whole development
pattern, one that isn't easy to see if you've never
worked in an environment that practices it. In fact
most people do see this atmosphere if they are
working solo - because then they only integrate
with themselves. For many people team
development just comes with certain problems
that are part of the territory. Continuous
integration reduces these problems, in
exchange for a certain amount of discipline.
46. The end...
Acknowledgement Links
● Part of this presentation was inspired ● PHPUnit - http://www.phpunit.de
by “The State of QA Tools for PHP” ● PHP Code sniffer -
from Sabastian Bergmann
http://pear.php.net/package/PHP_CodeSniffer/
About me and this presentation ● PHP copy/paste detector -
● Personal blog can be found on http://github.com/sebastianbergmann/phpcpd/
http://www.jfoobar.org ● Cruisecontrol -
● Slides will be uploaded to http://cruisecontrol.sourceforge.net/
http://slideshare.net/willebil ● PHP Under control - http://phpundercontrol.org/
● Follow me on twitter: ● Bamboo -
http://twitter.com/willebil
http://www.atlassian.com/software/bamboo/
● PHP lines of code -
http://github.com/sebastianbergmann/phploc