# Tango (Beschreibungssprache)

Tango ist eine Beschreibungssprache zur Beschreibung von Software und ihrer Benutzeroberfläche aus Benutzersicht. Beschrieben werden
* statische Eigenschaften, z. B. dieses Fenster besteht aus folgenden fünf Bedienelementen: …
* dynamische Eigenschaften, z. B. beim Betätigen dieser Taste geschieht Folgendes: …
Die Tango-Spezifikation enthält nur Informationen über die Reaktionen der Applikation, nicht über deren Implementierung.

## Herkunft

Die erste dokumentierte Verwendung war ca. 1989 in einer Abnahmetest-Analyse (ATA) als vorgeschaltetes Dokument zur Erstellung von Testspezifikationen (ATS) und Testprozeduren (ATP) gemäß der Digital-Projektmethodik DPM der Firma Digital Equipment Corporation. Die ATA ist ein stark vernetztes SGML-Dokument aus Listen und Tabellen, mit denen die Zustandsübergänge der Applikation beschrieben werden.
Seit ca. 1994 existiert eine Textversion dieser Beschreibungsmethode, die ohne die Nutzung aufwendiger SGML-Editoren wie VaxDocument und LSE erstellt werden kann. Seit dieser Zeit ist diese Beschreibung unter dem Namen Tango bekannt (Testanalyse-Notation für grafische Oberflächen).
Die Spezifikationssprache war lange Zeit nicht verbindlich dokumentiert, und es fehlen geeignete Werkzeuge, welche die in sich stark vernetzte Spezifikation effizient verwalten könnten. Dies dürften Gründe für die geringe Verbreitung der Beschreibungsmethode sein.
Im Jahre 2005 wurde die Syntax und die Beschreibungsmethodik erstmals vollständig beschrieben. Dabei wurde die Spezifikationssprache in wesentlichen Teilen überarbeitet zur Version Tango 1.5. Gegenüber früheren Versionen ist die Beschreibung deutlich stärker formalisiert.

## Anwendung

Die SGML-Version konnte ausschließlich zur Niederschrift von Zustandsübergängen verwendet werden. Der Nutzen lag in der Reduktion der Beschreibungskomplexität durch die Betrachtung von aufeinander aufbauenden funktionalen Ebenen im zu beschreibenden System, ähnlich dem OSI-Schichtenmodell zur Beschreibung von Kommunikationsvorgängen. Die Bedienelemente eines Systems wurden durch Auswertung der Zustandsübergänge ermittelt, wobei die statische Beziehung der Elemente untereinander keine Rolle spielte und deshalb auch nicht direkt beschrieben werden konnte.
Die diversen Textversionen wurden umfangreich genutzt zur Beschreibung von Vorgängen, speziell Anwendungsszenarios und Testabläufe. Diese Tango-Beschreibungen sind generell wenig formalisiert und nutzen im Wesentlichen nur die Möglichkeit, Ursache-Wirkungs-Zusammenhänge sowie die Detaillierung von einzelnen Schritten effizient darzustellen.
Zur Spezifikation von Systemen auf fachlicher Ebene wurden die Textversionen vereinzelt verwendet. Das Fehlen geeigneter Werkzeuge begrenzt den Umfang der Beschreibung, so dass der Detaillierungsgrad reduziert oder nur Teilsysteme beschrieben wurden.

## Beispiel

Die Anwendung von Tango 1.5 wird an einem zusammenhängenden Beispiel demonstriert. Im Folgenden wird anhand der ersten Schritte einer Linux-Installation von CD gezeigt, wie dynamische und statische Eigenschaften einer Applikation beschrieben werden.
Dieses Beispiel enthält die meisten der gebräuchlichen Sprachkonstrukte von Tango. Dies ist keine umfassende Einführung, es wird demonstriert, wie eine Tango-Spezifikation prinzipiell zu lesen ist.

### Grundlegende Struktur

Eine Tango-Spezifikation beschreibt Aspekte eines Systems sowie deren Zusammenhänge untereinander. Jede Aussage über das System wird als Aspekt bezeichnet. Die Spezifikation besteht aus einer ungeordneten Sammlung von Aspekten in jeweils einem Definitionsblock. Jeder dieser Aspekte kann anschließend durch zusätzliche Aspekte im Definitionsblock beschrieben oder detailliert werden.
Die Beispiel-Spezifikation besteht aus Definitionsblöcken, eingeleitet mit dem Ausrufezeichen !.
Diese Blöcke beschreiben den Installationsvorgang:
einige Zustände des PCs
und drei Fenster

### Detaillierung durch Einrücken

Ein Aspekt in einer Zeile wird genauer beschrieben durch zusätzliche Aspekte in den folgenden Zeilen, die gegenüber dem übergeordneten Aspekt eingerückt sind. Die untergeordneten Aspekte sind normalerweise mit einem Punkt eingeleitet.

### Beschreibung von Vorgängen

Der Ablauf der LinuxInstallation umfasst drei Schritte in der gegebenen Reihenfolge:
Zusätzlich ist beschrieben, dass das Tastaturlayout anfänglich auf „Englisch“ gesetzt ist.
Dieser Anfangswert ist kein separater Schritt, sondern eine allgemein gültige Information in diesem Ablauf, und deshalb mit einem einführenden Punkt notiert, während die einzelnen Schritte des Ablaufs mit dem Minus-Zeichen markiert sind.

### Beschreibung statischer Strukturen

Das Fenster WnSpracheWählen besteht aus zwei Textpassagen TxWillkommenBeiYast2 und einer Anleitung TxAnleitung
dazu einem nicht näher spezifizierten Bedienelement, mit dem eine einzelne Sprache aus einer Liste gewählt werden kann
sowie zwei bedienbare Tasten, mit denen Aktivitäten des Systems ausgelöst werden können
Mit diesen beiden Aktivatoren beginnt die Beschreibung der dynamischen Eigenschaften. Das Öffnen des Fensters selbst ist ebenfalls ein Vorgang, der als weiterer Aktivator beschrieben wird

### Beschreibung dynamischer Eigenschaften

Wenn eine Sprache aus der Liste in SsSprache gewählt wird, d. h. der Aktivator einer Sprache in der Liste wird ausgelöst, dann ändert sich die sichtbare Selektion in dieser Liste sowie die Sprache der Textpassagen
Mit der Taste BtInstallationAbbrechen kann die Installation abgebrochen werden, dieser Vorgang muss vorsichtshalber bestätigt werden. Erst nach Bestätigung durch den USER wird der Installationsvorgang tatsächlich beendet. Falls der USER dies nicht will, wird die Installation fortgesetzt.
Mit der Taste BtWeiter wird das aktuelle Fenster WnSpracheWählen geschlossen und das nächste Fenster WnGrundeinstellungen geöffnet.

### Markierung mit Sonderzeichen

Die Aspekte der Beschreibung sind nach ihrer jeweiligen Funktion markiert:
* der Punkt . kennzeichnet einen Eintrag in einer ungeordneten Liste von Elementen oder Handlungen
* das Minuszeichen - kennzeichnet einen Schritt, der beendet sein muss, bevor der Nächste beginnen kann
* der Gartenzaun # kennzeichnet ein Fenster der Applikation
* das Pluszeichen + kennzeichnet einen Aktivator, der betätigt werden kann, um eine Handlung auszulösen
* das Dollarzeichen $ kennzeichnet einen Status
* das Paragraphenzeichen § kennzeichnet eine Randbedingung oder Erläuterung
* mit => wird die Beschreibung einer Handlung eingeleitet
* das Fragezeichen ? leitet eine Abfrage ein, die möglichen Alternativen sind mit dem Gleichzeichen = markiert
* Freitext-Beschreibungen sind in geschweifte Klammern {…} gesetzt
* Werte sind in Doppel-Hochkomma "…" gesetzt
* Alternative Werte stehen in eckigen Klammern […|…], getrennt durch einen senkrechten Strich
* ein Kommentar reicht vom einleitenden // bis zum Ende der Zeile
* ein mehrfach auftretendes Element (eine Liste) wird durch drei führende Punkte eingeleitet.
Eine Liste besteht aus mehreren gleichartigen Elementen. Die Listenelemente werden durch nachfolgende eingerückte Aspekte beschrieben. Im Beispiel können die Listenelemente aus der Zeitzonenliste durch Anklicken ausgewählt werden, dadurch wird die Zeitzone des PC gesetzt:

### Markierung mit Spezialisierungspräfix

Ein Aspekt kann durch einen Spezialisierungspräfix markiert sein, so dass seine Funktion leichter erkennbar ist. Diese Spezialisierungspräfixe sind nicht Teil der Tango-Syntax, sie sind frei definierbar und können verwendet werden, um die Beschreibung an das jeweilige Fachgebiet anzupassen.
Die folgenden Präfixe werden genutzt, um den Installationsvorgang der Software im Beispiel zu beschreiben:
* Fenster werden mit Wn (window) eingeleitet,
* reiner Anzeigetext mit Tx (text),
* editierbarer Text mit Et (edit text) und
* Tasten mit Bt (button).
* Radiobuttons sind mit Rb markiert. Dabei wird eine Gruppe von Radiobuttons gewöhnlich als ein einziges Element notiert:
* Eine Liste, aus der genau ein Element gewählt werden kann, wird mit Ss (select single) markiert. Hier wird offengelassen, ob dieser Aspekt durch eine Liste, eine Combobox, mehrere Radiobuttons oder in anderer Weise implementiert wird.

### Navigation mit Pfaden

Ein Pfad identifiziert einen Aspekt, indem der Weg, ausgehend vom obersten Aspekt eines Definitionsblocks bis zum gewünschten Aspekt notiert wird. Dabei wird jeder Schritt durch einen Punkt vom nächsten getrennt.
Der Pfad muss nicht am obersten Aspekt eines Definitionsblocks beginnen, er muss lediglich den Aspekt eindeutig identifizieren. Oftmals genügt allein der Name des Aspekts als Pfad.

### Abschließende Anmerkungen

Dieses Beispiel zeigt, dass die Sicht des Anwenders für die Beschreibung entscheidend ist, und nicht Implementierungsaspekte. Hier wird beschrieben, was der Anwender sieht ohne Rücksicht darauf, ob, wie und wie aufwendig dieses Verhalten implementiert wird:
* Die gewählte Sprache ist beschrieben als {Sprache im letzten Fenster}. Eine implementierungsnahe Beschreibung müsste sich überlegen, an welcher Stelle des Systems dieser Zustand in einer Variablen gespeichert und aktualisiert wird.
* Die Aspekte sind bereits durch ihre Verwendung bekannt bzw. postuliert, eine explizite Definition ist nicht notwendig. Deshalb kann der beschreibende Anwender jeden Aspekt „erfinden“, den er zur Beschreibung des gewünschten Verhaltens braucht.
* Jeder Aspekt der Spezifikation ist sichtbar und kann durch Angabe des Pfades überall verwendet werden.
Es gibt keine Schlüsselwörter in Tango, alle Sprachelemente sind durch Sonderzeichen dargestellt. Zur Anpassung an ein Fachgebiet sind Spezialisierungspräfixe frei definierbar.