Systèmes d'aide et d'assistance [1/2]

le 09/09/2010 par Mick Philippon
Tags: Software Engineering

Les systèmes d’informations, quels qu’ils soient, possède une complexité telle qu’il est impossible pour un humain de les appréhender dans leur totalité. Qui peut prétendre maitriser, sans se référer à une aide, son système d’exploitation ? Ou même un traitement de texte ? Ainsi, sont apparus avec ces systèmes des systèmes d’aide.

L’objectif de cet article est de faire un tour d’horizon des différentes technologies utilisées pour construire des systèmes d’aide et d’assistance, afin de permettre de choisir la plus adaptée à ce que vous allez construire demain. La progression se fera en partant des systèmes les plus rustiques (manuel d’utilisation, tutoriel) pour terminer par des technologies d’intelligence artificielle (réseaux neuronaux, raisonnement à partir de cas) en passant par les méthodes probabilistes (réseaux Bayésiens).

Cette série d’articles se concentre sur les systèmes d’aides et d’assistance automatisés, ne nécessitant pas l’intervention d’un professeur, gourou ou tout autre rôle endossable par un humain.

Dans ce premier opus, nous allons voir les systèmes traditionnels que sont les manuels et tutoriaux. Un second article présentera les systèmes d’aide et d’assistance utilisant des technique d’intelligence artificielle.

Le manuel

« Comment marche la commande XX ?

- Tu fais man XX.

- Et comment marche man ?

- Tu fais man man. »

Le manuel d’utilisation est la première méthode d’aide qui vient à l’esprit lorsqu’on crée un système. Héritier de la notion d’encyclopédie universelle, le manuel se veut la référence ultime sur le programme aidé, contenant l’ensemble des informations sur ses fonctionnalités. Qu’il soit papier ou en ligne, le manuel présente cependant de nombreuses limitations, dues à sa nature détachée du programme aidé

Présentation

Un manuel se présente sous la forme d’une liste de fonctionnalités ordonnées (alphabétiquement pour la version papier, par clef d’accès pour la version électronique). L’utilisateur doit effectuer la recherche dans le manuel par ses propres moyens, afin de déterminer quelle de fonctionnalité il a besoin et quelle est sa description.

Figure 1 Liste des fonctionnalités (Excel 2007)

Figure 2 Page de manuel (Excel 2007)

Limitations

Bien que les manuels modernes emportent une fonction de recherche en texte libre, leur principale limitation vient du fait que l’utilisateur doit savoir ce qu’il cherche à faire (ce qui est souvent le cas), mais également savoir mettre en forme dans le cadre du schéma mental du logiciel son objectif. Ainsi, pour garder l’exemple d’Excel, faire un graphique données/temps est l’objectif de l’utilisateur, mais la mise au schéma Excel impose de savoir qu’ils faut mettre les données dans deux colonnes côte à côte, puis sélectionner le graphique en ligne et le retravailler pour indiquer les légendes. Ce simple scénario implique l’utilisation de nombreuses fonctionnalités, qui ne sont pas liées entre elles dans un manuel.

Pour reprendre l’exemple de man (la commande d’aide Unix), il donne accès aux informations concernant une commande. Mais comment l’utilisateur sait quelle commande il doit utiliser ?

Ainsi, l’utilisation du manuel seul est souvent une source de frustration, le temps de recherche étant disproportionné par rapport au résultat attendu.

Les tutoriaux

Une première réponse à cette frustration est de former l’utilisateur. Très prisés dans le monde des jeux vidéo, les tutoriaux sont des mini-formations, qui mettent en scène un contexte réduit du programme aidé pour souligner les fonctionnalités utiles dans différentes situations.

Présentation

Le tutorial met en scène un élément du programme aidé. Il se concentre sur un petit nombre de fonctionnalités, réunies au sein d’un scénario construit et dont la source est à rechercher dans des problématiques réelles. La simplification nécessaire pour arriver à un tutoriel rend cependant ce dernier déconnecté de la réalité.

Dans un tutoriel, l’utilisateur est invité à faire, à réaliser la tâche demandée, en étant guidé par un assistant qui lui indique les étapes à suivre. Le degré de liberté laissé à l’utilisateur dépend de l’objectif. Ainsi, sur des tâches extrêmement simples (savoir bouger la caméra dans un jeu, par exemple), le tutoriel sera extrêmement didactique, ne laissant aucune place à l’improvisation. Les tâches effectuées sont en effet amenées à devenir routinières et l’utilisateur aura à les pratiquer sans cesse. Nul besoin dans ce cas d’ancrer trop profondément dans sa mémoire les actions à réaliser, puisqu’il le fera lui-même par sa pratique régulière.

Dans d’autres cas (utiliser les Spectres pour infiltrer une base ennemie, dans Starcraft II), la tâche ne sera réalisée que de temps à autres. Il convient donc dans ce cas de fournir à l’utilisateur un contexte mémoriel complet qui lui permette de se remémorer les fonctionnalités associées à cette tâche. Dans ce cas, le tutoriel sera beaucoup plus souple, laissant la place aux essais/erreurs, avec un simple guidage général de l’utilisateur vers des objectifs, en se contentant de fournir à l’utilisateur la liste des fonctionnalités utilisables dans ce cas.

Limitations

Puisqu’il tronque volontairement le logiciel aidé pour mettre l’utilisateur dans une relation de confiance, le tutoriel ne peut aborder de scénarios trop complexes. Il se limite souvent aux fonctionnalités de base et ne met en relation que celles qui le sont de manière évidentes. Ainsi, le tutoriel peut qualifier un débutant sur un logiciel et le mettre à l’aise, mais il ne peut faire passer l’utilisateur au statut d’expert.

Comment construire un tutoriel

Nous allons nous intéresser ici à la forme du tutoriel, en supposant que le fond (le scénario) est déjà défini. Ce scénario est choisi par le créateur du logiciel aidé qui veut mettre en avant certaines fonctionnalités de son logiciel.

Comme souligné précédemment, le niveau de rétention de l’utilisateur varie avec la forme, comme le souligne la pyramide d’apprentissage.

Figure 3 Pyramide de l'apprentissage

Il convient donc de positionner le tutoriel dans cette pyramide. Pour les fonctionnalités de base, qui vont être utilisées quotidiennement, il est possible de se cantonner à la partie supérieure (à travers une vidéo de démonstration, par exemple). En effet, l’utilisateur doit alors simplement être informé de l’existence des fonctionnalités, puisqu’il les maitrisera en faisant, arrivant naturellement au stade de l’apprentissage par la pratique. Le rôle du tutoriel est donc simplement dans ce cas de donner les clefs mémorielles qui vont permettre à l’utilisateur de connecter son besoin avec les fonctionnalités présentées.

Pour des fonctionnalités plus avancées, cependant, on ne peut compter sur la pratique de l’utilisateur pour réaliser l’apprentissage. Le tutoriel doit alors se rapprocher de la base de la pyramide. Il convient donc de recréer au sein d’un tutoriel le couple clef mémorielle/apprentissage qu’on retrouve naturellement sur les fonctions de base. Le tutoriel contiendra alors non seulement l’indication des fonctionnalités disponibles, mais également un contexte complet permettant leur mise en œuvre, un système de vérification des résultats et de suggestions d’améliorations afin d’amener l’utilisateur à un niveau de maîtrise suffisant pour que, lorsqu’il rencontre une situation similaire, il sache, au mieux comment faire, au pire retrouver le tutoriel.

L’aide contextuelle

Retrouver le tutoriel, retrouver une commande, en fonction du contexte courant, c’est la promesse apportée par l’aide contextuelle, qui, reprenant les principes du manuel, amène l’utilisateur sur la section de celui-ci la plus pertinente en fonction du contexte.

Présentation

L’aide contextuelle n’est qu’un ajout aux mécanismes de manuel et de tutoriel. Elle donne en effet des clefs d’accès à ceux-ci, qui ne sont plus fonction de la connaissance de l’utilisateur, mais de son positionnement au sein du logiciel aidé.

Tout se base donc sur l’analyse du contexte courant de l’utilisateur, contexte qui est, dans l’immense majorité des cas, basé sur une analyse statique de l’environnement actuel. Ainsi, dans Visual Studio, l’appui sur la touche F1, qui déclenche l’affichage du manuel en contexte, analyse le mot sur lequel est actuellement placé le curseur, le reste de l’expression courante (pour déterminer, par exemple, s’il faut afficher Object.ToString ou ListBox.ToString) avant de mener l’utilisateur sur la page du manuel la plus appropriée.

Un autre mécanisme possible est de faire une analyse temporelle, se basant sur les actions précédentes de l’utilisateur. Cela permet d’avoir un contexte plus précis, mais cela conduit également à une base de liaison entre contextes et manuel beaucoup plus importante, puisqu’il faut alors prendre en compte l’ensemble des successions possibles d’actions.

Limitations

La principale limitation de l’aide contextuelle vient de son coté figé. En effet, à un contexte donné peut correspondre plusieurs intentions. Ainsi, en C++, si je demande de l’aide sur le message WM_PAINT, cela peut être parce que je veux me souvenir de son fonctionnement, parce que je surcharge le handler de ce message dans une sous classe et veut connaître le fonctionnement de ce handler dans ma classe mère, parce que je sais qu’en demandant de l’aide sur WM_PAINT, je peux me brancher sur les messages d’erreur et ainsi savoir ce que veut dire ce cryptique 0x80007005, etc.

Puisque se basant sur une base figée, l’aide contextuelle ne saura déterminer lequel de ces scénarios est le bon. Ou plutôt, un de ceux-là aura été décrété comme étant  « le meilleur » et sera systématiquement proposé à l’utilisateur. Par ailleurs, on retrouve une des limitations liées au manuel, puisque l’aide contextuelle se base sur l’existant et ne peut prédire que l’utilisateur aura bientôt besoin de la fonctionnalité X dans le cadre de son travail.

Comment construire une aide contextuelle

La construction d’une telle aide revient à déterminer quel contexte va être pris en compte. Une analyse des comportements utilisateurs en situation est pour cela nécessaire, afin de déterminer quel est le delta entre l’expert et le novice. L’objectif est en effet de fournir au novice les clefs lui permettant de répliquer le fonctionnement de l’expert dans le cadre courant.

Il faut donc analyser, dans un contexte donné, quels sont les éléments que l’expert utilise afin de planifier ses actions, puis de prendre en compte ceux que le novice saura utiliser pour se concentrer sur les autres, c’est-à-dire les éléments qui sont des indices pour le système d’aide servant à guider le novice.

Bien entendu, une telle approche signifie plusieurs choses :

  • L’aide contextuelle n’est pas destinée aux experts. Cela est également une caractéristique du manuel et des tutoriels.
  • Il faut pouvoir qualifier à priori les experts. Or, le niveau d’expertise sur un logiciel est parfois difficile à mesurer et nul n’est à l’abri d’avoir adopté des mauvaises pratiques, qui, validées alors par la condition d’expert de leur auteur, vont se répandre en dépit du bon sens.

En résumé

Éprouvés, connus, ces mécanismes d’aide sont pourtant très limités, au point que fleurissent les formations, tutorats et autres renforts faisant appel à des humains. Il existe pourtant des techniques permettant d’obtenir des systèmes d’assistance plus pertinents, que nous verrons dans un second article.