Outils open source pour
accélérer et industrialiser
vos développements


 Solutions Linux 2010
Qui suis-je ?

     Julien PAULI

     Formateur pour Alter Way Formation
     Architecte logiciel certifié PHP / ZendFramework
     Membre de l'AFUP
     Co-auteur du livre "ZendFramework bien développer
      en PHP"
     Contributeur open source PHP / Apache




7 avril 2010     ALTER WAY SolutionsLinux 2010            2
Plan

     Panorama des outils open source aidant à l'industrialisation

     IDE
     Gestionnaire de versions
     Frameworks
     Tests
     Métriques de code
     Déploiement / Sauvegardes
     Intégration continue
     Conclusion




7 avril 2010      ALTER WAY SolutionsLinux 2010              3
Les outils open source
     PHP : le monde du développement Web open source à
      portée




7 avril 2010     ALTER WAY SolutionsLinux 2010            4
IDE : Développez sereinement

     Un éditeur de texte "simple" est souvent trop peu

     L'IDE est l'outil que le développeur manipule tous les
      jours
              Autant qu'il soit à l'aise avec
              Et que l'outil l'aide au maximum dans son travail

     Editeur avancé
     Connecteurs réseaux (SVN, SSH, FTP, SQL)
     Gestion des librairies et frameworks
     Production de documentation




7 avril 2010              ALTER WAY SolutionsLinux 2010            5
Quelques IDE

     PDT
              Eclipse based
              Très connu des développeurs (multi langages)

     NetBeans
              Connu du monde Java
              Léger
              Percée certaine pour PHP




7 avril 2010              ALTER WAY SolutionsLinux 2010       6
IDE : PDT

     PDT
              Complétion
              Débogage
              Documentation
              Coloration
              SVN/FTP
              ...




7 avril 2010            ALTER WAY SolutionsLinux 2010   7
Gestionnaire de sources

     Le code source est la valeur produite par l'équipe
              Prenez en soin !

     SVN
              Connu, maitrisé, centralisé
     Mercurial
              Décentralisé
     GIT
              En pleine expansion !
              Décentralisé




7 avril 2010              ALTER WAY SolutionsLinux 2010    8
Frameworks

     Faire en sorte que tout le monde parle la même langue

     Il existe 20.000 manières différentes de répondre à un
      même problème
              Laquelle sera la bonne ?

     Faites confiance à des Frameworks "pros"
              Ensemble de composants prêts à l'emploi
              Règles strictes de développement

     Le framework est le coeur technique de l'équipe
              POO et Design Patterns
              Architecure logicielle, évolutions maitrisées




7 avril 2010               ALTER WAY SolutionsLinux 2010       9
Frameworks PHP

     Tous ont des licences "open" (bsd, mit ou équivalent)

     Zend Framework
              Supporté par Zend
              Rapidité prise en main

     Symfony
              Supporté par SensioLabs
              Vitesse des développements

     Solar
     CakePHP
     Copix/Jelix
     ... Yours ?


7 avril 2010              ALTER WAY SolutionsLinux 2010       10
Testabilité logicielle

     Comment démontrez-vous à vos clients que le logiciel
      répond à leurs attentes ?
              Comment assurez-vous qu'il fait ce pour quoi il a été conçu ?

     Comment maitrisez-vous le changement ?
              Avec peur ?
              Avec enthousiasme ?

     Ecrivez des tests !
              Unitaires
              Fonctionnels
              De montée en charge
              De non régréssion
              ...



7 avril 2010              ALTER WAY SolutionsLinux 2010                        11
Librairies de test

     PHPUnit
              Clone de Junit (Java)
              Très connu/reconnu dans le monde PHP
              Très bien maintenu, fortes évolutions
              Énormément de fonctionnalités (logs, analyse de couverture...)
              Outil indispensable

     SimpleTest
              maintenance moindre




7 avril 2010              ALTER WAY SolutionsLinux 2010                         12
Exemple PHPUnit
     Permet de valider le bon fonctionnement d'un algorithme
     Permet d'éviter la peur du changement




7 avril 2010     ALTER WAY SolutionsLinux 2010            13
Tests PHPUnit et code coverage
     Permet de valider le bon fonctionnement d'un algorithme
     Permet d'éviter la peur du changement




7 avril 2010       ALTER WAY SolutionsLinux 2010          14
Métriques de code
     Mesurer des caractéristiques sur le code
              Exploiter ces caractéristiques (graphes)


     PHP_LineOfCode
              Quelques statistiques numériques sur le code
     PHP_CopyPasteDetector
              Détecte les copier/coller, négatifs en OOP
     PHP_CodeSniffer
              Détecte les erreurs dans les conventions de codage
     PHP_Depend
              Analyse des dépendances objets et complexité du code
     PHP_CodeBrowser
              Présente graphiquement les logs des outils CPD et CS
     PHP_MessDetector
              Détecte les "code smells", e.g: code mort, trop de méthodes ...

7 avril 2010              ALTER WAY SolutionsLinux 2010                          15
PHP_Depends




     NumberOfMethods
     NumberOfPackages
     NumberOfClass
     CyclomaticComplexity
     AvererageNumberofDerivatedClasses
     Nombre d'appels de méthodes


    7 avril 2010   ALTER WAY SolutionsLinux 2010   16
PHP_CodeBrowser




       Revue de code
              Lignes trop grandes
              Code trop complexe (if, while, for...)
              Code mort (jamais appelé)
              Manque de commentaires
              Code non sécurisé (inclusions externes...)

    7 avril 2010           ALTER WAY SolutionsLinux 2010    17
PHP_MessDetector




   Quelques conseils pour un code plus "pro"
7 avril 2010    ALTER WAY SolutionsLinux 2010   18
Déployer , sauvegarder

     Déployer
              Passer du code source au logiciel final
              Beaucoup d'étapes intermédiaires !

     Exemple de scénario de déploiement


                1 - Tirer une version depuis le dépôt
                 1 - Tirer une version depuis le dépôt
                2 - Éventuellement modifier son arborescence
                 2 - Éventuellement modifier son arborescence
                3 - Lancer les/des tests
                 3 - Lancer les/des tests
                4 - Lancer des métriques d'analyse de code
                 4 - Lancer des métriques d'analyse de code
                5 - Créer un paquet (zip, tar, autre)
                 5 - Créer un paquet (zip, tar, autre)
                6 - Envoyer le tout quelque part (ftp, scp ...)
                 6 - Envoyer le tout quelque part (ftp, scp ...)



     Tout cela manuellement ?
7 avril 2010              ALTER WAY SolutionsLinux 2010            19
Déployer avec PHING

     PHing Is Not Gnumake
              Clone de Apache ANT
              Description de tâches à effectuer sous forme XML
              Lancement de ces tâches en ligne de commandes
              Lancements réguliers via CRON ou SVN hooks
              Dépendances entre les tâches
              Journaux en XML


     Trop de fichiers ? Utilisez des packages PHAR
              Equivalent du JAR de Java
              Inclus dans PHP5.3 nativement
              Encapsule une application entière dans un seul fichier
              Compresse / signe son contenu
              ...

7 avril 2010              ALTER WAY SolutionsLinux 2010                 20
Exemple script de déploiement PHING
         <?xml version="1.0"?>
          <?xml version="1.0"?>
         <project name="SLL" default="prepare" basedir="./library">
          <project name="SLL" default="prepare" basedir="./library">
          <property name="builddir" value="../build" override="true" />
            <property name="builddir" value="../build" override="true" />
               <target name="prepare">
                 <target name="prepare">
                    <echo msg="Making directory ./build" />
                     <echo msg="Making directory ./build" />
                   <mkdir dir="${builddir}" />
                    <mkdir dir="${builddir}" />
                    <copy todir="${builddir}" >
                     <copy todir="${builddir}" >
                       <fileset dir=".">
                        <fileset dir=".">
                       <include name="**/**" />
                        <include name="**/**" />
                       </fileset>
                        </fileset>
                   </copy>
                    </copy>
               </target>
                </target>
         <target name="phpunit" depends="prepare">
          <target name="phpunit" depends="prepare">
              <phpunit haltonfailure="true" haltonerror="true">
                <phpunit haltonfailure="true" haltonerror="true">
                       <batchtest>
                        <batchtest>
                            <fileset dir="../tests">
                             <fileset dir="../tests">
                                 <include name="*Test.php" />
                                  <include name="*Test.php" />
                            </fileset>
                             </fileset>
                       </batchtest>
                        </batchtest>
                  </phpunit>
                   </phpunit>
           </target>
            </target>
         </project>
          </project>

7 avril 2010           ALTER WAY SolutionsLinux 2010                        21
Plateforme d'Intégration Continue

     Outil qui effectue le déploiement de manière
      automatisée et régulière
              Très pratique lors de méthodes agiles
              Très proche de Phing

     Automatisez les tâches répétitives
              Assurez une qualité et un suivi du projet permanent
              Ne perdez pas le fil de vos développements




7 avril 2010              ALTER WAY SolutionsLinux 2010              22
Quelques plateformes d'Intégration Continue

      Hudson
               Java Servlet
      CruiseControl
               Java StandAlone
      Bamboo
               Propriétaire , Atlassian
      Apache Gump
               Python based
      Xinc
               PHP based




 7 avril 2010               ALTER WAY SolutionsLinux 2010   23
Intégration continue : PHPUnderControl

     PHPUnderControl, plugin pour CruiseControl
              Une JVM est requise
              Outil lourd, mais puissant
              Connu dans le monde PHP

     Apache Ant ou Phing comme taskManager

     Analyse des logs métriques du projet
              Création de graphiques




7 avril 2010              ALTER WAY SolutionsLinux 2010   24
Intégration continue : PHPUnderControl

           Configuration peu intuitive, mais puissante

<publishers>
 <publishers>
 <artifactspublisher dir="projects/${project.name}/build/api"
  <artifactspublisher dir="projects/${project.name}/build/api"
  dest="artifacts/${project.name}" subdirectory="api"/>
   dest="artifacts/${project.name}" subdirectory="api"/>
 <artifactspublisher dir="projects/${project.name}/build/coverage"
  <artifactspublisher dir="projects/${project.name}/build/coverage"
  dest="artifacts/${project.name}" subdirectory="coverage"/>
   dest="artifacts/${project.name}" subdirectory="coverage"/>
 <execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/>
  <execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/>
 <execute command="phpcb --log projects/${project.name}/build/logs --source projects/$
  <execute command="phpcb --log projects/${project.name}/build/logs --source projects/$
{project.name}/source --output projects/${project.name}/build/code-browser"/>
 {project.name}/source --output projects/${project.name}/build/code-browser"/>
 <artifactspublisher dir="projects/${project.name}/build/code-browser" dest="artifacts/$
  <artifactspublisher dir="projects/${project.name}/build/code-browser" dest="artifacts/$
{project.name}" subdirectory="code-browser"/>
 {project.name}" subdirectory="code-browser"/>
</publishers>
 </publishers>


      7 avril 2010       ALTER WAY SolutionsLinux 2010                           25
Intégration continue : PHPUnderControl

     Configuration peu intuitive, mais puissante




7 avril 2010      ALTER WAY SolutionsLinux 2010     26
Industrialisez !

     L'éco système PHP est riche d'outils open-sources
              Gratuits
              Indispensables
              Très souvent écrits en PHP, pour PHP

     Chacun peu mettre en place des outils
              A son rythme
              A sa manière

     Éduquez les développeurs
              Formations
              Prise de conscience de la puissance de la plateforme
              Veille technologique




7 avril 2010              ALTER WAY SolutionsLinux 2010               27
Livre blanc « Industrialisation PHP »

     Damien Seguy / Jean-Marc
      Fontaine
     Panorama des outils et
      méthodes d'industrialisation
      des développements PHP
     Publié en octobre 2009
     Plus de 1 500 téléchargements
     Livre en préparation




Téléchargement : http://www.alterway.fr/publications/livre-blanc-industrialisation-php
Blog           : http://www.industrialisation-php.com/
7 avril 2010           ALTER WAY SolutionsLinux 2010                                     28
Merci

     Me contacter : julien.pauli@alterway.fr
     Retouver cette présentation :
      http://www.slideshare.net/jpauli

     Des questions ?




7 avril 2010      ALTER WAY SolutionsLinux 2010   29

AlterWay SolutionsLinux Outils Industrialisation PHP

  • 1.
    Outils open sourcepour accélérer et industrialiser vos développements Solutions Linux 2010
  • 2.
    Qui suis-je ?  Julien PAULI  Formateur pour Alter Way Formation  Architecte logiciel certifié PHP / ZendFramework  Membre de l'AFUP  Co-auteur du livre "ZendFramework bien développer en PHP"  Contributeur open source PHP / Apache 7 avril 2010 ALTER WAY SolutionsLinux 2010 2
  • 3.
    Plan  Panorama des outils open source aidant à l'industrialisation  IDE  Gestionnaire de versions  Frameworks  Tests  Métriques de code  Déploiement / Sauvegardes  Intégration continue  Conclusion 7 avril 2010 ALTER WAY SolutionsLinux 2010 3
  • 4.
    Les outils opensource  PHP : le monde du développement Web open source à portée 7 avril 2010 ALTER WAY SolutionsLinux 2010 4
  • 5.
    IDE : Développezsereinement  Un éditeur de texte "simple" est souvent trop peu  L'IDE est l'outil que le développeur manipule tous les jours  Autant qu'il soit à l'aise avec  Et que l'outil l'aide au maximum dans son travail  Editeur avancé  Connecteurs réseaux (SVN, SSH, FTP, SQL)  Gestion des librairies et frameworks  Production de documentation 7 avril 2010 ALTER WAY SolutionsLinux 2010 5
  • 6.
    Quelques IDE  PDT  Eclipse based  Très connu des développeurs (multi langages)  NetBeans  Connu du monde Java  Léger  Percée certaine pour PHP 7 avril 2010 ALTER WAY SolutionsLinux 2010 6
  • 7.
    IDE : PDT  PDT  Complétion  Débogage  Documentation  Coloration  SVN/FTP  ... 7 avril 2010 ALTER WAY SolutionsLinux 2010 7
  • 8.
    Gestionnaire de sources  Le code source est la valeur produite par l'équipe  Prenez en soin !  SVN  Connu, maitrisé, centralisé  Mercurial  Décentralisé  GIT  En pleine expansion !  Décentralisé 7 avril 2010 ALTER WAY SolutionsLinux 2010 8
  • 9.
    Frameworks  Faire en sorte que tout le monde parle la même langue  Il existe 20.000 manières différentes de répondre à un même problème  Laquelle sera la bonne ?  Faites confiance à des Frameworks "pros"  Ensemble de composants prêts à l'emploi  Règles strictes de développement  Le framework est le coeur technique de l'équipe  POO et Design Patterns  Architecure logicielle, évolutions maitrisées 7 avril 2010 ALTER WAY SolutionsLinux 2010 9
  • 10.
    Frameworks PHP  Tous ont des licences "open" (bsd, mit ou équivalent)  Zend Framework  Supporté par Zend  Rapidité prise en main  Symfony  Supporté par SensioLabs  Vitesse des développements  Solar  CakePHP  Copix/Jelix  ... Yours ? 7 avril 2010 ALTER WAY SolutionsLinux 2010 10
  • 11.
    Testabilité logicielle  Comment démontrez-vous à vos clients que le logiciel répond à leurs attentes ?  Comment assurez-vous qu'il fait ce pour quoi il a été conçu ?  Comment maitrisez-vous le changement ?  Avec peur ?  Avec enthousiasme ?  Ecrivez des tests !  Unitaires  Fonctionnels  De montée en charge  De non régréssion  ... 7 avril 2010 ALTER WAY SolutionsLinux 2010 11
  • 12.
    Librairies de test  PHPUnit  Clone de Junit (Java)  Très connu/reconnu dans le monde PHP  Très bien maintenu, fortes évolutions  Énormément de fonctionnalités (logs, analyse de couverture...)  Outil indispensable  SimpleTest  maintenance moindre 7 avril 2010 ALTER WAY SolutionsLinux 2010 12
  • 13.
    Exemple PHPUnit  Permet de valider le bon fonctionnement d'un algorithme  Permet d'éviter la peur du changement 7 avril 2010 ALTER WAY SolutionsLinux 2010 13
  • 14.
    Tests PHPUnit etcode coverage  Permet de valider le bon fonctionnement d'un algorithme  Permet d'éviter la peur du changement 7 avril 2010 ALTER WAY SolutionsLinux 2010 14
  • 15.
    Métriques de code  Mesurer des caractéristiques sur le code  Exploiter ces caractéristiques (graphes)  PHP_LineOfCode  Quelques statistiques numériques sur le code  PHP_CopyPasteDetector  Détecte les copier/coller, négatifs en OOP  PHP_CodeSniffer  Détecte les erreurs dans les conventions de codage  PHP_Depend  Analyse des dépendances objets et complexité du code  PHP_CodeBrowser  Présente graphiquement les logs des outils CPD et CS  PHP_MessDetector  Détecte les "code smells", e.g: code mort, trop de méthodes ... 7 avril 2010 ALTER WAY SolutionsLinux 2010 15
  • 16.
    PHP_Depends  NumberOfMethods  NumberOfPackages  NumberOfClass  CyclomaticComplexity  AvererageNumberofDerivatedClasses  Nombre d'appels de méthodes 7 avril 2010 ALTER WAY SolutionsLinux 2010 16
  • 17.
    PHP_CodeBrowser  Revue de code  Lignes trop grandes  Code trop complexe (if, while, for...)  Code mort (jamais appelé)  Manque de commentaires  Code non sécurisé (inclusions externes...) 7 avril 2010 ALTER WAY SolutionsLinux 2010 17
  • 18.
    PHP_MessDetector  Quelques conseils pour un code plus "pro" 7 avril 2010 ALTER WAY SolutionsLinux 2010 18
  • 19.
    Déployer , sauvegarder  Déployer  Passer du code source au logiciel final  Beaucoup d'étapes intermédiaires !  Exemple de scénario de déploiement 1 - Tirer une version depuis le dépôt 1 - Tirer une version depuis le dépôt 2 - Éventuellement modifier son arborescence 2 - Éventuellement modifier son arborescence 3 - Lancer les/des tests 3 - Lancer les/des tests 4 - Lancer des métriques d'analyse de code 4 - Lancer des métriques d'analyse de code 5 - Créer un paquet (zip, tar, autre) 5 - Créer un paquet (zip, tar, autre) 6 - Envoyer le tout quelque part (ftp, scp ...) 6 - Envoyer le tout quelque part (ftp, scp ...)  Tout cela manuellement ? 7 avril 2010 ALTER WAY SolutionsLinux 2010 19
  • 20.
    Déployer avec PHING  PHing Is Not Gnumake  Clone de Apache ANT  Description de tâches à effectuer sous forme XML  Lancement de ces tâches en ligne de commandes  Lancements réguliers via CRON ou SVN hooks  Dépendances entre les tâches  Journaux en XML  Trop de fichiers ? Utilisez des packages PHAR  Equivalent du JAR de Java  Inclus dans PHP5.3 nativement  Encapsule une application entière dans un seul fichier  Compresse / signe son contenu  ... 7 avril 2010 ALTER WAY SolutionsLinux 2010 20
  • 21.
    Exemple script dedéploiement PHING <?xml version="1.0"?> <?xml version="1.0"?> <project name="SLL" default="prepare" basedir="./library"> <project name="SLL" default="prepare" basedir="./library"> <property name="builddir" value="../build" override="true" /> <property name="builddir" value="../build" override="true" /> <target name="prepare"> <target name="prepare"> <echo msg="Making directory ./build" /> <echo msg="Making directory ./build" /> <mkdir dir="${builddir}" /> <mkdir dir="${builddir}" /> <copy todir="${builddir}" > <copy todir="${builddir}" > <fileset dir="."> <fileset dir="."> <include name="**/**" /> <include name="**/**" /> </fileset> </fileset> </copy> </copy> </target> </target> <target name="phpunit" depends="prepare"> <target name="phpunit" depends="prepare"> <phpunit haltonfailure="true" haltonerror="true"> <phpunit haltonfailure="true" haltonerror="true"> <batchtest> <batchtest> <fileset dir="../tests"> <fileset dir="../tests"> <include name="*Test.php" /> <include name="*Test.php" /> </fileset> </fileset> </batchtest> </batchtest> </phpunit> </phpunit> </target> </target> </project> </project> 7 avril 2010 ALTER WAY SolutionsLinux 2010 21
  • 22.
    Plateforme d'Intégration Continue  Outil qui effectue le déploiement de manière automatisée et régulière  Très pratique lors de méthodes agiles  Très proche de Phing  Automatisez les tâches répétitives  Assurez une qualité et un suivi du projet permanent  Ne perdez pas le fil de vos développements 7 avril 2010 ALTER WAY SolutionsLinux 2010 22
  • 23.
    Quelques plateformes d'IntégrationContinue  Hudson  Java Servlet  CruiseControl  Java StandAlone  Bamboo  Propriétaire , Atlassian  Apache Gump  Python based  Xinc  PHP based 7 avril 2010 ALTER WAY SolutionsLinux 2010 23
  • 24.
    Intégration continue :PHPUnderControl  PHPUnderControl, plugin pour CruiseControl  Une JVM est requise  Outil lourd, mais puissant  Connu dans le monde PHP  Apache Ant ou Phing comme taskManager  Analyse des logs métriques du projet  Création de graphiques 7 avril 2010 ALTER WAY SolutionsLinux 2010 24
  • 25.
    Intégration continue :PHPUnderControl  Configuration peu intuitive, mais puissante <publishers> <publishers> <artifactspublisher dir="projects/${project.name}/build/api" <artifactspublisher dir="projects/${project.name}/build/api" dest="artifacts/${project.name}" subdirectory="api"/> dest="artifacts/${project.name}" subdirectory="api"/> <artifactspublisher dir="projects/${project.name}/build/coverage" <artifactspublisher dir="projects/${project.name}/build/coverage" dest="artifacts/${project.name}" subdirectory="coverage"/> dest="artifacts/${project.name}" subdirectory="coverage"/> <execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/> <execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/> <execute command="phpcb --log projects/${project.name}/build/logs --source projects/$ <execute command="phpcb --log projects/${project.name}/build/logs --source projects/$ {project.name}/source --output projects/${project.name}/build/code-browser"/> {project.name}/source --output projects/${project.name}/build/code-browser"/> <artifactspublisher dir="projects/${project.name}/build/code-browser" dest="artifacts/$ <artifactspublisher dir="projects/${project.name}/build/code-browser" dest="artifacts/$ {project.name}" subdirectory="code-browser"/> {project.name}" subdirectory="code-browser"/> </publishers> </publishers> 7 avril 2010 ALTER WAY SolutionsLinux 2010 25
  • 26.
    Intégration continue :PHPUnderControl  Configuration peu intuitive, mais puissante 7 avril 2010 ALTER WAY SolutionsLinux 2010 26
  • 27.
    Industrialisez !  L'éco système PHP est riche d'outils open-sources  Gratuits  Indispensables  Très souvent écrits en PHP, pour PHP  Chacun peu mettre en place des outils  A son rythme  A sa manière  Éduquez les développeurs  Formations  Prise de conscience de la puissance de la plateforme  Veille technologique 7 avril 2010 ALTER WAY SolutionsLinux 2010 27
  • 28.
    Livre blanc «Industrialisation PHP »  Damien Seguy / Jean-Marc Fontaine  Panorama des outils et méthodes d'industrialisation des développements PHP  Publié en octobre 2009  Plus de 1 500 téléchargements  Livre en préparation Téléchargement : http://www.alterway.fr/publications/livre-blanc-industrialisation-php Blog : http://www.industrialisation-php.com/ 7 avril 2010 ALTER WAY SolutionsLinux 2010 28
  • 29.
    Merci  Me contacter : julien.pauli@alterway.fr  Retouver cette présentation : http://www.slideshare.net/jpauli  Des questions ? 7 avril 2010 ALTER WAY SolutionsLinux 2010 29