Laboratoire de programmation 3 ème Partie : Vérification par tests 2 ème BAC Dang Vinh Tran Professeur : Jean-Marie Jacquet Assistant : Denis Darquennes
Procédure Rappel du code function clnliaisons: lnliaisons; {Pré:/ Post:clnliaisons retourne une liste vide de liaisons} clnliaisons:=nil; Test white-box Arc a R1 clnliaisons :=nil
Procédure 21 : test white-box Rappel du code : function clntrains:lntrains; {Pré: le fichier liaison.txt existe et on se situe sur la bonne ligne du fichier Post: le fichier liaisons.txt est fermé} var f: Text; lntr: lntrains; traina: lntrains; caractere: char; n_train:string[20]; assign(f,'liaison.txt'); reset(f); new(lntr); read(f, caractere); {passer le numéro de sens} while () do {vérifier qu'on va jusqu'au bout du fichier} read(f, caractere); while(caractere=' ') do {traitement chaines d'espaces} {Inv: les caractères déjà lus sont des espaces But: tous les caractères lus étaient les espaces} read(f, caractere); while(caractere<>' ') do {traitement chaines de caractères} {Inv: n_train est la concaténation des caractères déjà lus But: n_train est la concaténation de tous les caractères lus} n_train:=n_train+caractere; traina^.nom:=n_train; traina^.suiv:=nil; lntr^.suiv:=traina; close(f); clntrains:=lntr; dispose(lntr);
Tests white-box Arc R2 R1 t s r q p o n m l ^lntr^.suiv:=traina ^lntr^.suiv^.suiv=nil
k j i h g f e d c b a eoln(f) eoln(f) eoln(f) eoln(f)
Procédure 62 : test black-box Rappel du code : procedure mtrain(t:ntrain;n:nliaison;s:boolean;lh:lpassages;var lt:ltrains;var li:lliaison); {Pré: la liaison existe dans la liste de liaisons, le train existe dans la liaison Post: le train de nom t sur la liaison de nom n est modifié selon les temps de passage décrits en lh, les fichiers trains.txt et liaisons.txt sont fermés} var f:text; while(li^.l.nom<>n) do li:=li^.suiv; if s then end else while(liaison_temp.naturel.entete^.nom<>t)do {Inv: les éléments déjà lus ont un champ «nom» différent de 't' But: le dernier élément lu a un champ «nom» égal à 't'} liaison_temp.naturel.entete:=liaison_temp.naturel.entete^.suiv; liaison_temp.naturel.ligne:=liaison_temp.naturel.ligne^.suiv; liaison_temp.naturel.ligne^.passage:=lh; while(liaison_temp.inverse.entete^.nom<>t)do {Inv: les éléments déjà lus ont un champ «nom» différent de 't' But: le dernier élément lu a un champ «nom» égal à 't'} liaison_temp.inverse.entete:=liaison_temp.naturel.entete^.suiv; liaison_temp.inverse.ligne:=liaison_temp.naturel.ligne^.suiv; liaison_temp.inverse.ligne^.passage:=lh; assign(f,'liaisons.txt');
reset(f) writeln(f,('liaison', li^.l.naturel.entete^.nom, li^.l.inverse.entete^.nom)); writeln(f,'1'); while(li^.l.naturel.entete^.suiv<>nil) do {Inv: tant que l'élément suivant l'élement traité existe, on écrit le nom du train de l'élément traité sur la même ligne du fichier f But: tous les noms de trains de la liaison ont été écrits sur une même ligne du fichier f} write(f,(li^.l.naturel.entete^.nom,' ')); li^.l.naturel.entete:=li^.l.naturel.entete^.suiv; while(li^.l.naturel.ligne^.suiv<>nil)do {Inv: tant que l'élément suivant l'élement traité existe, on écrit le nom de la gare de l'élément traité dans le fichier f But: toutes noms de gare des trains de la liaison ont été écrits dans le fichier f} write(f,li^.l.naturel.ligne^.nomgare); while(li^.l.naturel.ligne^.passage^.suiv<>nil) do {Inv: tant que l'élément suivant l'élement traité existe, on écrit l'heure de passage de l'élément traité sur la même ligne du fichier f But: toutes les heures de passage des trains de la liaison ont été écrits sur une même ligne du fichier f} write(f,(li^.l.naturel.ligne^.passage' ')); li^.l.naturel.ligne^.passage:=li^.l.naturel.ligne^.passage^.suiv; li^.l.naturel.ligne^:=li^.l.naturel.ligne^.suiv; writeln(f); writeln(f,'0'); while(li^.l.inverse.entete^.suiv<>nil) do {Inv: tant que l'élément suivant l'élement traité existe, on écrit le nom du train de l'élément traité sur la même ligne du fichier f But: tous les noms de trains de la liaison ont été écrits sur une même ligne du fichier f} write(f,(li^.l.inverse.entete^.nom,' ')); li^.l.inverse.entete:=li^.l.inverse.entete^.suiv; while(li^.l.inverse.ligne^.suiv<>nil)do
{Inv: tant que l'élément suivant l'élement traité existe, on écrit le nom de la gare de l'élément traité dans le fichier f But: toutes noms de gare des trains de la liaison ont été écrits dans le fichier f} write(f,li^.l.inverse.ligne^.nomgare); while(li^.l.inverse.ligne^.passage^.suiv<>nil) do {Inv: tant que l'élément suivant l'élement traité existe, on écrit l'heure de passage de l'élément traité sur la même ligne du fichier f But: toutes les heures de passage des trains de la liaison ont été écrits sur une même ligne du fichier f} write(f,(li^.l.inverse.ligne^.passage' ')); li^.l.inverse.ligne^.passage:=li^.l.inverse.ligne^.passage^.suiv; li^.l.inverse.ligne^:=li^.l.inverse.ligne^.suiv; writeln(f); close(f); assign(f,'trains.txt'); reset(f) while(lt^.suiv<>nil) do {Inv: le fichier trains.txt contient le nom des trains déjà traités ainsi que leurs liaisons et le sens de chacune de celles-ci But: le fichier trains.txt compte le nom de tous les trains ainsi que leurs liaisons et le sens de chacune de celles-ci} write(f,(lt^.train^.nom,' ')); while (lt^.train^.liaison^.suiv<>nil) do {Inv: la ligne en cours de traitement compte le nom des liaisons du train déjà traitées ainsi que leur sens But: la ligne traitée compte le nom de toutes les liaisons du train que leur sens} write(f,(lt^.train^.liaison^.nom,' ') if(lt^.train^.liaison^.sens) then write (f,'1') else write (f,'0'); lt^.train^.liaison.suiv:=lt^.train^.liaison^.suiv; writeln(f); lt:=lt^.suiv; close(f);
Jeux de tests : 1 jeu correspondant au train de nom n 1 jeu correspondant aux temps de passage décrits en lh suivant le sens s 1 jeu correspondant aux listes de trains lt 1 jeu correspondant à la liste des liaisons li 1 jeu correspondant à la mise à jour du fichier trains.txt 1 jeu correspondant à la mise à jour du fichier liaisons.txt 1 jeux correspondant à la fermeture du fichier trains.txt 1 jeux correspondant à la fermeture du fichier liaisons.txt