Code verifizieren mittels



Ähnliche Dokumente
Programmiertechnik II

Test-Driven Design: Ein einfaches Beispiel

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

Zählen von Objekten einer bestimmten Klasse

Unit Testing, SUnit & You

Fortgeschrittenes Programmieren mit Java. Test Driven Development

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

Testen mit JUnit. Motivation

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Markus Wichmann. Testen von Java Code mit. JUnit

Das Test-Framework JUnit ETIS SS04

Mastermind. Testplan. Hochschule Luzern Technik & Architektur. Programmieren 2 FS12. Gruppe 10

SEP 114. Design by Contract

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

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

DLLs (dynamic loaded libraries) mit MingW erstellen


Fakultät Angewandte Informatik Lehrprofessur für Informatik

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

Einführung in die Informatik Tools

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Wie ist das Wissen von Jugendlichen über Verhütungsmethoden?

Praktische Übung 'JUnit-Test'

BIF/SWE - Übungsbeispiel

Testen und Testautomatisierung in agilen Projekten

Unit Tests mit Junit 4. Dario Borchers

Download unter:

Java: Vererbung. Teil 3: super()

Testphase. Das Testen

MetaQuotes Empfehlungen zum Gebrauch von

Integrierte und automatisierte GUI-Tests in Java

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

Objektorientierte Programmierung

Webalizer HOWTO. Stand:

Universität Potsdam ZEIK - Zentrale Einrichtung für Informationsverarbeitung und Kommunikation

Unit Testing mit JUnit. Dr. Andreas Schroeder

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard

Java Entwicklung für Embedded Devices Best & Worst Practices!

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

Agile Softwareprozess-Modelle

6. Programmentwicklung

Professionelle Seminare im Bereich MS-Office

Testen im Software- Entwicklungsprozess

«Integration in WebSite» HTML-/Javascript-Code-Beispiele

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Programmieren in Java

Tipps und Tricks zu den Updates

Agiles Testen. Gedankensammlung. 17. November Patrick Koglin

SEMINAR Modifikation für die Nutzung des Community Builders

DAUERHAFTE ÄNDERUNG VON SCHRIFTART, SCHRIFTGRÖßE

Design Patterns 2. Model-View-Controller in der Praxis

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Einführung in das Scrum Framework & welche 10 Praktiken helfen, Scrum wirklich gut zu machen

Client-Server-Beziehungen

Backup der Progress Datenbank

Kurzanleitung Installation der Zend Studio Sprachpakete

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

ENTDECKEN SIE DIE VORTEILE VON SUBSCRIPTION IM SUBSCRIPTION CENTER ANMELDEN

Zunächst müssen sie die MAC-Adresse ihres Gerätes für WLAN registrieren. 2. Die MAC Adresse (physikalische Adresse des WLAN) wird mit dem Befehl:

Software-Engineering Software-Management

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

BFV Widget Kurzdokumentation

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Programmierkurs Java

Unit Tests und Fehlersuche

teischl.com Software Design & Services e.u. office@teischl.com

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

1. Einführung. 2. Weitere Konten anlegen

Whitepaper. Produkt: combit Relationship Manager. SQL Server 2008 R2 Express um Volltextsuche erweitern. combit GmbH Untere Laube Konstanz

Windows 7 Winbuilder USB Stick

Qualitätsmanagement im Projekt

Internet Explorer Version 6

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Bevor Sie mit dem Wechsel Ihres Sicherheitsmediums beginnen können, sollten Sie die folgenden Punkte beachten oder überprüfen:

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

FB Informatik. Fehler. Testplan

Installation der Eicon Diva PCI Karte unter Windows XP

Microsoft Update Windows Update

2. Konfiguration der Adobe Software für die Überprüfung von digitalen Unterschriften

NX Standardinstallation

Spamfilter einrichten

Erfahrungen mit Hartz IV- Empfängern

Anmeldung eines Tiptel IP-Telefons an einer FritzBox

Persönliches Adressbuch

Dart - Professional E1000/1. Test und Programmierung. ProDart

Schritt 2: Konto erstellen

SharePoint Demonstration

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Zugriff Remote Windows Dieses Dokument beschreibt die Konfiguration von Windows für den Zugriff auf

Installation und Inbetriebnahme von Microsoft Visual C Express

Bei der Focus Methode handelt es sich um eine Analyse-Methode die der Erkennung und Abstellung von Fehlerzuständen dient.

Die Rückgabe kann über folgende, von uns getestete Programme / Apps vorgenommen werden: Adobe Digital Editions Sony Reader for PC Bluefire Reader

Transkript:

Code verifizieren mittels Unit- und Regressionstests Institut für Numerische Simulation, Universität Bonn Seminarreihe Technische Numerik

Wozu sollen gut sein? Was für Testarten gibt es? Wie funktionieren solche? Test- und Beispiel

Wozu sollen gut sein? Refactoring: Ändern des Codes bei gleichbleibender Funktionalität. Unabhängiger Einbau von Features Verifizierung von Komponenten eines neuen System(teil)s überprüfen Potentielle Quellen von Bugs Änderungen am Code stellen grundsätzlich eine Quelle für Bugs in bereits vorhandenem Code dar! Problem Unabsichtliches Verändern des Interfaces bestimmter Funktionen für neue Features.

Wozu sollen gut sein? Refactoring: Ändern des Codes bei gleichbleibender Funktionalität. Unabhängiger Einbau von Features Verifizierung von Komponenten eines neuen System(teil)s überprüfen Potentielle Quellen von Bugs Änderungen am Code stellen grundsätzlich eine Quelle für Bugs in bereits vorhandenem Code dar! Lösung Regressions- und Komponententests stellen (weitest gehend) sicher, dass die Funktionalität des vorhandenen Codes fortbesteht.

Abstecher: Extreme Programming Test-Driven Development Pair Programming Refactoring Simple Design Website http://www.extremeprogramming.org/

1. Komponenten- oder Unabhängige Routinen Eingebaute Testroutinen Testroutinen im Code, welche eine bestimmte Funktionalität entweder bei Programmbeginn oder auf Wunsch testen. Testroutinen in externem Programm, welches einzig dazu dient, das Funktionieren und gewollte Nicht-Funktionieren sicher zu stellen. Was ist eine Komponente? Eine Klasse oder eine Funktion: class Vector oder MatrixMultiplication().

2. Regressionstests Shell-Skripte Ansammlung von Skripten, die für bestimmte Eingaben bestimmten Ausgaben erwarten. uite Zusammenfassung von Skripten zu einer uite, welche die gesamte Funktionaliät eines Codes in einer gegebenen Fassung automatisiert überprüfen soll. Was bedeutet Regression? lat. re-gregere - zurückgehen, zurückschreiten. Hier: Das repetitive Wiederholen aller Testfälle, um m gliche unabsichtliche Veränderungen aufzuspüren.

Testprinzipien und -philosophien Testentwicklung parallel zur Programmentwicklung (Test-Driven Development). Alle Funktionen sollen getestet werden. Hierarchische Abhängigkeit: Komplexere Funktionen nutzen verfizierte einfachere. Test von Gut- und Fehlfall. pro Bug ein Test: D. h. ein Test für jeden gefundenen Fehler: Und der Fix behebt genau den Alarm dieses.

Wie funktionieren Komponenten- oder? Prinzip Getestet wird das Interface bzw. der Vertrag einer Komponente, nicht der Code der Komponente selbst (Black Box). Arbeitsweise Test-Funktionen mit Zeilen a la ASSERT(... ); Test-Runner, der die Test-Funktionen der Reihe nach ausführt und in OK(...) oder FAILED:... endet.

Wie funktionieren? Prinzip Alle Testfälle einer Software werden wiederholt und automatisiert durchlaufen, um unabsichtliche Veränderungen zu entdecken, umfasst sowohl Komponenten- als auch Integrations- und System-tests. Arbeitsweise Kleine Test-Skripte, die den Code mit bestimmten Eingabeparametern und -files startet und bestimmte Ausgabe erwartet. uite, die die Skripte alle der Reihe nach ausführt und Ausgabe bei Fehler sichert bzw. verwirft, wenn kein Fehler auftritt.

Unvollständige Auflistung Komponenten- für C AutoUnit CUnit... Komponenten- für C++ Boost Test Library CUTE CxxTest... Regressions- für C/C++ Beaker Quelle http://en.wikipedia.org/wiki/list of unit testing frameworks

Beispiel: Test einer Klasse Vector Sechs Files: 1. vector.hpp 2. vector.cpp 3. vectorunittest.hpp 4. vectorunittest.cpp 5. vectornormtest.cpp 6. testrunner.cpp Download Code steht nach Vortragsende auf der Webseite.

Deklarationen in vector.hpp #ifndef VECTOR_HPP_ #define VECTOR_HPP_ /** Vector-Klasse mit * -# Konstruktor * -# Destruktor * -# Funktion Norm(). */ class Vector { public: Vector(); Vector(double a, double b, double c); Vector() {}; double Norm(); private: double x[3]; }; #endif // VECTOR_HPP_

Definitionen in vector.cpp #include <math.h> #include "vector.hpp" Vector::Vector() { x[0] = 0.; x[1] = 0.; x[2] = 0.; }; Vector::Vector(double a, double b, double c) { x[0] = a; x[1] = b; x[2] = c; }; double Vector::Norm() { double result = 0.; for(int i=0;i<3;i++) result += x[i]*x[i]; return (sqrt(result)); };

Unit-Test in vectorunittest.hpp #ifndef VECTORUNITTEST_HPP_ #define VECTORUNITTEST_HPP_ #include <cppunit/extensions/helpermacros.h> #include "vector.hpp" class VectorTest : public ::TestFixture { CPPUNIT_TEST_SUITE( VectorTest ); CPPUNIT_TEST ( NormTest ); CPPUNIT_TEST_SUITE_END(); public: void setup(); void teardown(); void NormTest(); private: Vector *zero; Vector *unit; Vector *two; }; #endif // VECTORUNITTEST_HPP_

Unit-Test in vectorunittest.cpp #include "vector.hpp" #include "vectorunittest.hpp" // Registers the fixture into the registry CPPUNIT_TEST_SUITE_REGISTRATION( VectorTest ); void VectorTest::setUp() { zero = new Vector(0.,0.,0.); unit = new Vector(1.,0.,0.); two = new Vector(2.,0.,0.); }; void VectorTest::tearDown() { delete(zero); delete(unit); delete(two); };

Unit-Test in vectornormtest.cpp #include "vectorunittest.hpp" #include <math.h> /** UnitTest fuer Vector::Norm(). */ void VectorTest::NormTest() { // unity and zero tests CPPUNIT_ASSERT_EQUAL( 0., zero->norm() ); CPPUNIT_ASSERT_EQUAL( 1., unit->norm() ); // besser? CPPUNIT_ASSERT ( fabs(zero->norm()) < 1e-13 ); CPPUNIT_ASSERT ( fabs(1. - unit->norm()) < 1e-13 ); };

Ausführung heber@bespin:>./vectorunittest. OK(1) heber@bespin:>

Auflistung der wichtigsten Befehle In einer Test-Klasse... Test definiert bzw. implementiert: CPPUNIT TEST SUITE (... Test); Deklariert die uite... Test. CPPUNIT TEST (TestFunktion); Deklariert einen Testcase namens Testfunktion. CPPUNIT TEST SUITE END(); Schliesst die Deklaration der uite ab.... Test::setUp(); Wird vor jedem Test aufgerufen.... Test::tearDown(); Wird nach jedem Test aufgerufen.... Test::Testfunktion(); Die eigentliche Testfunktion.

Definition in testsuite.at AT_INIT([VectorTest]) AT_SETUP([Norm]) AT_CHECK([$at_dir/../VectorUnitTest], \ [ignore], [ignore]) AT_CLEANUP

Zusammenfassung der wichtigsten Befehle AT INIT (name) Initialisert die uite und gibt ihr einen Namen AT SETUP (name) Bezeichnet den Anfang einer Testgruppe mit Namen. AT CHECK([cmd, [], [])] Fuehrt cmd aus und testet auf Return code, stdout und stderr koennen ignore d werden oder in File umgeleitet. AT CLEANUP Bezeichnet das Ende einer Testgruppe.

Wikipediaeintrag zu http://de.wikipedia.org/wiki/unit-test Wikipediaeintrag zu http://de.wikipedia.org/wiki/ Homepage von http://sourceforge.net/projects/cppunit/ Tutorial zu http://www.evocomp.de/tutorials/tutorium cppunit/howto tutoria cppunit.html Erklärung zu Einstiegstutorial zu http://www.gnu.org/software/automake/manual/autoconf/using-.html http://www.lrde.epita.fr/~akim/ccmp/doc/gnuprog2/simple-uses-of-.html