PHP : la bonne pratique

Apprendre les bonnes pratiques de programmation en PHP


précédentsommairesuivant

XI. Tests

Écrire des tests automatisés pour votre code PHP est considéré comme une très bonne pratique et permet de construire des applications plus robustes. Les tests automatisés sont un excellent outil pour s'assurer que votre application fonctionne toujours (lorsque vous faites des changements ou quand vous ajoutez de nouvelles fonctionnalités) et ne devraient pas être ignorés.

Il existe différents types d'outils de test (ou framework) disponibles pour PHP qui utilisent différentes approches - tous tentent d'éviter les tests manuels et le besoin d'un socle pour l'équipe chargée de faire l'assurance qualité (QA), s'assurant ainsi que les récents changements ne viendront pas casser l'existant.

XI-A. Développement dirigé par les tests (TDD)

Le Test Driven Development (TDD) ou en français développement piloté par les tests est une technique de développement de logiciels qui préconise d'écrire les tests unitaires avant d'écrire le code source d'un logiciel.

XI-A-1. Test unitaire

Le test unitaire est une approche dans la programmation qui s'assure que les fonctions, les classes et les méthodes écrites fonctionnent comme prévu tout le long du cycle de développement. En vérifiant les valeurs en entrée et en sortie des différentes fonctions, vous vous assurez du bon fonctionnement de la logique interne. En utilisant l'injection de dépendances et en construisant des classes mocks et des classes stubs, vous pouvez vérifier que les dépendances sont correctement utilisées pour une meilleure couverture du code.

Quand vous créez une classe ou une fonction, vous devriez aussi créer un test unitaire couvrant l'ensemble des états possibles. À un niveau très basique, vous devriez vous assurer que les changements effectués sur une fonction ou une classe ne modifieront pas le comportement attendu de l'application. La seule autre possibilité pour les tests unitaires serait l'utilisation de la fonction var_dump() ce qui n'est pas viable que ce soit pour une petite ou une grande application.

L'autre cas d'utilisation des tests unitaires est la contribution à la communauté open source. Vous pouvez ainsi écrire un test montrant une fonctionnalité boguée puis la réparer en montrant cette fois qu'elle passe le test. Les patches auront plus de chances d'être acceptés de cette manière. Si vous travaillez sur un projet acceptant les « pull requests » alors vous devriez exiger un (ou plusieurs) test avant chaque patch.

PHPUnit est le framework de test standard (de facto) pour écrire des tests unitaires pour des applications PHP, mais il existe d'autres solutions :

XI-A-2. Test d'intégration

Un test d'intégration est un test qui se déroule dans une phase d'un projet informatique suivant les tests unitaires. Il consiste, une fois que les développeurs ont chacun validé leurs développements ou leurs correctifs, à regrouper leurs modifications ensemble dans le cadre d'une livraison.

Beaucoup des outils utilisés pour les tests unitaires peuvent aussi l'être pour les tests d'intégration étant donné qu'ils partagent les mêmes principes.

XI-A-3. Test fonctionnel

Les tests fonctionnels servent à vérifier que chaque fonction est correctement implémentée, c'est-à-dire conforme aux exigences et aux spécifications. On vérifie chaque fonction indépendamment les unes des autres, généralement en termes d'entrées/sorties.

Une autre variante connue est le test d'acceptation qui lui vérifie que le produit répond aux attentes de l'utilisateur, c'est-à-dire qu'il est conforme aux besoins et au cahier des charges. On vérifie le produit dans son ensemble, généralement avec des scénarios réalistes d'utilisation.

XI-A-4. Outils pour les tests fonctionnels

  • Selenium
  • Mink
  • Codeception est un framework de test complet incluant aussi des outils pour les tests d'acceptation
  • Storyplayer est un framework de test complet qui inclut un support pour créer et détruire des environnements de test à la demande

XI-B. Behavior Driven Development

Il existe deux types de développement orienté comportement (BDD en anglais) : SpecBDD et StoryBDD. SpecBDD se concentre les aspects techniques du code alors que StoryBDD lui se concentre sur la partie métier, les fonctionnalités apportées ou bien encore les interactions. Le PHP possède des frameworks pour ces types de BDD.

Avec StoryBDD, vous écrivez des histoires « humainement » lisibles qui décrivent le comportement de votre application. Ces histoires peuvent ensuite être transformées en tests se lançant sur votre application. Le framework utilisé dans les applications PHP pour StoryBDD est Behat qui s'inspire de Cucumber pour Ruby et implémente le langage Gherkin DSL pour décrire les fonctionnalités.

Avec SpecBDD, vous écrivez des spécifications décrivant comment votre code devrait se comporter. Au lieu de tester une fonction ou une méthode, vous décrivez comment cette fonction ou méthode devrait s'exécuter. Pour atteindre ce but, il existe un framework qui s'appelle PHPSpec. Ce framework s'inspire lui aussi d'un projet Ruby, Rspec.

XI-B-1. Liens sur le BDD

  • Behat, le framework StoryBDD pour PHP, inspiré de Cucumber;
  • PHPSpec, le framework SpecBDD pour PHP, inspiré de RSpec;
  • Codeception est un framework de test complet utilisant les principes du BDD.

XI-C. Outils de test complémentaire

Hormis les tests unitaires et les frameworks orientés comportement, il y a aussi un certain nombre de frameworks génériques et de bibliothèque utilitaires selon l'approche désirée.

XI-C-1. Liens vers les outils

  • Selenium est un outil d'automatisation d'utilisation d'un navigateur web qui peut être intégré à PHPUnit.
  • Mockery est un framework de Mock qui peut être intégré avec PHPUnit ou PHPSpec.
  • Prophecy est un framework de Mock très puissant et flexible. Il est intégré à PHPSpec et peut être utilisé avec PHPUnit.

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Josh Lockhart et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.