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

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

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

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

Artikel Schnittstelle über CSV

Artikel Schnittstelle über CSV Artikel Schnittstelle über CSV Sie können Artikeldaten aus Ihrem EDV System in das NCFOX importieren, dies geschieht durch eine CSV Schnittstelle. Dies hat mehrere Vorteile: Zeitersparnis, die Karteikarte

Mehr

Step by Step Webserver unter Windows Server 2003. von Christian Bartl

Step by Step Webserver unter Windows Server 2003. von Christian Bartl Step by Step Webserver unter Windows Server 2003 von Webserver unter Windows Server 2003 Um den WWW-Server-Dienst IIS (Internet Information Service) zu nutzen muss dieser zunächst installiert werden (wird

Mehr

EasyWk DAS Schwimmwettkampfprogramm

EasyWk DAS Schwimmwettkampfprogramm EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage

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

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

CMS.R. Bedienungsanleitung. Modul Cron. Copyright 10.09.2009. www.sruttloff.de CMS.R. - 1 - Revision 1

CMS.R. Bedienungsanleitung. Modul Cron. Copyright 10.09.2009. www.sruttloff.de CMS.R. - 1 - Revision 1 CMS.R. Bedienungsanleitung Modul Cron Revision 1 Copyright 10.09.2009 www.sruttloff.de CMS.R. - 1 - WOZU CRON...3 VERWENDUNG...3 EINSTELLUNGEN...5 TASK ERSTELLEN / BEARBEITEN...6 RECHTE...7 EREIGNISSE...7

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

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

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

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 Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009 Testen von Software Systemen Übung 02 SS 2009 Version: 1.0 09.06.2009 Komponententest Kunde: Dr. Reinhold Plösch Dr. Johannes Sametinger Kundenreferenz: 259.019 Team 19 Mitarbeiter: Christian Märzinger

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

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar 2015. ZID Dezentrale Systeme

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar 2015. ZID Dezentrale Systeme Novell Client Anleitung zur Verfügung gestellt durch: ZID Dezentrale Systeme Februar 2015 Seite 2 von 8 Mit der Einführung von Windows 7 hat sich die Novell-Anmeldung sehr stark verändert. Der Novell Client

Mehr

Speichern. Speichern unter

Speichern. Speichern unter Speichern Speichern unter Speichern Auf einem PC wird ständig gespeichert. Von der Festplatte in den Arbeitspeicher und zurück Beim Download Beim Kopieren Beim Aufruf eines Programms Beim Löschen Beim

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

Task: Nmap Skripte ausführen

Task: Nmap Skripte ausführen Task: Nmap Skripte ausführen Inhalt Einfache Netzwerkscans mit NSE Ausführen des Scans Anpassung der Parameter Einleitung Copyright 2009-2015 Greenbone Networks GmbH Herkunft und aktuellste Version dieses

Mehr

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Windows 8 Systemsteuerung > Programme > Windows Features aktivieren / deaktivieren > Im Verzeichnisbaum

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

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Serienbrief aus Outlook heraus Schritt 1 Zuerst sollten Sie die Kontakte einblenden, damit Ihnen der Seriendruck zur Verfügung steht. Schritt 2 Danach wählen Sie bitte Gerhard Grünholz 1 Schritt 3 Es öffnet

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Dokumentation: Balanced Scorecard

Dokumentation: Balanced Scorecard Dokumentation: Balanced Scorecard 1. Einleitung Eine Balanced Scorecard (BSC) ist eine kennzahlenbasierte Managementmethode, welche sowohl Visionen als auch Strategien eines Unternehmens und relevante

Mehr

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt. Eine Weitergabe

Mehr

Wie halte ich Ordnung auf meiner Festplatte?

Wie halte ich Ordnung auf meiner Festplatte? Wie halte ich Ordnung auf meiner Festplatte? Was hältst du von folgender Ordnung? Du hast zu Hause einen Schrank. Alles was dir im Wege ist, Zeitungen, Briefe, schmutzige Wäsche, Essensreste, Küchenabfälle,

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

DOKUMENTATION VOGELZUCHT 2015 PLUS

DOKUMENTATION VOGELZUCHT 2015 PLUS DOKUMENTATION VOGELZUCHT 2015 PLUS Vogelzucht2015 App für Geräte mit Android Betriebssystemen Läuft nur in Zusammenhang mit einer Vollversion vogelzucht2015 auf einem PC. Zusammenfassung: a. Mit der APP

Mehr

Qt-Projekte mit Visual Studio 2005

Qt-Projekte mit Visual Studio 2005 Qt-Projekte mit Visual Studio 2005 Benötigte Programme: Visual Studio 2005 Vollversion, Microsoft Qt 4 Open Source s. Qt 4-Installationsanleitung Tabelle 1: Benötigte Programme für die Qt-Programmierung

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

Mehr

Summenbildung in Bauteiltabellen mit If Then Abfrage

Summenbildung in Bauteiltabellen mit If Then Abfrage Summenbildung in Bauteiltabellen mit If Then Abfrage Die in Bauteiltabellen ausgelesenen Werte lassen sich in jeder Spalte als Summe berechnen. So können selbstverständlich die Flächen der in der Tabelle

Mehr

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

FlowFact Alle Versionen

FlowFact Alle Versionen Training FlowFact Alle Versionen Stand: 29.09.2005 Rechnung schreiben Einführung Wie Sie inzwischen wissen, können die unterschiedlichsten Daten über verknüpfte Fenster miteinander verbunden werden. Für

Mehr

Kurzeinführung Excel2App. Version 1.0.0

Kurzeinführung Excel2App. Version 1.0.0 Kurzeinführung Excel2App Version 1.0.0 Inhalt Einleitung Das Ausgangs-Excel Excel-Datei hochladen Excel-Datei konvertieren und importieren Ergebnis des Imports Spalten einfügen Fehleranalyse Import rückgängig

Mehr

Die Formatierungsregeln (die so genannte Wiki-Syntax) für Texte in DokuWiki sind zu großen Teilen die selben, wie in anderen Wiki-Systemen.

Die Formatierungsregeln (die so genannte Wiki-Syntax) für Texte in DokuWiki sind zu großen Teilen die selben, wie in anderen Wiki-Systemen. DokuWiki Kurzanleitung DokuWiki ein sehr einfach zu installierendes und anzuwendendes Wiki und bietet einige Funktionen, welche das Erstellen von Hypertexten, Dokumentationen und Präsentation von Projekten

Mehr

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen Alexander Schunk Henry Trobisch Inhalt 1. Vergleich der Unit-Tests... 2 2. Vergleich der Codeabdeckungs-Tests... 2 3. Vergleich

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

GITS Steckbriefe 1.9 - Tutorial

GITS Steckbriefe 1.9 - Tutorial Allgemeines Die Steckbriefkomponente basiert auf der CONTACTS XTD Komponente von Kurt Banfi, welche erheblich modifiziert bzw. angepasst wurde. Zuerst war nur eine kleine Änderung der Komponente für ein

Mehr

SharePoint Workspace 2010 Installieren & Konfigurieren

SharePoint Workspace 2010 Installieren & Konfigurieren [Geben Sie Text ein] SharePoint Workspace 2010 Installieren & Konfigurieren SharePoint Workspace 2010 Installieren & Konfigurieren Inhalt SharePoint Workspace 2010 Installieren... 2 SharePoint Workspace

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser Seite 1 von 14 Cookie-Einstellungen verschiedener Browser Cookie-Einstellungen verschiedener Browser, 7. Dezember 2015 Inhaltsverzeichnis 1.Aktivierung von Cookies... 3 2.Cookies... 3 2.1.Wofu r braucht

Mehr

Handbuch zum Excel Formular Editor

Handbuch zum Excel Formular Editor Handbuch zum Excel Formular Editor Mit diesem Programm können Sie die Zellen von ihrer Excel Datei automatisch befüllen lassen. Die Daten können aus der Coffee Datenbank, oder einer weiteren Excel Datendatei

Mehr

Die Excel Schnittstelle - Pro Pack

Die Excel Schnittstelle - Pro Pack Die Excel Schnittstelle - Pro Pack Die Excel Pro Pack ist eine Erweiterung der normalen Excel Schnittstelle, die in der Vollversion von POSWare Bestandteil der normalen Lizenz und somit für alle Lizenznehmer

Mehr

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008 Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen

Mehr

Handbuch. timecard Connector 1.0.0. Version: 1.0.0. REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen

Handbuch. timecard Connector 1.0.0. Version: 1.0.0. REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen Handbuch timecard Connector 1.0.0 Version: 1.0.0 REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen Furtwangen, den 18.11.2011 Inhaltsverzeichnis Seite 1 Einführung... 3 2 Systemvoraussetzungen...

Mehr

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung Diese Anleitung hilft Ihnen, das nachfolgend geschilderte Problem zu beheben.

Mehr

Dokumentation zum Spielserver der Software Challenge

Dokumentation zum Spielserver der Software Challenge Dokumentation zum Spielserver der Software Challenge 10.08.2011 Inhaltsverzeichnis: Programmoberfläche... 2 Ein neues Spiel erstellen... 2 Spielfeldoberfläche... 4 Spielwiederholung laden... 5 Testdurchläufe...

Mehr

Adminer: Installationsanleitung

Adminer: Installationsanleitung Adminer: Installationsanleitung phpmyadmin ist bei uns mit dem Kundenmenüpasswort geschützt. Wer einer dritten Person Zugriff auf die Datenbankverwaltung, aber nicht auf das Kundenmenü geben möchte, kann

Mehr

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper) Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10 Technische Informationen (White Paper) Inhaltsverzeichnis 1. Über dieses Dokument... 3 2. Überblick... 3 3. Upgrade Verfahren... 4

Mehr

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Peter Koos 03. Dezember 2015 0 Inhaltsverzeichnis 1 Voraussetzung... 3 2 Hintergrundinformationen... 3 2.1 Installationsarten...

Mehr

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen) 1. Einführung: Über den ODBC-Zugriff können Sie bestimmte Daten aus Ihren orgamax-mandanten in anderen Anwendungen (beispielsweise Microsoft Excel oder Microsoft Access) einlesen. Dies bietet sich beispielsweise

Mehr

Visual Basic Express Debugging

Visual Basic Express Debugging Inhalt Dokument Beschreibung... 1 Projekt vorbereiten... 1 Verknüpfung zu Autocad/ProStructures einstellen... 2 Debugging... 4 Autocad/ProSteel Beispiel... 5 Dokument Beschreibung Debuggen nennt man das

Mehr

MailUtilities: Remote Deployment - Einführung

MailUtilities: Remote Deployment - Einführung MailUtilities: Remote Deployment - Einführung Zielsetzung Die Aufgabe von Remote Deployment adressiert zwei Szenarien: 1. Konfiguration der MailUtilities von einer Workstation aus, damit man das Control

Mehr

Das Handbuch zu KSystemLog. Nicolas Ternisien

Das Handbuch zu KSystemLog. Nicolas Ternisien Nicolas Ternisien 2 Inhaltsverzeichnis 1 KSystemLog verwenden 5 1.1 Einführung.......................................... 5 1.1.1 Was ist KSystemLog?................................ 5 1.1.2 Funktionen.....................................

Mehr

Ust.-VA ab 01.01.2013. Release 1.0.0

Ust.-VA ab 01.01.2013. Release 1.0.0 Ust.-VA ab 01.01.2013 Release 1.0.0 2012 myfactory International GmbH Seite 1 von 9 Ohne ausdrückliche schriftliche Erlaubnis dürfen weder das Handbuch noch Auszüge daraus mit mechanischen oder elektronischen

Mehr

Programm GArtenlisten. Computerhinweise

Programm GArtenlisten. Computerhinweise Programm GArtenlisten Computerhinweise Liebe/r Vogelbeobachter/in, anbei haben wir Ihnen ein paar wichtige Tipps für ein reibungsloses Funktionieren der mitgelieferten Ergebnisdatei auf Ihrem Computer

Mehr

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Tutorial: Wie erfasse ich einen Termin? In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Neben den allgemeinen Angaben zu einem

Mehr

Tutorial - www.root13.de

Tutorial - www.root13.de Tutorial - www.root13.de Netzwerk unter Linux einrichten (SuSE 7.0 oder höher) Inhaltsverzeichnis: - Netzwerk einrichten - Apache einrichten - einfaches FTP einrichten - GRUB einrichten Seite 1 Netzwerk

Mehr

Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern

Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern Dateiname: ecdl_p2_02_03_documentation.doc Speicherdatum: 08.12.2004 ECDL 2003 Professional Modul 2 Tabellenkalkulation

Mehr

Dokumentation IBIS Monitor

Dokumentation IBIS Monitor Dokumentation IBIS Monitor Seite 1 von 16 11.01.06 Inhaltsverzeichnis 1. Allgemein 2. Installation und Programm starten 3. Programmkonfiguration 4. Aufzeichnung 4.1 Aufzeichnung mitschneiden 4.1.1 Inhalt

Mehr

Dokumentation von Ük Modul 302

Dokumentation von Ük Modul 302 Dokumentation von Ük Modul 302 Von Nicolas Kull Seite 1/ Inhaltsverzeichnis Dokumentation von Ük Modul 302... 1 Inhaltsverzeichnis... 2 Abbildungsverzeichnis... 3 Typographie (Layout)... 4 Schrift... 4

Mehr

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers Ist Excel das richtige Tool für FMEA? Einleitung Wenn in einem Unternehmen FMEA eingeführt wird, fangen die meisten sofort damit an,

Mehr

Der Kalender im ipad

Der Kalender im ipad Der Kalender im ipad Wir haben im ipad, dem ipod Touch und dem iphone, sowie auf dem PC in der Cloud einen Kalender. Die App ist voreingestellt, man braucht sie nicht laden. So macht es das ipad leicht,

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Hex Datei mit Atmel Studio 6 erstellen

Hex Datei mit Atmel Studio 6 erstellen Hex Datei mit Atmel Studio 6 erstellen Es werden generell keine Atmel Studio Dateien ins Repository geladen, da jeder seine Dateien an anderen Orten liegen hat und weil nicht jeder das Atmel Studio 6 benutzt.

Mehr

Über die Internetseite www.cadwork.de Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Über die Internetseite www.cadwork.de Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt. Internet, Codes und Update ab Version 13 Um Ihnen einen möglichst schnellen Zugang zu den aktuellsten Programmversionen zu ermöglichen liegen Update-Dateien für Sie im Internet bereit. Es gibt drei Möglichkeiten

Mehr

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Wie kann ein PDF File angezeigt werden? kann mit Acrobat-Viewern angezeigt werden auf jeder Plattform!! (Unix,

Mehr

Bauteilattribute als Sachdaten anzeigen

Bauteilattribute als Sachdaten anzeigen Mit den speedikon Attributfiltern können Sie die speedikon Attribute eines Bauteils als MicroStation Sachdaten an die Elemente anhängen Inhalte Was ist ein speedikon Attribut?... 3 Eigene Attribute vergeben...

Mehr

INSTALLATION VON INSTANTRAILS 1.7

INSTALLATION VON INSTANTRAILS 1.7 INSTALLATION VON INSTANTRAILS 1.7 InstantRails 1.7 ist ein Paket, das Ruby, Rails, Apache, MySQL und andere Tools, z.b. phpmyadmin in vorkonfigurierter Form enthält. Das Paket muss in einem Verzeichnis

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

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2 Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2 DynDNS-Accounts sollten in regelmäßigen Abständen mit der vom Internet-Provider vergebenen IP- Adresse (z.b. 215.613.123.456)

Mehr

Urlaubsregel in David

Urlaubsregel in David Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

Mehr

Support-Tipp Mai 2010 - Release Management in Altium Designer

Support-Tipp Mai 2010 - Release Management in Altium Designer Support-Tipp Mai 2010 - Release Management in Altium Designer Mai 2010 Frage: Welche Aufgaben hat das Release Management und wie unterstützt Altium Designer diesen Prozess? Zusammenfassung: Das Glück eines

Mehr

Persönliches Adressbuch

Persönliches Adressbuch Persönliches Adressbuch Persönliches Adressbuch Seite 1 Persönliches Adressbuch Seite 2 Inhaltsverzeichnis 1. WICHTIGE INFORMATIONEN ZUR BEDIENUNG VON CUMULUS 4 2. ALLGEMEINE INFORMATIONEN ZUM PERSÖNLICHEN

Mehr

Enigmail Konfiguration

Enigmail Konfiguration Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es

Mehr

Die Dateiablage Der Weg zur Dateiablage

Die Dateiablage Der Weg zur Dateiablage Die Dateiablage In Ihrem Privatbereich haben Sie die Möglichkeit, Dateien verschiedener Formate abzulegen, zu sortieren, zu archivieren und in andere Dateiablagen der Plattform zu kopieren. In den Gruppen

Mehr

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Dateien löschen und wiederherstellen

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Dateien löschen und wiederherstellen Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Dateien löschen und wiederherstellen Dateiname: ecdl2_05_03_documentation Speicherdatum: 22.11.2004 ECDL 2003 Modul 2 Computermanagement

Mehr

Lokale Installation von DotNetNuke 4 ohne IIS

Lokale Installation von DotNetNuke 4 ohne IIS Lokale Installation von DotNetNuke 4 ohne IIS ITM GmbH Wankelstr. 14 70563 Stuttgart http://www.itm-consulting.de Benjamin Hermann hermann@itm-consulting.de 12.12.2006 Agenda Benötigte Komponenten Installation

Mehr

Guide DynDNS und Portforwarding

Guide DynDNS und Portforwarding Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch

Mehr

Installation/Einrichtung einer Datenbank für smalldms

Installation/Einrichtung einer Datenbank für smalldms Einleitung In den folgenden Seiten werden wir uns damit beschäftigen eine lokale Installation einer MySQL- Datenbank vorzunehmen, um auf dieser Datenbank smalldms aktivieren zu können. Wir werden das XAMPP-Paket

Mehr

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH Funktionsbeschreibung Lieferantenbewertung von IT Consulting Kauka GmbH Stand 16.02.2010 odul LBW Das Modul LBW... 3 1. Konfiguration... 4 1.1 ppm... 4 1.2 Zertifikate... 5 1.3 Reklamationsverhalten...

Mehr

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014) Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...

Mehr

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze Ihre Interessentendatensätze bei inobroker Wenn Sie oder Ihre Kunden die Prozesse von inobroker nutzen, werden Interessentendatensätze erzeugt. Diese können Sie direkt über inobroker bearbeiten oder mit

Mehr

Angebot & Rechnung, Umsatzsteuer, Mein Büro Einrichtung automatischer Datensicherungen

Angebot & Rechnung, Umsatzsteuer, Mein Büro Einrichtung automatischer Datensicherungen Software Angebot & Rechnung, Umsatzsteuer, Mein Büro Thema Einrichtung automatischer Datensicherungen Datum September 2011 So richten Sie automatische Datensicherungen ein Über den Menüpunkt Datei - Datensicherung

Mehr

Informatik 1 Tutorial

Informatik 1 Tutorial ETH Zürich, D-INFK/D-BAUG Herbstsemester 2014 Dr. Martin Hirt Christian Badertscher Informatik 1 Tutorial Dieses Tutorial hat zum Ziel, die notwendigen Tools auf dem eigenen Computer zu installieren, so

Mehr

Lizenzen auschecken. Was ist zu tun?

Lizenzen auschecken. Was ist zu tun? Use case Lizenzen auschecken Ihr Unternehmen hat eine Netzwerk-Commuterlizenz mit beispielsweise 4 Lizenzen. Am Freitag wollen Sie Ihren Laptop mit nach Hause nehmen, um dort am Wochenende weiter zu arbeiten.

Mehr

Produktschulung WinDachJournal

Produktschulung WinDachJournal Produktschulung WinDachJournal Codex GmbH Stand 2009 Inhaltsverzeichnis Einleitung... 3 Starten des Programms... 4 Erfassen von Notizen in WinJournal... 6 Einfügen von vorgefertigten Objekten in WinJournal...

Mehr

Kommunikations-Management

Kommunikations-Management Tutorial: Wie importiere und exportiere ich Daten zwischen myfactory und Outlook? Im vorliegenden Tutorial lernen Sie, wie Sie in myfactory Daten aus Outlook importieren Daten aus myfactory nach Outlook

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr