Programmation d'une expérience contrôlée

Le but de ce TP est de coder une expérience contrôlée pour la technique d'interaction développée dans le TP précédent. Vous devez donc avoir terminé ce TP avant d'entamer celui-ci. L'expérience se déroulera comme suit : chaque participant testera les 3 techniques d'interaction : les 2 variates de pointage qui sélectionnent la cible la plus proche (Bubble et Rope), et la technique classique pour laquelle le curseur doit être situé au dessus de la cible pour pouvoir la sélectionner. Pour chaque technique il faudra lancer l'application, renseigner le numéro d'utilisateur et choisir la technique testée.

Boîte de dialogue de setup

Écrivez une classe ExpSetup, qui dérive de QDialog, qui servira de configuration à l'expérience. Vous y ajouterez de quoi spécifier un numéro d'utilisateur, une technique, un densité (nombre de cibles affichées), une taille de cibles et un nombre de répétitions.

Nous alons utiliser 3 densités de cibles : 30, 60 et 90 cibles, ainsi que 3 tailles de cibles : 6, 12 et 18 pixels. Le nombre de répétitions correspond au nombre de fois qu'une combinaison de facteurs {technique,densité (nombre de cibles affichées),taille des cibles} est repetée et doit être strictement supérieur à 1. Je vous conseille d'utiliser des objets de type QComboBox pour ne pas avoir à tout saisir à la main à chaque fois.

Enfin, ajoutez un bouton de validation. Vous utiliserez des layouts pour placer vos composants. Le layout d'un QWidget peut être spécifié avec la méthode setLayout. Dans les layouts on peut ajouter des Widgets, des Layouts et des spacers. Utilisez des QVBoxLayout et des QHBoxLayout.

Créez cette dialog dans le constructeur de votre Mainwindow. Connectez ensuite le slot clicked du bouton de validation à une méthode qui récupèrera les valeurs et lancera l'expérience.

Génération aléatoire des cibles

Les cibles seront générées aléatoirement, mais on souhaite que tous les participants travaillent sur les mêmes cibles pour éviter un biais selon l'utilisateur. Pour cela il faut générer des fichiers contenant des listes de cibles. Écrivez un nouveau programme qui s'exécutera en ligne de commande. Il prendra en paramètre un nombre de cibles, une taille de cibles et un espacement minimal entre les cibles. ette méthode va donc générer des cibles aléatoirement et s'assurer que les cibles ne sont pas trop proches. Enregistrez ces cibles dans un fichier CSV.

Parmi ces cibles, on souhaite aussi que les cibles à sélectionner soient les mêmes pour tous les utilisateurs, afin de ne pas avoir de biais. Créez un fichier CSV contenant une séquence de 15 cibles à sélectionner. Attention : chaque cible ne peut être sélectionnée qu'une fois. Vous pouvez donc générer par exemple une permutation des nombres entre 1 et le nombre de cibles. Les deux fichiers sont générés en même temps.

Le gestionnaire d'expérience

Créez une classe XPManager, qui va gérer les paramètres et l'exécution de l'expérience. Le constructeur de cette classe prendra en paramètre les valeurs récupérées dans la boîte de dialogue

Créez une liste pour les facteurs taille et densité de l'expérience, et effectuez une permutation aléatoire.

Initialisez la valeur courante de l'essai, caractérisée par une taille, une densité, le numéro de répétition, et le numéro de la cible à selectionner entre 1 et 15.

Modifiez l'action de la sélection d'une cible afin d'avancer l'expérience au prochain essai. Créez une ligne de log précisant le numéro d'utilisateur, la technique, la densité, la taille, le numéro de répétition, le numéro de cible, un timestamp et le nombre d'erreurs de sélection qu'a fait l'utilisateur avant de selectionner correctement la cible (0 si aucune erreur). Quand la condition change, pensez à charger le bon fichier de cibles. Fermez l'application une fois le dernier essai sélectionné.

Déroulement de l'expérience contrôlée

Une fois votre application prête, vous devez faire passer votre expérince à des utilisateurs.