Trace Markers

4

Click here to load reader

description

Softwarespezifikation für ein Analyseprogramm für Marker-Attribute

Transcript of Trace Markers

Page 1: Trace Markers

Trace Markers Softwarespezifikation

- 1 -

TraceMarkers 19.1.2013, Andreas Kleffel

Bearbeitet 6.4. 2013

Trace Markers ist eine API, die es erlaubt .NET Assemblies auf Marker-Attribute

zu scannen. Marker-Attribute sind solche Attribute, die Metadaten in den Source

Code einweben und in der Regel zur Ausführung des Programms nicht nötig

sind. Beispiele für solche Metadaten wären:

� Konzeptionelle Funktionen

� Features

� Akteure

� Aspekte

� Bugfixes

� Workarounds

� Sicherheitsrelevanter Code

� …

Ein Marker-Attribut sollte dabei folgende Struktur aufweisen:

� Einen eindeutigen, kollisionsfreien Namen, auch ohne Namespace

� Einen Konstruktor, der das Attribut als Konstante einfügt

Ein Beispiel für ein gültiges Marker-Attribut wäre:

Ein Beispiel für das Einweben der Metadaten wäre dann:

Page 2: Trace Markers

Trace Markers Softwarespezifikation

- 2 -

Trace Markers wurde für das Tracing von Spezifikations-Funktionen im Source

Code konzipiert – sprich: System Composer (bei der Entwicklung noch

„DonkeySpecs“ genannt). Es ist jedoch eine eigenständige Komponente, die

nicht von System Composer abhängt.

Als Ergebnis eines Tracings/einer Analyse werden Klassen, Methoden /

Funktionen Markern zugewiesen. Das Marker-Objekt beinhaltet lediglich eine ID

(extrahiert aus dem Konstruktor oder einem Property des Marker-Attributes) und

ist somit für beliebige Marker einsetzbar:

Das eigentliche Tracing kann auf zwei Arten passieren:

� Via Reflection

� Via PDB (mit Hilfe der CCI, Common Compiler Infrastructure)

Page 3: Trace Markers

Trace Markers Softwarespezifikation

- 3 -

Die Analyse der Attribute via Reflection ist die erste nahe liegende Variante, die

mit .NET-Boardmitteln durchgeführt werden kann. Leider können damit nicht

die Quelldateien der Klassen ermittelt werden, weshalb eine zweite Strategie

die PDB-Dateien der untersuchenden Assembly mit einbezieht. Dazu wird das

Microsoft-Projekt Common Compiler Infrastructure: Metadata API1 verwendet.

Die PDB-Strategie ist prinzipiell langsamer, weshalb die Reflection-Strategie

weiterhin angeboten wird. Man kann auswählen, ob man den schnelleren und

oder detailierteren Analyzer benötigt.

Diese Analyzer-Klassen können per API direkt verwendet werden. Jedoch bietet

Trace Markers die Möglichkeit den Aufruf in einem separaten Workerprozess zu

bearbeiten, dadurch ist die Analyse vollständig vom Caller isoliert und ggf.

geladene Typen werden nach der Analyse wieder entladen.

Ablauf:

1 http://ccimetadata.codeplex.com/

Page 4: Trace Markers

Trace Markers Softwarespezifikation

- 4 -

Was kompliziert aussieht ist lediglich ein Methodenaufruf:

var result = IsolatedAnalysis.Run(runnerPath, link, AnalysisStrategy.CCI);

Zusammenfassung

Akteure Anderes Programm, z.B. DonkeySpecs

Features Analysieren von .NET-Assemblies auf Marker-Attribute in Klassen

und Methoden

Separater EXE-Runner zur isolierten Ausführung der Analyse

Einbeziehung von PDBs zur Zuordnung Source Location (File,

Line Number)

XML-API via Console.Out leicht abzufragen

(evtl. Caching von Analyse-Ergebnisssen)

Funktionen Isolated Tracing

Simple Tracing

Reflection-basiertes Tracing

PE/PDB-basiertes Tracing