Assurance Qualité des Logiciels

Software Engineering · notes

Browse all génie logiciel documents

Assurance Qualité des

Logiciels

Chapitre 1

Dr. Imene Ben Hafaiedh

MP2L

Des bugs, des conséquences désastreuses...

• Service d’ambulances de Londres LAS [

1994] : 20 -30 morts

• Le Therac-25 [juillet 1985 ->avril 1986] : 3

morts

• Le crash d'AT&T [15 janvier 1990] : pertes

financières énormes + la réputation d'AT&T

entachée.

• Le Pentium [juin 1994] : pertes financières

énormes + psychose

• Ariane 5-01 [4 juin 1996]

Le coût d’un Bug ?

Coût du bug de l’an 2000 ? Quelques chiffres

avancés : 300, 1600 ou même 5 000 milliards de

dollars.

Quel impact ?

• Sécurité́ des personnes,

• Retour des produits,

• Relations contractuelles,

• Notoriété, image,

⇒ Nécessité de « vérifier » certains

logiciels/systèmes

Nécessité́ de la Validation, Vérification et Test

(VVT)

Vérification:

  • le développement est-il correct par rapport à la

spécification initiale ?

  • Est-ce que le logiciel fonctionne correctement?

Validation:

  • a-t-on décrit le « bon » système ?
  • est-ce que le logiciel fait ce que le client veut ?

Test:

  • nécessaire : permet de découvrir des erreurs
  • non exhaustif mais facile à mettre en œuvre (bon

rapport qualité/temps)

Assurance qualité des Logiciels

• Objectif: accroitre les chances d’obtenir un

logiciel qui corresponde à ses objectifs (son

cahier des charges).

• Elle permet de mettre en œuvre un ensemble de

dispositions qui vont être prises tout au long des

différentes phases de fabrication d’un logiciel

Assurance qualité des Logiciels

La mesure de la qualité d’un logiciel se fait selon

plusieurs dimensions:

En termes opérationnels:

ü Correction, fiabilité, sûreté: le logiciel réalise-t-il

les fonctions demandées et à quel niveau ?

ü Intégrité, sécurité : résiste-t-il aux attaques intentionnelles

ou aux maladresses de l’utilisateur ?

ü Efficacité, performance: quelles ressources le logiciel

requiert-il (temps, mémoire)?

ü Facilité d’utilisation

Assurance qualité des Logiciels

Advertisement

La qualité du logiciel se mesure également en terme de

facilité de développement :

En termes opérationnels:

ü Maintenabilité : facilité à détecter et corriger des erreurs

ü Flexibilité́ : facilité à faire évoluer le logiciel ou l’adapter

ü Testabilité : facilité à dérouler une campagne de test

Assurance qualité des Logiciels

La qualité d’un logiciel peut également être évaluée sous

l’angle de l’intégration :

En termes opérationnels:

ü Interopérabilité : capacité à interagir avec d’autres systèmes

ü Réutilisabilité : de tout ou partie

ü Portabilité : vers d’autres plateformes (OS, application, ...)

Qualité et CMMI

Certain nombre de modèles d’organisation de la politique

de qualité (du logiciel ou du système) ont émergé:

Le modèle CMMI (Capability Maturity Model +

Integration) :

Il décrit 5 niveaux de maturité́ d’une organisation, mesurant

le degré auquel celle-ci a déployé explicitement et de façon

cohérente des processus qui sont documentés, gérés,

mesurés, contrôlés et continuellement améliorés.

• Niveau 1 : « l’ère des héros » (tout repose sur le développeur)

•Niveau 2 : plus classique, le chef de projet joue un rôle

important, le management et les ingénieurs ont une idée de

l’avancement global du projet qui peut être mesuré

quantitativement . . .

•Niveau 3 : l’entreprise dispose d’un référentiel qui permet de

capitaliser l’expérience acquise lors des projets

•Niveau 4 : gestion quantitative des processus (on fait des

statistiques pour repérer les problèmes)

•Niveau 5 : on optimise en permanence les processus sur la base

des analyses statistiques

Génie Logiciel

§ Le GL est une réponse à la "crise du logiciel"

§ erreurs, budgets et échéances dépassés

§ Le GL est une démarche d'ingénierie

§ définition de processus, de méthodes et d'outils

§ s'applique à tous les aspects du logiciel

§ Il existe de nombreux processus, méthodes et

techniques qu'il faut choisir au mieux

§ sans trop en faire !

Processus logiciels

§ Les processus logiciels définissent les activités liées

à la production de logiciels

§ Tous les processus incluent les phases :

§ de spécification du logiciel

§ de conception du logiciel

§ d'implantation du logiciel

§ de vérification / validation / Test (VVT)

Nécessité́ de la Validation, Vérification et Test

(VVT)

Vérification:

  • le développement est-il correct par rapport à la

spécification initiale ?

  • Est-ce que le logiciel fonctionne correctement?

Validation:

Advertisement

  • a-t-on décrit le « bon » système ?
  • est-ce que le logiciel fait ce que le client veut ?

Test:

  • nécessaire : permet de découvrir des erreurs
  • non exhaustif mais facile à mettre en œuvre (bon

rapport qualité/temps)

Définition du test

§ Tester un logiciel, c'est :

§ exécuter le logiciel

§ en maîtrisant les données en entrée

§ en s’assurant que le comportement est celui attendu

§ Maîtrise des entrées

§ sélectionner assez de données

§ mais pas trop

§ Vérification du comportement

§ pouvoir observer le comportement

§ adopter une vision critique

Exécution des tests

§ « à la main »

§ Programmes de test / batch

§ Utilisation d’outils spécialisés

§ J-unit

§ Cpp-unit

§ …

Pourquoi tester ?

§ C’est la question clé

§ Pourquoi est-ce que vous testez ?

Pourquoi tester ? (2)

§ On attend du logiciel certaines propriétés

§ adéquation aux besoins

§ absence d’erreur, robustesse,

§ performances, ...

§ Preuves formelles ou autres techniques

§ Pas toujours possibles

§ Pas toujours convaincantes

§ Est-ce que vous accepteriez de monter dans un avion qui

n’a jamais été testé en vol mais dont les fabricants vous

garantissent qu’ils ont «!prouvé!» que tout allait bien se

passer ?

Types de test – ce que l’on veut tester!

l Tests nominal ou test de bon fonctionnement

n Les cas de test correspondent à des données d’entrée

valide: Test-to-pass

l Tests de robustesse.

Les cas de test correspondent à des données d’entrée

invalides : Test-to-fail

l Règle usuelle : Les tests nominaux sont passés avant les

tests de robustesse

l Tests de performance

nn Load testing (test avec montée en charge)

nn Stress testing (soumis à des demandes de ressources

anormales)

Pourquoi tester ? (2)

§ On attend du logiciel certaines propriétés

§ adéquation aux besoins

§ absence d’erreur, robustesse,

§ performances, ...

§ Preuves formelles ou autres techniques

§ Pas toujours possibles

Advertisement

§ Pas toujours convaincantes

§ Est-ce que vous accepteriez de monter dans un avion qui

n’a jamais été testé en vol mais dont les fabricants vous

garantissent qu’ils ont «!prouvé!» que tout allait bien se

passer ?

Pourquoi tester ? (3)

§ Soit une propriété attendue

§ Exemple : absence d ’erreur

§ Le test ne peux pas garantir que la propriété est vraie

§ Si un contre-exemple est trouvé, on a la preuve que la

propriété est fausse

§ Tester : rechercher des erreurs (Myers 79)

Types de tests

On caractérise l’activité de test en fonction

§ de son objectif

§ Test de conformité

§ Test de performances, test de montée en charge

§ Test de non régression

§ du moment ou il effectué dans le développement

§ Test unitaire

§ Test d’intégration

§ Test système

§ Test d’acceptation (ou de recette)

§ Test de non-régression

Types de test (2)

Analyse

des besoins

Test d’acceptation

Spécification

Tests système

Conception

globale

Tests

d’intégration

Conception

détaillée

Tests

unitaires

Codage

Pourquoi le test est difficile (1)

§ Difficultés théoriques

§ On ne peut pas tout tester

§ Infinité de données et/ou pas le temps/argent

§ Quelles données choisir ?

§ Comment décider que le résultat est correct ?

§ Quand peut-on / doit-on s’arrêter ?

§ Difficulté psychologique

§ Programmation : activité constructive

§ Test : activité « destructive »

§ Il est difficile de détruire ce que l’on a construit

Difficulté du test

Limite théorique = Notion d'indécidabilité

Propriété indécidable = qu'on ne pourra jamais prouver dans

le cas général (pas de procédé systématique)

Exemples de propriétés indécidables :

• L’exécution d’un programme termine

• Deux programmes calculent la même chose

Advertisement

• Un programme n'a pas d'erreur

Une bataille perdue d'avance :

• un programme a un nombre infini (ou immense) d'exécutions possibles

• un jeu de tests n'examine qu'un nombre fini d'exécutions possibles

Solutions: trouver des heuristiques :

  • Approcher l'infini (ou le gigantesque) avec le fini (petit)
  • Tester les exécutions les plus « représentatives »

Pourquoi le test est difficile (2)

Le choix de données

§ Test exhaustif

§ Exécuter le logiciel avec toutes les données d’entrée

possibles dans toutes les situations possibles

§ Impossible

§ Choisir des donnée pour découvrir des erreurs

§ Quelles données pour trouver des erreurs ?

§ Quelles données pour trouver toutes les erreurs ?

§ Chaque programme est particulier = aucune technique

générale

§ Démarches classiques, basées sur l’expérience

(ensemble de « trucs »)

Pourquoi le test est difficile (3)

Résultat correct ?

§ Décider si le comportement du programme est

correct

§ Problème de l’oracle

§ Pouvoir observer :

§ quelles sont les sorties du logiciels

§ Savoir décider

§ Comment décide-t-on que le comportement est OK ?

§ Exple : Soit un programme de tri alphabétique

Lagaf

Mafalda

OK

Mafalda

Lagaf

KO

Pourquoi le test est difficile (3)

Résultat correct ?

§ Décider si le comportement du programme est

correct

§ Problème de l’oracle

§ Pouvoir observer :

§ quelles sont les sorties du logiciels

§ Savoir décider

§ Comment décide-t-on que le comportement est OK ?

§ Exple : Soit un programme de tri alphabétique

Lagaf G.

La Poste

La Poste

Lagaf G.

Pourquoi le test est difficile (4)

Quand s’arrêter ?

§ Le test n’a pas révélé d’anomalies

§ Absence d’erreur ?

§ Mauvais choix de données ?

§ Le test a révélé des anomalies

§ Existe-t-il d’autres erreurs ?