Transformées opérationnelles
La notion de transformée opérationnelle désigne une technique mobilisée dans le domaine des travaux coopératifs assistés par ordinateur pour développer des systèmes collaboratifs, distribués et supportant l'édition synchrone. Elle a été initialement définie par Ellis et Gibbs (1989[1]), implémentée et testée au sein du logiciel GROVE.
Les systèmes d'édition synchrones s'appuient sur une architecture distribuée. Un système G, noté <S, O> y est défini par un certain nombre de sites S et un ensemble d'opérateurs O. Un site correspond à un programme utilisé par un utilisateur relié aux autres à travers un réseau de communication. Les opérateurs O définissent l'ensemble des actions réalisables dans l'éditeur (par exemple pour un éditeur de texte : insertion, suppression ou substitution d'un caractère).
Une opération correspond à un opérateur et ses paramètres. Par exemple, l'insertion d'un caractère est une opération mobilisant l'opérateur insertion, la lettre insérée et la position du caractère (comme par exemple : ligne 22, colonne 12). Un site peut soit : générer des opérations suite aux actions de l'utilisateur et envoyer ces opérations aux autres sites ; réceptionner une opération d'un autre site et l’exécuter localement. Chaque site dispose ainsi d'une file d'opérations ordonnancées en fonction de la date de leur génération.
Ellis et Gibbs définissent un système au repos lorsque toutes les opérations générées ont été exécutées sur tous les sites (« A groupware session is quiescent iff all generated operations have been executed at all sites, that is, there are no requests in transit or waiting to be executed by a site process. »
(ibid.[1], p. 402)). Une opération est non conflictuelle si elle est réalisée sur un site ayant exécuté toutes les opérations générées. À l'inverse, une opération sera conflictuelle si certaines opérations générées sur un site distant n'ont pas encore été exécutées sur le site local au moment de leur génération. La figure suivante illustre une suite d'opérations non conflictuelles sur deux sites (gauche) et la même suite conflictuelle (à droite).
![](../res/OT_overlapOrNot.png)
La notion de transformée opérationnelle désigne la technique de transformation des opérations afin de permettre la résolution des situations conflictuelles. Par exemple, soit un système composé de deux sites permettant l'édition synchrone de texte. À t0, les deux sites affichent la suite de caractères « abc »
. Au même moment t1, S1 génère une opération O1 de substitution de la colonne 2 par la lettre d (donc « abc »
devient « abd »
en numérotant la première colonne 0) et S2 génère une opération O2 de suppression du caractère situé à la colonne 0 (donc « abc »
devient « bc »
). À la réception de la requête r1, le système S2 effectuera une transformation de l'opération O1 afin de prendre en compte l'opération O2 déjà générée et exécutée. Dans le cas présent, le numéro de la colonne (2) doit prendre en compte la suppression de la première colonne et être transformé en 1. L’exécution de l'opération O1 avant l'opération O2 n'a en revanche aucune incidence sur le site S1 puisque la colonne 0 désigne toujours la même ressource (la lettre a). Une fois la transformation effectuée par S2 et le système revenu dans une situation de repos, les deux sites affichent la chaîne de caractères « bd »
.
![](../res/OT.png)
Le système de transformées opérationnelles a été considérablement amendé et retravaillé depuis la proposition originale de Ellis et Gibbs jusqu'à connaître des usages industriels poussés au sein des logiciels Google Documents ou Google Wave (Wang, 2010[2]).