PL/SQL Continuous Integration mittels Hudson - doag.org · Übersicht an PL/SQL Testframeworks...

36
PL/SQL Continuous Integration mittels Hudson Benjamin Jörger

Transcript of PL/SQL Continuous Integration mittels Hudson - doag.org · Übersicht an PL/SQL Testframeworks...

PL/SQL Continuous Integration

mittels HudsonBenjamin Jörger

Prozesse

DB Struktur

Zukunfts-

sicherheit

Strategische Beratung

Wartung & Support

Wartung

Aktualisierung Analyse

Oracle Lizenzmanagement

Benjamin Jörger 215.11.2010

DB Struktur

Dienste

Sicherheit

Verfügbarkeit

Implementierung

Aktualisierung

Administration

Support

Projektmanagement

Planung

Koordination

Ausführung

Test & Freigabe

Analyse

Konsolidierung

Management

Agenda

o Continuous Integration

o PL/SQL Testframeworks

Benjamin Jörger 315.11.2010

o Hudson als CI-Server

o PL/SQL – Continuous Integration mit Hudson

Entwickeln

Bauen

Berichten

Benjamin Jörger 415.11.2010

Continuous Integration

Bauen

Benjamin Jörger 515.11.2010

Voraussetzungen für Continuous Integration

o CI- Servero Hudson (Open Source)

o Tests bzw. Testszenarien

Benjamin Jörger 615.11.2010

o Versionskontrollsystemo Subversion / SVN

o Bereitschaft der Entwickler bzw. des Managements

Vorteile durch Continuous Integration

o Höhere Qualität des Quellcodes

o Zeitnahe Fehlererkennung

Benjamin Jörger 715.11.2010

o Kostenreduktion im Fehlerfall

Vorteile durch Continuous Integration

Benjamin Jörger 815.11.2010

Nachteile durch Continuous Integration

o Höherer Zeitaufwand bei der Entwicklungo Zusätzliche Pflege des Testsystemso Testentwickler/-szenarien nötigo Funktionale vs. GUI-Tests

Benjamin Jörger 915.11.2010

o Kontrollen notwendigo Werden die Sourcen kontinuierlich eingecheckt?o Wie hoch ist die Testabdeckung?

Benjamin Jörger 1015.11.2010

Testframeworks

Testframeworks

� Erstellen von Testcases mit Assertions

Warum ein Testframework?

Benjamin Jörger 1115.11.2010

� Bereitstellung von Pre-/Postmethoden

� Organisation von Testfällen in Suiten

� Reporting

Übersicht an PL/SQL Testframeworks

� PL/Unit

� Einfache Installation (Package) +

� Einfache Implementierung von Tests +

Benjamin Jörger 1215.11.2010

� Einfache Implementierung von Tests +

� Keine eigenen Statistiken –

� Keine Integrationsmöglichkeit zu CI –

� www.plunit.com

Übersicht an PL/SQL Testframeworks

� PLUTO

� Einfache Installation (Package) +� Objektorientierter Ansatz + / –� Keine eigenen Statistiken –

Benjamin Jörger 1315.11.2010

� Keine eigenen Statistiken –� Keine Integrationsmöglichkeit zu CI –� http://code.google.com/p/pluto-test-framework

� Artistic License/GPL

Übersicht an PL/SQL Testframeworks

� PLUTO

Benjamin Jörger 1415.11.2010

Übersicht an PL/SQL Testframeworks

� utPLSQL

� Einfache De-/Installation (Package) +� Eigene Statistiken +

Benjamin Jörger 1515.11.2010

� Eigene Statistiken +� Integrationsmöglichkeit zu CI +� http://utplsql.sourceforge.net� GPL

Übersicht an PL/SQL Testframeworks

� utPLSQL Tabellenübersicht

Benjamin Jörger 1615.11.2010

Übersicht an PL/SQL Testframeworks

� utPLSQL Packageübersicht

Package Beschreibung

utPLSQL Kontrollmechanismen für die Tracinginformationen,Starten von Tests bzw. Testsuiten

utConfig Konfiguration der Testumgebung

Benjamin Jörger 1715.11.2010

( User, Fileoutput, Dateformat, Delimiter, Recompile, u.v.m. )

utResult Diverse Möglichkeiten die Ergebnisse des letzten Testlaufs auszuwerten (Iteration der Ergebnisse, Zugriff auf alle Ergebnisse, Fehler true/false, …)

utAssert Umfangreiche Assertions nicht nur auf skalare Werte,

sondern auch für Tabellen, Objekte, Queries

utGen Codegenerator für die einfache Erstellung von neuen Testsuiten

utOutput Speicher für mehrere Testläufe(Ergebnisse) und Zugriffsmethoden

utSuite Handling von Testsuites (CRUD)

utPackage Handling von Testpackages einer Suite (CRUD)

Benjamin Jörger 1815.11.2010

Gestatten: Hudson

Hudson als Continuous Integration Server

o Einfache Installation und Konfiguration

o Open Source

o Plugin Konzept für diverse Build Tools

Benjamin Jörger 1915.11.2010

o Plugins für viele Programmiersprachen

o Plugins für differenzierte Auswertungen

o Plugins für Benachrichtigungen

o www.hudson.org

Hudson als Continuous Integration Server

Benjamin Jörger 2015.11.2010

Hudson als Continuous Integration Server

Benjamin Jörger 2115.11.2010

Benjamin Jörger 2215.11.2010

Versionskontrolle

Ziele von Versionskontrollsystemen

o Eine einheitliche Codebasis für mehrere Entwickler

o Bereitstellung von Basisfunktionaltäteno Checkouto Commito Updateo Merge

Benjamin Jörger 2315.11.2010

o Merge

o Bereitstellung von „Working Software“

o Anbietero Subversion (SVN / Open Source)o Concurrent Versions System (CVS / Open Source)o IBM Rational ClearCase

Benjamin Jörger 2415.11.2010

Build Tools

Ziele von Build Tools

o Build Tools erstellen aus Quellcode auslieferbare Softwarepakete sie lösen bestehende Abhängigkeiten automatisch auf

o PL/SQL bauen ???o Konfiguration des Plugins o Konfiguration der Jobs die von Hudson ausgeführt werden sollen

Benjamin Jörger 2515.11.2010

o Anbietero Anto Maveno Buildroot

Benjamin Jörger 2615.11.2010

Putting the puzzle together

1. Installation und Konfiguration vono Maveno utPLSQLo Subversiono Hudson

Step by Step

Benjamin Jörger 2715.11.2010

2. Erstellen von PL/SQL Packages für den Produktionsbetrieb

3. Erstellen von Testpackages per utPLSQL

4. Anlegen eines Jobs in Hudson

Erstellen von Testpackages per utPLSQL

Erzeugen des Testrumpfes per Generator

executGen.testpkg ('betweenstr');

DBMS_OUTPUT

CREATE OR REPLACE PACKAGE ut_betweenstr

Benjamin Jörger 2815.11.2010

CREATE OR REPLACE PACKAGE ut_betweenstr

IS

PROCEDURE ut_setup;

PROCEDURE ut_teardown;

PROCEDURE ut_<method 1>;

PROCEDURE ut_<method n>;

END ut_betweenstr;

/

Aufbau von Testmethoden

…PROCEDURE ut_test_equals

IS

against_this VARCHAR2(2000);

check_this VARCHAR2(2000);

BEGIN

against_this := 'cde';

check_this:=BETWNSTR (STRING_IN => 'abcdefgh‘, START_IN => 3, END_IN => 5);

Benjamin Jörger 2915.11.2010

check_this:=BETWNSTR (STRING_IN => 'abcdefgh‘, START_IN => 3, END_IN => 5);

utAssert.eq ('normal', check_this, against_this);

against_this := 'ab';

check_this :=BETWNSTR (STRING_IN => 'abcdefgh‘, START_IN => 0, END_IN => 2);

utAssert.eq ('zero start', check_this, against_this);

END ut_BETWNSTR;

/

PROCEDURE ut_test_null_values

….

Asstertions

• utAssert.isnull

• utAssert.isnotnull

• utAssert.eq

• utAssert.eqtable

Benjamin Jörger 3015.11.2010

• utAssert.eqquery

• utAssert.eqoutput

• utAssert.objexists

• utAssert.objnotexists

•….

Konfiguration von Maven

o Installation des Plugins „maven-utplsql-plugin“ vonhttp://code.google.com/p/maven-utplsql-plugin

o Anlegen einer „pom.xml“ Datei, welche die Konfiguration der auszuführenden Testsuite beinhaltet

Benjamin Jörger 3115.11.2010

o Konfiguration der Abhängigkeiten (Dependencies)o Konfiguration der Datenbankverbindung bzw. des Treiberso Konfiguration der Testsuite bzw. des Packages das ausgeführt

werden soll

Auszug „pom.xml“

Benjamin Jörger 3215.11.2010

Das Gesamtbild

Benjamin Jörger 3315.11.2010

Resumee

+ Testen auf allen Ebenen möglich+ Nutzen vorhandener Ressourcen+ Skalierbar+ Bessere, messbare Codequalität+ Frühe Fehlererkennung+ Stabile, erprobte Lösung

Benjamin Jörger 3415.11.2010

+ Stabile, erprobte Lösung

- Konfigurationsaufwand- Entwicklung von Tests und Szenarien kostet Ressourcen- Berechtigungskonzept innerhalb der Datenbank

Fragen ?

Essential Bytes GmbH & Co. KG

Steinebühlstraße 30

77749 Hohberg

Kontakt

77749 Hohberg

[email protected]

http://www.essential-bytes.de