mer, 09/01/2013 - 11:55
Les logiciels sont à la base des produits et des services que nous utilisons et dont nous dépendons dans notre vie de tous les jours. C’est aussi un des facteurs différenciant d’une entreprise. Alors que le logiciel devient plus volumineux, plus complexe et plus important pour l’entreprise, celle-ci devient plus exigeante envers les équipes de développement. Par Chris Adlard, Directeur Marketing et Communication EMEA de Coverity.
De plus en plus, les développeurs doivent innover davantage, dans des délais de plus en plus courts et sans impact sur la qualité. Cette complexité est encore accrue par la dispersion géographique des équipes, aujourd’hui la norme, et par le code produit par des équipes externes.
Avec autant de variables, il est difficile d’avoir une visibilité sur la chaîne d’approvisionnement, qu’elle soit interne ou externe. Et en l’absence d’avertissements sur les risques en matière de qualité qui sont susceptibles d’impacter les sorties ou d’engendrer un passif technique à long terme, il reste bien peu de temps pour faire quelque chose avant que l’impact ne se répercute sur les clients ou l’activité. Ce manque de visibilité crée aussi des problèmes de collaboration en aval et diminue l’efficacité. Les processus de QA et d’audit de sécurité demandent plus de temps et de travail, accroissant le risque de voir des défauts du logiciel passer à travers le filet et se retrouver dans la nature ou en production. Les impacts sont multiples.
Au niveau de l’activité : rappels coûteux, indisponibilités, plantages en service, clients mécontents et dégradation de l’image de marque. Au niveau du développement : davantage de temps passé à rechercher et corriger les problèmes au lieu d’innover, ce qui retarde la mise sur le marché, augmente les coûts et diminue la satisfaction des clients. C’est un cercle vicieux.
Le test de développement est une approche innovante et plus exhaustive que le test du logiciel, qui complète les méthodes classiques. Le test de développement facilite la gestion de ces difficultés et apporte plusieurs avantages critiques pour faciliter le test du logiciel. Voici 5 points pour expliquer comment mettre en œuvre le test de développement :
1. Intégrer les tests dans la phase de développement - pendant la compilation
Les défauts des logiciels existent toujours, pourquoi donc sont-ils aussi difficiles àéliminer ? D’une part, les méthodes classiques de test, bien qu’efficaces, sont limitées. En général, elles recherchent les problèmes « attendus » et s’assurent que le logiciel fonctionne et se comporte comme prévu. En outre, elles sont appliquées plus tard dans le cycle, bien après le développement. À cause des silos dans l’organisation et des conflits de priorités, il est difficile de faire corriger les défauts par l’équipe de développement une fois qu’elle a terminé cette étape.
D’autre part, l’adoption d’une nouvelle technologie sera limitée sauf, si elle ne demande pas d’effort au développeur. Si les résultats des tests ne sont pas présentés au développeur d’une manière utile, pertinente et en contexte, le dépannage et la correction des défauts ralentiront tout le processus. Etant donnée la pression du time to market sur le développement, les défauts ne seront pas corrigés, voire pas détectés.
Il faut donc appliquer une autre approche pour les tests. Il est maintenant nécessaire d’élargir les tests au-delà de leur définition classique et de les intégrer à chaque étape du cycle de vie en commençant par le code lui-même, au cours de son développement. Le test de développement complète les tests traditionnels pour aider à trouver et corriger rapidement les défauts inattendus dans le code, difficiles à identifier mais critiques et ce au meilleur moment pour les corriger d’un point de vue des coûts.
2. Définir la priorité des tests : les applications problématiques dont le code est complexe
Au lieu de s’appuyer sur les méthodes classiques de QA, les développeurs et responsables du développement devraient pouvoir gérer aisément et rapidement les défauts dans le code, surtout s’il est complexe. Il faut pour cela définir la priorité des défauts en fonction de leur impact et filtrer les informations associées pour n’afficher que celles qui sont utiles. Une fois que les défauts ont été classés, les développeurs devraient pouvoir trouver automatiquement tous les emplacements de ces défauts, partout dans le projet et les versions de code, réduisant le travail au minimum. Ensuite, ils doivent pouvoir collaborer avec les autres développeurs pour partager les informations entre des équipes dispersées géographiquement.
3. Automatiser la conduite des tests et l’attribution des responsabilités au sein du cycle de développement du système
Le fait d’aider les développeurs à trouver des défauts critiques, difficiles à repérer et pouvant causer des plantages très tôt durant le développement du logiciel, facilite grandement l’automatisation de la conduite des tests. Ceci réduit les coûts, les délais et les risques associés aux erreurs du logiciel.
Beaucoup d’entreprises ont intégré le test de développement durant le processus de build nocturne. Les développeurs, qui ont enregistré leur code à la fin de la journée, sont donc automatiquement avertis le lendemain matin des éventuels problèmes.
En outre, cette automatisation est particulièrement rentable lorsque le test de développement doit évoluer vers des centaines ou des milliers de développeurs, partout dans le monde. Elle facilite la découverte et la correction de milliers dedéfauts dans des millions de lignes de code, en une seule analyse. Grâce à l’analyse en parallèle et incrémentielle, le code peut être étudié en quelques minutes, ce qui permet aux développeurs de vérifier leur code plus souvent et plus efficacement. L’analyse en cours de développement peut se faire simultanément sur de nombreux cœurs et le développeur peut choisir de n’analyser que les fichiers qui ont été modifiés ou qui sont concernés par un changement.
4. Former les développeurs à apprendre de leurs erreurs et à repérer les défauts fréquents
Lorsqu’un développeur est confronté à des milliers de défauts, par où commencer ? Pour chaque défaut découvert, le test de développement présente une explication claire, sa gravité et son emplacement. Automatiquement, cela aide le développeur à améliorer rapidement son style de programmation. Avec cette visibilité, il peut réduire considérablement le délai de tri. Il dispose désormais d’informations utiles pour mieux décider de corriger ou non en fonction de l’impact sur un projet, tous les projets, tous les produits ou toute l’entreprise, réduisant ainsi le risque de repousser la sortie et de rencontrer des problèmes de qualité. Ceci aide le développeur à apprendre comment résoudre rapidement les défauts.
Le test de développement signifie aussi qu’un développeur peut enregistrer chaque défaut dans un dictionnaire constitué par l’ensemble de la communauté. Ainsi, ils peuvent collecter des informations sur chaque défaut et mieux comprendre sa gravité, mais aussi identifier ses exploitations possibles et obtenir des conseils sur sa correction. Un seul clic suffit pour accéder à une riche base de connaissances qui élimine les suppositions face aux défauts mal connus, accélérant également la découverte de son origine.
En outre, certains défauts sont quasiment impossibles à détecter par les tests classiques de QA, par exemple ceux qui recouvrent plusieurs procédures. Le test de développement permet de développer en ligne les appels de fonctions et desuivre l’exécution pour des événements profondément imbriqués, afin de mieux expliciter le défaut.
D’autres défauts sont bien plus faciles à trouver et corriger grâce au test de développement, comme les altérations de la mémoire, les fuites de ressources, les infractions aux règles de sécurité et la gestion non sûre des données. Ceci contribue également à former les développeurs afin qu’ils améliorent leur code.
Le test de développement facilite la détection de l’impact d’un défaut sur tout le code, en avertissant de la présence du défaut dans les autres projets et produits qui le partagent. Il permet également de visualiser toutes les branches de code afin de voir les défauts importants.
En outre, le processus de correction des défauts devient précis et gérable, car les développeurs peuvent connaître rapidement l’impact qu’un défaut, présent dans une partie du code, aura sur toute la gamme de produits. Ce qui était jusque-là considéré comme plusieurs défauts revient à sa cause initiale, un défaut unique, accélérant la correction et augmentant la visibilité pour gérer d’abord les défauts les plus critiques, en fonction de leur impact.
5. Mesurer le temps passé à tester par rapport aux améliorations apportées
L’affichage et le suivi de l’historique des défauts peuvent se faire au niveau de la branche, du projet et de tous les projets, ce qui est essentiel pour prendre de meilleures décisions et pour évaluer la productivité du développeur et l’amélioration de sa qualité. Le Test en développement apporte également les réponses à des questions essentielles :
- Quels sont les défauts corrigés et tous les défauts critiques ont-ils été corrigés ?
- Les instances du défaut dans tout le code partagé ont-elles été repérées et corrigées ?
- Quelle est l’évolution de mes tendances en matière de qualité et de défauts, par produit, release, vérificateur, type de défaut et utilisateur ?
Le Test en développement améliore la visibilité de l’évolution de la qualité, de la sécurité et de l’efficacité dans toute l’organisation. Il aide les développeurs à obtenir des informations sur le nombre de défauts depuis l’analyse précédente, ceux qui ont été trouvés dans le build central ou sur leur poste, etc. Il aide également les responsables et les dirigeants à mieux voir l’évolution de la qualité et de la sécurité, par équipe ou par composant logiciel. Le responsable peut explorer une vue détaillée pour avoir une compréhension plus profonde des zones à risque dans l’organisation.
Chris Adlard, Directeur Marketing et Communication EMEA de Coverity
A propos de l'auteur