3.4 Chasse aux bogues du labyrinthe, un jeu dont vous êtes le héros

Transcription

3.4 Chasse aux bogues du labyrinthe, un jeu dont vous êtes le héros
Chasse aux bogues du labyrinthe, un jeu dont vous êtes le héros
3.4 Chasse aux bogues du labyrinthe, un jeu dont vous êtes
le héros
On s’intéresse ici à réaliser un débogage d’un morceau de programme travaillant sur des labyrinthes.
Notre programme travaille sur des fichiers texte au format ascii décrivant différents labyrinthes.
Dans un soucis d’efficacité, les étudiants en charge de ce projet ont commencé par écrire une
procédure permettant la visualisation d’un labyrinthe ainsi qu’une procédure de chargement et
d’analyse d’un fichier d’entrée.
Avant d’aller plus loin et de réaliser des fonctions plus complexes, nos étudiants décident de réaliser
une première passe de correction de bogues. Cette étape leur permettra ainsi de disposer d’une
base solide avant d’attaquer des fonctions plus complexes.
Note: Il est possible de vous aider lors d’une étape de déboguage avec l’outil adatracex (
http://ada-tl1.googlecode.com/files/adatracex). Celui-ci s’utilise en ligne de commande
de la manière suivante: adatracex fichier_executable arguments_fichier_executable. Le programme
’fichier_executable’ est alors lancé avec ses arguments comme avec un simple fichier_executable
arguments_fichier_executable. Adatracex va néanmoins permettre que dans le cas où une exception
provoque l’arrêt du programme, vous disposiez d’un nombre plus important d’informations : la
totalité de la pile d’appels est alors affichée.
Votre objectif consiste donc à déboguer le code
Grenoble INP
1/3
with Ada.Text_Io;
use Ada.Text_Io;
with Ada.Command_line; use Ada.Command_Line;
procedure Sortie is
type Cellule is (entree, sortie, couloir, mur);
type TableauCell is array (0..30, 0..30) of Cellule;
type Labyrinthe is record
Hauteur : Natural;
Largeur : Natural;
Tableau : TableauCell;
end record;
Laby : Labyrinthe;
function Lecture_Labyrinthe(Nom_Fichier : String) return Labyrinthe is
Fichier : File_Type;
Ligne : String(1..30);
Laby : Labyrinthe;
Num_Ligne : Positive := 1;
Lu : Natural;
begin
Open(Fichier, In_File, Nom_Fichier);
while not End_Of_File(Fichier) loop
Get_Line(Fichier, Ligne, Lu);
for I in 0..Lu loop
if Ligne(I) = 'E' then
Laby.Tableau(Num_Ligne, I) := entree;
elsif Ligne(I) = 'S' then
Laby.Tableau(Num_Ligne, I) := sortie;
elsif Ligne(I) = ' ' then
Laby.Tableau(Num_Ligne, I) := couloir;
elsif Ligne(I) = '#' then
Laby.Tableau(Num_Ligne, I) := mur;
end if;
end loop;
Num_Ligne := Num_Ligne + 1;
end loop;
Laby.Largeur := Lu;
Laby.Hauteur := Num_Ligne;
return Laby;
end Lecture_Labyrinthe;
procedure Afficher_Labyrinthe(Laby : Labyrinthe) is
begin
for I in 0 .. Laby.Largeur loop
for J in 0 .. Laby.Hauteur loop
case Laby.Tableau(I, J) is
when entree => Put('E');
when sortie => Put('S');
when mur => Put('#');
when others => Put(' ');
end case;
end loop;
New_Line;
end loop;
end Afficher_Labyrinthe;
begin
for Arg in 1..Argument_Count loop
Laby := Lecture_Labyrinthe("/home/perms/wagnerf/" & Argument(Arg));
--Calculer_Chemin
Afficher_Labyrinthe(Laby);
New_Line;
end loop;
end Sortie;
Grenoble INP
2/3
Téléchargement de ce fichier
Une part de la difficulté de cet exercice vient du fait que c’est à vous de trouver des exemples de
fichiers déclenchant les bugs.
Il vous est donc demandé, en plus du déboguage, d’écrire des fichiers de tests permettant de vérifier
le bon fonctionnement du programme sur différentes configurations.
Les fichiers d’entrée sont au format ASCII. Les caractères autorisés sont ’E’, ’S’, ’ ’ et ’#’ où ’E’
désigne l’entrée du labyrinthe, ’S’ la sortie, ’#’ un mur et ’ ’ un morceau de couloir.
On peut ainsi imaginer le fichier suivant:
#######
#E## S#
#
##
#######
Chaque ligne d’une entrée contient une ligne du labyrinthe. Toutes les lignes ont une taille
inférieure ou égale à 30 caractères. Il est nécessaire d’avoir une entrée et une sortie, et il ne peut y
en avoir qu’une de chaque.
L’affichage d’un labyrinthe contenu dans un fichier ’laby.txt’ est réalisé par un appel à ./sortie
laby.txt.
1. Déboguez le programme fourni et écrivez une base de tests la plus complète possible.
2. Une fois terminé le débogage, téléchargez la base de tests testslaby.tgz. Pour chaque test,
vérifiez que votre programme fonctionne ou que le fichier d’entrée est invalide (deux fichiers
parmi ceux fournis ne respectent pas le format d’entrée). Avez-vous été capable d’éviter tous les
problèmes ? Quelles sont les erreurs dans les fichiers invalides ?
Grenoble INP
3/3

Documents pareils