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
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
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
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
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