4 novembre 2013

Article

Technologies de l'information

Techniques agiles pour réduire les dépendances en TI

Beaucoup de développeurs font l'apprentissage des techniques agiles pour leurs projets dont l’une des plus populaires est le test unitaire. Malheureusement, une compréhension des principes de base orientée objet est nécessaire pour intégrer de manière adéquate des techniques avancées afin de réduire les dépendances entre les composants logiciels dans les applications. 

Ceci est particulièrement important quand une dépendance externe (composant matériel ou logiciel) n'est pas encore prête ou pas entièrement testée pour une intégration. Appliquer un test unitaire de base et des techniques de refactoring devient nécessaires afin d'aider à réduire les dépendances.

Les techniques présentées dans la formation DE316, Méthode agile : développement déterminé par les tests (TDD - Test-Driven Development), sont des modèles de tests et de conception pratiques qui améliorent  la création du code et permet de meilleurs tests unitaires pour les applications orientées objet.

Effectuer une bonne programmation dans les langages orientés-objet tels que C++, Java, C# ou B# nécessite une certaine maturité.  Vous devez commencer à utiliser les interfaces et les classes abstraites dès que vous prévoyez d’écrire une classe concrète (instantiable).

Pourquoi ? Utiliser uniquement des classes concrètes engendrera un résultat final qui sera aussi monolithique qu'un réseau de classes où les dépendances et le couplage sont omniprésents. C'est aussi désastreux que du code spaghetti dans le style traditionnel/procédural de codage. Car même si vous encapsulez vos données et vos fonctions dans une classe, elles sont toutes regroupées ensemble. Dans une telle approche de codage, il est impossible de tester une classe de manière isolée, car aucun test unitaire n’est applicable. Si vous faites affaire avec un tel château de cartes, la simple modification d'une classe peut créer une énorme recompilation de toutes les autres.

L'activité de coder dans un langage orienté-objet n'est plus uniquement l'écriture de fonctions, d'instructions, de boucles, d'opérateurs et d'expressions, c'est aussi une activité de conception. Coder en objet inclus implicitement  la conception. Elle commence souvent par l'extraction du comportement commun dans une abstraction, en créant des interfaces et des classes abstraites. C'est l'étape clé vers le découplage dans l'approche orientée-objet, car elle nous permet de veiller à ce que des dépendances minimales existent entre les classes.Si vous effectuez des tests unitaires, vous serez indirectement en mesure de tester vos classes en isolation et par le fait même vous minimiser votre couplage.

Faire des tests unitaires est le point de départ d'une sensibilisation pour la création de logiciels d'une manière systématique et progressive. Tester des classes une par une en les intégrant de manière incrémentale fait partie d'une approche appelée intégration continue (continuous integration).

Peut-on coder parfaitement la première fois ? Cela semble trop optimiste. Après tout, nous sommes des humains et nous faisons des erreurs,  même si nous sommes matures en conception orientée-objet. C'est pourquoi nous avons besoin de remanier notre code.  Un terme agile "refactoring" améliore celui-ci en le restructurant  avec un minimum d'effets secondaires aux classes environnantes.


Je présenterais un avant-goût de ces techniques lors de la conférence Agile Tour 2013 de Montréal, le 9 novembre 2013 au Pavillon Judith-Jasmin de l'UQAM. Ces techniques sont également présentées en détail dans la formation DE316 afin de vous montrer comment développer votre code et éviter les remaniements  inutiles. Cette formation vous aidera à aligner votre code adéquatement dès le premier jet en appliquant ces techniques et ces modèles. Le code résultant sera nettement de meilleure qualité.

Au plaisir de pouvoir vous rencontrer et partager mon expertise et ma passion dans une de mes formations en Objet et Agile.

© Michel de Champlain, Ph.D, Tous droits réservés. 

Michel de Champlain dirige DeepObjectKnowledge, principal partenaire de Technologia pour les technologies objet, agiles et embarquées (embedded). Il est titulaire d'un diplôme de troisième cycle en génie informatique de l'École Polytechnique de Montréal. Fort de plus d'une vingtaine d'années d'expérience en programmation, dont C/C++, il utilise Java et C# depuis leur lancement.

Il a formé et coaché des centaines d'organisations au Québec, particulièrement dans les langages objets depuis 1986 et dans l'allègement de processus trop lourds depuis 1995 (bien avant la popularité des méthodes agiles). Michel est Certified ScrumMaster. Il présente régulièrement des séminaires à la conférence ESC. Il est l'auteur de plusieurs articles et livres www.deepobjectknowledge.com/ressources.Ouvrages.html. Il est le créateur du langage de programmation orienté-objet B# pour les systèmes embarqués à faibles ressources www.BSharpLanguage.org. La boîte à outils de B# (compilateur, machine virtuelle, librairies, utilitaires) a été développée entièrement en orienté-objet via une approche pilotée par les tests (Test-Driven Development - TDD).