TAA Support Package für Visual Studio

Die TAA-spezifische Erweiterung für Visual Studio bietet Unterstützung für die Bearbeitung und den Test der Implementierung von TAA-Modulen auf Basis von mit ExpEdge erzeugten Assemblies.

Die hier beschriebene Funktionalität steht nur zur Verfügung, wenn eine Source-Datei bearbeitet wird, die ein TAA-Modul in C# auf Basis einer ExpEdge-erzeugten Assembly implementiert.

Allgemein

Wenn das Package installiert ist, enthält Visual Studio einen Eintrag „TAA“ in der Menüleiste (bis VS2017) oder unterhalb des Menüs „Extensions“ (ab VS2019). Unterhalb dieses Eintrags werden Funktionen angeboten, um die Implementierung von Modulen zu unterstützen:

Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, wird der Name des Objekts, auf das sich der Menüeintrag bezieht, im Menüeintrag angezeigt, sofern er aus dem aktuellen Kontext abgeleitet werden kann. Funktionen, für die ein Kontext zwingend erforderlich ist, sind deaktiviert, wenn kein Kontext ermittelt werden kann.

Diese Menüeintrage werden nachfolgend beschrieben.

Testen eines TAA-Moduls

Modul starten

Menu-Eintrag: Modul starten …
Tastatur-Shortcut: Shift+Alt+F5
Diese Funktion startet in einem separaten Prozess tstDo mit den Argumenten zur Ausführung des Moduls, in dessen Implementierung sich der Cursor aktuell befindet.

Wenn erkennbar ist, dass sich der Cursor in einer Methode befindet, die eine bestimmte Operation implementiert, wird diese Operation in den Modulaufruf mit aufgenommen.

Die Argumente können über den angezeigten Dialog ergänzt werden:

Die Argumente, die für einen Modulaufruf angegeben werden, werden - ggf. pro Operation - intern gespeichert und stehen wieder zur Verfügung, wenn dasselbe Modul auf diesem Weg erneut ausgeführt werden soll.

Als Implementierungstyp wird - abhängig von den Projekteigenschaften - „dllClr“ oder „exeClr“ angegeben, die Ispc-Angabe verwendet den Namen der in dem aktuellen Projekt erzeugten Assembly.

Angaben in dem Dialog:

  • Ausführung aufzeichnen: Ausführungsprotokoll zur Auswertung mit TestEdge erstellen. Wenn diese Option angekreuzt ist, sind folgende weitere Angaben möglich:
    • Name der Aufzeichnung: Default ist der Name des Moduls.
    • Lade Aufzeichnung dirket in TestEge: Wenn angekreuzt, wird nach Ende der Modulausführung die erstellte Aufzeichnung direkt in TestEdge geladen und angezeigt.
    • Schreiben von Tracesätzen auf MVS unterdrücken: Bewirkt, dass in über ECI aufgerufenen Modulen keine Tracesätze erstellt werden.
    • Erzeugte Tracedatei in der EDB speichern: Bewirkt, dass die Tracedaten aus der Tracedatei in die Entwicklungsdatenbank übernommen werden. Mit der zusätzlichen Option Tracedatei … löschen wird die Datei gelöscht, sodass die Tracedaten nur noch in der Entwicklungsdatenbank vorhanden sind.
  • Ausführungs-Protokoll: Es wird ein Ausführngsprotokoll im XML-Format erstellt und unter dem angegebenen Namen gespeichert.
  • TimestampOffset verwenden: Wenn angegeben, wird der hier angegebene Timestamp-Offset übergeben.
  • Config-Unit setzen: Wenn angegeben, wir die hier angegebene Konfigurationseinheit beim Starten des Moduls gesetzt.
  • Vor der Ausführung Schnittstelle bearbeiten (Preview): Bei Start des Moduls wird zunächst dessen Schnittstelle im Template-Dialog angezeigt.
  • Nach der Ausführung Schnittstelle anzeigen (Preview): Bei Ende des Moduls wird dessen Schnittstelle im Template-Dialog angezeigt.
  • Schnittstelle laden: Vor Beginn der Ausführung werden die Daten für das Modul aus dem angegebenen Schnittstellen-Datei bestückt.
  • Schnittstelle speichern: Nach Beginn der Ausführung werden die Daten für das Modul in der angegebenen Schnittstellen-Datei gespeichert.
  • Aus Aufzeichnung ausführen: 1)Vor Beginn der Ausführung werden die Daten für das Modul aus der angegebenen Aufzeichnung geladen. Dies ist nur möglich, wenn eine Operation ausgewählt ist. Wenn diese Option angekreuzt ist, sind folgende weitere Angaben möglich:
    • Trace-Datei: Der Name einer TraceDatei kann eingegeben oder über den Auswahl-Knopf selektiert werden.
    • Aufzeichnung. Der Name einer in Rochade gespeicherten Aufzeichnung kann eingegeben oder über den Auswahl-Knopf selektiert werden. In dem Auswahl-Dialog werden nur die Aufzeichnungen aufgelistet, in denen das aktuelle Modul enthalten ist.
    • Instanz Nr.: Das Vorkommen des Moduls mit der angegebenen Operation in der Aufzeichnung.
  • Breakpoints auf Basis-Methoden setzen: Bewirkt, dass vor dem Start des Moduls Breakpoints auf die Implementierungen der Methoden „RunImplementation“ sowie „Operation<Name>“ gesetzt werden. Bei Modulende werden diese wieder entfernt.
  • Yield erlauben: Setzt in tstdo die Option, die dem Modul die Ausführung von Yield erlaubt.
  • Einstellungen in aktuelles Projekt übernehmen: Die Einstellungen, die gesetzt werden, um das Debuggen zu starten, werden als Debug-Einstellungen in dem aktuellen Projekt beibehalten. Dadurch ist es möglich, danach dasselbe Modul mit denselben Angaben erneut zu debuggen, ohne diesen Dialog wieder aufzurufen (Visual Studio, Menü Debug→Start Debugging oder F5).

Nähere Information zu den Aufrufoptionen, z.B. bzgl. Aufzeichnung und Schnittstelle, finden Sie in der Syntaxbeschreibung von tstDo.

Beispiel: Die aus dem o.g. Dialog erstellte tstdo-Anweisung:

start TWONLY EFUN PG-NFUN-ROLETEST LOESCHEN  
-ityp: DllClr -ispc: "D:\WORK\test\TestCS\TestCS\bin\TestCS.DLL;TestCS.MyPgNfunRoletest;Execute" 
save=D:\WORK\test\tmi\PG-NFUN-ROLETEST_LOESCHEN.tmi 
-m PGNFUNROLETEST -im1 -z0 
-preview 1 -postview 0

Ntry-Modul starten

Auch Einstiegsbausteine können über die zuvor beschriebene Funktionalität gestartet werden, allerdings können hier keine Optionen (wie Aufzeichnung, Config-Unit, Timestampoffset, Preview usw.) übergeben werden, da TAA vor dem Start des Moduls nicht aktiv ist.

Einige dieser Angaben können aber als Property an dem Ntry-Modul gesetzt werden; die fehlende Möglichkeit für Preview und Postview kann in der Testphase durch ShowModule ersetzt werden:

	class MyNtry2 : Ntry2
	{
		public MyNtry2()
		{
			this.Recording = "NtryAufzeichnung2";
			this.TimestampOffset = "0002-00-00-00.00.00.000000";
			this.Title = "Einstieg mit Ntry2";
			this.ConfigUnit = "tw_903";
		}
		protected override void RunImplementation()
		{
			this.Services.Debug.ShowModule();
			MessageBox.Show("Hello World!");
		}
	}

Modulausführungen vergleichen

Dieser Befehl ermöglicht es, die Ausführung der aktuellen Implementierung eines Moduls mit einer aufgezeichneten Ausführung zu vergleichen2).

Der Befehl steht nur zur Verfügung, wenn eine Operation ausgewählt ist.

  • Zu vergleichende Aufzeichnung: Es kann entweder eine Trace-Datei oder eine in Rochade gespeicherte Aufzeichnung angegeben werden.
    • Trace-Datei: Der Name einer TraceDatei kann eingegeben oder über den Auswahl-Knopf selektiert werden.
    • Aufzeichnung. Der Name einer in Rochade gespeicherten Aufzeichnung kann eingegeben oder über den Auswahl-Knopf selektiert werden. In dem Auswahl-Dialog werden nur die Aufzeichnungen aufgelistet, in denen das aktuelle Modul enthalten ist.
    • Zu vergleichende Instanzen: Die Vorkommen des Moduls mit der angegebenen Operation in der Aufzeichnung, welches verglichen werden sollen. Wenn mehrere Instanzen angegeben sind, wird pro Instanz ein tstdiff-Protokoll erstellt. Es kann nicht überprüft werden, ob die Aufzeichnung die erwartete Anzahl an Instanzen enthält.
  • Erstellte Differenzprotokolle anzeigen: Wenn angekreuzt, wird das Protokoll direkt in dem für xls-Dateien verknüpften Browser angezeigt. Für die Anzeige ist die Angabe eines xsl-Stylesheets erforderlich.
  • Stylesheet für Ansicht: Das zu verwendende xsl-Stylesheet. Wenn das Feld leer ist, wird als Default das von TAA bereitgestellte Stylesheet eingestellt.
  • Erstellte Aufzeichnungen aufbewahren: Wenn diese Auswahl angekreuzt ist, bleiben die Aufzeichnungen in dem Standard-Verzeichnis für Trace-Dateien (in der Registry festgelegt) erhalten. Andernfalls werden diese nach Erstellen des Differenzprotokolls gelöscht.
  • Erstellte Differenzprotokolle aufbewahren: Wenn diese Auswahl angekreuzt ist, bleiben die XML-Protokolle in dem Standard-Verzeichnis für Trace-Dateien (in der Registry festgelegt) erhalten, unter demselben Namen wie die Aufzeichnungsdatei, aber mit dem Dateisuffix „.XML“. Andernfalls werden diese in eine temporäre Datei erstellt und nach Anzeige des Differenzprotokolls gelöscht. Die Option ist nur verfügbar, wenn „Erstellte Differenzprotokolle anzeigen“ angekreuzt ist.

Der „Start“-Knopf startet die Ausführung, wobei zunächst über tstDo das Modul in der aktuellen Implementierung ausgeführt wird, basierend auf der angegebenen Aufzeichnung. Wenn mehrere Instanzen verglichen werden sollen, geschieht die Ausführung in einem einzigen tstDo-Befehl mit Multithreading.

Anschließend wird pro Modulinstanz über tstDiff.exe ein Vergleichsprotokoll erstellt und ggf. angezeigt.

Da dies u.U. länger dauert, wird der Fortschritt in einem Fortschrittsdialog angezeigt; dort kann der Vorhang auch abgebrochen werden:

Debug-Einstellungen für Modul

Debug-Einstellungen für Modul aktiv/aktivieren

Der Menü-Eintrag Debug-Einstellungen für <Modul> aktiv zeigt an, ob in der Registry für dieses Modul Debug-Einstellungen vorhanden sind. Wenn der Eintrag angehakt ist, also Einstellungen vorhanden sind, bewirkt ein Klick auf den Menüeintrag, dass diese Debug-Einstellungen in der Registry deaktiviert werden. Erneutes Anklicken bewirkt in dem Fall die Wiederherstellung der aufbewahrten Einstellungen.

Wenn in der Registry noch keine Debug-Einstellungen für das Modul existieren, bewirkt das Anklicken des Eintrags, dass Debug-Einstellungen für den Implementierungstyp „VsNet“ erzeugt werden. Damit können die Module unter Kontrolle von Visual Studio ausgeführt werden können.

Wenn die aktivierten Debug-Einstellungen den Ityp „VsNet“ haben, werden außerdem werden im aktuellen Projekt StartProgram und StartArguments bestückt.

VSNet-Debugging für <Modul> deaktivieren setzt – falls vorhanden – die Werte für Ityp und Ispc auf die zuvor gesicherten Werte zurück und entfernt die kopierten Einträge. Außerdem werden im aktuellen Projekt die Inhalte von StartProgram und StartArguments geleert, sofort dort Debug-Angaben für das aktuelle Modul stehen.

Debug-Einstellungen für Modul anpassen

Menu-Eintrag: TAA Tools → Debugeinstellungen [<Name>] anpassen…

Dieser Befehl startet das Tool „TwkEdge“, mit dem Sie die Debug-Angaben bearbeiten können.

Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, wird TwkEdge gestartet und werden die Einstellungen für dieses Modul geladen; der Name des Moduls zu der aktuellen Klasse wird im Menu-Eintrag angezeigt.

Kann kein aktueller Kontext ermittelt werden, wird TwkEdge ohne Angabe eines Moduls gestartet.

TAA Explorer Starten

Menu-Eintrag: TAA Tools → TAA Explorer Starten…

Dieser Befehl startet das Tool „TaaExplorer“ mit den gleichen Berechtigungen, wie das Visual Studio von dem es aufgerufen wurde.

Bearbeiten von TAA-Bausteinen

Bearbeiten der Schnittstelle eines TAA-Moduls

Menu-Eintrag: TAA Tools → Modulschnittstelle [<Name>] bearbeiten …

Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, wird TeamWiSE.InterfEdge gestartet und dieses Modul dort angezeigt; der Name des Moduls zu der aktuellen Klasse wird im Menu-Eintrag angezeigt.

Kann kein aktueller Kontext ermittelt werden, wird InterfEdge gestartet, ohne dass ein Modul geladen wird.

Sie können in InterfEdge wie gewohnt arbeiten, d.h. auch andere Module laden und - falls Sie Schreibberechtigung für das betreffende Modul haben - Änderungen vornehmen.

Wenn sie von Visual Studio aus für mehrere Module „Modulschnittstelle <name> bearbeiten…“ auswählen, werden diese in derselben Instanz von InterfEdge hinzugefügt.

Transformation für Modul starten

Menu-Eintrag: Transformation für Modul starten…3)
Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, wird für dieses Modul KonfigDialog gestartet.

Das Verhalten ist so wie auch in InterfEdge usw.: Nach Ausführung der Transformation über Konfig-Dialog erscheint eine Meldungsbox mit dem Namen der Datei, in der das Transformationslog zu finden ist, und der Möglichkeit, diese Datei direkt anzuzeigen.

Transformation für BasisAssembly starten

Menu-Eintrag: Transformation für BasisAssembly starten…4)
Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, und die Basis-Assembly unter Angabe einer DV-Komponente erstellt wurde, wird für die diese DV_Komponente die KonfigDialog gestartet.

Das Verhalten ist so wie auch z.B. von Rochade aus: Nach Ausführung der Transformation über Konfig-Dialog erscheint eine Meldungsbox mit dem Namen der Datei, in der das Transformationslog zu finden ist, und der Möglichkeit, diese Datei direkt anzuzeigen.

Bearbeiten einer Datenstruktur

Menu-Eintrag: Datenstruktur bearbeiten …
Dieser Menüeintrag startet das Tool „DataStrEdge“.

Bearbeiten einer Schlüsseltabelle

Menu-Eintrag: Schlüsseltabelle bearbeiten …
Dieser Menüeintrag startet das Tool „TablEdge“.

Bearbeiten einer Meldungsgruppe

Menu-Eintrag: Schlüsseltabelle bearbeiten …
Dieser Menüeintrag startet das Tool „MessEdge“.

Modul in Rochade bearbeiten

Menu-Eintrag: Rochade → Modul bearbeiten …
Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, wird Rochade Autopilot gestartet und dieses Modul dort angezeigt.

Leider ist es nicht möglich, in einer bereits laufenden Autopilot-Instanz zu einem Modul zu verzweigen. Deshalb wird für diesen Befehl jedesmal eine neue Autopilot-Instanz gestartet.

DV_Komponente in Rochade bearbeiten

Menu-Eintrag: Rochade → DV_Komponente bearbeiten …
Wenn sich der Cursor in einer Klasse befindet, die ein TAA-Modul implementiert, und die Basis-Assembly unter Angabe einer DV-Komponente erstellt wurde, wird Rochade Autopilot gestartet und diese DV_Komponente dort angezeigt.

Leider ist es nicht möglich, in einer bereits laufenden Autopilot-Instanz zu einem Modul zu verzweigen. Deshalb wird für diesen Befehl jedesmal eine neue Autopilot-Instanz gestartet.

Datenstruktur in Rochade bearbeiten

Menu-Eintrag: Rochade → Datenstruktur bearbeiten …
Diese Funktionalität ist noch nicht implementiert.

Schlüsseltabelle in Rochade bearbeiten

Menu-Eintrag: Rochade → Schlüsseltabelle bearbeiten …
Diese Funktionalität ist noch nicht implementiert.

Meldungsgruppe in Rochade bearbeiten

Menu-Eintrag: Rochade → Meldungsgruppe bearbeiten …
Diese Funktionalität ist noch nicht implementiert.

Aktualisierung des TAA Support Package

Ab TAA-Version 9.09/TaaVSPackEdge-Version 2.10 wird das von Microsoft in Visual Studio zur Verfügung gestellte Update-Verfahren für Extensions verwendet. Das bedeutet, dass Updates automatisch installiert werden, wenn „Automatically update this Extension“ angekreuzt ist.

Wenn für das Package ein neuer Stand zur Verfügung gestellt wird, stellt Visual Studio dies beim Starten (anhand der Versionsnummer) fest und zeigt dies durch eine Meldung an:

Bestätigen Sie diese Meldung mit OK, um den aktuellen Stand zu installierten. Damit dieser aktiv wird, müssen Sie danach Visual Studio beenden und neu starten.

Auffinden der Version

Wenn in dem sog. „About“-Box von Visual Studio5) nachgeschaut wird, sieht man nur die Hauptversion des Pakets:

Schaut man stattdessen bei den installierten Extensions nach6), sieht man die tatsächliche Build-Version:

Registry-Einträge

Um Module, Datenstrukturen usw. in Rochade Autopilot anzuzeigen, wird zum Starten von Autopilot der Pfad der ausführbaren Datei sowie eine INI-Datei benötigt. Diese können über die Company-Settings RoAutopilot, RoAutopilotSection und RoAutopilotIniFile angegeben werden.

Abwärtskompatibilität

Mit Umstellung auf die Update-Routinen von Visual Studio ist es nötig geworden, die Kompatibilität der verschiedenen Befehle mit der verfügbaren TAA-Version zu prüfen. Sollte die minimal benötigte TAA-Version für eine Operation nicht verfügbar sein, ist diese Option ausgegraut.7)

1)
ab V 9.06
2) , 4)
ab V9.06
3)
ab V9.03
5)
Menü Help/About Visual Studio
6)
Menü Tools/Extensions and Updates
7)
ab V9.09
dotnet:native:vspackage · Zuletzt geändert: 13.05.2020 16:15

Copyright © 1992-2020 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum