Your SlideShare is downloading. ×
0
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Industrialiser le contrat dans un projet PHP

5,074

Published on

La notion de contrat intervient à tous les étages en PHP : du code source au besoin fonctionnel, en passant par la nécessité de travailler en équipe ou de fournir un travail clair et compréhensible. …

La notion de contrat intervient à tous les étages en PHP : du code source au besoin fonctionnel, en passant par la nécessité de travailler en équipe ou de fournir un travail clair et compréhensible. Petit tour d'horizon des outils qui vous permettront de vous assurer automatiquement que ces contrats sont bien respectés.

Conférences lors du rendez-vous AFUP Nantes du 29 octobre 2012

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
5,074
On Slideshare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
24
Comments
1
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Industrialiser leContrat PHPÀ tous les étages
  • 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 ComportementOn doit pouvoir le vérifier
  • 4. Tous les joursDANS LE CODE SOURCE
  • 5. Un code est uncomportement• Une fonction • Attend une donnée (2 entiers ) • Traite une données (les additionne) • Fournit une données (1 entier) Comment s’en assurer ?
  • 6. Duck TypingC’est un canard !
  • 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
  • 10. Le modèle ObjetL’ENGAGEMENT DE LA STUPIDITÉ
  • 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
  • 14. Travailler en équipeCONTRACTUALISER LACOLLABORATION
  • 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
  • 19. Gestion des DépendancesCONTRACTUALISER LES OUTILSTIERS
  • 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<?phprequire_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
  • 23. SécuriserASSURER LA SÉCURITÉ
  • 24. Audit statique RATS• Vérifier quelques « empreintes » dans le code source
  • 25. Surface d’attaque NIKTO2
  • 26. Travailler sur le fonctionnelCONTRACTUALISER LE BESOIN
  • 27. Vérifier le besoin métier PHPUnit<?phprequire_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étierFonctionnalité: posséder un compte bancaire Afin de gérer les comptes bancaires des utilisateurs En tant que client Je dois être capable deffectuer des opérations basiquesur 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 largent 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
  • 31. Vision globaleCENTRALISER LES CONTRATS
  • 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. Merci !• C’est l’heure des questions• @halleck45• blog.lepine.pro

×