Erstellung von GUI-Tests mittels QFTest - Realisierung von Unittests für Apache-Module mit Python und CTypes

Größe: px
Ab Seite anzeigen:

Download "Erstellung von GUI-Tests mittels QFTest - Realisierung von Unittests für Apache-Module mit Python und CTypes"

Transkript

1 Erstellung von GUI-Tests mittels QFTest - Realisierung von Unittests für Apache-Module mit Python und CTypes Bericht zum Modul Praxis I Steven Mohr 13. Januar 2009

2 Kurs: Ausbildungsfirma: Einrichtung: Betreuer: TIT07AGR Deutsches Zentrum für Luft- und Raumfahrt e.v., Köln-Porz Simulations- und Softwaretechnik Dipl.-Math. Andreas Schreiber Dipl.-Inf.(FH) Markus Litz Kurs: Ausbildungsfirma: Einrichtung: Betreuer: 2

3 Erklärung Hiermit versichere ich, dass die vorliegende Arbeit von mir selbstständig angefertigt wurde und ich keine weiteren als die angegebenen Hilfsmittel benutzt habe. Köln, den 13. Januar 2009

4 Verzeichnisse Abbildungsverzeichnis 1. Testfallsatz für PPP Datentreiber PPP Input-Tab Prozedur: ChooseFiles PPP Mappingtab Testfall: Test des manuellen Mappings und der resultierenden Files Sequenz: MappingFileTest Testfall: Test des FormulaEditors Testfall: Test der Conditions PPP Outputtab Sequenz: Resulttab-Test Protokoll eines PPP-Tests Aufbau eines Unit-Tests Tabellenverzeichnis 2. Erwartetes Verhalten von check type Listings 1. SUT Skript: Count Elements of Input and OutputList Server-Skript: DragNDrop SUT-Skript: CheckInput SUT-Skript: GenerateFormula Skript: ValidateResult SUT-Skript: GenerateCondition SUT-Skript: ValidateResult Vorbereitungen zum Erstellen des httpd-core Unmodifizierter libtool-befehl Modifizierter libtool-befehl apr pool t als Pythonklasse search.c: check type TestCase-Klasse: setup Testfall für check type TestCase-Klasse: teardown I

5 Verzeichnisse Abkürzungsverzeichnis APR Apache Portable Runtime FFI foreign function interface GCC GUI GNU C Compiler Graphical User Interface HTTP HyperText Transfer Protocol JRE JVM Java Runtime Enviroment Java Virtual Machine PPP Pre Post Processor SISTEC SQL SUT Einrichtung Simulations- und Softwaretechnik Structured Query Language System under test XML Extensible Markup Language II

6 Inhaltsverzeichnis Inhaltsverzeichnis Umgebung der Praxisphase 1 I. Erstellung von GUI-Tests mittels QFTest 2 1. Einleitung 3 2. GUI-Tests Grundlagen PPP Jython QFTest-Standardbibliothek und Runcontext Elemente der Testsuite Testfall Sequenz Vorbereiten und Aufräumen Datentreiber Prozeduren und Packages MPRC-Knoten Check Abbild Erstellung des GUI-Tests für PPP Vorbereitungen Input Mapping Test des manuellen Mappings Test der Formeleingabe Test der Conditions Output Auswertung des Protokolls Fazit 21 II. Realisierung von Unittests für Apache-Module mit Python und ctypes 22 III

7 Inhaltsverzeichnis 1. Einleitung Grundlagen Der Apache httpd-server und Catacomb Shared libraries Foreign function interfaces und ctypes Unit-Tests und nose Problematik Der Apache-Server Das Testframework check Laden von Apache-Modulen mit ctypes Realisierung der Unit-Tests Erstellung des httpd-kerns als shared object Modifikation des Catacomb für die Unit-Tests Grundlegende Struktur eines nose Unit-Tests Implementierung eines Beispiel-Unit-Tests Implementierung von C-Datentypen in Python check type: Die zu testende Funktion Die SetUp-Methode Der Testfall Die TearDown-Methode Ausblick 36 Literatur 37 IV

8 Umgebung der Praxisphase Umgebung der Praxisphase Diese Arbeit ist im Deutschen Zentrum für Luft- und Raumfahrt (DLR) in der Abteilung Verteilte Systeme und Komponentensoftware der Einrichtung Simulations- und Softwaretechnik (SISTEC) entstanden. Das DLR ist das nationale Forschungszentrum der Bundesrepublik Deutschland für Luft- und Raumfahrt. Seine umfangreichen Forschungs- und Entwicklungsarbeiten in Luftfahrt, Raumfahrt, Verkehr und Energie sind in nationale und internationale Kooperationen eingebunden. Über die eigene Forschung hinaus ist das DLR als Raumfahrt-Agentur im Auftrag der Bundesregierung für die Planung und Umsetzung der deutschen Raumfahrtaktivitäten sowie für die internationale Interessenswahrnehmung zuständig. Das DLR fungiert als Dachorganisation für den national größten Projektträger. In 28 Instituten und Einrichtungen an den dreizehn Standorten Köln-Porz (Sitz des Vorstandes), Berlin-Adlershof, Bonn-Oberkassel, Braunschweig, Bremen, Göttingen, Hamburg, Lampoldshausen, Neustrelitz, Oberpfaffenhofen, Stuttgart, Trauen und Weilheim beschäftigt das DLR ca Mitarbeiterinnen und Mitarbeiter. Das DLR unterhält Büros in Brüssel, Paris und Washington, D.C.. [4] Die Einrichtung Simulations- und Softwaretechnik (SISTEC) hat ihren Schwerpunkt in der internationalen Softwareforschung und übernimmt anspruchsvolle Softwareentwicklungsaufgaben in Projekten mit DLR-Instituten. Der Schwerpunkt der Aufgaben von SISTEC liegt in den Bereichen verteilte Systeme, Software-Integration und Workflow-Management für Simulationsanwendungen, Management wissenschaftlicher Daten und grafischer Benutzeroberflächen. SISTEC unterstützt Softwareentwickler im DLR bei der Einführung moderner Software-Engineering-Methoden und gibt so eigene Erfahrungen an Institute weiter. [11] 1

9 Teil I. Erstellung von GUI-Tests mittels QFTest 2

10 1. Einleitung Meine Aufgabe während der ersten Praxisphase war die Erstellung eines GUI 1 -Tests für das innerhalb der Abteilung entwickelte Programm Pre Post Processor (PPP). Zur Erstellung des Tests wurde QFTest von Quality First Software benutzt. Die Erstellung des GUI-Tests ist ein weiterer Schritt für die Qualitätssicherung der Software. Mit diesem Test wird gewährleistet, dass die Bedienoberfläche funktionstüchtig ist und alle vorgesehenen Arbeitsabläufe funktionieren. 1 Ein Graphical User Interface (GUI)ist eine Mensch-Maschine-Schnittstelle, die über grafische Elemente die Interaktion zwischen beiden ermöglicht. [15] 3

11 2. GUI-Tests 2.1. Grundlagen Der Test der grafischen Oberfläche ist ein wichtiges Glied in der Qualitätssicherung der Software. Es wird geprüft, ob die Interaktion mit den GUI-Elementen die entsprechenden Aktionen auslöst. Sollte dies nicht der Fall sein, benötigt man eine genaue Dokumentation des Programmablaufs, so dass eine genaue Rekonstruktion des Fehlerhergangs möglich ist. Für die Erstellung dieser Tests wird QFTest von Quality First Software benutzt. Dieses ermöglicht GUI-Tests von Javaprogrammen, die auf Swing 2 oder Eclipse/SWT 3 basieren, indem es die Java Runtime Enviroment (JRE) instrumentalisiert. Dies bedeutet, dass, durch eine Modifikation der Java-Installation, QFTest auf die entsprechenden Klassen zugreifen kann. Im Detail benutzt QFTest das Java-eigene accessibility-interface, das es Testprogrammen erlaubt, Methoden zu implementieren, um so den Programmablauf zu protokollieren oder zu manipulieren. Die Modifikation ist aber nur aktiv, wenn das zu testende Programm (auch als System under test (SUT) bezeichnet) aus QFTest heraus gestartet wird. Andernfalls sind die Modifikationen inaktiv, so dass sie den Ablauf anderer Javaprogramme nicht stören können. Außerdem bietet QFTest die Möglichkeit, mittels Jython-Skripte 4 auf die Klassen des SUTs zuzugreifen. Damit beschränken sich die Möglichkeiten von QFTest nicht auf ein reines Testen von Aktion/Reaktion, sondern es ermöglicht auch die Überprüfung der Ergebnisse, z.b. bei Berechnungen. Die als Testsuite bezeichnete Testimplementierung wird über eine grafische Benutzeroberfläche erstellt, wobei die Testsuite aus einer Reihe vordefinierter Elemente zusammengestellt wird. Sollten die vordefinierten Elemente nicht ausreichen, besteht noch die Möglichkeit über ein Jython-Interface eigene Skripte zu erstellen. Beim Skripting kann man dann auf eine umfangreiche Bibliothek von vorgefertigten Funktionen zurückgreifen, die die Interaktion mit den GUI-Elementen erleichtern. Hierbei stehen zwei verschiedene Skriptarten zur Verfügung. Das SUT-Skript wird in der Java Virtual Machine (JVM) des SUT ausgeführt und ermöglicht so eine Manipulation des SUT oder einen direkten Zugriff auf Daten. Die andere Art ist das Serverskript. Es wird in der JVM von QFTest ausgeführt. Hier werden z.b. Aktionen wie Mausklicks ausgeführt. Viele der bereitgestellten Funktionen funktionieren nur in einer der beiden Skriptar- 2 Swing ist eine von Sun Microsystems entwickelte Bibliothek zur Erstellung grafischer Benutzeroberflächen in Java.[19] 3 SWT ist eine von IBM entwickelte Bibliothek zur Erstellung grafischer Benutzeroberflächen in Java. Ursprüngliches Einsatzgebiet war die Entwicklungsumgebung Eclipse. [18] 4 siehe Abschnitt Jython auf Seite 5 4

12 2.2 PPP ten, worunter teilweise die Übersichtlichkeit der Testsuiten leidet. Das Ergebnis eines Tests ist ein Protokoll, in dem die aufgetretenen Warnungen, Fehler und Exceptions 5 dokumentiert sind. Das Protokoll stellt zu den Fehlern auch jeweils die vorherigen und folgenden Ereignisse mit Screenshots zusammen, so dass die Fehlersituationen meistens relativ einfach rekonstruiert werden können.[10] 2.2. PPP PPP ist ein von der Einrichtung für Simulations- und Softwaretechnik des DLR in Java entwickeltes Tool zur Konvertierung einer Quell-XML 6 -Datei in ein XML-Zielformat. Hierbei handelt es sich um eine Auftragsarbeit für Airbus, die intern verschiedene Dateiformate benutzen und ein Tool benötigen, um ihre Konstruktionsdateien zwischen den Formaten zu konvertieren. PPP bietet dabei die Möglichkeit, die Regeln für die Konvertierung zu bestimmen und z.b. Umrechnungen der Maßeinheiten oder Formelberechnungen mit in die Konvertierung zu integrieren. [23] 2.3. Jython Jython ist eine Javaimplementierung der Interpretersprache Python. Sie ermöglicht es, Python-Skripte in Javaprogramme einzubinden oder dem Anwender ein komfortables Scripting-Interface bereitzustellen. Da die Skripte innerhalb derselben JVM ausgeführt werden wie das Javaprogramm,, ist es möglich aus den Python-Skripten direkt auf die Javaklassen zuzugreifen. Somit eignet sich Jython sehr gut zur schnellen Anpassung bestehender Anwendungen mittels Python-Skripten, welche im Mittel um das Zweibis Zehnfache kürzer sind als entsprechender Javacode. [8] 2.4. QFTest-Standardbibliothek und Runcontext QFTest bietet dem Entwickler zwei fortgeschrittene Werkzeuge zur Entwicklung von Testsuiten. Die Standardbibliothek bietet Prozeduren für den Zugriff auf die wichtigsten Widgets 7. So erleichtert es zum Beispiel den Umgang mit Popup-Menüs, da man nur den Namen des Menüs braucht und sich nicht umständlich über eine Kombination 5 Exceptions sind kritische Fehler, die ohne eine Fehlerbehandlung den Abbruch des Programms zur Folge haben. 6 Extensible Markup Language (XML) ist eine Sprache zur Darstellung hierarchisch strukturierter Daten in Textform [21]. 7 Ein Widget ist ein Bedienelement einer grafischen Benutzeroberfläche [20]. 5

13 2.5 Elemente der Testsuite von Rechtsklicks und weiteren Linksklicks die Interaktion mit dem Menü konstruieren muss. Der Runcontext hingegen ist ein standardmäßig in den beiden Jython- Umgebungen vorhandenes Objekt, mit dessen Hilfe es möglich ist, auf Variablen der Testsuite zuzugreifen, aus Skripten heraus Prozeduren (z.b. aus der oben beschriebenen QFTest-Standardbibliothek oder aber selbst erstellte) aufzurufen oder aber Zugriff auf die Javaklassen des SUT zu erhalten. Auch besteht die Möglichkeit Variableninhalte zwischen Server und SUT auszutauschen. Das Runcontext-Objekt stellt also die Schnittstelle zwischen SUT und Server dar Elemente der Testsuite Testfall Der Testfall stellt, nach dem Testfallsatz, die zweithöchste Gliederungsstufe dar. Er stellt einen konkreten Test dar und beinhaltet weitere Kindelemente. Außerdem ist er ein Geltungsbereich für Variablen. Die Ausführung von Testfällen kann an eine Bedingung geknüpft werden. Diese Bedingung wird über den Jython-Interpreter ausgewertet, so dass man relativ frei Bedingungen definieren kann Sequenz Die Sequenz dient der Strukturierung der Testsuite. Genau wie der Testfall ist auch sie ein Geltungsbereich für Variablen. Der Unterschied besteht darin, dass die Sequenz auf jeden Fall ausgeführt wird; es gibt also keine Möglichkeit eine Bedingung für die Ausführung zu definieren Vorbereiten und Aufräumen Die Vorbereiten- und Aufräumen-Knoten werden jeweils vor und nach jedem Testfall aufgerufen. Sie werden einmal pro Testfallsatz definiert und dienen dazu, das SUT vor dem nächsten Test in einen definierten Ausgangszustand zu versetzen bzw. nach einem Test das SUT geordnet zu beenden Datentreiber Der Datentreiber wird einmal pro Testfallsatz definiert. Er stellt Daten in Form von globalen Variablen bereit. Die Quelle dieser Daten können einfache Datentabellen, die 6

14 2.5 Elemente der Testsuite in QFTest erstellt werden, über Exceltabellen bis hin zu Datenbanken sein. Ein Datentreiber kann mehrere Datentabellen, Datenbanken oder Kombinationen dieser als Quelle haben. Wenn ein Datentreiber in einem Testfallsatz definiert ist, wird der Testfallsatz so oft ausgeführt, bis alle Elemente der Datenquelle abgearbeitet bzw. im Falle mehrerer Datenquellen, bis alle Kombinationen der Elemente der Quellen abgearbeitet sind Prozeduren und Packages Prozeduren lagern häufig verwendete Funktionalitäten in eigene Knoten aus. Diese können mit Parametern versehen werden und so verallgemeinert werden. Im Laufe der Zeit ist es möglich, sich eine Bibliothek benutzerdefinierter Funktionen zu erstellen und so häufig auftretende Aufgaben zu vereinfachen. Prozeduren können zu Packages (Paketen) zusammengefasst werden. Innerhalb dieser ist es möglich globale Variablen zu definieren, so dass an einem zentralen Ort die projektspezifischen Einstellungen vorgenommen werden können. Der Eingabeknoten ermöglicht die Übertragung von Tastatureingaben an das SUT. Hierbei kann man die Eingaben entweder an einzelne Widgets oder aber an das gesamte Fenster schicken, so dass das aktuell aktive Widget die Eingabe erhält MPRC-Knoten Der MPRC -Knoten führt eine Mausaktion aus. MPRC steht hierbei für Move, Press, Release, Click. Damit beschreibt es alle Aktionen, die eine Maus ausführen kann. Die Mausaktionen werden nicht auf einen fixen Punkt ausgeführt, sondern auf ein Widget, so dass im Fall einer Änderung der GUI der Test nicht angepasst werden muss. Als Parameter kann bei einem MPRC -Knoten außerdem angegeben werden, ob bestimmte Tasten währenddessen gedrückt werden sollen, z.b. Strg oder Alt Check Abbild Der Check Abbild-Knoten vergleicht einen Teil des Fensters mit einer hinterlegten Vorlage. Dieses geschieht allerdings auf Pixelbasis, so dass ein Fehlschlagen dieses Checks nicht unbedingt einen realen Fehler bedeuten muss. Es ist vielfach möglich, dass dieser Fehler aufgrund einer Skalierung des Fensters auftritt. Daher muss man mit dem Check Abbild-Knoten sehr vorsichtig umgehen und, wenn möglich, nur kleine Bildschirmabschnitte miteinander vergleichen. Das Fehlschlagen des Checks führt zu einem entsprechenden Eintrag im Protokoll. 7

15 3. Erstellung des GUI-Tests für PPP PPP arbeitet in drei Schritten, die durch drei Tabs (Registerreiter) repräsentiert werden: Input, Mapping, Output. Ziel ist es eine Testsuite zu entwickeln, die jeden dieser Tabs prüft. Abbildung 1: Testfallsatz für PPP 3.1. Vorbereitungen Bevor man mit den eigentlichen Testfällen beginnen kann, gibt es noch einige grundsätzliche Vorbereitungen zu treffen. Hier muss zum Beispiel der Datentreiber erstellt werden. Abbildung 2: Datentreiber Der Datentreiber besitzt zwei Datentabellen mit den Namen SourceFiles und TargetFiles. Diese Namen sind auch gleichzeitig die Namen der globalen Variablen, über die auf die enthaltenen Daten zugegriffen werden kann. In diesem Fall enthalten die Datentabellen die Pfade zu den für den Test benötigten XML-Dateien. Durch die Verwendung des Datentreibers wird sichergestellt, dass jede mögliche Kombination der Testdateien durchgetestet wird. Außerdem erhöht der Datentreiber die Flexibilität der Testsuite enorm, da neue Testdateien unkompliziert eingebunden werden können Input Im ersten Tab werden die zu bearbeitenden Dateien ausgewählt und dann die zu den Dateien gespeicherten Metadaten angezeigt. In Hinblick auf den zu erstellenden GUI- Test ist dieser Tab unkompliziert: Es müssen lediglich zwei Dateien ausgewählt werden 8

16 3.3 Mapping Abbildung 3: PPP Input-Tab und dann mit einem Klick auf den Next -Button der Übergang zum zweiten Schritt ausgelöst werden. Die Umsetzung dieser Aktion in QFTest ist wie folgt: Abbildung 4: Prozedur: ChooseFiles Als erstes wird durch einen Klick auf den Button Choose der Auswahldialog für Dateien geöffnet. Sobald dieser geöffnet ist (wird durch Warten auf Komponente sichergestellt), wird mit einer QFTest-Standardbibliothekfunktion die Datei, deren Pfad in der Variablen SourceFile gespeichert ist, geladen. Variablen werden in QFTest durch das vorangestellte Dollarzeichen und die dann folgenden Klammern gekennzeichnet. Der Check-Abbild-Knoten überprüft, ob die Statuszeile den Text Inputfile loaded enthält. Dieser Ablauf wird dann für die Zieldatei wiederholt. Danach wird in der Sequenz, die ChooseFiles aufgerufen hat, noch ein Mausklick auf den Next -Button ausgeführt und der Test des ersten Tabs ist abgeschlossen. 9

17 3.3 Mapping Abbildung 5: PPP Mappingtab 3.3. Mapping Der zweite Tab ist der wichtigste. Hier werden die Mapping-Regeln definiert. Man kann entweder Elemente aus der Quelldatei entsprechenden Elementen der Zieldatei zuordnen oder aber die Werte der Elemente der Zieldatei mit Hilfe einer Formel berechnen lassen. Innerhalb dieser Formel ist es auch möglich mit Bedingungen (Conditions) zu arbeiten. Die aufgestellten Mapping-Regeln lassen sich speichern, so dass eine einmal vorgenommene Zuordnung immer wieder ausgeführt werden kann. Das Produkt des Mapping-Vorgangs enthält also alle Elemente der Zieldatei. Die Werte der Elemente wurden entsprechend der Mapping-Regeln geändert, sofern solche für die Elemente existierten. Der Mappingtab stellt das Herzstück von PPP dar, daher wird hier der überwiegende Teil aller Tests durchgeführt. Je einer der Testfälle überprüft das manuelle Mapping per Drag n Drop, einer die Erstellung und korrekte Ausführung der Formelberechnung und einer die Funktion der Conditions Test des manuellen Mappings Der erste und umfangreichste Test befasst sich mit dem manuellen Mapping der Elemente per Drag n Drop. Hierbei wird einem Element der Zieldatei ein Element der Quelldatei zugeordnet. Der erste Teil der Sequenz besteht aus Initialisierungen für den folgenden Test. Es 10

18 3.3 Mapping Abbildung 6: Testfall: Test des manuellen Mappings und der resultierenden Files werden globale Variablen sowohl in der JVM des SUT als auch in der Server JVM angelegt und die Ansicht der Elemente auf Listenansicht geändert. Die Listenansicht hat den Vorteil, dass man sich nicht um die Struktur der Datei kümmern muss, die sonst in Form eines Baums repräsentiert wird. Die Beziehungen der Elemente fließen in den angezeigten Namen ein und man hat eine Liste, mit der man arbeiten kann. L i s t = rc. getcomponent ( i n p u t L i s t 2 ) nrelemente = L i s t. getmodel ( ). g e t S i z e ( ) rc. t o S e r v e r ( nrelementsl=nrelemente ) # Ä q u i v a l e n t e Operationen f ü r d i e O u t p u t l i s t # s e t z t den Wert f ü r nrelementsr Listing 1: SUT Skript: Count Elements of Input and OutputList An diesem Skript kann man einen der Hauptvorzüge von Jython erkennen. Über den Runcontext ist es möglich, direkt auf die Javaklasse, die hinter dem Widget steckt, zuzugreifen. Danach wird im Server-Interpreter die globale Variable nrelementsl bzw. im zweiten die Variable nrelementsr gesetzt. Die folgende Schleife mappt nun per Drag n Drop zufällige Elemente der Inputlist auf die Elemente der Outputlist, wobei jedem Element der Outputlist nur ein Element zugeordnet wird. Andernfalls würde man die erwartete Anzahl der Elemente der Mapping- Tabelle nicht bestimmen können, da es sonst, wenn auf ein Element der Outputliste mehr als ein Element der Inputliste gemappt würde, trotzdem nur einen Eintrag in der Mapping-Tabelle gibt, da die Elemente der Zieldatei nur einmal vorhanden sein können. Für die oben beschriebenen Aktionen sind zwei Skripte verantwortlich: import random max = ( random. randrange ( nrelementsr ) /20)+1 rc. s e t L o c a l ( max,max) add = i n t ( rc. lookup ( Add ) ) 11

19 3.3 Mapping for i in range (max) : x = random. randrange ( nrelementsr ) while x in usedvalues : x = random. randrange ( nrelementsr ) rc. c a l l P r o c e d u r e ( MappingDragNDrop, { NrL : i+add, NrR : x }) usedvalues. append ( x ) rc. s e t L o c a l ( Add, add+max) Listing 2: Server-Skript: DragNDrop Zum Einen das Serverskript DragNDrop, welches das manuelle Mapping per Drag n Drop vornimmt. Hierzu wird eine zufällige Anzahl an Elementen, aber maximal ein Zwanzigstel der Gesamtmenge der Elemente der Outputlist, zum Drag n Drop ausgewählt. Innerhalb der for-schleife wird dann über den Aufruf der Prozedur MappingDrag- NDrop das Drag n Drop ausgeführt. Damit die Elemente der Outputlist nur einmal gemappt werden, werden die bereits genutzten Werte in der globalen Variable used- Values gespeichert. Außer dem Drag n Drop hat MappingDragNDrop aber noch eine andere Funktion: Es trägt die gemappten Werte in eine globale Liste ein. Diese wird im zweiten Schritt, der aus in einem Vergleich der erzielten Ergebnisse mit den erwarteten besteht, ausgewertet. Dieses geschieht mittels des Skripts CheckInput. Table = rc. getcomponent ( splitmapping2. comright. t a b l e ) #.. for i in range (Max) : L e f t = s t r ( Table. getmodel ( ). getvalueat ( i, 0 ) ) Right = s t r ( Table. getmodel ( ). getvalueat ( i, 1 ) ) i f L e f t!= MappingElements [ i ] [ 0 ] or Right!= MappingElements [ i ] [ 1 ] : rc. l o g E r r o r ( MappingTable : Element + s t r ( i ) + e n t s p r i c h t n i c h t dem O r i g i n a l ) Listing 3: SUT-Skript: CheckInput Das CheckInput-Skript liest als erstes die Daten der Mapping-Tabellen ein und vergleicht sie mit den in der globalen Variable MappingElements gespeicherten Daten aus dem Drag n Drop-Vorgang. Die nächste Sequenz Check Loop überprüft, ob die Summe der in den Tabs eingefügten Elemente gleich der Anzahl der in AllMappings erscheinenden Elemente ist. Sollte dies nicht der Fall sein, generiert es eine Fehlermeldung innerhalb des Protokolls. Alle aufgestellten Mapping-Regeln können auch gespeichert werden, so dass man sie für die Konvertierung einer strukturell ähnlichen Datei wiederverwenden kann. Hierfür 12

20 3.3 Mapping wird in der Sequenz MappingFileTest geprüft, ob die Regeln, die erstellt wurden, auch korrekt gespeichert wurden. Abbildung 7: Sequenz: MappingFileTest Die Sequenz wählt Tab 2 der Mapping-Tabelle aus, speichert die dort angelegten Mapping-Regeln in der Datei map1.xml und öffnet einen leeren Tab. In diesem leeren Tab wird die map1.xml wieder eingelesen. Dann wird die Anzahl der Elemente beider Tabs verglichen und so sichergestellt, dass alle Elemente auch wirklich gespeichert wurden Test der Formeleingabe PPP ermöglicht es, die Werte für Elemente der Zieldatei auch per Formel zu berechnen. Da diese Formel durch einen PPP-internen Jython-Interpreter ausgewertet wird, ist es möglich hier alle Python-eigenen Mathematikfunktionen zu benutzen, die auch die Pythonfunktion eval auswerten könnte. Abbildung 8: Testfall: Test des FormulaEditors Hierfür wird ein Objekt der Outputlist ausgewählt und in die Spalte Formula die 13

21 3.3 Mapping gewünschte Formel eingegeben. Die Formel selbst wird im SUT-Skript GenerateFormula generiert. import random import math mathfuncs = [ l o g, s q r t, log10 ] global l p a r t s global a, b, c l p a r t s = [ ] v a l u e s = [ ] L i s t = rc. getcomponent ( i n p u t L i s t 2 ) nrelemente = L i s t. getmodel ( ). g e t S i z e ( ) for i in range ( 5 ) : j = random. randrange ( nrelemente ) L i s t. s e t S e l e c t e d I n d e x ( j ) l p a r t s. append ( s t r ( L i s t. getmodel ( ). getelementat ( j ) ) ) a, b, c = random. randrange ( 50), random. randrange ( 3 ), random. randrange (10) rc. t o S e r v e r ({ p a r t s : l p a r t s }) rc. s e t L o c a l ( formula, +( s t r ( l p a r t s [ 0 ] )+ +s t r ( a ) s t r ( l p a r t s [ 1 ] ) + + s t r ( mathfuncs [ b ] )+ ( + s t r ( c ) + ) + + s t r ( l p a r t s [ 2 ] ) s t r ( l p a r t s [ 3 ] )+ ) ) Listing 4: SUT-Skript: GenerateFormula Das Skript erstellt über eine Reihe von Zufallsparametern eine Formel, die dann als lokale Variable gespeichert wird. Diese Formel enthält zum einen mathematische Funktionen, die als Liste vorliegen, so dass hier zufällig gewählt werden kann; zum anderen feste Strukturen, wie eine Multiplikation und mehrere Additionen. Da die Formeln aber zum Großteil auf eingelesene Werte zugreifen sollen, werden über die for-schleife fünf Namen von Elementen der Inputlist eingelesen und in der Liste parts gespeichert. Diese Namen werden auch in die Formel integriert. Außerdem wird die Liste an den Server-Interpreter weitergereicht. Danach wird die Formel in das Formelfeld eingetragen und ein Skript ausgeführt. Dieses Skript fügt per Drag n Drop die in parts enthaltenen Elemente der Mapping-Tabelle hinzu. Dies stellt den einfachsten Weg des Auslesens dar, da die Werte dann in einer Tabelle im letzten PPP-Tab stehen. Nach diesem Schritt wird der Next -Button geklickt, dann die Werte der Tabelle im dritten Tab entnommen und mit deren Hilfe im Skript ValidateResult überprüft. import math 14

22 3.3 Mapping import re e x p r e s s i o n = re. compile ( ˆ[0 9.,]+ $ ) mathfuncs = [ math. l o g, math. s q r t, math. log10 ] Table = rc. getcomponent ( tabresults2. t a b l e ) p o s i t i v e R e s u l t P o s s i b l e = true l i s t = [ ] for i in range ( Table. getrowcount ( ) ) : i f e x p r e s s i o n. match ( s t r ( Table. getvalueat ( i, 1 ) ) ) : l i s t. append ( s t r ( Table. getvalueat ( i, 1 ) ) ) else : rc. logwarning ( Wert i s t keine Zahl ; Ersetzung durch 2. Korrrektes Ergebnis n i c h t mehr möglich ) l i s t. append ( 2 ) p o s i t i v e R e s u l t P o s s i b l e = f a l s e i f p o s i t i v e R e s u l t P o s s i b l e : vmath = s t r ( mathfuncs [ b ] ) + ( + s t r ( c ) + ) formularesult = e v a l ( l i s t [ 0 ] ) a + e v a l ( l i s t [ 1 ] ) e v a l ( vmath ) + e v a l ( l i s t [ 2 ] ) + e v a l ( l i s t [ 3 ] ) temp = s t r ( l i s t. pop ( ) ) abweichung = formularesult e v a l ( temp ) i f abweichung < 0 : abweichung = abweichung 1 i f abweichung > ( formularesult ) : rc. l o g E r r o r ( Abweichung b e i der Formelberechnung über 5%: Errechnet : + s t r ( formularesult ) + Erhalten : + temp ) Listing 5: Skript: ValidateResult Das Skript berechnet die generierte Formel und vergleicht das errechnete Ergebnis mit dem von PPP. Das größte Problem hierbei ist, dass die Werte der Elemente der Dateien, mit denen PPP arbeitet, zum größten Teil zwar Zahlen enthalten, aber nicht ausschließlich. So wird am Anfang mittels des regulären Ausdrucks 8 geprüft, ob es sich bei dem Wert um eine Zahl handelt. Andernfalls wird eine Warnung in das Protokoll geschrieben, dass dieser Testlauf kein aussagekräftiges Ergebnis mehr liefern kann. Wenn alle Werte Zahlen sind, wird die Formel durchgerechnet und mit dem Ergebnis von PPP verglichen. Sollte das Ergebnis um mehr als 5 Prozent abweichen, wird ein Fehler ins Protokoll geschrieben. 8 Reguläre Ausdrücke stellen einen Standard zur Definition von Mengen von Zeichenketten dar. 15

23 3.3 Mapping Test der Conditions Innerhalb von Formeln ist es möglich Bedingungen zu formulieren. Abbildung 9: Testfall: Test der Conditions Als Erstes muss bestimmt werden, auf welchen Fall geprüft werden soll: Soll die Bedingung überhaupt erfüllt sein oder soll die Bedingung falsch sein? Dies wird mittels eines Zufallsgenerators im SUT Skript InitLocals entschieden. Soll die Bedingung wahr sein, wird im if -Teil ein beliebiges Element in die Mapping-Tabelle eingetragen, dann wird ein Tab weitergeschaltet und dort der Wert ausgelesen. Mittels eines Klicks auf Back wird dann wieder in den zweiten Tab zurückgeschaltet. Die Erstellung der Condition erfolgt wie beim Test des Formeleditors in einem SUT-Skript. L i s t = rc. getcomponent ( i n p u t L i s t 2 ) part = L i s t. getmodel ( ). getelementat ( i n t ( rc. lookup ( random2 ) ) ) newcondition = c o n d i t i o n ( + + s t r ( part )+ == + s t r ( rc. lookup ( erwarteterwert ) ) + +, + 555, 222) rc. s e t L o c a l ( c o n d i t i o n, newcondition ) Listing 6: SUT-Skript: GenerateCondition Die Condition besteht aus zwei Teilen, zum einen die Bedingung an sich. In diesem Fall muss ein zufälliges Element parts gleich einem erwarteten Wert sein. Der erwartete Wert entspricht entweder dem innerhalb des if -Teils festgestellten Wert oder aber dem Standardwert 666. Der zweite Teil besteht aus zwei Werten. Der erste Wert ist das 16

24 3.4 Output Ergebnis der Condition für den true-fall, der zweite der für den false-fall. Nachdem dieser in die erstellte Formel eingetragen wurde, wird der nächste Tab aufgerufen. Hier wird dann über das nächste SUT-Skript aufgerufen, das das Ergebnis überprüft (SUT- Skript: ValidateResult). import math Table = rc. getcomponent ( tabresults2. t a b l e ) r e s u l t = Not found for i in range ( i n t ( Table. getrowcount ( ) ) ) : i f s t r ( Table. getvalueat ( i, 0 ) ) == s t r ( rc. lookup ( element ) ) : r e s u l t = s t r ( Table. getvalueat ( i, 1 ) ) break i f rc. lookup ( ShouldBeTrue ) == 1 and ( r e s u l t == 222 or r e s u l t == ) : rc. l o g E r r o r ( Condition f a l s e, obwohl true erwartet ) e l i f rc. lookup ( ShouldBeTrue ) == 0 and ( r e s u l t == 555 or r e s u l t == ) : rc. l o g E r r o r ( Condition true, obwohl f a l s e erwartet ) e l i f r e s u l t not in [ 222, 555 ] : rc. l o g E r r o r ( Result f e h l e r h a f t g e s e t z t ) e l i f r e s u l t == Not Found : rc. l o g E r r o r ( element wurde n i c h t gefunden : + element ) Listing 7: SUT-Skript: ValidateResult Die for-schleife sucht nach der Tabellenzeile, die das Element enthält, dessen Wert über die Condition errechnet wurde. In element wurde der Name des Elements gespeichert, bei dem die Formel eingetragen wurde. Dann wird überprüft, ob das gelieferte Ergebnis mit dem erwarteten übereinstimmt und, sollte dies nicht der Fall sein, eine Fehlermeldung generiert Output Der letzte Tab dient der Zusammenfassung der Ergebnisse. Das einzige, was hier noch möglich ist, ist das Abspeichern der Ergebnisse. Daher dient die ResulttabTest-Sequenz innerhalb des ersten Testsatzes nur noch dem Testen dieser Funktion. Es wird im SUT-Skript CountElements die Anzahl der gemappten Elemente gezählt. Dann wird die Mapping-Tabelle gespeichert und, nach einem Neustart PPPs, wieder eingelesen. Dann wird überprüft, ob die Anzahl der Elemente 17

25 3.4 Output Abbildung 10: PPP Outputtab gleich ist oder ob es Abweichungen gibt, was mit einem Eintrag ins Protokoll quittiert werden würde. 18

26 3.4 Output Abbildung 11: Sequenz: Resulttab-Test 19

27 4. Auswertung des Protokolls Das Wichtigste an Tests ist nicht die Frage, ob alles fehlerfrei ausgeführt wurde oder nicht, sondern was im Fehlerfall falsch gelaufen ist. Hierfür benötigt man so viele Informationen wie möglich, um den Fehler rekonstruieren zu können. Dafür wird ein umfangreiches Protokoll angelegt. Abbildung 12: Protokoll eines PPP-Tests Das Protokoll wird auch innerhalb von QFTest dargestellt und bildet die Struktur der Testsuite nach. Alle Knoten in der Nähe eines Fehlers oder gar einer Exception werden mit Zusatzinformationen versehen. Im obigen Protokoll (Abbildung 12) wurde im expandierten Knoten eine Exception ausgelöst (zu erkennen an der dicken, roten Markierung). Hier wurde eine ComponentNotFoundException ausgelöst. Im Knoten sieht man z.b. zwei Bildschirmabbilder. Hier wurde einmal nur das SUT abgebildet und dann noch einmal der gesamte Bildschirm. Dann sieht man noch einen Knoten Logged information from client PPP: Hier werden alle Ausgaben, die das Programm auf die Konsole gibt, gespeichert. Der erste Knoten enthält genaue Informationen, was nicht richtig funktionierte und die anderen Knoten enthalten dann die Begleitumstände des Fehlers, so dass eine sehr gute Rekonstruktion des Fehlers möglich ist. 20

28 5. Fazit Die Testsuite ist fertig gestellt und ermöglicht den Test der folgenden PPP-Versionen. Durch ihre Struktur ist sie wieder verwendbar und ermöglicht es durch einfache Erweiterungen Features folgender PPP-Versionen zu integrieren. Ein erster Bewährungstest liegt mit der neuen PPP-Version schon hinter ihr. Auch hier war es problemlos möglich die alte Testsuite zu verwenden. Es ist geplant, die Testsuite in eine automatisierte Umgebung zu integrieren, so dass in regelmäßigen Abständen aus dem PPP-Quellcode eine lauffähige Version erstellt wird und dann die erstellte Testsuite durchgearbeitet wird. 21

29 Teil II. Realisierung von Unittests für Apache-Module mit Python und ctypes 22

30 1. Einleitung In der zweiten Praxisphase beschäftigte ich mich mit der Verbesserung der Quialitätssicherung des WebDAV-Servers Catacomb 9, dessen Entwicklung zur Zeit hauptsächlich von der Einrichtung Simulations- und Softwaretechnik (SISTEC) vorangetrieben wird. In diesem Rahmen sollten verschiedene Ansätze geprüft werden, die jeweils entweder den Server als Ganzes (Systemtests) oder kleinere Teile testen sollten (Modul- oder Unit-Tests). In dieser Arbeit werde ich auf die Erstellung der Modultests eingehen. Nach einer Untersuchung der verschiedenen Möglichkeiten dieses zu realisieren, habe ich für eine Umsetzung mit Hilfe von Python und des Pythonmoduls ctypes entschieden. Besondere Schwierigkeit bei der Realisierung der Unit-Tests war die Tatsache, dass es sich bei Catacomb um ein Apache-Servermodul handelt, das alleine nicht lauffähig ist. 9 catacomb.tigris.org 23

31 2. Grundlagen Wie bei jedem wissenschaftlichen Thema, gibt es auch bei diesem Thema einige Grundlagen, die zum Verständnis des Textes unerlässlich sind. Auf diese Grundlagen wird im Folgenden eingegangen. Diese Themen werden allerdings nur soweit behandelt, wie es zum Verständnis dieser Arbeit notwendig ist Der Apache httpd-server und Catacomb Das Apache Httpd-Projekt wurde im Februar 1995 von einer Gruppe von Webmastern, die Rob McCools public domain HTTP daemon benutzten, gegründet. Die Weiterentwicklung dieses Webservers war ins Stocken geraten, nachdem McCool sich anderen Projekten zugewandt hatte. Mit einem Marktanteil von % ist der Apache Webserver der meistgenutzte Server weltweit. Der Apache Webserver zeichnet sich durch seinen modularen Aufbau und seine einfachere Erweiterbarkeit aus. Ein Modul, welches den Apache erweitert, ist mod dav. Es erweitert den Server um die Unterstützung des WebDAV 10 -Protokolls. Dieses Modul wiederum wird vom Catacomb-Projekt modifiziert. Standardmäßig speichert der Apache Webserver WebDAV-Daten im Dateisystem des Servers und die Metadaten 11 in einer GDBM 12 -Datenbank. Catacomb speichert alle Daten und Metadaten in einer relationalen Datenbank und ermöglicht so eine verbesserte und schnellere Suche. Der Catacomb ist frei verfügbar und bietet eine sehr hohe Unterstützung des WebDAV-Protokolls, die auf dem Niveau oder gar über dem kommerzieller WebDAV- Server liegt, sowie der Erweiterungen DASL (Suche) und DeltaV (Versionierung). [1, 7] 2.2. Shared libraries Es gibt zwei verschiedene Möglichkeiten Bibliotheken in ein Programm einzubinden. Zum einen kann die gesamte Bibliothek beim Erstellen des Programms mit eingebunden werden, dieses nennt man statisches Linken. Die andere Variante ist es, die benötigten Bibliotheken zur Laufzeit zu laden. Hierzu werden die Bibliotheken auf 10 WebDAV ist eine Protokollerweiterung des HyperText Transfer Protocol (HTTP), die es Nutzern ermöglicht gemeinschaftlich Dateien zu editieren und zu verwalten. Es bietet Server-seitige Suche und Versionierung. [12] 11 Metadaten sind Daten über Daten. Sie enthalten z.b. den Besitzer der Daten oder Schlüsselworte, um die Daten kategorisieren zu können. 12 GDBM ist die GNU DBM und stellt eine Weiterentwicklung des UNIX Standard-Datenbanksystems da. 24

32 2.3 Foreign function interfaces und ctypes eine bestimmte Art erstellt; es entstehen shared libraries oder shared objects. Durch das dynamische Laden der Bibliotheken zur Laufzeit, haben shared libraries gewisse Vorteile: Da die Bibliotheken nicht in die Programme eingebunden werden, sind diese auch wesentlich kleiner. Hinzukommt, dass, solange sich das Verhalten nach außen hin nicht ändert, man die shared libraries durch neue Versionen austauschen kann, ohne dass das Programm, das die Bibliotheken nutzt, neu erstellt werden muss. Damit das dynamische Laden funktioniert, muss die shared library eine gewisse Struktur aufweisen. Die meistverwendente Struktur ist die C Calling Convention. Jede Bibliothek, die diese Struktur aufweist, kann dynamisch geladen werden. Eine shared library wiederum kann auf andere shared libraries verweisen. Diese Abhängigkeiten werden in der Bibliothek gespeichert und beim Laden der Bibliothek aufgelöst, d.h. die verwendeten Bibliotheken werden mitgeladen. Der Apache-Webserver macht intensiv Gebrauch von shared libraries. Die oben beschriebene Modularität des Apache Servers beruht auf der ihrer Verwendung. Die Zusatzmodule werden zur Laufzeit nachgeladen und erweitern so den Apache. [3] 2.3. Foreign function interfaces und ctypes Ein foreign function interface (FFI) bietet die Möglichkeit von einer Programmiersprache aus, auf Funktionen, die in einer anderen Sprache geschrieben wurden, zuzugreifen. Python bietet seit Version 2.5 mit ctypes ein solches FFI. Das ctypes-modul erlaubt es, Funktionen aus shared libraries in Python aufzurufen. Hierbei stellt es auch Funktionen und Datenstrukturen bereit, mit deren Hilfe es möglich ist selbst komplexe C-Datentypen zu emulieren.[13] 2.4. Unit-Tests und nose Unit-Tests stellen einen wichtigen Teil der Software-Qualitätssicherung dar. Mit ihnen wird die Funktionsfähigkeit der kleinsten Elemente eines Programmes gesichert. Unit- Tests werden im Allgemeinen vor dem eigentlichen Code geschrieben und beschreiben die Anforderungen an diesen. Es wird das erwartete Verhalten der Funktion auf gewisse Eingabewerte definiert. Wird nun im späteren Projektverlauf diese Funktion geändert, muss der Test weiterhin erfolgreich abgeschlossen werden können, da die Änderung sonst den Programmablauf stört oder gar zusammenbrechen lässt. Der Einsatz von Unit-Tests verbessert außerdem den Programmierstil, da der Programmierer besonderen Wert auf die Testbarkeit eines Codes legt und zu besser strukturiertem und modularem Code gezwungen wird. Für viele Programmiersprachen existieren Unit-Test- 25

33 2.4 Unit-Tests und nose Frameworks, die die Erstellung von Unit-Tests vereinfachen, hierbei orientieren sich viele an dem populären JUnit für Java. Besonders wichtig bei Unit-Tests ist die kurze Laufzeit: Unit-Tests sollen schnell laufen, so dass sie regelmäßig ausgeführt werden können, ohne den Arbeitsfluss des Programmierers unnötig zu verzögern. Hierfür werden alle externen Einflüsse, wie z.b. Datenbanken oder Netzwerkverbindungen, durch sogenannte Mock-Up-Objekte ersetzt, die schnell ein definiertes Ergebnis liefern. Diese Mock-Ups ersetzen z.b. Datenbanken, indem sie auf eingehende Abfragen ein festes Ergebnis zurückliefern. Unit-Tests werden nicht in das Programm, das sie testen eingebunden, sondern laufen separat. Der sogenannte Testrunner ruft die Quelldateien mit den Testfällen auf und liefert dann das Ergebnis zurück. Ein beliebtes Testframework für Python ist nose 13. Es ist kompatibel zu unittest, dem Standard-Unit-Test-Framework für Python, und bietet darüber hinaus eigene Erweiterungen. Es betrachtet alle Verzeichnisse und Dateien, die das Wort test beinhalten als potenzieller Ort für Tests und durchsucht diese nach Funktionen und Klassen, die auch das Wort test enthalten oder aber, im Falle der Klassen, von TestCase, der Testklasse von unittest, abgeleitet sind. Diese Testfälle werden dann ausgeführt und dem Benutzer eine Statistik mit der Anzahl der gefundenen Tests und der Anzahl der Fehler sowie deren Beschreibung zurückgeliefert. [22, 16]

34 3. Problematik 3.1. Der Apache-Server Das erste Problem bei der Erstellung der Unit-Tests war der Apache-Server an sich. Da Catacomb ein Apache-Modul ist, kann man es nicht direkt aufrufen. Innerhalb des Moduls wird intensiv auf Funktionen des Apache zugegriffen. Diese enge Verzahnung, die Teil aller Apache-Module ist, macht es nahezu unmöglich den Catacomb alleine zu testen Das Testframework check Bei den ersten Versuchen zur Implementierung von Unit-Tests wurde das C-Testframework check 14 benutzt. Hierbei handelt es sich um einfaches Testframework für C-Programme. Die einzelnen Testfälle werden in Suiten gegliedert und dann durch den Testrunner aufgerufen. Aufgrund der im Abschnitt 3.1 beschriebenen Verzahnung des Apache-Servers mit seinen Modulen, wurde versucht, die Unit-Tests im laufenden Modul mit dem Apache im Hintergrund zu starten. Hierfür wurde der Aufruf des Testrunner am Ende der Initialisierungsfunktion des Catacomb untergebracht, so dass die Tests sofort nach der Initialisierung des Moduls ablaufen. Meine Versuche dieses zu realisieren, führten allerdings zu einem segmentation fault 15. Dieses könnte an der Speicherverwaltung des Apaches liegen. Das httpd-projekt selber benutzt für ihre Unit-Tests kein Testframework, sondern gibt die erwarteten und gelieferten Werte des Tests auf die Konsole aus und dort werden diese dann manuell vom Programmierer überprüft Laden von Apache-Modulen mit ctypes Da Apache-Module nur in Verbindung mit dem Apache-Webserver genutzt werden (können), enthalten sie viele Verweise, so genannte Symbole 16, auf Funktionen innerhalb des Apaches. Im Gegensatz zu normalen shared libraries enthalten aber Apache- 14 check.sourceforge.net 15 Ein segmentation fault ist verbreiteter Fehler bei der Arbeit mit Zeigern. Er tritt auf, wenn ein Programm versucht in den Speicher zu schreiben für den es keine Schreibberechtgung hat. [17] 16 Symbole sind Verweise auf Speicherstellen, an denen Funktionen oder Datenstrukturen zu finden sind 27

35 3.3 Laden von Apache-Modulen mit ctypes Module aber keine Angaben, wo diese Symbole zu finden sind. Der Linker 17 lässt diese offen, so dass sie erst beim Laden der Bibliothek aufgelöst werden. Allerdings versucht ctypes bereits am Anfang alle Symbole aufzulösen. Sollte dies nicht möglich sein, wirft ctypes eine Exception und bricht die Programmausführung ab. Ideal wäre also eine shared library, die den gesamten Apache-Kern enthält. 17 Ein Linker setzt aus verschiedenen kompilierten Quellcodedateien ein Programm oder eine Bibliothek zusammen 28

36 4. Realisierung der Unit-Tests 4.1. Erstellung des httpd-kerns als shared object Wie in Abschnitt 3.3 bereits angesprochen wurde, ist eine dynamische Bibliothek, die die Apache-Kernfunktionen enthält, Grundvorraussetzung für die Erstellung der Unit- Tests. Frühere Versionen des Apache-Webservers besaßen eine Option, um solch eine Bibliothek zu erstellen. Diese Option stellte einen sogenannten shared core her, also eine shared library, die die Apache-Kernfunktionen enthält. Diese Funktionalität wurde aber beim Sprung auf Version 2.0 entfernt, so dass es den einfachen Weg über eine Compileroption nicht mehr gibt. Stattdessen muss dieses Objekt manuell erstellt werden. Hierzu verwendet man den normalen Apache-Installationsweg. 1 make c l e a n 2 CFLAGS= D SHARED CORE fpic. / c o n f i g u r e 3 make Listing 8: Vorbereitungen zum Erstellen des httpd-core Als erstes muss eine saubere Umgebung zur Erstellung der shared library geschaffen werden. Hierzu werden mit make clean alle Zwischen- und Endprodukte vorheriger Compilerläufe gelöscht. In Zeile 2 des Listing 8 wird das configure-skript aufgerufen. Für diesen Aufruf wird die Umgebungsvariable CFLAGS gesetzt. Das configure-skript ist ein Teil des GNU-Autoconf-Systems und dient zu der Erstellung von Konfigurationsdateien, sogenannter Makefiles, die dann von automake in Zeile 3 weiterverarbeitet werden. Das Programm make ruft dann, basierend auf der Konfiguration, die in dem Makefile beschrieben wurde, weitere Programme auf, die am Ende die Bibliothek erstellen. Der Ausgabeort aller Operationen von make ist die Konsole. Hier findet man auch den Befehl, der den Linker aufruft und den Apache erstellt. Dieser Befehl, der letzte Befehl der ausgeführt wurde, wird nun modifiziert, um die Bibliothek mit dem Apache-Kern zu erstellen. l i b t o o l s i l e n t mode=l i n k gcc pthread D SHARED CORE fpic o httpd modules. l o buildmark. o export dynamic [... ] Listing 9: Unmodifizierter libtool-befehl Hierzu wird der Linker angewiesen mit der Option -shared, anstatt der httpd, also dem ausführbaren Apache-Webserver, das shared object libhttpd.so zu erzeugen. Dann 29

37 4.2 Modifikation des Catacomb für die Unit-Tests muss noch eine Reihe von Objekten, die wichtige Kernfunktionen enthalten, eingebunden werden (server/protocol.o, modules.o, etc.). Welche Dateien eingebunden werden müssen, erfährt man in dem man zu den undefined symbols in der libhttpd.so den entsprechenden Quellcode in den Apache-Quellen sucht und dann einbindet. Im Gegensatz zu dem in Quelle [2] angegebenen Verfahren muss die server/exports.o nicht eingebunden werden. Bei dieser Datei handelt es sich um automatisch generierten Code, der dafür zuständig ist, dass alle Funktion der Apache Portable Runtime (APR) mit eingebunden werden, egal ob sie benutzt werden oder nicht. Dies ist nötig, damit diese später für Funktionen bereit stehen, die über Module dynamisch eingebunden werden. Für diese Funktionen gibt es dann Symbole in der libhttpd.so, ihr weiterer Code wird allerdings nicht mit eingebunden, welches dann zu undefined symbols führt, die eigentlich durch die Erstellung des httpd-kerns entfernt werden sollten. [2, 5, 6] l i b t o o l s i l e n t mode=l i n k gcc pthread D SHARED CORE fpic shared o l i b h t t p d. so s e r v e r / p r o t o c o l. o modules. o buildmark. o s e r v e r / p r o v i d e r. o s e r v e r / u t i l x m l. o s e r v e r / e r r o r b u c k e t. o export dynamic [.. ] Listing 10: Modifizierter libtool-befehl 4.2. Modifikation des Catacomb für die Unit-Tests Die Modifikationen sollten so gering wie möglich ausfallen, damit die Unit-Tests eine hohe Akzeptanz bei den Entwicklern erhalten. Um den Catacomb für die Tests vorzubereiten bzw. um eine testbare Version des Catacomb zu erzeugen, muss lediglich eine Zeile im Makefile des Catacomb geändert werden. Die bestehende LDFLAGS-Eintrag muss um -lhttpd -L <Pfad zu libhttpd.so > erweitert werden. Hiermit wird der Verweis auf die libhttpd.so miteingebunden und die Bibliothek dynamisch mit hinzugeladen. Damit sind alle fehlerhaften Verweise im Catacomb beseitigt und es ist nun möglich, mit ctypes Catacomb in Python zu laden Grundlegende Struktur eines nose Unit-Tests Zur Erstellung der Unit-Tests habe ich das Python-Testframework nose benutzt. Es setzt eine sehr simple Struktur der Unit-Tests voraus, bietet aber die gleichen Funktionalitäten wie andere Frameworks. Grundlegend hat ein Unit-Test die in Abbildung 13 beschriebene Struktur. Einzelne Tests, die von ihrer Struktur bzw. dem zu testenden Objekt übereinstimmen, wer- 30

38 4.4 Implementierung eines Beispiel-Unit-Tests den in Klassen gesammelt. Diese Klassen können so genannte SetUp- and TearDown- Methoden implementieren, welche jeweils vor bzw. nach dem Ausführen eines Tests aufgerufen werden. Innnerhalb der SetUp-Methode wird die Testumgebung initialisiert, im Falle der Catacomb-Tests heißt dies zum Beispiel, dass das Catacomb-Modul geladen wird. Die TearDown-Methode wird nach dem Test aufgerufen und sorgt für einen kontrollierten Abschluss des Tests. Im Falle des Catacomb werden hier über Catacomb- Funktionen reservierte Speicherbereiche wieder freigegeben, da es nicht sichergestellt werden kann, dass diese korrekt vom Garbagecollector 18 freigegeben werden. Die Testklasse enthält neben diesen beiden Methoden natürlich noch die eigentlichen Tests. Jede Methode, die test in ihrem Namen enthält, wird von nose als ein Test betrachtet und als ein solcher ausgeführt. Hierbei sollte nochmal erwähnt werden, dass alle Tests völlig unabhängig voneinander sind; vor jedem Test wird die SetUp-Methode aufgerufen und nach jedem Test die TearDown-Methode. Abbildung 13: Aufbau eines Unit-Tests 4.4. Implementierung eines Beispiel-Unit-Tests Implementierung von C-Datentypen in Python Um mit C-Funktionen vernünftig arbeiten zu können, müssen die C-Datentypen in Pythoncode übertragen werden. Die Standarddatentypen werden von ctypes bereits mitgeliefert. Diese folgen einem einfachen Namensschema: c <C-Datentyp >plus ein p für einen Zeiger auf den angegebenen Datentyp (z.b. Listing 11 Zeile 6: c void p steht für einen void-zeiger). Für Strukturen gibt es die Basisklasse Structure von der alle Pythonklasse, die C-Struktren repräsentieren, erben. Genauso gibt es eine Klasse POINTER, die einen Pointertyp für ein beliebiges Objekt erstellt, so Z.B in Zeile 2. Hier wird ein Pointertyp für die Klasse cleanup t erzeugt, die die Pythonversion der 18 Der Garbagecollector ist ein Bestandteil vieler moderner Programmiersprachen, u.a. Python, der sich um die Freigabe nicht mehr benötigter Speicherbereiche kümmert. [14] 31

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz Einführung in das Microsoft.NET-Framework Programmiersprache C# MEF Das Managed Extensibility Framework André Kunz 21.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept Testkonzept 1.Einführung Um die Zuverläsigkeit und die Qualität der Software und des gesamten Systems zu verbessern, sind Tests durchzuführen. Die Testreihe läst sich in drei Stufen einteilen, nülich Komponententest,

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Unit-Test Theorie und Praxis. Stephan Seefeld, INGTES AG

Unit-Test Theorie und Praxis. Stephan Seefeld, INGTES AG Unit-Test Theorie und Praxis Stephan Seefeld, INGTES AG Inhalt Was sind Unit-Test? NUnit für.net Demo Seite 2 Quellen Für diesen Vortrag verwendete Quellen: dotnet User Group Berlin Brandenburg http://www.dotnet-berlinbrandenburg.de/

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Java Schulung. Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit. Prof. Dr. Nikolaus Wulff

Java Schulung. Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit. Prof. Dr. Nikolaus Wulff Java Schulung Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit Prof. Dr. Nikolaus Wulff JUnit JUnit ist das Opensource Testframework. Es existieren Portierungen für fast alle objektorientierten

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung

Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung Jan Düttmann Archimedon Software + Consulting GmbH & Co. KG Marienstraße 66 32427 Minden Stephan Kleuker Hochschule

Mehr

OPC-Server VM OPC. Anleitung. Installation, Konfiguration, Verwendung. Version 1.01

OPC-Server VM OPC. Anleitung. Installation, Konfiguration, Verwendung. Version 1.01 Installation, Konfiguration, Verwendung Version 1.01 Seite 2 von 20 OPC-Server VM OPC Revision Version Erstellt am Versionsnummer Bemerkung 1.00 26.07.2013 Erstellung 1.01 05.11.2013 2.14 - Reiter der

Mehr

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein.

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Pfade einstellen Stand: Dezember 2012 Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Diese Anleitung soll zeigen, wie man Pfad-Favoriten

Mehr

Anleitung zur Webservice Entwicklung unter Eclipse

Anleitung zur Webservice Entwicklung unter Eclipse Entwicklungsumgebung installieren Sofern Sie nicht an einem Praktikumsrechner arbeiten, müssen Sie ihre Eclipse-Umgebung Webservice-fähig machen. Dazu benötigen Sie die Entwicklungsumgebung Eclipse for

Mehr

ctypes: Python-Bindings ohne C-Code

ctypes: Python-Bindings ohne C-Code µpy 18. Juni 2009 This work is licensed under the Creative Commons Attribution 3.0 License. Das C-Library Ökosystem Übersicht Problemstellung Lösungsansätze 1 Das C-Library Ökosystem Übersicht Problemstellung

Mehr

Ajax & GWT. Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina

Ajax & GWT. Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina Ajax & GWT Kurs: User Interfaces und ihre Evaluierung Dozent: Manfred Thaller WS 2012/2013 Referent: Rafael Kalina Ajax Technisches Verfahren, bei dem Browser aktualisierte Inhalte nicht mehr synchron

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

Managed VPSv3 Was ist neu?

Managed VPSv3 Was ist neu? Managed VPSv3 Was ist neu? Copyright 2006 VERIO Europe Seite 1 1 EINFÜHRUNG 3 1.1 Inhalt 3 2 WAS IST NEU? 4 2.1 Speicherplatz 4 2.2 Betriebssystem 4 2.3 Dateisystem 4 2.4 Wichtige Services 5 2.5 Programme

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

15 Bilder und Dateien im SQL Server

15 Bilder und Dateien im SQL Server Leseprobe aus Access und SQL Server http://www.acciu.de/asqllesen 15 Bilder und Dateien im SQL Server Eines der großen Probleme von Access-Datenbanken ist der vergleichsweise geringe Speicher platz. Sicher,

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

Hello World in Java. Der Weg zum ersten Java-Programm

Hello World in Java. Der Weg zum ersten Java-Programm Vorwort Hello World in Java Der Weg zum ersten Java-Programm Diese Anleitung wurde unter Windows XP verfasst. Grundsätzlich sollte sie auch unter späteren Windows Versionen wie Windows Vista oder Windows

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben

Mehr

Einführung in VisualBasic for Applications. Stefan Mahlitz

Einführung in VisualBasic for Applications. Stefan Mahlitz Einführung in VisualBasic for Applications Stefan Mahlitz Stefan Mahlitz Einführung in VBA 27.08.00 Inhaltsverzeichnis 1. Grundlagen der VisualBasic for Applications (VBA) Programmierung...2 1.1 Variablen,

Mehr

AJAX SSL- Wizard Referenz

AJAX SSL- Wizard Referenz AJAX SSL- Wizard Referenz Version 1.0.2+ - 04.04.2011 Präambel Die vorliegende Dokumentation beschreibt den AJAX basierten SSL- Wizard der CertCenter AG. Der SSL- Wizard kann mit wenigen Handgriffen nahtlos

Mehr

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen FAEL-Seminar Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen Prof. Dr. Marc Rennhard Institut für angewandte Informationstechnologie InIT ZHAW Zürcher Hochschule für Angewandte

Mehr

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse 1. Einführung 1.1 Eclipse Die Eclipse ist eine kostenlose integrierte Entwicklungsumgebung oder auch IDE genannt, (Abkürzung IDE, engl. Integrated development enviroment). Sie ist eine grafische Benutzeroberfläche

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Remote Communications

Remote Communications HELP.BCFESDEI Release 4.6C SAP AG Copyright Copyright 2001 SAP AG. Alle Rechte vorbehalten. Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem Zweck und in welcher

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Experte. I-CH-118 Strukturiert implementieren

Experte. I-CH-118 Strukturiert implementieren Autor des Dokuments Valmir Selmani Erstellt / Aktualisiert am 16.06.2011 / 28.06.2011 Teilnehmer des Projekts: Valmir Selmani, Moritz Kündig, Tobias Künzi Seitenanzahl 13 MTV (Moritz Tobias Valmir) 2011

Mehr

17.2 MS-Access Projekte

17.2 MS-Access Projekte 964 Von MS-Access 2000 zum SQL-Server 17.2 MS-Access Projekte MS-Access-Projekte, die die Dateiendung adp besitzen, werden als Front-End-Anwendung verwendet. Für die Back-End-Seite gibt es mehrere Möglichkeiten.

Mehr

Version 0.3. Installation von MinGW und Eclipse CDT

Version 0.3. Installation von MinGW und Eclipse CDT Version 0.3 Installation von MinGW und Eclipse CDT 1. Stellen Sie fest, ob Sie Windows in der 32 Bit Version oder in der 64 Bit Version installiert haben. 2. Prüfen Sie, welche Java Runtime vorhanden ist.

Mehr

Internetanbindung von Datenbanken

Internetanbindung von Datenbanken Internetanbindung von Datenbanken http://galahad.informatik.fh-kl.de/~miesel/index.html PHP -1 Gliederung Einführung PHP3 Datenbankanbindung mit PHP3 Sicherheitsprobleme Realisierung mit PHP3 Probleme

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Technische Beschreibung: EPOD Server

Technische Beschreibung: EPOD Server EPOD Encrypted Private Online Disc Technische Beschreibung: EPOD Server Fördergeber Förderprogramm Fördernehmer Projektleitung Projekt Metadaten Internet Foundation Austria netidee JKU Linz Institut für

Mehr

Dokumentation zum Projekt Mail-Adapter in SAP PI. 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696

Dokumentation zum Projekt Mail-Adapter in SAP PI. 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696 Dokumentation zum Projekt Mail-Adapter in SAP PI 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696 Inhalt 1. Einleitung... 2 2. Vorgehen... 3 1. Datentyp für die Mail einrichten... 3 2. Message Typen

Mehr

Whitepaper. Automatisierte Akzeptanztests mit FIT. Einleitung. Die Bedeutung von Akzeptanztests

Whitepaper. Automatisierte Akzeptanztests mit FIT. Einleitung. Die Bedeutung von Akzeptanztests Automatisierte Akzeptanztests mit FIT Einleitung Dieses beschreibt, wie man Tests aus Anwender-/Kundensicht mit dem Open-Source-Werkzeug FIT beschreibt und durchführt. Das ist für Kunden, Anwender und

Mehr

Bereitstellung von Werkzeugen für den Alltag. Extended Automation

Bereitstellung von Werkzeugen für den Alltag. Extended Automation Bereitstellung von Werkzeugen für den Alltag Extended Automation Wie entstand die Idee? Kundenaufträge mit unterschiedlichen Herausforderungen Neue Mitarbeiter, neue Ideen, neue Ansätze unbelastet von

Mehr

Testen von webbasierten Benutzeroberflächen

Testen von webbasierten Benutzeroberflächen Studiengruppe: IB6C Email: qasmi@hm.edu Dozent: Michael Theis 1 Agenda: Das eine basierte Testumgebung 2 Wer kennt diese Situationen nicht? =>Typische Fehler bei Webanwendungen! 3 Fehler wie diese sollten

Mehr

C# - PROGRAMME MIT PLUGINS ERWEITERN

C# - PROGRAMME MIT PLUGINS ERWEITERN C# - PROGRAMME MIT PLUGINS ERWEITERN Schreibt man ein Programm welches erweiterbar sein soll, dann gibt es häufig mehrere Möglichkeiten dies umzusetzen. Die Objektorientierung ist dabei der erste Schritt,

Mehr

Fortgeschrittene Servlet- Techniken. Ralf Gitzel ralf_gitzel@hotmail.de

Fortgeschrittene Servlet- Techniken. Ralf Gitzel ralf_gitzel@hotmail.de Fortgeschrittene Servlet- Techniken Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Servlet Initialisierung Attribute und Gültigkeitsbereiche Sessions

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Makros erstellen und aufrufen Dr. V.Thormählen

Makros erstellen und aufrufen Dr. V.Thormählen Inhalt Mit Makros arbeiten... 2 Makro erstellen... 3 Makro aufrufen... 4 1. Tastenkürzel zuordnen... 4 2. Schnellzugriffsleiste anpassen... 6 3. Menüband anpassen... 8 Fazit... 11 Listings Listing 1: Codezeilen

Mehr

Benutzerdokumentation Web-Portal

Benutzerdokumentation Web-Portal GRUPP: SWT0822 Benutzerdokumentation Web-Portal Yet Another Reversi Game Martin Gielow, Stephan Mennicke, Daniel Moos, Christine Schröder, Christine Stüve, Christian Sura 05. Mai 2009 Inhalt 1. Einleitung...3

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

ESB. Open Source ESB: Mule Flightreservation. Res Gilgen Hochschule Luzern [Wählen Sie das Datum aus]

ESB. Open Source ESB: Mule Flightreservation. Res Gilgen Hochschule Luzern [Wählen Sie das Datum aus] ESB Open Source ESB: Mule Flightreservation Res Gilgen Hochschule Luzern [Wählen Sie das Datum aus] Inhalt 1. Open Source ESB: Mule... 2 1.1. Überblick... 2 1.1.1. Das Beispiel Zeigt:... 2 1.2. Installationsanleitung...

Mehr

Merkblatt: HSM. Version 1.01. Systemvoraussetzungen, Setup und Trouble Shooting. pdfsupport@pdf-tools.com

Merkblatt: HSM. Version 1.01. Systemvoraussetzungen, Setup und Trouble Shooting. pdfsupport@pdf-tools.com Merkblatt: HSM Version 1.01 Systemvoraussetzungen, Setup und Trouble Shooting Kontakt: pdfsupport@pdf-tools.com Besitzer: PDF Tools AG Kasernenstrasse 1 8184 Bachenbülach Schweiz www.pdf-tools.com Copyright

Mehr

Praktikum Internetprotokolle - POP3

Praktikum Internetprotokolle - POP3 Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Praktische Informatik und Medieninformatik Fachgebiet Telematik/Rechnernetze 19. Mai 2008 1 Aufgabenstellung Praktikum

Mehr

Softwaretests. Werkzeuge zur Automatisierung. Thementag Wer testet, ist feige. Autor: für 24.06.2009. Markus Alvermann.

Softwaretests. Werkzeuge zur Automatisierung. Thementag Wer testet, ist feige. Autor: für 24.06.2009. Markus Alvermann. Softwaretests Werkzeuge zur Automatisierung für Thementag Wer testet, ist feige 24.06.2009 Autor: Markus Alvermann Seite 2 / 39 Agenda Motivation Versionsverwaltung Build-Tools Unit-Tests GUI-Tests Continuous

Mehr

Access und OpenOffice.org

Access und OpenOffice.org Access-Datenbanken in OpenOffice.org 1.1 einbinden Herausgegeben durch das OpenOffice.org Germanophone-Projekt Autoren Autoren vorhergehender Versionen Timo Kozlowski Alle in diesem Dokument erwähnten

Mehr

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013 TgZero Technik.Blosbasis.net April 1, 2013 1 Inhaltsverzeichnis 1 Makefile 3 1.1 Was sind Makefiles?........................ 3 2 Bakefile 3 3 Aufbau einer Bakefile 4 3.1 Targets...............................

Mehr

Das Interceptor Muster

Das Interceptor Muster Das Interceptor Muster Implementierung des Interceptor Musters basierend auf OSGi and Friends Benjamin Friedrich Hochschule für Technik und Wirtschaft des Saarlandes Praktische Informatik - Entwurfsmuster

Mehr

Test-Strategien. Grundsätzliches Blackbox-Testen Whitebox-Testen Graybox-Testen Ablauf von Tests Zusammenfassung. HS Mannheim

Test-Strategien. Grundsätzliches Blackbox-Testen Whitebox-Testen Graybox-Testen Ablauf von Tests Zusammenfassung. HS Mannheim Test- Grundsätzliches - - - Ablauf von Tests Grundsätzliche Test- -Tests Äquivalenzklassenbildung Randwertanalyse -Tests Man unterscheidet verschiedene Überdeckungsgrade: Statement Coverage Decision Coverage,

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 JUnit - Test Driven Development Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1 Gliederung 1.Einleitung 1.1 Geschichte 1.2 Was sind Unit-Tests? 1.3 Failures/Errors 1.4 Ziele und Nutzen

Mehr

A) Durchsuchen von Datenbanken im Internet durch Endnote

A) Durchsuchen von Datenbanken im Internet durch Endnote EINLEITUNG/ANWEISUNGEN ZU DIESEM TEXT Wir werden die obere Liste (File/ Edit usw.) benutzen, obwohl die meisten Funktionen auch möglich mit rechtem Mausklick, mit Kombinationen der Tastatur oder mit den

Mehr

zlib-lizenz (kompatibel zur GNU General Public License )

zlib-lizenz (kompatibel zur GNU General Public License ) 2 NUnit 2.1 Homepage http://www.nunit.org 2.2 Lizenz zlib-lizenz (kompatibel zur GNU General Public License ) 2.3 Untersuchte Version NUnit 2.5.9.10348 2.4 Letzter Untersuchungszeitpunkt 07.02.2011 2.5

Mehr

1. Java Grundbegriffe

1. Java Grundbegriffe 1. Java Grundbegriffe Geschichte von Java Programmieren mit Java Interpretieren vs. Kompilieren Java Byte-Code Jave Virtual Machine Arbeitsmaterialien Allgemeine Informatik 2 SS09 Folie 1.1 Java, eine

Mehr

crm-now/ps Anwenderhandbuch für die Thunderbird Erweiterung Zweite Ausgabe

crm-now/ps Anwenderhandbuch für die Thunderbird Erweiterung Zweite Ausgabe crm-now/ps Anwenderhandbuch für die Thunderbird Erweiterung Zweite Ausgabe crm-now/ps: Copyright 2006 crm-now Versionsgeschichte Version 02 08.09.2006 Release Version Version 01 16.06.2005 crm-now c/o

Mehr

Verwendung der Report-Funktion in der ArtemiS SUITE (ab Version 5.0)

Verwendung der Report-Funktion in der ArtemiS SUITE (ab Version 5.0) Verwendung der (ab Version 5.0) In der ArtemiS SUITE steht eine neue, sehr flexible Reporting-Funktion zur Verfügung, die mit der Version 5.0 noch einmal verbessert wurde. Die vorliegende beschreibt den

Mehr

UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18

UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18 UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18 Software Testing Automatisiert Manuell 100% 70% 1 Überwiegender Teil der Testing Tools fokusiert auf automatisiertes Testen Microsoft

Mehr

09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten

09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten Aktuelle Themen der Wirtschaftsinformatik Zusammenfassung 09.06.2003 André Maurer andre@maurer.name www.andre.maurer.name Wirtschaftsinformatik FH 3.5 Fachhochschule Solothurn, Olten 1 Serverseitige Webprogrammierung

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

1. BlueJ installieren (nach dem Buch Java lernen mit BlueJ von David J. Barnes; Michael Kölling)

1. BlueJ installieren (nach dem Buch Java lernen mit BlueJ von David J. Barnes; Michael Kölling) 1. BlueJ installieren... 1 2. BlueJ auf die deutsche Version umstellen... 1 3. BlueJ Extensions... 2 a. Klassenkarte... 2 i. UML Extension... 2 ii. Klassenkarte zum Schulbuch... 3 b. CNU BlueJ Code Formatter...

Mehr

Informatik Kurs 12 André Hoffmann. Delphi. Einführung in die Windows- Programmierung

Informatik Kurs 12 André Hoffmann. Delphi. Einführung in die Windows- Programmierung Informatik Kurs 12 André Hoffmann Delphi Einführung in die Windows- Programmierung Grundlagen Entwicklung von Windows-Programmen Relativ unkompliziert durch typische, vorgefertigte Elemente Programmiertechnische

Mehr

1 Installationen. 1.1 Installationen unter Windows

1 Installationen. 1.1 Installationen unter Windows 1 Installationen Dieses Kapitel beschreibt die Installationen, die für die Nutzung von PHP und MySQL unter Windows, unter Ubuntu Linux und auf einem Mac mit OS X notwendig sind. 1.1 Installationen unter

Mehr

Ausbildung. Ausbildung. Stuttgart

Ausbildung. Ausbildung. Stuttgart Ausbildung Ausbildung Stuttgart Ausbildung im DLR Stuttgart Sie suchen eine interessante und abwechslungsreiche Ausbildung? Sie begeistern sich für aktuelle Forschungs- und Entwicklungsthemen aus Luft-

Mehr

12. ArcView-Anwendertreffen 2010. Workshop Programmierung in ArcGIS. Daniel Fuchs. Wo kann eigene Programmierung in ArcGIS verwendet werden?

12. ArcView-Anwendertreffen 2010. Workshop Programmierung in ArcGIS. Daniel Fuchs. Wo kann eigene Programmierung in ArcGIS verwendet werden? Wo kann eigene Programmierung in ArcGIS verwendet werden? 12. ArcView-Anwendertreffen 2010 Workshop Programmierung in ArcGIS Daniel Fuchs 1) Makros für die Automatisierung einzelner Arbeitsschritte im

Mehr

25. Februar 2009, Version 1.0. Installationsanleitung Tivoli Storage Manager für Windows. Verwaltungsdirektion. Informatikdienste

25. Februar 2009, Version 1.0. Installationsanleitung Tivoli Storage Manager für Windows. Verwaltungsdirektion. Informatikdienste 25. Februar 2009, Version 1.0 Installationsanleitung für Windows Verwaltungsdirektion Informatikdienste Installationsanleitung für Windows Inhaltsverzeichnis...1 Installation... 1 Voraussetzungen...1 Ablauf

Mehr

RIWA NetUpdater Tool für automatische Daten- und Softwareupdates

RIWA NetUpdater Tool für automatische Daten- und Softwareupdates RIWA NetUpdater Tool für automatische Daten- und Softwareupdates Grundlegendes... 1 Ausführbare Dateien und Betriebsmodi... 2 netupdater.exe... 2 netstart.exe... 2 netconfig.exe... 2 nethash.exe... 2 Verzeichnisse...

Mehr

RÖK Typo3 Dokumentation

RÖK Typo3 Dokumentation 2012 RÖK Typo3 Dokumentation Redakteur Sparten Eine Hilfe für den Einstieg in Typo3. Innpuls Werbeagentur GmbH 01.01.2012 2 RÖK Typo3 Dokumentation Inhalt 1) Was ist Typo3... 3 2) Typo3 aufrufen und Anmelden...

Mehr

FlowFact Alle Versionen

FlowFact Alle Versionen Training FlowFact Alle Versionen Stand: 29.09.2005 Brief schreiben, ablegen, ändern Die FlowFact Word-Einbindung macht es möglich, direkt von FlowFact heraus Dokumente zu erzeugen, die automatisch über

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Installation Anleitung für JTheseus und MS SQL Server 2000

Installation Anleitung für JTheseus und MS SQL Server 2000 Installation Anleitung für JTheseus und MS SQL Server 2000 Inhaltsverzeichnis 1 Installation der Datenbank 3 1.1 Erstellen der Datenbank 3 1.2 Tabellen und Minimal Daten einlesen 4 1.3 Benutzer JTheseus

Mehr

Anleitung zu Projekte

Anleitung zu Projekte Web Site Engineering GmbH Anleitung zu Projekte Projekte im WPS Version 4.3 Seite 1 Projekte verwalten...1 2 Projekt hinzufügen...4 3 Projekt löschen...9 4 Projekt ändern...9 5 Projektdaten drucken und

Mehr

Programmierung eines GIMP-Plugin

Programmierung eines GIMP-Plugin Programmierung eines GIMP-Plugin Was ist GIMP? GNU Image Manipulation Program Bildbearbeitungssoftware Bildkonvertierer Open Source Erweiterbar durch Plugins Mögliche Programmiersprachen für Plugin-Entwicklung

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Handbuch TweetMeetsMage

Handbuch TweetMeetsMage Handbuch TweetMeetsMage für Version 0.1.0 Handbuch Version 0.1 Zuletzt geändert 21.01.2012 Inhaltsverzeichnis 1 Einleitung... 3 1.1 Voraussetzungen... 3 1.2 Funktionsübersicht... 3 2 Installation... 4

Mehr

ANT. Kurzvortrag von Manuel Schulze. mschulze@inf.fu-berlin.de

ANT. Kurzvortrag von Manuel Schulze. mschulze@inf.fu-berlin.de ANT Kurzvortrag von Manuel Schulze mschulze@inf.fu-berlin.de ANT Überblick Teilprojekt der Apache Software Foundation [1] ANT ist Opensource Build-Tool ähnlich wie make (?) jedoch voll auf Java zugeschnitten

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Testen von Software. GUI-Testing: Jemmy & Marathon

Testen von Software. GUI-Testing: Jemmy & Marathon Testen von Software GUI-Testing: Jemmy & Marathon Kurzüberblick Jemmy: Marathon: Ist eine Java-Bibliothek Zum Testen von Java-GUI- Applikationen Enthält Methoden, um Benutzereingaben bei Swing/AWT Komponenten

Mehr

Internetanbindung von Datenbanken

Internetanbindung von Datenbanken Internetanbindung von Datenbanken Python und CGI CGI und Perl-1 Gliederung Die Programmiersprache Python CGI in Python Datenbankanbindung Umsetzungskonzepte Zusammenfassung Realisierung Python und CGI-2

Mehr

xcall Technische Dokumentation

xcall Technische Dokumentation xcall Technische Dokumentation zu Version 4.x Autor: Martin Roth Erstelldatum: 14.08.2008 Version: 1.4 Seite 2 / 7 Zweck...3 Schnittstellenarchitektur...3 Outbound-Schnittstellen...3 Outlook...3 TwixTel...3

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Benutzerhandbuch für FaxClient für HylaFAX

Benutzerhandbuch für FaxClient für HylaFAX Benutzerhandbuch für FaxClient für HylaFAX Vielen Dank, daß Sie entschlossen haben, dieses kleine Handbuch zu lesen. Es wird Sie bei der Installation und Benutzung des FaxClients für HylaFAX unterstützen.

Mehr

VisiScan 2011 für cobra 2011 www.papyrus-gmbh.de

VisiScan 2011 für cobra 2011 www.papyrus-gmbh.de Überblick Mit VisiScan für cobra scannen Sie Adressen von Visitenkarten direkt in Ihre Adress PLUS- bzw. CRM-Datenbank. Unterstützte Programmversionen cobra Adress PLUS cobra Adress PLUS/CRM 2011 Ältere

Mehr

Microsoft Access 2010 Bilder

Microsoft Access 2010 Bilder Microsoft Access 2010 Bilder Hyperlinks... arbeiten ähnlich wie ein Link in einer Webseite. sind ein Verweis auf eine Datei (access2010\material\beispiel\tabledevelop\automat.accdb). können ein Verweis

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Softwareentwicklungspraktikum Sommersemester 2007. Testdokumentation

Softwareentwicklungspraktikum Sommersemester 2007. Testdokumentation Softwareentwicklungspraktikum Sommersemester 2007 Testdokumentation Auftraggeber Technische Universität Braunschweig

Mehr

AVR-Programmierung unter Mac OSX

AVR-Programmierung unter Mac OSX AVR-Programmierung unter Mac OSX im Studiengang BEL3 Lehrveranstaltung Embedded Systems Tutorial ausgeführt von: Jürgen Hausladen A-2460 Bruck/Leitha, Obere Neugasse 6 Wien 01.02.2011 Inhaltsverzeichnis

Mehr