84
Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 1 Cours de génie logiciel Cours de génie logiciel Assurance Qualité Assurance Qualité Renaud Marlet LaBRI / INRIA http://www.labri.fr/~marlet (d'après A.-M. Hugues) màj 23/04/2007

Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Embed Size (px)

Citation preview

Page 1: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 1

Cours de génie logicielCours de génie logiciel

Assurance QualitéAssurance Qualité

Renaud Marlet

LaBRI / INRIA

http://www.labri.fr/~marlet

(d'après A.-M. Hugues)

màj 23/04/2007

Page 2: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 2

Les deux facettes de la qualitéLes deux facettes de la qualité

● 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)

Page 3: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 3

Contrôle qualitéContrôle qualité

Activité tout au long du cycle de vie– plus de 50% des erreurs sont découvertes en phase

d'exploitation– le coût de réparation croît exponentiellement avec

l'avancée dans le cycle de vie

Page 4: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 4

TerminologieTerminologie

● 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)

Page 5: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 5

Terminologie IEEETerminologie 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)

Page 6: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 6

Qualité : Approche de MacCallQualité : Approche de MacCall

● Caractéristiques « externes »– facteurs de qualité

● Caractéristiques « internes »– critères de qualité

● Caractéristiques mesurables– métriques

Page 7: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 7

Facteurs de qualitéFacteurs de qualité

Facteurs de qualité classés en 3 catégories :– qualités opérationnelles

(product operation)

– facilité à changer ou à corriger (product revision)

– facilité à faire des transitions d'environnement (product transition)

Page 8: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 8

Facteurs de qualité (1) :Facteurs de qualité (1) :Qualités opérationnellesQualités opérationnelles

Conformité aux besoins :● le produit fait-il ce qu'on souhaite ?

Fiabilité :● le fait-il correctement dans tous les cas ?

Efficacité :● utilise-t-il au mieux les ressources matérielles / logicielles ?

Intégrité :● est-il protégé contre les intrusions ?

Facilité d'emploi :● ... au niveau de l'apprentissage, de la mise en œuvre, de la

fourniture des données, de l'interprétation des résultats, etc.

Page 9: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 9

Facteurs de qualité (2) :Facteurs de qualité (2) :Facilité à changer ou à corrigerFacilité à changer ou à corriger

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)

Page 10: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 10

Facteurs de qualité (3) : Facilité à Facteurs de qualité (3) : Facilité à faire des transitions d'environnementfaire des transitions d'environnement

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

Page 11: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 11

Influence des facteurs de qualité Influence des facteurs de qualité les uns sur les autresles uns sur les autres

Ex. facteurs qui diminuent l'efficacité– intégrité (nécessité d'introduire des vérifications)– maintenabilité (sacrifice de l'efficacité pour la lisibilité)– portabilité (moindre efficacité des structures portables)– testabilité, flexibilité, réutilisabilité, interopérabilité, ...

Ex. facteurs qui diminuent l'intégrité– flexibilité, réutilisabilité, interopérabilité

Page 12: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 12

Critères de qualitéCritères de qualité

Opérabilité

Apprentissage

Volume et taux d'E/S

Communicabilité

Contrôle d'accès

Consommation mémoire

Vitesse d'exécution

Traçabilité

Complétude

Cohérence

Tolérance aux fautes

Simplicité

Précision

Modularité

Concision

Auto-description

Instrumentation

Généralité

Evolutivité

Indépendance machine

Indépendance système

Communications banalisés

Données banalisées

Page 13: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 13

Tolérance aux fautes

Exercice : trouver les (>40) liens entre Exercice : trouver les (>40) liens entre facteurs de qualité et critères de qualitéfacteurs de qualité et critères de qualité

Opérabilité

Apprentissage

Volume et taux d'E/S

Communicabilité

Contrôle d'accès

Consommation mémoire

Vitesse d'exécution

Traçabilité

Complétude

Cohérence

Simplicité

Précision

Modularité

Concision

Auto-description

Instrumentation

Généralité

Évolutivité

Indépendance machine

Indépendance système

Communications banalisés

Données banalisées

Facilité d'emploi

Intégrité

Efficacité

Conformité

Fiabilité

Maintenabilité

Testabilité

Flexibilité

Portabilité

Réutilisabilité

Interopérabilité

Crit

ères

de

qual

ité(c

arac

téris

tique

s in

tern

es)

Facteurs de qualité

(caractéristiques externes)

Page 14: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14

Liens entre facteurs de qualité et Liens entre facteurs de qualité et critères de qualitécritères de qualité

Opérabilité

Apprentissage

Volume et taux d'E/S

Communicabilité

Contrôle d'accès

Consommation mémoire

Vitesse d'exécution

Traçabilité

Complétude

Cohérence

Tolérance aux fautes

Simplicité

Précision

Modularité

Concision

Auto-description

Instrumentation

Généralité

Évolutivité

Indépendance machine

Indépendance système

Communications banalisés

Données banalisées

Facilité d'emploi

Intégrité

Efficacité

Conformité

Fiabilité

Maintenabilité

Testabilité

Flexibilité

Portabilité

Réutilisabilité

Interopérabilité

QuestionY a-t-il

un critère « majeur » ?

Crit

ères

de

qual

ité(c

arac

téris

tique

s in

tern

es)

Facteurs de qualité

(caractéristiques externes)

Page 15: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 15

Liens entre facteurs de qualité et Liens entre facteurs de qualité et critères de qualitécritères de qualité

Opérabilité

Apprentissage

Volume et taux d'E/S

Communicabilité

Contrôle d'accès

Consommation mémoire

Vitesse d'exécution

Traçabilité

Complétude

Cohérence

Tolérance aux fautes

Simplicité

Précision

Modularité

Concision

Auto-description

Instrumentation

Généralité

Évolutivité

Indépendance machine

Indépendance système

Communications banalisés

Données banalisées

Facilité d'emploi

Intégrité

Efficacité

Conformité

Fiabilité

Maintenabilité

Testabilité

Flexibilité

Portabilité

Réutilisabilité

Interopérabilité

Impactfort de la

modularité

Crit

ères

de

qual

ité(c

arac

téris

tique

s in

tern

es)

Facteurs de qualité

(caractéristiques externes)

Page 16: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 16

Métriques associées aux Métriques associées aux critères de qualitécritères de qualité

● Mesure des caractéristiques « internes »– mesures objectives

● ex. : taille, complexité du flot de contrôle, cohésion modulaire / couplage entre modules, ...

● Mesure des caractéristiques « externes »– évaluations stochastiques (statistiques)

● ex. : délai moyen de réponse à une requête, nombre de requêtes simultanées sans « écrouler » un serveur, ...

☛ Ce sont des mesures a posteriori→ arrivent parfois « trop tard »

Page 17: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 17

Exemples de mesures deExemples de mesures decritères de qualité (1)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

Page 18: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 18

Exemples de mesures deExemples de mesures decritères de qualité (2)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

Page 19: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 19

MétriquesMé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, ...

Page 20: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 20

Exemple : Métrique de McCabeExemple : Métrique de McCabe

● 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)

Page 21: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 21

Métrique de McCabe : exempleMétrique de McCabe : exemple

C1

C2 X2

X3X1nb entrées = 1nb sorties = 1nb noeuds (blocs) = 5nb arcs (branches) = 6nb cyclomatique = 6 – 5 + 1 + 1 = 3(nb décisions = 2)

Page 22: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 22

Qualité : comment faire ?Qualité : comment faire ?

Un grand nombre de métriques– difficile de les connaître toutes, et souvent discutables

(vision partielle/artificielle du problème)

L'important, c'est la démarche :– définir un plan qualité adapté au contexte– détailler une mesure des différents critères– s'interroger sur la validité des métriques (pertinence)

Problème des mesures a posteriori– trop tard, mais forge l'expérience (☺)

Page 23: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 23

Assurance qualité et gestion projet (1)Assurance qualité et gestion projet (1)

Le contrôle qualité aide la gestion projet :– mesure de l'avancement– meilleure estimation des coûts

Page 24: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 24

Assurance qualité et gestion projet (2)Assurance qualité et gestion projet (2)

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)

Page 25: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 25

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 26: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 26

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 27: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 27

Examen critique de documents (1)Examen critique de documents (1)

● 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

Page 28: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 28

Examen critique de documents (2)Examen critique de documents (2)

● 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

Page 29: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 29

Coût des inspectionsCoût des inspections(ordres de grandeur)(ordres de grandeur)

● 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)

Page 30: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 30

Méthodes de relecture (1)Méthodes de relecture (1)

● 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

Page 31: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 31

Méthodes de relecture (2)Méthodes de relecture (2)

● 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é

Page 32: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 32

Méthodes de relecture (3)Méthodes de relecture (3)

● 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é

Page 33: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 33

Méthodes de relecture :Méthodes de relecture :Inspection (1)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

Page 34: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 34

Méthodes de relecture :Méthodes de relecture :Inspection (2)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

(Ce plan figure en partie dans le plan qualité)

Page 35: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 35

Méthodes de relecture :Méthodes de relecture :Inspection (3)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é

– ...

Page 36: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 36

Méthodes de relecture :Méthodes de relecture :Inspection (4)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

Page 37: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 37

Méthodes de relecture :Méthodes de relecture :Inspection (5)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

Page 38: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 38

Et maintenant...Et maintenant...

Quelques exercices d'inspection de code...

(et de correction)

Page 39: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 39

Exercice 1 : trouver 4 erreursExercice 1 : trouver 4 erreurs(Elles sont typiques)(Elles sont typiques)

int factorielle(int n){ int f; while (n >= 0) { n = n-1; f = f*n; } return n;}

Page 40: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 40

Exercice 1 : les 4 erreursExercice 1 : les 4 erreurs(Elles sont typiques)(Elles sont typiques)

int factorielle(int n){ int f; while (n >= 0) { n = n-1; f = f*n; } return n;}

● variable f non initialisée (à 1)

● tour de boucle en trop (n = 0)

● opération sur un mauvais indice (n-1 et non n)

● retour d'une mauvaise variable (ici n)

Page 41: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 41

Exercice 1 (suite) : corriger les erreursExercice 1 (suite) : corriger les erreurs

int factorielle(int n){ int f; while (n >= 0) { n = n-1; f = f*n; } return n;}

● variable f non initialisée (à 1)

● tour de boucle en trop (n = 0)

● opération sur un mauvais indice (n-1 et non n)

● retour d'une mauvaise variable (ici n)

Page 42: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 42

Exercice 1 (suite) : version corrigéeExercice 1 (suite) : version corrigée

int factorielle(int n){ int f = 1; while (n > 0) { f = f*n; n = n-1; } return f;}

● variable f initialisée (à 1)

● pas de tour de boucle en trop

● opération sur un bon indice (n)

● retour de la variable correcte (f)

Page 43: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 43

Exercice 2 : trouver 5 erreursExercice 2 : trouver 5 erreurs(Elles sont typiques)(Elles sont typiques)

.../* Entrée pt cardinal */printf("Direction : ");scanf("%c", direction);switch (direction){ case 'N' : y++; case 'O' : x--; case 'S' : x++;}deplacer(x,y);...

Page 44: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 44

Exercice 2 : les 5 erreursExercice 2 : les 5 erreurs(Elles sont typiques)(Elles sont typiques)

● variable au lieu de pointeur sur variable

● case manquant● break oubliés● copy/paste non

ou mal adapté● default

manquant

.../* Entrée pt cardinal */printf("Direction : ");scanf("%c", direction);switch (direction){ case 'N' : y++; case 'O' : x--; case 'S' : x++;}deplacer(x,y);...

Page 45: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 45

Exercice 2 (suite) : corriger les erreursExercice 2 (suite) : corriger les erreurs

● variable au lieu de pointeur sur variable

● case manquant● break oubliés● copy/paste non

ou mal adapté● default

manquant

.../* Entrée pt cardinal */printf("Direction : ");scanf("%c", direction);switch (direction){ case 'N' : y++; case 'O' : x--; case 'S' : x++;}deplacer(x,y);...

Page 46: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 46

Exercice 2 (suite) : version corrigéeExercice 2 (suite) : version corrigée

.../* Entrée pt cardinal */printf("Direction : ");scanf("%c",&direction);switch (direction) { case 'E' : x++; break; case 'N' : y++; break; case 'O' : x--; break; case 'S' : y--; break; default : error();}deplacer(x,y);

● pointeur sur variable

● tous les case présents et corrects

● break présents● pas d'erreur de

copy/paste● default présent

Page 47: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 47

Exercice 3 : trouver 5 erreursExercice 3 : trouver 5 erreurs(Elles sont typiques)(Elles sont typiques)

int tab[]; /*de taille size*/int indiceTqTabNul(int size){ int i; if (size > 0) for(i=1; i <= size; i++) if (tab[i] = 0) return i; else printf("tab est vide"); error(); return -1;}

Page 48: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 48

Exercice 3 : les 5 erreursExercice 3 : les 5 erreurs(Elles sont typiques)(Elles sont typiques)

● oubli d'un cas d'indice

● cas d'indice hors borne

● test par = au lieu de ==

● dandling else● accolades

manquantes

int tab[]; /*de taille size*/int indiceTqTabNul(int size){ int i; if (size > 0) for(i=1; i <= size; i++) if (tab[i] = 0) return i; else printf("tab est vide"); error(); return -1;}

Page 49: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 49

Exercice 3 (suite) : corriger les erreursExercice 3 (suite) : corriger les erreurs

● oubli d'un cas d'indice

● cas d'indice hors borne

● test par = au lieu de ==

● dandling else● accolades

manquantes

int tab[]; /*de taille size*/int indiceTqTabNul(int size){ int i; if (size > 0) for(i=1; i <= size; i++) if (tab[i] = 0) return i; else printf("tab est vide"); error(); return -1;}

Page 50: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 50

Exercice 3 (suite) : version corrigéeExercice 3 (suite) : version corrigée

● pas d'indice oublié

● pas d'indice hors borne

● test par '==' et non '='

● accolades appropriées

int tab[]; /*de taille size*/int indiceTqTabNul(int size){ int i; if (size > 0) { for(i=0; i < size; i++) if (tab[i] == 0) return i; } else { printf("tab est vide"); error(); } return -1;}

Page 51: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 51

Exercice 4 : trouver une erreurExercice 4 : trouver une erreur(Elle est typique)(Elle est typique)

int compte = ...;int decouvert_max = -1000;void transact(int montant)/* débit: montant < 0 * crédit: montant > 0 */{ if (compte + montant < decouvert_max) printf("Refusé"); else compte += montant;}

Page 52: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 52

Exercice 4 : l'erreurExercice 4 : l'erreur(Elle est typique)(Elle est typique)

int compte = ...;int decouvert_max = -1000;void transact(int montant)/* débit: montant < 0 * crédit: montant > 0 */{ if (compte + montant < decouvert_max) printf("Refusé"); else compte += montant;}

● overflow non maîtrisé : compte + montant > 231 → compte + montant < 0

● underflow non maîtrisé : si compte=-500 et montant=-231 alors compte + montant > 0 !(= 231-500)

Page 53: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 53

Exercice 4 (suite) : corriger l'erreurExercice 4 (suite) : corriger l'erreur

int compte = ...;int decouvert_max = -1000;void transact(int montant)/* débit: montant < 0 * crédit: montant > 0 */{ if (compte + montant < decouvert_max) printf("Refusé"); else compte += montant;}

● overflow non maîtrisé : compte + montant > 231 → compte + montant < 0

● underflow non maîtrisé : si compte=-500 et montant=-231 alors compte + montant > 0 !(= 231-500)

Page 54: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 54

Exercice 4 (suite) : version corrigéeExercice 4 (suite) : version corrigée

void transact(int montant)

{

if (montant > 0 && compte > 0 && compte+montant < 0)

printf("Overflow");

else if (montant<0 && compte<0 && compte+montant>0)

printf("Underflow");

else if (compte+montant < decouvert_max)

printf("Refusé");

else

compte += montant;

}

Page 55: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 55

Exercice 5 : trouver 3 erreursExercice 5 : trouver 3 erreurs(Elles sont typiques)(Elles sont typiques)

/* Si p non nul pointe sur * un entier positif */if (p != NULL & *p >= 0) ...

/* 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) ...

Page 56: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 56

Exercice 5 : les 3 erreursExercice 5 : les 3 erreurs(Elles sont typiques)(Elles sont typiques)

● expression évaluée ne devant pas l'être

● précédence des opérateurs logiques

● comparaison factorisée

/* Si p non nul pointe sur * un entier positif */if (p != NULL & *p >= 0) ...

/* 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) ...

Page 57: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 57

Exercice 5 (suite) : corriger les erreursExercice 5 (suite) : corriger les erreurs

● expression évaluée ne devant pas l'être

● précédence des opérateurs logiques

● comparaison factorisée

/* Si p non nul pointe sur * un entier positif */if (p != NULL & *p >= 0) ...

/* 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) ...

Page 58: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 58

Exercice 5 : version corrigéeExercice 5 : version corrigée

● expression évaluée que si nécessaire

● parenthésage des opérateurs logiques

● comparaison non factorisée

/* Si p non nul pointe sur * un entier positif */if ((p != NULL) && (*p >= 0)) /* 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 >= 0 && y >= 0) ...

Page 59: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 59

Exercice 6 : trouver 3 erreursExercice 6 : trouver 3 erreurs(Elles sont typiques)(Elles sont typiques)

typedef struct lst { int elem; struct lst *reste;} *list;

int dernierElem(list l){ do { l = l->reste; } while (l->reste != NULL); return l->reste->elem;}

Page 60: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 60

Exercice 6 : les 3 erreursExercice 6 : les 3 erreurs(Elles sont typiques)(Elles sont typiques)

● cas d'un argument pointeur nul (liste vide) non traité

● premier élément non traité (liste à un élément)

● déréférence d'un pointeur nul au terme de l'itération

typedef struct lst { int elem; struct lst *reste;} *list;

int dernierElem(list l){ do { l = l->reste; } while (l->reste != NULL); return l->reste->elem;}

Page 61: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 61

Exercice 6 (suite) : corriger les erreursExercice 6 (suite) : corriger les erreurs

● cas d'un argument pointeur nul (liste vide) non traité

● premier élément non traité (liste à un élément)

● déréférence d'un pointeur nul au terme de l'itération

typedef struct lst { int elem; struct lst *reste;} *list;

int dernierElem(list l){ do { l = l->reste; } while (l->reste != NULL); return l->reste->elem;}

Page 62: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 62

Exercice 6 : version corrigéeExercice 6 : version corrigée

typedef struct lst { int elem; struct lst *reste;} *list;

int dernierElem(list l){ if (l == NULL) error(); while (l->reste != NULL) l = l->reste; return l->elem;}

● cas d'un argument pointeur nul (liste vide) traité

● premier élément traité correctement

● déréférence du bon pointeur au terme de l'itération

Page 63: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 63

Inspection de code :Inspection de code :Défauts typiques à examiner (1)Défauts typiques à examiner (1)

Référence aux données :– variables non initialisées

☛ savoir si le langage initialise par défaut et quand

☛ dans les cas douteux, initialiser explicitement

– indices de tableaux hors bornes☛ principale source des failles de sécurité (!)

– accès à des structures/records à champs variables ou à des unions

Page 64: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 64

Inspection de code :Inspection de code :Défauts typiques à examiner (2)Défauts typiques à examiner (2)

Référence aux données :– confusion entre donnée et pointeur vers la donnée – déréférence de pointeurs nuls– pointeurs sur des données désallouées ou pas

encore allouées– pointeurs sur des données devenues inutiles mais

non libérées

Page 65: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 65

Inspection de code :Inspection de code :Défauts typiques à examiner (3)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

Page 66: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 66

Inspection de code :Inspection de code :Défauts typiques à examiner (4)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) {...}

Page 67: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 67

Inspection de code :Inspection de code :Défauts typiques à examiner (5)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

Page 68: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 68

Inspection de code :Inspection de code :Défauts typiques à examiner (6)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. */

Page 69: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 69

Inspection de code :Inspection de code :Défauts typiques à examiner (7)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

Page 70: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 70

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 71: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 71

Analyse statique de code (1)Analyse statique de code (1)

● Définition générale :– étude d'un programme (généralement source) sans

exécution● Attention, deux sens pour « analyse statique » :

– inspection manuelle (humaine) du code– outil d'analyse automatique

→ messages d'erreur comme ceux d'un compilateur

● Dans tous les cas– effectuée avant les tests, car élimine des erreurs de

« logique », coûteuses à corriger si découvertes tard

Page 72: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 72

Analyse statique de code (2)Analyse statique de code (2)

Exemples de propriétés vérifiées :– typage– variables non initialisées– déréférence de pointeurs nuls– débordement de tableaux– fuites mémoire– problèmes d'interopérabilité– problèmes de sécurité : fuite de secrets, ...– ...

Page 73: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 73

Analyse statique de code (3)Analyse statique de code (3)

● Outils– très high-tech– encore peu répandus

● Réussites– bug d'Ariane 5

● Difficultés– faux positifs (avertissement injustifiés)

erreur certaine

erreur possible

pas d'erreur

Page 74: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 74

Limites théoriques (1)Limites théoriques (1)

● 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

Page 75: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 75

Limites théoriques (2)Limites théoriques (2)

● Quand un propriété est indécidable, juste dire que c'est possible et laisser l'humain juger

● Erreur possible ≠ outil pas assez puissant

erreur certaine

erreur possible

pas d'erreur

Page 76: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 76

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 77: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 77

Vérification de modèleVé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

Page 78: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 78

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 79: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 79

Outils de preuves formellesOutils de preuves formelles

● 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

Page 80: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 80

Moyens de l'assurance qualitéMoyens de l'assurance qualité

● 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

Page 81: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 81

TestTest

● 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)

Page 82: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 82

TestTest

☛ Voir cours spécifique sur le test

Page 83: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 83

Et au stade de recherche avancée...Et au stade de recherche avancée...

● 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 ?

Page 84: Assurance Qualité - IMAGINEimagine.enpc.fr/.../teaching/GenLog/slides/GenLogAssuranceQualite.pdf · Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 14 Liens entre

Génie logiciel – Assurance Qualité © 2005-2007 Renaud Marlet 84

ÀÀ retenir 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