Chapitre 1 : Fondamentaux des tests
1.1 Que sont les tests ?
Les systèmes logiciels font partie intégrante de la vie quotidienne, depuis les applications commerciales (p. ex., les services bancaires) jusqu’aux produits pour les consommateurs (p. ex., voitures). La plupart des gens ont eu une expérience avec un logiciel qui n’a pas fonctionné comme prévu. Un logiciel qui ne fonctionne pas correctement peut entraîner de nombreux problèmes, y compris la perte d’argent, de temps ou entacher la réputation de l’entreprise, et même entraîner des blessures qui peuvent être mortelles. Les tests logiciels sont un moyen d’évaluer la qualité du logiciel et de réduire le risque de défaillance de ce logiciel en cours de fonctionnement.
Une perception erronée courante du test consiste à considérer que cela se réduit à exécuter des tests, c’est-à-dire exécuter le logiciel et en vérifier les résultats. Tel que décrit à la section 1.4, le test logiciel constitue un processus qui comprend de nombreuses activités. L’exécution des tests (y compris la vérification des résultats) n’est qu’une de ces activités. Le processus de test comprend également des activités telles que la planification des tests, l’analyse, la conception et la mise en œuvre des tests, le suivi de la progression et des résultats des tests, ainsi que l’évaluation de la qualité de l’objet de test.
Certains tests impliquent l’exécution du composant ou du système testé. Ces tests sont appelés tests dynamiques. D’autres tests n’impliquent pas l’exécution du composant ou du système testé ; de tels tests sont appelés tests statiques. Ainsi, les tests comprennent également la revue de produits d’activités tels que les exigences, les User Stories et le code source.
Une autre perception erronée courante sur le test est qu’il se concentre entièrement sur la vérification des exigences, des User Stories ou d’autres spécifications. Ainsi, si le test implique de vérifier que le système répond aux exigences spécifiées, il permet également de s’assurer que le système répondra aux besoins des utilisateurs et des autres parties prenantes dans son (ses) environnement(s) opérationnel(s).
Les activités de test sont organisées et réalisées différemment selon les différents cycles de vie (voir section 2.1).
1.1.1 Objectifs habituels des tests (K1)
Pour un projet donné, les objectifs du test peuvent inclure :
- Évaluer les produits d’activités tels que les exigences, les User Stories, la conception et le code
- Vérifier si toutes les exigences spécifiées ont été satisfaites
- Valider si l’objet de test est complet et fonctionne comme attendu par les utilisateurs et autres parties prenantes
- Construire la confiance dans le niveau de qualité de l’objet de test
- Prévenir des défauts
- Trouver des défaillances et défauts
- Fournir suffisamment d’information aux parties prenantes pour leur permettre de prendre des décisions éclairées, en particulier en ce qui concerne le niveau de qualité de l’objet de test
- Réduire le niveau de risque d’une qualité logicielle inadéquate (p. ex. des défaillances non détectées auparavant se produisant en opération)
- Se conformer aux exigences ou aux normes contractuelles, légales ou réglementaires, et/ou vérifier la compatibilité de l’objet de test avec de telles exigences ou normes
Les objectifs de test peuvent varier en fonction du contexte du composant ou du système testé, du niveau de test et du modèle de cycle de vie de développement logiciel. Ces différences peuvent inclure, par exemple :
- Au cours des tests de composants, l’un des objectifs peut être de trouver autant de défaillances que possible de sorte que les défauts sous-jacents soient identifiés et corrigés tôt. Un autre objectif peut être d’augmenter la couverture du code des composants testés.
- Au cours des tests d’acceptation, l’un des objectifs peut être de confirmer que le système fonctionne comme prévu et satisfait aux exigences. Un autre objectif de ces tests peut être de fournir des informations aux parties prenantes sur le risque lié à la sortie d’une version du système à un moment donné.
1.1.2 Test et débogage (K2)
Les activités de tests et de débogage sont différentes. L’exécution de tests peut mettre en évidence des défaillances causées par des défauts dans le logiciel. Le débogage est l’activité de développement qui trouve, analyse et corrige de tels défauts. Par la suite, le test de confirmation vérifie si les corrections apportées ont résolu les défauts. Dans certains cas, les testeurs sont responsables du test initial et du test de confirmation final, tandis que les développeurs se chargent du débogage et du test des composants concernés. Cependant, dans le développement Agile et dans d’autres cycles de vie, les testeurs peuvent être impliqués dans le débogage et le test des composants.
La norme ISO (ISO/IEC/IEEE 29119-1) contient de plus amples informations sur les concepts des tests logiciels.
1.2 Pourquoi les tests sont-ils nécessaires ?
Des tests rigoureux des composants et des systèmes, ainsi que de leur documentation associée, peuvent aider à réduire le risque de défaillances pendant l’exploitation. Lorsque des défauts sont détectés et corrigés par la suite, cela contribue à la qualité des composants ou des systèmes. En outre, les tests logiciels peuvent également être nécessaires pour répondre à des exigences contractuelles ou légales ou à des normes spécifiques de l’industrie.
1.2.1 Contribution des tests au succès (K2)
Tout au long de l’histoire de l’informatique, il est assez courant que des logiciels et des systèmes soient mis en production et que, en raison de la présence de défauts, ils causent ensuite des défaillances ou ne satisfassent pas les besoins des parties prenantes. Pourtant, l’utilisation de techniques de test appropriées peut réduire la fréquence de ces livraisons problématiques, lorsque ces techniques sont appliquées avec le niveau approprié d’expertise en matière de tests, aux niveaux de test appropriés et aux moments appropriés du cycle de vie de développement logiciel. En voici quelques exemples :
- La participation des testeurs à la revue des exigences ou au raffinement des User Stories pourrait permettre de détecter des défauts dans ces produits d’activités. L’identification et l’élimination des défauts dans les exigences réduit le risque de développement de fonctionnalités incorrectes ou non testables.
- Le fait que les testeurs travaillent en étroite collaboration avec les concepteurs du système pendant la conception du système peut aider chaque partie à mieux comprendre la conception et la façon de la tester. Cette meilleure compréhension peut réduire le risque de défauts de fond dans la conception et permettre d’identifier les tests à un stade précoce.
- Le fait que les testeurs travaillent en étroite collaboration avec les développeurs pendant que le code est en cours de développement peut augmenter la compréhension du code et de la façon de le tester par chaque partie. Cette meilleure compréhension peut réduire le risque de défauts dans le code et les tests.
- Le fait que les testeurs vérifient et valident le logiciel avant sa sortie permet de détecter des défaillances qui auraient pu être manquées et aide au processus d’élimination des défauts ayant causé les défaillances (c.-à-d. le débogage). Cela augmente la probabilité que le logiciel réponde aux besoins des parties prenantes et satisfasse les exigences.
En plus de ces exemples, l’atteinte des objectifs de test définis (voir la section 1.1.1) contribue au succès global du développement logiciel et de la maintenance.
1.2.2 Assurance qualité et test (K2)
Bien que les gens utilisent souvent l’expression assurance qualité (ou simplement QA – Quality Assurance) pour désigner le test, l’assurance qualité et le test ne sont pas les mêmes, mais ils sont liés. Un concept plus large, la gestion de la qualité, les lie l’un à l’autre. La gestion de la qualité comprend toutes les activités qui dirigent et contrôlent une organisation en matière de qualité. Entre autres activités, la gestion de la qualité comprend à la fois l’assurance de la qualité et le contrôle de la qualité.
L’assurance qualité est principalement axée sur le respect des processus adéquats, afin de donner l’assurance que les niveaux de qualité appropriés seront atteints. Lorsque les processus sont correctement exécutés, les produits d’activités créés par ces processus sont généralement de meilleure qualité, ce qui contribue à la prévention des défauts. De plus, l’analyse des causes racines pour détecter et éliminer les causes des défauts, ainsi que l’application des résultats des réunions de rétrospective pour améliorer les processus, sont importantes pour une mise en œuvre efficace de l’assurance qualité.
Le contrôle de la qualité comprend diverses activités, y compris des activités de test, qui contribuent à l’atteinte de niveaux de qualité adéquats. Les activités de test font partie du processus global de développement ou de maintenance du logiciel. Puisque l’assurance qualité concerne l’exécution correcte de l’ensemble du processus, l’assurance de la qualité est un support à des tests pertinents. Comme décrit dans les sections 1.1.1 et 1.2.1, les tests contribuent à l’atteinte de la qualité de diverses façons.
1.2.3 Erreurs, défauts et défaillances (K2)
Une personne peut faire une erreur, ce qui peut conduire à l’introduction d’un défaut (faute ou bogue) dans le code du logiciel ou dans un autre produit d’activités connexe. Une erreur qui conduit à l’introduction d’un défaut dans un produit d’activités peut déclencher une erreur qui conduit à l’introduction d’un défaut dans un produit d’activités connexe. Par exemple, une erreur d’élucidation d’exigences peut conduire à un défaut au niveau des exigences, qui se traduit ensuite par une erreur de programmation qui conduit à un défaut dans le code.
Si un défaut dans le code est exécuté, cela peut causer une défaillance, mais pas nécessairement dans toutes les circonstances. Par exemple, certains défauts nécessitent des valeurs de données d’entrée ou des conditions préalables très spécifiques pour déclencher une défaillance, ce qui peut se produire rarement ou jamais.
Les erreurs peuvent survenir pour de nombreuses raisons, telles que :
- Les contraintes de temps
- La faillibilité humaine
- L’inexpérience ou le manque de compétence des participants au projet
- Une mauvaise communication entre les participants au projet, y compris au sujet des exigences et de la conception
- La complexité du code, de la conception, de l’architecture, du problème sous-jacent à résoudre, et/ou des technologies utilisées
- Les malentendus sur les interfaces intra-système et inter-système, en particulier lorsque de telles interfaces intra-système et inter-système sont très nombreuses
- Des technologies nouvelles, peu connues
En plus des défaillances causées par des défauts dans le code, les défaillances peuvent également être causées par les conditions environnementales. Par exemple, le rayonnement, les champs électromagnétiques et la pollution peuvent causer des défauts dans le firmware (logiciel système à bas niveau) ou influencer l’exécution du logiciel en changeant les conditions matérielles.
Les résultats inattendus ne sont pas tous des défaillances. Des faux positifs peuvent se produire en raison d’erreurs dans la façon dont les tests ont été exécutés, ou en raison de défauts dans les données de test, l’environnement de test, ou d’autres testware, ou pour d’autres raisons. La situation inverse peut également se produire, lorsque des erreurs ou des défauts similaires conduisent à de faux négatifs. Les faux négatifs sont des tests qui ne détectent pas les défauts qu’ils auraient dû détecter ; les faux positifs sont signalés comme des défauts, mais ne sont en réalité pas des défauts.
1.2.4 Défauts, causes racines et effets (K2)
Les causes racines des défauts sont les premières actions ou conditions qui ont contribué à la création des défauts. Les défauts peuvent être analysés pour identifier leurs causes racines, afin de réduire l’apparition de défauts similaires à l’avenir. En se concentrant sur les causes racines les plus importantes, l’analyse des causes racines peut conduire à des améliorations de processus qui préviennent l’introduction d’un nombre important de défauts futurs.
Par exemple, supposons que des paiements d’intérêts incorrects, dus à une seule ligne de code incorrecte, se traduisent par les plaintes des clients. Le code défectueux a été écrit pour une User Story qui était ambiguë, en raison de la mauvaise compréhension par le Product Owner de la façon de calculer les intérêts. S’il existe un pourcentage élevé de défauts dans les calculs d’intérêt, et que ces défauts ont leur cause racine dans des incompréhensions similaires, le Product Owner pourrait se former au calcul des intérêts afin de réduire le nombre de tels défauts à l’avenir.
Dans cet exemple, les plaintes des clients sont des effets. Les paiements d’intérêts incorrects sont des défaillances. Le calcul incorrect dans le code est un défaut, et il résulte du défaut d’origine, l’ambiguïté dans la User Story. La cause racine du défaut initial était un manque de connaissance de la part du Product Owner, ce qui l’a conduit à faire une erreur lors de la rédaction de la User Story. Le processus d’analyse des causes racines est traité dans les Syllabus de niveau expert ISTQB-ETM (Gestion des tests) et ISTQB-EITP (Améliorer le processus de test).
1.3 7 principes sur les tests (K2)
Un certain nombre de principes sur les tests ont été suggérés au cours des 50 dernières années et offrent des indications communes à tous les tests.
1. Les tests montrent la présence de défauts, par leur absence
Les tests peuvent prouver la présence de défauts, mais ne peuvent pas en prouver l’absence. Les tests réduisent la probabilité que des défauts restent cachés dans le logiciel mais, même si aucun défaut n’est découvert, ce n’est pas une preuve que tout est correct.
2. Les tests exhaustifs sont impossibles
Tout tester (toutes les combinaisons d’entrées et de préconditions) n’est pas faisable sauf pour des cas triviaux. Plutôt que de chercher à faire tests exhaustifs, l’analyse des risques, des techniques de test et des priorités devraient être utilisés pour cibler les efforts de tests.
3. Tester tôt économise du temps et de l’argent
Pour détecter tôt les défauts, à la fois des activités de tests statiques et des activités de tests dynamiques doivent être lancées le plus tôt possible dans le cycle de vie de développement du logiciel. Le fait de tester tôt est parfois appelé ” shift left “. Tester tôt dans le cycle de vie du développement logiciel permet de réduire ou d’éliminer des changements coûteux (voir section 3.1).
4. Regroupement des défauts
Un petit nombre de modules contient généralement la plupart des défauts découverts lors des tests avant livraison, ou est responsable de la plupart des défaillances en exploitation. Des regroupements prévisibles de défauts, ou des regroupements réellement observés en test ou en exploitation, constituent un élément important de l’analyse des risques utilisée pour cibler l’effort de test (comme mentionné dans le principe 2).
5. Paradoxe du pesticide
Si les mêmes tests sont répétés de nombreuses fois, le même ensemble de cas de tests finira par ne plus détecter de nouveaux défauts. Pour détecter de nouveaux défauts, il peut être nécessaire de modifier les tests existants et les données de test existantes, ainsi que de rédiger de nouveaux tests. (Les tests ne sont plus efficaces pour détecter des défauts, tout comme les pesticides ne sont plus efficaces pour tuer les insectes après un certain temps). Dans certains cas, comme les tests de régression automatisés, le paradoxe du pesticide a un résultat bénéfique, qui est le nombre relativement faible de défauts de régression.
6. Les tests dépendent du contexte
Les tests sont effectués différemment dans des contextes différents. Par exemple, un logiciel de contrôle industriel, critique au niveau de la sûreté, sera testé différemment d’une application de commerce électronique sur téléphone mobile. Comme autre exemple, le test dans un projet Agile est effectué différemment du test dans un projet à cycle de vie séquentiel (voir section 2.1).
7. L’absence d’erreurs est une illusion
Certaines organisations s’attendent à ce que les testeurs puissent effectuer tous les tests possibles et trouver tous les défauts possibles, mais les principes 2 et 1, respectivement, nous disent que c’est impossible. De plus, il est illusoire (c.-à-d. une croyance erronée) de s’attendre à ce que le simple fait de trouver et de corriger un grand nombre de défauts garantisse la réussite d’un système. Par exemple, tester en profondeur toutes les exigences spécifiées et corriger tous les défauts trouvés pourrait toujours produire un système qui est difficile à utiliser, qui ne répond pas aux besoins et aux attentes des utilisateurs ou qui est moins performants comparé à d’autres systèmes concurrents.
Voir Myers 2011, Kaner 2002 et Weinberg 2008 pour des exemples de ces principes de test et d’autres principes de test.
1.4 Processus de test
Il n’existe pas un unique processus de test logiciel universel, mais il existe des ensembles communs d’activités de test sans lesquels les tests auront moins de chances d’atteindre les objectifs fixés. Ces ensembles d’activités de test constituent un processus de test. Le processus de test logiciel approprié et spécifique dans une situation donnée dépend de nombreux facteurs. Quelles activités de test sont impliquées dans ce processus, comment ces activités sont mises en œuvre et quand ces activités doivent être réalisées, peut être précisé dans la stratégie de test d’une organisation.
1.4.1 Le processus de test dans le contexte (K2)
Les facteurs contextuels qui influencent le processus de test d’une organisation comprennent, sans toutefois s’y limiter :
- Le modèle de cycle de vie du développement logiciel et les méthodologies de projet utilisées
- Les niveaux de test et types de test prévus
- Les risques liés aux produits et aux projets
- Le domaine d’activité
- Les contraintes opérationnelles, entre autres :
– Les budgets et ressources
– Les délais
– La complexité
– Les exigences contractuelles et réglementaires - Les politiques et pratiques organisationnelles
- Les normes internes et externes requises
Les sections suivantes décrivent les aspects généraux des processus de test selon les aspects suivants :
- Activités et tâches de test
- Produits d’activités du test
- Traçabilité entre les bases de test et les produits d’activités du test
Il est très utile que les bases de test (pour n’importe quel niveau ou type de test considéré) aient des critères de couverture mesurables définis. Les critères de couverture peuvent servir efficacement d’indicateurs clés de performance (KPI) pour guider les activités qui démontrent l’atteinte des objectifs des tests logiciels (voir section 1.1.1).
Par exemple, pour une application mobile, les bases de test peuvent inclure une liste d’exigences et une liste d’appareils mobiles pris en charge. Chaque exigence est un élément de la base de test. Chaque appareil supporté est également un élément des bases de test. Les critères de couverture peuvent exiger au moins un cas de test pour chaque élément des bases de test. Une fois exécutés, les résultats de ces tests indiquent aux parties prenantes si les exigences spécifiées sont satisfaites et si des défaillances ont été observées sur les appareils pris en charge.
La norme ISO (ISO/IEC/IEEE 29119-2) contient des informations complémentaires sur les processus de test.
1.4.2 Activités et taches de test (K2)
Un processus de test se compose des principaux groupes d’activités suivants :
- Planification des tests
- Suivi et contrôle des tests
- Analyse de test
- Conception des tests
- Implémentation des tests
- Exécution des tests
- Clôture des tests
Chaque groupe d’activités est composé d’activités constitutives, qui seront décrites dans les sous- sections ci-dessous. Chaque activité au sein de chaque groupe d’activités peut à son tour consister en de multiples tâches individuelles, qui peuvent varier d’un projet ou d’une version à une autre.
De plus, même si plusieurs de ces groupes d’activités peuvent sembler logiquement séquentiels, ils sont souvent mis en œuvre de façon itérative. Par exemple, le développement Agile implique de petites itérations de conception de logiciels, de construction et de test qui se produisent en continu, soutenues par une planification régulière. Ainsi, les activités de test se déroulent également de façon itérative et continue dans le cadre de cette approche de développement. Même en mode séquentiel, la séquence logique par étapes des activités induira le chevauchement, la combinaison, la concomitance, ou l’omission, de sorte qu’une adaptation de ces activités principales dans le contexte du système et du projet est habituellement nécessaire.
Planification des tests
La planification des tests implique de définir les objectifs du test et l’approche retenue pour atteindre les objectifs du test dans le respect des contraintes imposées par le contexte (p. ex. spécifier les techniques et tâches de test appropriées, et produire un calendrier de test pour respecter une date limite). Les plans de test peuvent être revus en fonction des retours sur les activités de pilotage et de contrôle. La planification des tests est expliquée plus en détail à la section 5.2.
Pilotage et contrôle des tests
Le pilotage des tests implique la comparaison régulière de l’avancement réel par rapport au plan de test à l’aide des métriques de pilotage définies dans le plan de test. Le contrôle des tests consiste à prendre les mesures nécessaires pour satisfaire aux objectifs du plan de test (qui peut être mis à jour au fil du temps). Le pilotage et le contrôle des tests se basent sur l’évaluation des critères de sortie, que l’on appelle « définition of done » (définition de « terminé ») dans certains cycles de vie (cf. syllabus Testeur Certifié – Extension Niveau Fondation Testeur Agile CFTL / ISTQB). Par exemple, l’évaluation des critères de sortie pour l’exécution des tests dans le cadre d’un niveau de test donné peut inclure :
- La vérification des résultats et logs des tests de test par rapport aux critères de couverture spécifiés
- L’évaluation du niveau de qualité des composants ou du système sur la base des résultats et logs des tests
- La détermination de la nécessité d’autres tests (p. ex. si les tests qui visaient à l’atteinte d’un certain niveau de couverture des risques Produit n’y sont pas parvenu, il est nécessaire que des tests supplémentaires soient écrits et exécutés)
L’avancement des tests par rapport au plan est communiqué aux parties prenantes dans des rapports d’avancement des tests, comprenant les écarts par rapport au plan et les informations utiles à toute décision d’arrêter les tests.
Le pilotage et le contrôle des tests sont expliqués plus en détail à la section 5.3.
Analyse de test
Pendant l’analyse de test, les bases de test sont analysées pour identifier les caractéristiques testables et définir les conditions de test associées. En d’autres termes, l’analyse des tests détermine “quoi tester” en termes de critères de couverture mesurables.
L’analyse de test comprend les principales activités suivantes :
- Analyser les bases de test appropriées au niveau de test considéré, par exemple :
– Les spécifications des exigences, telles que les exigences métier, les exigences fonctionnelles, les exigences système, les User Stories, les epics, les cas d’utilisation ou les produits d’activités similaires qui spécifient le comportement fonctionnel et non- fonctionnel souhaité pour le composant ou système
– Les informations sur la conception et l’implémentation, comme les diagrammes ou documents d’architecture du système ou du logiciel, les spécifications de conception, les flux d’appels, les diagrammes de modélisation (p. ex., les diagrammes UML ou entité- relation), les spécifications d’interface ou des produits d’activités similaires qui spécifient la structure du composant ou du système
– L’implémentation du composant ou du système lui-même, y compris le code, les métadonnées et les requêtes sur la base de données, et les interfaces
– Les rapports d’analyse des risques, qui peuvent prendre en compte les aspects fonctionnels, non-fonctionnels et structurels du composant ou du système - Evaluer les bases de test et des éléments de test pour identifier des défauts de différents types, tels que :
– Ambiguïtés
– Omissions
– Incohérences
– Inexactitudes
– Contradictions
– Déclarations superflues - Identifier les caractéristiques et les ensembles de caractéristiques à tester
- Définir et prioriser les conditions de test pour chaque caractéristique en fonction de l’analyse des bases de test et en tenant compte des caractéristiques fonctionnelles, non-fonctionnelles et structurelles, des autres facteurs métier et techniques, et des niveaux de risque
- Capturer la traçabilité bidirectionnelle entre chaque élément des bases de test et les conditions de test associées (voir sections 1.4.3 et 4.4)
L’application de techniques de test boîte-noire, boîte-blanche et basées sur l’expérience peut s’avérer utile dans le processus d’analyse de test (voir chapitre 4) pour réduire la probabilité d’omettre des conditions de test importantes, et pour définir des conditions de test plus exactes et plus précises.
Dans certains cas, l’analyse de test produit des conditions de test qui doivent être utilisées comme objectifs de test dans des chartes de test. Les chartes de test sont des produits d’activités typiques dans certains types de tests basés sur l’expérience (voir la section 4.4.2). Lorsque ces objectifs de test sont traçables avec les bases de test, la couverture atteinte au cours de ce type de tests basés sur l’expérience peut être mesurée.
L’identification de défauts au cours de l’analyse de test est un bénéfice potentiel important, en particulier lorsqu’il n’y a pas d’autre processus de revue utilisé et/ou si le processus de test est étroitement lié au processus de revue. De telles activités d’analyse de test ne se contentent pas de vérifier si les exigences sont cohérentes, correctement exprimées, et complètes, mais aussi de valider si les exigences capturent correctement les besoins des clients, utilisateurs et des autres parties prenantes. Par exemple, les techniques telles que le BDD (Behavior-Driven Developement) et ATDD (Acceptance Test-Driven Development), qui impliquent la définition des conditions de test et de cas de test à partir des User Story et des critères d’acceptation avant le codage, permettent aussi de vérifier, valider et détecter des défauts dans les User Stories et les critères d’acceptation (cf. syllabus Testeur Certifié – Extension Niveau Fondation Testeur Agile CFTL / ISTQB).
Conception des tests
Lors de la conception des tests, les conditions de test sont déclinées en cas de test de haut niveau, en ensembles de cas de tests de haut niveau et autres testware. Ainsi, l’analyse de test répond à la question
« quoi tester ? » alors que la conception des tests répond à la question « comment tester ? ». La conception des tests comprend les activités principales suivantes :
- Concevoir et prioriser les cas de test et les ensembles de cas de test
- Identifier les données de test nécessaires pour les conditions de test et les cas de test
- Concevoir l’environnement de test et identifier l’infrastructure et les outils nécessaires
- Établir la traçabilité bidirectionnelle entre les bases de test, les conditions de test, les cas de test et les procédures de test (voir section 4.4)
La déclinaison des conditions de test en cas de test et ensembles de cas de test lors de la conception des tests implique souvent l’utilisation de techniques de test (voir chapitre 4).
Comme pour l’analyse de test, la conception des tests peut également aboutir à l’identification de types similaires de défauts dans les bases de test. De même, comme pour l’analyse de test, l’identification de défauts lors de la conception des tests est un potentiel important de bénéfice.
Implémentation des tests
Au cours de l’implémentation des tests, le testware nécessaire à l’exécution des tests est créé et/ou complété, y compris l’ordonnancement des cas de test en procédures de test. Ainsi, la conception des tests répond à la question « comment tester ? » tandis que l’implémentation des tests répond à la question « est-ce que tout est en place pour exécuter les tests ? ».
L’implémentation des tests comprend les activités principales suivantes :
- Développer et prioriser les procédures de test, et, éventuellement, créer des scripts de test automatisés
- Créer des suites de tests à partir des procédures de test et (le cas échéant) des scripts de tests automatisés
- Positionner les suites de tests dans un calendrier d’exécution des tests de manière à obtenir une exécution efficace des tests (voir section 2.4)
- Construire l’environnement de test (y compris, potentiellement, les harnais de test, la virtualisation des services, les simulateurs et d’autres éléments d’infrastructure) et vérifier que tout le nécessaire a été correctement mis en place
- Préparer les données de test et s’assurer qu’elles sont correctement chargées dans l’environnement de test
- Vérifier et mettre à jour la traçabilité bidirectionnelle entre les bases de test, les conditions de test, les cas de test, les procédures de test et les suites de tests (voir section 4.4)
Les tâches de conception et d’implémentation des tests sont souvent combinées.
Dans le cas des tests exploratoires et d’autres types de tests basés sur l’expérience, la conception et l’implémentation des tests peuvent être réalisées et éventuellement être documentées lors de l’exécution des tests. Les tests exploratoires peuvent être basés sur des chartes de test (produites dans le cadre de l’analyse de test), et les tests exploratoires sont exécutés immédiatement, en même temps que leur conception et leur implémentation (voir section 4.4.2).
Exécution des tests
Pendant l’exécution des tests, les suites de tests sont exécutées conformément au calendrier d’exécution des tests.
L’exécution des tests comprend les activités principales suivantes :
- Enregistrer les IDs et les versions des éléments de test ou de l’objet de test, des outils de test et des testware
- Exécuter les tests manuellement ou à l’aide d’outils d’exécution de test
- Comparer les résultats obtenus avec les résultats attendus
- Analyser les anomalies afin d’établir leurs causes probables (p. ex., des défaillances peuvent survenir en raison de défauts dans le code, mais de faux positifs peuvent également se produire [voir section 2.3])
- Signaler les défauts sur la base des défaillances observées (voir section 6)
- Enregistrer les résultats de l’exécution des tests (par exemple, réussite, échec, blocage)
- Répéter certaines activités de test, soit à la suite d’une action prise pour une anomalie, soit dans le cadre de l’activité planifiée de test (p. ex. exécution d’un test corrigé, test de confirmation, et/ou test de régression)
- Vérifier et mettre à jour la traçabilité bidirectionnelle entre les bases de test, les conditions de test, les cas de test, les procédures de test et les résultats des tests
Clôture des tests
Les activités de clôture des tests collectent les données des activités de test terminées afin de consolider l’expérience, les testware et toute autre information pertinente. Les activités de clôture des tests ont lieu à des jalons du projet, par exemple lorsqu’un système logiciel est livré, qu’un projet de test est terminé (ou annulé), qu’une itération de projet Agile est terminée (par exemple, dans le cadre d’une réunion rétrospective), qu’un niveau de test est terminé ou qu’une maintenance de version est terminée.
La clôture des tests comprend les activités principales suivantes :
- Vérifier si tous les rapports de défauts sont clôturés, et saisir des demandes de modification ou des items du backlog du produit pour tous les défauts non résolus à la fin de l’exécution des tests
- Créer un rapport de synthèse de test à communiquer aux parties prenantes
- Finaliser et archiver l’environnement de test, les données de test, l’infrastructure de test et autres testware pour une réutilisation ultérieure
- Remettre le testware aux équipes de maintenance, aux autres équipes de projet, et/ou à d’autres parties prenantes qui pourraient bénéficier de son utilisation
- Analyser les leçons apprises des activités de test terminées afin de déterminer les changements nécessaires pour les itérations, versions et projets futurs
- Utiliser l’information recueillie pour améliorer la maturité du processus de test
1.4.3 Les produits d’activités du test (K2)
Les produits d’activités du test sont créés dans le cadre du processus de test. Tout comme il y a d’importantes variations dans la façon dont les organisations mettent en œuvre le processus de test, il y a aussi des variations importantes dans les types de produits d’activités créés au cours de ce processus, dans la façon dont ces produits d’activités sont organisés et gérés, et dans les noms utilisés pour ces produits d’activités. Ce syllabus s’appuie sur le processus de test décrit précédemment, et sur les produits d’activités décrits dans ce syllabus et dans le glossaire de l’ISTQB. La norme ISO (ISO/IEC/IEEE 29119-3) peut également servir de référence pour les produits d’activités du test.
De nombreux produits d’activités du test décrit dans cette section peuvent être saisis et gérés à l’aide d’outils de gestion des tests et d’outils de gestion des défauts (voir chapitre 6).
Produits d’activités de la planification des tests
Les produits d’activités de la planification des tests comprennent généralement un ou plusieurs plans de test. Le plan de test comprend des informations sur les bases de test, auxquelles les autres produits des activités du test seront liés via les informations de traçabilité (voir ci-dessous et section 1.4.4), ainsi que les critères de sortie ou définition du terminé (« definition of done » en anglais) qui seront utilisés lors du pilotage et du contrôle des tests. Les plans de test sont décrits dans la section 5.2.
Produits d’activités du pilotage et contrôle des tests
Les produits d’activités du pilotage et contrôle des tests comprennent habituellement divers types de rapports de test, y compris les rapports d’avancement des tests (produits sur une base continue et/ou régulière) et les rapports de synthèse des tests (produits de façon continue et/ou régulière). Tous les rapports de test devraient fournir des détails pertinents pour les parties prenantes ciblées au sujet de l’avancement des tests à la date du rapport, y compris un résumé des résultats de l’exécution des tests lorsque ceux-ci sont disponibles.
Les produits d’activités du pilotage et contrôle des tests devraient également tenir compte des aspects spécifiques relatifs à la gestion de projet, comme l’achèvement des tâches, l’affectation et l’utilisation des ressources, et l’effort.
Le pilotage et le contrôle des tests, ainsi que les produits d’activités créés durant ces activités, sont expliqués plus en détail à la section 5.3 de ce syllabus.
Produits d’activités de l’analyse de test
Les produits d’activités de l’analyse de test comprennent les conditions de test définies et priorisées, dont chacune est idéalement traçable de façon bidirectionnelle avec le ou les élément(s) spécifiques des bases de test qu’elle couvre. Pour les tests exploratoires, l’analyse de test peut impliquer la création de chartes de test. L’analyse de test peut également aboutir à la découverte de défauts dans les bases de test et à leur la documentation.
Produits d’activités de la conception des tests
La conception des tests a pour résultats des cas de test et des ensembles de cas de test pour exercer les conditions de test définies dans l’analyse de test. La conception de cas de tests de haut niveau, sans valeurs concrètes pour les données d’entrée et les résultats attendus, constitue souvent une bonne pratique. De tels cas de test de haut niveau sont réutilisables sur plusieurs cycles de test avec des données concrètes différentes, tout en documentant de manière adéquate la portée du cas de test.
Idéalement, chaque cas de test est traçable de façon bidirectionnelle avec la ou les condition(s) de test qu’il couvre.
La conception des tests aboutit également à la conception et/ou à l’identification des données de test nécessaires, à la conception de l’environnement de test et à l’identification de l’infrastructure et des outils, bien que la façon avec laquelle ces résultats sont documentés puisse varier amplement.
Les conditions de test définies dans l’analyse des tests peuvent être ultérieurement affinées lors de la conception des tests.
Produits d’activités de l’implémentation des tests
Les produits d’activités de l’implémentation des tests incluent :
- Les procédures de test et l’ordonnancement de ces procédures de test
- Les suites de test
- Un calendrier d’exécution des tests
Idéalement, une fois l’implémentation des tests terminée, l’atteinte des critères de couverture établis dans le plan de test peut être démontrée par une traçabilité bidirectionnelle entre les procédures de test et des éléments spécifiques des bases de test, au travers des cas de test et des conditions de test.
Dans certains cas, l’implémentation des tests implique la création de produits d’activités utilisant ou utilisés par des outils, tels que la virtualisation de services et les scripts de test automatisés.
L’implémentation des tests peut également aboutir à la création et à la vérification de données de test et de l’environnement de test. L’exhaustivité de la documentation des résultats de la vérification des données et/ou de l’environnement peut varier considérablement.
Les données de test sont utilisées pour attribuer des valeurs concrètes aux entrées et aux résultats attendus des cas de test. Ces valeurs concrètes, accompagnées d’instructions explicites sur la façon de les utiliser, transforment des cas de test de haut niveau en cas de test de bas niveau exécutables. Le même cas de test de haut niveau peut utiliser des données de test différentes lorsqu’il est exécuté sur des versions différentes de l’objet de test. Les résultats attendus concrets qui sont associés à des données concrètes de test sont identifiés à l’aide d’un oracle de test.
Dans les tests exploratoires, certains produits d’activités de la conception et de l’implémentation des tests peuvent être créés pendant l’exécution des tests, bien que la mesure dans laquelle les tests exploratoires (et leur traçabilité à des éléments spécifiques des bases de test) sont documentés peut varier considérablement.
Les conditions de test définies dans l’analyse de test peuvent être affinées lors de l’implémentation des tests.
Produits d’activités de l’exécution des tests
Les produits d’activités de l’exécution des tests comprennent :
- La documentation du statut de chaque cas de test ou des procédures de test (p. ex. prêt à être exécuté, réussite, échec, blocage, omission délibérée, )
- Les rapports de défauts (voir section 6)
- La documentation précisant quel(s) élément(s) de test, objet(s) de test, outils de test et testware ont été impliqués dans le test
Idéalement, une fois l’exécution des tests terminée, le statut de chaque élément des bases de test peut être déterminé et indiqué par traçabilité bidirectionnelle avec la ou les procédures de test associée(s). Par exemple, nous pouvons dire quelles exigences ont réussi tous les tests planifiés, quelles exigences ont échoué aux tests et/ou ont des défauts qui leur sont associés et quelles exigences ont des tests planifiés encore en attente d’être exécutés. Cela permet de vérifier que les critères de couverture ont été satisfaits et de rendre compte des résultats des tests de façon compréhensible par les parties prenantes.
Produits d’activités de la clôture des tests
Les produits d’activités de la clôture des tests comprennent les rapports de synthèse de test, les mesures à prendre pour améliorer les projets ou les itérations ultérieurs (p. ex. à la suite d’une rétrospective en projet Agile), des demandes de changement ou des items du backlog du produit, et des testware finalisés.
1.4.4 Traçabilité entre les bases de test et les produits d’activités du test (K2)
Tel que mentionné à la section 1.4.3, les produits d’activités du test et les noms de ces produits varient considérablement. Indépendamment de ces variations, afin de mettre en œuvre un pilotage et un contrôle efficaces des tests, il est important d’établir et de maintenir la traçabilité tout au long du processus de test entre chaque élément des bases de test et les divers produits d’activités du test associés à cet élément, comme décrit ci-dessus. En plus de l’évaluation de la couverture de test, une bonne traçabilité facilite :
- L’analyse de l’impact des changements
- L’audit des tests
- La satisfaction des critères de gouvernance IT
- L’amélioration du caractère compréhensible des rapports d’avancement des tests et des rapports de synthèse de test afin d’y inclure l’état des éléments des bases de test (p. ex. les exigences qui ont été testées avec succès, les exigences qui ont des tests en échec, et les exigences qui ont des tests en attente)
- La restitution des aspects techniques des tests aux parties prenantes en des termes qu’elles peuvent comprendre
- L’apport d’information pour évaluer la qualité du produit, l’aptitude du processus et l’avancement du projet par rapport aux objectifs métier
Certains outils de gestion des tests fournissent des modèles de produits d’activités de test qui correspondent à une partie ou à la totalité des produits d’activités de test décrits dans cette section. Certaines organisations construisent leurs propres systèmes de gestion pour organiser les produits d’activités et assurer la traçabilité de l’information dont elles ont besoin.
1.5 La psychologie des tests
Le développement de logiciels, y compris les tests logiciels, implique des êtres humains. Par conséquent, la psychologie humaine a des effets importants sur les tests logiciels.
1.5.1 Psychologie humaine et test (K1)
Identifier les défauts lors de test statiques tel qu’une revue des exigences ou une session de raffinement des User Stories, ou l’identification de défaillances au cours de l’exécution de tests dynamiques peut être perçu comme une critique du produit et de ses auteurs. Un élément de la psychologie humaine appelé biais de confirmation peut rendre difficile à accepter des informations en désaccord avec les croyances actuelles. Par exemple, puisque les développeurs attendent de leur code qu’il soit correct, ils ont un biais de confirmation qui fait qu’il est difficile d’accepter que le code est incorrect. Outre le biais de confirmation, d’autres biais cognitifs peuvent rendre difficile à comprendre ou à accepter l’information produite par les tests. De plus, c’est un trait humain commun de blâmer le porteur de la mauvaise nouvelle, et l’information produite par le test contient souvent de mauvaises nouvelles.
En raison de ces facteurs psychologiques, certaines personnes peuvent percevoir le test comme une activité destructrice, même s’il contribue grandement à l’avancement du projet et à la qualité du produit (voir les sections 1.1 et 1.2). Pour tenter de réduire ces perceptions, l’information sur les défauts et les défaillances devrait être communiquée de façon constructive. De cette façon, les tensions entre les testeurs et les analystes, les Product Owners, les concepteurs et les développeurs peuvent être réduites. Ceci s’applique aussi bien lors des tests statiques que dynamiques.
Les testeurs et les Test Managers doivent avoir de bonnes compétences interpersonnelles pour être capable de communiquer efficacement sur les défauts, les défaillances, les résultats des tests, l’avancement des tests et les risques, et pour établir des relations positives avec leurs collègues. Les moyens de bien communiquer comprennent les exemples suivants :
- Commencer par la collaboration plutôt que par la confrontation. Rappeler à tous l’objectif commun d’une meilleure qualité des systèmes.
- Mettre l’accent sur les bénéfices du test. Par exemple, pour les auteurs, l’information sur les défauts peut les aider à améliorer leurs produits d’activités et leurs compétences. Pour l’organisation, les défauts trouvés et corrigés durant les tests permettront d’économiser du temps et de l’argent et de réduire le risque global pour la qualité du produit.
- Communiquer les résultats des tests et d’autres constats d’une manière neutre et axée sur les faits, sans critiquer la personne qui a créé l’item défectueux. Rédiger des rapports objectifs et factuels sur les défauts et les constats des revues.
- Essayer de comprendre ce que ressent l’autre personne et les raisons pour lesquelles elle peut réagir négativement à l’information.
- Confirmer que l’autre personne a compris ce qui a été dit et vice versa.
Les objectifs habituels des tests ont été discutés plus tôt (voir section 1.1). Définir clairement le bon ensemble d’objectifs de test a d’importantes implications psychologiques. La plupart des gens ont tendance à aligner leurs plans et leurs comportements avec les objectifs fixés par l’équipe, la direction et les autres parties prenantes. Il est également important que les testeurs adhèrent à ces objectifs avec un biais personnel minimum.
1.5.2 Etat d’esprit des testeurs et des développeurs (K2)
Les développeurs et les testeurs pensent souvent différemment. L’objectif premier du développement est de concevoir et de construire un produit. Comme nous l’avons déjà mentionné, les objectifs du test comprennent la vérification et la validation du produit, la détection des défauts avant la livraison, et ainsi de suite. Il s’agit d’ensembles différents d’objectifs qui exigent des états d’esprit différents. L’union de ces points de vue permet d’atteindre un niveau plus élevé de qualité des produits.
Un état d’esprit reflète les hypothèses d’une personne et les méthodes qu’elle préfère pour la prise de décision et la résolution de problèmes. L’état d’esprit d’un testeur devrait inclure la curiosité, un pessimisme professionnel, un œil critique, l’attention aux détails et une motivation pour de bonnes et positives communications et relations. L’état d’esprit d’un testeur tend à grandir et à mûrir au fur et à mesure que le testeur acquiert de l’expérience.
L’état d’esprit d’un développeur peut inclure certains éléments de l’état d’esprit d’un testeur, mais les développeurs qui réussissent sont souvent plus intéressés par la conception et la construction de solutions que par la recherche de ce qui pourrait être erroné avec ces solutions. De plus, le biais de confirmation fait qu’il est difficile de trouver des erreurs dans son propre travail.
Avec le bon état d’esprit, les développeurs sont capables de tester leur propre code. Différents modèles de cycle de vie de développement du logiciel ont souvent des façons différentes d’organiser les testeurs et les activités de test. Le fait que certaines des activités de test soient effectuées par des testeurs indépendants augmente l’efficacité de la détection des défauts, ce qui est particulièrement important pour les systèmes de grande taille, complexes ou critiques sur le plan de la sûreté. Les testeurs indépendants apportent une perspective différente de celle des auteurs du produit d’activités testé (c.-à-d. les analystes métier, les Product Owners, les concepteurs et les développeurs), puisqu’ils ont des biais cognitifs différents de ceux des auteurs.
Chapitre 2 : Tester pendant le cycle de vie
Termes
Test d’acceptation, test alpha, test bêta, logiciel commercial sur étagère (COTS), test d’intégration de composants, test de composants, test de confirmation, test d’acceptation contractuelle, test fonctionnel, analyse d’impact, test d’intégration, test de maintenance, test non-fonctionnel, test d’acceptation opérationnelle, test de régression, test d’acceptation réglementaire, modèle de développement séquentiel, test d’intégration de systèmes, test système, bases de test, cas de test, environnement de test, niveau de test, objet de test, objectif de test, type de test, test d’acceptation utilisateur, test boîte- blanche.
2.1 Les modèles de développement logiciel
Un modèle de cycle de vie de développement logiciel décrit les types d’activités réalisées à chaque étape d’un projet de développement logiciel, et la façon dont les activités sont reliées entre elles logiquement et chronologiquement. Il existe un certain nombre de modèles de cycle de développement de logiciels différents, chacun d’entre eux nécessitant des approches de test différentes.
2.1.1 Développement de logiciel et tests logiciels (K2)
Une partie importante du rôle d’un testeur est de se familiariser avec les principaux modèles de cycle de vie du développement logiciel afin que les activités de test adaptées puissent être réalisées.
Quel que soit le modèle de cycle de vie de développement logiciel, il y a plusieurs caractéristiques de bonnes pratiques des tests :
- Pour chaque activité de développement, il y a une activité de test correspondante
- Chaque niveau de test a des objectifs de test spécifiques à ce niveau
- L’analyse et la conception des tests pour un niveau de test donné commencent au cours de l’activité de développement correspondante
- Les testeurs participent aux discussions pour définir et affiner les exigences et la conception, et sont impliqués dans la revue des produits d’activités (p. ex. les exigences, la conception, les User Stories, etc.) dès que des versions préliminaires sont disponibles
Quel que soit le modèle de cycle de développement logiciel choisi, les activités de test devraient commencer dès les premières étapes du cycle de vie, en respectant le principe de « Tester tôt ».
Ce syllabus catégorise les modèles de cycle de vie de développement de logiciels courants comme suit :
- Modèles de développement séquentiel
- Modèles de développement itératif et incrémental
Un modèle de développement séquentiel décrit le processus de développement logiciel comme un flux linéaire et séquentiel d’activités. Cela signifie que toute phase du processus de développement devrait commencer lorsque la phase précédente est terminée. En théorie, il n’y a pas de chevauchement des phases, mais dans la pratique, il est bénéfique d’avoir un retour rapide de la phase suivante.
Dans le modèle ‘en cascade’, les activités de développement (p. ex. analyse des exigences, conception, codage, test) sont réalisées l’une après l’autre. Dans ce modèle, les activités de test ont seulement lieu une fois que toutes les autres activités de développement sont terminées.
Contrairement au modèle en ‘cascade’, le modèle en V intègre le processus de test tout au long du processus de développement, en appliquant le principe de « Tester tôt ». De plus, le modèle en V inclut des niveaux de test associés à chaque phase de développement correspondante, ce qui favorise le
« Tester tôt » (voir la section 2.2 pour une discussion sur les niveaux de test). Dans ce modèle, l’exécution des tests associés à chaque niveau de test se déroule séquentiellement, mais dans certains cas, il y a chevauchement.
Les modèles de développement séquentiels fournissent des logiciels qui contiennent l’ensemble des fonctionnalités, mais qui nécessitent généralement des mois ou des années pour être livrés aux parties prenantes et aux utilisateurs.
Le développement incrémental implique la définition des exigences, la conception, le développement et le test d’un système par morceaux, ce qui signifie que les fonctionnalités du logiciel augmentent de façon incrémentale. La taille de ces incréments de fonctionnalités varie, certaines méthodes ayant des étapes plus grandes et d’autres plus petites. Les incréments de caractéristiques peuvent être aussi petits qu’une unique modification d’un écran d’interface utilisateur ou qu’une nouvelle option de requête.
Le développement itératif se déroule lorsque des groupes de caractéristiques sont spécifiés, conçus, développés et testés ensemble dans une série de cycles, souvent d’une durée fixe. Les itérations peuvent impliquer des changements sur les caractéristiques développées dans les itérations précédentes, ainsi que des changements sur le périmètre du projet. Chaque itération délivre un logiciel opérationnel qui est un sous-ensemble croissant de l’ensemble global des caractéristiques jusqu’à ce que le logiciel final soit livré ou que le développement soit arrêté.
En voici quelques exemples :
- Rational Unified Process : chaque itération a tendance à être relativement longue (p. ex. deux à trois mois), et les incréments de caractéristiques sont proportionnellement importants, de l’ordre de deux ou trois groupes de caractéristiques connexes
- Scrum : chaque itération a tendance à être relativement courte (p. ex., heures, jours ou quelques semaines), et les incréments de caractéristiques sont proportionnellement petits, de l’ordre de quelques améliorations et/ou deux ou trois nouvelles caractéristiques
- Kanban : mis en œuvre avec des itérations de durée fixe ou non, pouvant soit livrer à la fin une seule amélioration ou caractéristique, soit regrouper des groupes de caractéristiques pour les livrer en une fois
- Spiral (ou par prototypage) : il s’agit de créer des incréments expérimentaux, dont certains peuvent être fortement remaniés ou même abandonnés lors de travaux de développement ultérieurs
Les composants ou systèmes développés à l’aide de ces méthodes impliquent souvent le chevauchement et l’itération sur les niveaux de test tout au long du développement. Idéalement, chaque caractéristique est testée à plusieurs niveaux de test au fur et à mesure qu’elle se rapproche de la livraison. Dans certains cas, les équipes utilisent la livraison continue ou le déploiement continu, les deux impliquant une automatisation significative de multiples niveaux de test dans le cadre de leurs flux de livraison. De nombreux efforts de développement utilisant ces méthodes incluent également le concept d’équipes auto-organisées, ce qui peut changer la façon dont le travail de test est organisé ainsi que la relation entre les testeurs et les développeurs.
Ces méthodes produisent un système aux caractéristiques croissantes, qui peut être livré aux utilisateurs finaux caractéristique par caractéristique, itération par itération, ou de façon plus traditionnelle par version majeure. Que les incréments logiciels soient livrés aux utilisateurs finaux ou non, les tests de régression sont de plus en plus importants à mesure que le système grossit.
Contrairement aux modèles séquentiels, les modèles itératifs et incrémentaux peuvent fournir des logiciels utilisables en quelques semaines ou même en quelques jours, mais ne peuvent livrer l’ensemble des exigences que sur une période de plusieurs mois ou même années.
Pour plus d’informations sur les tests logiciels dans le contexte du développement Agile, voir le syllabus Testeur Certifié – Extension Niveau Fondation Testeur Agile CFTL / ISTQB, Black 2017, Crispin 2008, et Gregory 2015.
2.1.2 Modèles de cycle de vie du développement logiciel en contexte (K1)
Les modèles de cycle de vie du développement logiciel doivent être sélectionnés et adaptés au contexte du projet et aux caractéristiques du produit. Un modèle de cycle de vie du développement logiciel approprié devrait être choisi et adapté en fonction de l’objectif du projet, du type de produit développé, des priorités métier (p. ex., délai de mise sur le marché) et des risques produit et projet identifiés. Par exemple, le développement et le test d’un système peu important de gestion interne devrait être différent du développement et du test d’un système critique pour la sécurité, comme un système de contrôle de freinage d’une automobile. Par ailleurs, dans certains cas, des problèmes organisationnels et culturels peuvent inhiber la communication entre les membres de l’équipe, ce qui peut gêner le développement itératif.
Selon le contexte du projet, il peut être nécessaire de combiner ou de réorganiser les niveaux de test et/ou les activités de test. Par exemple, pour l’intégration d’un logiciel commercial sur étagère (COTS) dans un système plus grand, l’acheteur peut effectuer des tests d’interopérabilité au niveau des tests d’intégration du système (p. ex., intégration à l’infrastructure et à d’autres systèmes) et au niveau des tests d’acceptation (fonctionnels et non-fonctionnels, ainsi que des tests d’acceptation utilisateur et des tests d’acceptation opérationnelle). Voir la section 2.2 pour une description des niveaux de test et la section 2.3 pour une description des types de test.
En outre, les modèles de cycle de vie du développement logiciel eux-mêmes peuvent être combinés. Par exemple, un modèle en V peut être utilisé pour le développement et le test des systèmes back-end et de leurs intégrations, tandis qu’un modèle de développement Agile peut être utilisé pour développer et tester l’interface utilisateur front-end (IHM) et les fonctionnalités. Le prototypage peut être utilisé au début d’un projet, avec un modèle de développement incrémental adopté une fois la phase expérimentale terminée.
Les systèmes Internet des Objets (IoT – Internet of Things), qui se composent de nombreux objets différents, tels que des équipements, des produits et des services, appliquent généralement des modèles de cycle de développement logiciel distincts pour chaque objet. Cela représente un défi particulier pour le développement de versions du système global IoT. De plus, le cycle de développement logiciel de ces objets met davantage l’accent sur les phases ultérieures du cycle de vie du développement logiciel après leur mise en service (p. ex. phases d’exploitation, de mise à jour et de dé-commissionnement).
2.2 Niveaux de test
Les niveaux de test sont des groupes d’activités de test qui sont organisées et gérées ensemble. Chaque niveau de test est une instance du processus de test, constitué des activités décrites à la section 1.4, réalisées en relation avec le logiciel à un niveau de développement donné, depuis les unités ou composants individuels jusqu’aux systèmes complets ou, le cas échéant, aux systèmes de systèmes. Les niveaux de test sont liés à d’autres activités du cycle de vie du développement logiciel. Les niveaux de test utilisés dans ce syllabus sont les suivants :
- Test de composants
- Test d’intégration
- Test système
- Test d’acceptation
Les niveaux de test sont caractérisés par les éléments suivants :
- Objectifs spécifiques
- Bases de test, référencées pour en dériver des cas de test
- Objet de test (c.-à-d. ce qui est testé)
- Défauts et défaillances types
- Approches et responsabilités spécifiques
Pour chaque niveau de test, un environnement de test approprié est requis. Dans les tests d’acceptation, par exemple, un environnement de test représentatif de la production est idéal, tandis que dans les tests de composants, les développeurs utilisent généralement leur propre environnement de développement.
2.2.1 Test de composants (K2)
Objectifs des tests de composants
Les tests de composants (également connus sous le nom de tests unitaires ou de modules) se concentrent sur des composants qui peuvent être testés séparément. Les objectifs des tests de composants sont les suivants :
- Réduire le risque
- Vérifier si les comportements fonctionnels et non-fonctionnels du composant sont tels qu’ils ont été conçus et spécifiés
- Renforcer la confiance dans la qualité du composant
- Trouver des défauts dans le composant
- Empêcher les défauts de passer à des niveaux de test plus élevés
Dans certains cas, particulièrement dans les modèles de développement incrémentaux et itératifs (p. ex. Agile) où les changements de code sont continus, les tests de régression automatisés jouent un rôle clé dans l’établissement de la confiance que les changements n’ont pas endommagés les composants existants.
Les tests de composants sont souvent effectués indépendamment du reste du système, en fonction du modèle de cycle de développement logiciel et du système, ce qui peut nécessiter de mettre en place des objets fictifs, une virtualisation des services, des harnais de test, des bouchons et des pilotes. Les tests de composants peuvent porter sur des caractéristiques fonctionnelles (p. ex., exactitude des calculs), non-fonctionnelles (p. ex. recherche de fuites mémoire) et les propriétés structurelles (p. ex., tests des décisions).
Bases de test
Voici des exemples de produits d’activités qui peuvent être utilisés comme bases de test pour les tests de composants :
- Conception détaillée
- Code
- Modèle de données
- Spécifications des composants
Objets de test
Les objets de test habituels pour les tests de composants sont les suivants :
- Composants, unités ou modules
- Code et structures de données
- Classes
- Modules de bases de données
Défauts et défaillances courants
Voici des exemples de défauts et de défaillances courants pour les tests de composants :
- Fonctionnalité incorrecte (par exemple, non conforme aux spécifications de conception)
- Problèmes de flux de données
- Code et logique incorrects
Les défauts sont généralement corrigés dès qu’ils sont détectés, souvent sans gestion formelle des défauts. Cependant, lorsque les développeurs rapportent vraiment des défauts, cela donne des informations importantes pour l’analyse des causes racines et l’amélioration des processus.
Approches spécifiques et responsabilités
Les tests de composants sont généralement effectués par le développeur qui a écrit le code, mais il nécessite au minimum l’accès au code testé. Les développeurs peuvent alterner le développement des composants avec la recherche et la correction de défauts. Les développeurs vont souvent écrire et exécuter des tests après avoir écrit le code d’un composant. Cependant, dans le développement Agile en particulier, l’écriture de cas de test de composants automatisés peut précéder l’écriture du code de l’application.
Considérons par exemple le développement piloté par les tests (TDD : Test Driven Development). Le développement piloté par les tests est fortement itératif et basé sur des cycles de développement de cas de tests automatisés, puis la construction et l’intégration de petits morceaux de code, suivi de l’exécution des tests des composants, la correction de tout problème et le refactoring du code. Ce processus se poursuit jusqu’à ce que le composant soit complètement achevé et que tous les tests de composants réussissent. Le développement piloté par les tests est un exemple de l’approche dite « test-first » – tester en premier. Le développement piloté par les tests a commencé avec l’Extreme Programming (XP) et il s’est étendu à d’autres formes de développement Agile et aussi à des cycles de vie séquentiels (cf. syllabus Testeur Certifié – Extension Niveau Fondation Testeur Agile CFTL / ISTQB).
2.2.2 Test d’intégration (K2)
Objectifs des tests d’intégration
Les tests d’intégration se concentrent sur les interactions entre les composants ou les systèmes. Les objectifs des tests d’intégration comprennent :
- Réduire les risques
- Vérifier si les comportements fonctionnels et non-fonctionnels des interfaces sont tels qu’ils ont été conçus et spécifiés
- Renforcer la confiance dans la qualité des interfaces
- Trouver des défauts (qui peuvent se trouver dans les interfaces elles-mêmes ou dans les composants ou systèmes)
- Empêcher les défauts de passer à des niveaux de test plus élevés
Comme pour les tests de composants, dans certains cas, les tests d’intégration automatisés utilisés en tests de régression donnent l’assurance que les changements n’ont pas altéré les interfaces, composants ou systèmes existants.
Il y a deux niveaux différents de tests d’intégration décrits dans ce syllabus, qui peuvent être effectués sur des objets de test de taille variable comme suit :
- Les tests d’intégration de composants se concentrent sur les interactions et les interfaces entre composants intégrés. Les tests d’intégration de composants sont effectués après les tests de composants et sont généralement automatisés. Dans le développement itératif et incrémental, les tests d’intégration des composants font généralement partie du processus d’intégration
- Les tests d’intégration de systèmes se concentrent sur les interactions et les interfaces entre systèmes, progiciels et micro-services. Les tests d’intégration de systèmes peuvent également couvrir les interactions avec des entités externes (p. ex. services Web) et les interfaces fournies par celles-ci. Dans ce cas, l’organisation qui développe ne contrôle pas les interfaces externes, ce qui peut créer divers problèmes pour les tests (p. ex. s’assurer que des défauts bloquants pour les tests dans le code de l’entité externe sont résolus, organiser des environnements de test, etc.). Les tests d’intégration de systèmes peuvent être effectués après les tests systèmes ou en parallèle d’activités de tests systèmes en cours (à la fois en développement séquentiel et en développement itératif et incrémental).
Bases de test
Voici des exemples de produits d’activités qui peuvent servir de bases de test pour les tests d’intégration :
- Conception du logiciel et du système
- Diagrammes de séquence
- Spécifications des protocoles d’interface et de communication
- Cas d’utilisation
- Architecture au niveau du composant ou du système
- Workflows
- Définitions des interfaces externes
Objets de test
Les objets de test habituels pour les tests d’intégration comprennent :
- Sous-systèmes
- Bases de données
- Infrastructure
- Interfaces
- APIs
- Micro-services
Défauts et défaillances courants
Voici des exemples de défauts et de défaillances habituels pour les tests d’intégration de composants :
- Données incorrectes, données manquantes ou encodage incorrect des données
- Mauvais séquencement ou synchronisation des appels d’interfaces
- Décalages au niveau des interfaces
- Défaillances dans la communication entre les composants
- Défaillances de communication non gérées ou mal gérées entre les composants
- Hypothèses incorrectes sur la signification, les unités ou les limites des données transmises entre les composants
Voici des exemples de défauts et de défaillances habituels pour les tests d’intégration de systèmes :
- Structures de message incohérentes entre les systèmes
- Données incorrectes, données manquantes ou encodage incorrect des données
- Décalages au niveau des interfaces
- Défaillances dans la communication entre les systèmes
- Défaillances de communication non gérées ou mal gérées entre les systèmes
- Hypothèses incorrectes sur la signification, les unités ou les limites des données transmises entre les systèmes
- Non-respect des règles de sécurité requises
Approches spécifiques et responsabilités
Les tests d’intégration de composants et les tests d’intégration de systèmes doivent se concentrer sur l’intégration elle-même. Par exemple, pour l’intégration du module A avec le module B, les tests devraient se concentrer sur la communication entre les modules, et non sur la fonctionnalité des modules individuels, car cela aurait dû être couvert pendant les tests de composants. Pour l’intégration du système X au système Y, les tests devraient se concentrer sur la communication entre les systèmes, et non sur la fonctionnalité des systèmes individuels, car cela aurait dû être couvert pendant les tests du système. Les types de tests fonctionnels, non-fonctionnels et structurels sont concernés.
Les tests d’intégration de composants sont souvent la responsabilité des développeurs. Les tests d’intégration de systèmes relèvent généralement de la responsabilité des testeurs. Idéalement, les testeurs qui effectuent des tests d’intégration de systèmes devraient comprendre l’architecture du système et devraient avoir contribué à la planification de l’intégration.
Si les tests d’intégration et la stratégie d’intégration sont planifiés avant le développement des composants ou des systèmes, ces composants ou systèmes peuvent être construits dans l’ordre requis pour des tests plus efficaces. Les stratégies d’intégration systématique peuvent être fondées sur l’architecture du système (p. ex. de haut en bas et de bas en haut), les tâches fonctionnelles, les séquences de traitement des transactions ou d’autres aspects du système ou des composantes. Afin de simplifier l’isolation des défauts et de détecter tôt les défauts, l’intégration devrait normalement être incrémentale (c’est-à-dire un petit nombre de composants ou de systèmes supplémentaires à la fois) plutôt que “big bang” (c’est-à-dire l’intégration de tous les composants ou systèmes en une seule étape). Une analyse de risque des interfaces les plus complexes peut aider à focaliser les tests d’intégration.
Plus la portée de l’intégration est grande, plus il devient difficile de localiser les défauts d’un composant ou d’un système spécifique, ce qui peut entraîner un risque accru et du temps supplémentaire pour la correction des problèmes rencontrés. C’est l’une des raisons pour lesquelles l’intégration continue, où le logiciel est intégré composant par composant (c’est-à-dire l’intégration fonctionnelle), est devenue une pratique courante. Une telle intégration continue inclut souvent des tests de régression automatisés, idéalement à plusieurs niveaux de test.
2.2.3 Test système (K2)
Objectifs des tests système
Les tests système se concentrent sur le comportement et les capacités d’un système ou d’un produit entier, en considérant souvent les tâches de bout en bout que le système peut exécuter et les comportements non-fonctionnels qu’il présente pendant l’exécution de ces tâches. Les objectifs des tests système comprennent :
- Réduire les risques
- Vérifier si les comportements fonctionnels et non-fonctionnels du système sont tels qu’ils ont été conçus et spécifiés
- Valider que le système est complet et fonctionnera comme prévu
- Renforcer la confiance dans la qualité du système dans son ensemble
- Trouver des défauts
- Empêcher les défauts de passer à des niveaux de test plus élevés ou en production
Pour certains systèmes, la vérification de la qualité des données peut être un objectif. Comme pour les tests de composants et les tests d’intégration, dans certains cas, les tests de régression automatisés au niveau système donnent l’assurance que les changements n’ont pas altéré les caractéristiques existantes ou les capacités de bout en bout. Le test système produit souvent de l’information qui est utilisée par les intervenants pour prendre des décisions de livraison. Les tests systèmes peuvent également satisfaire aux exigences ou aux normes légales ou réglementaires.
L’environnement de test devrait idéalement correspondre à la cible finale ou à l’environnement de production.
Bases de test
Voici des exemples de produits d’activités qui peuvent être utilisés comme bases de test pour les tests système :
- Spécifications des exigences système et logicielles (fonctionnelles et non-fonctionnelles)
- Rapports d’analyse des risques
- Cas d’utilisation
- Epics et User Stories
- Modèles de comportement du système
- Diagrammes d’états
- Manuels système et manuels d’utilisation
Objets de test
Les objets de test habituels pour les tests système comprennent :
- Applications
- Systèmes Matériel/Logiciel
- Systèmes d’exploitation
- Système sous test (SUT – System Under Test)
- Configuration du système et données de configuration
Défauts et défaillances courants
Voici des exemples de défauts et de défaillances habituels pour les tests système :
- Calculs incorrects
- Comportement fonctionnel ou non-fonctionnel du système incorrect ou inattendu
- Flux de contrôle et/ou de données incorrects au sein du système
- Réalisation incorrecte et incomplète des tâches fonctionnelles de bout en bout
- Incapacité du système à fonctionner correctement dans le ou les environnements de production
- Incapacité du système à fonctionner selon la description faite dans les manuels système et utilisateur
Approches spécifiques et responsabilités
Les tests système devraient se concentrer sur le comportement global de bout en bout du système dans son ensemble, à la fois fonctionnel et non-fonctionnel. Les tests système doivent utiliser les techniques de test les plus appropriées (voir chapitre 4) pour l’(les) aspect(s) du système à tester. Par exemple, une table de décision peut être créée pour vérifier si le comportement fonctionnel est tel que décrit dans les règles métier.
Des testeurs indépendants procèdent en général aux tests système. Des défauts dans les spécifications (par exemple, des User Stories manquantes, des exigences métier mal énoncées, etc.) peuvent conduire à un manque de compréhension ou à des désaccords sur le comportement attendu du système. De telles situations peuvent causer des faux positifs et des faux négatifs, ce qui fait perdre du temps et réduit l’efficacité de la détection des défauts. L’implication en amont des testeurs dans l’affinement des User Stories ou dans les activités de tests statiques, comme les revues, aide à réduire l’incidence de telles situations.
2.2.4 Test d’acceptation (K2)
Objectifs des tests d’acceptation
Les tests d’acceptation, comme les tests système, se concentrent généralement sur le comportement et les capacités d’un système ou d’un produit entier. Les objectifs des tests d’acceptation comprennent :
- Établir la confiance dans la qualité du système dans son ensemble
- Valider que le système est complet et qu’il fonctionnera comme attendu
- Vérifier que les comportements fonctionnels et non-fonctionnels du système sont tels que spécifiés
Les tests d’acceptation peuvent produire des informations permettant d’évaluer la disponibilité du système pour le déploiement et l’utilisation par le client (utilisateur final). Des défauts peuvent être trouvés pendant les tests d’acceptation, mais la découverte de défauts ne constitue en général pas un objectif, et la découverte d’un nombre significatif de défauts pendant les tests d’acceptation peut dans certains cas être considérée comme un risque majeur du projet. Les tests d’acceptation peuvent également satisfaire aux exigences ou aux normes légales ou réglementaires.
Les formes communes de tests d’acceptation comprennent :
- Tests d’acceptation utilisateur
- Tests d’acceptation opérationnelle
- Tests d’acceptation contractuelle et réglementaire
- Tests alpha et bêta
Chacune est décrite dans les quatre sous-sections suivantes.
Tests d’acceptation utilisateur (UAT – User Acceptance Testing)
Les tests d’acceptation du système par les utilisateurs sont généralement axés sur la validation de son aptitude à l’usage par les utilisateurs prévus dans un environnement opérationnel réel ou simulé.
L’objectif principal est de renforcer la confiance dans l’usage du système pour répondre aux besoins des utilisateurs, satisfaire les exigences et exécuter les processus métier avec un minimum de difficultés, de coûts et de risques.
Tests d’acceptation opérationnelle (OAT – Operational Acceptance Testing)
Les tests d’acceptation du système par le service d’exploitation ou le service d’administration du système sont généralement effectués dans un environnement de production (simulé). Les tests se concentrent sur les aspects opérationnels et peuvent inclure les éléments suivants :
- Tests de sauvegarde et de restauration
- Installation, désinstallation et mise à jour
- Reprise après sinistre
- Gestion des utilisateurs
- Tâches de maintenance
- Tâches de chargement et de migration des données
- Vérification des vulnérabilités de sécurité
- Tests de performance
L’objectif principal des tests d’acceptation opérationnelle est de renforcer la confiance dans le fait que les opérateurs ou les administrateurs système peuvent maintenir le système en bon état de fonctionnement pour les utilisateurs dans l’environnement opérationnel, même dans des conditions exceptionnelles ou difficiles.
Tests d’acceptation contractuelle et réglementaire
Les tests d’acceptation contractuelle sont effectués en fonction des critères d’acceptation d’un contrat pour la production de logiciels sur mesure. Les critères d’acceptation devraient être définis lorsque les parties conviennent du contrat. Les tests d’acceptation contractuelle sont souvent effectués par les utilisateurs ou par des testeurs indépendants.
Les tests d’acceptation réglementaire sont effectués par rapport à tous les règlements qui doivent être respectés, comme les règlements gouvernementaux, légaux ou de sécurité. Les tests d’acceptation réglementaire sont souvent effectués par les utilisateurs ou par des testeurs indépendants, les résultats étant parfois observés ou vérifiés par des organismes de réglementation.
L’objectif principal des tests d’acceptation contractuelle et réglementaire est de renforcer la confiance dans l’atteinte de la conformité contractuelle ou réglementaire.
Tests alpha et bêta
Les tests alpha et bêta sont généralement utilisés par les développeurs de logiciels commerciaux sur étagère (COTS) qui souhaitent obtenir une évaluation des utilisateurs, clients et/ou opérateurs potentiels ou existants avant que le produit logiciel ne soit mis sur le marché. Les tests alpha sont effectués sur le site de l’organisation qui développe, non pas par l’équipe de développement, mais par des clients potentiels ou existants, et/ou des opérateurs ou une équipe de test indépendante. Les tests bêta sont effectués par des clients potentiels ou existants, et/ou des opérateurs sur leurs propres sites. Le test bêta peut venir après le test alpha, ou peut se produire sans qu’aucun test alpha précédent n’ait eu lieu.
L’un des objectifs des tests alpha et bêta est de renforcer la confiance des clients potentiels ou existants et/ou des opérateurs dans l’utilisation du système dans des conditions normales et quotidiennes et dans l’environnement opérationnel pour atteindre leurs objectifs avec un minimum de difficulté, de coût et de risque. Un autre objectif peut être la détection des défauts liés aux conditions et aux environnements dans lesquels le système sera utilisé, en particulier lorsque ces conditions et environnements sont difficiles à reproduire par l’équipe de développement.
Bases de test
Voici des exemples de produits d’activités qui peuvent être utilisés comme base de test pour toute forme de test d’acceptation :
- Processus métier
- Exigences utilisateur ou métier
- Réglementations, contrats légaux et normes
- Cas d’utilisation
- Exigences système
- Documentation système ou utilisateur
- Procédures d’installation
- Rapports d’analyse des risques
En outre, comme base de test pour dériver des cas de test pour les tests d’acceptation opérationnelle, un ou plusieurs des produits d’activités suivants peuvent être utilisés :
- Procédures de sauvegarde et de restauration
- Procédures de reprise après sinistre
- Exigences non-fonctionnelles
- Documentation d’exploitation
- Instructions de déploiement et d’installation
- Objectifs de performance
- Ensembles de base de données
- Normes ou règlements de sécurité
Objets de test habituels
Les objets de test habituels pour toute forme de test d’acceptation sont les suivants :
- Systèmes sous test
- Configuration du système et données de configuration
- Processus métier pour un système entièrement intégré
- Systèmes de récupération et sites sensibles (pour les tests de continuité d’activité et de reprise après sinistre)
- Processus d’exploitation et de maintenance
- Formulaires
- Rapports
- Données de production existantes et modifiées
Défauts et défaillances courants
Voici des exemples de défauts courants pour toute forme de test d’acceptation :
- Les workflows du système ne répondent pas aux exigences métier ou utilisateurs
- Les règles métier ne sont pas correctement implémentées
- Le système ne satisfait pas aux exigences contractuelles ou réglementaires
- Les défaillances non-fonctionnelles telles que les vulnérabilités de sécurité, le manque de performance en cas de charges élevées, ou le mauvais fonctionnement sur une plate-forme supportée
Approches et responsabilités spécifiques
Les tests d’acceptation relèvent souvent de la responsabilité des clients, des utilisateurs métier, des Product Owners ou des exploitants d’un système, et d’autres parties prenantes pouvant également être impliquées.
Le test d’acceptation est souvent considéré comme le dernier niveau de test dans un cycle de vie de développement séquentiel, mais il peut aussi se produire à d’autres moments, par exemple :
- Les tests d’acceptation d’un produit logiciel COTS peuvent se produire lorsqu’il est installé ou intégré
- Le test d’acceptation d’une nouvelle amélioration fonctionnelle peut avoir lieu avant le test système
Dans le développement itératif, les équipes de projet peuvent employer diverses formes de tests d’acceptation pendant et à la fin de chaque itération, telles que celles qui visent à vérifier une nouvelle fonctionnalité par rapport à ses critères d’acceptation et celles qui visent à valider qu’une nouvelle fonctionnalité satisfait les besoins des utilisateurs. De plus, des tests alpha et bêta peuvent être réalisés, soit à la fin de chaque itération, après l’achèvement de chaque itération, soit après une série d’itérations. Les tests d’acceptation utilisateur, les tests d’acceptation opérationnelle, les tests d’acceptation réglementaire et les tests d’acceptation contractuelle peuvent également avoir lieu, soit à la clôture de chaque itération, après l’achèvement de chaque itération, soit après une série d’itérations.
2.3 Types de test
Un type de test est un groupe d’activités de test visant à tester des caractéristiques spécifiques d’un système logiciel ou d’une partie d’un système, sur la base d’objectifs de test spécifiques. Ces objectifs peuvent inclure :
- Évaluer des caractéristiques de qualité fonctionnelle, telles que la complétude, l’exactitude et la pertinence
- Évaluer des caractéristiques de qualité non-fonctionnelles, telles que la fiabilité, la performance, la sécurité, la compatibilité et la facilité d’utilisation
- Évaluer si la structure ou l’architecture du composant ou du système est correcte, complète et conforme aux spécifications
- Évaluer les effets des changements, tels que la confirmation de la correction de défauts (tests de confirmation) et la recherche de changements non désirés résultant de changements dans le logiciel ou l’environnement (tests de régression).
2.3.1 Tests fonctionnels (K2)
Les tests fonctionnels d’un système impliquent des tests qui évaluent les fonctionnalités que le système devrait réaliser. Les exigences fonctionnelles peuvent être décrites dans des produits d’activités tels que les spécifications des exigences métier, les épics, les User Stories, les cas d’utilisation ou les spécifications fonctionnelles, ou elles peuvent ne pas être documentées. Les fonctionnalités sont “ce que” le système doit faire.
Les tests fonctionnels devraient être effectués à tous les niveaux de test (par exemple, les tests de composants peuvent être basés sur une spécification de composant), bien que la focalisation soit différente à chaque niveau (voir section 2.2).
Les tests fonctionnels prennent en compte le comportement du logiciel, de sorte que des techniques boîte-noire peuvent être utilisées pour dériver des conditions de test et des cas de test pour la fonctionnalité du composant ou du système (voir section 4.2).
La complétude des tests fonctionnels peut être mesurée par la couverture fonctionnelle. La couverture fonctionnelle est la mesure selon laquelle un certain type d’élément fonctionnel a été exercé par des tests. Elle est exprimée en pourcentage du ou des types d’éléments couverts. Par exemple, en utilisant la traçabilité entre les tests et les exigences fonctionnelles, le pourcentage de ces exigences qui sont couvertes par les tests peut être calculé, identifiant potentiellement des lacunes de couverture.
La conception et l’exécution des tests fonctionnels peuvent nécessiter des compétences ou des connaissances particulières, comme la connaissance du problème métier particulier que le logiciel résout (par exemple, un logiciel de modélisation géologique pour les industries pétrolière et gazière) ou le rôle particulier que joue le logiciel (par exemple, un logiciel de jeux vidéo qui fournit des loisirs interactifs).
2.3.2 Tests non-fonctionnels (K1)
Les tests non-fonctionnels d’un système évaluent les caractéristiques des systèmes et des logiciels comme l’utilisabilité, la performance ou la sécurité. Il convient de se reporter à la norme ISO (ISO/CEI 25010) pour une classification des caractéristiques de qualité des produits logiciels. Le test non- fonctionnel est le test de “comment” le système se comporte.
Contrairement aux idées fausses courantes, les tests non-fonctionnels peuvent et devraient souvent être effectués à tous les niveaux de test, et ce, le plus tôt possible. La découverte tardive de défauts non- fonctionnels peut être extrêmement préjudiciable à la réussite d’un projet.
Des techniques de boîte-noire (voir section 4.2) peuvent être utilisées pour dériver des conditions de test et des cas de test pour les tests non-fonctionnels. Par exemple, l’analyse des valeurs limites peut être utilisée pour définir les conditions de sollicitation pour les tests de performance.
La complétude des tests non-fonctionnels peut être mesurée par une couverture non-fonctionnelle. La couverture non-fonctionnelle est la mesure selon laquelle un certain type d’élément non-fonctionnel a été exercé par des tests et est exprimée en pourcentage du ou des types d’éléments couverts. Par exemple, en utilisant la traçabilité entre les tests et les appareils pris en charge pour une application mobile, le pourcentage d’appareils qui font l’objet de tests de compatibilité peut être calculé, identifiant potentiellement les lacunes de couverture.
La conception et l’exécution de tests non-fonctionnels peuvent impliquer des compétences ou des connaissances spécifiques, telles que la connaissance des faiblesses inhérentes à une conception ou à une technologie (par exemple, les vulnérabilités de sécurité associées à des langages de programmation particuliers) ou la spécificité des utilisateurs (p. ex. les types d’utilisateurs des systèmes de gestion des établissements de santé).
Se référer aux syllabus CFTL / ISTQB Testeur Certifié de Niveau Avancé : Analyste de Test, Analyste Technique de Test, Testeur de Sécurité, et d’autres modules spécialisés du CFTL / ISTQB pour plus de détails concernant les tests des caractéristiques de qualité non-fonctionnelles.
2.3.3 Tests boîte-blanche (K2)
Les tests boîte-blanche sont des tests basés sur la structure ou l’implémentation interne du système. La structure interne peut comprendre le code, l’architecture, les flux de travail et/ou les flux de données au sein du système (voir section 4.3).
La complétude des tests boîte-blanche peut être mesurée par la couverture structurelle. La couverture structurelle est la mesure dans laquelle un certain type d’élément structurel a été exercé par des tests et est exprimée en pourcentage du type d’élément couvert.
Au niveau du test des composants, la couverture du code est basée sur le pourcentage de code du composant qui a été testé, et peut être mesurée sur différents aspects du code (éléments de couverture) tels que le pourcentage d’instructions exécutables testées dans le composant, ou le pourcentage de résultats de décision testés. Ces types de couverture sont collectivement appelés couverture de code. Au niveau des tests d’intégration des composants, les tests de boîte-blanche peuvent être basés sur l’architecture du système, comme les interfaces entre composants, et la couverture structurelle peut être mesurée en terme de pourcentage d’interfaces exercées par les tests.
La conception et l’exécution de tests boîte-blanche peuvent nécessiter des compétences ou des connaissances particulières, comme la façon dont le code est construit (p. ex. utiliser des outils de couverture de code), la façon dont les données sont stockées (p. ex. évaluer les requêtes possibles dans les bases de données) et la façon d’utiliser les outils de couverture et d’interpréter correctement leurs résultats.
2.3.4 Tests liés aux changements
Lorsque des modifications sont apportées à un système, que ce soit pour corriger un défaut ou en raison d’une fonctionnalité nouvelle ou modifiée, des tests devraient être effectués pour confirmer que les modifications ont corrigé le défaut ou implémenté la fonctionnalité correctement, et n’ont pas causé de conséquences préjudiciables inattendues.
- Test de confirmation : Après la correction d’un défaut, le logiciel peut être testé avec tous les cas de test qui ont échoué en raison du défaut, qui doivent être ré-exécutés sur la nouvelle version du logiciel. Le logiciel peut également être testé avec de nouveaux tests si, par exemple, le défaut était une fonctionnalité manquante. A minima, les étapes pour reproduire le(s) défaut(s) causé(s) par le défaut doivent être ré-exécutées sur la nouvelle version du logiciel. Le but d’un test de confirmation est de confirmer que le défaut d’origine a été réparé avec succès.
- Tests de régression : Il est possible qu’une modification apportée à une partie du code, qu’il s’agisse d’une correction ou d’un autre type de modification, puisse accidentellement affecter le comportement d’autres parties du code, que ce soit au sein du même composant, dans d’autres composants du même système ou même dans d’autres systèmes. Les changements peuvent inclure des changements de l’environnement, comme une nouvelle version d’un système d’exploitation ou d’un système de gestion de base de données. De tels effets de bord involontaires sont appelés régressions. Les tests de régression sont des tests visant à détecter de tels effets de bord involontaires.
Des tests de confirmation et de régression sont effectués à tous les niveaux de test.
En particulier dans les cycles de vie de développement itératif et incrémental (p. ex. en Agile), les nouvelles caractéristiques, les modifications apportées aux caractéristiques existantes et le refactoring du code entraînent des changements fréquents du code, ce qui nécessite également des tests liés aux changements. En raison de la nature évolutive du système, les tests de confirmation et de régression sont très importants. Ceci est particulièrement important pour les systèmes Internet des objets où les objets individuels (p. ex. des appareils) sont fréquemment mis à jour ou remplacés.
Les suites de tests de régression sont exécutées plusieurs fois et évoluent généralement lentement, raison pour laquelle les tests de régression sont de bons candidats pour l’automatisation. L’automatisation de ces tests devrait commencer tôt dans le projet (voir chapitre 6).
2.3.5 Types de test et niveaux de test
Il est possible d’effectuer n’importe quel type de test mentionné ci-dessus à n’importe quel niveau de test. Pour illustrer, des exemples de tests fonctionnels, non-fonctionnels, boîte blanche et liés au changement seront donnés pour tous les niveaux de test, pour une application bancaire, en commençant par des tests fonctionnels :
- Pour les tests de composants, les tests sont conçus en fonction de la façon dont un composant doit calculer les intérêts composés.
- Pour les tests d’intégration de composants, les tests sont conçus en fonction de la façon dont les informations saisies au niveau de l’interface utilisateur sont transmises à la couche métier.
- Pour les tests système, les tests sont conçus en fonction de la façon dont les titulaires de comptes peuvent demander une ligne de crédit sur leurs comptes chèques.
- Pour les tests d’intégration au niveau système, les tests sont conçus en fonction de la façon dont le système utilise un micro-service externe pour vérifier le taux de crédit d’un titulaire de compte.
- Pour les tests d’acceptation, les tests sont conçus en fonction de la façon dont le banquier gère l’approbation ou le refus d’une demande de crédit.
Voici des exemples de tests non-fonctionnels :
- Pour les tests de composants, les tests de performance sont conçus pour évaluer le nombre de cycles CPU nécessaires pour effectuer un calcul d’intérêt total complexe.
- Pour les tests d’intégration de composants, les tests de sécurité sont conçus pour les vulnérabilités de débordement de la mémoire tampon dues aux données transmises de l’interface utilisateur à la couche métier.
- Pour les tests système, les tests de portabilité sont conçus pour vérifier si la couche de présentation fonctionne sur tous les navigateurs et appareils mobiles supportés.
- Pour les tests d’intégration de système, les tests de fiabilité sont conçus pour évaluer la robustesse du système lorsque le micro-service de calcul du taux de crédit ne répond pas.
- Pour les tests d’acceptation, les tests d’utilisabilité sont conçus pour évaluer l’accessibilité de l’interface de traitement du crédit du banquier pour les personnes handicapées.
Voici des exemples de tests boîte-blanche :
- Pour les tests de composants, les tests sont conçus pour obtenir une couverture complète des instructions et des décisions (voir section 4.3) pour tous les composants qui effectuent des calculs financiers.
- Pour les tests d’intégration de composants, les tests sont conçus pour vérifier comment chaque écran de l’interface du navigateur transmet les données à l’écran suivant et à la couche métier.
- Pour les tests système, les tests sont conçus pour couvrir les séquences de pages Web qui peuvent se succéder pendant une demande de ligne de crédit.
- Pour les tests d’intégration de système, les tests sont conçus pour exercer tous les types de requête possibles envoyés au micro-service de calcul du taux de crédit.
- Pour les tests d’acceptation, les tests sont conçus pour couvrir toutes les structures de fichiers de données financières prises en charge et les plages de valeurs pour les transferts de banque à banque.
Enfin, voici des exemples de tests liés aux changements :
- Pour les tests de composants, des tests de régression automatisés sont construits pour chaque composant et inclus dans le framework d’intégration continue.
- Pour les tests d’intégration de composants, les tests sont conçus pour confirmer les corrections des défauts liés à l’interface au fur et à mesure que ces corrections sont intégrées dans le référentiel de code.
- Pour les tests système, tous les tests d’un workflow donné sont ré-exécutés si un écran de ce workflow change.
- Pour les tests d’intégration système, les tests de l’application interagissant avec le micro-service de calcul du taux de crédit sont ré-exécutés quotidiennement dans le cadre du déploiement continu de ce micro-service.
- Pour les tests d’acceptation, tous les tests échoués précédemment sont ré-exécutés après la correction d’un défaut constaté lors des tests d’acceptation.
Bien que cette section donne des exemples de chaque type de test à tous les niveaux, il n’est pas nécessaire, pour tous les logiciels, que chaque type de test soit représenté à tous les niveaux. Toutefois, il est important d’exécuter les types de test applicables à chaque niveau, en particulier au niveau le plus précoce où le type de test se trouve.
2.4 Tests de maintenance
Une fois déployés dans les environnements de production, les logiciels et les systèmes doivent être maintenus. Des changements de diverses sortes sont presque inévitables dans les logiciels et les systèmes livrés, soit pour corriger des défauts découverts lors de l’utilisation opérationnelle, soit pour ajouter de nouvelles fonctionnalités, soit pour supprimer ou modifier des fonctionnalités déjà livrées. La maintenance est également nécessaire pour préserver ou améliorer les caractéristiques de qualité non- fonctionnelles du composant ou du système pendant toute sa durée de vie, en particulier la performance, la compatibilité, la fiabilité, la sécurité et la portabilité.
Lorsque des modifications sont apportées dans le cadre de la maintenance, des tests de maintenance devraient être effectués, à la fois pour évaluer le succès avec lequel les modifications ont été apportées et pour vérifier les effets secondaires possibles (p. ex. régressions) dans les parties du système qui demeurent inchangées (ce qui est habituellement la plus grande partie du système). Les tests de maintenance se concentrent sur le test des changements apportés au système, ainsi que sur le test des parties inchangées qui auraient pu être affectées par les changements. La maintenance peut impliquer des versions planifiées et des versions non planifiées (corrections à chaud).
Une version de maintenance peut nécessiter des tests de maintenance à plusieurs niveaux de test, en utilisant différents types de test, en fonction de sa portée. L’étendue des tests de maintenance dépend des éléments suivants :
- Le degré de risque du changement, par exemple, la mesure dans laquelle le périmètre modifié du logiciel communique avec d’autres composants ou systèmes
- La taille du système existant
- La taille du changement
2.4.1 Facteurs déclencheurs pour la maintenance (K2)
Il y a plusieurs raisons pour lesquelles la maintenance logicielle, et donc les tests de maintenance, ont lieu, à la fois pour les changements planifiés et non planifiés.
Nous pouvons classer les facteurs déclencheurs de la maintenance comme suit :
- Modification, comme des améliorations planifiées (p. ex., basées sur les versions), des changements correctifs et d’urgence, des changements de l’environnement opérationnel (comme des mises à niveau planifiées du système d’exploitation ou de la base de données), des mises à niveau de logiciels sur étagère (COTS) et des correctifs pour les défauts et les vulnérabilités
- Migration, par exemple d’une plate-forme à une autre, qui peut nécessiter des tests opérationnels du nouvel environnement ainsi que du logiciel modifié, ou des tests de conversion de données lorsque les données d’une autre application seront migrées dans le système en cours de maintenance
- Déclassement, par exemple lorsqu’une application arrive en fin de vie
Lorsqu’une application ou un système est mis hors service, il peut être nécessaire de tester la migration ou l’archivage des données si de longues périodes de conservation des données sont nécessaires. Il peut également être nécessaire de tester les procédures de restauration/récupération après l’archivage pour de longues périodes de conservation. En outre, des tests de régression peuvent être nécessaires pour s’assurer que toute fonctionnalité qui reste en service fonctionne toujours.
Pour les systèmes Internet des objets, les tests de maintenance peuvent être déclenchés par l’introduction d’objets complètement nouveaux ou modifiés, tels que des dispositifs matériels et des services logiciels, dans l’ensemble du système. Les tests de maintenance de ces systèmes mettent particulièrement l’accent sur les tests d’intégration à différents niveaux (par exemple, niveau réseau, niveau application) et sur les aspects de sécurité, en particulier ceux relatifs aux données personnelles.
2.4.2 Analyse d’impact pour la maintenance (K2)
L’analyse d’impact évalue les changements qui ont été apportés pour une version de maintenance afin d’identifier les conséquences prévues ainsi que des effets secondaires attendus et possibles d’un changement, et d’identifier les zones du système qui seront affectées par le changement. L’analyse d’impact peut également aider à identifier l’impact d’un changement sur les tests existants. Les effets secondaires et les zones affectées dans le système doivent être testés pour les régressions, éventuellement après la mise à jour des tests existants affectés par le changement.
L’analyse d’impact peut être effectuée avant qu’un changement ne soit apporté, pour aider à déterminer si le changement devrait être apporté en fonction des conséquences potentielles dans d’autres parties du système.
L’analyse d’impact peut être difficile si :
- Les spécifications (p. ex., exigences métier, User Stories, architecture) sont obsolètes ou manquantes
- Les cas de test ne sont pas documentés ou sont obsolètes
- La traçabilité bidirectionnelle entre les tests et les bases de test n’a pas été maintenue
- Le support de l’outillage est faible ou inexistant
- Les personnes impliquées n’ont pas de connaissance du domaine et/ou du système
- Une attention insuffisante a été accordée à la maintenabilité du logiciel au cours du développement
Chapitre 3 : Tests statiques
Termes
Revue ad hoc, revue basée sur des check-lists, test dynamique, revue formelle, revue informelle, inspection, relecture basée sur la perspective, revue, revue basée sur les rôles, revue basée sur des scénarios, analyse statique, test statique, revue technique, relecture technique.
3.1 Bases des tests statiques
Contrairement aux tests dynamiques, qui nécessitent l’exécution du logiciel testé, les tests statiques reposent sur l’examen manuel des produits d’activités (c.-à-d. les revues) ou sur une évaluation outillée du code ou d’autres produits d’activités (c.-à-d. l’analyse statique). Les deux types de tests statiques évaluent le code ou tout autre produit d’activités testé sans exécuter réellement le code ou le produit d’activités testé.
L’analyse statique est importante pour les systèmes informatiques critiques pour la sûreté (p. ex. logiciels aéronautiques, médicaux ou nucléaires), mais l’analyse statique est également devenue importante et courante dans d’autres contextes. Par exemple, l’analyse statique est une partie importante des tests de sécurité. L’analyse statique est aussi souvent incorporée dans les systèmes automatisés de build et de livraison, par exemple dans le développement Agile, en livraison en continu et en déploiement continu.
3.1.1 Produits d’activités qui peuvent être examinés par des tests statiques (K1)
Presque tous les produits d’activités peuvent être examinés à l’aide de tests statiques (revues et/ou analyses statiques), par exemple :
- Les spécifications, y compris les exigences métier, les exigences fonctionnelles et les exigences de sécurité
- Les épics, User Stories, et critères d’acceptation
- Les spécifications d’architecture et de conception
- Le code
- Le testware, y compris les plans de test, les cas de test, les procédures de test et les scripts de test automatisés
- Les guides utilisateur
- Les pages Web
- Les contrats, les plans de projet, les calendriers et les budgets
- Les modèles, tels que les diagrammes d’activité, qui peuvent être utilisés pour les tests basés sur des modèles (cf. syllabus Model-Based Testing, Niveau Fondation CFTL / ISTQB et Kramer 2016)
Les revues peuvent être appliquées à n’importe quel produit d’activités que les participants peuvent lire et comprendre. L’analyse statique peut être appliquée efficacement à tout produit d’activités ayant une structure formelle (généralement un code ou des modèles) pour lequel il existe un outil d’analyse statique approprié. L’analyse statique peut même être appliquée avec des outils qui évaluent les produits d’activités écrits en langage naturel comme les exigences (par exemple, vérification de l’orthographe, de la grammaire et de la lisibilité).
3.1.2 Bénéfices des tests statiques (K2)
Les techniques de tests statiques apportent plusieurs bénéfices. Lorsqu’ils sont appliqués tôt dans le cycle de vie du développement du logiciel, les tests statiques permettent la détection en amont des défauts avant que les tests dynamiques ne soient effectués (par exemple, lors de revues des exigences ou des spécifications de conception, l’affinement du backlog du produit, etc.). Les défauts détectés tôt sont souvent beaucoup moins chers à corriger que les défauts trouvés plus tard dans le cycle de vie, surtout en comparaison aux défauts trouvés après le déploiement et l’utilisation opérationnelle du logiciel.
Il est en effet presque toujours beaucoup moins coûteux pour l’organisation d’utiliser des techniques de tests statiques pour trouver des défauts et les corriger rapidement que d’utiliser des tests dynamiques pour trouver des défauts dans l’objet de test et ensuite les corriger, surtout lorsque l’on considère les coûts supplémentaires associés à la mise à jour d’autres produits d’activités et à l’exécution de tests de confirmation et de régression.
Parmi les autres avantages des tests statiques, on peut citer les points suivants :
- Détection et correction plus efficace des défauts, avant l’exécution des tests dynamiques
- Identification des défauts qui ne sont pas facilement décelables par des tests dynamiques
- Prévention des défauts de conception ou de codage par la découverte d’incohérences, d’ambiguïtés, de contradictions, d’omissions, d’inexactitudes et de redondances dans les exigences
- Augmentation de la productivité du développement (par exemple, grâce à une meilleure conception, à un code plus facile à maintenir)
- Réduction des coûts et des délais de développement
- Réduction des coûts et des délais des tests
- Réduction du coût total de la qualité tout au long de la durée de vie du logiciel, grâce à la réduction du nombre de défaillances plus tard dans le cycle de vie ou après la mise en service
- Amélioration de la communication entre les membres de l’équipe au cours de la participation aux revues
3.1.3 Différences entre les tests statiques et dynamiques (K2)
Les tests statiques et dynamiques peuvent avoir les mêmes objectifs (voir section 1.1.1), tels que fournir une évaluation de la qualité des produits d’activités et identifier les défauts le plus tôt possible. Les tests statiques et dynamiques se complètent mutuellement en trouvant différents types de défauts.
L’une des principales distinctions est que les tests statiques détectent directement les défauts dans les produits d’activités plutôt que d’identifier les défaillances causées par des défauts lorsque le logiciel est exécuté. Un défaut peut résider dans un produit d’activités pendant très longtemps sans causer une défaillance. Le chemin où se trouve le défaut peut être rarement exercé ou difficile à atteindre, de sorte qu’il ne sera pas facile de construire et d’exécuter un test dynamique qui mette en évidence ce défaut. Les tests statiques peuvent permettre de trouver le défaut avec beaucoup moins d’efforts.
Une autre distinction est que les tests statiques peuvent être utilisés pour améliorer la cohérence et la qualité interne des produits d’activités, tandis que les tests dynamiques se concentrent généralement sur les comportements visibles de l’extérieur.
Par rapport aux tests dynamiques, les défauts qui sont habituellement plus faciles et moins coûteux à trouver et à corriger grâce aux tests statiques sont les suivants :
- Défauts dans les exigences (p. ex. incohérences, ambiguïtés, contradictions, omissions, inexactitudes et redondances)
- Défauts dans la conception (p. ex. algorithmes ou structures de base de données inefficaces, taux de dépendance élevé, faible cohésion)
- Défauts dans le code (p. ex. variables avec des valeurs non définies, variables déclarées mais jamais utilisées, code inatteignable, code dupliqué)
- Ecarts par rapport aux normes (p. ex. non-respect des règles de codage)
- Spécifications d’interface incorrectes (p. ex. unités de mesure utilisées par le système appelant différentes de celles utilisées par le système appelé)
- Vulnérabilités de sécurité (p. ex. sensibilité aux débordements de la mémoire tampon)
- Lacunes ou inexactitudes dans la traçabilité ou la couverture des bases de test (p. ex., des tests manquants pour un critère d’acceptation)
De plus, la plupart des défauts de maintenabilité ne peuvent être trouvés que par des tests statiques (par exemple, une modularité inadéquate, une mauvaise réutilisation des composants, un code difficile à analyser et à modifier sans introduire de nouveaux défauts).
3.2 Processus de revue
Les revues varient d’informelles à formelles. Les revues informelles se caractérisent par le fait qu’elles ne suivent pas un processus défini et n’ont pas de résultats formels documentés. Les revues formelles sont caractérisées par la participation de l’équipe, la documentation des résultats de la revue et la documentation des procédures pour la conduite de la revue Le caractère formel d’un processus de revue est lié à des facteurs tels que le modèle de cycle de vie de développement du logiciel, la maturité du processus de développement, la complexité du produit d’activités à revoir, toute exigence légale ou réglementaire, et/ou la nécessité d’une traçabilité d’audit.
La focalisation d’une revue dépend des objectifs fixés pour la revue (par exemple, trouver des défauts, gagner en compréhension, former les participants tels que des testeurs et de nouveaux membres de l’équipe, ou discuter et décider par consensus).
La norme ISO (ISO/CEI 20246) contient des descriptions plus détaillées du processus de revue des produits d’activités, y compris les rôles et les techniques de revue.
3.2.1 Processus de revue de produits d’activités (K2)
Le processus de revue comprend les principales activités suivantes :
Planification
- Définir le périmètre, qui comprend le but de la revue, les documents ou parties de documents à revoir et les caractéristiques de qualité à évaluer
- Estimer l’effort et le temps requis
- Identifier les caractéristiques de la revue telles que le type de revue avec les rôles, les activités et les checklists
- Sélectionner les personnes qui participeront à la revue et attribuer des rôles
- Définir des critères d’entrée et de sortie pour les types de revue plus formels (p. inspections)
- Vérifier que les critères d’entrée soient satisfaits (pour les types de revue plus formels)
Lancement de la revue
- Distribuer le produit d’activités (physiquement ou par voie électronique) et d’autres documents, comme des formulaires de saisie des défauts, des checklists et des produits d’activités connexes
- Expliquer le périmètre, les objectifs, le processus, les rôles et les produits d’activités aux participants
- Répondre à toutes les questions que les participants peuvent avoir au sujet de la revue
Revue individuelle (c.-à-d. préparation individuelle)
- Revoir tout ou partie du produit d’activités
- Noter les défauts potentiels, les recommandations et les questions
Communication et analyse des problèmes
- Communiquer les défauts potentiels identifiés (p. ex. lors d’une réunion de revue)
- Analyser les défauts potentiels, leur affecter un responsable et un statut
- Évaluer et documenter les caractéristiques de qualité
- Évaluer les résultats de la revue en fonction des critères de sortie pour prendre une décision de revue (rejet ; changements majeurs nécessaires ; acceptation, éventuellement avec des changements mineurs)
Correction et production de rapports
- Produire des rapports de défauts pour les constatations qui nécessitent des changements
- Corriger les défauts trouvés (correction généralement réalisée par l’auteur) dans le produit d’activités revu
- Communiquer les défauts à la personne ou à l’équipe concernée (lorsqu’ils se trouvent dans un produit d’activités lié au produit d’activités revu)
- Enregistrer l’état actualisé des défauts (dans les revues formelles), y compris éventuellement l’accord de l’auteur du commentaire concerné
- Recueillir des métriques (pour les types de revue plus formels)
- Vérifier que les critères de sortie sont satisfaits (pour les types de revue plus formels)
- Accepter le produit d’activités lorsque les critères de sortie sont satisfaits
Les résultats de la revue d’un produit d’activités varient selon le type de revue et le degré de formalisme, tel que décrit à la section 3.2.3.
3.2.2 Rôles et responsabilités dans une revue formelle (K1)
Une revue formelle comprendra les rôles suivants :
Auteur
- Crée le produit d’activités revu
- Corrige les défauts du produit d’activités revu (si nécessaire)
Manager
- Est responsable de la planification de la revue
- Décide de la mise en œuvre des revues
- Affecte le personnel, le budget et le temps
- Vérifie le rapport coût-efficacité en continu
- Met en œuvre les mesures appropriées en cas de résultats inadéquats
Facilitateur (souvent appelé modérateur)
- Assure le bon déroulement des réunions de revue (quand elles ont lieu)
- Fait la médiation, si nécessaire, entre les différents points de vue
- Est souvent la personne dont dépend le succès de la revue
Responsable de la revue
- Prend la responsabilité générale de la revue
- Décide qui sera impliqué et organise quand et où elle aura lieu
Réviseurs
- Il peut s’agir d’experts du domaine, de personnes travaillant sur le projet, d’intervenants ayant un intérêt pour le produit d’activités et/ou de personnes ayant des compétences techniques ou métier spécifiques
- Ils identifient les défauts potentiels du produit d’activités à revoir
- Ils peuvent représenter différentes perspectives (p. ex. testeur, programmeur, utilisateur, opérateur, analyste métier, expert en utilisabilité, ).
Scribe (ou rapporteur)
- Recueille les défauts potentiels découverts au cours de l’activité de revue individuelle
- Enregistre les nouveaux défauts potentiels, les points en suspens et les décisions prises lors de la réunion de revue (durant son déroulement)
Dans certains types de revue, une personne peut endosser plusieurs rôles, et les actions associées à chaque rôle peuvent également varier en fonction du type de revue. En outre, avec des outils d’aide à la revue, en particulier la saisie des défauts, des points ouverts et des décisions, il est souvent inutile d’avoir recours à un scribe.
Des rôles plus détaillés sont possibles, comme décrit dans la norme ISO (ISO/CEI 20246).
3.2.3 Types de revue (K2)
Bien que les revues puissent être utilisées à diverses fins, l’un des principaux objectifs est de découvrir des défauts. Tous les types de revue peuvent aider à la détection des défauts, et le type de revue sélectionné doit être basé sur les besoins du projet, les ressources disponibles, le type de produit et les risques, le domaine d’activité et la culture de l’entreprise, entre autres critères de sélection.
Les revues peuvent être classées en fonction de leurs différentes caractéristiques. Voici la liste des quatre types de revues les plus courants et les caractéristiques qui leur sont associées.
Revue informelle (p. ex., par un collègue, en binôme, revue de pair)
- Objectif principal : détecter d’éventuels défauts
- Autres objectifs possibles : générer de nouvelles idées ou solutions, résoudre rapidement des problèmes mineurs
- Ne repose pas sur un processus formel (documenté)
- Peut ne pas comporter de réunion de revue
- Peut être effectué par un collègue de l’auteur ou par d’autres personnes
- Les résultats peuvent être documentés
- L’utilité varie selon les réviseurs
- L’utilisation de checklists est facultative
- Très couramment utilisé dans le développement Agile
Relecture technique
- Principaux objectifs : trouver des défauts, améliorer le produit logiciel, envisager des implémentations alternatives, évaluer la conformité aux normes et aux spécifications
- Autres objectifs possibles : échange d’idées sur des techniques ou des variations de style, formation des participants, obtention d’un consensus
- La préparation individuelle avant la réunion de revue est facultative
- La réunion de revue est généralement dirigée par l’auteur du produit d’activités
- Le rôle de scribe est obligatoire
- L’utilisation de checklists est facultative
- Peut prendre la forme de scénarios, d’essais à blanc ou de simulations
- Des rapports de défauts et des rapports de revue peuvent être produits
- Peut varier dans la pratique de plutôt informel à très formel
Revue technique
- Principaux objectifs : obtention d’un consensus, détection de défauts potentiels
- Autres objectifs possibles : évaluer la qualité et renforcer la confiance dans le produit d’activités revu, générer de nouvelles idées, motiver et permettre aux auteurs d’améliorer les produits d’activités futurs, envisager des implémentations alternatives
- Les réviseurs doivent être des pairs techniques de l’auteur et des experts techniques dans la même discipline ou dans d’autres disciplines
- Une préparation individuelle avant la réunion de revue est requise
- La réunion de revue est facultative, et de préférence dirigée par un facilitateur formé (généralement pas l’auteur)
- Le rôle de scribe est obligatoire, de préférence pas l’auteur
- L’utilisation de checklists est facultative
- Des rapports de défauts et des rapports de revue sont généralement produits
Inspection
- Principaux objectifs : détecter les défauts potentiels, évaluer la qualité et renforcer la confiance dans le produit d’activités, prévenir de futurs défauts similaires par l’apprentissage de l’auteur et l’analyse des causes racines
- Autres objectifs possibles : motiver et permettre aux auteurs d’améliorer les futurs produits d’activités et le processus de développement de logiciels, parvenir à un consensus
- Suit un processus défini avec des résultats formels documentés, basé sur des règles et des checklists
- Utilise des rôles clairement définis, comme ceux spécifiés à la section 3.2.2 qui sont obligatoires, et peut inclure un lecteur spécialisé (qui lit le produit d’activités à haute voix pendant la réunion de revue)
- Une préparation individuelle avant la réunion de revue est requise
- Les réviseurs sont soit des pairs de l’auteur, soit des experts dans d’autres disciplines pertinentes pour le produit d’activités concerné
- Des critères d’entrée et de sortie spécifiés sont utilisés
- Le rôle de scribe est obligatoire
- La réunion de revue est dirigée par un facilitateur formé (pas l’auteur)
- L’auteur ne peut pas agir à titre de responsable de la revue, de lecteur ou de scribe
- Des rapports de défauts et des rapports de revue sont produits
- Des métriques sont collectées et utilisées pour améliorer l’ensemble du processus de développement logiciel, y compris le processus d’inspection
Un même produit d’activités peut faire l’objet de plus d’un type de revue. Si plus d’un type de revue est utilisé, l’ordre peut varier. Par exemple, une revue informelle peut être effectuée avant une revue technique, afin de s’assurer que le produit d’activités est prêt pour une revue technique.
Les types de revue décrits ci-dessus peuvent être effectués sous forme de revue par les pairs, c’est-à- dire par des collègues à un niveau organisationnel sensiblement similaire.
Les types de défauts constatés lors d’une revue varient principalement en fonction du produit d’activités examiné. Voir la section 3.1.3 pour des exemples de défauts qui peuvent être trouvés par des revues dans différents produits d’activités, et voir Gilb 1993 pour des informations sur les inspections formelles.
3.2.4 Application des techniques de revue (K3)
Il existe un ensemble de techniques de revue qui peuvent être appliquées au cours de l’activité de revue individuelle (c.-à-d., préparation individuelle) pour découvrir des défauts. Ces techniques peuvent être utilisées pour tous les types de revue décrits ci-dessus. L’efficacité des techniques peut varier selon le type de revue utilisée. Voici des exemples de différentes techniques de revue individuelles pour différents types de revue.
Ad hoc
Dans le cadre d’une revue ad hoc, les réviseurs reçoivent peu ou pas de directives sur la façon dont cette tâche devrait être accomplie. Les réviseurs examinent généralement le produit d’activités de façon séquentielle, en identifiant et en documentant les problèmes au fur et à mesure qu’ils les rencontrent. La révision ad hoc est une technique couramment utilisée qui nécessite peu de préparation. Cette technique dépend fortement des compétences des réviseurs et peut donner lieu à des constats qui font double emploi car signalés par différents réviseurs.
Basée sur les checklists
Une revue basée sur une checklist est une technique systématique, pour laquelle les réviseurs détectent les problèmes sur la base de checklist qui sont distribuées au début de la revue (par exemple, par le facilitateur). Une checklist consiste en une série de questions basées sur des défauts potentiels, qui peuvent être issus de l’expérience. Les checklists devraient être spécifiques au type de produit d’activités examiné et devraient être mises à jour régulièrement pour couvrir les types de problèmes qui ont été omis lors de revues précédentes. Le principal avantage de la technique basée sur les checklists est la couverture systématique des types de défauts courants. Il faut prendre soin de ne pas simplement suivre la checklist lors de la revue individuelle, mais aussi de rechercher des défauts en dehors de la checklist.
Scénarios et essais à blanc
Dans le cadre d’une revue fondée sur des scénarios, les réviseurs reçoivent un guide structuré sur la façon de lire le produit d’activités. Une approche fondée sur des scénarios aide les réviseurs à effectuer des “essais à blanc” sur le produit d’activités en fonction de l’utilisation prévue du produit d’activités (si le produit d’activités est documenté dans un format approprié, comme les cas d’utilisation par exemple).
Ces scénarios permettent aux réviseurs d’être mieux guidés sur la façon d’identifier des types de défauts spécifiques qu’avec uniquement les éléments d’une checklist. Comme pour les revues basées sur des checklists, afin de ne pas manquer certains types de défauts (p. ex., des caractéristiques manquantes), les réviseurs ne devraient pas être limités aux scénarios documentés.
Basée sur les rôles
Une revue basée sur les rôles est une technique par laquelle les réviseurs évaluent le produit d’activités du point de vue de rôles individuels des parties prenantes. Les rôles typiques comprennent des types d’utilisateurs finaux spécifiques (expérimentés, inexpérimentés, seniors, enfants, etc.) et des rôles spécifiques dans l’organisation (administrateur utilisateur, administrateur système, testeur de performance, etc.).
Basée sur la perspective
Dans une lecture basée sur la perspective, de façon semblable à une revue basée sur les rôles, les réviseurs adoptent différents points de vue des parties prenantes dans le cadre d’une revue individuelle. Les points de vue habituels des parties prenantes comprennent l’utilisateur final, le marketing, le concepteur, le testeur ou les opérations. L’utilisation de différents points de vue des parties prenantes permet d’approfondir la revue individuelle avec moins de doublons de défauts entre les réviseurs.
De plus, la lecture basée sur la perspective exige également que les réviseurs essaient d’utiliser le produit d’activités revu pour produire le produit qu’ils en tireraient. Par exemple, un testeur pourrait essayer de générer des brouillons de tests d’acceptation en réalisant une lecture basée sur la perspective d’une spécification des exigences pour voir si toute l’information nécessaire est bien incluse. De plus, dans le cadre de la lecture basée sur la perspective, on s’attend à ce que des checklists soient utilisées.
Des études empiriques ont montré que la lecture basée sur la perspective est la technique générale la plus efficace pour revoir des exigences et des produits d’activités techniques. Un facteur clé de succès est l’inclusion et la prise en compte appropriée de différents points de vue des parties prenantes, en fonction des risques. Voir Shul 2000 pour plus de détails sur la lecture basée sur la perspective, et Sauer 2000 pour l’efficacité des différents types de revue.
3.2.5 Facteurs de réussite des revues (K2)
Pour que la revue soit réussie, il faut tenir compte du type de revue approprié et des techniques utilisées. De plus, un certain nombre d’autres facteurs influent sur les résultats de la revue.
Les facteurs de réussite organisationnels pour les revues incluent :
- Chaque revue a des objectifs clairs, définis lors de la planification de la revue et utilisés comme critères de sortie mesurables
- Le type de revue est choisi en fonction des objectifs, du type et du niveau des produits d’activités logiciels, mais aussi en tenant compte des participants
- Toutes les techniques de revue utilisées, telles que la revue basée sur les checklists ou sur les rôles, sont appropriées pour l’identification efficace des défauts dans le produit d’activités à revoir
- Toutes les checklists utilisées couvrent les principaux risques et sont actualisées
- Les documents volumineux sont rédigés et révisés en petits morceaux, de sorte que le contrôle de la qualité est réalisé en fournissant aux auteurs un feed-back précoce et fréquent sur les défauts
- Les participants ont suffisamment de temps pour préparer
- Les revues sont planifiées avec un délai de notification suffisant
- Le management appuie le processus de revue (p. ex. en intégrant suffisamment de temps pour les activités de revue dans les échéanciers des projets)
Les facteurs de succès liés aux participants aux revues sont les suivants :
- Le choix des bonnes personnes contribue à l’atteinte des objectifs de la revue, par exemple, des personnes ayant des compétences ou des perspectives différentes, qui peuvent utiliser le document comme intrant de leurs activités
- Les testeurs sont considérés comme des réviseurs appréciés qui contribuent à la revue et aussi apprennent à propos du produit d’activités revu, ce qui leur permet de produire des tests plus efficaces et de préparer ces tests plus tôt
- Les participants consacrent suffisamment de temps et d’attention aux détails
- Les revues sont effectuées sur de petits morceaux, de sorte que les réviseurs ne perdent pas leur concentration pendant la revue individuelle et/ou la réunion de revue (quand elle a lieu)
- Les défauts trouvés sont identifiés, compris et traités avec objectivité
- La réunion est bien gérée, de sorte que les participants considèrent qu’il s’agit d’une utilisation efficace de leur temps
- La revue est menée dans un climat de confiance ; le résultat ne sera pas utilisé pour l’évaluation des participants
- Les participants évitent le langage corporel et les comportements qui pourraient indiquer l’ennui, l’exaspération ou l’hostilité envers les autres participants
- Une formation adéquate est fournie, en particulier pour les types de revue plus formels tels que les inspections
- Une culture de l’apprentissage et de l’amélioration des processus est encouragée
Chapitre 4 : Techniques de test
Termes
Technique de test de boîte-noire, analyse des valeurs limites, test basé sur les checklists, couverture, couverture des décisions, test de tables de décision, estimation d’erreur, partitions d’équivalence, technique de test basée sur l’expérience, test exploratoire, test des transitions d’état, , technique de test, test des cas d’utilisation, technique de test de boîte-blanche.
4.1 Catégories de techniques de test (K2)
L’objectif d’une technique de test, y compris celles présentées dans cette section, est d’aider à identifier les conditions de test, les cas de test et les données de test.
4.1.1 Choix des techniques de test
Le choix des techniques de test à utiliser dépend d’un certain nombre de facteurs, dont les suivants :
- Type de composant ou de système
- Complexité du composant ou des systèmes
- Normes réglementaires
- Exigences client ou contractuelles
- Niveaux de