SlideShare une entreprise Scribd logo
1  sur  35
Industrialiser le
Contrat PHP
À tous les étages
En face de vous
•   Jean-François Lépine
•   Consultant PHP Chez Alterway
•   Vice-secrétaire de l’AFUP
•   @Halleck45
•   http://blog.lepine.pro
Le Contrat
• Signez-ici
• Avec votre sang
• Sinon…




porte sur un Comportement

On doit pouvoir le vérifier
Tous les jours

DANS LE CODE SOURCE
Un code est un
comportement
• Une fonction
  • Attend une donnée     (2 entiers )
  • Traite une données    (les additionne)
  • Fournit une données   (1 entier)




             Comment s’en assurer ?
Duck Typing
C’est un canard !
Modèle Objet PHP
        <?php
        interface ChienInterface {
               public function aboyer();
               public function manger();
               public function formir();
        }



• Une Interface EST un contrat
• Ce contrat ne peut être rompu

             « Implements »
                    =
  « je m’engage à… sinon fouette-moi! »
Programmation par Contrat
• N’est rien d’autre que de la POO poussée jusqu’au bout



                                    HOA / Praspel
    /**
     * @requires nom : string(boundinteger(1,10));
     * @requires jour : boundinteger(1,31);
     * @requires mois : boundinteger(1,12);
     * @requires annee : boundinteger(1911,2011);
     * @ensures result : boolean();
     * @throwable FooException;
     */
    public function test1($nom,$jour,$mois,$annee) {
Test Driven Development
• Consiste à vérifier le traitement d’une fonction vis-à-vis d’une
  donnée avant son implémentation

                             PHP Unit, atoum
Le modèle Objet

L’ENGAGEMENT DE LA STUPIDITÉ
KISS




• SOLID
• Comment tester la stupidité ?
Métriques
•   Couplage applicatif
•   Modularité et dépendance
•   Complexité cyclomatique
•   Verticalité applicative
                               PHP Depend
Métriques
            Cornac
Travailler en équipe

CONTRACTUALISER LA
COLLABORATION
Code accessible
• Système de versionning
• Source Control Management
  •   Mercurial
  •   Svn
  •   Git
  •   …
Code source lisible




     PHP_CodeSniffer, checkStyle
Code source chargeable
• Respectez le contrat de la PHP Standard Recommandation 0
  (PSR-0)
  • Un nom de classe commence par une majuscule
  • Chaque namespace est séparé par un _ ou un 
  • Chaque séparateur de namespace représente un niveau dans
    l’arborescence des dossiers
  • Correspondance extacte entre le nom de la classe et le nom du
    fichier
Code source propre




        PHPMessDetector
Gestion des Dépendances

CONTRACTUALISER LES OUTILS
TIERS
Dépendances systèmes
  • PHING (Ant)
<target name="php.check.curl">
   <php
        expression="in_array('curl', get_loaded_extensions())"
        returnProperty="curlEnabled“
   />
   <fail unless="curlEnabled" message="You need cUrl" />
</target>

  • PHP
<?php
require_once dirname(__FILE__).'/SymfonyRequirements.php';
$symfonyRequirements = new SymfonyRequirements();
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
echo "********************************n";
echo "* *n";
echo "* Symfony requirements check *n";
echo "* *n";
echo "********************************nn";
Dépendances d’outils
  <dependencies>
    <required>
      <php><min>5.3.0</min></php>
      <pearinstaller> <min>1.9.4</min></pearinstaller>
      <package>
        <name>PHPUnit</name>
        <channel>pear.phpunit.de</channel>
        <min>3.7.0</min>
        <max>3.7.1</max>
      </package>
      …



• Puissant                                       Pear
• Vieillot
Dépendance d’outils

                                               Composer
"require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.2.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.0.*",
        "twig/extensions": "1.0.*«
}


• Puissant
• Très utilisé et moderne
• Jeune
Sécuriser

ASSURER LA SÉCURITÉ
Audit statique
                                                    RATS
• Vérifier quelques « empreintes » dans le code source
Surface d’attaque
                    NIKTO2
Travailler sur le fonctionnel

CONTRACTUALISER LE BESOIN
Vérifier le besoin métier
                                                   PHPUnit
<?php
require_once 'PHPUnit/Extensions/Story/TestCase.php';
require_once 'BowlingGame.php';
class BowlingGameSpec extends PHPUnit_Extensions_Story_
                                               TestCase {
        /**
          * @scenario
          */
        public function scoreForGutterGameIs0() {
                 $this
                 ->given('New game')
                 ->then('Score should be', 0);
        }
}
Vérifier le besoin métier
Fonctionnalité: posséder un compte bancaire
  Afin de gérer les comptes bancaires des utilisateurs
  En tant que client
  Je dois être capable d'effectuer des opérations basique
sur mon compte

 Scénario: Avoir un compte bancaire valide
    Etant donné que je suis un nouveau client
    Alors je dois avoir "0" euros sur mon compte

 Scénario: Retirer de l'argent sur mon compte
    Etant donné que je suis un client
    Et que je possède "50" euros sur mon compte
    Quand je retire "10" euros
    Alors je dois avoir "40" euros sur mon compte
Vérifier le besoin méter
                    Behat
Domain Driven Design
• S’assurer que le code correspond au besoin
• Le code recouvre le besoin
• Les modèles sont fonctionnels
Vision globale

CENTRALISER LES CONTRATS
Superviser
             Sonar
Intégration continue
• Permet de s’assurer que quoi qu’il se passe, un code qui ne
  respecte pas l’ensemble des contrats ne peut pas être mis en
  production
Merci !
• C’est l’heure des questions
• @halleck45
• blog.lepine.pro

Contenu connexe

Tendances

Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Test unitaire
Test unitaireTest unitaire
Test unitaireIsenDev
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeTelecomValley
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLy-Jia Goldstein
 
Introduction à la validation de logiciel
Introduction à la validation de logicielIntroduction à la validation de logiciel
Introduction à la validation de logicielJean-Paul CARMONA
 
Mémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline SimonMémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline SimonEmeline Simon
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels Bilel Abed
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Sylvain Leroy
 
Avis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsAvis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsCloudNetCare
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des testsZhu Wei QI
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebChristophe Rochefolle
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tddEric Hogue
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Jean-Emmanuel Houdu
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17Marc Hage Chahine
 

Tendances (20)

Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualifeSoirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
Soirée du Test Logiciel - Démystifier les xDD - C. TARDIEU, Acp qualife
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests
 
Introduction à la validation de logiciel
Introduction à la validation de logicielIntroduction à la validation de logiciel
Introduction à la validation de logiciel
 
Futur tunis
Futur tunisFutur tunis
Futur tunis
 
Mémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline SimonMémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline Simon
 
Présentation banc_ test
Présentation banc_ testPrésentation banc_ test
Présentation banc_ test
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Avis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsAvis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests Logiciels
 
Automatisation des tests
Automatisation des testsAutomatisation des tests
Automatisation des tests
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et Web
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1
 
ATDD Visuel
ATDD VisuelATDD Visuel
ATDD Visuel
 
Altran soirée du test logiciel - assez des c 05-10-17
Altran   soirée du test logiciel - assez des c 05-10-17Altran   soirée du test logiciel - assez des c 05-10-17
Altran soirée du test logiciel - assez des c 05-10-17
 

En vedette

Guadal pp kris olds, discussion paper french
Guadal pp kris olds, discussion paper frenchGuadal pp kris olds, discussion paper french
Guadal pp kris olds, discussion paper frenchIAU_Past_Conferences
 
Gastronomie lyonnaises ( héberger par Slide Share)
Gastronomie lyonnaises ( héberger par Slide Share)Gastronomie lyonnaises ( héberger par Slide Share)
Gastronomie lyonnaises ( héberger par Slide Share)mjdelary
 
Executive Coach Agnes ThéArd
Executive Coach Agnes ThéArdExecutive Coach Agnes ThéArd
Executive Coach Agnes ThéArdAGNESTHEARD
 
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...French Scrum User Group
 
Scenario "Droit d'asile" pour le JDR Bardak
Scenario "Droit d'asile" pour le JDR BardakScenario "Droit d'asile" pour le JDR Bardak
Scenario "Droit d'asile" pour le JDR BardakPascal Minoche
 
Louaize bc higher education in lebanon french w
Louaize bc higher education in lebanon french wLouaize bc higher education in lebanon french w
Louaize bc higher education in lebanon french wIAU_Past_Conferences
 
Présentation ID-Stats
Présentation ID-StatsPrésentation ID-Stats
Présentation ID-Statsflorianpilloy
 
Comment internet modifie-t-il notre consommation audiovisuelle ?
Comment internet modifie-t-il notre consommation audiovisuelle ?Comment internet modifie-t-il notre consommation audiovisuelle ?
Comment internet modifie-t-il notre consommation audiovisuelle ?asdillrow
 
Lanoye les bonnes feuilles
Lanoye   les bonnes feuillesLanoye   les bonnes feuilles
Lanoye les bonnes feuilleslesoirbe
 
092909 EMAIL TO OLYMPIC COMMITTEE (FRENCH)
092909   EMAIL TO OLYMPIC COMMITTEE (FRENCH)092909   EMAIL TO OLYMPIC COMMITTEE (FRENCH)
092909 EMAIL TO OLYMPIC COMMITTEE (FRENCH)VogelDenise
 

En vedette (20)

Guadal pp kris olds, discussion paper french
Guadal pp kris olds, discussion paper frenchGuadal pp kris olds, discussion paper french
Guadal pp kris olds, discussion paper french
 
Gastronomie lyonnaises ( héberger par Slide Share)
Gastronomie lyonnaises ( héberger par Slide Share)Gastronomie lyonnaises ( héberger par Slide Share)
Gastronomie lyonnaises ( héberger par Slide Share)
 
Executive Coach Agnes ThéArd
Executive Coach Agnes ThéArdExecutive Coach Agnes ThéArd
Executive Coach Agnes ThéArd
 
Comput training
Comput trainingComput training
Comput training
 
Jodete noé x d
Jodete noé x dJodete noé x d
Jodete noé x d
 
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...
Scrumday 2014 - Quand la recherche de l'innovation se révèle un exercice d'ag...
 
Scenario "Droit d'asile" pour le JDR Bardak
Scenario "Droit d'asile" pour le JDR BardakScenario "Droit d'asile" pour le JDR Bardak
Scenario "Droit d'asile" pour le JDR Bardak
 
API POINTS EXPLANATION
API POINTS EXPLANATION API POINTS EXPLANATION
API POINTS EXPLANATION
 
Les canaux ioniques
Les canaux ioniquesLes canaux ioniques
Les canaux ioniques
 
PEEGO Presentation
PEEGO PresentationPEEGO Presentation
PEEGO Presentation
 
L'imparfait
L'imparfaitL'imparfait
L'imparfait
 
title
titletitle
title
 
Modx
ModxModx
Modx
 
Louaize bc higher education in lebanon french w
Louaize bc higher education in lebanon french wLouaize bc higher education in lebanon french w
Louaize bc higher education in lebanon french w
 
Présentation ID-Stats
Présentation ID-StatsPrésentation ID-Stats
Présentation ID-Stats
 
Comment internet modifie-t-il notre consommation audiovisuelle ?
Comment internet modifie-t-il notre consommation audiovisuelle ?Comment internet modifie-t-il notre consommation audiovisuelle ?
Comment internet modifie-t-il notre consommation audiovisuelle ?
 
052412 French
052412   French052412   French
052412 French
 
Lanoye les bonnes feuilles
Lanoye   les bonnes feuillesLanoye   les bonnes feuilles
Lanoye les bonnes feuilles
 
092909 EMAIL TO OLYMPIC COMMITTEE (FRENCH)
092909   EMAIL TO OLYMPIC COMMITTEE (FRENCH)092909   EMAIL TO OLYMPIC COMMITTEE (FRENCH)
092909 EMAIL TO OLYMPIC COMMITTEE (FRENCH)
 
Pictures
PicturesPictures
Pictures
 

Similaire à Industrialiser le contrat dans un projet PHP

Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpGabriele Santini
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...Fabien Potencier
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Le moteur exakat
Le moteur exakatLe moteur exakat
Le moteur exakatexakat
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Presentation du gestionnaire de configuration Puppet
Presentation du gestionnaire de configuration PuppetPresentation du gestionnaire de configuration Puppet
Presentation du gestionnaire de configuration PuppetAurélie Henriot
 

Similaire à Industrialiser le contrat dans un projet PHP (20)

Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Le moteur exakat
Le moteur exakatLe moteur exakat
Le moteur exakat
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Presentation du gestionnaire de configuration Puppet
Presentation du gestionnaire de configuration PuppetPresentation du gestionnaire de configuration Puppet
Presentation du gestionnaire de configuration Puppet
 
Présentation Puppet
Présentation PuppetPrésentation Puppet
Présentation Puppet
 

Industrialiser le contrat dans un projet PHP

  • 2. En face de vous • Jean-François Lépine • Consultant PHP Chez Alterway • Vice-secrétaire de l’AFUP • @Halleck45 • http://blog.lepine.pro
  • 3. Le Contrat • Signez-ici • Avec votre sang • Sinon… porte sur un Comportement On doit pouvoir le vérifier
  • 4. Tous les jours DANS LE CODE SOURCE
  • 5. Un code est un comportement • Une fonction • Attend une donnée (2 entiers ) • Traite une données (les additionne) • Fournit une données (1 entier) Comment s’en assurer ?
  • 7. Modèle Objet PHP <?php interface ChienInterface { public function aboyer(); public function manger(); public function formir(); } • Une Interface EST un contrat • Ce contrat ne peut être rompu « Implements » = « je m’engage à… sinon fouette-moi! »
  • 8. Programmation par Contrat • N’est rien d’autre que de la POO poussée jusqu’au bout HOA / Praspel /** * @requires nom : string(boundinteger(1,10)); * @requires jour : boundinteger(1,31); * @requires mois : boundinteger(1,12); * @requires annee : boundinteger(1911,2011); * @ensures result : boolean(); * @throwable FooException; */ public function test1($nom,$jour,$mois,$annee) {
  • 9. Test Driven Development • Consiste à vérifier le traitement d’une fonction vis-à-vis d’une donnée avant son implémentation PHP Unit, atoum
  • 11. KISS • SOLID • Comment tester la stupidité ?
  • 12. Métriques • Couplage applicatif • Modularité et dépendance • Complexité cyclomatique • Verticalité applicative PHP Depend
  • 13. Métriques Cornac
  • 15. Code accessible • Système de versionning • Source Control Management • Mercurial • Svn • Git • …
  • 16. Code source lisible PHP_CodeSniffer, checkStyle
  • 17. Code source chargeable • Respectez le contrat de la PHP Standard Recommandation 0 (PSR-0) • Un nom de classe commence par une majuscule • Chaque namespace est séparé par un _ ou un • Chaque séparateur de namespace représente un niveau dans l’arborescence des dossiers • Correspondance extacte entre le nom de la classe et le nom du fichier
  • 18. Code source propre PHPMessDetector
  • 20. Dépendances systèmes • PHING (Ant) <target name="php.check.curl"> <php expression="in_array('curl', get_loaded_extensions())" returnProperty="curlEnabled“ /> <fail unless="curlEnabled" message="You need cUrl" /> </target> • PHP <?php require_once dirname(__FILE__).'/SymfonyRequirements.php'; $symfonyRequirements = new SymfonyRequirements(); $iniPath = $symfonyRequirements->getPhpIniConfigPath(); echo "********************************n"; echo "* *n"; echo "* Symfony requirements check *n"; echo "* *n"; echo "********************************nn";
  • 21. Dépendances d’outils <dependencies> <required> <php><min>5.3.0</min></php> <pearinstaller> <min>1.9.4</min></pearinstaller> <package> <name>PHPUnit</name> <channel>pear.phpunit.de</channel> <min>3.7.0</min> <max>3.7.1</max> </package> … • Puissant Pear • Vieillot
  • 22. Dépendance d’outils Composer "require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": ">=2.2.3,<2.4-dev", "doctrine/doctrine-bundle": "1.0.*", "twig/extensions": "1.0.*« } • Puissant • Très utilisé et moderne • Jeune
  • 24. Audit statique RATS • Vérifier quelques « empreintes » dans le code source
  • 26. Travailler sur le fonctionnel CONTRACTUALISER LE BESOIN
  • 27. Vérifier le besoin métier PHPUnit <?php require_once 'PHPUnit/Extensions/Story/TestCase.php'; require_once 'BowlingGame.php'; class BowlingGameSpec extends PHPUnit_Extensions_Story_ TestCase { /** * @scenario */ public function scoreForGutterGameIs0() { $this ->given('New game') ->then('Score should be', 0); } }
  • 28. Vérifier le besoin métier Fonctionnalité: posséder un compte bancaire Afin de gérer les comptes bancaires des utilisateurs En tant que client Je dois être capable d'effectuer des opérations basique sur mon compte Scénario: Avoir un compte bancaire valide Etant donné que je suis un nouveau client Alors je dois avoir "0" euros sur mon compte Scénario: Retirer de l'argent sur mon compte Etant donné que je suis un client Et que je possède "50" euros sur mon compte Quand je retire "10" euros Alors je dois avoir "40" euros sur mon compte
  • 29. Vérifier le besoin méter Behat
  • 30. Domain Driven Design • S’assurer que le code correspond au besoin • Le code recouvre le besoin • Les modèles sont fonctionnels
  • 32. Superviser Sonar
  • 33. Intégration continue • Permet de s’assurer que quoi qu’il se passe, un code qui ne respecte pas l’ensemble des contrats ne peut pas être mis en production
  • 34.
  • 35. Merci ! • C’est l’heure des questions • @halleck45 • blog.lepine.pro