Les pratiques de l'Extreme Programming dans un univers PHP

Perrick Penet, No Parking

PHPQuebec, Montréal, 2006

Dette technique et code "boulet"

La dette technique mesure le côté brouillon ou périmé des travaux de développement d'un logiciel. Au fur et à mesure la masse de code "boulet" vous rattrape.

Est-ce que votre code est facile à faire évoluer ? Pouvez-vous obtenir un retour instantané sur chacun de vos changements ? Si la réponse à une de ces questions est NON, vous avez du code "boulet". Et celui-ci vous pompe du temps et de l'énergie.

Michael Feathers : Working Effectively with Legacy Code .

Se prémunir de la chute des cheveux...

Voici probablement ce que vous souhaitez éviter :

...et anti-spam ;-)

Voici ce que les tests automatisés peuvent faire pour vous :

N'hésitez pas à aller découvrir d'autres personnes entièrement satisfaites.

Confiance et sérénité sont les mots magiques.

Vous savez que ça marche et vous savez quand ça marche. Les tests développeur, c'est bien !

Il se pourrait bien qu'au passage on gagne une bataille contre le spam : dès la racine.

Une fois que tous les développeurs auront cessé de perdre leurs cheveux, il ne restera que les messages à propos du Viagra...

Les valeurs XP

Dans la version 1 : Communication - Simplicité - Feedback - Courage.

Dans la version 2 : Communication - Simplicité - Feedback - Courage - Respect.

Les pratiques XP (1.0)

  1. jeu de la plannification
  2. livraisons courtes
  3. métaphore
  4. conception simple
  5. tests (unitaires et recette)
  6. remaniements
  1. programmation en binôme
  2. propriété collective
  3. intégration continue
  4. rythme soutenable
  5. client sur site
  6. standards de code

Les pratiques XP (2.0)

Les pratiques XP (2.1)

Tests développeur

Vous pouvez investir dans des outils mais ceux-ci n'ajoutent aucune valeur avec le temps : les intérêts (au sens bancaire du terme) sont négligeables.

Nous accordons plus de valeurs aux individus et aux interactions. Et moins aux procédures et aux outils.

Extrait du Agile Manifesto.

Dans cet univers d'interactions, on distingue deux types de tests : unitaires et fonctionnels -- les tests développeur : Kent Beck -- Developer Testing.

Definition d'un test unitaire : c2 wiki

Définition d'un test fonctionnel : c2 wiki

D'autres tests sont possibles...

Exemple de test unitaire

La documentation SimpleTest et ses tutoriaux sont pas mals (je sais, je les ai traduit ;-). Ils ne sont plus tout à fait à jour : la dernière release est une alpha.

<?php
require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
require_once('../classes/log.php');

class TestOfLogging extends UnitTestCase {
    
    function testCreatingNewFile() {
        @unlink('/temp/test.log');
        $log = new Log('/temp/test.log');
        $this->assertFalse(file_exists('/temp/test.log'));
    }
}
$test = &new TestOfLogging();
$test->run(new HtmlReporter());
?>

Et qu'est-ce qu'on y gagne ?

testoflogging

Fail: testcreatingnewfile->True assertion failed.
1/1 test cases complete. 0 passes and 1 fails.

testoflogging

1/1 test cases complete. 1 passes and 0 fails.

Exemple de test fonctionnel

<?php
require_once('simpletest/web_tester.php');
require_once('simpletest/reporter.php');

class TestOfPHPQuebec extends WebTestCase {
    
    function testPageConf2006() {
        $this->get('http://conf.phpquebec.com/fr/conf2006/');
        $this->assertResponse(200);
    }
}
$test = &new TestOfPHPQuebec();
$test->run(new HtmlReporter());
?>

Développement piloté par les tests (ou Test driven development - TDD)

Vous avez écrit quelques tests, c'est assez pénible. Et puis un jour quelque chose de bizarre arrive : vous modifiez du code ici, puis lancez votre suite de tests et une barre rouge appara”t là-bas. Vous étiez sur le point d'introduire un nouveau bug et il a été découvert automatiquement. A partir de maintenant, votre investissement va payer.

Vous êtes sur le point de devenir "test infected".

Ecrire un test avant du code est votre nouvelle ligne de conduite. Le rythme de votre production change :

écrire un test
écrire du code
remanier le code

Euh, en fait ça ressemble plutôt à :

écrire un test
écrire du code
écrire un peu plus de code
remanier le code bordélique
remanier le code plus si bordélique que ça
recommencer avec un nouveau test

D'autres bénéfices des tests

Pour la liste de quelqu'un d'autre : Keith Ray.

Sous le capot de SimpleTest

Actuellement il y a deux paquets de tests unitaires en PHP qui soient effectivement actifs : Pear PHPUnit (Sebastian Bergmann) et SimpleTest (Marcus Baker).

Au coeur de SimpleTest :

La version qui arrive (1.1) devrait ajouter :

SimpleTest de l'extérieur

Des outils pour développeurs utilisant SimpleTest (I):

Paquets

Des outils pour développeurs utilisant SimpleTest (II):

Trucs pour IDE

Des outils pour développeurs utilisant SimpleTest (III):

Lanceurs de tests

Des outils pour développeurs utilisant SimpleTest (IV):

Divers

Des livraisons courtes et rapides

Vous avez aimé Netscape ? vous allez adorer Vista ! Les concurrents (IE pour l'un et Apple / Ubuntu pour l'autre) ont sortis et continuent de sortir des versions régulièrement.

Vista© ? D'abord 2003 puis

Et pendant ce temps, Ubuntu©

Pour une prestation, le déploiement est facile : un serveur suffit et voilà...

$ pear update <paquet>

Pour un logiciel avec plusieurs utilisateurs : pensez à faciliter la mise-à-jour.

Les habitués "fire and forget" peuvent faire très mal au niveau de la sécurité :

Le radiateur

Des cartes en papier pour : écrire / gommer / raturer / trier / échanger / trier / voir de loin & de près / déchirer

Développement logiciel avec air bag incorporé

Note : le week-end n'est pas suffisant.

Les deux font la paire

Question : fatigue ou ennui ?

Le binômage est fatiguant : les développeurs sont constamment à la recherche d'un haut niveau de concentration.

La conception la plus simple possible

PHP s'est construit sur la simplicité.

The no-framework PHP MVC framework : la mode du framework coûte cher. A commencer par trouver le bon : Taking a look at ten different PHP frameworks

Et s'il y avait un principe à retenir : DRY, pour Don't Repeat Yourself. Ensuite on se rendra compte de l'émgergence de modèles de conception (design patterns).

To doc or not to doc

Attention question piège : la documentation est souvent la bouc-émissaire.

PHP a un très bonne documentation : à quel prix ?

Il "suffit" souvent de trouver la dose de documentation demandée (ie. PHPDoc n'est pas toujours LA solution).

Le code est la propriété de tous

Note : quand même un truc à éviter de dire à votre responsable si vous ne travaillez pas en binôme

Il existe des bindings pour SVN avec PHP : ça peut toujours servir.

Les joies pour Dupond et Dupont

Attention au transfert FTP, le Facile se Transforme en Pénible.

Reprendre le graphique du chronomètre à 1 puis 3 boutons.....

For your eyes only

Commencer par les "coding standards" de PEAR (pear.php.net)

class t_a_c() {
  function f() {
    ...
    return $b_number;
  }
}


class voyager_avec_air_canada() {
  function préparer_carte_embarquement() {
    ...
    return $numéro_carte_embarquement;
  }
}

Pour cet exemple, il faudra attendre PHP6 et le support Unicode complet.

Ne pas oublier Ruby on Rails et son pouvoir des conventions en marche contre Java et ses fichiers de configuration en XML.

Questions ? Commentaires ?

Perrick Penet

email : perrick@noparking.net

boîte : No Parking

blog : :: onpk ::

contrib : SimpleTest

communauté : AFUP