Étant très sensible à la qualité de code, j’ai souhaité me pencher davantage sur la notion de qualité logicielle. Avant de débuter ce travail, je pensais que j’allais surtout entendre parler de tests et de techniques pour coder proprement. En réalité, ces éléments ne constituent que des outils pour améliorer l’un des critères de la qualité logicielle : la maintenabilité.
Il est impossible de résumer la qualité logicielle en quelques lignes, c’est pourquoi nous allons vous présenter une série d’articles sur le sujet. Dans cette première partie, nous allons découvrir ce qui se cache derrière la notion de qualité logicielle.
Mon point de départ a été de chercher la définition « officielle » de cette notion. J’ai rapidement été déçu puisque la première chose à savoir, c’est qu’il n’y a pas de définition établie et immuable de la qualité logicielle. Pour résumer simplement cette dernière, c’est l’appréciation d’un logiciel au travers de critères qui peuvent différer suivant les référentiels choisis, et évoluer avec le temps.
Je me suis alors décidé à rechercher une liste de critères créant un consensus. Cela m’a permis de prendre connaissance de l’existence des normes ISO/IEC 9126 et ISO/IEC 25010, qui définissent un certain nombre de critères autour de la qualité logicielle et font office de standard.
La norme ISO/IEC 25010 remplaçant la norme ISO/IEC 9126 depuis 2011, c’est elle qui fait référence à l’heure où j’écris cet article. Par conséquent, nous allons nous pencher tout particulièrement sur les critères liés à cette dernière.
Ceux-ci sont séparés en deux familles : les critères de qualités internes (ceux qui sont intrinsèques au produit) et les critères de qualité externes (ceux visibles par l’utilisateur).
Les critères de la qualité logicielle
Adéquation fonctionnelle
- Complétude fonctionnelle : capacité d’un logiciel à répondre à toutes les spécifications fonctionnelles et besoins de l’utilisateur.
- Exactitude fonctionnelle : capacité d’un logiciel à donner le résultat correct avec le degré de précision attendu.
- Pertinence fonctionnelle : capacité d’un logiciel à faciliter l’accomplissement des tâches spécifiées et des objectifs.
Ce critère permet d’évaluer si la solution présentée est conforme aux attentes implicites et explicites de l’utilisateur.
Efficience des performances
- Comportement dans la durée : la durée nécessaire pour réaliser des actions.
- Utilisation des ressources : les ressources nécessaires au logiciel pour fonctionner.
- Capacité : les limites en deçà desquelles le logiciel fonctionne correctement (nombre d’utilisateurs simultanés par exemple).
Il s’agit ici d’évaluer si le besoin en ressources de l’application est acceptable pour répondre aux contraintes fixées.
Compatibilité
- Coexistence : capacité d’un logiciel à fonctionner efficacement sur un environnement sans impacter négativement les autres logiciels présents sur ce dernier.
- Interopérabilité : capacité d’un logiciel ou d’un composant logiciel à échanger des informations et à utiliser les informations provenant d’un échange.
La compatibilité est la capacité d’un logiciel à communiquer avec d’autres composants et à fonctionner correctement même si l’environnement matériel ou logiciel est partagé.
Utilisation
- Reconnaissance de pertinence : la capacité qu’ont les utilisateurs de reconnaître si un logiciel est adéquat pour répondre à leurs besoins.
- Facilité d’apprentissage : capacité d’un logiciel à être accessible et aisément pris en main par les utilisateurs.
- Opérabilité : facilité d’utilisation du logiciel.
- Protection contre les erreurs utilisateur : capacité d’un logiciel à être protégé contre les erreurs causées par l’utilisateur.
- Esthétique : capacité d’un logiciel à fournir une expérience plaisante à l’utilisateur.
- Accessibilité : capacité d’un logiciel à être utilisé par des utilisateurs présentant diverses caractéristiques (daltoniens, malvoyants par exemple).
Ce qui est mesuré est donc le « niveau de praticité » pour l’utilisateur de la solution. En d’autres mots, ce qui est évalué est l’efficacité et la satisfaction avec laquelle l’utilisateur réalise ses tâches à l’aide du logiciel.
Fiabilité
- Maturité : capacité d’un composant, d’un produit ou d’un système à répondre aux besoins de fiabilité dans des conditions normales.
- Disponibilité : capacité d’un logiciel à être accessible et opérationnel lorsqu’il doit être utilisé.
- Tolérance aux erreurs : capacité d’un logiciel à fonctionner correctement malgré la présence d’une erreur matérielle ou logicielle.
- Résilience : capacité d’un logiciel à récupérer les données affectées par une interruption ou une erreur et à rétablir le système.
Ce critère permet d’évaluer la capacité d’un logiciel à fonctionner correctement lors de fortes contraintes (fort trafic, panne matérielle, etc…) et suite à celles-ci.
Sécurité
- Confidentialité : capacité d’un logiciel à s’assurer que les données ne sont accessibles que par les personnes autorisées.
- Intégrité : capacité d’un logiciel à empêcher tout accès non-souhaité aux données ou au logiciel, ainsi que toute modification indésirable de ces derniers.
- Non-répudiation : capacité d’un logiciel à enregistrer les actions ou les évènements qui ont eu lieu.
- Imputabilité : capacité d’un logiciel à tracer les actions d’une entité en particulier.
- Authenticité : capacité d’un logiciel à identifier une personne ou une ressource.
La sécurité est la capacité d’un logiciel à protéger ses informations.
Maintenabilité
- Modularité : capacité d’un logiciel à être constitué de composants indépendants, de sorte que le changement d’un de ces composants ait un impact minimal sur les autres.
- Capacité de réutilisation : capacité d’une ressource à être utilisée dans plusieurs systèmes ou dans la construction d’autres ressources.
- Capacité d’analyse : capacité d’un logiciel à permettre un diagnostic efficient et efficace à propos d’un impact ou d’un changement inattendu sur l’un ou plusieurs de ses constituants. C’est également la capacité à diagnostiquer une erreur sur le produit ainsi que les causes de cette erreur. Cela comprend en outre l’aptitude à identifier les éléments nécessitant des modifications.
- Facilité de modification : capacité d’un logiciel à être modifié sans introduire de défaut ou diminuer la qualité du produit.
- Testabilité : capacité à établir des critères de tests pour un système, un produit ou un composant. Ceci englobe également la capacité des tests à être exécutés pour déterminer si ces critères ont été remplis.
La maintenabilité représente la facilité avec laquelle le logiciel peut être modifié et validé.
Portabilité
- Facilité d’adaptation : capacité d’un produit ou d’un système à être adapté pour des conditions matérielles, logicielles ou d’usage différentes.
- Facilité d’installation : capacité d’un logiciel à être installé et/ou désinstallé dans un environnement spécifique.
- Facilité de remplacement : capacité d’un logiciel à remplacer un autre logiciel spécifique ayant un but similaire dans le même environnement.
La portabilité est donc la capacité de transfert du logiciel, c’est-à-dire la facilité avec laquelle il peut être installé sur divers systèmes.
Conclusion
Ces critères permettent à la fois de partager des définitions communes mais aussi de connaître le périmètre de la qualité logicielle. Maitriser leur signification est un travail préalable indispensable à toute mise en place de processus de qualité.
Nous avons pu constater ici que la qualité logicielle comprend un champ de critères très large, ce qui fut une grande découverte pour moi qui la réduisait uniquement à la maintenabilité.
Cet article était le plus théorique de la série, et nous verrons prochainement les différentes raisons d’améliorer la qualité logicielle ainsi que les manières de diagnostiquer chacun des critères et de se perfectionner à leur sujet avec des exemples concrets.
A très bientôt pour la suite 😊
Sources
ISO « ISO 25010 ». https://iso25000.com HYPERLINK « https://iso25000.com/index.php/en/iso-25000-standards/iso-25010″/index.php/en/iso-25000-standards/iso-25010 Document officiel de la norme ISO/IEC 25010.
Photo by Laura Ockel on Unsplash