Dans nos précédents articles, nous nous sommes intéressés à certains aspects liés à la qualité du code. Nous avons abordé les principes S.O.L.I.D. Dans ce nouvel article, nous souhaitons continuer en abordant la qualité du développement ; un sujet qui est plus que jamais d’actualité avec l’utilisation des méthodologies Agile et particulièrement le Test Driven Development.
L’objectif de cet article est d’être pragmatique et orienté projet : nous souhaitons montrer que les nouveautés apportées dans la nouvelle version de Visual Studio 2012 permettront aux développeurs de faciliter et de rendre naturel le développement TDD. Il s’agit également de simplifier et limiter l’intégration des différents outils dans un processus d’intégration continue. Le Test Driven Development (développement piloté par les tests) décrit une technique de développement de logiciel qui consiste à écrire des tests unitaires avant l’écriture du code source. Voici les différentes étapes du Test Driven Development [Fig.1] : • Ecriture du premier test pour une nouvelle fonctionnalité puis vérification de l’échec du test (l’implémentation de la nouvelle fonctionnalité n’étant pas encore réalisée) • Implémentation du code minimal nécessaire pour passer le test puis vérification du succès du test (l’implémentation fournit alors le comportement attendu) • Refactorisation et optimisation du code, les tests assurent la cohérence des fonctionnalités L’utilisation du Test Driven Development permet ainsi l’obtention d’un code source très fiable, prévisible, robuste et, après refactorisation, hautement optimisé. Les tests assurent un comportement correct de celui-ci indépendamment des situations auxquelles il pourra être exposé. Le code source devient alors valide en toutes circonstances. Pour créer de bons tests unitaires, il faut d’abord réfléchir à la conception du programme et à la façon dont il va être utilisé. Il faut éviter une précipitation dans l’implémentation avant d’avoir défini les objectifs. Des erreurs de conception peuvent ainsi être identifiées et résolues plus vite. L’implémentation passe seulement après la validation de la conception complète via les tests unitaires. Les tests unitaires deviennent une sorte de spécification générale décrivant les fonctionnalités du programme de manière unitaire. Quant à la refactorisation, l’optimisation et la restructuration du code peuvent se faire sans risque car ils sont vérifiables ; les tests unitaires assurant alors la non-régression technique et la cohérence du comportement. Le comportement étant exprimé dans les tests unitaires, ils valident que le programme se comporte toujours de la même façon si les tests passent avec succès. De plus, en associant la méthode d’Extreme Programming (XP) et la programmation en binôme, on obtient un code de très bonne qualité.
Jason DeOliveira
Fathi Bellahcene