TDA

La qualité du logiciel


Version de

La qualité du logiciel est l’objectif du génie logiciel. Ce n’est pas une idée simple mais un ensemble de facteurs. Les recherches de ces dernières années concernent la rapidité, la fiabilité, la lisibilité. Nous avons, dans la première partie, abordée la notion de programmation structurée. Au cours des travaux pratiques, nous avons utilisé la programmation modulaire. Du point de vue externe de l’utilisateur, la qualité d’un logiciel se manifeste par son ergonomie, son efficacité, sa facilité d’emploi. Du point de vue interne du concepteur, la qualité se fonde sur la facilité de mise au point, la lisibilité du source et la réutilisabilité. La maintenance du logiciel est chose coûteuse… en efforts. (cf. Le bug de l’an 2000). Il convient donc de s’orienter vers une simplification et une clarification du travail par :
  • La modularité. On décompose le programme en autant de fichiers que nécessaire afin de réduire les difficultés. Cette décomposition logique et sensée, vise à favoriser la réutilisabilité des modules. En particulier, il est adroit de décomposer le problème afin qu’un changement de spécification n’induise la réécriture que d’un seul module. D’autre part, les données d’un module lui sont propres\footnote{C’est l’encapsulation. page suivante} et protégées. L’accès aux données se fait par interfaces c’est à dire des méthodes (.e. des fonctions) appartenant aux modules, accessibles depuis d’autres modules.
  • La réutilisabilité. Il est agréable de pouvoir utiliser le même module quelque soit le type de données traitées. Pourquoi réécrire un calcul de moyenne sur des entiers si l’on dispose déjà du même calcul sur des réels ? De même, les travaux récents sur les interfaces homme/machine (ihm), révèle l’importance de disposer de modules indépendant de la présentation et pouvant être utilisés avec différentes présentations (html, fvwm ou tk)
  • La certification. Il n’existe pas (encore) de solution pour une réalisation parfaite des logiciels. Il est cependant possible d’inclure des éléments de spécification parmi les lignes de code. C’est notamment le cas en langage C avec la macro assert. Nous l’avons abondamment utilisé dans la première partie. En voici un autre exemple :
    #include 
    main()
    {
         int a, b, u, x , y ;
    
         scanf ("%d%d", &x, &y) ;
    
         a = x ; b = y ;
    
         u = x + y ;
         u = u + u ;
         x = x + y ; 
         u = u - x ;
    
         assert ( u == (a + b)) ;
         assert ( x == (a + b)) ;
    
         printf ("u :%d, x = %d\n", u, x) ;
    }
    
On utilisera cette technique afin de garantir que les conditions d’utilisation des modules sont respectées. Par exemple, la méthode de retrait d’un élément d’une pile s’assurera que la pile n’est pas vide. Les assertions contribuent à réaliser du logiciel correct, aident à la documentation, facilitent le déboguage et la tolérance de pannes.
TDA