Leseprobe
Inhaltsverzeichnis
1. Themenbeschreibung
2. Aufbereitung der Standardtestberichte für die interne Veröffentlichung
2.1 Genauere Problembeschreibung
2.2 Aufbau und Funktionsweise des Makros
2.3 Testphase und mögliche Unstimmigkeiten
3. Schlussbetrachtung
Anhang: Quelltext des Makros
1. Themenbeschreibung
Es sollen mit Hilfe eines Makros Testberichte aufbereitet werden. Diese Testberichte werden von Quality Center erstellt und als eine Word-Datei extern abgespeichert. Nach dem das Makro die Testberichte bearbeitet hat, sollen diese übersichtlicher und klarer strukturiert wirken.
Um dieses Makro umzusetzen ist es notwendig, selbstständig eine Recherche über die Grundlagen eins Makros durchzuführen. Es ist darauf zu achten wie man ein Makro erstellt, welche zugrundeliegende Programmiersprache verwendet wird und welche Eigenschaften diese Programmiersprache aufweist. So soll eine fehlerfreie Programmierung möglich sein.
Aus einem ersten Entwurf sollen Rückschlüsse gezogen werden, mit denen ein optimales Makro gestalten werden soll. Die Laufzeit des Makros darf, gemessen an der Dokumentengröße, einen akzeptablen Rahmen nicht überschreiten.
Das erarbeitete Makro soll anschließend an mehreren Testberichten geprüft werden, um möglichst viele Fehler zu erkennen und zu beseitigen.
2. Aufbereitung der Standardtestberichte für die interne Veröffentlichung
2.1 Genauere Problembeschreibung
In dem Testdatenbanksystem Quality Center besteht die Möglichkeit einen Testbericht zu erstellen, in dem sämtliche Informationen über mehrere Testläufe in Microsoft Word ausgegeben werden können. Diese Informationen können Workflow, Status oder Anhang in einem Test sein.
Der Testbericht wird zwar gemäß der Ordnerstruktur im Quality Center ausgegeben, doch die Gliederung ist sehr unübersichtlich und unsystematisch für Leser ohne Erfahrungen mit dem Quality Center. Desweiteren sind die Beschreibungen der Anhänge nicht gut zuordenbar.
Die manuelle Formatierung dieser Dokumente ist sehr zeitaufwendig und ungeeignet, da große Dokumente mit über 1000 Seiten zu bearbeiten sind.
Die meisten Formatierungen müssen über das gesamte Dokument wiederholt durchgeführt werden.
Um dieses zeitliche Problem bei der Formatierung dieser Dokumente zu umgehen, soll ein Makro geschrieben werden, das folgende Kriterien erfüllt:
- Löschen der alten Gliederung
- Löschen von überflüssigen Gliederungspunkten
- Setzen der neuen Gliederung
- Aktualisieren des Inhaltsverzeichnisses
- Setzen von Seitenumbrüchen, damit Beschreibungen besser zu deren Anhängen zugeordnet werden können
Das Makro wird in dem Makroeditor von Microsofts Word 2007 erstellt.
2.2 Aufbau und Funktionsweise des Makros
Am Anfang war es wichtig den Quelltext in einer übersichtlichen Form darzustellen, damit man Befehle und Anweisungen die zu bearbeiten sind, schnell finden kann.
Somit wurde das Makro in eine Hauptprozedur und in sechs Unterfunktionen eingeteilt. Dabei nimmt die Hauptprozedur die Administration ein und die Unterfunktionen lösen die geforderten Aufgaben.
Abbildung in dieser Leseprobe nicht enthalten
Bis auf die Unterfunktion „Zählalgorithmus“ werden alle Unterfunktionen in der Hauptprozedur ausgeführt. Die Unterfunktion „LöschenderGliederung“ wird drei Mal in der Hauptprozedur ausgeführt.
Ein Anfangsproblem bei der Erstellung des Makros war, Regelmäßigkeiten in dem Dokument zu erkennen, an denen mit Hilfe von Schleifen der Cursor immer wieder positioniert werden konnte. Diese Regelmäßigkeiten mussten Kriterien sein, die eindeutig sind und nicht zu Verwechselungen führen durften. Da das zu bearbeitende Dokument wenige regelmäßige Formatierungen aufweist, wurde nach Zeichenketten (nachfolgend Positionierungswörter genannt) gesucht, an denen eine Positionierung des Cursors festgemachen werden konnte.
Für jede Unterfunktion mussten andere Wörter gesucht werden.
Im folgenden Abschnitt sind Erklärungen zu den Unterfunktionen dargestellt. Dabei werden die Aufgaben der Funktionen dargelegt, aber auch die Umsetzung der Lösungen in einen Algorithmus wird grob geschildert. Einzelheiten wie verwendete Parameter oder Befehlsfolgen sind dabei vernachlässigt worden.
Funktion:„Zählalgorithmus“
Diese Unterfunktion wird in den anderen Unterfunktionen aufgerufen. Sie ist dafür zuständig, die Positionierungswörter zu zählen, die ihr über die Variable „strFind“ übergeben wird. Diese Wörter weisen die oben genannten Regelmäßigkeiten auf. Sie hat eine „Call by Reference“ Funktion, das heißt sie gibt einen Wert für die Variable „Zähler“ zurück.
Das Hauptelement dieser Unterfunktion ist eine WHILE-Schleife, die solange die Variable „Zähler“ um eins erhöht, wie das Positionierungswort in dem Dokument gefunden wird. Diese Schleife bricht am Ende des Dokumentes automatisch ab.
Die Variable „Zähler“ wird in den anderen Unterfunktionen für eine FOR-Schleife verwendet, die nach einer bestimmten Anzahl von Durchläufen abgebrochen wird. Diese FOR-Schleife hätte auch als WHILE-Schleife eingebunden werden können. Doch so ist vor dem Durchlaufen der Schleife klar, wie oft sie durchlaufen werden muss und sie kann an einer geeigneten Stelle abgebrochen werden. Der Nachteil dieser Variante ist, dass sie laufzeitintensiver ist.
Funktion:„LöschenderGliederung“
Diese Unterfunktion löscht die Gliederungsnummern vor den letzten drei Gliederungsebenen der einzelnen Testfälle. Da der gesamte Ablauf dieser Unterfunktion drei Mal durchlaufen werden muss, aber mit unterschiedlichen Variablen, wurde beschlossen, diese Unterfunktion wiederholt mit einer Parameterübergabe in der Hauptprozedur auszuführen. Dadurch wird der gesamte Quelltext übersichtlicher und kompakter.
Abbildung in dieser Leseprobe nicht enthalten
Abb. 1: Ursprüngliche Gliederung des Testberichtes die durch die Unterfunktionen bearbeitet wird
Die Positionierungswörter finden sich am Anfang der Gliederungspunkte in den einzelnen Ebenen. So fängt die drittletzte Gliederungsebene aller Testfälle mit „Test Set :“, die vorletzte Ebene mit „Plan: Test Name :“ und die letzte Ebene mit “Run Name :“ an.
Diese Wörter und drei weitere Variablen, die zum Löschen der Gliederung notwendig sind, werden von der Hauptprozedur an die Unterfunktion übergeben.
In der Unterfunktion wird zuerst die Unterfunktion Zählalgorithmus ausgeführt.
Anschließend wird mit der ermittelten Anzahl der Positionierungswörter eine FOR-Schleife durchlaufen.
Die Gliederungsnummern werden, durch die Generierung in Word, in einer unterschiedlichen Formatierung ausgegeben. Daher ist es notwendig in der Schleife eine Entscheidung zu definieren, die ermittelt wie die Gliederungsnummern formatiert wurden. Ist diese als Feld formatiert, kann die Gliederungsnummer als Ganzes, mit einem Befehl gelöscht werden. Ist die Gliederungsnummer aber lediglich als Zeichenkette ausgegeben, muss jedes Zeichen der Gliederungsnummer einzeln eingelesen und gelöscht werden. Dieses Löschen der Zeichen endet, wenn das eingelesene Zeichen der Anfangsbuchstabe des Positionierungswortes ist.
Funktion:„SetzenderGliederung“
Diese Unterfunktion erzeugt eine neue Nummerierung der letzten drei Gliederungsebenen. Bei der Erstellung eines geeigneten Ablaufplans gab es einige Probleme, da dies eine sehr komplexe Aufgabe war. Das Schema musste mehrmals überarbeitet werden.
Nachfolgend wird eine erste Lösung dieses Problems erläutert. Anschließend werden die Lösungen beschrieben, wie das Makro optimiert wurde.
Abbildung in dieser Leseprobe nicht enthalten
Die Nummerierung der Gliederungsebenen erfolgt über vier verschachtelte FOR-Schleifen, wobei jede FOR-Schleife eine Gliederungsebene darstellt. Der Laufindex einer FOR-Schleife bildet somit einen Teil der Nummerierung ab. In jeder übergeordneten FOR-Schleife werden die Positionierungswörter der darunterliegenden Gliederungs-ebene gezählt und komplett von oben bis an das Ende des Dokumentes durchnummeriert, bis der nächste Durchlauf der übergeordneten Schleife erfolgt.
Abb. 2: Schaubild der Nummerierung durch vier FOR-Schleifen
Diese Lösung wurde an mehreren Dokumenten getestet. Man stellte schnell fest, dass die Laufzeit durch die vielen Schleifen schon bei kleinen Dokumentengrößen erheblich ist.
Ein großes Problem war, eine Reihenfolge zu finden um die richtigen Positionierungswörter anzusprechen. Dabei musste zwischen „Test Sets:“ (1. Gliederungsebene), „Test Set :“ (2. GE), „Plan: Test Name :“ (3. GE) und „Run Name“ (4. GE) unterscheiden werden.
Der Cursor soll an das fünfte „Test Set :“ des dritten „Test Sets:“ gesetzt werden.
Dieses Problem konnte mit kleinen aufeinanderfolgenden Unterschleifen gelöst werden. So sucht die erste Schleife drei Mal, vom Anfang des Dokumentes ausgehend, das Wort „Test Sets:“ und die zweite von dieser Stellung aus fünf Mal das Wort „Test Set :“. Der Aufbau des Quelltextes ist im Vergleich zu dem hier beschriebenen Beispiels komplexer zu betrachten.
Die Lösung dieses Problems liegt in einem Grundsatz der Programmierung, der besagt, dass die Laufzeit und der Speicherbedarf gegeneinander austauschbar sind. Konkret heißt das, dass die zusätzliche Einbindung von Variablen den Speicherbedarf erhöht, da aber so Probleme direkt, ohne Umwege über wiederholte Anweisungen angesprochen werden können, wird die Laufzeit der Prozedur verringert. Es musste also nach Möglichkeiten gesucht werden, die eine geringere Durchlaufzahl der Hauptschleifen erreichen und die eine Positionierung ohne die Positionierungsschleifen möglich machen.
Eine geringere Durchlaufzahl der Hauptschleifen konnte durch das Einlesen der Seitenzahlen der Hauptgliederungspunkte in ein Datenfeld erreicht werden. Diese wurde durch einen Befehl als Abbruchbestimmung in einer Schleife definiert. Somit wird nun eine Schleife bei Erreichen des nächsten Hauptgliederungspunktes abgebrochen. Zu beachten ist dabei, dass die Abbruchbedingungen nicht in den Hauptschleifen implementiert wurden, sondern in den Zählschleifen, welche die Positionierungswörter zählen. Dies bringt den Vorteil, dass die Gesamtzahl aller Schleifendurchgänge weiter verringert und somit Laufzeit des Makros eingespart wird. In dieser Unterfunktion konnte die Funktion Zählalgorithmus nicht verwendet werden, da die oben genannte Abbruchbedingung zusätzlich definiert werden musste.
Durch diese Änderung ist man dem Ziel, ein schnelles Makro zu erzeugen, näher gekommen. Doch bei größeren Dokumenten (ca. 4000 Seiten) betrug die Laufzeit immer noch mehr als acht Stunden.
Dadurch war klar, dass die kleinen Schleifen, die den Cursor setzen, zu viele Durchläufe benötigten, um zur gewünschten Position zu gelangen.
Nach intensiver Recherche im Internet wurde eine Lösung des Problems mit Hilfe von Textmarken gefunden.
Hierfür wurden Befehle implementiert, die Textmarken an die Positionierungswörter setzen, in denen der Laufindex der FOR-Schleifen, die für die Nummerierung zuständig sind, wiederzufinden ist. Dadurch sind die Positionierungswörter direkt über einen Befehl anzuwählen und die Positionierungsschleifen konnten aus dem Quelltext entfernt werden. Nach dieser Veränderung betrug die Laufzeit für große Dokumente nur noch eine Stunde.
[...]