Adloun

informatique (MP2I/MPI) · Chapitre 4 · Exercice de TD

Les chemins qui n'existent pas

Discipline de programmation, validation et test · niveau 2

É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èreForceAtteignable ?
sommetsla plus faibleoui
arcsimplique les sommetsoui
chemins sans cycleimplique les arcssur les chemins faisables
chemins avec cyclela plus fortenon, en général

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre