6.2Perspectives
6.2.1La génération de test pour le diagnostic
Le diagnostic est l’étape du test qui consiste à localiser et corriger une erreur lorsqu’un cas de test a échoué. L’impact de la stratégie de test choisie sur l’efficacité du diagnostic est largement reconnue. Cependant, très peu de travaux se sont intéressés à quantifier cet impact. Sur ce point, nous avons commencé une nouvelle étude qui, à partir de l’analyse des algorithmes de diagnostic, définit des critères de test pour une localisation efficace des erreurs dans un programme. Nous utilisons ensuite un algorithme bactériologique pour générer automatiquement des cas de test qui vérifient ces critères. Les expériences devraient nous permettre d’étudier l’efficacité des cas de test générés pour la localisation d’erreurs, ainsi que la validité du modèle de diagnosabilité proposé dans cette thèse.
6.2.2Les contrats comme oracle de test
Au cours de cette thèse, nous avons commencé, en collaboration avec une équipe de l’université de Carleton à Ottawa, à étudier certaines propriétés des contrats qui permettraient d’évaluer leur efficacité pour la détection d’erreur. L’idée initiale était de prioritiser les cas de test qui nécessitent un oracle explicite en présence de contrats. En effet, notre idée était d’observer les traces d’exécution des cas de test, et de classer ensuite les cas de test en fonction de la qualité des contrats le long du flot d’exécution de chacun. On obtiendrait alors un ensemble de cas de test qui exécutent des parties du système dans lesquelles les contrats sont faibles (détectent peu d’erreurs), et pour lesquels ils faudrait écrire un oracle explicite. La définition de l’oracle pour les cas de test exécutant des contrats efficaces pourrait être reportée à plus tard. Faute de temps, ces travaux n’ont pas pu aboutir, mais cela semble être une perspective intéressante pour la diminution de l’effort de test (en facilitant l’écriture de la fonction d’oracle).
6.2.3Transformation de modèles pour la testabilité
Globalement, et notre travail a tendu vers cela dans un but préventif, il doit être possible d’accompagner toutes les étapes de raffinement de l’analyse et de la conception en transformant les modèles de telle sorte qu’on évite ou limite une dégradation de la testabilité. Un cas particulier de transformation de modèle dont la testabilité peut être contrôlée concerne les design patterns évoqués ci-après. Dans la mesure où – dans le contexte du
mde (Model Driven Enginnering) – on dispose d’un langage de transformation, défini au niveau méta, alors cette technique pourrait être appliquée de façon systématique à toute transformation identifiée et cataloguée. Ainsi, l’ajout de stéréotypes lors de l’application de design patterns serait vue comme une transformation de modèle, et pourrait être automatisée pour rendre les instances de design patterns testables dans un diagramme de classes.
6.2.4Design patterns et test
En forçant la distribution du contrôle à travers plusieurs classes, les design patterns rendent plus difficiles l’expression de contrats locaux à une classe. Un point intéressant pour la suite serait de reprendre l’étude da la rédaction de contrats efficaces dans le cadre d’une conception fondée sur les patterns, et d’explorer les points suivants :
existe-t-il des règles spécifiques pour la rédaction de contrats lors de l’application de design patterns ?
les contrats peuvent-ils être efficaces pour la détection d’erreur lors de l’application de design patterns ?