Gen Log Assurance Qual It e
Gen Log Assurance Qual It e
Gen Log Assurance Qual It e
Assurance Qualité
Renaud Marlet
LaBRI / INRIA
http://www.labri.fr/~marlet
màj 23/04/2007
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
2
●
Conformité avec la définition
(contrôlable en cours de fabrication ainsi qu'en
maintenance)
●
Réponse à l'attente du client
(contrôlable à la livraison principale ainsi que lors des
livraisons intermédiaires)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
3
Contrôle qualité
Terminologie
●
Validation
– Faisons-nous le bon produit ?
●
Vérification
– Faisons-nous le produit correctement ?
☛ Attention, en pratique
– souvent confondus, ou pris l'un pour l'autre
– on parle de « V&V » (validation et vérification)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
5
Terminologie IEEE
●
Erreur :
– commise par le développeur
– conduit à un défaut
●
Défaut :
– imperfection dans le logiciel
– conduit ou non à une panne
●
Panne :
– comportement anormal d'un programme
Terme courant mais ambigu : bogue (bug)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
6
●
Caractéristiques « externes »
– facteurs de qualité
●
Caractéristiques « internes »
– critères de qualité
●
Caractéristiques mesurables
– métriques
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
7
Facteurs de qualité
Maintenabilité :
●
facilité avec laquelle on peut localiser et corriger les
erreurs
Flexibilité :
●
facilité de modification et d'évolution
Testabilité :
●
effort requis pour tester (après modification)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
10
Portabilité :
●
peut-on utiliser le logiciel sur une autre machine ?
Réutilisabilité :
●
peut-on réutiliser des parties du logiciel dans d'autres
applications ?
Interopérabilité :
●
facilité d'interfaçage avec d'autres systèmes
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
11
Critères de qualité
Opérabilité
Communicabilité
Apprentissage
Volume et taux d'E/S
Contrôle d'accès
Consommation mémoire
Vitesse d'exécution
Traçabilité
Complétude
Précision
Cohérence
Tolérance aux fautes
Simplicité
Modularité
Concision
Auto-description
Instrumentation
Généralité
Evolutivité
Indépendance machine
Indépendance système
Communications banalisés
Données banalisées
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
13
(caractéristiques externes)
(caractéristiques internes)
Contrôle d'accès
Consommation mémoire Efficacité
Facteurs de qualité
Critères de qualité
Vitesse d'exécution
Traçabilité Conformité
Complétude
Précision
Fiabilité
Cohérence
Tolérance aux fautes
Maintenabilité
Simplicité
Modularité
Testabilité
Concision
Auto-description Flexibilité
Instrumentation
Généralité Portabilité
Évolutivité
Indépendance machine
Réutilisabilité
Indépendance système
Communications banalisés
Interopérabilité
Données banalisées
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
14
(caractéristiques externes)
(caractéristiques internes)
Contrôle d'accès
Consommation mémoire Efficacité
Facteurs de qualité
Critères de qualité
Vitesse d'exécution
Traçabilité Conformité
Complétude
Précision
Fiabilité
Cohérence
Tolérance aux fautes
Maintenabilité
Simplicité
Modularité
Testabilité
Concision
Auto-description Flexibilité
Instrumentation
Généralité Portabilité
Question Évolutivité
Y a-t-il Indépendance machine
Réutilisabilité
un critère Indépendance système
« majeur » ? Communications banalisés
Interopérabilité
Données banalisées
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
15
(caractéristiques externes)
(caractéristiques internes)
Contrôle d'accès
Consommation mémoire Efficacité
Facteurs de qualité
Critères de qualité
Vitesse d'exécution
Traçabilité Conformité
Complétude
Précision
Fiabilité
Cohérence
Tolérance aux fautes
Maintenabilité
Simplicité
☛ Modularité
Testabilité
Concision
Auto-description Flexibilité
Instrumentation
Généralité Portabilité
Impact Évolutivité
fort de la Indépendance machine
Réutilisabilité
modularité Indépendance système
Communications banalisés
Interopérabilité
Données banalisées
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
16
Exemples de mesures de
critères de qualité (1)
●
Fiabilité :
– mesures stochastiques :
●
temps moyen de réparation
●
temps moyen entre deux pannes
●
taux de disponibilité
●
Portabilité :
– mesure objective :
●
nb d'instructions dépendant de la plate-forme cible
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
18
Exemples de mesures de
critères de qualité (2)
●
Facilité d'utilisation :
– mesures objectives :
●
nb de paramètres ayant une valeur par défaut (pertinente)
●
nb d'écrans d'aide
– mesures stochastiques :
●
nb de fausses manipulations par jour
●
nb de jours d'apprentissage
●
temps de lecture / interprétation des résultats affichés
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
19
Métriques
●
Métriques
– de Halstead, de McCabe, de Henry et Kafura, ..
●
Quantités mesurées
– concision (taille programme / taille de l'algorithme),
complexité textuelle, difficulté, effort, complexité des
liaisons inter-modules (ou -classes), encombrement
d'une classe, complexité structurelle, ...
●
Implémentées par des outils
– Logiscope, ...
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
20
●
Analyse du graphe de contrôle
●
Mesure de la complexité structurelle
●
Nombre cyclomatique
= nb de noeuds (blocs d'instructions séquentielles)
− nb d'arcs (branches de programme)
+ nb points d'entrée
+ nb points de sortie
●
Représente le nombre de chemins indépendants
~ nb conditions + 1 (si les décisions sont binaires)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
21
C1
C2 X2
nb entrées = 1 X1 X3
nb sorties = 1
nb noeuds (blocs) = 5
nb arcs (branches) = 6
nb cyclomatique = 6 – 5 + 1 + 1 = 3
(nb décisions = 2)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
22
Mais (écueils) :
●
dilemme : moins cher ou plus sûr ?
– souvent prééminence du planning sur la qualité
●
sous-estimation des ressources qui sont
nécessaires à l'assurance qualité
– par les développeurs (activité jugée marginale)
– par les managers (réticence à prévoir un budget
maintenance)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
25
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
26
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
27
●
Avoir un point de vue différent de l'auteur
→ quelqu'un d'autre
●
Avoir différents points de vue
→ compétences multiples
●
Avoir des points de vue objectifs
→ participants hors de l'équipe de développement
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
28
●
Critiquer les aspects techniques, pas l'auteur (!)
●
Juger la forme
– format [voir cours sur la documentation], structure,
satisfaction des normes du plan qualité...
●
Juger le fond
– précision, non-ambiguïté, complétude, cohérence
(pas de référence imprécise ou inexistante)
– conformité par rapport aux documents amont, au
plan projet
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
29
●
Cahier des charges 5-10 pages/h
●
Spécifications fonctionnelles 10 pages/h
●
Conception globale 5-15 pages/h
●
Conception détaillé 10 pages/h
●
Code 20-50 lignes/h
(Selon moi :
– effort trop faible dans les phases amont
– effort difficile et peu productif dans les phases aval)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
30
●
Auto-correction (desk-checking)
– relecture personnelle
– bilan : efficacité quasi nulle pour les documents
amont, faible pour le code
●
Lecture croisée (author-reader cycle)
– un collègue recherche des ambiguïtés, oublis,
imprécisions
– bilan : efficacité faible pour les documents amont,
plus adapté pour la relecture du code
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
31
●
Revue (walkthrough)
– discussion informelle au sein d'un groupe
– un lecteur résume paragraphe par paragraphe
– bilan : contribution moyenne à l'assurance qualité
(évaluation très liée à la prestation du lecteur)
●
Revue structurée
– constitution pendant le débat d'une liste de défauts,
utilisation d'une liste de défauts typiques (checklist)
– direction des débats par un secrétaire
– bilan : bonne contribution à l'assurance qualité
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
32
●
Inspection
– cadre de relecture plus formel
– recherche des défauts avant les débats
– suivi des décisions et corrections
– bilan : excellente contribution à l'assurance qualité
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
33
Méthodes de relecture :
Inspection (1)
Organisation
1. préparation
●
recherche des défauts
●
rédaction d'un rapport de défauts basé sur des fiches type
2. cycle de réunions
●
examen des défauts
●
prise de décision
3. suivi
●
vérification des corrections ou nouvelle inspection
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
34
Méthodes de relecture :
Inspection (2)
Planification – pour chaque type de document :
– dates de début et de fin par rapport au plan projet
– critères de sélection des inspecteurs
– plan d'inspection (parties à inspecter)
– types de défauts les plus communs (checklist)
– formulaires d'inspection (description de défauts)
– critères de succès de l'inspection
Méthodes de relecture :
Inspection (3)
Responsabilités
– inspecteurs :
●
responsables de la qualité du produit final
●
responsables du respect des principes de qualité
– auteur :
●
mise à disposition des documents à la date prévue
●
fournit une opinion sur chaque défaut signalé
– ...
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
36
Méthodes de relecture :
Inspection (4)
Responsabilités
– ...
– secrétaire :
●
enregistre les défauts considérés et les décisions prises
●
assiste le modérateur
– modérateur :
●
responsable du bon déroulement des réunions
– convocation, tenue, suspension
●
veille au maintien des objectifs et aux facteurs humains
●
préside la prise de décision
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
37
Méthodes de relecture :
Inspection (5)
●
Conséquence
– la formalisation oblige à planifier et à observer les
principes de qualité
●
Bilan
– excellente contribution à l'assurance qualité
– amélioration du cycle de vie (contrôle au plus tôt)
– influence positive sur la communication et la
formation dans le projet
☛ la meilleure des méthodes de relecture
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
38
Et maintenant...
int factorielle(int n)
{
int f;
while (n >= 0) {
n = n-1;
f = f*n;
}
return n;
}
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
40
●
variable f non
int factorielle(int n)
initialisée (à 1)
{
int f;
●
tour de boucle
en trop (n = 0)
while (n >= 0) {
n = n-1;
●
opération sur un
mauvais indice
f = f*n;
(n-1 et non n)
}
return n;
●
retour d'une
mauvaise
}
variable (ici n)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
42
int factorielle(int n) ●
variable f
{ initialisée (à 1)
int f = 1; ●
pas de tour de
while (n > 0) { boucle en trop
f = f*n; ●
opération sur un
n = n-1; bon indice (n)
} ●
retour de la
return f; variable
} correcte (f)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
43
Exercice 4 : l'erreur
(Elle est typique)
int compte = ...; ●
overflow non
int decouvert_max = -1000; maîtrisé : compte
void transact(int montant) + montant > 231 →
/* débit: montant < 0 compte + montant
* crédit: montant > 0 */ <0
{ ●
underflow non
if (compte + montant < maîtrisé : si
decouvert_max) compte=-500 et
printf("Refusé"); montant=-231
else alors compte +
compte += montant; montant > 0 !
} (= 231-500)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
53
/* Si x est pair et
* de valeur absolue >= 5 */
if (x%2 == 0 &&
x <= -5 || 5 <= x) ...
/* Si x et y sont positifs
* ou nuls */
if (x && y >= 0) ...
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
56
int dernierElem(list l)
{
do {
l = l->reste;
} while (l->reste != NULL);
return l->reste->elem;
}
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
60
Inspection de code :
Défauts typiques à examiner (1)
Inspection de code :
Défauts typiques à examiner (2)
Inspection de code :
Défauts typiques à examiner (3)
Calculs :
– conversions de type (implicites et explicites)
– underflow/overflow (dépassement de capacité du type)
– division par zéro
– précédence des opérateurs
☛ dans le doute (pour la lisibilité), toujours parenthéser
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
66
Inspection de code :
Défauts typiques à examiner (4)
Comparaisons :
– incohérence des types
●
mélanges d'entiers et de booléens
– inclusion ou non des bornes incorrecte
●
< au lieu de <=, >= au lieu de >, ...
– inversion du test
●
== au lieu de !=, > au lieu de <, ...
– confusion en égalité (==) et affectation (=)
●
if (x = y) {...} au lieu de if (x == y) {...}
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
67
Inspection de code :
Défauts typiques à examiner (5)
Comparaisons :
– confusion entre opérateurs binaires (bits) et logiques
●
et (&, &&, and), ou (|, ||, or), négation (~, !, not)
– négation incorrecte d'une condition logique
●
!(x ==1 && (y < 2 || !z)) équiv. x !=1 || (y >= 2 && z)
– précédence des opérateurs booléens
●
x || y && z équiv. x || (y && z)
☛ dans le doute (pour la lisibilité), toujours parenthéser
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
68
Inspection de code :
Défauts typiques à examiner (6)
Contrôle :
– switch
●
ensemble de case incomplet
●
cas default manquant
●
break oublié
– rattachement du else au if (« dandling else »)
1. if (a) if (b) x=0; else x=1;
2. if (a) {if (b) x=0;} else x=1; /* diff. de 1. */
3. if (a) {if (b) x=0; else x=1;} /* idem 1. */
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
69
Inspection de code :
Défauts typiques à examiner (7)
Contrôle :
– terminaison du programme
●
boucles et récursions sans fin
– boucles
●
conditions initiales (indices, ...) incorrectes
●
itérations en plus ou en moins
●
incohérences après une sortie de boucle anticipée
●
incohérences après une sortie de boucles emboîtées
– procédures et fonctions
●
incohérences après une sortie anticipée
– exceptions non rattrapées
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
70
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
71
●
Outils
– très high-tech
– encore peu répandus
erreur certaine
●
Réussites erreur possible
– bug d'Ariane 5 pas d'erreur
●
Difficultés
– faux positifs (avertissement injustifiés)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
74
●
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
– un programme n'a pas d'erreur
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
75
●
Quand un propriété est indécidable, juste dire
que c'est possible et laisser l'humain juger
erreur certaine
erreur possible
pas d'erreur
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
76
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
77
Vérification de modèle
●
Vérification
– qu'un état est accessible ou non (vivacité)
– qu'un état est accessible en un temps fini (équité)
●
Application
– programmes pas trop gros (< 10000 LOC)
– nécessité de faire des abstractions
– 1020 états avec certaines approches, et même plus
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
78
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
79
●
Preuves de
– correction (par rapport à une spécification)
– terminaison de l'exécution
– propriétés spécifiques (sûreté, sécurité, ...)
●
Assistants de preuve (theorem prover)
– systèmes : Coq, PVS, Isabelle / HOL, ...
– encore difficiles d'usage pour des non spécialistes
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
80
●
Méthodes statiques a priori
(sans exécuter le logiciel)
– examen critique de documents et de code
– analyse automatique (ou assistée) de code / spécification
●
analyse statique de programme
●
vérification de modèle (model checking)
●
outils de preuves formelles
●
Méthodes dynamiques a posteriori
(en exécutant le logiciel)
– test
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
81
Test
●
Vérification (conformité aux spécifications)
– tests unitaires
– tests d'intégration
●
Qualification
– validation par rapport aux contraintes non
fonctionnelles
●
tests de performance
●
tests de capacité de charge
– validation par rapport aux besoins
●
bêta-test (chez l'utilisateur final)
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
82
Test
●
Génération automatique de programmes à
partir des spécifications
→ programmes corrects par construction
●
Mais
– méthode encore trop mathématique pour le public
des développeurs
– problème d'efficacité du code généré
– problème de rendement (malgré l'automatisation)
●
beaucoup de choses à spécifier avec soin
●
dilemme bien connu : moins cher ou plus sûr ?
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet
84
À retenir
●
Contrôle qualité : durant tout le cycle de vie
●
L'important, c'est la démarche
– définir un plan qualité adapté au contexte
– détailler les mesures des critères (a posteriori ☹)
– s'interroger sur la pertinence des métriques
●
Méthodes statiques (sans exécuter) :
– inspection : par des extérieurs, checklist de défauts
– analyse automatique (ou assistée) de programme
●
Méthodes dynamiques (en exécutant) : test