Exemple introductif

Soient les deux fichiers texte suivants (exemple tiré du manuel d'administration fonctionnelle de SCENARIclient (4.1)) :

  • v1.txt :

    1
    Pour envoyer un message de maintenance aux utilisateurs connectés, sélectionnez le message adapté dans la liste déroulante, puis cliquez sur "Envoyer".
    2
    Les utilisateurs le reçoivent alors dans l'interface de l'application pendant 30 secondes.
    3
    Si, avant la fin du décompte, aucun utilisateur ne s'oppose à l'opération de maintenance, le message "Aucun utilisateur ne s'oppose à l'opération de maintenance" s'affiche.
  • v2.txt :

    1
    Pour envoyer un message de maintenance aux utilisateurs connectés, sélectionnez le message adapté dans la liste déroulante, puis cliquez sur "Envoyer".
    2
    Un décompte de 30 secondes s'enclenche alors dans l'onglet "Administration avancée".
    3
    Les utilisateurs reçoivent le message dans l'interface de l'application.
    4
    Si, avant la fin du décompte, aucun utilisateur ne s'oppose à l'opération de maintenance, le message "Aucun utilisateur ne s'oppose à l'opération de maintenance" s'affiche.

La commande Unix diff (Hunt et MacIlroy), 1976[1]) calcule les différences entre ces deux fichiers en termes de lignes ajoutées (n'existant pas dans v1) et supprimées (n'existant pas dans v2). Le résultat s'affiche de la manière suivante dans le terminal (format unifié) :

1
diff -u v1.txt v2.txt
2
--- v1.txt	2015-09-15 12:22:02.448751522 +0200
3
+++ v2.txt	2015-09-15 12:22:42.352949397 +0200
4
@@ -1,3 +1,4 @@
5
 Pour envoyer un message de maintenance aux utilisateurs connectés, sélectionnez le message adapté dans la liste déroulante, puis cliquez sur "Envoyer".
6
-Les utilisateurs le reçoivent alors dans l'interface de l'application pendant 30 secondes.
7
+Un décompte de 30 secondes s'enclenche alors dans l'onglet "Administration avancée".
8
+Les utilisateurs reçoivent le message dans l'interface de l'application.
9
 Si, avant la fin du décompte, aucun utilisateur ne s'oppose à l'opération de maintenance, le message "Aucun utilisateur ne s'oppose à l'opération de maintenance" s'affiche

Diff orienté lignes

Les deux figures ci-dessous sont des exemples de formes différentielles pouvant être produites à partir du résultat de diff. Les lignes ajoutées (resp. supprimées) sont colorées en bleu (resp. en gris). Dans la première figure, les deux versions sont "fusionnées" (les lignes sont également barrées ou soulignées pour accentuer l'affichage des différences) tandis que dans la seconde, elle sont affichées face à face.

Affichage "fusionné" des différences
Affichage en "vis-à-vis" des différences

Diff orienté caractères

En analysant le contenu, on remarque que la troisième ligne de v2 est en fait une évolution de la deuxième ligne de v1, dans laquelle les chaînes "le", "alors" et "pendant 30 secondes" ont été supprimées, et la chaîne "le message" a été ajoutée. Les deux formes différentielles précédentes créent donc une certaine redondance pour les parties communes de ces deux lignes. Pour améliorer ces formes, la granularité d'expression des différences doit pouvoir être plus fine que la ligne, c'est-à-dire au niveau du caractère, telle que dans la forme ci-dessous :

Affichage des différences au niveau des caractères

En revanche, l'indication des caractères ajoutés et supprimés au niveau d'une ligne ont un impact sur sa lisibilité. En effet, la ligne acquiert plusieurs niveaux de lecture et ne peut plus se lire tout à fait linéairement. La deuxième forme ci-dessous permet d'éviter cette difficulté, en dupliquant la ligne sur deux colonnes, avec en sur-ajout les caractères propres à chaque version (ce qui minore la redondance). Le fond coloré indique explicitement que cette ligne a été modifiée :

Affichage en "vis-à-vis" de différences au niveau des caractères

Autres visualisations

Si les formes différentielles précédentes sont les plus courantes, il existe d'autres façons de visualiser les différences entre versions. Citons par exemple les travaux de Chevalier et al. (2010[2]), qui proposent l'utilisation de transitions animées pour naviguer dans l'historique d'un document (une vidéo de démonstration de leur logiciel Diffamation est accessible à l'adresse : https://www.youtube.com/watch?v=17lz5nt5_jg). Cette approche du replay est une alternative intéressante aux visualisations statiques de diff. Elle peut en effet sembler plus naturelle et confortable pour l'utilisateur en phase exploratoire, l'animation donnant l'impression de reproduire en temps réel les gestes d'écriture ayant conduit aux modifications. Cependant, l'animation ne nous semble pas adaptée pour un contexte de relecture, qui requiert la synopsis spatiale du texte et des modifications.