|
|
Action Spécifique no. 23 |
Introduction
Le coût de la validation d'un système informatique représente au moins la moitié de son coût total de développement, et peut atteindre les trois quarts pour les systèmes fortement critiques. Cette activité fait appel à différentes techniques dont les plus connues sont l'analyse statique, le model-checking, la preuve et le test. Bien qu'il soit une technique de vérification partielle, le test restera toujours incontournable, car il permet d'observer le comportement dynamique de l'implémentation finale. Il procède par activation du système en lui fournissant des entrées (données valuées, événements), et par observation des résultats selon une procédure déterminant leur acceptation ou leur rejet. Sauf cas exceptionnel, le test exhaustif est impossible, et on est amené à sélectionner de manière pertinente un (petit) sous-ensemble des trajectoires possibles dans le domaine d'entrée et dans la spécification.
Les méthodes de test ont notamment été marquées par des avancées et de nombreux travaux pour la vérification de conformité par rapport à une spécification, dans un contexte de test boîte noire, blanche ou grise. Selon le formalisme utilisé pour décrire le comportement attendu, différentes méthodes de détermination des entrées de test ont été définies, permettant la génération automatique de jeux de test selon des procédés déterministes ou probabilistes. Ces méthodes ont bénéficié d'une part du développement de méthodes formelles de spécification, et d'autre part de résultats sur des techniques de vérification de modèles. Un problème encore peu étudié concerne cependant le test de la robustesse d'un système par rapport à des sollicitations quelconques - y compris erronées ou inopportunes - de son environnement.
Ce problème est pourtant appelé à prendre une importance accrue, en particulier dans des systèmes critiques ou embarqués, si l'on considère certaines évolutions récentes tant dans les méthodes d'ingénierie que dans les types d'utilisation des systèmes. Les nouveaux paradigmes de conception à base de composants réutilisables impliquent l'intégration de ces composants dans des contextes applicatifs qui peuvent fortement varier : le test de ces composants doit prendre en compte la diversité des utilisations potentielles, d'une part pour consolider leur aptitude à réagir correctement aux sollicitations, et d'autre part pour permettre l'identification explicite de leurs modes de défaillances, facilitant ainsi la mise en uvre de parades lors de leur intégration. A un niveau plus macroscopique, le déploiement de systèmes embarqués critiques, devant remplir leur mission de façon autonome en dépit d'aléas, et en particulier de fautes internes ou externes, impose là encore de fortes contraintes de robustesse. Enfin, la tendance croissante à l'interconnexion et à la répartition renforce le caractère inconnu et incertain - voire même malveillant (pirates informatiques, ) - de l'environnement des systèmes informatiques.
Le test de robustesse est donc le verrou technologique que cette action spécifique se propose d'aborder. Les systèmes informatiques visés sont des systèmes à logiciel prépondérant, critiques ou embarqués.