View
949
Download
3
Category
Preview:
DESCRIPTION
Présentation à la nAcademy (Janvier 2014) : Integrons en mode continu par Christophe Villeneuve
Citation preview
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é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 ?
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.pharphp 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.pharphp 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
<?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; } }}
?>
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/" }}
ContexteEvénementsRésultat
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;
}
}
...
}
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 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"') );}
}
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
Recommended