Fiabilité, performance, évolutivité

Qu'est-ce que la qualité d'un programme ou d'une application informatique ?
 
Tout produit se caractérise par certains critères de qualité : on dirait qu'une voiture est de qualité si elle est performante (elle peut rouler vite, accélérer, freiner et tourner fortement en toute sécurité), confortable, maniable, belle, fiable, spacieuse ou compacte, peu bruyante, peu polluante, qu'il est difficile d'y pénétrer et de l'utiliser sans y être autorisé, qu'elle a peu de pannes, qu'elle est durable, etc... D'une part, elle rend bien le service pour lequel elle est faite, d'autre part elle ne pose pas de problèmes, enfin elle est agréable à utiliser. On attend également qu'elle ait un bon rapport qualité/prix à l'achat, qu'elle soit durable sans dégradation de ses qualités, et que son entretien soit facile et peu cher.
 
Il en est de même d'une application informatique. Elle existe pour rendre un service, dans un processus d'entreprise, ou pour un particulier. Elle doit rendre ce service efficacement, c'est-à-dire rapidement, de manière complète, pertinente, être toujours diponible, fiable, être pérenne et peu cher, facile et agréable à prendre en main et à utiliser, etc... A la différence d'un produit courant, une application informatique doit pouvoir de plus évoluer : elle "monte en versions" et enrichit peu à peu ses services en les adaptant à des besoins changeants. Elle doit aussi le plus souvent s'adapter à des environnements changeant : évolution des éléments matériels des ordinateurs et des réseaux, des interfaces avec d'autres applications et les utilisateurs, des protocoles d'échanges, des versions des systèmes d'exploitation, etc... Une application informatique doit être "tout terrain", "compatible" et le rester le plus longtemps possible malgré l'évolution de l'informatique.
 
L'obtention de la meilleure qualité possible pour une application informatique est un problème complexe. De nombreux choix doivent être faits : organisation des données, choix des langages de programmation, structuration des programmes, choix de bibliothèques, environnements, frameworks, procigiels ou outils du commerce, des infrastructures, des solutions d'interfaçage, etc...
 
Au sein de ce vaste sujet, directprogramming se concentre sur la qualité des programmes ainsi que des formats et des structures de données, problèmes qui sont couplés. directprogramming s'est spécialisé dans le développement de programmes de traitement de données massives du type données de gestion pour proposer à ses clients les solutions et les plus efficaces possibles : rapidité du développement et de l'adaptation aux besoins changeant, fiabilité (détection d'erreurs ou d'incohérences sur les données avec messages clairs), performance (exécution très rapide des traitements). Nous appellons cet ensemble de qualités l'efficacité. De plus, directprogramming implique ses clients utilisateurs au coeur même de la conception et du développement.

directprogramming n'est pas une entrprise qui propose de "l'assurance qualité", et encore moins de certifier ses clients à une quelconque norme ISO de qualité logicielle. directprogrmaming s'intéresse au fond de la question de la qualité, non comme un label, mais comme un principe directeur, et propose la déclinaison suivante de la qualité, des objectifs finaux (en haut) vers les moyens (en bas) :
 
 

directprogramming propose les regroupements et définitions suivantes de la qualité logicielle :

  • capacité fonctionelle : se dit d'une application qui couvre dans la durée toutes les fonctionalités voulues ;
  • performance et l'efficacité : on entend par performance d’un logiciel sa rapidité de traitement (ou calcul) ; on entend par efficacité d’un logiciel l’économie des ressources matérielles requises à performances données : CPU, mémoire vive, latence débit réseau et d'accès disques, volumes de données (espace disque), soit la petitesse du rapport coût matériel / performance ;
  • fiabilité et la robustesse : on entend par fiabilité la justesse (exhaustivité, exactitude, cohérence, précision) des données et des résultats de requêtes ou de traitements, mais aussi la disponibilité et la régularité de comportement (temps de réponse, stabilité) ; on entend par robustesse d’un logiciel la pertinence de ses réactions à des situations anormales : erreurs dues à l’utilisateur (dans les événements qu'il déclenche avec les interfaces et les données qu'il soumet au logiciel), donc clarté des messages et arrêt avant traitement dans les cas qui n’ont pas de sens ou incohérents ou erreurs dues à l’environnement (rendant les données indisponibles par exemple), mais aussi capacité à fonctioner au mieux en cas de carence de ressources ; dans le domaine algorithmique, la robustesse d’un algorithme signifie son efficacité et la précision de ses résultats pour un grand domaine de variabilité des données (conditionnement de matrices par exemple), donc également la bonne prise en compte de données « anormales » ;
  • ergonomie, souplesse, adaptabilité, simplicité, confort, voire esthétique d'utilisation : on entend par ergonomie d’un logiciel l’économie des gestes de l’utilisateur pour réaliser les opérations (sélection des fonctions, des données, modifications, choix de paramètres, d'options) ; on entend par souplesse l’ergonomie à des changements de situation : facilité à s'interfacer avec d'autres applications, à échanger des données à des formats divers, interruptibilité, possibilités de reprise ; la simplicité admet une définition courante : simplicité d'utilisation, de compréhension des concepts, des données, qualité de la documentation ; le confort et le fait d'avoir une utilisation agréable conditionne le taux d'erreur, l'assiduité et donc la productivité de l'utilisateur (mais son bonheur au travail est aussi un but en soi !) ;
  • maintenabilité et évolutivité : on entend par maintenabilité l'économie des moyens (physiques et humains) pour maintenir l'application disponible et fonctionelle, à fonctionalités figées, ce qui comprend en particulier la portabilité, c'est-à-dire la capacité à conserver les fonctionnalités de l'application et sa performance et sa fiabilité en supportant des changements techniques d'environnement (interfaces, infrastructures) et sa "scalabilité" (montée en charge) ;  l'évolutivité quant à elle désigne la capacité de l'application informatique à subir des évolutions fonctionnelles rapidement, au moindre coût, de manière rapide et fiable, c'est-à-dire sans régression des fonctionalités déjà présentes ou de leur fiabilité et performance de fonctionnement.
 
En fait, dans un sens étendu, seules deux qualités finales subsistent, les autres en dépendant et n'en constituant que des moyens :
 
  • la capacité fonctionelle
  • la performance opérationnelle avec lesquelles ces fonctionalités sont réalisées.

En effet, performance, fiabilité, robustesse, ergonomie conditionnent la productivité opérationnelle en utilisant le logiciel. Elles peuvent être qualifiées de performance dans un sens économique du terme. A la limite même, dans une acception avec degrés de capacité fonctionnelle, celle-ci reste la seule qualité finale, la performance conditionnant la bonne exécution fonctionnelle. De même, l'agrément d'utilisation n'a de valeur "économique" qu'en ce qu'elle conditionne la capacité fonctionelle, via la productivité de l'utilisateur et son taux d'erreurs.

Par ailleurs, la rapidité d'une application à pouvoir être développée rejoint la capacité fonctionnelle, en ce qu'elle satisfera le plus tôt possible le besoin fonctionnel. Sa facilité de reprise par une nouvelle équipe de développement et/ou de maintenance condionnera sa capacité à continuer subir des évolutions pendant cette phase de reprise ou la réduction au maximum des périodes pendant lesquelles les équipes ne sont pas en mesure de satisfaire des demandes d'évolution. Ces deux aspects condionnent évidemment le coût du développement et de la maintennace évolutive, dimensions de la qualité qui s'adressent au "payeur" et non à l'utilisateur qui ne voit que la capacité de l'application à suivre l'évolution des besoins métier. Utilisateur et payeur ne sont en général pas la même personne à la différence du possesseur d'une voiture qui est le plus souvent aussi son utilisateur.