PHP’s industrialization The new frontier
Agenda Scale up your work Get the tools and methods Go to the other sessions in Barcelona
Speaker Damien Seguy Expert Open Source services Raise elePHPants damien.seguy@alterway.fr
Yes, we take questions
Function lists 692 defined functions, 611 actually used function CMP2() : 18 different definitions fct_create_thjipk(), datefren(), fct_lstagt_key(), phpinfo_system_old(), fct_repeat_even_requ(), fct_vrai_champ_general() Every one letter variable used : $a, $b, $c,...
Function spring cleaning It’s time to check them List them, see what they do Refactor the code, remove doubles Gather them in a central library, document them Build a solid framework...
Function spring cleaning It’s time to check them List them, see what they do Refactor the code, remove doubles Gather them in a central library, document them Build a solid framework...
Romantic PHP
Modern PHP
Reality check 65 portals next 6 months 6 people to upgrade 350 intranet 120 events sites a year on 150 servers App on one city, cover 12 cities by xmas, expand to 2 countries next year. full time employee for deployements
PHP industrialization Going from single to multiple Being proactive, rather than reactive Scale your work, not your server Otherwise, go to Rasmus session
Stage 1 Conventions IDE VCS
Conventions PEAR, Zend Frameworks, Symfony... Choose one, use one Bring unity Code_sniffer
IDE Choose it for ease of use Netbean / Symfony, Zend tools, Komodo / cakePHP Code browser, editor, debugger, unit test integration, VCS integration, framework integration.
VCS Subversion, git, CVS, bazaar Resolve conflicts Stores and distribute the code Allow versioning, paralell development, rollback Code not in VCS does not exists
VCS Code Bug Track Production VCS Continuous Unit Test integration
Recommanded sessions Clean Code / Zend Framework
Stage 2 Methodologies Frameworks Tests
Methodologies Explain how you produce code Get your users involved Make short cycles to deliver, adapt and polish Agile methodologies : SCRUM, XP, Lean SD, Open Unified Process
Short cycles
Frameworks Frameworks Choose one, for development speed Components, conventions, scafolding, tests Community, expertise, training
Unit Tests PHP Unit, Simple Test, Lemon, Zend_Test, phpt
Tests helps decouple Production Avoid regression Code Platform Prevent your recall Shows progress Serves as manual Help at communication Customer use
Functional tests GreenPepper, Fitnesse
Recommanded sessions Agile development for PHP, SCRUM con exito Symfony 2.0 State of quality assurance tools
Stage 3 Conception Continuous integration Automated deploiement Documentation
Automated deployment Phing, maven, ant, pear Needed for continuous integration The forgotten part of development Compulsory for large plat-forms, high scaling
Continuous integration Check the code in back ground phpUnderControl, Xinc, Hudson Graphs the results Compilation, code sniffer, unit tests, coverage Log, inclusion, performances... Share with the team
Conception Class diagram, database schema, navigation ArgoUML, StarUML, PowerArchitect Describe the general organisation List everything that will need name Class, methods, constants, SESSION, includes... Check the result
Conception Document things before hand Auto-generate phpdoc Check usage in the code, check undocumented
Documentation From developper to users Have developper start it Add comments Turn it into a wiki
Recommanded sessions Tallar de PHING Continuous integration
Even further? Continuous deployment (a la flickr) Cross auditing Collaborative auditing Static analysis
Most tools come from Java Hudson / Xinc Junit / PHPUnit CheckStyle / Code Sniffer UML to PHP (but not the reverse) Static audit analysis? Code navigation ? Code audit tool ? almost...
Questions? damien.seguy@alterway.fr
Documentation Level 0 : in code Level 1 : automated, manual PHPdoc, PHPdocumentor, Doxygen Level 2 : Wiki, blogues Level 3 : books, conferences
Scaling up coding Do more Leave part of it to others
Handling bugs Level 1 : manual test before production Level 2 : automate tests before production Level 3 : hand out tests to functional
Tools Firefox, Web Developper PHP Unit, Simple Tests, phpt, Push 2 Test GreenPepper, Fitnesse
More tests Get more tests Hand them to your users Use them in requirements Use them for docs
Team Conception à cycles courts Conventions de programmation Mantras de programmation Audits croisés
Code Frameworks Business libraries Code repository Static audits
Progression Tests unitaires Tests fonctionnels Intégration continue Documentation automatique Suivi des conventions
Production Déploiement automatique Tests d’IHM Suivi des bugs
Avoid dead end tools Writing comments that are rarely read Producing doc ? Reusing unit tests ?
Scale up your work direct communication is OK for 2 mail is OK for 4 mantis is better
Aspects Automation API, PHPUnit, Including users in the tests Standards (SOAP/WSDL)
3 phases of evolution Experimentation Mission critical Strategy
Approach of coding We’ll do what we need We’ll gather in the end to make this a good library This shows a lack of anticipation
Tools without method
PHP Industrialization

PHP Industrialization