En informatique et en particulier en génie logiciel, la qualité logicielle est une appréciation globale d'un logiciel, basée sur de nombreux indicateursAlain April et Claude Laporte, Assurance qualité logicielle 1: concepts de base, Lavoisier, 2011, , p. 387.
La complétude des fonctionnalités, la correction et précision des résultats, la fiabilité, la tolérance de pannes, la facilité et la flexibilité de son utilisation, la simplicité, l'extensibilité, la compatibilité et la portabilité, la facilité de correction et de transformation, la performance, la cohérence et l'intégrité des informations qu'il contient sont tous des facteurs de qualitéCarl-August Zehnder, Développement de projet en informatique, PPUR presses polytechniques - 1990, , p. 174.
Contrairement à un matériel, un logiciel est un produit qui n'a pas une fiabilité prédictible, de plus il ne s'use pas dans le temps. Donc une anomalie survient ou ne survient pas dans l'exécution du logiciel, l'anomalie est présente de manière latente et peut ne jamais survenir. La qualité d'un logiciel dépend entièrement de sa construction et des processus utilisés pour son développement, c'est par conséquent un sujet central en génie logiciel. Une appréciation globale de la qualité tient autant compte des facteurs extérieurs, directement observables par l'utilisateur, que des facteurs intérieurs, observables par les ingénieurs lors des revues de code ou des travaux de maintenance.
Les problèmes de qualité des logiciels, connus depuis les années 1960, sont par ailleurs à l'origine du génie logiciel, la science de la création de logiciels, y compris toutes les difficultés qui y sont liées - respects des coûts, des délais, du cahier des charges et du niveau de qualitéMarylène Micheloud et Medard Rieder, Programmation orientée objets en C++: Une approche évolutive, PPUR presses polytechniques, 2002, , p. 259.
Il existe plusieurs référentiels de certification du système de management de la qualité en entreprise, en matière d’ingénierie du logiciel comme TickIT.
Indicateurs de qualité logicielle La norme ISO 9126 (remplacée depuis 2011 par la norme 25010 ré-examinée en 2017) définit six groupes d'indicateurs de qualité des logicielsJean Menthonnex - CERSSI, Sécurité et qualité informatiques: nouvelles orientations, PPUR presses polytechniques, 1995, , p. 77 : la capacité fonctionnelle. c'est-à-dire la capacité qu'ont les fonctionnalités d'un logiciel à répondre aux exigences et besoins explicites ou implicites des usagers. En font partie la précision, l'interopérabilité, la conformité aux normes et la sécurité ; la facilité d'utilisation, qui porte sur l'effort nécessaire pour apprendre à manipuler le logiciel. En font partie la facilité de compréhension, d'apprentissage et d'exploitation et la robustesse - une utilisation incorrecte n'entraîne pas de dysfonctionnement ; la fiabilité, c'est-à-dire la capacité d'un logiciel de rendre des résultats corrects quelles que soient les conditions d'exploitation. En font partie la tolérance aux pannes - la capacité d'un logiciel de fonctionner même en étant handicapé par la panne d'un composant (logiciel ou matériel) ; la performance, c'est-à-dire le rapport entre la quantité de ressources utilisées (moyens matériels, temps, personnel), et la quantité de résultats délivrés. En font partie le temps de réponse, le débit et l'extensibilité - capacité à maintenir la performance même en cas d'utilisation intensive ; la maintenabilité, qui mesure l'effort nécessaire à corriger ou transformer le logiciel. En font partie l'extensibilité, c'est-à-dire le peu d'effort nécessaire pour y ajouter de nouvelles fonctions ; la portabilité, c'est-à-dire l'aptitude d'un logiciel à fonctionner dans un environnement matériel ou logiciel différent de son environnement initial. En font partie la facilité d'installation et de configuration dans le nouvel environnement.
Chaque caractéristique contient des sous-caractéristiques. Il y a 27 sous-caractéristiques.
Les différents indicateurs sont parfois conflictuels, ou au contraire complémentaires : une augmentation de la capacité fonctionnelle peut avoir un impact négatif sur la performance, la maintenabilité et la fiabilité. Tandis qu'une augmentation de la fiabilité, la maintenabilité ou de la disponibilité ont un impact positif sur l'utilisabilité. En outre, une augmentation de la maintenabilité peut avoir un impact négatif sur la performance Stephen H. Kan, Metrics and models in software quality engineering, Addison-Wesley, 2003, .
Crise du logiciel Un phénomène de baisse des prix du matériel informatique et d'augmentation des prix du logiciel, et nommé la « crise du logiciel ». Cette crise s'apparente aujourd'hui à une maladie chronique de l'industrie du logiciel, dont les symptômes sont les suivants : les délais de livraison des logiciels sont rarement tenus, le dépassement de délai et de coût moyen est compris entre 50 et 70 % ; la qualité du logiciel correspond rarement aux attentes des acheteurs, le logiciel ne correspond pas aux besoins, il consomme plus de moyens informatiques que prévu, et tombe en panne ; les modifications effectuées après la livraison d'un logiciel coûtent cher, et sont à l'origine de nouveaux défauts. Les adaptations sont bien souvent une nécessité du fait de l'évolution des produits et des attentes des utilisateurs ; il est rarement possible de réutiliser un logiciel existant pour en faire un nouveau produit de remplacement ; l'amortissement du coût de développement initial est ainsi rendu impossible.
Auparavant minoritaire, le coût du logiciel en 1965 représentait 50 % du coût total d'un système informatique. En 1985 la part du logiciel est de 80 % et les coûts dus à la correction des défauts dans les logiciels (maintenance) représentent jusqu'à trois quarts du coût total d'acquisition, un excédent dû uniquement à la mauvaise qualité du logiciel lors de sa livraison.
Selon une étude réalisée en 1994 par le Standish Group, 53 % des logiciels créés sont une réussite mitigée : le logiciel est opérationnel, cependant le délai de livraison n'a pas été respecté, les budgets n'ont pas été tenus, et certaines fonctionnalités ne sont pas disponibles. Le dépassement des coûts est en moyenne de 90 %, et celui des délais de 120 %, et la qualité moyenne est estimée à 60 %.
Raisons du manque de qualité des logiciels Un logiciel étant un produit immatériel, les seules représentations observables du logiciel sont le code source, l'interface utilisateur et la documentation (spécification, cahiers de tests, manuels utilisateur). La quantité de code source (nombre de lignes) est rarement connue à l'avance, ce qui entraîne souvent une sous-estimation de la complexité du logiciel.
Pour chaque module d'un logiciel il existe de nombreuses conditions d'utilisation. La combinaison des différentes conditions d'utilisation des différents modules d'un logiciel amène une explosion combinatoire, et lors de son développement, un logiciel est rarement testé dans la totalité des conditions d'utilisation qu'il rencontrera durant son exploitation ; ceci pour des raisons pratiques (coût et durée des travaux).
Une autre raison est l'absence de lien entre un défaut mineur et majeur, et une modification mineure ou majeure. Et l'effort de correction d'un logiciel n'est pas proportionnel à l'importance du défaut constaté. Un défaut mineur peut entraîner un incident majeur, et nécessiter une correction mineure. Dans l'accident du vol 501 d'Ariane 5, une correction mineure aurait suffi à éviter la destruction de la fusée. De même une modification mineure d'un logiciel peut le mettre hors d'usage ; un phénomène largement exploité par les virus informatiquesJacques Perrin, Conception entre science et art: regards multiples sur la conception, PPUR presses polytechniques, 2001, , p. 62.
Pour être considéré comme produit de qualité par l'usager, un logiciel doit répondre aux besoins exprimés explicitement par l'usager aussi bien qu'aux besoins implicites (non exprimés). Or les vœux implicites évoluent avec le marché, et il arrive bien souvent que des vœux implicites des usagers ne soient pas connus des ingénieurs logicielsPhilippe Dugerdil, Impact des décisions informatiques: Introduction à l'informatique pour décideur non informaticien, PPUR presses polytechniques - 2005, , p. 201.
Amélioration de la qualité En génie logiciel, la factorisation des données et du code constituent le moyen universel d'obtention de la qualité. La factorisation des données aboutit au modèle objet (avec usage de l'héritage) dont le correspondant systématique relationnel est idéal lorsqu'il est normalisé (formes normales de Codd). En effet, lorsque les structures de données sont ainsi normalisées, elles deviennent non redondantes, donc minimales en taille, et n'engendrant aucun problème d'incohérence dès lors que l'intégrité découlant de leur type et l'intégrité référentielle sont assurées, contraintes auxquelles il faut ajouter des "règles métiers" consistant en contraintes logiques faisant intervenir plusieurs champs/attributs. Ce travail au niveau des données permet en soi la réduction du code de traitement exploitant ces données. La performance n'en souffre pas si les requêtes sont bien organisées.