40
nAcademy Le 15 janvier 2014 Neuros - Intégrons en mode continu Christophe Villeneuve

Integrons en mode continu

  • Upload
    neuros

  • View
    948

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Intégrons en mode continu

Christophe Villeneuve

Page 2: Integrons en mode continu

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

Page 3: Integrons en mode continu

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 ?

Page 4: Integrons en mode continu

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)

Page 5: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Tests automatisés de Mike Cohn

Tests Manuels

Tests automatisésTests GUI

Tests APITests d'intégrationTests des composants

Tests unitaires

Orientations

Business

Développons nous le bon système ?

Technique

Développons nous le système correctement ?

Page 6: Integrons en mode continu

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

Page 7: Integrons en mode continu

Accélérer l'intégration par les outils

Page 8: Integrons en mode continu

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...

Page 9: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Pdepend

✔ Pdepend signifie : ✔ PHP Depend

✔ Outil analyse de code✔ Indicateur qualité

Outils d'analyse statique

http://pdepend.org/

Page 10: Integrons en mode continu

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

Page 11: Integrons en mode continu

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/

Page 12: Integrons en mode continu

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

Page 13: Integrons en mode continu

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

Page 14: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

PHP Copy/Paste Detector (PHP CPD)... en exemple

{ "require-dev": { "phploc/phpcpd": "*" }}

wget https://phar.phpunit.de/phpcpd.pharphp phpcpd.phar

Installation

Config. jSON

$ phpcpd /www/projet_test

Execution

Page 15: Integrons en mode continu

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

Page 16: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

PHP Lines Of Code (PHPLoc)... en exemple

{ "require-dev": { "phploc/phploc": "*" }}

wget https://phar.phpunit.de/phploc.pharphp phploc.phar

Installation

Config. jSON

$ Phploc /www/Drupal7.23

Execution

Page 17: Integrons en mode continu

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

Page 18: Integrons en mode continu

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

Page 19: Integrons en mode continu

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 $ */

Page 20: Integrons en mode continu

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/

Page 21: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

PHP Code Beautifier... en exemple

<?phpif($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 :

<?phpif ($code == BAD) { $action = REWRITE;} else { $action = KEEP;}for($i = 0; $i < 10;$i++) { while ($j > 0) { $j++; doCall($i + $j); if ($k) { $k /= 10; } }}

?>

Page 22: Integrons en mode continu

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

Page 23: Integrons en mode continu

Serveur d'intégration continue

Page 24: Integrons en mode continu

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...

Page 25: Integrons en mode continu

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

Page 26: Integrons en mode continu

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

Page 27: Integrons en mode continu

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

Page 28: Integrons en mode continu

Cas pratique

Behat / Mint

Page 29: Integrons en mode continu

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)

Page 30: Integrons en mode continu

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...'

Page 31: Integrons en mode continu

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/" }}

ContexteEvénementsRésultat

Page 32: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Utilisation par le code (1/2)

<!--?php

use Behat\Behat\Context\ClosuredContextInterface, Behat\Behat\Context\BehatContext,

Behat\Behat\Exception\PendingException;

use Behat\Gherkin\Node\PyStringNode,

Behat\Gherkin\Node\TableNode;

class FeatureContext extends BehatContext

{

public function queJeSuisUnClient() {

if(is_null($this->_account)) {

$this->_account = new Account;

}

}

...

}

Page 33: Integrons en mode continu

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;

}

}

Page 34: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Présentation Mink

Mink• Framework de tests de recette

• Abstraction du navigateur et du driver– Goutte 

– Selenium

– Zombie

Page 35: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Utilisation

• sudo pear install behat/mink-beta

Page 36: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Utilisation par le code

require_once 'mink/autoload.php';

class FeatureContext extends Behat\Mink\Behat\Context\MinkContext {

/** * @Given /^Je suis identifie "([^"]*)"$/ */public function jeSuisIdentifie($username){ return array( new Step\Given('I go to "login.php"') ,new Step\When("I fill in 'Mon nom' with '$username' ") ,new Step\When("I fill in 'Mon mot de passe' with '$password' ") ,new Step\When('I press "Login"') );}

}

Page 37: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Bien sur....

Framework / CMS

+

Behat

+

Mink

+

Selenium

+

PHPUnit

Page 38: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

Association serveur d'intégration continue

• Tests Unitaires• PHPUnit, jUnit...

• Autres modes de tests• Fonctionnels

• Deploiement• Jenkins

• Versionning

• ...

Page 39: Integrons en mode continu

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

Page 40: Integrons en mode continu

nAcademy Le 15 janvier 2014 Neuros -

L'intégration...

Questions ?@hellosct1

Peut aussi se faire par la fête