Qualité logicielle

Qualité logicielle

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 indicateurs [1].

La complétude des fonctionnalités, la 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 consistance et l'intégrité des informations qu'il contient sont tous des facteurs de qualité[2].

Un logiciel est un produit qui ne se détériore pas et qui est continuellement modifié. La qualité d'un logiciel dépend entièrement de sa construction, la qualité logicielle est par conséquence 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é[3].

Il existe un référentiel de certification du système de management de la qualité en entreprise, en matière d’ingénierie du logiciel le TickIT.

Sommaire

Indicateurs de qualité logicielle

La norme ISO 9126 définit six groupes d'indicateurs de qualité des logiciels[4] :

  • la capacité fonctionnelle. c'est-à-dire la capacité qu'ont les fonctionnalités d'un logiciel à répondre aux 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 (le peu d') 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 de 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 porte sur l'effort (le peu d') nécessaire en vue de corriger ou de 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 de fonctionner dans un environnement matériel ou logiciel différent de son environnement initial. En font partie la facilité d'installation et de configuration pour 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 a 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é a un impact négatif sur la performance[5].

La crise du logiciel

Un phénomène de baisse des prix du matériel informatique et d'augmentation des prix du logiciel, accompagné d'une baisse de la qualité des logiciels a été identifié à la fin des années 1960 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 attente des acheteurs, le logiciel ne correspond pas aux besoins, il consomme plus de moyens informatiques que prévu, et tombe en panne ;
  • les modifications après coup des logiciels 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[6].

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ésente 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 %[7].

Raisons du manque de qualité des logiciels

Un logiciel étant un bien immatériel, les seules représentations observables du logiciel sont le code source, l'interface utilisateur et la documentation (spécification). La quantité de code source (nombre de lignes) est rarement connu, 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 sa construction un logiciel n'est jamais contrôlé 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 qu'il n'y a pas de lien entre un défaut mineur et majeur, et une modification mineure ou majeure. Et l'effort de détérioration d'un logiciel n'est pas proportionnel à l'effort de construction. Un défaut mineur peut entrainer un incident majeur, et nécessiter une correction mineure. Dans l'incident 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 informatiques[8].

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 logiciels[9].

Amélioration de la qualité

En génie logiciel, la recherche d'abstraction, de dissimulation, de structuration, d'uniformité, de complétude et de confirmabilité sont des mesures destinés à améliorer la qualité du logiciel, en factorisant le code, c'est-à-dire en n'écrivant qu'une fois des instructions similaires. Cela permet que les modifications soient le plus locales possibles. Cette factorisation concerne les structures de données elles-mêmes (notamment par l'usage des classes et de l'héritage), et les traitements (par l'usage des boucles, fonctions et procédures). Un gain complémentaire de réduction du code source est apporté par le polymorphisme et la liaison dynamique (qui éliminent les « procédures aiguillage ») en programmation objet.

La modularité, c'est-à-dire la qualité d'un logiciel d'être découpé en de nombreux modules, permet l'abstraction et la dissimulation. Associée avec un couplage faible, elle vise à augmenter la maintenabilité du logiciel en diminuant le nombre de modules touchés par des éventuelles modifications, ainsi que la fiabilité en diminuant l'impact que l'échec d'un module peut avoir sur les autres modules.

En jargon de programmation, un plat de spaghetti désigne un logiciel de mauvaise qualité au couplage trop fort et au code source difficile à lire, dans lequel toute modification même mineure demande un intense travail de programmation.

L'abstraction vise à diminuer la complexité globale du logiciel en diminuant le nombre de modules et en assurant l'essentiel. Elle peut également apporter une uniformité du logiciel qui augmente son utilisabilité en facilitant son apprentissage et son utilisation.

La dissimulation vise à séparer complètement les détails techniques du logiciel de ses fonctionnalités selon le principe de la boîte noire, en vue d'améliorer sa maintenabilité, sa portabilité et son interopérabilité.

La structuration des instructions et des données rend clairement visible dans le code source les grandes lignes de l'organisation des instructions et des informations manipulées, ce qui améliore sa maintenabilité et facilite la détection des bugs[10].

De nombreux langages de programmation soutiennent, voire imposent l'écriture de code source selon les principes de structuration, de modularité et de dissimulation. C'est le cas des langages de programmation structurée et de programmation orientée objet.

Notes et références

  1. Alain April et Claude Laporte, Assurance qualité logicielle 1: concepts de base, Lavoisier, 2011, (ISBN 9782746231474), page 387
  2. Carl-August Zehnder, Développement de projet en informatique, PPUR presses polytechniques - 1990, (ISBN 9782880741723), page 174
  3. Marylène Micheloud et Medard Rieder, Programmation orientée objets en C++: Une approche évolutive, PPUR presses polytechniques, 2002, (ISBN 9782880745042), page 259
  4. Jean Menthonnex - CERSSI, Sécurité et qualité informatiques: nouvelles orientations, PPUR presses polytechniques - 1995, (ISBN 9782880742881), page 77
  5. (en)Stephen H. Kan, Metrics and models in software quality engineering, Addison-Wesley - 2003, (ISBN 9780201729153)
  6. Cycle de vie du logiciel
  7. La crise du logiciel
  8. Jacques Perrin, Conception entre science et art: regards multiples sur la conception, PPUR presses polytechniques - 2001, (ISBN 9782880744809), page 62
  9. Philippe Dugerdil, Impact des décisions informatiques: Introduction à l'informatique pour décideur non informaticien, PPUR presses polytechniques - 2005, (ISBN 9782880746100), page 201
  10. Introduction au génie logiciel

Voir aussi

Lien externe


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Qualité logicielle de Wikipédia en français (auteurs)

Игры ⚽ Поможем сделать НИР

Regardez d'autres dictionnaires:

  • Squale (Qualité logicielle) — Squale Software QUALity Enhancement Environnement Multi plateforme Langue …   Wikipédia en Français

  • Sonar (Qualité logicielle) — Tableau de bord Sonar …   Wikipédia en Français

  • Logicielle — Logiciel Chaîne de production d un logiciel En informatique, un logiciel est un ensemble d informations relatives à des traitements effectués automatiquement par un appareil informatique. Y sont inclus les instructions de traitement, regroupées… …   Wikipédia en Français

  • Architecture logicielle — L’architecture logicielle décrit d’une manière symbolique et schématique les différents éléments d’un ou de plusieurs systèmes informatiques, leurs interrelations et leurs interactions. Contrairement aux spécifications produites par l’analyse… …   Wikipédia en Français

  • Architecture Logicielle — L’architecture logicielle décrit d’une manière symbolique et schématique les différents composants d’un ou de plusieurs systèmes informatiques, leurs interrelations et leurs interactions. Contrairement aux spécifications produites par l’analyse… …   Wikipédia en Français

  • Métrique logicielle — Métrique (logiciel) Pour les articles homonymes, voir Métrique. Une métrique logicielle est une compilation de mesures issues des propriétés techniques ou fonctionnelles d un logiciel. Il est possible de classer les métriques logicielle en trois… …   Wikipédia en Français

  • Ingénierie logicielle — Génie logiciel Le génie logiciel (en anglais : software engineering) désigne l ensemble des méthodes, des techniques et des outils concourant à la production d un logiciel, au delà de la seule activité de programmation. Sommaire 1… …   Wikipédia en Français

  • Memoire transactionnelle logicielle — Mémoire transactionnelle logicielle En informatique, la mémoire transactionnelle logicielle, en anglais software transactional memory (STM), est un mécanisme de contrôle de concurrence analogue aux transactions de base de données pour contrôler l …   Wikipédia en Français

  • Mémoire Transactionnelle Logicielle — En informatique, la mémoire transactionnelle logicielle, en anglais software transactional memory (STM), est un mécanisme de contrôle de concurrence analogue aux transactions de base de données pour contrôler l accès à la mémoire partagée dans la …   Wikipédia en Français

  • Mémoire transactionnelle logicielle — En informatique, la mémoire transactionnelle logicielle, en anglais software transactional memory (STM), est un mécanisme de contrôle de concurrence analogue aux transactions de base de données pour contrôler l accès à la mémoire partagée dans la …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”