J’imagine que pour la plupart d’entre vous, le terme « qualité logicielle » est flou, mais saviez-vous qu’il existe une norme internationale qui le définit ?

Notions derrière la qualité logicielle

Il s’agit de la norme ISO/IEC 25010:2011. Étudions-la ensemble.

Les notions principales autour de la qualité logicielle

La qualité logicielle passe par différentes notions, dont vous avez sûrement déjà entendu parler, au moins pour certaines. Elles sont au nombre de huit, elles-mêmes composées de sous-notions :

Cas d’exemple

Pour illustrer l’intégralité des notions, plaçons nous dans le cas d’une application de vente en ligne (e-commerce) comme vous en utilisez déjà très certainement. Chaque notion sera suivie d’un exemple correspondant à ce cas.

La capacité fonctionnelle

La complétude fonctionnelle (Functional completeness)

L’ensemble des fonctions couvrent toutes les tâches spécifiées et les objectifs de l’utilisateur

L’utilisateur doit pouvoir réaliser toutes les actions attendues, de la recherche à l’achat final, en passant par l’ajout dans un panier.

L’exactitude fonctionnelle (Functional correctness)

Le produit ou système met à disposition les résultats corrects avec un degré de précision nécessaire

Si je cherche des livres des années 80, j’ai bien la liste des livres des années 80.

La pertinence fonctionnelle (Functional appropriateness)

Les fonctions facilitent l’accomplissement de tâches et d’objectifs précis

L’ajout d’un article dans le panier se fait sur les pages attendues, l’utilisateur se voit proposer des articles souvent achetés en même temps et l’enchaînement des actions fait tout son sens.

Les performances

Le comportement temporel (Time behaviour)

Les temps de réponse, de traitement et de débits d’un produit ou d’un système, lors de l’exécution de ses fonctions, satisfont aux exigences

La recherche de produits doit afficher les résultats en moins d’une seconde.

L’utilisation des ressources (Resource utilization)

Les quantités et types de ressources utilisés par un produit ou un système, dans l’exercice de ses fonctions, satisfont aux exigences

Je souhaite qu’un cluster seul puisse supporter une charge de 1 000 utilisateurs en simultané.

La capacité (Capacity)

Les limites maximales d’un produit ou d’un paramètre du système répondent aux exigences

Je souhaite que mon système utilise au maximum 50Go de données par mois.

La compatibilité

La co-existence

Un produit peut exécuter ses fonctions de manière efficace tout en partageant un environnement et des ressources en communs avec d’autres produits, sans impact négatif sur tout autre produit

L’application de e-commerce doit co-exister avec l’application de back-office permettant de faire les comptes de l’entreprise qui tourne sur le même serveur.

L’interopérabilité (Interoperability)

Deux ou plus de systèmes, produits ou composants peuvent échanger des informations et utiliser les informations échangées

L’application de e-commerce doit dispatcher la commande aux services de livraison.

L’utilisabilité

L’aptitude à la reconnaissance (Appropriateness recognizability)

Les utilisateurs peuvent reconnaître qu’un produit ou un système est adapté à leurs besoins

Les utilisateur utilisent l’application pour acheter des articles dont ils ont besoin.

La facilité d’apprentissage (Learnability)

Un produit ou un système peut être utilisé par des utilisateurs spécifiques pour atteindre des objectifs précis d’apprentissage de l’utilisation du produit ou du système avec efficacité, efficience, absence de risque et de satisfaction dans un contexte d’utilisation spécifique

L’utilisateur est accompagné tout le long de son parcours sur l’ensemble du site, il comprend comment aller jusqu’à l’achat.

L’opérabilité (Operability)

Un produit ou un système a des attributs qui le rend facile à utiliser et à contrôler

Je peux contrôler l’intérieur de mon panier, retirer des articles ajoutés par erreur, visualiser le prix final après éventuelles réductions.

La protection contre les erreurs utilisateur (User error protection)

Un produit ou un système est protégé contre les erreurs issues des utilisateurs

Si l’utilisateur saisit une chaîne de caractères invalides, l’application doit le détecter et retourner un message d’erreur.

L’esthétique de l’interface utilisateur (User interface aesthetics)

Une interface utilisateur permet une interaction agréable et satisfaisante pour l’utilisateur

Les résultats des tests UX/UI montrent que les informations importantes pour l’utilisateur de manière claire et agréable.

L’accessibilité (Accessibility)

Un produit ou un système peut être utilisé par des personnes ayant le plus grand nombre de caractéristiques et de capacités pour atteindre un objectif spécifié dans un contexte d’utilisation spécifique

Les résultats des tests UX/UI montrent que l’application est suffisamment simple pour pouvoir être utilisée par des personnes de plus de 60 ans.

La robustesse

La maturité (Maturity)

Un système, un produit ou un composant répond aux besoins de fiabilité en fonctionnement normal

L’application est stable et opérationnelle.

La disponibilité (Availability)

Un système, un produit ou un composant est opérationnel et accessible au besoin

L’application est accessible en ligne 24/24, 7/7, à un taux de disponibilité de 99,9%.

La tolérance aux pannes (Fault tolerance)

Un système, un produit ou un composant fonctionne comme prévu malgré la présence de pannes matérielles ou logicielles

Si un serveur tombe, un autre prend le relai en moins d’une seconde. Les erreurs logicielles ne font pas tomber le matériel.

La récupérabilité (Recoverability)

En cas d’interruption ou de défaillance, un produit ou un système peut récupérer les données directement affectées et rétablir l’état souhaité du système

Le serveur ayant pris le relai a gardé les articles dans les paniers de tous les utilisateurs actuellement connectés.

La sécurité

La confidentialité (Confidentiality)

Un produit ou un système garantit que les données ne sont accessibles qu’aux personnes autorisées à y avoir accès

Le gérant de l’application a des accès à des données que les autres utilisateurs ne peuvent pas obtenir de quelque façon que ce soit.

L’intégrité (Integrity)

Un système, un produit ou un composant empêche l’accès non autorisé à des programmes informatiques ou des données, ou la modification de ceux-ci

Seuls les accès via l’application de e-commerce peuvent modifier le contenu du panier des utilisateurs.

La non-répudiation (Non-repudiation)

Des actions ou des événements peuvent être prouvés avoir eu lieu, de sorte que les événements ou les actions ne peuvent être répudiées plus tard

La validation de l’achat et du paiement ne peuvent être contestés.

La responsabilité (Accountability)

Les actions d’une entité peuvent être tracées à l’entité de façon unique

Chaque action sur l’interface contient l’identité de son auteur.

L’authenticité (Authenticity)

Preuve de l’identité d’un sujet ou d’une ressource

L’application garanti que c’est bien cet utilisateur qui a passé la commande.

La maintenabilité

La modularité (Modularity)

Un système ou un programme informatique est composé de composants distincts, de sorte qu’un changement sur un composant a un impact minimal sur les autres composants

L’ajout d’une nouvelle brique d’analyses des tendances des achats n’impose pas la refonte totale de l’application.

La réutilisabilité (Reusability)

Un composant ou une brique peut être utilisé dans plusieurs systèmes ou dans la création d’autres composants ou briques

Le module de choix de date peut être utilisé partout, aussi bien dans le profil de l’utilisateur pour sa date de naissance que pour choisir sa date de livraison à la fin de son panier.

L’analysabilité (Analysability)

Efficacité avec lequel il est possible d’évaluer l’impact sur un produit ou un système d’une modification envisagée à une ou plusieurs de ses parties, ou de diagnostiquer un produit pour détecter des défaillances ou des causes de défaillance, ou identifier des parties à modifier

Si je veux modifier la fonctionnalité d’ajout d’un article dans le panier, je sais exactement tout ce que cela impacte. Les erreurs intervenues lors de son utilisation sont consultables dans un journal qui me permet d’y remédier.

La possibilité de modification (Modifiability)

Un produit ou un système peut être modifié efficacement sans introduire des défauts ou dégrader la qualité du produit existant

Le code est suffisamment bien construit et toute évolution n’entraîne pas de régression dans les fonctionnalités existantes.

La testabilité (Testability)

Efficacité et efficience avec lequel des critères de test peuvent être établis pour un système, un produit ou un composant et des tests peuvent être effectués pour déterminer si ces critères ont été respectés

Je dispose de différentes façons pour tester efficacement le code, que ce soit avec des tests unitaires, d’intégration, de bout en bout ou de performance.

La portabilité

L’adaptabilité (Adaptability)

Un produit ou un système peut être adapté de manière efficace et efficiente à des matériels, logiciels ou autres environnements opérationnels ou d’utilisation différents ou en constante évolution

Le site web peut être utilisé depuis un smartphone, peu importe son OS et sa résolution.

La facilité d’installation (Installability)

Efficacité et efficience avec lequel un produit ou un système peut être installé et/ou désinstallé avec succès dans un environnement spécifié

L’application peut être déployée sur une machine peu importe son OS ou sa configuration en moins de quelques minutes, voire secondes.

La remplaçabilité (Replaceability)

Un logiciel ou un produit peut en remplacer un autre spécifiquement pour le même usage dans le même environnement

Je dois pouvoir remplacer la sous application d’achat par une autre conçue dans une toute autre technologie sans grands impacts sur le reste de l’écosystème.

Bilan

Ces huit notions permettent d’y voir un peu plus clair par rapport aux attentes de qualité logicielle.
Lesquelles sont les plus importantes pour vous ? Et lesquelles appliquez-vous ?

Sources

Norme ISO/IEC 25010:2011