Précédent Index Suivant

2  Partie Unix de l'examen

  Important
Plusieurs commandes/fonctions Bourne-shell sont à développer. On veillera particulièrement à détailler pour chacune des commandes un algorithme avant de donner le code Bourne-shell lui-même. La notation sera répartie entre ces deux composantes de vos réponses.

  Test de la commande ecrivain

Comment tester qu'un programme écrit pour la commande ecrivain ci-dessus est valide ? Cette commande produit du non-sens qu'il est difficile d'analyser. De plus, le résultat est aléatoire et différent à chaque fois.

Un premier ensemble de tests peut vérifier que pour les cinq textes en entrée suivants (un texte par ligne), le résultat est identique à l'entrée :
(fichier vide)
a
a b
a b c
a b c d

Un second ensemble de tests peut vérifier la propriété de conservation de l'algorithme. Pour des préfixes de longueur 2, tous les mots, couples et triplets du résultat doivent appartenir au texte original.

Un troisième ensemble de tests peut vérifier les propriétés statistiques du résultat. Par exemple soit l'entrée :
a b c a b c ... a b c a b d a b c ...
telle que le nombre de a b c est dix fois supérieur au nombre de a b d. Cette propriété statistique de l'entrée doit se retrouver dans le résultat produit.

  La commande test-ecrivain

Nous allons développer une commande test-ecrivain pour exécuter ces tests. Sa syntaxe est la suivante :
test-ecrivain   [-l level]   [infile]
le paramètre level correspond à la série de tests que nous voulons effectuer parmi les trois familles décrites ci-dessus (valeur possible : 1 à 3 caractères parmi 1, 2, 3 ; valeur par défaut : 123). Pour le niveau 2 de test, le fichier infile est utilisé en entrée de la commande ecrivain.

Notre programme shell sera constitué des trois fonctions shell test1, test2, et test3 qui réalisent les tests du niveau correspondant. Seule la fonction test2 accepte un paramètre qui est le nom du fichier qui servira d'entrée pour la commande ecrivain.

  Questions -- partie Unix


Question 5   La première série de tests demande de vérifier l'égalité de deux fichiers (le fichier original et le fichier produit par ecrivain). Cette égalité s'entend au espaces et retour à la ligne près. Pour ce faire, nous développons une fonction Bourne-shell normalize qui produit sur la sortie standard le texte lu sur l'entrée standard à raison d'un mot par ligne, sans espace ni tabulation.
Question 1   Développez la fonction Bourne-shell normalize.

Question 2   Développez la fonction Bourne-shell test1 qui travaille sur les cinq textes donnés en exemple.

Question 6   La mise en oeuvre du second test nécessite d'identifier l'ensemble des triplets de mots d'un texte donné. Ce sera le rôle de la fonction Bourne-shell triple. Elle produit sur la sortie standard l'ensemble des triplets de mots du texte lu sur l'entrée standard. Ces triplets sont produits à raison d'un par ligne. Sur une ligne, les mots sont séparés par un espace unique.
Question 1   Développez la fonction Bourne-shell triple.

Question 2   Développez la fonction Bourne-shell test2.

Question 7   Pour les besoins du troisième test, nous utilisons une fonction Bourne-shell generate qui génère aléatoirement un texte composé de a b c et de a b d tel que le nombre de a b c est dix fois supérieur au nombre de a b d.
Question 1   Développez la fonction generate. On fixe arbitrairement la longueur du texte à 3000 mots (c'est-à-dire 1000 triplets a b c ou a b d).

Question 2   Développez la fonction Bourne-shell test3 qui vérifie que le résultat produit par ecrivain sur le texte de generate [Remarquez que ce texte ne comporte que des a b c et des a b d. Compter les a b c revient donc à compter le c ; de même pour les a b d et d.] comporte entre 88% et 92% de a b c pour 8% à 12% de a b d.

Précédent Index Suivant