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

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

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

Kompilieren und Linken

Kompilieren und Linken Kapitel 2 Kompilieren und Linken Bevor wir uns auf C++ selbst stürzen, brauchen wir einiges Vorgeplänkel, wie man komfortabel ein größeres C++- kompilieren kann. Mit Java stellt sich der Kompiliervorgang

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

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

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Installation SQL- Server 2012 Single Node

Installation SQL- Server 2012 Single Node Installation SQL- Server 2012 Single Node Dies ist eine Installationsanleitung für den neuen SQL Server 2012. Es beschreibt eine Single Node Installation auf einem virtuellen Windows Server 2008 R2 mit

Mehr

Handbuch für die Erweiterbarkeit

Handbuch für die Erweiterbarkeit Handbuch für die Erweiterbarkeit Inhalt Pakete für die Erweiterbarkeit... 2 Actions... 2 Items... 2 Itemset... 2 Die UseCaseNewAction... 3 Eigene Shapes... 4 Der Shape Container... 5 User Objects... 6

Mehr

Python SVN-Revision 12

Python SVN-Revision 12 Python SVN-Revision 12 Uwe Ziegenhagen 7. Januar 2012 Vorwort Dieses Skript erhebt keinen Anspruch auf Vollständigkeit oder Richtigkeit. Es wird geschrieben, um mir als Gedächtnisstütze für den Umgang

Mehr

Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM. Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher

Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM. Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher Schlussbewertung FB VI SOFTWAREPROJEKT II WS 09/10 TEAM Alexander Kalden Dominik Eckelmann Marcel Pierry Julian Heise Besha Taher 729631 745097 736477 745011 741297 Inhalt Schlussbewertung... 3 Bewertung

Mehr

PND Tool Quellcodegenerierung

PND Tool Quellcodegenerierung PND Tool Quellcodegenerierung Handbuch Autor: Heiko Weiß Inhaltsverzeichnis 1 Allgemeines 3 2 Systemanforderungen 3 3 Anforderungen an ein Petrinetz 3 4 Bibliotheken 3 5 Petrinetzdatei und Bibliothek laden

Mehr

ObjectBridge Java Edition

ObjectBridge Java Edition ObjectBridge Java Edition Als Bestandteil von SCORE Integration Suite stellt ObjectBridge Java Edition eine Verbindung von einem objektorientierten Java-Client zu einer fast beliebigen Server-Komponente

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

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Benutzeroberflächen. Java Teil 4

Benutzeroberflächen. Java Teil 4 Benutzeroberflächen Java Teil 4 Einleitung Eine grafische Benutzeroberfläche (Graphical User Interface) ermöglicht dem Benutzer die Interaktion mit dem Computer über grafische Symbole. Die GUI haben in

Mehr

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls

Testen mit JUnit. Apcon Workplace Solutions Member of itelligence. Testen von Java-Code mit JUnit. ÿstruktur eines Testfalls Testen von Java-Code mit JUnit ÿmotivation ÿjunit-testklassen ÿjunit-testfälle ÿstruktur eines Testfalls Henning Wolf APCON Workplace Solutions GmbH wolf@jwam.de Motivation: Werkzeugunterstützung für Tests

Mehr

Glossar. SVG-Grafiken in Bitmap-Grafikformate. Anweisung Eine Anweisung ist eine Folge aus Schlüsselwörtern, Variablen, Objekten,

Glossar. SVG-Grafiken in Bitmap-Grafikformate. Anweisung Eine Anweisung ist eine Folge aus Schlüsselwörtern, Variablen, Objekten, Glossar Anweisung Eine Anweisung ist eine Folge aus Schlüsselwörtern, Variablen, Objekten, Methoden und/oder Eigenschaften, die eine bestimmte Berechnung ausführt, eine Eigenschaft ändert oder eine Methode

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

JSF (JavaServer Faces) Erstellen einer Webseite

JSF (JavaServer Faces) Erstellen einer Webseite Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski JSF (JavaServer Faces) Erstellen einer Webseite Dipl. Inf. Manuel Götz Dipl. Inf.

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

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw, 16.04.2013

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw, 16.04.2013 Software Komponenten FS13 Gruppe 03 Horw, 16.04.2013 Bontekoe Christian Estermann Michael Moor Simon Rohrer Felix Autoren Bontekoe Christian Studiengang Informatiker (Berufsbegleitend) Estermann Michael

Mehr

Prozedurale Datenbank- Anwendungsprogrammierung

Prozedurale Datenbank- Anwendungsprogrammierung Idee: Erweiterung von SQL um Komponenten von prozeduralen Sprachen (Sequenz, bedingte Ausführung, Schleife) Bezeichnung: Prozedurale SQL-Erweiterung. In Oracle: PL/SQL, in Microsoft SQL Server: T-SQL.

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

Nutzerhandbuch Softwaresystem Inspirata. Benutzerhandbuch Softwaresystem Inspirata

Nutzerhandbuch Softwaresystem Inspirata. Benutzerhandbuch Softwaresystem Inspirata Benutzerhandbuch Softwaresystem Inspirata 1 Inhaltsverzeichnis 1. Login und Logout... 3 2. Kalender/Buchungen auswählen... 5 3. Betreuer... 7 3.1 Buchung anlegen... 7 3.2 Betreuer zuordnen... 8 3.3 Notiz

Mehr

Modulare Programmierung und Bibliotheken

Modulare Programmierung und Bibliotheken Modulare Programmierung und Bibliotheken Proseminar-Vortrag am 24.06.2011 von Ludwig Eisenblätter Ludwig Eisenblätter 1 von 25 Modulare Programmierung und Bibliotheken Inhaltsübersicht Motivation / Einleitung

Mehr

8a. Exkurs.NET. 8a.1.NET Architektur

8a. Exkurs.NET. 8a.1.NET Architektur 8a. Exkurs.NET Inhalt: 8a.1.NET Architektur 8a.2 Kooperation von Anwendungen über ADO -.NET 8a.3 Unterschiede gegenüber gewöhnlicher WIN32- Programmierung 1 8a.1.NET Architektur Bislang wurden die C/C++

Mehr

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth Tutorial: Eigene Module und Extensions entwickeln Version: 0.1 Autor: Anja Beuth Inhaltsverzeichnis 1 2 2.1 2.2 2.3 2.4 3 4 4.1 4.2 4.3 5 5.1 6 6.1 6.2 Notwendigkeit prüfen... Ein Projekt in Visual Studio

Mehr

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging Servlet Debugging Markus Völter, voelter@acm.org, www.voelter.de Bei der Arbeit mit Servlets kommt man recht schnell an den Punkt, an dem man Servlets vernünftig testen oder debuggen will. Mit Hilfe des

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

GUI Programmierung mit GTK

GUI Programmierung mit GTK LinuxFocus article number 295 http://linuxfocus.org GUI Programmierung mit GTK by Özcan Güngör About the author: Ich benutze Linux seit 1997. Freiheit, Flexibilität, Open

Mehr

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

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

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen

Mehr

Tutorial. Bibliothek AutoGUITest V1.0. Windows-Benutzeroberflächen automatisiert testen. Ausgabe: 6.6.02. 06.06.02 / 13:51 Seite 1

Tutorial. Bibliothek AutoGUITest V1.0. Windows-Benutzeroberflächen automatisiert testen. Ausgabe: 6.6.02. 06.06.02 / 13:51 Seite 1 Bibliothek AutoGUITest V1.0 Windows-Benutzeroberflächen automatisiert testen Tutorial Ausgabe: 6.6.02 06.06.02 / 13:51 Seite 1 Inhalt 1 Übersicht...3 2 Funktionsweise...3 3 Funktionsumfang...3 4 Einsatz

Mehr

Anzeige des Java Error Stack in Oracle Forms

Anzeige des Java Error Stack in Oracle Forms Anzeige des Java Error Stack in Oracle Forms (Version 2.0) Juni 2008 Autoren: Jürgen Menge / Thomas Robert Seite 1 von 7 Oracle Forms bietet seit der Version 6i die Möglichkeit, serverseitig Java-Klassen

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

egenix PyRun Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany

egenix PyRun Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany Python Runtime in einer einzigen 12MB Datei FrOSCon 2012 Sankt Augustin Marc-André Lemburg EGENIX.COM Software GmbH Langenfeld, Germany Marc-André Lemburg Geschäftsführer der egenix.com GmbH Mehr als 20

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

Kurzanleitung zu XML2DB

Kurzanleitung zu XML2DB Kurzanleitung zu XML2DB Inhaltsverzeichnis 1. Einleitung...3 2. Entwicklungsumgebung...3 3. Betriebsanleitung...3 3.1 Einrichten der Java Umgebung...3 3.2 Allgemeines zu java und javac...4 3.2.1 Allgemeines

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

Das Test-Framework JUnit ETIS SS04

Das Test-Framework JUnit ETIS SS04 Das Test-Framework JUnit ETIS SS04 Gliederung Motivation TestFirst Grundlagen Assert TestCase Lebenszyklus TestCase UML-Diagramm TestCase TestSuite Zusammenfassung 2 Motivation (I) Kostspielige Folgen

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Pflichtenheft. AI-Soccer Frontend 2004/2005

Pflichtenheft. AI-Soccer Frontend 2004/2005 Pflichtenheft AI-Soccer Frontend 2004/2005 Teilnehmer : Hanno Hugenberg Jens Henneberg Mathias Otto Betreuer: Prof. Maic Masuch Jan Fritz 1 Inhalt : 1. Aufgabenstellung 3 2. Lösungsansatz 3 3. Aufbau des

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

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 Kapitel 33 Der xml-datentyp In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 995 996 Kapitel 33: Der xml-datentyp Eine der wichtigsten

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

Unit Testing, SUnit & You

Unit Testing, SUnit & You HUMBOLDT-UNIVERSITÄT ZU BERLIN MENSCH-TECHNIK-INTERAKTION ARBEITSGRUPPE SOFTWARETECHNIK (INSTITUT FÜR INFORMATIK) ARBEITSGRUPPE INGENEURPSYCHOLOGIE (INSTITUT FÜR PSYCHOLOGIE) Unit Testing, SUnit & You

Mehr

Bedienungsanleitung EasyStechuhr

Bedienungsanleitung EasyStechuhr Thomas Schiffler Langestrasse 4 65366 Geisenheim http://www.thomasschiffler.de info@thomasschiffler.de Version 1.2 Inhaltsverzeichnis Inhaltsverzeichnis... 2 Einleitung... 3 Datenspeicherung... 3 Grundvoraussetzung...

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

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

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen L AKTUEL ZU fritz JOBST JAVA 8 PROGRAMMIEREN IN JAVA 7. Auflage Im Internet: Alle Beispielprogramme und Lösungen 4 1 Der Einstieg in Java keinem Fall zulässig. Die Schreibweisen Hello.java für den Namen

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

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

Funktionen in PHP 1/7

Funktionen in PHP 1/7 Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt

Mehr

SharePoint Schnittstelle für Microsoft Dynamics CRM 2011

SharePoint Schnittstelle für Microsoft Dynamics CRM 2011 SharePoint Schnittstelle für Microsoft Dynamics CRM 2011 Benutzerhandbuch zur SharePoint Schnittstelle für MS CRM 2011 Schnittstellenversion: 5.2.2 Dokumentenversion: 3.1 Inhalt 1. Vorwort... 4 2. Funktionsbeschreibung...

Mehr

bnsyncservice Installation und Konfiguration bnnetserverdienst Voraussetzungen: KWP Informationssysteme GmbH Technische Dokumentation

bnsyncservice Installation und Konfiguration bnnetserverdienst Voraussetzungen: KWP Informationssysteme GmbH Technische Dokumentation bnsyncservice Voraussetzungen: Tobit DAVID Version 12, DVWIN32: 12.00a.4147, DVAPI: 12.00a.0363 Exchange Server (Microsoft Online Services) Grundsätzlich wird von Seiten KWP ausschließlich die CLOUD-Lösung

Mehr

Datenbanken & Informationssysteme Übungen Teil 1

Datenbanken & Informationssysteme Übungen Teil 1 Programmierung von Datenbankzugriffen 1. Daten lesen mit JDBC Schreiben Sie eine Java-Anwendung, die die Tabelle Books in der Datenbank azamon ausgibt. Verwenden Sie dabei die SQL-Anweisung select * from

Mehr

Testen mit JUnit. Motivation

Testen mit JUnit. Motivation Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen

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

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

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

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Benutzerdokumentation Hosted Backup Services Client

Benutzerdokumentation Hosted Backup Services Client Benutzerdokumentation Hosted Backup Services Client Geschäftshaus Pilatushof Grabenhofstrasse 4 6010 Kriens Version 1.1 28.04.2014 Inhaltsverzeichnis 1 Einleitung 4 2 Voraussetzungen 4 3 Installation 5

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 1 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2015 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello! 12.10.2015 Dr. Werner Struckmann / Stephan

Mehr

Integration Services - Dienstarchitektur

Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Dieser Artikel solle dabei unterstützen, Integration Services in Microsoft SQL Server be sser zu verstehen und damit die

Mehr

Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE

Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE EF-III-A6 Einführung in Eclipse Seite 1 von 5 Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE Erläuterung Eclipse/IDE Eclipse ist eine integrierte Open-Source-Entwicklungsumgebung für Software

Mehr

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Projekte per DOM bearbeiten KAPITEL 5 5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Bisher haben wir uns angesehen, wie List & Label mit Ihren Daten bekannt gemacht werden kann und

Mehr

Java - Webapplikationen

Java - Webapplikationen Java - Webapplikationen Bestandteile (HTTP,, JSP) Aufbau (Model View Controller) Datenverwaltung (Java Beans, Sessions) Entwicklung (Projektstruktur, Sysdeoplugin für Eclipse) 17. Januar 2006 Jan Hatje

Mehr

OP 2005: Änderungen Mailimport

OP 2005: Änderungen Mailimport OP 2005: Änderungen Mailimport 02.01.2008 Dokumentation Original auf SharePoint Doku zu OP 2005 JT-Benutzerkonfiguration - EMail In dieser Registerkarte können Sie die E-Mail-Konfiguration, des Benutzers

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

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

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann Einführung in das Microsoft.NET-Framework Programmiersprache C# 02: Visual Studio / Hello World Boris Hülsmann 23.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

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

WORKFLOW DESIGNDOKUMENT

WORKFLOW DESIGNDOKUMENT Architectural Design WORKFLOW DESIGNDOKUMENT Softwareentwicklung Praktikum, Übungsbeispiel 2 Gruppe 86 Andreas Hechenblaickner [0430217] Daniela Kejzar [0310129] Andreas Maller [0431289] Gruppe 86 Seite

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

TYPO3 Redaktoren-Handbuch

TYPO3 Redaktoren-Handbuch TYPO3 Redaktoren-Handbuch Kontakt & Support: rdv interactive ag Arbonerstrasse 6 9300 Wittenbach Tel. 071 / 577 55 55 www.rdvi.ch Seite 1 von 38 Login http://213.196.148.40/typo3 Username: siehe Liste

Mehr

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54

PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54 PHP 5.4 Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012 Grundlagen zur Erstellung dynamischer Webseiten ISBN 978-3-86249-327-2 GPHP54 5 PHP 5.4 - Grundlagen zur Erstellung dynamischer Webseiten

Mehr

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1 Automatisierte Erstellung von Software-Builds und -dokumentationen Teil 1 Autoren: Hagedorn, Robert; Denninger, Oliver Kontakt: {hagedorn denninger}@fzi.de Web: http://zfs.fzi.de Ort, Datum: Karlsruhe,

Mehr

Installationsanleitung für R

Installationsanleitung für R Installationsanleitung für R R ist eine Programmiersprache und Statistiksoftware zur Analyse von Daten und deren graphischer Darstellung. Um in R zu programmieren, ist zunächst die R- Basissoftware zu

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Datenspooler Installationsanleitung Gültig ab Datenspooler-Version 2.2.20.X

Datenspooler Installationsanleitung Gültig ab Datenspooler-Version 2.2.20.X Datenspooler Installationsanleitung Gültig ab Datenspooler-Version 2.2.20.X Inhalt 1. Vorbedingungen... 4 2. Installation... 5 2.1. Umstellung von Datenspooler Version A.03.09 auf Datenspooler-Version

Mehr

Java für C++ Programmierer

Java für C++ Programmierer Java für C++ Programmierer Alexander Bernauer bernauer@inf.ethz.ch Einführung in die Übungen zu Informatik II (D ITET) FS2010 ETH Zürich Ziel Allgemeiner Überblick Kennenlernen der Suchbegriffe Warum Java?

Mehr

ESB - Elektronischer Service Bericht

ESB - Elektronischer Service Bericht Desk Software & Consulting GmbH ESB - Elektronischer Service Bericht Dokumentation des elektronischen Serviceberichts Matthias Hoffmann 25.04.2012 DESK Software und Consulting GmbH Im Heerfeld 2-4 35713

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

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

Multivariate Tests mit Google Analytics

Multivariate Tests mit Google Analytics Table of Contents 1. Einleitung 2. Ziele festlegen 3. Einrichtung eines Multivariate Tests in Google Analytics 4. Das JavaScript 5. Die Auswertung der Ergebnisse Multivariate Tests mit Google Analytics

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

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

Proseminar: Website-Management-Systeme

Proseminar: Website-Management-Systeme Proseminar: Website-Management-Systeme Thema: Web: Apache/Roxen von Oliver Roeschke email: o_roesch@informatik.uni-kl.de Gliederung: 1.) kurze Einleitung 2.) Begriffsklärung 3.) Was ist ein Web? 4.) das

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

Das Handbuch zu KSnapshot

Das Handbuch zu KSnapshot Richard J. Moore Robert L. McCormick Brad Hards Korrektur: Lauri Watts Entwickler: Richard J Moore Entwickler: Matthias Ettrich Übersetzung des Handbuchs: Robert Gogolok Übersetzung des Handbuchs: Kilian

Mehr

Server-Eye. Stand 30.07.2013 WWW.REDDOXX.COM

Server-Eye. Stand 30.07.2013 WWW.REDDOXX.COM Server-Eye Stand 30.07.2013 Copyright 2012 by REDDOXX GmbH REDDOXX GmbH Neue Weilheimer Str. 14 D-73230 Kirchheim Fon: +49 (0)7021 92846-0 Fax: +49 (0)7021 92846-99 E-Mail: info@reddoxx.com Internet: http://www.reddoxx.com

Mehr

Typo 3 installieren. Schritt 1: Download von Typo3

Typo 3 installieren. Schritt 1: Download von Typo3 Typo 3 installieren Bevor Sie Typo3 installieren, müssen Sie folgende Informationen beachten: Typo3 benötigt eine leere Datenbank. Mit Ihrem Abonnement verfügen Sie über eine einzige Datenbank. Sie können

Mehr

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

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

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

Dokumentation. juris Autologon-Tool. Version 3.1

Dokumentation. juris Autologon-Tool. Version 3.1 Dokumentation juris Autologon-Tool Version 3.1 Inhaltsverzeichnis: 1. Allgemeines... 3 2. Installation Einzelplatz... 3 3. Installation Netzwerk... 3 4. Konfiguration Netzwerk... 3 4.1 Die Autologon.ini...

Mehr