Home

Qualité Developpement Henocque Esil Info 2008

image

Contents

1. n cessaire sur SOLAR V2 Par ailleurs ce dernier programme contredit le point 4 puisque du code inutile est compil presque partout pour les beaux yeux de SOLAR V2 seulement 2 7 Avoir une d marche produit Citons rapidement quelques concepts clef garder en m moire lors du d veloppement Avoir une d marche produit est grandement synonyme de Penser aux autres e crire la documentation interne et externe de ses programmes m me lorsque ce n est pas demand e tester ses programmes dans une gamme raisonnable de conditions d utilisation Cette activit peut tre automatis e par des programmes r alisant des tests automatiquement Dans ce cas le test sera r alis implicitement par le contr le des invariants ce qui implique que les programmes en contiennent e assurer la compatibilit ascendante de ses programmes on ne doit pas prendre la d cision de changer la signature ou les caract ristiques d une fonction Tout programme ancien qui utilisait une fonction d une biblioth que par exemple doit pouvoir compiler et s ex cuter sans diff rence avec la nouvelle version e assurer la portabilit le programmeur doit utiliser si une telle interface n est pas d finie pour le projet ou l organisation tout enti re une interface de programmation pour les fonctions syst me pour les fonctions graphiques et une interfac pour les types de donn es de base entiers sign s de deux ou quatre octets par exemple
2. else return erreur 1 main int erreur 0 int j while true lecture des param res x et y j f x y erreur if erreur break utilisation de j Cette approche est confort e par un autre argument S il est vrai dans un cas particulier que le test de domaine d une fonction doive tre effectu de fa on quasiment syst matique il sera rarement le cas que les erreurs soient prises en compte de mani re uniforme par tous les programmes ni qu une valeur de retour discriminante de la condition d erreur puisse tre choisie qui convienne dans tous les cas Le principe des tests qui a t nonc au d but de ce paragraphe peut tre reformul de la fa on suivante Principe de s paration des algorithmes et des conditions Une fonction qui impl mente un algorithme ne teste jamais que les conditions de mise en oeuvre de l algorithme sont v rifi es Enfin les programmes qui prennent abusivement en compte le contr le des situations hors domaine sont les moins susceptibles d tre r utilis s pour d autres projets En effet la mani re effective de traiter une exception est tr s sp cifique d un projet tel programmeur sait que dans le projet en cours une fonction ne renverra jamais la valeur 1000 et utilise donc cette valeur comme t moin d erreur Alors que l algorithme proprement dit poss de une port e beaucoup plus g n rale Les programmes qui ne testent pas leurs conditions d execution ont do
3. e permettre la r entrance un programme doit tre con u pour pouvoir fonctionner sur deux ou plus jeux ind pendants de donn es dans une m me session Cela interdit formellement l utilisation anarchique de variables globales Tr s souvent aujourd hui une programmation caract re v nementiel permet d enregistrer dans une structure de donn es des fonctions appel es automatiquement certains moments Ainsi un programme peut appeler un autre programme qui en cascade appelle le premier etc Une telle situation requiert galement une parfaite r entrance e isoler les algorithmes de leurs interfaces et les fournir de fa on s par e sous forme d une biblioth que usage public Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 28 Cours de g nie logiciel Laurent Henocque Contr le Qualit Partie 3 Qualit en programmation quelques aspects techniques 3 1 Distinguer les diff rents types de param tres Toute application informatique requiert un certain nombre de donn es pour son fonctionnement On appelle param tres les donn es qui ne sont pas constantes pour toutes les versions ou toutes les sessions d ex cution d un programme Ces param tres sont de plusieurs types 3 1 1 Param tres machine Les param tres machine sont ceux qui sont li s l architecture physique de la machine On sait par exemple que telle machine utilise des mots de 32 bits Si l on doit faire d pendre des p
4. hors de son domaine de d finition Autrement dit l utilisateur d un programme garantit qu il n activera jamais ce programme dans des conditions prog 8 q J prog inacceptables Ce principe est le r ciproque du contrat sign par chaque programme Tout programme qui fournit un service au syst me s engage fonctionner correctement lorsque ses l ments de calculs sont valides Autrement dit la responsabilit d un l ment de programme est limit e 4 son domaine de fonctionnement mais elle est p prog enti re dans ce domaine e Aucune fonction ne doit s attendre g rer un cas ou un autre l ment de programme fournirait des donn es incorrectes e Aucune fonction ne doit tester les arguments de son calcul pour leur correction En termes plus math matiques on consid re qu une fonction poss de un domaine de d finition et un domaine d application Le programme qui impl mente la fonction ne doit pas tester l appartenance de ses op randes au domaine de d finition de la fonction Par compte il doit garantir sa correction r sultats justes et sa compl tude couverture de tout le domaine de d finition Bien entendu il est n cessaire de fournir de mani re s par e des fonctions qui testent l appartenance d arguments au domaine 1 3 L utilisation d invariants Le principe d utilisateur parfait stipule qu un programme ne teste pas l appartenance de ses arguments au domaine de d finition Pourtant d
5. ventuellement avanc du projet un individu identifie une fonctionnalit pouvant raisonnablement tre consid r e comme d usage public et r utilisable les d cisions relatives sa sp cification et sa conception doivent tre prises par l quipe au complet 4On peut aller plus loin et tester si le pointeur est correctement align multiple de 4 en g n ral et si sa valeur est comprise dans le domaine des adresses valides utilisation des symboles etextet edata en C par exemple Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 16 Cours de g nie logiciel Laurent Henocque Contr le Qualit 1 6 Documenter La documentation des programmes est un art difficile Il y a trois niveaux fondamentaux de documentation 1 la documentation interne du programme e 2 le manuel de r f rence e 3 le manuel d utilisateur et d exemples 1 6 1 La documentation interne La plus grande difficult en mati re de documentation interne est de trouver la juste limite entre trop en faire ou pas assez En fait aucune information n cessaire la compr hension rapide d un programme ne devrait manquer a son lecteur On doit consid rer que la structure logique d un programme les tests et les boucles parle d elle m me au lecteur lui ique est inutile Ainsi l algorithme ne doit pas tre expliqu dans le d tail Peut tre que quelques lignes d explication initiales sur les principes g n raux sui
6. cification et une conception orient e objet L utilisation de C ne doit pas faire oublier que le concepteur au sens large d un logiciel doit faire preuve d ouverture d esprit et de mall abilit En effet une fois maitris es les tapes de sp cification et de conception l tude pr alable la r alisation d un logiciel conduit souvent l utilisation de langages ou d outils dont on n est pas forc ment familier La d marche qualit pr sent e dans ce cours sur la base du langage C peut tre vue comme un exemple de ce qui doit tre effectivement mis en oeuvre quels que soient le langage la m thode et les outils utilis s au final Plan Nous verrons donc dans une premi re partie les concepts fondamentaux de qualit logicielle et notamment les notions de contrats d invariants et une discussion sur la notion de test Ensuite nous valuerons de quelle mani re l activit de programmation peut tre organis e dans un objectif de qualit Une troisi me partie liste des consid rations techniques sur la qualit Enfin certains aspects humains psychologiques notamment seront abord s Partie 1 Qualit en programmation Notions fondamentales 1 1 Le contrat Principe fondamental dans toutes les activit s industrielles ou plus g n ralement conomiques le contrat est aussi un fondement de toutes les tapes de l laboration d un logiciel de sa sp cification jusqu son abandon Bien s r en fonction
7. com3 code pour com3 Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 26 Cours de g nie logiciel Laurent Henocque Contr le Qualit code de l erreur undef IFSTR 2 6 Ne maintenir qu un seul exemplaire de chaque programme La n cessit de porter un logiciel sur diff rents environnements conduit souvent modifier la version d origine d un programme dans de telles proportions que l on se trouve r duit en maintenir s par ment deux versions La premi re fa on d viter ce probl me consiste grouper dans un fichier unique les fonctions qui d pendent de l environnement mat riel et logiciel et de proposer par ce fichier une interface abstraite dite de portabilit d acc s aux fonctionnalit s souhait es Ainsi lors d un portage seul ce fichier sera adapt et on pourra tol rer d en avoir une version par environnement La raison auxiliaire qui pousse cette solution est le fait que les algorithmes ne changent pas eux et donc ne doivent pas tre sensibles au portage Il arrive parfois que des algorithmes doivent tre adapt s en fonction de sp cificit s environnementales qui ne peuvent pas tre extraites du code car elles ne se traduisent pas par des fonctions mais par des fragments non syntaxiquement isolables du langage Dans ce cas et quel qu en soit le co t apparent en termes de lisibilit du programme il faut utiliser un pr processeur La mauvaise lisibilit e
8. division sera ind termin ou bien produira une sortie du type run time error 3715 zero divide On voit combien il est pr f rable de disposer en commentaire des noms de fichiers et des num ros de ligne 1 4 Diff rentes sortes d invariants Les pr conditions et post conditions sont les formes d invariants les plus connues Les programmes comportent d ailleurs g n ralement essentiellement des pr conditions Toutefois d autres cat gories peuvent tre rencontr es Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 9 Cours de g nie logiciel Laurent Henocque Contr le Qualit les invariants de compatibilit syst me et ou architecture De tels invariants d crivent la d pendance d un programme une condition li e la machine qui pourrait ne pas tre maintenue sur une autre plate forme engendrant ainsi un probl me de portage L exemple le plus connu est celui li la taille des types fondamentaux assert sizeof t_int gt 4 ce programme requiert des int d au moins 4 octets les invariants de compatibilit de biblioth ques Ici on doit garantir poar exemple que des types de base utilis s par deux biblioth ques diff rentes ont les m mes caract ristiques Par exemple assert sizeof libl int sizeof lib2 int m me taille d int les invariants d tape dans les algorithmes Un tel invariant d crit une condition connue comme devant tre vr
9. ger ses programmes Implanter le test des invariants via une compilation conditionnelle De cette mani re la version de test du programme ne plantera jamais et garantit ses sorties Le gain de temps fourni par cette approche est consid rable car elle permet de presque totalement supprimer les recours au d bugger e 6 R duire la charge des machines L exp rience montre que dans des projets importants la progression vers le but s accompagne d une mont e en charge du syst me Les fichiers compiler sont plus longs les fichiers inclus sont plus nombreux les donn es sur lesquelles travaillent les programmes sont plus volumineuses A intervalles r guliers il convient de prendre les d cisions qui s imposent pour que la compilation et les tests se fassent en un temps acceptable Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 19 Cours de g nie logiciel Laurent Henocque Contr le Qualit Il y a certainement d autres attitudes positives en regard du gain ou de la non perte de temps mais celles ci nous paraissent les plus saillantes 2 3 Savoir automatiser L ensemble de l activit de d veloppement rel ve de l automatisation et un bon programmeur automatise toujours une partie de son activit Par exemple la recherche d information dans quel fichier se trouve la d claration de cette fonction est facilit e par des programmes syst mes bat sur PC ou shell sous Unix par exemple utilisant le progra
10. include ou encore CC c lt I include On peut g n rer des biblioth ques sans faire de calculs inutiles la r gle ci dessous n ajoute lib a que les seuls fichiers qui viennent d tre recompil s lib a ficl o fic2 o fic3 o ar rv Make poss de de nombreuses autres fonctionnalit s dont une partie non portable L outil existe galement sur PC avec les compilateurs traditionnels C SCCS Cette commande permet de contr ler les versions successives de documents texte Elle sert galement de syst me d archivage puisque les diff rentes versions successives d un m me document texte sont accessibles par leur num ro de version stock es dans un format conomique par diff rences ou deltas successifs Pour utiliser sccs il faut cr er un r pertoire appel SCCS dans le r pertoire courant sccs create fic cr e un fichier archive appel s fic dans SCCS Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 51 Cours de g nie logiciel Laurent Henocque Contr le Qualit secs edit fic copie la derni re version de fic en mode rw dans le but de le modifier dans le r pertoire courant condition qu il ne soit pas d j dit et cr e un fichier de lock dans SCCS appel p fic L existence de ce fichier interdit un autre utilisateur de prendre ce m me fichier en dition sccs delta fic ajoute l tat actuel de fic dans le r pertroire
11. moire partag e par des fichiers d entr e sortie sockets tcp ip pipes Unix lignes s rie et parall les Il est difficile ici de donner un exemple simple de programme qui utilise ces notions Disons simplement que le programme communique avec d autres programmes l aide de dispositifs divers et qu une interface de programmation permet de lire et d crire sur ces dispositifs l aide de fonctions read et write 3 1 5 Constantes Les constantes sont le dernier type de param tre d un programme Ils ne peuvent varier que d une compilation une autre Bien s r une constante ne doit jamais tre mentionn e en clair dans un programme l endroit tous les endroits ou on l utilise Sa valeur ne doit tre fournie qu en un seul point l endroit o elle d crit la valeur d un symbole Il existe plusieurs mani res de les d crire define max _ fenetres 20 cas 1 define max _ fenetres int 20 cas 2 int max fenetres 20 cas 3 static int max_fenetres 20 cas 4 const int max fenetres 20 cas 5 if num fenetres max fenetres code Dans cet exemple toutes les alternatives comment es conviendraient Toutefois le cas 5 est la meilleure solution En effet il permet un typage rigoureux tout en vitant au compilateur de g n rer une variable e 5 permet au compilateur de donner les commentaires les plus pr cis en cas de mauvaise utilisation de la constante e Les c
12. sont v pour verbose et f pour indiquer le nom de l archive sinon c est dev tape par d faut ou la valeur de la variable TAPE e rpour append la fin de l archive e upour update mise la fin de l archive si le fichier n y est pas d j x pour extract e tpour listing e c pour create e p pour conserver aux fichiers leur mode d origine ind pendamment de l umask courant L pour suivre les liens symoboliques h pour le contraire e w pour un fonctionnement interactif fichier par fichier Tar permet de transporter une arborescence de fichiers la ou un seul fichier peut tre transmis a la fois cas d une p p p bande magn tique de type streamer ou cas d une commande ftp par exemple tar xvf dev rmt0 pour lire sur cette bande et extraire les fichiers tar tvf archive lo pour consulter le contenu du fichier tar archive lo tar cvfh archive lo pour faire une archive du contenu de mon r pertoire courant en suivant les liens Il est en g n ral comme dans l exemple ci dessus de compier les fichiers dans l archive en utilisant un adressage relatif Avec un adressage absolu tar cvf usr home par exemple on peut avoir des difficult s extraire le contenu de l archive si un r pertoire a disparu ou a t renomm Tar est utile l ing nieur syst me pour pr parer des arborescences de fichiers qui doivent tre reproduites plusieurs fois Dans ce cas une archive contient une arboresce
13. Toutefois puisque les fonctions effectivement implant es ne g rent pas les exceptions bien qu elles en d tectent certaines cette op ration ne peut se faire via une continuation normale d ex cution de la fonction qui rencontre l erreur En C comme en Java les exceptions sont int gr es au niveau du langage Il existe un m canisme en C pour y parvenir au moyen des fonctions setjump et longjump La premi re permet de m moriser un environnement d ex cution et la seconde d y revenir brutalement Un programme dot d une interface homme machine est souvent b ti sur une boucle sans fin main loop qui est un bon candidat pour une continuation d ex cution en cas d erreur Il va de soi qu un tel saut en hauteur s accompagne de quelques scories m moire non lib r e dessins non termin s par exemple et que le syst me peut progressivement se trouver dans une situation inextricable du point de vue des donn es Techniquement l implantation de ce m canisme est facile par une d finition appropri e de la macro assert qui crit le texte de l assertion viol e dans un fichier assert log par exemple et provoque ensuite l appel longjump pour retrouver des conditions d ex cution ant rieures Si le site client est accessible en t l maintenance par un modem il suffit d aller lire intervalles r guliers le fichier assert log pour effectuer de fa on invisible un d boguage tr s efficace et sans douleur excessive pour le cli
14. cha nes de caract res Ce tableau est obtenu comme le contenu de la variable appel e environ char path NULL for int i 0 environ i 0 NULL i char varName environ i 0 char varValue environ i 1l code qui d pend de varName et stocke varValue si besoin est if strcmp varName PATH path environ i 1 Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 30 Cours de g nie logiciel Laurent Henocque Contr le Qualit 3 1 4 Param tres d ex cution Les donn es qui peuvent varier d une ex cution une autre et qui ne d pendent ni de la machine ni du syst me ni de la configuration sont les param tres d ex cution Il existe plusieurs mani res de les fournir un programme liste non exhaustive e par l environnement comme ci dessus en d finissant des variables gt setenv PARAM DEFAUT CARRE 3 gt carre 9 e par ce qu on appelle la ligne de commande en ajoutant un ou plusieurs param tres lors de l appel du programme apr s son nom gt carre operande 4 16 gt carre 9 Ici on dispose d un arsenal quivalent au traitement des variables d environnement Un param tre formel de la fonction principale du programme appel e en C contiennent le nombre et la liste des param tres pass s lors de l appel Voici un exemple de ce que pourrait tre un programme C pour carre prenant en compte galement l option du paragraphe ult ri
15. conduiront par exemple l acceptation d un prototype qui sera jug ad quat Certaines activit s logicielles ne comportent pas de client tangible et l on pourrait tre tent de passer outre une phase de sp cification contractuelle C est le cas notamment dans l dition de produit logiciel ou l on tente de r pondre un besoin qui n est pas toujours exprim sauf peut tre par une tude de march s rieuse Il est pourtant n cessaire d exprimer de mani re crite les engagements que prendront les diff rents acteurs La ren gotiation en cours de r alisation d un point de la sp cification est une op ration qui peut conduire des d passements consid rables de budget Un document crit entre le service de recherche et d veloppement et sa direction est le meilleur t moin des responsabilit s de chacun Dans la mesure ou la sp cification est une vue exacte du logiciel r aliser ce document est la premi re pierre de sa documentation et sa qualit initiale sera un profit toutes les tapes du travail et en particulier la fin Dans de nombreux cas la pression exerc e par l ext rieur sur le prestataire pour faire d marrer les choses le plus vite possible aura pour effet de r duire le temps pass sur la r daction d un document sinon sur la r flexion associ e Le prestataire doit avoir la force de lutter pour carter les points d ombre et viter de laisser des bombes retardement dans la sp cification Au niv
16. courant SCCS s fic comme derni re version Supprime fic de ou bien cahnge son mode en READONLY et supprime SCCS p fic Au passage delta demande l utilisateur de fournir des commentaires accessibles plus atrd par sccs prt sccs get fic copie la derni re version de fic en mode r impossible de le modifier dans le r pertoire courant condition qu il ne soit pas d ja dit par soi m me sccs info donne la liste de tous les fichiers actuellement edites sccs prs fic affiche des informations sur les versions successives de fic sccs diffs fic calcule les diff rences entre le fichier pr sent dans le r pertoire courant et la derni re version archiv e en delta sccs unedit fic sccs unget fic annule une prise en dition ou supprime le fichier avec v rification L outil sccs reconnait dans les fichiers des s quences de caract res pr d finies dont la plus utilis e est W G Lorsque le fichier n est pas dit i e obtenu par sccs get ce sch ma est substitu par le nom du fichier et la date et la version de ce fichier Il est ainsi possible de faire figurer dans le produit d une compilation les noms et version et dates des fichiers utilis s pour produire la version La s quence est quand elle reconnue par la commande Unix what qui permet d extraire ces informations m me d un ex cutable pour lequel l utilisation de grep ne donne pas de bons r sultats Donc on crit souv
17. en projet les outils con us ant rieurement puissent tre perdus Permettre la r utilisabilit suppose d avoir une approche produit dans la r alisation des outils de base C est a dire qu il faut de mani re adapt e sp cifier concevoir implanter documenter livrer et maintenir la biblioth que qui implante une fonctionnalit d usage g n ral e sp cifier les besoins auxquels r pond une gestion de liste par exemple doivent tre clairement d finis Pour garantir leur r utilisabilit ils doivent tre universels donc ind pendants de toute sp cificit applicative Si de telles sp cificit s existent cependant elles sont d crites part en s appuyant sur le noyau fondamental Lorsqu un projet fait appara tre des usages sp cifiques pour un module il sera souvent possible de d finir les variations au sch ma fondamental par h ritage Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 15 Cours de g nie logiciel Laurent Henocque Contr le Qualit e concevoir pour garantir la r utilisabilit la conception doit pr voir une interface de portabilit ind pendance des architectures mat rielle et syst me et doit ob ir aux diff rents principes g n raux dont celui de l utilisateur parfait La conception de l interface homme machine et de ses relations avec l applicatif pr sente cet gard un caract re saillant dans l ensemble de la conception C est souvent elle qui conditionnera
18. est la conception Enfin avec la granularit n cessaire le dernier niveau lie les programmes entre eux 1 1 1 La sp cification contrat entre client et fournisseur Un contrat fondamental lie le prestataire d une solution informatique et son client la sp cification Son document de r f rence est le cahier des charges Une fois accept il constitue un engagement des deux parties Le client admet que ses besoins y sont exprim s de fa on correcte et compl te et donc accepte d avance toute solution conforme Le prestataire sait de son c t que les solutions qu il envisage sont r alisables dans les d lais ceux ci pouvant appara tre comme un besoin dans la sp cification Il a la garantie qu aucun besoin nouveau ne viendra briser l difice qu il va construire L acceptation du cahier des charges a donc pour effet de figer la partie initiale de l tude permettant la conception puis au d veloppement de se faire sur des bases solides Il ne faudrait pas croire pour autant que la sp cification est r alis e ind pendamment de ces phases ult rieures L engagement de r alisation rend implicite la validation technique des solutions envisag es Cette validation peut aller jusqu la programmation de certains modules pour tester une faisabilit Par ailleurs l expression des besoins par le client est parfois floue et n cessite des interactions entre les parties sur la base d un prototype Dans ce cas des it rations successives
19. faut les utiliser e compiler aussi t t que possible avec tous les fichiers include des biblioth ques que l on va utiliser e linker avec les biblioth ques que l on doit utiliser par la suite e ex cuter le programme de fa on pouvoir le tester Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 18 Cours de g nie logiciel Laurent Henocque Contr le Qualit On ne doit pas programmer en passant par de longues phases au cours desquelles toute compilation serait impossible Nous venons de voir ce probl me selon le point de vue du programmeur Les m mes contraintes existent au niveau du projet Tous les modules d un applicatif doivent pouvoir tre r unis et test s ensemble tr s t t dans le projet et aussi souvent que possible 2 2 Sauver le temps Dans un projet informatique l conomie est essentiellement une conomie de temps En g n ral pour gagner du temps sur l ensemble d un projet il convient d j d en perdre un peu en apparence seulement dans les phases initiales de sp cification et de conception en prenant soin de faire que ces phases aboutissent des documents contractuels utilisables Ensuite on constate que la conception choisie peut avoir un effet important sur le temps de d veloppement Si la contrainte temps est un besoin exprim de fa on claire par le client cela a pu orienter la conception dans une direction tr s sp cifique Il est parfois vrai que certains choix techniques pe
20. fi Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 20 Cours de g nie logiciel Laurent Henocque Contr le Qualit Un autre exemple est un shell qui permet la cr ation automatis e d une r vision des programmes sur lesquels on travaille Ce shell r alise la copie des sources dans un r pertoire cr automatiquement et proc de leur compilation automatiquement Il comporte des exemples de calculs et de tests en shell usr bin sh topvers ls grep v sre sort tail 1 cut c2 10 echo current most recent version of project is v topvers majorvers echo topvers cut f1 d echo major revision number is majorvers minorvers echo topvers cut f2 d echo minor revision number is Sminorvers nextminor expr Sminorvers 1 nextmajor expr Smajorvers 1 newdmaj v nextmajor 0 newdmin v majorvers nextminor echo new minor revision name would be newdmin echo new major revision name would be Snewdmaj echo choose one default is cancel major minor c read rep case Srep in major newdir newdmaj minor newdir newdmin echo exiting exit 1 new revision directory to create is Snewdir perform default is cancel yes c rep Srep in yes echo create newdir mkdir newdir echo exiting exit 1 esac for file in cat projectfiles do cp file newdir done cd newdir make if then echo CREATION of new revision newdir C
21. que de choisir des valeurs minorantes pour les niveaux de ressources disponibles limiter arbitrairement 16 le nombre de fichiers ouvrables simultan ment par exemple et de ne pas rendre dynamiques leur prise en compte Les param tres syst mes sont accessibles par un jeu de symboles d finis pour le pr processeur afin de permettre des compilations conditionnelles ou la prise en compte de bornes Ces symboles sont d finis dans les fichiers d inclusion syst me const int num threads MAX THREADS valeur d pendant du syst me Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 29 Cours de g nie logiciel Laurent Henocque Contr le Qualit 3 1 3 Param tres de configuration Pour un m me syst me d exploitation sur une m me machine un logiciel peut s attendre encore un certain niveau de variabilit externe En effet l organisation m me de la machine le nombre de disques les partitions la structure des r pertoires l emplacement des fichiers utiles la disponibilit des entr es sorties et d autres encore sont variables Dans certains cas celui de programmes simples ces contingences n influent que sur la compilation Il faut parfois adapter le programme charg de la construction des ex cutables pour qu il puisse exploiter toutes les ressources en fonction de leur emplacement Par exemple si l on doit changer de compilateur ou de biblioth ques d objets on ne remplace pas les anciens par l
22. s parateur que l on peut param trer par d faut l espace awk poss de deux niveaux de s parateurs On peut passer des variables awk et utiliser les valeurs de ces variables dans le programme awk utilis Pour extraire simplement des colonnes on utilise plut t la commande cut ci dessous cut Permet d extraire une information d une ligne de texte un peu comme awk mais sans la complexit du langage awk ar Cette commande est l archiveur Unix Il est utilis principalement pour construire les biblioth ques mais il peut servir grouper toute sorte de fichiers texte ou non Les options sont e v__ verbose et listing e r replace e a add e x extract e d delete ar rv archive liste de fichiers Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 54 Cours de g nie logiciel Laurent Henocque Contr le Qualit Dans le cas des archives de fichiers objet une commanade appel e ranlib permet de cr er un dictionnaire des symboles de l archive qui d tecte les doublons de fichiers et de symboles le cas ch ant Dans le cas de tr s petits fichiers ar peut tre avantageuses sur tar qui aligne les blocs et perd de la place tar Cette commande permet de combiner des ensembles de fichiers en un seul Le fichier cible peut tre soit un fichier disque authentique soit un device streamer notamment sur lequel le fichier est crit s quentiellement Les options
23. s de la m moire humaine ne permettent pas de basculer trop longtemps sur une t che auxiliaire De surcro t un risque naturel est associ la recherche manuelle d information l effet encyclop die buissonni re Effet encyclop die buissonni re lors d une recherche trop longue l esprit est attir vers une partie des programmes loign e de la pr occupation courante qui semble justifier une intervention imm diate Ainsi le programmeur peut abandonner sa t che actuelle pour une cascade d op rations effectu es en parfait d sordre et sans planification Exemple un shell qui permet d extraire le texte d un fichier autour d une ligne donn e Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 22 Cours de g nie logiciel Laurent Henocque Contr le Qualit bin sh ce fichier decoupe une fenetre dans un fichier a partir d une position donnee nlines 3 10 headcount expr 2 nlines 1 fecho nlines echo Sheadcount echo EXTRACT echo head Sheadcount 1 tail nlines echo Les exemples suivants sont des programmes qui permettent de chercher dans un r pertoire donn ici une application XWindow toutes les d clarations d une classe ou d un type etc m me si l on ne dispose pas d interface graphique ces programmes marchent en mode ligne le script searchinc Ce shell recherche une combinaison de patterns 1 et 2 s par s par des caract res
24. s l appel de B et voir si l on ne devrait pas se placer dans le cas 1 e 3 Pest allou automatiquement par A pass B utilis dans R et n est plus utilis par A Une copie de P doit tre r alis e dans B pour l ins rer la structure R Toutefois on peut se poser la question de l utilit de la d claration de P dans A et voir si l on ne devrait pas passer des param tres appropri s B pour qu il cr e seul les structures e 4 Pest allou automatiquement par A pass B utilis dans R et dans A par la suite Comme B a du proc der une copie de P pour R cf 3 ci dessus les utilisations post rieures de P n auront aucun effet sur R 3 4 1 Principe 1 En aucun cas une fonction ne peut renvoyer l adresse d un espace allou automatiquement 3 4 2 Principe 2 Lorsqu une fonction retourne un pointeur il faut savoir de fa on non ambigu document e si le pointeur d signe une zone allou e par la fonction ou bien une zone accessible par l un de ses param tres et donc allou e ant rieurement On ne peut donc avoir de m canisme mixte valeur allou e dans certains cas non allou e dans d autres 3 4 3 Principe 3 Lorsqu une fonction prend un pointeur en param tre elle n effectue jamais de duplication des donn es Plusieurs arguments confortent cette position e faisabilit la copie n est possible que lorsque on conna t la taille et la structure des donn es La fonction appelante pos
25. statistiques Lorsqu un programme plante et que l on a des indications sur l endroit dans le programme ou l ex cution s est arr t e cette information est pr cieuse car dans une tr s grande majorit des cas et quelles que soient les apparences les instructions erronn es sont tr s proches de l endroit o le programme s arr te 4 2 3 savoir isoler les conditions d apparition du bug Dans certains cas un bug sera mieux compris si l on s rie tr s pr cis ment les conditions de son apparition sous forme par exemple d une s quence particuli re d appels de fonctions en se pla ant non pas das la fonction suppos e fautive au cas ou on la connaisse mais au niveau de fonctions qui appellent cette derni re Sp cialement dans le cas ou l on n est pas soi m me le programmeur des l ments incrimin s il est n cessaire de produire une telle s quence minimale conduisant l erreur pour permettre l auteur un diagnostic rapide et fiable 2C est ce point vrai que les utilisateurs novices d ordinateurs incriminent d abord la machine puis le compilateur avant d admettre que l erreur peut tre de leur fait Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 44 Cours de g nie logiciel Laurent Henocque Contr le Qualit Pour r duire les conditions d erreur leur plus simple expression il suffit en g n ral de supprimer des portions du programme de fa on it rative tant que l erreur es
26. un double objectif de performance espace et temps viter de dupliquer les informations et de qualit garantir la lib ration effective de toutes les zones allou es dynamiquement Observons ici les diff rentes situations que l on rencontre habituellement Consid rons le cas d une fonction A qui appelle une fonction B A passe B un param tre P qui est l adresse d une zone de donn es particuli re B utilise ces informations les int gre dans une structure de donn es R et retourne A une valeur qui est l adresse de cette structure un point d entr e void A void P 0 initialisation de P void R B P return R e 1 P est allou dynamiquement par A pass B utilis dans R et n est plus utilis par A qui travaille ensuite sur la base de R Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 40 Cours de g nie logiciel Laurent Henocque Contr le Qualit Alors P n aurait pas d tre allou par A mais directement par B au besoin avec des donn es d initialisation pass es en gt 2 param tre e 2 Pestallou dynamiquement par A pass B utilis dans R et dans A par la suite S il est entendu que les modifications faites P apr s l appel de B doivent cependant figurer dans R il est clair que B ne doit pas avoir proc d une copie de son argument P pour l int grer R Sinon il faut se poser la question du bien fond de l utilisation de P dans A apr
27. Cours de g nie logiciel Laurent Henocque Contr le Qualit Cours de G nie Logiciel Contr le Qualit en Programmation Laurent Henocque http aurent henocque free fr Enseignant Chercheur ESIL INFO France http laurent henocque perso esil univmed fr CERTAINS DROITS RESERVES Cette cr ation est mise disposition selon le Contrat Paternit Partage des Conditions Initiales l Identique 2 0 France disponible en ligne http creativecommons org licenses by sa 2 0 fr ou par courrier postal 4 Creative Commons 559 Nathan Abbott Way Stanford California 94305 USA version 1 4 en date du 17 Novembre 2008 Introduction Le g nie logiciel est une discipline qui vise structurer et organiser l ensemble des activit s li es la r alisation de logiciels et promouvoir des niveaux de qualit croissants L exp rience des succ s et checs de l industrie informatique a permis de d gager des concepts assez f d rateurs et de mesurer leur efficacit L activit des chercheurs dans des domaines aussi vari s que la psychologie la linguistique l ergonomie et l informatique videmment a permis de faire appara tre des notions dont certaines font preuve aujourd hui d une grande acceptation du march La programmation orient e objet en est un exemple avec son langage phare qui est C De tr s grands projets ont t r alis s selon des m thodes de sp cification et de garantie de qualit souvent d riv es de m thode
28. OMPLETED else echo CREATION of new revision Snewdir FAILED cd mv newdir vStopvers b Snewdir Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 21 Cours de g nie logiciel Laurent Henocque Contr le Qualit 2 4 Organiser l acc s l information Un programmeur aujourd hui doit g rer des ensembles de programmes qui ajout s les uns aux autres repr sentent des dizaines de milliers de lignes de code Avec des langages modernes comme Ada ou C la densit d informations pertinentes dans les programmes est grande La volume des donn es m moriser par le programmeur est tel que c est impossible A cela deux r ponses sont donn es structurer les fichiers de mani re logique et organiser l acc s l information e structurer par exemple on d cide que chaque classe d objets C est d crite dans un jeu de fichiers sp cifiques quelle qu en soit la complexit Ou encore on d cide de grouper dans un fichier unique les programmes relevant de l impression ou de la trace pour toutes les classes Dans la pratique la d cision prise n est pas indiff rente les deux approches ayant leurs avantages En effet les programmes de trace auront tous des traits communs faisant que leur pr sence group e dans un fichier unique permet d en programmer rapidement de nouveaux par l exemple D un autre c t le groupement par classes refl te la structure logique interne des classes dans les fichiers not
29. aie en un point d un algorithme pointeur non nul par exemple L exemple typique se rencontre a la sortie d une boucle de recherche Supposons que la boucle parcourt une structure de donn es la recherche d un plus grand l ment acc d par un pointeur Si la structure de donn es n est pas vide ce qui a t test auparavant la boucle doit produire un pointeur non nul vers le plus grand l ment Cette propri t doit tre document e et enforc e par un assert les variants de boucle Un tel invariant s appelle un variant parce qu il d crit le fait que deux it rations successives d une boucle modifient la valeur d une variable de contr le d une mani re telle que l on sait que le programme va s arr ter Ce concept est utilis en preuve de programmes et peut tre utilis dans les boucles crit re d arr t non explicite autre qu une boucle for int i 0 i lt 10 i dont on ne sait pas priori qu elle s arr tera un jour En C et C il faut utiliser une variable auxiliaire pour comparer l tat d une variable chaque it ration avec sa valeur ant rieure int lastloopvar 10000 int loopvar 7 while 1 pourrait ne jamais s arr ter if loopvar 0 break sortira t on un jour assert lastloopvar gt loopvar certainement lastloopvar loopvar loopvar les invariants de classe Ces invariants d crivent des conditions vraies de tou
30. amment l encapsulation des fonctions Quelle que soit l approche on aura dans certains cas besoin d informations orthogonales e acc der puisque la structure de fichiers ne permet pas simultan ment les multiples points de vue qui peuvent tre n cessaires pour la disposer de toutes les informations utiles il est n cessaire de se donner des outils il s agit bien de programmes permettant de retrouver et de lister une information aussi rapidement que possible Par exemple on voudra consulter tr s rapidement le texte d une m thode de trace implant e pour une classe connue Ou encore on voudra retrouver rapidement le texte de la d claration d une fonction pour en conna tre la signature exacte besoins fr quents Sous Unix les outils de base grep sed et awk sont pr cieux pour concevoir des programmes de recherche d information dans des sources Ils doivent tre utilis s en l absence de meilleur outil Les environnements de d veloppement modernes Jbuilder Visual Eclipse offrent de multiples possibilit s Principe d acc s l information un environnement de d veloppement doit toujours tre compl t par des programmes ventuellement sp cifiques permettant la recherche optimale des informations utiles Lorsque de tels outils sont absents l activit du programmeur est progressivement satur e par des taches annexes de recherche d information qui effondrent la qualit du travail et le rendement Les possibilit
31. ans la machine des zones apparemment contigu s pour le programme sont en fait souvent disjointes du fait de la pagination notamment Toutefois cette indirection est transparente pour le programmeur pour qui les adresses des zones de m moire qu il utilise se suivent de fa on continue e Noter toutefois que sous Unix les adresses des variables de la pile d ex cution d croissent avec les appels r cursifs de fonctions les entiers correspondant ces adresses sont en fait n gatifs La comparaison d une adresse 0 et aux valeurs de etext edata et du breakpoint obtenu par un appel de la fonction brk permet ainsi de savoir de quel type d adresse il s agitl0 Pour obtenir l espace n cessaire au stockage de ses donn es un programme malloc demande au syst me le d placement du breakpoint dans les limites permises par la configuration de la machine Ensuite l espace est distribu a la demande aux fonctions par le biais des fonctions malloc calloc realloc et lib r au moyen de free Cette interface est devenue un standard et est disponible dans presque tous les environnements Toutefois l implantation effective de ces fonctions diff re d une version l autre pour de nombreuses raisons notamment e la strat gie d allocation peut par exemple privil gier l allocation performante des petits blocs en r servant d office des espaces importants pour ces zones e des contr les plus ou moins sophistiqu s peuvent t
32. as 1 et 2 vitent de g n rer de symbole C et 2 permet aussi en fait un contr le de type mais d une mani re moins limpide que 5 3 g n re un symbole externe qui sera r f renc dans le code objet associ au fichier ou dans une biblioth que contenant cet objet Il est alors accessible d autres programmes pour lecture et modification ventuelle ce qui est formellement contradictoire avec le concept de constante Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 33 Cours de g nie logiciel Laurent Henocque Contr le Qualit e 4 r duit un peu ce d faut en limitant la port e du symbole au fichier compil mais permet encore la modification de cette valeur pendant l ex cution 3 2 Gestion des exceptions Une exception est une situation non pr vue par un programme Par exemple donnons nous une fonction Ajoute pr vue pour ajouter un l ment une liste non vide Supposons qu elle re oive une liste vide comme param tre d appel C est alors une exception Ici plusieurs cas sont possibles soit la fonction appelante ex cute un mauvais algorithme et a engendr un appel invalide Ajoute soit le cas d une liste vide n a pas t pr vu mais doit l tre et donc la fonction Ajoute est mal sp cifi e Dans les deux cas on ne peut demander la fonction ou son programmeur de pr voir cette situation exceptionnelle pour viter l erreur Un algorithme ne doit sous aucun pr texte p
33. ation violation ou BUS bus error par exemple sous Unix La seconde version de la biblioth que est utilis e lorsque le programme a t int gralement test Elle ne fait plus aucune v rification de domaine En cas de plantage il est alors conseill de refaire une dition de liens avec la biblioth que de tests plut t que de courir apr s l erreur via un d bugger Cette derni re possibilit risque fort d tre impossible si l ex cutable livr a t d pouill stripp de ses symboles ou a t compil en optimis Les algorithmes utiles dans les cas les plus courants de gestion de structures de donn es comme les arbres balanc s ou les listes sont tellement connus que de nombreuses versions en existent dans le domaine public Il est possible de partir d un des sources disponibles sur le march plut t que de z ro Il est conseill aux organisations de concevoir et d implanter leurs propres outils de base Ainsi elles poss dent la ma trise d un l ment qui s av re central dans leurs projets Toutefois il faut encourager l ensemble des membres des quipes de d veloppement conna tre et faire vivre les outils qu elles utilisent La comp tence sur ces programmes ne doit pas rester le fait d un individu isol De m me en amont il faut que les tapes de conception et de sp cification de ces outils caract re g n ral voient la participation de tous leurs futurs utilisateurs Lorsqu en un point
34. ation associ e des attitudes propres promouvoir la qualit et le respect des sp cifications permettra souvent de limiter les interactions avec les autres programmeurs leur partie la plus utile En d autres termes on peut appliquer aux relations entre individus le principe de l utilisateur parfait Cest une boutade mais elle est assez r aliste 4 3 2 Adaptabilit tout langage Il n y a pas de mauvais langage Chacun poss de des fonctionnalit s facilitant certains pans de l activit du programmeur en rapprochant la structure du programme de la sp cification Les d fauts peuvent souvent tre compens s par l utilisation de techniques qui ne sont pas l apanage de C et C En particulier les pr processeurs ne sont pas d di s un langage particulier et peuvent tre utilis s pour faire du contr le d invariant soumis compilation conditionnelle cf la macro assert dans tout langage 4 3 3 Apprendre utiliser tous les outils De tr s nombreux outils en compl ment des pr processeurs permettent d viter des op rations fastidieuses sur les programmes et parfois de doter les programmes de compl ments utiles Il faut savoir en lire les documentations et tenter de les utiliser chaque fois que possible de fa on en atteindre une maitise croissante et ne jamais se contenter de ce qu on sait Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 45 Cours de g nie logiciel Laurent H
35. cible Cet outil puissant est utilis par les programmeurs pour compiler leurs ex cutables un programme d pend de biblioth ques qui d pendent de fichiers o qui d pendent de fichiers source qui d pendent de fichiers h par exemple et galement par le syst me pour garder coh rents des ensembles de fichiers suite une modification de l un d entre eux par l ing nieur syst me b o a o b o o pgm a c C a c b h b c c b c Si l on modifie a h les trois r gles ci dessus d clenchent en cascade dans l ordre 2 3 1 Si b h est touch seules 3 et 1 d clenchent 1 d clenche dans les deux cas car 2 et 3 ont pour effet de produire des fichiers nouveaux appel s a o et b o dont 1 d pend On dispose avec make de variables pr d finies dont les plus utiles sont e le basename de la cible priv e de son suffixe le nom complet de la cible dans la partie commande e lt la d pendance plus r cente que la cible pour une r gle g n rique dans la partie commande e la liste des d pendances plus r cente que la cible et galement le nom complet de la cible dans la partie d pendances Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 50 Cours de g nie logiciel Laurent Henocque Contr le Qualit e le nom de la cible dans une archive On a aussi des r gles g n riques celle ci dit comment compiler par d faut tout c en o CC c c I
36. de donn es par exemple ou encore des v nements une exception est un v nement Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 35 Cours de g nie logiciel Laurent Henocque Contr le Qualit char nom mon prog globale consultable par un autre fichier void fonction static int compteurDAppels 0 globale visible dans fonction compteurDAppels cout lt lt nom lt lt lt lt globalel lt lt lt lt compteurDAppels lt lt in compteurDAppels 0 provoquerait une ERREUR de compilation ici Il faut noter ici que le recours l utilisation de variables globales pratique quand on crit de petits programmes est d conseiller ou m me proscrire dans les projets importants En effet cela interdit d appeler les m mes fonctions pour des usages diff rents au cours d une m me session d ex cution et notamment de les appeler r cursivement on dit que l utilisation de variables globales rend les programmes non r entrants On peut toujours se passer de variables globales La solution consiste alors d clarer une structure particuli re pour stocker toutes les donn es globales en allouer un exemplaire par exemple dans la fonction principale main du module et passer cet objet par r f rence toutes les fonctions qui le n cessitent struct Globales int globalel char nom int compteurDAppelsFonction Globales globalel 0 nom mon pro
37. du fichier test cc abort core dumped gt Telle qu elle a t d finie la macro assert est traduite par un test qui sera toujours effectu Or on souhaite pouvoir produire des versions finales des programmes qui ne fassent plus ces tests On utilise alors les primitives de compilation Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 8 Cours de g nie logiciel Laurent Henocque Contr le Qualit conditionnelle ifdef vraie si un symbole est d fini ou ifndef vraie si un symbole n est pas d fini Voici maintenant assert sous une forme assez proche de celle avec laquelle il est g n ralement d fini dans le fichier assert h ifndef NDEBUG define assert test if test printf assert viol s ligne d du fichier s n test __LINE_ __FILE_ abort OO I OO OO GO VI hl else define assert test endif La compilation de test par CC o test test cc produira le m me r sultat que pr c demment Le symbole NDEBUG n tant pas d fini l implantation de assert choisie par le pr processeur sera celle qui fait le test Par contre avec e CC o test DNDEBUG test cc toutes les utilisations de assert dans le fichier test cc seront substitu es par rien Tout se passe alors comme si l on avait crit float un_sur_x float x return 1 x L appel malencontreux de un_sur x 0 dans le main ne provoquera peut tre plus d erreur mais le r sultat de la
38. du point auquel on se situe la nature et les effets des diff rents contrats seront variables Toutefois on peut reconna tre parmi les fonctions du contrat les l ments fondamentaux suivants e le contrat garantit une communication sans d faut par un examen exhaustif de tous les cas n cessaires Un bon contrat l ve toute ambiguit entre ses parties e le contrat est un support fondamental de la simplicit des solutions mises en oeuvre pour le respecter En effet il permet de travailler en monde clos et de ne pas anticiper des volutions improbables En mati re de g nie logiciel les documents contractuels sont nombreux L ensemble de ces pi ces d crit les r ponses aux questions suivantes e quoi quelles sont les fonctionnalit s implanter e comment comment acc de t on ces fonctionnalit s quand quelles sont les limites hors desquelles ces fonctionnalit s ne sont pas accessibles pas implant es Ces contrats lient dans tous les cas des clients et des fournisseurs Trois niveaux fondamentaux de contrat sont usuels en informatique et lient des parties distinctes Le plus haut niveau permet la communication entre acheteur du logiciel et prestataire c est le cahier des charges sp cification Le niveau suivant lie les membres d une quipe Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 2 Cours de g nie logiciel Laurent Henocque Contr le Qualit d informaticiens c
39. e ou Makefile s il existe make f monfichier mak une cible exploite un fichier sp cifique Les r gles du makefile ont un format particulier et reposent sur l utilisation de caract res invisibles tabulation notamment ce qui demande un peu de soin au d but Si make est invoqu sans mentionner un nom de cible particulier la premi re r gle du fichier est consid r e et bien s r toutes celles n cessaires en cascade Il est traditionnel que cette premi re r gle porte le nom de cible all sans que ce nom ait une importance particuli re cible d pendance 1 d pendance 2 d pendance n Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 49 Cours de g nie logiciel Laurent Henocque Contr le Qualit tab commande shell tab commande shell tab commande shell d pendance 1 La suite de commandes de cible est d clench e d s lors que e aucun fichier de nom cible ne se trouve dans le r pertoire courant ou bien e un des fichiers du r pertoire courant appel d pendance i est plus r cent que cible Si il existe des r gles dont les noms de cible correspondent aux d pendances ces r gles sont envisag es avant l ex cution de la r gle de niveau sup rieur Si une r gle ne produit pas par les commandes associ es un fichier dont le nom corresponde la cible elle sera d clench e syst matiquement chaque ex cution de make pour cette
40. eau de la sp cification le quoi refl te l ensemble des fonctionnalit s du produit le comment sera souvent la sp cification de l interface homme machine et le quand correspondra la mention explicite rigoureuse des diff rentes limites de fonctionnement du syst me pas plus de 3 utilisateurs pas de facture z ro etc 1 1 2 La conception contrat liant les membres de l quipe Le contrat qui lie l ensemble des d veloppeurs entre eux et avec le chef de projet est la conception La conception d crit de mani re d taill e l ensemble des solutions techniques devant tre mises en oeuvre pour implanter ce qui a t sp cifi Il est formellement impossible de faire plus ou moins que ce que la conception a d crit Aucune initiative individuelle n est possible dans ce cadre Toutes les influences et toutes les contraintes ont t prises en compte pour concevoir et l initiative d un membre de l quipe n ayant pas de vision d ensemble est proscrire rappelons que personne n a jamais une vision d ensemble suffisamment d taill e d un grand projet pour prendre une d cision technique tr s pointue Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 3 Cours de g nie logiciel Laurent Henocque Contr le Qualit La conception d taill e refl te videmment tous les l ments annonc s dans la sp cification Elle y ajoute de fa on aussi d taill e que souhaitable les conditions quoi commen
41. enocque Contr le Qualit Partie 5 El ments de gestion de configuration Le programmeur doit imp rativement g rer m me en tant isol les versions successives de ses sources Pour cela il dispose sous Unix d outils prouv s comme sccs et res voire get admin et delta en cas d absence des deux premiers Sur un pc un outil appel pvcs apporte des fonctionnalit s comparables Voir l annexe Unix de ce cours pour des informations plus compl tes Ces outils permettent de conserver conomiquement par diff rences successives les versions successives d un fichier texte et surtout de contr ler donc interdire les acc s simultan s pour modification un m me fichier par des utilisateurs diff rents Par ailleurs il est n cessaire de contr ler les versions successives d un produit en tant capable de revenir la version exacte de tous les sources impliqu s dans la construction de chaque version du produit Le projet config d crit pr cis ment une structure compl te de configuration logicielle pour un produit utilisable pour les projets et assortie d outils de g n ration automatique d environnements Partie 6 La ligne de compilation avec int gration des tests Les tests unitaires valident l implantation de programmes l mentaires comme la description d une classe Il est utile d int grer dans la ligne de compilation habituellement g r e par l outil make sous Unix comme sur pc d
42. ent AW G en commentaire d un fichier utilis directement par exemple un source shell ou comme valeur d une variable de type chaine qui figurera dans l ex cutable g n r par compilation Sur certains syst mes o sccs n existe pas un syst me comparable appel res est parfois disponible et sinon les commandes syst me get admin et delta permettent d atteindre le m me type de fonctionnalit Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 52 Cours de g nie logiciel Laurent Henocque Contr le Qualit diff Diff ficl fic2 calcule les diff rences entre deux fichiers Des options permettent de contr ler le calcul des diff rences taille de plages de raccord l affichage des r sultats et m me de g n rer automatiquement un script permettant de changer ficl en fic2 si c est possible afin de g n rer un patch automatique il suffit d envoyer le patch plut t que la nouvelle version du fichier find Cette commande permet de rechercher des fichiers partir d un noeud du syst me de fichiers selon des combinaisons vari es de crit res sauf le contenu il faut utiliser grep et ventuellement d appliquer des commandes automatiquement sur les fichiers trouv s option exec find usr bin name ficl print find name sh user root print find name exec rm f find name core o name tmp e
43. ent 3 3 Gestion de la m moire Les compilateurs permettent de r server deux types d espace dans la m moire vive de la machine la m moire statique et la m moire automatique Un troisi me type d espace de stockage est fourni la demande par le syst me tant que c est possible la m moire dynamique Ce dernier type d espace est le plus difficile g rer C est en fait le seul devoir l tre Ce paragraphe tudie les probl mes li s l allocation de m moire dynamique apr s un rappel des notions utiles concernant les variables globales et les param tres formels afin de comprendre les rapports d licats que ces trois concepts poss dent e 1 la m moire statique cet espace est associ au code du programme et sous Unix il en est tr s proche physiquement Il est r serv par la d claration d une variable globale hors de la port e d une fonction Il est parfois utile de limiter la port e de l identificateur de la variable au fichier qui la d clare C est obtenu l aide du mot clef static en C et C Par insertion d une d claration de variable statique dans un bloc le corps d une fonction le plus souvent on obtient une variable globale visibilit r duite au bloc en question static int globalel 0 globale non utilisable d un autre fichier 8 un fichier de log stocke des informations caract ristiques sur les tats successifs du syst me ou les interventions qu on y fait op rations sur la base
44. es nouveaux On adapte ou on cr e un nouveau makefile pour acc der aux bonnes ressources Lorsqu un programme effectue des op rations d entr e sortie plus complexes et notamment ouvre et ferme des fichiers il doit permettre l utilisateur final de configurer lui m me le logiciel pour d cider de l ext rieur quels r pertoires acc der Dans ces deux cas le param trage externe se fait par l utilisation de variables d environnement Ces variables sont d finies au niveau du syst me par une instruction sp ciale du langage interpr t de commande On peut aussi les d clarer dans des fichiers de commande ex cutables Sous MS DOS le fichier autoexec bat joue ce r le comme tout fichier bat contenant une s quence valide de commandes DOS De m me sous UNIX les fichiers de commande shell login profile cshrc lus par sh csh ou ksh principalement contiennent des d finitions de variables d environnement ligne reconnue par csh setenv PATH bin usr bin lignes reconnues par sh set LD LIBRARY PATH usr lib usr lib X11 usr lib motif export LD LIBRARY PATH Les variables d environnement qui sont d finies lors de l appel d un programme lui sont pass es automatiquement par la fonction syst me permettant le lancement en C sous Unix avec diverses variantes Typiquement le programme une fois actif peut alors consulter les valeurs des variables d environnement pr sentes dans un tableau bidimensionnel de
45. es tests unitaires qui sont capables de d tecter toute r gression d un programme due une modification erron e aussi t t qu elle se produit Pour le garantir il suffit de compiler et ex cuter les programmes de tests qui d pendent de la biblioth que chaque invocation de make et de contr ler leur bonne ex cution Noter que par d faut une commande unix qui ne retourne pas 0 interromp make Voir le projet tools pour plus de d tails Voici une version abr g e du makefile de tools m diter SCCSID makefile 1 11 16 Nov 1995 CCC CC FLAGS g Wp nosplice FLAGS g INC LIBS GET sget defined in the project using make g autoget SC SCCS s SUFFIXES cc do rs tc ts tx i cc source c plus plus do objet c compile sans l option NDEBUG rs un fichier reference de session d execution pour tests tc un fichier source c de tests tx un executable de tests ts une session de tests i un fichier passe par cpp et indente si possible Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 46 Cours de g nie logiciel Laurent Henocque Contr le Qualit INCLUDES gendefs h trace h integ h MOREINCS named h typed h display h TESTS list ts assoc ts quark ts array ts narray ts iterator ts types ts memory ts all S INCLUDES libtools d a TESTS libtools a MOREINCS PERRET A libraries libtools d a list do assoc do quark do array do ar r
46. et non la valeur de cette variable ce qui est bien sir permis Exemple int fonction int i int k i k 2 return amp k void main int i 323 int j fonction amp i passage de i autoris cout lt lt j lt lt endl effets impr visibles M me si le compilateur autorise cette criture et m me si l ex cution du programme est satisfaisante on obtient 2 l affichage de 626 elle doit tre farouchement interdite e 31a m moire dynamique c est l espace total disponible pour le programme hors pile d ex cution li e la m moire automatique Cet espace est gal lors du lancement du programme celui strictement n cessaire au chargement dans la m moire vive du code programme et des donn es statiques Un programme peut ensuite demander explicitement de la m moire l aide de la fonction sbrk Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 38 Cours de g nie logiciel Laurent Henocque Contr le Qualit Pour r capituler disons que deux zones de donn es fondamentales sont accessibles la pile d ex cution stack en anglais et la pile des donn es heap dont voici une repr sentation graphique pile d ex cution 4 adresses d croissantes maxint texte statique dynamique lt gt __ donn es 4 4 4 4 4 0 etext edata breakpoint maximum adresses croissantes Cette repr sentation n est que virtuelle car d
47. eur sur les fichiers Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 31 Cours de g nie logiciel Laurent Henocque Contr le Qualit class ArgvData int operande int interactif char fichier void parseArgs const int argc const char public ArgvData const int argc const char argv interactif true operande 0 fichier NULL parseArgs argc argv void Argvdata parseArgs const int argc const char argv for int i 0 i lt argc i if strcmp argv argc operande operande atoi argv i else if strcmp argv argc fichier fichier lecture fichier de nom argv i else if strcmp argv argc interactif interactif true main const int argc const char argv ArgvData data new ArgvData argc argv if data gt interactif while cin eof lire et ecrire sur les io standard int val cin gt gt val cout lt lt val val else if data gt fichier cout lt lt data gt operande data gt operande lt lt endl else cas ou on lit dans un fichier e par des fichiers textes y compris l entr e standard gt carre interactif Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 32 Cours de g nie logiciel Laurent Henocque Contr le Qualit 25 D gt echo 12 gt datacarre gt carre fichier datacarre 144 De et galement en environnement multit ches par de la m
48. g compteurDAppelsFonction 0 void fonction Globales amp glob glob compteurDAppelsFonction main Globales glob cr e et initialise fonction glob passe la r f rence Une telle pratique est tr s saine et doit tre recommand e sans r serves Dans l exemple ci dessus les variables globales sont en fait allou es sur la pile d ex cution avec les donn es automatiques Comme la fonction main est la premi re Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 36 Cours de g nie logiciel Laurent Henocque Contr le Qualit appel e et la derni re terminer on voit que la dur e de vie de nos globales est gale celle du programme lui m me C est bien l effet cherch Dans certains cas il peut tre pr f rable d allouer dynamiquement les globales ce qui permet de travailler au sein du m me programme sur plusieurs contextes diff rents Voici un exemple include Globales h void fonction Globales glob glob gt compteurDAppelsFonction main Globales globl new Globales cr e et initialise fonction globl passe le pointeur Globales glob2 new Globales cr e et initialise fonction glob2 passe le pointeur delete globl delete glob2 Enfin il est possible d utiliser une classe qualifi e d utility pour grouper les donn es et fonctions globales class Globales public int globalel char nom int co
49. il a lui m me crit et supposons que l algorithme est correct 4 2 1 aspects psychologiques L erreur est toujours une faute d inattention et en g n ral ce qu on appelle un acte manqu en psychologie Tout se passe comme si un m canisme inconscient avait conduit l erreur par exemple une substitution de noms de variables et bloquait le m canisme de m moire qui permettrait de trouver la solution au probl me On en a la preuve au moment ou l on trouve cette solution en g n ral Il arrive que la d couverte de l erreur se produise comme par magie un moment ou l on n y pense presque plus en feuilletant n gligeamment le source Cela donne des pistes sur les attitudes avoir en face d un bug e d contraction la pression que l on s impose pour chercher une erreur est plus g n ratrice de renforcement du blocage qu autre chose e faire un effort calme et patient de m moire passer les symboles et les programmes en revue en r p tant mentalement leur r le pr cis ment va g n ralement faire dispara tre le blocage e demander l aide d une personne ext rieure comme elle n aura pas le blocage lui expliquer le r le des l ments du programme fautif et la logique g n rale du programme suffira souvent lui permettre de trouver l erreur Souvent le fait d expliquer permet au programmeur de faire effectivement l effort calme et patient en question ci dessus et de trouver l erreur lui m me 4 2 2 aspects
50. ir dans tous les programmes par une simple option de compilation L exemple le plus fameux de ce qu il est possible de faire est la macro ASSERT du C ANSI En voici la d finition define assert test if test printf assert viol s ligne d du fichier s n test __LINE_ __FILE_ abort PO OO OO AO IOS GO A Gl Donnons un exemple Supposons que le assert du programme suivant se trouve la ligne 215 d un fichier appel test cc include lt assert h gt float un_sur_x float x assert x 0 return 1 x Un programme permettant le test de cette fonction sera par exemple Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 7 Cours de g nie logiciel Laurent Henocque Contr le Qualit main un_sur_x 0 Alors l application du pr processeur C cpp sur ce fichier par la commande e cpp test cc produira un fichier test i dans lequel le texte de la fonction un sur x aura t modifi de la fa on suivante float un sur x float x if x 0 printf assert viol s ligne d du fichier s n xl 0 215 test cc abort return 1 x La compilation du fichier test cc d bute de fa on invisible par un appel du pr processeur C La commande de compilation de test cc est par exemple e CC o test test cc L appel malencontreux de un sur x 0 dans le main provoquera la sortie gt test assert viol x 0 ligne 215
51. l de r f rence peut tre obtenue par extraction de parties de programmes lorsque la documentation interne est faite rigoureusement Automatiser l extraction du manuel de r f rence est un moyen de conduire une documentation interne de qualit De plus cette automatisation peut aussi permettre de contr ler plus facilement sinon automatiquement la conformit de ce qui est implant effectivement avec le cahier des charges Le lanage Java int gre cette fonctionnalit au langage grace l outil Javadoc qui exploite des commentaires sp ciaux dals le source et g n re une documentation navigable par un browser html 1 6 3 Le manuel d exemples Ce manuel donne des exemples d utilisation de l outil et en g n ral guide de fa on progressive vers la ma trise de ses diff rents concepts C est donc un cours sur papier avec fr quemment une implication assez forte de l utilisateur par le biais de l ordinateur criture de programmes Ce document n est pas forc ment r dig par les programmeurs eux m mes Partie 2 Qualit en programmation organisation de l activit 2 1 Compiler et ex cuter d s le d but de son activit Tous les aspects du d veloppement peuvent tre source de difficult s Il est important de d tecter les d fauts du syst me que l on r alise aussi rapidement que possible Les deux outils de diagnostic fondamentaux sont le compilateur et la machine elle m me lors de l ex cution du programme TI
52. le niveau de modularit et de r utilisabilit de l ensemble e programmer les outils de base font l objet de modules ind pendants group s dans une ou plusieurs biblioth ques Ces biblioth ques sont accessibles l ensemble des membres de l quipe et font l objet d une rigoureuse gestion de versions Les programmes eux m mes sont prot g s des malversations par des contr les d invariants dans leur version de d veloppement Un tel programme ne doit jamais planter s il est mal utilis mais doit se comporter comme une boite noire On ne doit jamais conduire un utilisateur utiliser un d bugger pour naviguer dans des sources inconnus la recherche de l origine d une erreur e documenter de bons documents de sp cification et de conception constituent d j une documentation ad quate Il faut la compl ter par un manuel de l utilisateur qui d crit notamment des cas d utilisation d taill s et des exemples e livrer un utilitaire doit tre disponible aux d veloppeurs sous deux versions La premi re de d veloppement effectue tous les tests de domaines n cessaires et garantit de ne jamais planter sans dire pourquoi elle plante Par exemple le d r f rencement d un pointeur suppose que sa valeur ne soit pas gale z ro La rencontre par un programme d un pointeur nul en situation inopportune doit tre d tect e et provoquer un arr t de l ex cution avant m me que l erreur physique ne se produise SEGV segment
53. llArgumentException il faudrait deux classes pour distinguer x et y ou un commentaire mais comment sera t il utilis else algorithmes de f Tr s souvent le programmeur est pris par le temps et ne peut consacrer toute l nergie utile la prise en compte des exceptions On observe alors des programmes structur s comme suit int f int x int y if x amp amp y algorithmes de f Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 12 Cours de g nie logiciel Laurent Henocque Contr le Qualit pas de else pas le temps L absence de else dans ce programme donne une bonne id e de ce que peut tre une valeur ind termin e certains compilateurs mettront de s v res avertissements puisque f ne retourne pas toujours de valeur Nous recommandons d finitivement la version suivante int f int x int y algorithmes de f Et plus encore d finitivement la version suivante int f int x int y assert x 0 assert y 0 algorithmes Cette approche garantit aussi de meilleures performances En effet lors de l ex cution d un programme il est fr quent qu une condition d appartenance un domaine soit toujours v rifi e de mani re implicite lors d un fonctionnement correct tous gards Par exemple un programme qui construit une liste en y ajoutant des l ments ne g n re jamais de situation o la liste serait vide Toutes les fonctions
54. mme Grep De m me des actions r p titives comme la substitution dans n fichiers d un nom de symbole par un autre peuvent tre r alis es par l utilisation de l outil p p Bien utiliser les outils disponibles pour gagner du temps et des efforts r barbatifs est fondamental dans l activit de d veloppement Pourtant on a souvent vu des programmeurs passer une journ e enti re d velopper un outil usage unique et dont l effet d sastreux sur la qualit globale du logiciel inutile complexit absence de documentation fait oublier les maigres b n fices que l on en retire par ailleurs sur le moment La mise en oeuvre d un automatisme annexe doit prendre un temps n gligeable au regard du probl me pos disons que cela se compte en minutes en g n ral A titre d exemple le programme shell suivant permet par exemple d appliquer r cursivement une commande sur tous les sous r pertoires du r pertoire courant Un tel utilitaire permet de r gler ce probl me une fois pour toutes et d viter de prendre en compte la descente r cursive dans les shells que l on crit par ailleurs bin sh e if ne 2 then echo usage 0 dir command echo this program performs command on all files in the directory echo and recurses down all subdirs exit 1 fi dir 1 command 2 recursive Scommand in directory dir for iin ls A Sdir do Scommand dir S i if d Sdir i then 0 dir i command
55. mpteurDAppelsFonction Globales globalel 0 nom mon prog compteurDAppelsFonction 0 void fonction compteurDAppelsFonction main Globales glob cr e et initialise glob fonction appel Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 37 Cours de g nie logiciel Laurent Henocque Contr le Qualit e 21a m moire automatique l espace correspondant est allou sur la pile d ex cution sans intervention particuli re pour stocker les param tres formels et les variables locales des fonctions La m moire automatique est enti rement prise en charge par le programme g n r par le compilateur La m moire automatique est rendue d s que la fonction qui en a fait la demande termine void fonction char str const int longueurMax 20 char tab longueurMax espace disponible pendant l ex cution de la fonction mais plus apr s assert strlen str lt longueurMax strcpy tab str copie de str dans tab manipulations de tab puis retour La dur e de vie de la m moire automatique est limit e l ex cution de la fonction On voit toute de suite qu il est impossible d utiliser l adresse d une zone automatique pour acc der son contenu apr s que la fonction qui en avait fait la r servation ait termin En particulier il serait d raisonnable de fournir comme valeur de retour d une fonction l adresse d une de ses variables automatiques
56. nc plus de chances d tre r utilis s que les autres Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 14 Cours de g nie logiciel Laurent Henocque Contr le Qualit 1 5 Qu est ce qu une exception Les langages orient s objet modernes C Java C permettent la prise en compte d exceptions Le lancement d une exception par un programme permet d interrompre de fa on brutale la pile d appels en cours et de transf rer le contr le une section alternative du programme La mise en uvre des exceptions traduit une volution au sein des langages de programmation de moyens d interruption brutale mais contr l e de l ex cution obtenue pour le langage C avec les fonctions setjump et longjump Les exceptions permettent de d tecter la pr sence d une situation ne permettant pas l ex cution normale d un programme tout en laissant au programme client la possibilit de survivre de la mani re qu il souhaite la situation ou de laisser passer l exception en d l gant ainsi son absence de traitement au monde ext rieur un autre programme ou le syst me Le choix de d finir et de mettre en uvre certaines exceptions est un choix de conception important normalement compl mentaire de la mise en uvre d invariants En particulier il est d raisonnable de d finir une hi rarchie d exceptions pour la totalit des pr conditions et invariants d un programme On met en uvre des exceptions
57. nce relative qui peut tre extraite n importe o Certaines implantations de tar offrent un acc s fichier par fichier insertion suppression extraction rapide pour les archives qui sont sur disque C est videmment impossible sur une bande streamer compress uncompress La commande compress appliqu e a un fichier dont le suffixe n est pas Z le comprime en g n rant un Z Le fichier de d part est alors supprim automatiquement Appliqu e a un Z uncompress produit sa d compression L algorithme utilis est celui de Lempel Ziv avec effacement locaux de la table des symboles si c est utile Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 55 Cours de g nie logiciel Laurent Henocque Contr le Qualit gzip gunzip Ces outils du domaine public sont install s sur certaines machines et proposent des fonctionnalit s d archivage avec compression sur des fichiers disque en conservant les arborescences et la possibilit d acc der aux fichiers de fa on s lective contrairement a tar Une fonctionnalit comparable est approch e avec une combinaison de ar et de compress uncompress sans les informations de r pertoires sauf archiver des archives de fa on r cursive Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 56
58. nt poss de une description naturelle sous la forme d une fonction cette derni re figurera dans un fichier ind pendant regroupant divers programmes jouant le r le d outils Il existe toutefois des situations o le morceau de code en question ne peut pas tre traduit sous la forme d une fonction ou de quelque autre unit du langage syntaxiquement valide Lorsqu on ne peut factoriser un traitement par le biais d une construction du langage cible on doit utiliser une fonction de texte par le biais d un processeur de macros De la sorte le traitement partag est d fini une seule fois pour tous les fichiers qui y ont recours Toute modification du programme se fera au niveau de la macro et sera donc automatiquement r percut e tous les endroits n cessaires L alternative honorable serait de faire figurer c t du fragment de programme consid r et ce dans chaque fichier o il appara t un commentaire d crivant les r percussions n cessaires d une mise jour L exp rience montre que ces commentaires ne sont jamais pr sents et que des programmes contenant des doublons sont difficiles g rer m me par leur auteur qui oublie rapidement l ensemble des occurrences du sch ma Bien souvent si le sch ma doit tre modifi SEn C on l appelera util cc tools cc ou divers cc misc cc par exemple Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 24 Cours de g nie logiciel Laurent Henocq
59. ntionn dans la conception laisser la porte ouverte la prise en compte de situations exceptionnelles conduit compliquer consid rablement les algorithmes Noter aussi que le cas 1 correspond en fait un programme plus simple au final et que le test de domaine poss de sa logique propre ind pendamment de la fonctionnalit Il faut noter que les langages de programmation modernes C Java permettent de g rer les exceptions Il s agit d un m canisme de contr le particulier mais la prise en charge de ces exceptions rentre dans le contrat au sens propre donc ne contredit pas ce qui est dit globalement dans cette section Deuxi me p le du contrat interne entre les diff rents modules d un logiciel l interface de programmation API Application Programming Interface en anglais doit tre d finie une fois pour toutes de fa on tr s rigoureuse et ne plus varier Ainsi les diff rents d veloppeurs d une quipe peuvent utiliser dans leurs programmes les formes d finitives des appels de fonctions noms de types et noms de variables Dans l exemple de la division l ordre des deux arguments est d fini priori On peut galement d finir des r gles g n riques Par exemple d cider que dans toutes les fonctions portant sur un tableau dont la taille est fournie en param tre la taille pr c de le tableau lui m me dans la liste des arguments Il est d usage que sur l ensemble d un projet ou sur m me sur une gamme de produi
60. ogramme lors de la rencontre de l exception Lorsque les diff rents programmes sont implant s conform ment leur sp cification et v rifient leurs invariants de domaine de d finition par le biais de la macro assert par exemple cet effet est instantan puisque assert provoque une interruption d ex cution Abort Sun dernier cas non totalement improbable est celui ou un ou plusieurs bits auraient t modifi s dans la m moire vive par un rayon gamma ou b ta 7 soi m me le plus souvent Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 34 Cours de g nie logiciel Laurent Henocque Contr le Qualit 3 2 2 P riode d exploitation Lorsqu un logiciel est utilis effectivement le client demande en g n ral une robustesse incompatible avec la brutalit de assert M me si le programme rencontre une situation inattendue l utilisateur souhaite pour le moins pouvoir sauver le fruit de ses efforts r cents et si possible continuer travailler en continuant comme si de rien n tait Pas question d interrompre le programme donc Toutefois pour l quipe de maintenance il serait souhaitable de disposer d informations pr cises sur les invariants viol s pour permettre une correction rapide des d fauts Peut on concilier continuation d ex cution et logging Permettre la continuation d un programme lors d une exception suppose la capacit le replacer dans des conditions d ex cution saines
61. on exceptionnelle ne doit sous aucun pr texte se produire lors de l utilisation du logiciel et ne peut se produire si les conditions d ex cution sont correctes par ailleurs On d cide alors de ne pas tester la valeur 0 pour z dans la version d finitive commerciale du programme f Bien s r il peut s av rer utile de tester ce cas pendant le d veloppement et les tests Mais ce test ne participe pas la logique du programme L appel f x 0 interromp le programme en fournissant plus ou moins d informations utiles pour d bugger float divise float x float z ifndef NO DEBUG if z 0 then printf Division par z ro exit 1 endif return x z Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 4 Cours de g nie logiciel Laurent Henocque Contr le Qualit e 2 Le cas peut l gitimement se pr senter car les programmes n ont pas le contr le de toutes les donn es en entr e et une d cision de type moyen terme doit tre prise sans interrompre le programme Dans ce cas z ro est une valeur participant au domaine de d finition de la fonction float divise float x float z if z 0 then return MAX FLOAT mauvais mais peut tre acceptable else return x z En d pit de son apparente plus grande simplicit l approche 2 conduit une programmation beaucoup plus difficile dans la r alit Une raison en est que lorsque cela n est pas explicitement me
62. par exemple dans une programme devant manipuler le contenu d un fichier Si l ouverture du fichier choue pour des raisons qui sont ext rieures au programme l ex cution ne peut continuer Toutefois cette erreur doit pouvoir tre r cup r e plus haut niveau On lui associe donc une exception Dans le m me cadre on pourra associer des exceptions la pr sence dans le fichier d l ments non reconnus ou de donn es incompatibles avec le traitement On ne met pas en uvre d exceptions sp cifiques pour tester qu une fonction est appel e avec des arguments situ s dans son domaine de d fintion Il faut noter que le langage java s appuye sur le m canisme des exceptions pour l implantation de assert 1 6 Capitaliser L activit de programmation est couteuse et autant que possible les organisations doivent mettre en place une forme de recyclage du travail Les efforts pass s doivent tre capitalis s et pouvoir resservir Traduit en termes de programmes on dira que les programmes crits doivent tre r utilisables Il est vrai que de nombreux outils logiciels de base se rencontrent dans tous les projets Citons par exemple les listes les tableaux r allouables les tables hash es les B arbres On observe souvent qu une quipe de programmeurs ne s entende pas sur la sp cification de ces l ments de base et qu un projet int gre des versions l g rement diff rentes des m mes programmes A fortiori on con oit que de projet
63. que ni le programmeur ni le chef de projet ne doivent chercher se faire plaisir La jubilation d un projet termin test document puis vendu dans les temps d passe consid rablement le plaisir d un exploit local 2 est proscrire dans tous les cas Seule compte l implantation des fonctionnalit s selon les r gles tablies par la sp cification puis la conception 3 est toujours faux En premier lieu disons qu un projet non termin dans les d lais parce que tel programmeur n a pu g rer la complexit de son uvre n aura de toute fa on jamais voluer puisque le client aura disparu Ensuite on observe que les demandes d volution mises par les clients ne sont jamais celles que l on attend et il se peut fort bien qu un programme inutilement magnifique soit tout simplement abandonn dans la suite 4 proc de du m me sch ma de pens e que 3 Le programmeur n est pas le client Pour 5 on observe que l effet inverse se produit Les programmes soit disant g n riques sont peu test s dans leurs parties limites et des probl mes se rencontrent fr quemment lorsqu un logiciel qui en contient est livr Enfin il est fr quent de sous estimer la complexit du d veloppement d une fonctionnalit plus g n rique que ce qui est n cessaire Les cas limites sont toujours les plus difficiles traiter et au sein d un projet logiciel cons quent on risque de voir appara tre des probl mes aux limites dans des programmes qui somme tou
64. que retourne La m moire dynamique quand elle une fois allou e est r serv e jusqu sa lib ration explicite par free Si l on oublie de proc der un appel de free on maintient d finitivement le caract re r serv d un certain espace m moire emp chant de ce fait son utilisation pour de nouveaux appels de malloc Si cet oubli est r p t de nombreuses fois le programme peut progressivement r server pour n en rien faire la totalit de l espace de m moire vive disponible sur la machine jusqu finalement s arr ter pour allocation impossible plus du tout de place Nous pouvons donc affirmer Toute zone de m moire dynamique qui n est plus utile doit tre lib r e 3 4 Conventions g n rales pour l allocation de m moire Les programmes requi rent tous d allouer un certain espace m moire dynamiquement pour g rer leurs diff rents tats Par exemple un diteur de texte garde une liste complexe d informations permettant la construction du document final Comme la structure m me du document r alis par l utilisateur ne peut tre pr vue d avance et fortiori sa taille l espace n cessaire est allou par le programme au fil de son utilisation C est de la m moire dynamique Certaines fonctions d un programme vont donc allouer de la m moire D autres vont en lib rer Un besoin fondamental reste cependant satisfaire toute zone inutilis e doit tre d savou e Mais par qui Nous devons satisfaire
65. r voir le cas de situations exceptionnelles On voit que des situations o il est demand une fonction de prendre en compte des situations sensiblement hors de son domaine de d finition ne peuvent pas tre qualifi es d exceptions Ne m ritent ce titre que les situations dont la prise en compte n a pas t pr vue lors de la sp cification du syst me ou bien lors de la conception des programmes En d autres termes s il est convenu que la division de deux nombres flottants doive s accommoder d un diviseur nul l irruption de ce diviseur nul n est pas une exception m me si son traitement suit une toute autre route que le traitement habituel et m me si cela l ve une condition d erreur Donc on peut sans crainte affirmer que Un logiciel sans d faut ne rencontre jamais d exceptions Mais il est aussi vrai que Un logiciel commence tre utilis avant d tre totalement d pourvu de d fauts Puisque des exceptions devront tre prises en compte il faut savoir comment Les deux grandes poques dans la vie d un logiciel savoir le d veloppement et tests puis la diffusion et maintenance ne vont pas demander la m me attitude devant le probl me des exceptions 3 2 1 P riode de d veloppement et tests Lors du d veloppement et des tests une exception demande une correction imm diate Le meilleur moyen d obtenir du programmeur une intervention imm diate est de la rendre n cessaire par une interruption subite du pr
66. r toutefois que toutes les fonctions prenant des r f rences constantes des structures ne proc dent pas une copie Lors du d veloppement d un logiciel il doit tre fait obligation aux d veloppeurs de se conformer aux r gles d finies En particulier il doit tre fait mention dans la documentation e du fait qu une fonction duplique certains de ses arguments le d faut tant raisonnablement qu elle ne le fasse pas e du fait qu elle alloue elle m me sa valeur de retour ou non Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 42 Cours de g nie logiciel Laurent Henocque Contr le Qualit Partie 4 Qualit en programmation aspects humains 4 1 Eviter de g n raliser et d abstraire Un besoin consiste souvent en un cas particulier d un certain nombre de m canismes plus g n raux La relative autonomie du concepteur puis du programmeur peut conduire implanter non pas un programme qui corresponde strictement au besoin mais une version arbitrairement plus g n rale Les motivations pour le faire sont diverses e 1 le go t de r soudre un probl me difficile e 2 le go t d une certaine esth tique des programmes e 3 la croyance que l on se prot ge d avance contre des volutions futures du besoin client e 4a croyance que le m me programme puisse servir dans un autre projet e 5 l impression d am liorer la qualit du logiciel Tous ces points sont contestables Pour 1 il est clair
67. re effectu s pour v rifier que des blocs demand s par malloc ne sont pas oubli s ou bien lib r s plusieurs fois e un allocateur pourra peut tre compacter l espace automatiquement lors de realloc et permettre ainsi dans de rares cas de r duire la place demand e par le programme au syst me diminution du breakpoint qui d habitude ne cesse de cro tre On peut le v rifier en comparant les adresses des zones m moire 10Un programme qui d pendrait de ces conditions risque fort toutefois de n cessiter quelques modifications lors d un portage sur un syst me diff rent 11Cela d pend de la m moire vive effectivement disponible sur la machine en termes de nombre d octets comme de la m moire virtuelle disponible sur le disque on parle aussi de zone de swap Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 39 Cours de g nie logiciel Laurent Henocque Contr le Qualit un allocateur saura peut tre r cup rer automatiquement l espace oubli agissant ainsi comme un ramasse miettes garbage collector e un allocateur pourra privil gier la rapidit de d livrance des blocs temps d ex cution des fonctions malloc etc au d triment peut tre de l espace perdu La m moire allou e sur la pile d ex cution par le compilateur est dite m moire automatique Cette derni re est en effet lib r e d s que la fonction qui avait demand de l espace pour une variable automati
68. rmettent de gagner du temps sur l ensemble d un projet implantation pr alable d un langage ad hoc bootstrapping d veloppement en pipe line notamment mais leur effet est rarement mesurable dans la mesure o l on n essaye jamais les voies alternatives Donc nous allons juste nous efforcer de d crire ici les attitudes individuelles et collectives qui permettent des conomies de temps manifestes eg Ne pas programmer de fonctions inutiles Il faut implanter tout et seulement ce que la conception a d fini 2 Communiquer l information Cette communication est essentiellement r alis e par l utilisation de messageries et la mise en place d un service d aide en ligne sur tous les programmes L aide en ligne est garantie correcte et mise jour toute modification de son objet Ea R duire le temps d acc s l information Des outils adapt s doivent tre d velopp s pour viter au programmeur de chercher les signatures de fonctions notamment Cela peut tre obtenu soit par des outils dynamiques recherche extraction de texte par exemple soit par des outils statiques extraction automatique de d finitions et de commentaires des fichiers include par exemple 8 04 Documenter ses programmes Seules les astuces non triviales doivent tre document es L essentiel de la logique d un programme m me inconnu est vident au programmeur averti pourvu que ce programme mentionne clairement les invariants dont il d pend 25 Prot
69. rogrammes de cette contingence Taille de mot est alors un param tre machine Bien que les compilateurs permettent de conna tre dynamiquement les tailles des structures instruction sizeof du langage C il importe souvent pour des raisons de portabilit de se pr munir contre les variations de taille des types fondamentaux le type entier sign par exemple Un autre exemple est le nombre de registres internes au processeur L criture d un ramasse miettes garbage collector en anglais en d pendra certainement Le pr processeur C permet de prendre en compte des symboles d finis automatiquement par le compilateur ou explicitement par la commande de compilation pour s adapter aux variations d architectures physique Le symbole correspondant s appelle ARCH sous Unix Sa valeur lors d une compilation est connue et peut tre prise en compte if ARCH CRAY_XMP d finition d un entier de 4 octets typedef short int int32 else typedef int int32 endif 3 1 2 Param tres syst me Le syst me d exploitation pose galement des conditions sur l ex cution des programmes Par exemple le nombre de fichiers qu il est possible d ouvrir simultan ment est variable comme le nombre de processus ou de threads qu il est possible d ex cuter un moment donn Un logiciel performant doit s adapter automatiquement aux ressources disponibles de fa on en faire profiter l utilisateur du programme C est une mauvaise pratique
70. rt trois objectifs fondamentaux de concision des programmes de facilit de programmation et de performance e concision certains tests tant supprim s en t te de fonctions qui implantent des algorithmes le texte du programme se trouve donc r duit l expression simple des algorithmes Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 11 Cours de g nie logiciel Laurent Henocque Contr le Qualit e facilit le programmeur d un algorithme ne s attend pas g rer des situations d exceptions puisqu il n en crit pas les tests La r flexion qui est aboutit au programme est donc d barass e de ces consid rations auxilliaires performance l conomie provenant de la non r alisation de certains tests est r elle e maintenabilit si l on utilise des invariants la place Par exemple soit f une fonction valeur enti re prenant deux arguments entiers non nuls Voici le programme que l on est tent d crire int f int x int y if x 0 printf erreur argument x nul return 0 par exemple mais quelle valeur conviendrait 0 f erreur argument y nul else if y printf return 0 par exemple mais quelle valeur conviendrait else algorithmes de f La m me version avec le lancement d exceptions int f int x int y throws NullArgumentException throw new NullArgumentException else if y 0 throw new Nu
71. s de peut tre cette information qui reste sans utilit pour la fonction appel e e conomie l autre alternative souvent employ e est celle de la copie syst matique des param tres en entr e Elle se traduit par des co ts d ex cution temps espace plus importants et par le risque de voir prolif rer des zones non lib r es Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 41 Cours de g nie logiciel Laurent Henocque Contr le Qualit s curit la fonction appelante sait exactement dans quelles conditions la copie est n cessaire en fonction de ses propres traitements et peut la r aliser elle m me Il peut tre utile dans certains cas de poss der malgr tout des fonctions faisant une copie de leurs arguments en entr e Pour distinguer de mani re explicite le cas des fonctions r alisant une copie de celles qui n en font pas on peut utiliser la convention suivante surcharger la fonction qui ne proc de aucune copie et qui prend un pointeur en param tre par une fonction de m me nom qui prenne une r f rence constante au param tre struct Essai int i int j Essai int _i int _j i _i j _j void fonct Essai e pas de copie diff rents calculs void fonct const Essai amp e copie initiale Essai f new Essai e i e j fonct f void main Essai e new Essai 1 2 fonct e pas de copie fonct e copie Note
72. s utilis es pour l industrie spatiale On sait que l efficacit maximale sur un projet informatique est obtenue pour deux personnes travaillant pendant six mois Mais les grands logiciels sont r alis s par des quipes immenses une centaine d ing nieurs en plusieurs ann es Ce cours a pour projet de donner les bases de techniques de travail reconnues comme n cessaires pendant tout le cycle de vie du logiciel et d apprendre les m thodes qui permettent d affronter syst matiquement et de r soudre les probl mes Fr quemment les cours de g nie logiciel s appuient sur la chronologie naturelle des projets en d butant par la sp cification pour continuer par la conception et finir par la programmation et la gestion de projet Ce cours aborde les aspects individuels de la programmation sur la base du langage C mais gagne a tre abord avant m me que de parler de conception et de sp cification Les raisons sont notamment que Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 1 Cours de g nie logiciel Laurent Henocque Contr le Qualit e nous pensons que la qualit des tapes pr alables la programmation effective d un logiciel savoir cahier des charges et conception d pendent de la connaissance de principes de qualit fondamentaux dans la programmation e le langage C couvre par sa puissance expressive une partie tr s importante des besoins li s la r daction de documents de sp
73. sans importance dans un fichier bin sh cd usr include echo PARTIAL MATCH grep n 1 2 X11 grep n 1 2 xm echo TOTAL MATCH grep n 1 2 X11 grep n 1 2 Xm le fichier awk awkfile Ce programme awk formate la sortie fournie par seachinc afin que le r sultat puisse tre ex cut imm diatement par extract afin d en voir plus BEGIN FS PARTIAL print 0 TOTAL print 0 print 3 print Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 23 Cours de g nie logiciel Laurent Henocque Contr le Qualit le shell de recherche search searchinc 1 2 awk f awkfile Pexemple stype cherche un nom de type C en fin de d claration searchinc 1 awk f awkfile l exemple sdefine cherche une d finition de macro searchinc define 1 awk f awkfile Pexemple stype searchinc typedef 1 awk f awkfile Pexemple sclass searchinc class 1 awk f awkfile 2 5 Ne pas dupliquer Tout projet logiciel consiste en plusieurs fichiers Chacun des fichiers groupe des fonctionnalit s voisines Par exemple un fichier d crit les fonctions d entr e sortie un autre les impressions un troisi me des algorithmes de calcul Il arrive souvent qu un m me fragment de programme doive tre r p t en diverses parties du logiciel voire m me dans des fichiers distincts Il va de soi que si ce traiteme
74. st compens e par la possibilit de maintenir correctement les m mes algorithmes sur tous les environnements sans rien oublier Un cas fr quent est celui des sp cificit s et parfois bugs de compilateurs void fonct int tab calcul de la longueur du tableau int i 0 for tab i 0 i ifdef SOLAR V2 ne compile pas correctement sinon else compile correctement sur toutes les autres machines et avec tous les autres compilateurs endif Cet exemple montre que l on ne peut pas proc der autrement que par compilation conditionnelle pour la fois e 1 permettre la compilation sur toutes les plate formes e 2 permettre la mise au point de tous les algorithmes sans jamais oublier de version e 3 r duire le nombre des fichiers source utilis s e 4 permettre l utilisation optimale des ressources offertes par chaque environnement e 5 se prot ger contre l oubli potentiel des conditions dans lesquelles la variabilit appara t Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 27 Cours de g nie logiciel Laurent Henocque Contr le Qualit Le dernier point 5 est fondamental et ce titre le programme ci dessus est meilleur que le suivant car un commentaire pr sente une moins grande r sistance l usure du temps et au despotisme de certains programmeurs void fonct int tab calcul de la longueur du tableau int i 0 for tab i 0 i
75. st rs assoc ts assoc rs quark ts quark rs array ts array rs array tx narray ts narray rs narray tx iterator ts iterator rs iterator tx memory ts memory rs memory tx types ts types rs types tx echo differences between tx and rs types tx tee types tmp diff types rs types tmp gt tmp mv tmp ts rm pv log rm f tmp echo no differences dd CCL CC o CCC c FLAGS DNDEBUG S INC cc o o additional dependencies for cc o list o INCLUDES list h list cc assoc o INCLUDES list h assoc h assoc cc quark o INCLUDES list h assoc h quark h quark cc array o INCLUDES array h array cc Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 48 Cours de g nie logiciel Laurent Henocque Contr le Qualit PRP RARA Other CC CCC FLAGS INC cc CCC FLAGS o o LIBS cc ix CCC E FLAGS DTEST INC cc gt i not available indent i CCC FLAGS i o ix LIBS FR RER cleaning dir clean touch dummyfile rm f o a do ts a out core tx old sccs get makefile sget chmod x sget Annexe quelques commandes Unix tr s utiles make Cette commande permet de d clencher des traitements de fa on s lective quand des dates de fichiers sont modifi es Les r gles de d clenchement sont d crites dans un fichier Make utilise par d faut un fichier programme appel makefil
76. susceptibles d tre appel es sur cette liste qui testeraient sa non nullit le feraient donc inutilement En reprenant l exemple f ci dessus on peut concevoir une situation ou le test syst matique d appartenance au domaine dans la fonction f est une perte s che pour la performance du programme Cette situation est tr s fr quente int j 1 for i 1 1 lt 100000 i j j f i 2 i appel de f toujours valide utilisation de j Bien s r le gain potentiel en performance est plus net que le gain en concision On objectera l approche pr sent e ci dessus que si le test de domaine n est pas r alis par la fonction elle m me et qu il doit tre fait de mani re syst matique on devra le r p ter dans les programmes qui l appellent La solution est alors de d finir pour les besoins Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 13 Cours de g nie logiciel Laurent Henocque Contr le Qualit ad hoc des programmes qui risquent syst matiquement de rencontrer les conditions d erreur une fonction suppl mentaire ou une macro qui masquera le test proprement dit Par exemple en C on peut d finir une fonction qui surcharge le symbole f et qui effectue les tests inline int f int x int y int amp erreur le param tre erreur pass par r f rence permet de contr ler dans le programme principal les cas d erreur if x 0 amp amp y 0 then erreur 0 return f x y
77. t quand des diff rents modules qu elle d crit 1 1 3 contrat entre programmes Un logiciel est d coup en l ments logiques ind pendants en g n ral des classes et op rations Il est bon de d crire comment chaque l ment s engage sur les points suivants quoi quelle est la fonctionnalit implant e par ce programme Bien s r dire ce que fait une fonction est une condition incontournable e comment quelles sont les r gles de nommage noms de fonction types des arguments types en g n ral pour obtenir cette fonctionnalit quand quelles sont les donn es de base pour lesquelles son fonctionnement est garanti contraintes de domaine Le corollaire de ces engagements est une facilit de d veloppement accrue En effet on ne peut exiger d une fonction de pr voir voire de traiter un cas exceptionnel Hors de son domaine de d finition officiel on doit consid rer qu une fonction produit des r sultats ind termin s il est bon de penser que le programme s interrompra En d autres termes on ne doit pas consid rer qu une fonction traite une exception Traiter une exception c est dire s en sortir honorablement revient ajouter l exception au domaine de d finition m me si le r sultat du calcul sur cette valeur est sujet caution ou m me illogique Exemple supposons qu on impl mente la division r elle y f x z x z Le cas z gale z ro sugg re deux attitudes saf Cette situati
78. t maintenue Il est en g n ral inutile de chercher la cause de l erreur tant qu on n a pas proc d cette r duction la s quence minimale 4 2 4 savoir proc der par diff rences l mentaires Il arrive que pour comprendre le m canisme d un bug dans ce cas souvent une erreur dans l algorithme il faille proc der par diff rences l mentaires pour observer le comportement de l algorithme apr s avoir isol les conditions fautives selon la d marche d crite ci dessus Il est alors fondamental de rester aussi proche que possible des conditions minimales g n ratrices de l erreur si une modification l mentaire maintient la situation d erreur alors elle n est pas discriminante et doit tre annul e avant l essai d une nouvelle modification Cette technique permet de travailler sur la base de conditions stables et d acqu rir un maximum d informations lorsqu une modification l mentaire supprime le bug 4 3 Etre souple et curieux Enfin voici une liste non exhaustive de quelques qualit s demand es l informaticien 4 3 1 Autonomie L informaticien ne doit pas tre une charge pour l quipe notamment en termes de demande d information Mais il ne doit pas non plus tre une charge par la g n ration de difficult s pouvant peser sur tout le monde En cons quence un comportement abusivement renferm est galement n faste Tout n est qu quilibre Disons seulement qu une d marche individuelle d acc s l inform
79. te ne devraient faire que des choses simples La perte est double et le risque est grand 4 2 Savoir d boguer Les programmeurs font toujours des erreurs Le niveau d erreur le plus bas et le plus impardonnable est la faute de syntaxe d cel e par le compilateur oubli de point virgule par exemple commentaire non termin cha ne de caract res non termin e par exemple Mis a part cel on observe deux types de programmes erronn s e 1 le programmes corrects mais qui implantent un algorithme faux e 2 les programmes qui implanteraient un algorithme correct s ils ne contenaient des erreurs Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 43 Cours de g nie logiciel Laurent Henocque Contr le Qualit Dans les deux cas le programme erronn risque fort de violer un invariant majeur Si cet invariant est test le programme sera interrompu au plus t t vitant l erreur encore inconnue d aller produire des effts dans des portions du programmes trang res l erreur elle m me situation qui rend plus d licate la d couverte du bug Cet argument devrait encore inciter l utilisation syst matique de tests d invariants Notons que la situation 1 est souvent plus difficile corriger que la seconde En effet en pr sence d un bug le programmeur remet rarement en cause les principes du programme qu il a crit 2 Pla ons nous dans le cas d un programmeur qui recherche un bug d un programe qu
80. tes les instances d une classe a tout moment de leur existence compris entre la fin de leur construction et le d but de leur destruction Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 10 Cours de g nie logiciel Laurent Henocque Contr le Qualit class ThisClassIsChecked int integrity ThisClassIsChecked initialize assert integrity ThisClassIsChecked_ assert integrity delete everything method A assert integrity avant de commencer do everything assert integrity avant de sortir 1 4 Qu est ce qu un test Les tests r alis s lors de l ex cution d un programme rel vent de deux probl matiques compl mentaires Certains d cident de l appartenance d un jeu de donn es au domaine de d finition d une fonction d autres identifient l appartenance une partie d un tel ensemble Par exemple imaginons une fonction d finie par intervalles sur le domaine des nombres r els strictement positifs e x lt 0 fonction non d finie test de domaine e x gt 0 et x lt 3 f x 1 x test de partie e x23 f x 1 3 test de partie Principe des tests de domaine une fonction qui implante un algorithme ne teste jamais l appartenance de ses arguments au domaine de d finition Ce test s il s av re cependant utile est implant par une fonction sp cialis e valeur bool enne ou dans des cas triviaux par un simple test du langage Ce principe se
81. ts soient d finis des guides de style pour la d finition des types et des signatures de fonctions et m thodes y compris leur nommage On pourra d cider que toutes les fonctions du module graphique commencent par Gr que tous les objets externes aient des noms commen ant par une lettre capitale que tous les objets statiques soient en majuscules qu aucun nom de variable ne fasse moins de six caract res etc IH arrive toutefois que lorsque le d veloppement n est pas bien encadr on finisse par ne plus savoir ce que fait exactement une fonction Ce n est pas rare 2 criture de la chaine ERREUR ou encore infini dans un fichier texte ou de la valeur NULL dans un fichier base de donn es 30n appelle signature d une fonction l nonc exact de son en t te mentionnant la totalit des types des arguments avec leurs atributs annexes passage par r f rence caract re constant etc Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 5 Cours de g nie logiciel Laurent Henocque Contr le Qualit 1 2 La notion d utilisateur parfait La conception et la programmation gagnent consid rablement au respect du principe de l utilisateur parfait Principe de l utilisateur parfait tout programme s engage se comporter comme un utilisateur parfait de ses p P prog gag p p ressources les fonctions qu il appelle c est dire ne jamais appeler une fonction dans des conditions qui la mettent
82. u point de vue du d veloppeur ce test doit tre effectu pour des raisons videntes de d tection d erreurs pendant le d veloppement Les tests de domaine mais ce ne sont pas les seuls figurent parmi les invariants des programmes Un invariant est une propri t logique qui est toujours vraie pendant l ex cution d une partie d un programme soit qu elle soit un pr requis c est alors bien un invariant de domaine de d finition soit qu elle soit implicite du fait de la nature du programme la d finition et la v rification des invariants implicites est un outil de base dans la preuve formelle de programmes Les invariants de domaine sont appel s des pr conditions et les invariants implicites portant sur la valeur que doit retourner une fonction s appelent les postconditions Ce ne sont pas les seuls Par exemple les param tres intervenant dans une boucle peuvent tre soumis un certain nombre d invariants le test de continuation de la boucle en est un Dans tous les cas on gagne ajouter au programme des op rations suppl mentaires permettant la v rification des invariants Comme cette v rification n est utile que pendant le d veloppement et plus lorsque le produit aura t test et Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 6 Cours de g nie logiciel Laurent Henocque Contr le Qualit ne violera plus aucun invariant on doit utiliser un macro processeur pour que le test puisse tre ret
83. ue Contr le Qualit ult rieurement le programme n atteindra de nouveau un point stable qu apr s une s rie de cycles mise au point erreur pouvant d river dans des proportions inacceptables L exemple suivant montre comment utiliser le pr processeur C pour factoriser un traitement C qui ne pourrait tre implant par une fonction de fa on aussi imm diate La macro INIT LOG d clare en effet une variable VAR LOG qui est initialis e d une fa on standard puis utilis e localement des besoins divers Si le m canisme d initialisation change la macro seule doit tre modifi e Exemple de trois fichiers fichier header h define VAR LOG var il define INIT LOG obj VAR LOG N VAR LOG init select from users where name name and fichier fic imprime cc include header h void imprime char name INIT LOG VAR LOG print fichier fic reset cc include header h void imprime char name INIT LOG VAR LOG reset En aucun cas une partie de programme ne doit tre dupliqu e dans plusieurs parties d un logiciel Le faire est s exposer des difficult s de maintenance consid rables 2 5 1 Une seule exception S il est fondamentalement dangereux de dupliquer des programmes se trouvant dans des parties loign es d un applicatif notamment dans des fichiers distincts il existe toutefois une exception cette r gle simple le cas o les expressions r p ter se trou
84. ur en atteindre la fin L ajout est ensuite imm diat Tester que l lement ajout est bien situ en queue de liste doit imp rativement proc der un nouveau parcours C est inutile Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 17 Cours de g nie logiciel Laurent Henocque Contr le Qualit Dans ce cas nous dirons que Un invariant qui ne peut ou ne doit raisonnablement pas tre test doit tre mentionn en commentaire Les diff rents principes que nous avons d finis s ils sont suivis permettent de fournir au lecteur futur d un programme une documentation de qualit en g n ral tr s succinte et pr cise notamment du fait des invariants si possible compl te et exacte qui ne donne jamais au programmeur l impression de fournir des informations redondantes avec le programme lui m me et donc encourage la maintenir en m me temps que les programmes 1 6 2 Le manuel de r f rence Ce document d crit dans le d tail exactement ce que fait chaque fonction sous quelles conditions et avec quels param tres Aucune sp cificit non implicite ne doit y manquer afin de permettre tout nouveau programmeur ou utilisateur de trouver toutes les informations n cessaires son activit Le manuel de r f rence comporte une partie destin e l utilisateur final Cette partie doit tre strictement conforme ce qui est mentionn e dans le cahier des charges L autre partie du manue
85. v S ranlib libtools a list o assoc o quark o array o ar rv S ranlib PRP dd dd dd add dd suffix rules building objects with assertion checking cc do CCC c FLAGS INC cc mv o do additional dependencies for cc do list do S INCLUDES list h list cc assoc do S INCLUDES list h assoc h assoc cc quark do S INCLUDES list h assoc h quark h quark cc array do S INCLUDES array h array cc Sosa sais CC CTA CR building test exes tx from archived test sources tc tc tx echo building test program tx cp tc t cc chmod w t cc purify exit status windows no viewfile pv logfile log CCC S FLAGS DTESTING t cc o tx libtools d a rm f t cc t o echo done list tx list do list tc assoc tx list do assoc do assoc tc quark tx list do assoc do quark do quark tc array tx array tc array h Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 47 Cours de g nie logiciel Laurent Henocque Contr le Qualit narray tx narray tc narray h iterator tx iterator tc iterator h types tx types tc types h memory tx memory tc memory h PRP comparing the execution of a test program to a stored sample rs tx ts echo differences between tx and rs s tx tee tmp diff rs tmp gt tmp mv tmp ts rm pv log rm f tmp echo no differences additional dependencies for tx ts list ts li
86. vent en s quence dans un programme Par exemple il est inutile d implanter une gestion de listes sous pr texte qu un programme traite successivement trois cas diff rents d un m me probl me Dans ce cas si l on veut r duire le risque d erreurs et am liorer la lisibilit du programme on fera souvent appel au pr processeur Voici un exemple typique d initialisation d un tableau dont la taille est connue d avance Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 25 Cours de g nie logiciel Laurent Henocque Contr le Qualit int tab 20 int i 0 tab i 12 tab i 13 i i 1 tab i 14 tab i 15 i Voici une version utilisant les services du pr processeur int tab 20 int i 0 define Store n tab i n i Store 12 Store 13 Store 14 Store 15 Store 16 undef Store Autre exemple avec des comparaisons r p t es de cha nes de caract res cas fr quent version naturelle if strcmp str help code pour help else if strcmp str coml code pour coml else if strcmp str com2 code pour com2 else if strcmp str com3 code pour com3 else code de l erreur dont on peut sensiblement am liorer la lisibilit par define IFSTR chaine bloc if strcmp str chaine bloc else IFSTR help code pour help IFSTR coml code pour coml IFSTR com2 code pour com2 IFSTR
87. vis seront suffisantes Par contre Quand une expression valu e dans un test n est pas suffisament explicite pour le comprendre une ligne de commentaire est n cessaire Dans le cas ou un test complexe est r alis il est parfois utile de reporter ce test dans une fonction valeur bool enne dont le nom sera explicite de ce qui est test Ainsi le corps du programme aura une expression proche de l algorithme De m me Lorsqu un programme poss de un effet de bord non vident cela doit tre document Observons maintenant que les invariants mentionn s explicitement dans les programmes et test s constituent une documentation fondamentale En effet leur conformit avec les algorithmes est garantie justement parce qu ils sont test s La pratique du d veloppement avec contr le d invariants montre que tr s souvent leur pr sence claire consid rablement le sens et la fonction des programmes ou ils apparaissent Les invariants constituent le fondement de la documentation interne Tous les invariants ne peuvent raisonnablement pas tre test s C est notamment le cas de certaines postconditions qui soit sont v rifi es de mani re vidente la lecture du programme soit demanderaient pour tre v rifi es de pratiquement dupliquer le programme Par exemple imaginons une fonction ajoutant un l ment en fin d une liste chain e simple La premi re action de cette fonction est de parcourir la liste po
88. xec rm f file Cette commande fournit des informations limit es sur le type d un fichier ex cutable texte source shell par exmemple sed Cette commande permet de filtrer un fichier ligne par ligne sed stream editor On peut remplacer ainsi du texte par un autre texte de fa on assez riche sed e s toto une belle variable g ficl gt fic2 sed f sedfile ficl gt fic2 et voici fichier sedfile correspondant s bozo 0 9 king c est le numero 1 s t t g l est une variable texte la premi re zone parenth s e et la deuxi me ligne substitue toute r p tition de deux ou plus espace ou tabulation par un seul espace avec r p tition sur toute la ligne Ecole Sup rieure d Ing nieurs de Luminy d partement INFO Marseille 53 Cours de g nie logiciel Laurent Henocque Contr le Qualit Dans un fichier sed on peut donc faire suivre plusieurs commandes de substitutions qui sont appliqu es en cascade sur la m me ligne la deuxi me op re sur le r sultat de la premi re Si une ligne ne contient pas le sch ma de substitution elle est laiss e inchang e Il est possible avec de concat ner des lignes mais c est assez difficile r aliser et d exp rience peu portable quoique cela doive s am liorer awk Cette commande permet d extraire des colonnes de fichiers et de faire des calculs sur ces colonnes La notion de colonne est souple et repose sur un

Download Pdf Manuals

image

Related Search

Related Contents

424 S 428 S 424 RS Service manual  Illustra Essentials Indoor Outdoor HD Bullet User Manual  5.5” FHD Multi Format Viewfinder Monitor  Manual de Instrucciones para Control de Accesos RD  ÉWKidde  K==bñéçêíLfãéçêí=sá~=oÉãçî~ÄäÉ=jÉÇá~=Ekçå=Ó= kÉíïçêâÉÇ  

Copyright © All rights reserved.
Failed to retrieve file