nAcademy Le 15 janvier 2014 Neuros -
Intégrons en mode continu
Christophe Villeneuve
nAcademy Le 15 janvier 2014 Neuros -
Sommaire
• Pourquoi ?
• La position dans le cycle de développement
• L'intégration co...
nAcademy Le 15 janvier 2014 Neuros -
• Mettre les bons réflexes au début du projet
• Intégration au quotidien
• Chaque int...
nAcademy Le 15 janvier 2014 Neuros -
Obligations dans l'intégration continue
• Fournir des données utilisables par les dév...
nAcademy Le 15 janvier 2014 Neuros -
Tests automatisés de Mike Cohn
Tests
Manuels
Tests automatisés
Tests GUI
Tests API
Te...
nAcademy Le 15 janvier 2014 Neuros -
Méthologies
• Expliquer comment on produit le code
• Impliquer les utilisateurs dans ...
Accélérer l'intégration par les outils
nAcademy Le 15 janvier 2014 Neuros -
L'intégration continue avec les Outils
• Composition d'une équipe
• Avant tout une qu...
nAcademy Le 15 janvier 2014 Neuros -
Pdepend
✔
Pdepend signifie :
✔
PHP Depend
✔
Outil analyse de code
✔
Indicateur qualit...
nAcademy Le 15 janvier 2014 Neuros -
PHP Depend... en exemple
tools:
# Analyzes the size and structure of
a PHP project.
p...
nAcademy Le 15 janvier 2014 Neuros -
➢
Pdepend
➢
PHP Mess Detector
✔
Détecte certains bugs
✔
Propriété non utilisé
Outils ...
nAcademy Le 15 janvier 2014 Neuros -
PHP Mess Detector... en exemple
cd /path/to/myproject
# Lance phpmd sur le répertoire...
nAcademy Le 15 janvier 2014 Neuros -
➢
Pdepend
➢
PHP Mess Detector
➢
PHP CPD
✔
CPD signifie
✔
Copy/Paste Detector
✔
Detect...
nAcademy Le 15 janvier 2014 Neuros -
PHP Copy/Paste Detector (PHP CPD)... en exemple
{
"require-dev": {
"phploc/phpcpd": "...
nAcademy Le 15 janvier 2014 Neuros -
➢Pdepend
➢PHP Mess Detector
➢PHP Lines Of Code
✔
Compte :
✔
Les lignes de code
✔
Nomb...
nAcademy Le 15 janvier 2014 Neuros -
PHP Lines Of Code (PHPLoc)... en exemple
{
"require-dev": {
"phploc/phploc": "*"
}
}
...
nAcademy Le 15 janvier 2014 Neuros -
➢
Pdepend
➢
PHP Mess Detector
➢
PHP Code Sniffer
✔
Détecte
✔
Conventions de code
✔
No...
nAcademy Le 15 janvier 2014 Neuros -
➢
Pdepend
➢
PHP Mess Detector
➢
PHP Doc
✔
PHP Documentator
✔
Générer votre doc d'API
...
nAcademy Le 15 janvier 2014 Neuros -
PHP Doc... en exemple
<target name="phpdoc">
<phpdoc title="API Documentation"
destdi...
nAcademy Le 15 janvier 2014 Neuros -
➢Pdepend
➢PHP Mess Detector
➢PHP Code Beautifier
✔
Généré une vue stylée du code
✔
Ev...
nAcademy Le 15 janvier 2014 Neuros -
PHP Code Beautifier... en exemple
<?php
if($code == BAD){$action = REWRITE;}else{$act...
nAcademy Le 15 janvier 2014 Neuros -
✔
Framework
✔
Zend, Symfony,...
✔
CMS
✔
Drupal
✔
Librairie externe
✔
Pecl, Pear
✔
Tai...
Serveur d'intégration continue
nAcademy Le 15 janvier 2014 Neuros -
Serveurs d'intégration continue possible
• Gestionnaire de versions
• GIT, SVN, CSV.....
nAcademy Le 15 janvier 2014 Neuros -
Serveurs d'intégration continue... Disponible
• Cruise Control + PHPUnderControl
• Cr...
nAcademy Le 15 janvier 2014 Neuros -
✔
Dev. petite fonction
✔
Tache peut importante
✔
Simple
✔
Délais : ½ journée
✔
Récupé...
nAcademy Le 15 janvier 2014 Neuros -
Les pratiques d'un serveur d'intégration continue
• Maintenir un dépôt unique version...
Cas pratique
Behat / Mint
nAcademy Le 15 janvier 2014 Neuros -
Présentation Behat
• Behat
• Framework Behavior Driven Development (BDD) pour PHP
• M...
nAcademy Le 15 janvier 2014 Neuros -
Principe BDD (Behavior Driven Development)
→ Gestion d'un caddie identifié
• Scénario...
nAcademy Le 15 janvier 2014 Neuros -
Utilisation
• pear channel-discover pear.symfony.com
• pear channel-discover pear.beh...
nAcademy Le 15 janvier 2014 Neuros -
Utilisation par le code (1/2)
<!--?php
use BehatBehatContextClosuredContextInterface,...
nAcademy Le 15 janvier 2014 Neuros -
Utilisation par le code (2/2)
Scénario Outline
Given si j'ai un caddie
When jAjoutePr...
nAcademy Le 15 janvier 2014 Neuros -
Présentation Mink
Mink
• Framework de tests de recette
• Abstraction du navigateur et...
nAcademy Le 15 janvier 2014 Neuros -
Utilisation
• sudo pear install behat/mink-beta
nAcademy Le 15 janvier 2014 Neuros -
Utilisation par le code
require_once 'mink/autoload.php';
class FeatureContext extend...
nAcademy Le 15 janvier 2014 Neuros -
Bien sur....
Framework / CMS
+
Behat
+
Mink
+
Selenium
+
PHPUnit
nAcademy Le 15 janvier 2014 Neuros -
Association serveur d'intégration continue
• Tests Unitaires
• PHPUnit, jUnit...
• Au...
nAcademy Le 15 janvier 2014 Neuros -
En résumé... intégration continue
• Peu de mise en place
• Pas d'implication de l'uti...
nAcademy Le 15 janvier 2014 Neuros -
L'intégration...
Questions ? @hellosct1
Peut aussi se faire par la fête 
Prochain SlideShare
Chargement dans…5
×

Integrons en mode continu

1 415 vues

Publié le

Présentation à la nAcademy (Janvier 2014) : Integrons en mode continu par Christophe Villeneuve

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 415
Sur SlideShare
0
Issues des intégrations
0
Intégrations
78
Actions
Partages
0
Téléchargements
15
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Integrons en mode continu

  1. 1. nAcademy Le 15 janvier 2014 Neuros - Intégrons en mode continu Christophe Villeneuve
  2. 2. nAcademy Le 15 janvier 2014 Neuros - Sommaire • Pourquoi ? • La position dans le cycle de développement • L'intégration continue avec les outils • Serveur d'intégration continue
  3. 3. nAcademy Le 15 janvier 2014 Neuros - • Mettre les bons réflexes au début du projet • Intégration au quotidien • Chaque intégration est vérifiée par un système automatisé • La vérification du code tourne en tache de fond • Détecter les erreurs d'intégration plus rapidement • Assurer un suivi continu • Impliquer et fixer des objectifs aux développeurs • Possibilité de traiter plus en même temps Intégration continue... Pourquoi c'est possible ?
  4. 4. nAcademy Le 15 janvier 2014 Neuros - Obligations dans l'intégration continue • Fournir des données utilisables par les développeurs • Fournir un bilan lisible venant : • Responsable(s) • Client(s)
  5. 5. nAcademy Le 15 janvier 2014 Neuros - Tests automatisés de Mike Cohn Tests Manuels Tests automatisés Tests GUI Tests API Tests d'intégration Tests des composants Tests unitaires Orientations Business Développons nous le bon système ? Technique Développons nous le système correctement ?
  6. 6. nAcademy Le 15 janvier 2014 Neuros - Méthologies • Expliquer comment on produit le code • Impliquer les utilisateurs dans le cycle • Courbes d'évolutions • Cycles de développement court • on fait / on peaufine • Méthodes agiles • SCRUM, XP, Lean SD,... • Pratiques agiles au menu • Outils standards du marché • Utilisation possible avec 1 cron
  7. 7. Accélérer l'intégration par les outils
  8. 8. nAcademy Le 15 janvier 2014 Neuros - L'intégration continue avec les Outils • Composition d'une équipe • Avant tout une question d'attitude • S'appuie sur des outils comme gestion de version • GIT, SVN, CSV... • Utilisation d'outils pour la maintenance du code • Outils de qualimétrie : • Sonar, PMD, CheckStyle, validator W3C...
  9. 9. nAcademy Le 15 janvier 2014 Neuros - Pdepend ✔ Pdepend signifie : ✔ PHP Depend ✔ Outil analyse de code ✔ Indicateur qualité Outils d'analyse statique http://pdepend.org/
  10. 10. nAcademy Le 15 janvier 2014 Neuros - PHP Depend... en exemple tools: # Analyzes the size and structure of a PHP project. php_pdepend: command: pdepend configuration_file: ~ suffixes: # Default: - php excluded_dirs: # Default: - vendor enabled: false <target name="pdepend"> <phpdepend file="${project.basedir}/${source}/www"> <logger type="jdepend-xml" outfile="${project.basedir}/build/logs/jdepend.xml" /> <logger type="jdepend-chart" outfile="${project.basedir}/build/pdepend/dependencies.svg" /> <logger type="overview-pyramid" outfile="${project.basedir}/build/pdepend/overview-pyramid.svg" /> </phpdepend> </target> Installation Config Par un paquet
  11. 11. nAcademy Le 15 janvier 2014 Neuros - ➢ Pdepend ➢ PHP Mess Detector ✔ Détecte certains bugs ✔ Propriété non utilisé Outils d'analyse statique http://phpmd.org/
  12. 12. nAcademy Le 15 janvier 2014 Neuros - PHP Mess Detector... en exemple cd /path/to/myproject # Lance phpmd sur le répertoire src avec les règles contenues dans phpmd.xml # Génère le rapport myrepport.html au format HTML $ phpmd src html /path/to/phpmd.xml > /path/to/myreport.html <target name="phpmd"> <phpmd file="${project.basedir}/${source}/www"> <formatter type="xml" outfile="${project.basedir}/build/phpmd.xml" /> </phpmd> </target> Installation Config pear channel-discover pear.phpmd.org pear channel-discover pear.pdepend.org pear install --alldeps phpmd/PHP_PMD
  13. 13. nAcademy Le 15 janvier 2014 Neuros - ➢ Pdepend ➢ PHP Mess Detector ➢ PHP CPD ✔ CPD signifie ✔ Copy/Paste Detector ✔ Detecte le code dupliqué ✔ Copié / Collé Outils d'analyse statique https://github.com/sebastianbergmann/phpcpd
  14. 14. nAcademy Le 15 janvier 2014 Neuros - PHP Copy/Paste Detector (PHP CPD)... en exemple { "require-dev": { "phploc/phpcpd": "*" } } wget https://phar.phpunit.de/phpcpd.phar php phpcpd.phar Installation Config. jSON $ phpcpd /www/projet_test Execution
  15. 15. nAcademy Le 15 janvier 2014 Neuros - ➢Pdepend ➢PHP Mess Detector ➢PHP Lines Of Code ✔ Compte : ✔ Les lignes de code ✔ Nombre de structures ✔ Mesure : ✔ La taille d'un projet Outils d'analyse statique ➢ PHP CPD https://github.com/sebastianbergmann/phploc
  16. 16. nAcademy Le 15 janvier 2014 Neuros - PHP Lines Of Code (PHPLoc)... en exemple { "require-dev": { "phploc/phploc": "*" } } wget https://phar.phpunit.de/phploc.phar php phploc.phar Installation Config. jSON $ Phploc /www/Drupal7.23 Execution
  17. 17. nAcademy Le 15 janvier 2014 Neuros - ➢ Pdepend ➢ PHP Mess Detector ➢ PHP Code Sniffer ✔ Détecte ✔ Conventions de code ✔ Norme de codage ✔ Pour avoir ✔ Code propre ✔ Cohérent ✔ Intéresse personne Outils d'analyse statique ➢ PHP CPD ➢ PHP Lines Of Code
  18. 18. nAcademy Le 15 janvier 2014 Neuros - ➢ Pdepend ➢ PHP Mess Detector ➢ PHP Doc ✔ PHP Documentator ✔ Générer votre doc d'API Outils d'analyse statique ➢ PHP CPD ➢ PHP Lines Of Code ➢ PHP Code Sniffer https://github.com/theseer/phpdox
  19. 19. nAcademy Le 15 janvier 2014 Neuros - PHP Doc... en exemple <target name="phpdoc"> <phpdoc title="API Documentation" destdir="${project.basedir}/build/api" sourcecode="false" output="HTML:Smarty:PHP"> <fileset dir="${project.basedir}/${source}/www"> <include name="**/*.php"/> </fileset> <projdocfileset dir="."> <include name="README"/> <include name="INSTALL"/> <include name="CHANGELOG"/> </projdocfileset> </phpdoc> </target> pear install --alldeps PhpDocumentor Installation Config. /** * Article * Definition de la classe Article utilisée pour le Projet * * @package API * @subpackage classes * @author Christophe Villeneuve * @version 2014-01-01 v30 $ */
  20. 20. nAcademy Le 15 janvier 2014 Neuros - ➢Pdepend ➢PHP Mess Detector ➢PHP Code Beautifier ✔ Généré une vue stylée du code ✔ Evite de reformater le code ✔ Mise en avant des alertes remontées par les outils précédents ✔ Différentes versions : ✔ Version graphique ✔ En ligne de commande Outils d'analyse statique ➢ PHP CPD ➢ PHP Lines Of Code ➢ PHP Code Sniffer ➢ PHPdoc http://www.waterproof.fr/products/phpCodeBeautifier/
  21. 21. nAcademy Le 15 janvier 2014 Neuros - PHP Code Beautifier... en exemple <?php if($code == BAD){$action = REWRITE;}else{$action = KEEP;} for($i=0; $i<10;$i++){while($j>0){$j++;doCall($i+$j);if($k){$k/=10;}}} ?> Code original Code final : <?php if ($code == BAD) { $action = REWRITE; } else { $action = KEEP; } for($i = 0; $i < 10;$i++) { while ($j > 0) { $j++; doCall($i + $j); if ($k) { $k /= 10; } } } ?>
  22. 22. nAcademy Le 15 janvier 2014 Neuros - ✔ Framework ✔ Zend, Symfony,... ✔ CMS ✔ Drupal ✔ Librairie externe ✔ Pecl, Pear ✔ Taille / poids ✔ Milliers de lignes de codes ✔ Ne pas mesurer la qualité de ces produits ✔ Exclure tout ce qui ne vous appartient pas ✔ Les applications modernes Les dérapages Attention... Aux applications modernes Délais de contrôle > 24 H
  23. 23. Serveur d'intégration continue
  24. 24. nAcademy Le 15 janvier 2014 Neuros - Serveurs d'intégration continue possible • Gestionnaire de versions • GIT, SVN, CSV... • Serveurs intégration continue : • Jenkins, CriseControl, Phing • Gestionnaires de dépendances : • Maven, Ivy • Assemblage et building : • Maven, Ant • Outils de test : • PHPUnit, Selenium • Outils de qualimétrie : • Sonar, PMD, CheckStyle, validator W3C...
  25. 25. nAcademy Le 15 janvier 2014 Neuros - Serveurs d'intégration continue... Disponible • Cruise Control + PHPUnderControl • Cruire Control + Ant / Maven • Xinc + Phing • Gerkin+Behat+Mint VS Gerkin+Cucumber+Sahi • Jenkins +... • Fichiers PHP • Shell • Batch • Fichiers PHP • Shell • Batch
  26. 26. nAcademy Le 15 janvier 2014 Neuros - ✔ Dev. petite fonction ✔ Tache peut importante ✔ Simple ✔ Délais : ½ journée ✔ Récupération code (SVN) ✔ Réalisation du Dev ✔ Batteries de tests ✔ Exécute une construction automatisé en local ✔ Et le compile ✔ Résultat ✔ Comit ✔ Idem serveur Recette Outil (slide précédent) Déroulement Serveur intégration continue
  27. 27. nAcademy Le 15 janvier 2014 Neuros - Les pratiques d'un serveur d'intégration continue • Maintenir un dépôt unique versionné • Automatiser la construction • Rendre la construction auto-testable • Tout le monde propage son activité chaque jour • Déclencher la construction à chaque propagation (serveur intégration) • Maintenir une construction rapide • Tester de nouveau sur un serveur de PreProd • Rendre disponible rapidement les nouveautés • C'est transparent •
  28. 28. Cas pratique Behat / Mint
  29. 29. nAcademy Le 15 janvier 2014 Neuros - Présentation Behat • Behat • Framework Behavior Driven Development (BDD) pour PHP • Méthode Agile • Orienté Métier • Utilise Gerkin Syntaxe – (Décrit le comportement d'une API sans s'occupe des détails de l'implémentation)
  30. 30. nAcademy Le 15 janvier 2014 Neuros - Principe BDD (Behavior Driven Development) → Gestion d'un caddie identifié • Scénario : – Etant donné que j'ai un caddie – Et que le caddie doit être vide – Quand j'ajoute 1 produit – Alors le résultat = 1 – Quand j'ajoute 10 produits – Alors j'obtiens 11 produits – Quand je retire 20 produits à mon caddie – Alors je dois avoir le message 'Vous n'avez pas...'
  31. 31. nAcademy Le 15 janvier 2014 Neuros - Utilisation • pear channel-discover pear.symfony.com • pear channel-discover pear.behat.org • pear install behat/behat http://docs.behat.org/ { "require": { "behat/behat": "2.4.*@stable" }, "minimum-stability": "dev", "config": { "bin-dir": "bin/" } } Contexte Evénements Résultat
  32. 32. nAcademy Le 15 janvier 2014 Neuros - Utilisation par le code (1/2) <!--?php use BehatBehatContextClosuredContextInterface, BehatBehatContextBehatContext, BehatBehatExceptionPendingException; use BehatGherkinNodePyStringNode, BehatGherkinNodeTableNode; class FeatureContext extends BehatContext { public function queJeSuisUnClient() { if(is_null($this->_account)) { $this->_account = new Account; } } ... }
  33. 33. nAcademy Le 15 janvier 2014 Neuros - Utilisation par le code (2/2) Scénario Outline Given si j'ai un caddie When jAjouteProduit(1) Then jObtiensUn Given je vide mon caddie When jEssayeDeRetirerPlusDeProduit() Then jObtiensUnMessage /** * @Given /^si jai un caddie$/ */ public function jAjouteProduit($qte) { $this->_account->addCaddy($qte); } /** * @Given /^je retire "([^"]*)" produit$/ */ public function jeRetireProduit($qte) { $this->_account->takeCaddy($qte); } /** * @Given /^je vide mon caddie $/ */ public function jEssayeDeRetirerPlusDePorduit() { try { $this->_account->setTotalQte(11); $this->_account->takeCaddy(20); } catch (Exception $e) { $this->_lastException = $e; } }
  34. 34. nAcademy Le 15 janvier 2014 Neuros - Présentation Mink Mink • Framework de tests de recette • Abstraction du navigateur et du driver – Goutte  – Selenium – Zombie
  35. 35. nAcademy Le 15 janvier 2014 Neuros - Utilisation • sudo pear install behat/mink-beta
  36. 36. nAcademy Le 15 janvier 2014 Neuros - Utilisation par le code require_once 'mink/autoload.php'; class FeatureContext extends BehatMinkBehatContextMinkContext { /** * @Given /^Je suis identifie "([^"]*)"$/ */ public function jeSuisIdentifie($username) { return array( new StepGiven('I go to "login.php"') ,new StepWhen("I fill in 'Mon nom' with '$username' ") ,new StepWhen("I fill in 'Mon mot de passe' with '$password' ") ,new StepWhen('I press "Login"') ); } }
  37. 37. nAcademy Le 15 janvier 2014 Neuros - Bien sur.... Framework / CMS + Behat + Mink + Selenium + PHPUnit
  38. 38. nAcademy Le 15 janvier 2014 Neuros - Association serveur d'intégration continue • Tests Unitaires • PHPUnit, jUnit... • Autres modes de tests • Fonctionnels • Deploiement • Jenkins • Versionning • ...
  39. 39. nAcademy Le 15 janvier 2014 Neuros - En résumé... intégration continue • Peu de mise en place • Pas d'implication de l'utilisateur/client • Possibilité de valoriser la qualité auprès des clients
  40. 40. nAcademy Le 15 janvier 2014 Neuros - L'intégration... Questions ? @hellosct1 Peut aussi se faire par la fête 

×