Proposer un sujet pour valider la bonne compréhension du TDD à des étudiants qui vont composer sur papier n’est pas évident. Dans le dernier sujet de DS que nous avons élaboré (mes collègues et moi même) il y avait cet exercice sur 5 points.
Le sujet
Pour faire apparaître les possibilités de navigation dans un long texte, on peut utiliser les notions de première page, page précédente, page courante, page suivante, et dernière page. Une proposition d’affichage de ces options de manière concise est la « pagination seven » qui utilise au plus 7 positions. Pour des petits documents (7 pages ou moins), on affiche tous les numéros de pages :
1 (2) 3 4 5
indiquant qu’on est sur la page 2 et qu’on peut accéder (par clic) aux pages de 1 à 5
Si on est sur une page quelconque d’un document long (plus de 7 pages), on met des ellipses :
1 ... 4 (5) 6 ... 42
indiquant qu’on est sur la page 5 et qu’on peut accéder à la première page, la dernière (p. 42), et les pages précédente et suivante de la courante.
Si on est au début ou à la fin d’un document long, on ne met qu’une ellipse (toujours avec 7 éléments en comptant l’ellipse) :
1 ... 38 (39) 40 41 42
indiquant qu’on est sur la page 39 d’un document de 42 pages.
Étant donné une fonction String page7(int courante, int total) qui prend en paramètre le numéro de page courant et le nombre de pages total et qui retourne la string représentant la « pagination seven » correspondante, rédigez et ordonnez les tests que vous feriez dans une approche TDD. Pour chaque test, donnez l’intention de code qu’il fait émerger.
Une solution
Voilà ce que je m’attendait à avoir comme proposition de solution :
Entrée | Affichage attendu | Intention de code |
---|---|---|
page7(1,1) | (1) | Traitement minimum, une seule page |
page7(2,2) | 1 (2) | Afficher différemment la page courante, premier if |
page7(1,2) | (1) 2 | le cas précédent était probablement codé en dure, maintenant on doit avoir un vrai if |
page7(5,5) | 1 2 3 4 (5) | plusieurs pages à gauche, introduction d’une boucle |
page7(1,7) | (1) 2 3 4 5 6 7 | plusieurs pages à droite pour vérifier que la boucle mache bien |
page7(4,7) | 1 2 3 (4) 5 6 7 | vérifier que ça fonctionne avec les boucles avant et après la page courante |
page7(10,13) | 1 … 9 (10) 11 12 13 | Ellipse à gauche, introduction d’une nouvelle boucle |
page7(12,13) | 1 … 9 10 11 (12) 13 | Ellipse à gauche et maintient de 7 éléments, il faut probablement ajouter une boucle pour revenir sur les chiffres à afficher à gauche |
page7(4,42) | 1 2 3 (4) 5 … 42 | Ellipse à droite, introduction de la condition et/ou de la boucle correspondante |
page7(1,42) | (1) 2 3 4 5 … 42 | Ellipse à droite et maintient de 7 éléments, introduction de la même logique que pour l’ellipse à gauche et le maintient des 7 éléments |
page7(7,42) | 1 … 6 (7) 8 … 42 | Double ellipse, il est peut-être préférable d’introduire ce test avant le maintient du nombre d’éléments |
Merci d'avoir pris le temps de lire ce texte. Vous pouvez soutenir l'écriture de ces billets et la réalisation des livecoding par de nombreux moyens. Mais le plus beau moyen de me remercier est de simplement partager ce texte autour de vous.
Sauf mention contraire, tout le contenu de ce site est sous licence