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 continue avec les outils
• Serveur d'intégration continue
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 ?
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)
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 ?
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
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 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...
nAcademy Le 15 janvier 2014 Neuros -
Pdepend
✔
Pdepend signifie :
✔
PHP Depend
✔
Outil analyse de code
✔
Indicateur qualité
Outils d'analyse statique
http://pdepend.org/
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
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/
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
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
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
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
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
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
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
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 $
*/
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/
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;
}
}
}
?>
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
Serveur d'intégration continue
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...
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
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
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
•
Cas pratique
Behat / Mint
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)
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...'
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
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;
}
}
...
}
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;
}
}
nAcademy Le 15 janvier 2014 Neuros -
Présentation Mink
Mink
• Framework de tests de recette
• Abstraction du navigateur et du driver
– Goutte 
– Selenium
– Zombie
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 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"')
);
}
}
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...
• Autres modes de tests
• Fonctionnels
• Deploiement
• Jenkins
• Versionning
• ...
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
nAcademy Le 15 janvier 2014 Neuros -
L'intégration...
Questions ? @hellosct1
Peut aussi se faire par la fête 

Integrons en mode continu

  • 1.
    nAcademy Le 15janvier 2014 Neuros - Intégrons en mode continu Christophe Villeneuve
  • 2.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
  • 8.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 2014 Neuros - Pdepend ✔ Pdepend signifie : ✔ PHP Depend ✔ Outil analyse de code ✔ Indicateur qualité Outils d'analyse statique http://pdepend.org/
  • 10.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 2014 Neuros - ➢ Pdepend ➢ PHP Mess Detector ✔ Détecte certains bugs ✔ Propriété non utilisé Outils d'analyse statique http://phpmd.org/
  • 12.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
  • 24.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
  • 29.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 2014 Neuros - Présentation Mink Mink • Framework de tests de recette • Abstraction du navigateur et du driver – Goutte  – Selenium – Zombie
  • 35.
    nAcademy Le 15janvier 2014 Neuros - Utilisation • sudo pear install behat/mink-beta
  • 36.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 2014 Neuros - Bien sur.... Framework / CMS + Behat + Mink + Selenium + PHPUnit
  • 38.
    nAcademy Le 15janvier 2014 Neuros - Association serveur d'intégration continue • Tests Unitaires • PHPUnit, jUnit... • Autres modes de tests • Fonctionnels • Deploiement • Jenkins • Versionning • ...
  • 39.
    nAcademy Le 15janvier 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.
    nAcademy Le 15janvier 2014 Neuros - L'intégration... Questions ? @hellosct1 Peut aussi se faire par la fête