Activités de test externalisées : comment en tirer profit en limitant les risques ?
Quelques précautions élémentaires à prendre, une batterie de questions qui permettent de cerner les difficultés et un suivi étroit du travail des sous-traitant permettent d'envisager sereinement l'externalisation des tests. A lire avant d'agir.
Activités de test externalisées : 5 conseils pour augmenter les chances de succès
Le sujet de la « sous-traitance d’activités de test » est présent dans tous les projets de développement informatique, ou presque, mais c’est souvent la question de l’Off-shore ou du Near-Shore qui l’anime. Certes, la localisation géographique des activités de test a une importance qui n’est pas des moindres, vue les spécificités qu’elle peut introduire, mais il peut être aussi très utile de penser à mettre en place des outils ou méthodes simples et efficaces pour augmenter les chances de succès de la sous-traitance dans le domaine du test logiciel.
De quoi parle-t-on ?
Dans le cadre d’un projet informatique, le chef de projet
fait en général appel à des personnes n’appartenant pas à l’équipe du projet. Ces personnes n’appartenant pas à l’équipe du
projet peuvent appartenir à la même société ou bien à des sociétés
externes, travaillant comme sous-traitants de la société porteuse du projet.
Elles peuvent appartenir à une entité spécialisée dans un domaine précis ou au
contraire être des ressources indépendantes mises à la disposition des projets.
Enfin, ces personnes peuvent être localisées dans le même pays que le chef de
projet ou dans un pays plus ou moins éloigné.
Dans cet article, le mot « externalisé » désignera ce qui n’est pas
fait pas des personnes intégrées à l’équipe du projet.
Ceci est valable pour une grande partie des activités liées au développement logiciel, y compris pour les principales activités de test qui peuvent se décliner sur différentes niveaux de test. Pour rappel, le syllabus niveau fondation de l’ISTQB propose 5 ensembles d’activités :
* Planifier et contrôler
* Analyser et concevoir
* Implémenter et exécuter
* Évaluer les critères de sortie et
informer
* Activités de clôture des tests
Ces activités peuvent se décliner sur 4 niveaux de test :
* Composants
* Intégration
* Système
* Acceptation
La question qui se pose maintenant est de savoir si oui ou
non tout peut être sous-traité.
Théoriquement, oui. Dans la pratique, certaines
tendances se dégagent :
* Les activités de test liées au niveau
composant sont souvent portées par l’entité en charge des développements
correspondants, et se déroulent avant, pendant et après le développement pur et
dur. En d’autres termes, si le développement d’un composant est sous-traité,
alors les activités de test associées, ont de fortes chances de l’être aussi.
* Les activités de test liées aux niveaux
Intégration et Système sont sous-traitées environ une fois sur deux.
* Les activités de test liées au niveau
Acceptation ne sont en général pas sous-traitées, compte tenu des compétences
métiers nécessaires, ainsi que de l’utilisation de données confidentielles et
d’environnements techniques complexes et coûteux.
Pour les projets suivant une démarche agile, la situation est différente mais... c’est un autre sujet ! Dans cet article, la notion de « sous-traitance d’activités de test » désignera essentiellement, les activités appliquées au niveau composant lorsque le développement est sous-traité et les activités mises en œuvre aux niveaux intégration et système.
Le cas d’une grande entreprise internationale qui lance un grand projet de transformation
Une grande société, présente dans différents pays, fait
évoluer sont Système d’Information (SI) dans le cadre d’un vaste projet de
transformation. Le SI est constitué d’un ensemble d’applications couvrant
différents domaines techniques ou métiers. Ce projet va donner lieu à
l’introduction de nouvelles applications et à la modification ou suppression de
certaines autres applications selon les exigences définies par la société
porteuse du projet global.
Différents sous-traitants se partagent le développement des
applications, un sous-traitant étant en charge de plusieurs applications. Un sous-traitant, différent des précédents, est chargé de
l’ensemble des tests d’intégration. Enfin, la société porteuse du projet global est aussi chargée
des tests d’acceptation.
Conseil n°1 : Mesurer les compétences de chaque sous-traitant et en tirer les conséquences.
Ceci doit être fait au niveau de l’entreprise, mais aussi et surtout au niveau des personnes impliquées dans le projet, et ce de manière constructive et factuelle. Une restitution doit être partagée avec le sous-traitant et déboucher, si nécessaire, sur un plan d’amélioration suivi de près.
Il est en général utile d’avoir dans sa boîte à outils des connaissances sur :
* CMMI
* TMMI
* ISTQB/CFTL (Différentes normes et
standards référencés : IEEE 829, IEEE 1044, ISO 9126…)
Cependant, avant de sortir l’artillerie lourde, il est en général prudent de vérifier que le sous-traitant maîtrise les bases incontournables du test logiciel. Pour cela, un simple questionnaire peut suffire à déceler de vraies lacunes. Ainsi, par exemple, un sous-traitant qui, à la question « Quel outil utilisez-vous pour gérer les défauts ? » répond, comme cela m’est arrivé récemment, « Nous utilisons le mail et le téléphone » aura à priori un niveau très faible en test logiciel. Il conviendra alors de définir un plan d’amélioration pour le sous-traitant et de le suivre pour assurer la mise en place de pratiques incontournables, comme celles indiquées dans l’exemple ci-dessous
Attention, il n’est pas acceptable d’entendre un
sous-traitant en charge du développement d’un certain nombre de composants dire
: " Je suis responsable des développements, vous serez livré mais je n’ai
aucune preuve à vous donner sur les tests que je réalise ".
Si cela se produit, la séquence de questions suivante doit permettre d’aider le sous-traitant à rapidement retrouver le bon sens qu’il avait perdu :
* Allez-vous me livrer un
composant sans l’avoir testé ?
* Avez-vous réfléchi à la façon de
le tester ?
* Avez-vous documenté votre
stratégie de test ?
* Allez-vous exécuter des
tests ?
* Où ces tests sont-ils
décrits ?
* Quels sont les résultats de ces
tests ?
Bien sûr, toute réponse doit s’accompagner d’un document faisant office de preuve !
Conseil n°2 : Identifier et définir le plus haut niveau de test
Quand une partie des activités de développement et de test est externalisée, il devient plus difficile d’avoir une vision globale sur l’ensemble des activités de test d’un projet. Pourtant c’est indispensable pour bien gérer le projet de test et coordonner les activités qui vont se dérouler aux différents niveaux.
La notion de « Plan de test maître »
(« Master Test Plan ») telle qu’introduite par la norme IEEE 829-2008
prend alors tout son sens. Ce plan de test maître permettra, non seulement de
définir et contrôler une planification globale de l’activité de test sur
l’ensemble du projet, mais aussi d’identifier les différents niveaux de test et
les Plan de Test associés. Pour un composant dont le développement est sous-traité, il
conviendra alors de demander au sous-traitant, s’il est également en charge des
tests, un Plan de Test de niveau composant. Un plan de test de niveau
Intégration pourra être demandé à un sous-traitant en charge de l’intégration.
Externaliser une activité de test ne veux pas dire « perdre contrôle et visibilité »
sur celle-ci.
Dans l’exemple ci-dessous, un « Master Test Plan »
a permis de définir une stratégie globale de test pour un projet complexe
d’évolution d’un SI, faisant appel à de nombreux sous-traitants. Par exemple,
chaque composant développé a donné lieu à la rédaction d’un Plan de Test
référencé par le Plan de Test maître.
Conseil n°3 : Généraliser les revues qui sont un outil d’une rentabilité exceptionnelle !
Qu’est ce qu’une revue ? C’est tout simplement une « évaluation d’un état d’un produit ou projet pour déceler des déviations par rapport aux résultats planifiés et recommander des améliorations » [IEEE 1028]
Qu’est ce qui peut être revu ? Tout ou presque ! Cependant, lorsque des activités de développement et de test sont externalisées, les revues présentent un intérêt particulier pour 3 produits qui sont rarement revus :
* les plans de test
* les tests
* les bordereaux de livraison
Même si c’est un sous-traitant qui est en charge des tests unitaires du composant qu’il développe, revoir le Plan de Test associé permettra d’avoir des garanties sur la façon avec laquelle ce composant sera testé. L’exemple ci-dessous montre le résultat d’une revue faire sur 5 plans de test réalisés par un sous-traitant sur la base d’un même template. Chaque ligne correspond à un plan de test et chaque colonne à un chapitre du plan de test. Cette revue a mis en évidence une grande faiblesse concernant le test chez le sous-traitant et a donné lieu immédiatement à un plan d’action d’amélioration.
Les tests eux-mêmes peuvent aussi être revus. Il faudra bien sûr vérifier que chaque test est associé à une caractéristique à tester (ou exigence), que le format est correct, mais aussi que le test est pertinent. La revue des tests doit être effectuée par des personnes ayant les bonnes compétences, techniques ou fonctionnelles.
Enfin, la revue des bordereaux de livraison peut également
apporter beaucoup. Ce document est en effet primordial pour assurer le
démarrage de l’intégration dans de bonnes conditions. Un composant livré avec
un bordereau de livraison incomplet, sans procédure d’installation par exemple,
posera des problèmes à l’intégration. L’idéal est même d’organiser des revues
anticipées des bordereaux de livraison. Rien n’empêche en effet de demander à
un sous-traitant de fournir une première version de chaque bordereau de
livraison une semaine avant la date de livraison finale. Cela permet aux
personnes en charge de l’intégration de les revoir, de vérifier leur qualité et
de demander les corrections nécessaires, sans retarder la livraison !
Conseil n°4 : L’analyse de code outillée : un outil à utiliser absolument, mais avec maîtrise !
L’analyse statique de code, à la différence des revues de code classiques faites par des développeurs, est en général réalisée avec un outil de test spécifique. Le principe est simple : le code développé va être analysé, sans être exécuté, afin d’évaluer sa qualité selon différents critères, bonnes pratiques ou règles de codage.
Lorsque les développements sont sous-traités, l’utilisation de ce type d’outil est très intéressante car elle peut aider le sous-traitant à respecter les règles de développement et les exigences sur la qualité formulées par l’entreprise client. L’outil peut également permettre de vérifier la qualité d’un code livré avant de l’accepter.
Toutefois, cet outil doit être bien maîtrisé, car différentes difficultés - nous en verrons deux ci-après - peuvent se présenter. Heureusement à chaque difficulté correspond en général une solution !
Première difficulté : si l’utilisation d’un tel
outil, avec des critères d’acceptation de livraison, n’a pas été
contractualisée avec le sous-traitant, il risque de refuser de modifier son
code. L’idéal est bien sûr d’avoir défini les règles du jeu au départ et de
permettre au sous-traitant d’analyser son code au fil du développement. Mais si
cela n’a pas été fait, ce n’est pas une raison pour se priver d’analyser le
code livré. Il faudra alors considérer 2 types de violations de règles de
codage :
* des règles basiques, incontestables,
qui correspondent à l’état de l’art en matière de développement et qu’il n’est
pas possible de contourner, au risque de mettre en péril le système dans lequel
le code sera intégré. Sur ces règles, il est légitime d’être intransigeant et
d’exiger les modifications nécessaires de la part du sous-traitant, sans
supplément de coût.
* des règles propres à l’entreprise et à
ses objectifs spécifiques en termes de qualité de code : si ces règles
n’ont pas été précisées à l’avance, il sera sans doute nécessaire d’établir un
avenant et d’accorder des jours supplémentaires au sous-traitant pour les
appliquer.
Deuxième difficulté : le sous-traitant est chargé de faire évoluer un code existant pour ajouter, supprimer ou modifier des fonctionnalités. Il faudra bien sûr veiller à faire la distinction entre le code d’origine et le nouveau code, mais cela ne suffit pas. En effet, faire évoluer un code, qui ne respecte pas des règles de codage, contraint souvent à rester dans le non respect des règles. Par exemple, faire évoluer une fonction, ayant un nombre trop important de lignes de code ou un nombre insuffisant de commentaires, ne permettra pas de respecter les règles relatives à la taille d’une fonction et aux commentaires attendus. Dans ce cas il est conseillé de coopérer intelligemment avec le sous-traitant, d’une part pour fixer des objectifs réalistes sur une partie de ses développements, et d’autre part pour envisager la réécriture d’une partie du code. Bien sûr cela a un prix, comme tous les aspects contribuant à l’amélioration de la qualité !
Un outil comme CATS donne une note globale sur la qualité du code analysé, mais également plusieurs vues aussi détaillées que souhaité, pour voir précisément quelles règles ne sont pas respectées et à quel endroit !
Conseil n°5 : Construire une relation de confiance avec le sous-traitant
Enfin, cela va de soit, mais il est important de le rappeler : le moyen le plus efficace de travailler avec des sous-traitants, dans le domaine du test mais aussi pour l’ensemble des activités du développement logiciel, est de bâtir une relation de confiance intelligente. Des relations figées sur un contrat défini au début du projet avec des délais, des coûts et des critères d’acceptation inflexibles, auront peu de chance de se transformer en succès mutuel.
Il est important de contrôler l’activité de test des sous-traitants, mais il est important aussi de leur préciser des attentes et de les aider à les respecter. Être ferme mais coopérant !
Cela peut, et même doit, se traduire par des échanges
réguliers qui prendront la forme de réunions de suivi entre tous les acteurs,
mais aussi de visites dans les locaux du sous-traitant. Établir un contact et
dialoguer de temps en temps avec les équipes du sous-traitant pourront montrer
aux personnes impliquées, manager ou « petites mains », qu’ils
travaillent pour un client qui a un visage et qui compte sur la qualité de leur
travail.
Lorsque plusieurs sous-traitants sont impliqués dans un
grand projet, il est aussi très utile de les rassembler pour arbitrer les choix
et gérer au mieux les difficultés et conflits éventuels entre sous-traitants.
Vous l’aurez compris, au-delà des points de vigilance
classiques mis en œuvre lorsque certaines activités de test sont externalisées,
il existe des moyens simples et efficaces à appliquer pour augmenter les
chances de succès de l’externalisation.