• Aucun résultat trouvé

6. CONCRETISATION ET MISE EN ŒUVRE D'UN ECLR

6.1. P ROCESSUS D ’ ANALYSE DE L ’ECLR

6.1.2. Analyse d’une instruction

L’analyse d’une instruction consiste à vérifier la validité et la logique de l’action de l’utilisateur. Une illustration d’un problème de logique sur une action de l’auteur de niveau 1 est la création d’un bouton qui n’a pas de nom dans une fenêtre. Cette exemple montre que l’analyse peut parfois aider à l’anticipation des actions de l’utilisateur car s’il crée un bouton, c’est qu’il a l’intention de faire appel à celui-ci et attribuer aucun nom pour l’identifier est illogique.

Chapitre 6 ————————————————————————————————— EDL Cas de dépendance Cas d'indépendance EDG ESG ESL BdT Statiques Liste des exceptions pour instructions locales

Liste des exceptions pour instructions

globales

Liste des exceptions pour instructions locals

Liste des exceptions pour instructions

globales

BdT Dynamiques Figure 6-2 : Les BdT constituant la liste des exceptions

Nous reposons notre analyse sur deux dimensions :

• Niveau local pour vérifier la validité de l’instruction par rapport à la liste des exceptions statiques et dynamiques locaux.

• Niveau global pour vérifier la cohérence de l’instruction par rapport aux instructions précédentes et par rapport à la liste des exceptions statiques et dynamiques globaux.

Nous obtenons ainsi les vues verticales et horizontales décrites dans le chapitre 3.2 pour analyser chaque erreur éventuelle.

6.1.2.1.Analyse locale d’une instruction

Pendant cette phase, l’ECLR vérifie si le résultat de l’action de l’auteur de niveau 1 existe dans les listes statiques et dynamiques des exceptions locales. Au cas où il y analogie entre ce résultat et l’une des exceptions, l’ECLR cherche à travers la fonction Assistance un moyen de le corriger et émet un message sur la correction faite ou à défaut un message qui aide et oriente l’auteur de niveau 1 grâce à la mémorisation des actions correctrices faites précédemment. Sinon, l’ECLR mémorise grâce à la fonction Apprentissage-correction, les actions associées à l’erreur à travers la fonction Apprentissage-erreur et affiche un message détaillant la nouvelle erreur. Le processus est décrit de la manière suivante :

proc Analyse-locale (résultat) { if ($etatAS == 1) {

foreach exception $ESL && foreach exception $EDL if (compare $exception $résultat == true) {

Assistance $exception $résultat

puts stdout « Message erreur + correction» if (appliquer-correction == false)

—————————————————————————— Concrétisation d’un ECLR

Apprentissage-correction } ;

else {

puts stdout « Message erreur » Apprentissage-erreur Apprentissage-correction } ; } ; Analyse-globale $résultat } ; }

Chaque action correctrice faite par l’auteur de niveau 1 suite au message de l’ECLR est mémorisée dans la BdT interne. Au cas où la même erreur se reproduit, l’outil rappelle dans son message en plus de la description de l’erreur détectée la correction associée. Comme nous l’avons précisé dans les chapitres précédents, l’auteur de niveau 1 est maître d’œuvre de son logiciel ce qui signifie qu’il peut appliquer ce qui est décrit dans le message ou adopter une autre action correctrice. Dans ce dernier cas, l’ECLR mémorise de nouveau cette action en plus de l’ancienne. Ainsi, la base d’apprentissage évolue et enrichit les choix proposés par l’ECLR. Au niveau opérationnel, cette partie d’analyse de notre ECLR se présente sous la forme suivante :

Chapitre 6 —————————————————————————————————

Analyse de l'intruction : identification d'un problème Violation d'une règle statique (gestion des contrastes fg / bg) => affichage de la zone commentaire correspondante à l'exception

Figure 6-3 : Application de la partie analyse locale d’une instruction

6.1.2.2.Suivi relationnel des instructions

Pour effectuer un contrôle de cohérence d’une nouvelle instruction par rapport aux anciennes instructions, il est primordial de déterminer les relations de dépendance et d’indépendance entre elles. Cela permet de valider l’usage des exceptions par rapport au contexte mais également de vérifier la cohérence de l’environnement contextuel. Ces relations sont définies de la manière suivante :

Relation de dépendance entre les instructions : •

Soient Ix et Iy deux instructions, et Rd la relation de dépendance entre les instructions.

Ix Rd Iy signifie que l’instruction Ix est fonctionnellement dépendante de Iy. En d’autres termes,

les résultats en sortie de l’instruction Ix sont des entrées ou des ressources requises pour

l’instruction Iy.

• Relation d’indépendance entre les instructions :

—————————————————————————— Concrétisation d’un ECLR Ix Ri Iy signifie que l’instruction Ix est fonctionnellement indépendante de Iy. En d’autres

termes, les résultats en sortie de l’instruction Ix n’ont aucune relation ni influence sur le

fonctionnement de l’instruction Iy. Il existe alors un paramètre commun aux deux instructions.

Voici un exemple de cas de dépendance :

set x 12 set y x

Pour que y existe, il faut que x ait une valeur auparavant.

Une fois les relations de dépendance vérifiées, il faut procéder aux contrôles des exceptions globales.

proc Analyse-globale (résultat) { foreach instruction $liste-instruction { if (Ix Rd Iy)

foreach exception-dépendante $ESG && foreach exception-dépendante $EDG if (compare $exception-dépendante $résultat == true) {

Assistance $exception-dépendance $résultat puts stdout « Message erreur + correction » if (appliquer-correction == false)

Apprentissage-correction } ;

else {

puts stdout « Message erreur » Apprentissage-erreur

Apprentissage-correction } ;

if (Ix Ri Iy)

foreach exception-indépendante $ESG && foreach exception-indépendante $EDG if (compare $exception-indépendante $résultat == true) {

Assistance $exception-indépendance $résultat puts stdout « Message erreur + correction » if (appliquer-correction == false)

Apprentissage-correction } ;

else {

puts stdout « Message erreur » Apprentissage-erreur

Apprentissage-correction } ;

} ; } ;

Chapitre 6 ————————————————————————————————— Le script de la fonction Analyse-globale ci-dessus peut être illustré par l’exemple qui suit. Soient les deux exceptions suivantes :

• Exception-1 : Il est interdit de créer deux fenêtres qui se superposent.

• Exception-2 : Une sous-fenêtre doit être affichée dans le périmètre de la fenêtre mère. Nous remarquons que ces deux exceptions sont contradictoires et dans les deux cas, la création d’une seconde fenêtre entraînera une erreur. En y associant des relations de dépendance aux exceptions pour définir le contexte d’application, une seule exception est applicable. La liste ci-dessus devient alors :

• Exception-1 applicable si deux instructions sont indépendantes -> Exception- indépendance-1

• Exception-2 applicable si deux instructions sont dépendantes. La seconde fenêtre est en relation directe et n’existe qu’à travers la première.

Ainsi, l’ambiguïté est levée et le contexte reste cohérent.