La notion de qualité d’un logiciel est très large et assez vague. C’est pourquoi l’ISO en collaboration avec le SEI a défini la norme ISO/9126 afin de structurer cette notion. Cette norme caractérise la qualité d’un logiciel par un ensemble d’attributs résumé sur le schéma suivant (EXT signifie une qualité externe, c-à-d visible de l’utilisateur final et déduite du comportement à l’exécution du logiciel, INT une qualité interne, c-à-d non visible et déduite uniquement des caractéristiques du logiciel) :
Ces attributs et sous-attributs sont définis ci-dessous.
Fonctionnalité
Désigne la capacité d’un produit logiciel à fournir les fonctions qui répondent aux besoins formulés et nécessaires quand le logiciel est utilisé dans des conditions spécifiées. Désigne ce que fait le logiciel pour remplir les besoins utilisateurs.
Interopérabilité
Désigne la capacité à interagir avec un ou plusieurs systèmes. Les éléments favorisant une bonne interopérabilité sont à classer suivant le niveau :
- Sémantique : qui traite du sens des informations (c.-à-d. des mots) échangées entre entités. Il est directement lié au modèle du domaine. Les entités s’entendent sur la signification des données qu’elles échangent. L’interopérabilité sémantique caractérise la capacité à s’accorder sur :
- Le contexte de l’échange : dicte le sens des mots (par exemple une personne est vue comme un patient dans une application de santé et comme un citoyen dans une application d’administration publique) ;
- Le processus de l’échange : quels sont les acteurs, événements et activités liés à l’échange ;
- Le sens et la structuration de l’information échangée ;
- Syntaxique et technique: qui véhicule les informations définies au niveau sémantique et mises en forme au niveau syntaxique. Il traite des normes et standards technique pour :
- Les technologies de navigation et de restitution (présentation).
- Les technologies de communication entre humain (messagerie, téléphonie, multimédia)
- Les technologies d’échanges entre SI (services Web)
- Les technologies élémentaires nécessaires aux échanges (infrastructure dont protocoles réseaux)
Adéquation (ou fonctionnalités conformes)
Désigne l’existence de fonctions adéquates pour les tâches requises. Cela implique deux aspects :
- Tout d’abord, la présence de la fonction : les tâches sont spécifiés à travers des cas d’utilisations. Pour chaque tâche il doit exister une ou plusieurs fonctionnalités permettant de l’accomplir.
- Ensuite, le fait que l’implémentation de la fonction soit appropriée avec le besoin.
Exploitabilité
Cet attribut n’existe pas dans la norme ISO mais je le considère comme essentiel (voir cet article sur l’ACM Queue). Il désigne la capacité à exploiter correctement le système logiciel, détecter les erreurs, mesurer le niveau d’efficacité et déployer aisément de nouvelles versions.
Fiabilité
Désigne la capacité d’un produit logiciel à maintenir son niveau de service dans des conditions précises pendant une certaine durée. Les fameux bugs sont le symptôme d’un manque de fiabilité mais on peut distinguer le bug technique, « imprévu » et qui « plante » le système du bug qui dénote d’une inadéquation par rapport au besoin. Les bugs rentrent donc les aspects à la fois d’adéquation et de fiabilité.
Maturité
Désigne la capacité d’un produit logiciel à éviter les pannes résultantes d’erreurs dans le logiciel. La maturité est calculée comme étant le Temps Moyen Avant Erreur (Mean Time To Failure ou MTTF) mesuré par rapport au code source.
Tolérance aux pannes
Désigne la capacité à maintenir le niveau de performance en cas d’erreur logiciel et de non respect des interfaces d’interactions avec le logiciel.
Facilité de recouvrement en cas défaillance
Densité et couverture de test
Désigne le nombre et la proportion du code source couverte par des tests, des outils comme Clover ou Cobertura permettent de produire des rapports sur cette couverture.
Stabilité du logiciel
Désigne le nombre d’erreur imprévues empêchant la fourniture du service, ce sont les bugs bloquants, à distinguer des anomalies liés à une inadéquation par rapport au besoin.
Utilisabilité
Désigne la capacité d’un produit logiciel à être compris, appris, utilisé et attrayant pour l’utilisateur quand celui-ci est utilisé dans certaines conditions. Désigne l’effort nécessaire pour son utilisation. Je ne vais pas décrire les sous-attributs (opérabilité, facilité d’apprentissage, compréhensibilité, attractabilité, conformité aux standards conventions et guides d’utilisabilité) mais seulement indiquer que l’utilisabilité est un domaine en plein essor, notamment avec les interfaces tactiles qui ont grandement augmenté l’utilisabilité des applications (voir la référence useit de Jakob Nielsen). Je vous recommande la lecture de ce billet traitant de l’utilisabilité sur notre blog.
Efficacité
Désigne la capacité d’un produit logiciel à fournir des performances appropriées, relativement à la quantité de ressources utilisées, dans certaines conditions.
Comportement temporel
Désigne la capacité d’un produit logiciel à fournir des temps de réponses, de traitement et un débit appropriés quand ses fonctions sont utilisées sous certaines conditions. Cela implique, bien sûr, de définir ces conditions, c’est à dire la charge (surtout les pics de charges, puisque le système sera dimensionné sur ce pic) estimée par fonctions mais également les volumes impliqués, et toutes les exigences non-fonctionnelles (cohérence des données, sécurité, etc.). Voir cet article pour faire une estimation « au dos d’une enveloppe » du comportement temporel du système.
Utilisation des ressources
Désigne la quantité et le type de ressources utilisés (CPU, disque, réseau, mémoire, etc.) et la durée associée quand ses fonctions sont invoquées.
Maintenabilité
L’attribut principal pour l’ingénieur que je suis. Il désigne la capacité d’un produit logiciel à être modifié. Les modifications peuvent inclure des corrections, des améliorations ou des adaptations du logiciel à des changements dans l’environnement, les besoins et les spécifications fonctionnelles. Désigne l’effort nécessaire pour la modification du logiciel. C’est l’attribut essentiel de l’assurance qualité du logiciel car c’est le plus immédiat et celui dont l’effet sur les coûts est le plus avéré.
Modifiabilité
Désigne la capacité d’un produit logiciel à permettre une modification spécifiée d’être implémentée.
Testabilité
Désigne la capacité d’un produit logiciel à être validé par rapport à une spécification.
Les éléments favorisant la testabilité pour chacune des trois étapes d’un test sont :
- Le contextedu test : la facilité de la mise en place du contexte est favorisée par
- Une conception stateless et la distinction entre objets mutables et immutables. L’approche fonctionnelle des traitements est très positive quant à la testabilité.
- Une base de données de référence avec des données de test ne variant pas
- La substitution aisée de classes d’implémentation grâce à des frameworks d’injection de dépendances permettant de réaliser des objets mock.
- Les actionstestées :
- Une séparation entre traitements métiers et persistance, afin de ne tester qu’une responsabilité à la fois.
- Un rollback de tous les traitements invoqués
- Les constats à l’issue de l’exécution des actions :
- Un accès aisé à l’état des objets et les différents attributs qui les composent
De manière générale, la séparation des responsabilités, le faible couplage et la forte cohésion favorisent une bonne testabilité.
Couplage
Le couplage est une propriété indiquant le niveau de dépendances entre composants d’un système. C’est une propriété globale obtenant à partir du calcul de dépendances entrantes et sortantes pour chaque composant.
Modularité
La modularité exprime la topologie de l’architecture avec le nombre de composants dépendants d’un composant en particulier. Un composant pouvant être, suivant le niveau de granularité désiré, un package, une classe ou une méthode.
Stabilité
Désigne la capacité d’un produit logiciel à éviter des effets imprévus suite à la modification du logiciel.
Portabilité
Désigne la capacité d’un produit logiciel à être transféré d’un environnement à un autre. L’environnement peut inclure l’environnement organisationnel, matériel ou logiciel. Un sous-attribut est l’installabilité que je range avec l’exploitabilité, c’est à dire « une fois mon produit terminé comment son exécution et son exploitation sont elle facilité ? »
Conclusion
Cet article est un panorama des attributs qualité permettant de préciser cette notion. Un prochain article décrira des principes de mise en oeuvre concrets et pragmatiques afin d’obtenir un bon rapport coût/qualité des produits logiciels.
Hello,
Je lis cet article suite à un tweet de mon boss Pablo 🙂
Je trouve toute cette définition trop fouillie, et surtout beaucoup trop subjective…
Aucune (ou presque) de ces notions n’est réellement mesurable de manière purement objective.
Je me rappelle de débats incessants sur la maintenabilité d’un bout de code d’une application qui l’était pour certains et pas pour d’autres, le seul critère faisant foi pour chacun étant sa compétence sur la technologie mise en oeuvre.
Donc ma critique principale par rapport à ce que propose l’ISO c’est le manque de repère objectif.
Jusque là, je n’ai été réellement séduit que par une seule définition de la qualité logicielle : c’est quand le coût d’ajout d’une fonctionnalité reste stable…
la suite à l’Agile Tour Toulouse et Montpellier 🙂
Hello,
I love this article so much but where is cohésion
Je trouve cet article est clair, concis, précis et pertinent. Il donne un bon cadre pour comprendre la qualité du logiciel.
Peut-être 3 idées d’amélioration : 1) rappeler en début brièvement la définition de la qualité :
« La qualité est la stricte satisfaction du besoin du client explicite (validé) ou implicite dans le respect des délais et des budgets ». Pour définir la qualité du logiciel, la norme 9126 est la plus utilisé.
2) Plus préciser ?
La norme 9126 a été intégrée à la norme 25000 également appelée SQUARE (Software QUAlity Requirements and Evaluation). SQUARE Définit 27 sous-caractéristiques.
et
3) ajouter quelques liens vers d’autres sites …
Merci encore
bonsoir , je veus savoir plus sur le mot opérabilité dans l’attribut ergonomie , si qlq peut m’aider , merci