|
Le test des
logiciels, un passage obligé dans la course à la
qualité
Par François ANCEAU,
professeur au Conservatoire national des arts et métiers*;
professeur chargé de cours à l'Ecole polytechnique.
Les logiciels sont de plus en plus impliqués
dans notre vie de tous les jours. Pour s'en persuader,
il suffit de savoir que dans notre carte bancaire, notre
téléphone portable, notre voiture, nos appareils électroménagers
et audio-visuels, notre montre, des ordinateurs miniatures
exécutent du logiciel. De même, les différents
transports en commun que nous utilisons, du métropolitain à l'avion
en passant par l'autobus, contiennent un nombre variable
d'ordinateurs. Les différents services auxquels
nous avons recours tels que les banques, l'administration,
les achats et les réservations sont tous gérés
par des ordinateurs.
Cette myriade de machines et de logiciels acquiert de fait une importance grandissante
dans la société. Qui ne se souvient pas d'une panne d'ordinateur à la
SNCF ou pour l'enregistrement d'un voyage aérien ? La défaillance
d'un système informatique peut avoir des conséquences souvent
fâcheuses, mais qui, par exemple, peuvent devenir graves lorsqu'il s'agit
de la commande des freins d'une automobile.
Il est théoriquement impossible d'affirmer systématiquement qu'un
logiciel fera bien ce qu'il doit faire, en partie parce qu'il est très
difficile d'exprimer sans erreur ce que l'on attend de lui. Pour contourner
cette impossibilité théorique, des techniques empiriques ont été développées
pour tester le logiciel.
Le test des logiciels repose en fait sur deux piliers.
Le premier concerne l'organisation et le caractère méthodique
du travail d'écriture et de vérification du logiciel, ainsi que
sur l'attitude psychique que l'on doit avoir vis à vis de la qualité du
logiciel pendant ces travaux. Plus le travail est méthodique et réalisé dans
un but d'amélioration de la qualité sans exagération,
plus le logiciel est fiable (c'est d'ailleurs l'esprit des normes de qualité).
Le second pilier comprend un certain nombre de techniques destinées à solliciter
le plus efficacement possible les logiciels pour qu'ils révèlent
leurs erreurs. On distingue les techniques de test dites "fonctionnelles" qui
considèrent le logiciel à tester comme une "boite noire" et
se contentent de vérifier qu'il produit des sorties conformes aux prévisions.
A l'opposé, les techniques de test dites "structurelles" supposent
la connaissance intime du codage des programmes. Leur objectif est de les parcourir
le plus exhaustivement possible de manière à s'assurer qu'ils
ne contiennent pas de séquences qui provoqueraient leur arrêt
catastrophique. On parle de "taux de couverture" pour mesurer la
proportion du code d'un programme qui a été parcourue par un
ensemble de tests structurels.
Une nouvelle technique, très prometteuse, est en train d'émerger
doucement car sa gestation à partir de l'informatique théorique
est laborieuse. Il s'agit de la vérification statique qui consiste à vérifier,
par une analyse du code source d'un programme, que celui-ci ne va pas faire
d'erreurs de "bonne conduite" comme par exemple adresser un tableau
en dehors de ses bornes ou tenter d'exécuter une division par zéro.
Quelques outils (très complexes) commencent à exister. Ceux-ci
sont utilisés pour la vérification des applications critiques,
mais l'implication de grandes compagnies logicielles comme Microsoft devrait
inciter à un emploi plus large de ces techniques.
Le coût du test "complet" d'un logiciel est théoriquement
aussi élevé que celui de sa réalisation. A cause de cela,
l'ampleur des tests est "modulée" en fonction de la nature
de ce logiciel. S'il s'agit d'un logiciel engagé dans une opération
critique comme le pilotage d'une navette spatiale ou d'un métro automatique,
le budget consacré aux tests est maximal, ce qui n'est peut être
pas toujours le cas pour un logiciel de gestion d'une entreprise…
Le suivi de l'amélioration de la qualité d'un logiciel est réalisé par
des techniques statistiques qui s'appuient sur des modèles issus de
l'expérience pour évaluer la diminution du nombre des erreurs
résiduelles en fonction du déroulement des opérations
de test. Il est notoire de constater que pour des raisons de coût, la
majorité des logiciels sont insuffisamment testés. Toutefois,
le fait de tester prioritairement que les scénarios les plus catastrophiques
ne se produiront pas, a un côté rassurant.
* chaire des techniques fondamentales de l'informatique
|