1. nAcademy Le 15 janvier 2014 Neuros -
Intégrons en mode continu
Christophe Villeneuve
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. 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. 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. 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. 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
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. 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. 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. 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. 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
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. 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. 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. 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
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. 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. 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. 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
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. 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. 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. 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
•
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. 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...'
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. 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. 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. nAcademy Le 15 janvier 2014 Neuros -
Utilisation
• sudo pear install behat/mink-beta
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. nAcademy Le 15 janvier 2014 Neuros -
Bien sur....
Framework / CMS
+
Behat
+
Mink
+
Selenium
+
PHPUnit
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. 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. nAcademy Le 15 janvier 2014 Neuros -
L'intégration...
Questions ? @hellosct1
Peut aussi se faire par la fête