Les chemins qui n'existent pas
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 4 — Discipline de programmation, validation et test
Énoncé
Combien de chemins syntaxiques cette fonction possède-t-elle ? Combien sont faisables ? Qu'en conclut-on sur la couverture des chemins ?
int f(int x) {
int r = 0;
if (x > 10) { r = r + 1; }
if (x < 5) { r = r + 2; }
return r;
}Corrigé
Quatre chemins syntaxiques, trois faisables. Deux conditionnelles en séquence donnent combinaisons ; le balayage de sur en atteint trois :
aucun corps (5 <= x <= 10) : faisable -- ex. x = 7, f(7) = 0
second seul (x < 5) : faisable -- ex. x = 0, f(0) = 2
premier seul (x > 10) : faisable -- ex. x = 20, f(20) = 1
LES DEUX (x > 10 et x < 5) : INFAISABLE
Le quatrième demanderait et : les deux conditions sont incompatibles.
Conclusion sur la couverture des chemins. Le critère se formule toujours « sur les chemins faisables » — c'est la précision du programme officiel, et elle n'est pas décorative. Sans elle, aucun jeu de tests n'atteindrait jamais , et le critère serait inutilisable.
Déterminer la faisabilité d'un chemin est en général indécidable : il n'existe aucun algorithme qui réponde pour tout programme (chapitre chap:decidabilite). C'est pourquoi le programme officiel limite l'exercice « à des exemples simples pour lesquels les cas possibles se décèlent dès la lecture ».
Et avec une boucle, l'affaire empire. Une boucle while engendre une infinité de chemins : zéro tour, un tour, deux tours, … La couverture des chemins devient inatteignable par principe, et non plus par difficulté. Le compromis usuel consiste à couvrir , et « au moins » tours — le problème 4.5 montre pourquoi le troisième cas est indispensable.
| Critère | Force | Atteignable ? |
|---|---|---|
| sommets | la plus faible | oui |
| arcs | implique les sommets | oui |
| chemins sans cycle | implique les arcs | sur les chemins faisables |
| chemins avec cycle | la plus forte | non, en général |
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.