Industrialiser le contrat dans un projet PHP
-
Upload
halleck45 -
Category
Technology
-
view
5.110 -
download
0
description
Transcript of Industrialiser le contrat dans un projet PHP
![Page 1: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/1.jpg)
Industrialiser le Contrat PHPÀ tous les étages
![Page 2: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/2.jpg)
En face de vous• Jean-François Lépine• Consultant PHP Chez Alterway• Vice-secrétaire de l’AFUP• @Halleck45• http://blog.lepine.pro
![Page 3: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/3.jpg)
Le Contrat• Signez-ici• Avec votre sang• Sinon…
porte sur un Comportement
On doit pouvoir le vérifier
![Page 4: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/4.jpg)
DANS LE CODE SOURCETous les jours
![Page 5: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/5.jpg)
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 ?
![Page 6: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/6.jpg)
Duck TypingC’est un canard !
![Page 7: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/7.jpg)
Modèle Objet PHP
• Une Interface EST un contrat• Ce contrat ne peut être rompu
<?php interface ChienInterface {
public function aboyer();public function manger();public function formir();
}
« Implements » =
« je m’engage à… sinon fouette-moi! »
![Page 8: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/8.jpg)
Programmation par Contrat• N’est rien d’autre que de la POO poussée jusqu’au bout
/** * @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) {
HOA / Praspel
![Page 9: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/9.jpg)
Test Driven Development• Consiste à vérifier le traitement d’une fonction vis-à-vis d’une
donnée avant son implémentation
PHP Unit, atoum
![Page 10: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/10.jpg)
L’ENGAGEMENT DE LA STUPIDITÉLe modèle Objet
![Page 11: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/11.jpg)
KISS
• SOLID• Comment tester la stupidité ?
![Page 12: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/12.jpg)
Métriques• Couplage applicatif• Modularité et dépendance• Complexité cyclomatique• Verticalité applicative PHP Depend
![Page 13: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/13.jpg)
Métriques
Cornac
![Page 14: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/14.jpg)
CONTRACTUALISER LA COLLABORATION
Travailler en équipe
![Page 15: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/15.jpg)
Code accessible• Système de versionning• Source Control Management• Mercurial• Svn• Git• …
![Page 16: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/16.jpg)
Code source lisible
PHP_CodeSniffer, checkStyle
![Page 17: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/17.jpg)
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
![Page 18: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/18.jpg)
Code source propre
PHPMessDetector
![Page 19: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/19.jpg)
CONTRACTUALISER LES OUTILS TIERS
Gestion des Dépendances
![Page 20: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/20.jpg)
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 "********************************\n\n";
![Page 21: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/21.jpg)
Dépendances d’outils
• Puissant• Vieillot
<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> …
Pear
![Page 22: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/22.jpg)
Dépendance d’outils
• Puissant• Très utilisé et moderne• Jeune
"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.*«
}
Composer
![Page 23: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/23.jpg)
ASSURER LA SÉCURITÉSécuriser
![Page 24: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/24.jpg)
Audit statique• Vérifier quelques « empreintes » dans le code source
RATS
![Page 25: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/25.jpg)
Surface d’attaqueNIKTO2
![Page 26: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/26.jpg)
CONTRACTUALISER LE BESOINTravailler sur le fonctionnel
![Page 27: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/27.jpg)
Vérifier le besoin métier
<?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);
} }
PHPUnit
![Page 28: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/28.jpg)
Vérifier le besoin métierFonctionnalité: 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
![Page 29: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/29.jpg)
Vérifier le besoin méterBehat
![Page 30: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/30.jpg)
Domain Driven Design• S’assurer que le code correspond au besoin• Le code recouvre le besoin• Les modèles sont fonctionnels
![Page 31: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/31.jpg)
CENTRALISER LES CONTRATSVision globale
![Page 32: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/32.jpg)
SuperviserSonar
![Page 33: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/33.jpg)
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
![Page 34: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/34.jpg)
![Page 35: Industrialiser le contrat dans un projet PHP](https://reader035.fdocument.pub/reader035/viewer/2022081401/559818c91a28ab4a768b459f/html5/thumbnails/35.jpg)
Merci !• C’est l’heure des questions• @halleck45• blog.lepine.pro