01.09.2013 Views

Software-Test - Software and Systems Engineering

Software-Test - Software and Systems Engineering

Software-Test - Software and Systems Engineering

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Techniken im<br />

<strong>Software</strong>-<strong>Test</strong><br />

München, 4. Juli 2000<br />

Heiko Lötzbeyer<br />

Institut für Informatik<br />

Lehrstuhl für <strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Technische Universität München


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Ziele des <strong>Software</strong> <strong>Test</strong>s<br />

• Überblick<br />

• <strong>Test</strong>stufen<br />

– Unit-<strong>Test</strong><br />

– Integrationstest<br />

– Systemtest<br />

• <strong>Test</strong>verfahren<br />

– manuelle <strong>Test</strong>verfahren<br />

– Whitebox<br />

– Blackbox<br />

• <strong>Test</strong>fallermittlung<br />

– Spezifikationsbasierte <strong>Test</strong>fallermittlung<br />

• Schluß<br />

Inhalt<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 2


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Was ist <strong>Test</strong>en?<br />

Ziele<br />

– G.J.Myers,´79:<br />

„<strong>Test</strong>en ist der Prozeß, ein Programm mit der Absicht<br />

auszuführen, Fehler zu finden.“<br />

– Hetzel ´83:<br />

„Messung der <strong>Software</strong>qualität“<br />

–DieÜberprüfung, daß ein System die spezifizierten<br />

Anforderungen erfüllt.<br />

• Ziele:<br />

– Fehler finden<br />

– auch: Fehler vermeiden (B. Beizer)<br />

– nicht: Korrektheitsnachweis<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 3


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Überblick<br />

• Entstehung und Entdeckung von Fehlern<br />

(aus Balzert, IEEE <strong>Software</strong>, Jan. 1985, S.83)<br />

60%<br />

50%<br />

40%<br />

30%<br />

20%<br />

10%<br />

0%<br />

Anforderungs- und<br />

Entwurfsphase<br />

Eingebrachte Fehler Gefundene Fehler<br />

Technische<br />

Entwurfsphase<br />

Konstruktions- und<br />

Systemphase<br />

Abnahmetest und<br />

Betriebsphase<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 4


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Fehlerbeseitigung<br />

• Relative Kosten zur Fehlerbeseitigung<br />

(H. Balzert, 1998; Boehm, 1976)<br />

1000<br />

100<br />

10<br />

1<br />

Definition<br />

3<br />

Entwurf<br />

5<br />

Implementierung<br />

10<br />

Entwicklungstest<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 5<br />

15<br />

Abnahmetest<br />

40<br />

Betrieb<br />

150


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Fehlerverteilung<br />

• Fehlerverteilung (Dick Bender, 1993)<br />

Design<br />

27%<br />

Code<br />

7%<br />

Other<br />

10%<br />

Requirements<br />

56%<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 6


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Fehlerverteilung:<br />

(Beispiel von Hewlett-Packard, Grady 1997)<br />

Data h<strong>and</strong>ling<br />

6%<br />

Documentation<br />

19%<br />

Requirements<br />

5%<br />

Other code<br />

11%<br />

Hardware<br />

4%<br />

Process/Interprocess<br />

5%<br />

Fehlerverteilung<br />

Computation<br />

18%<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 7<br />

Logic<br />

32%


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

<strong>Test</strong>fallermittlung<br />

<strong>Test</strong>fälle<br />

Regressionstest<br />

Ablaufprotokolle<br />

<strong>Test</strong>durchführung<br />

<strong>Test</strong>treiber<br />

<strong>Test</strong>objekt<br />

Regressionstest<br />

Neues<br />

<strong>Test</strong>objekt<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 8<br />

Stubs


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

<strong>Test</strong>stufen<br />

• Unit-, Komponenten-, Modul- oder Klassentest<br />

– <strong>Test</strong> einer einzelnen Einheit<br />

• Integrationstest<br />

– Überprüfung des fehlerfreien Zusammenwirkens von<br />

Systemkomponenten<br />

• Systemtest<br />

– abschließender <strong>Test</strong> des Gesamtsystems<br />

Funktion, Leistung (Massen-, Zeit-, Streßtest), Benutzbarkeit,<br />

Sicherheit, Interoperabilität<br />

• Abnahmetest<br />

– <strong>Test</strong> unter Mitwirkung des Auftraggebers<br />

– Alpha-<strong>Test</strong>, Beta-<strong>Test</strong><br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 9


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Integrationsstrategien:<br />

– nicht-inkrementell:<br />

• bigbang<br />

• geschäftsprozeßorientiert<br />

– inkrementell:<br />

• top-down-Integration<br />

• bottom-up-Integration<br />

• funktionsorientiert<br />

• nach Verfügbarkeit<br />

Integrationstest<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 10


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Manuelle Prüfverfahren:<br />

<strong>Test</strong>verfahren<br />

– Programminspektion, Review, Walkthrough<br />

– effektiv: 30-70% (Myers, Balzert)<br />

– Zeit- und Personalaufwendig<br />

• Whitebox-<strong>Test</strong> (struktureller <strong>Test</strong>)<br />

– Ausgangspunkt: Struktur des Prüflings<br />

– Messung der <strong>Test</strong>überdeckung mittels Metrik<br />

• Blackbox-<strong>Test</strong> (funktionaler <strong>Test</strong>)<br />

– Ausgangspunkt: Spezifikation des Prüflings<br />

– Sicherstellung der gewünschten Funktionalität<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 11


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Whitebox-<strong>Test</strong><br />

• Instrumentierung des Codes (Zähler einfügen)<br />

• <strong>Test</strong>s durchführen<br />

• Messung der<br />

– verarbeiteten Anweisungen<br />

– ausgewerteten Bedingungen<br />

– Schleifendurchläufe<br />

• Auswertung der erreichten Überdeckung anh<strong>and</strong> von<br />

Metriken<br />

– kontrollflußorientiert<br />

– datenflußorientiert<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 12


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Function count(int x) {<br />

}<br />

int z;<br />

if x < 0 then z = -x;<br />

else z = x;<br />

while z > 0 { z--; }<br />

Kontrollflußorientiert<br />

X < 0<br />

YES NO<br />

z = -x z = x<br />

z > 0<br />

Z--<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 13<br />

NO<br />

2<br />

3<br />

1<br />

YES<br />

Programm Flußdiagramm


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Metriken:<br />

– Anweisungsüberdeckung<br />

Kontrollflußorientiert<br />

• jede Anweisung mind. 1 mal durchlaufen<br />

• hier: 3 Anweisungen können mit 2<br />

<strong>Test</strong>durchläufen überdeckt werden<br />

– Zweigüberdeckung<br />

• jeder Zweig (jede Bedingung: true, false)<br />

• hier: 2 Bedingungen mit jeweils 2<br />

Möglichkeiten können mit 2 <strong>Test</strong>durchläufen<br />

überdeckt werden<br />

– Pfadüberdeckung<br />

• jeder Pfad muß durchlaufen werden<br />

• hier: unendlich viele Pfade<br />

– Bedingungsüberdeckung, MC/DC<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 14<br />

FT<br />

F<br />

T,F


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Es gilt:<br />

Anweisungsüberdeckung<br />

⊂<br />

Zweigüberdeckung<br />

⊂ ⊂<br />

Modified Condition/Decision Coverage Pfadüberdeckung<br />

⊂<br />

Bedingungsüberdeckung<br />

• Probleme:<br />

– Infeasible Paths (nicht erreichbare Pfade)<br />

• z.B. if A do x; [...] if ¬A doy;<br />

• aus Redundanzen (z.B. Range-Checking-Code vom Compiler)<br />

• bei Exceptions<br />

– geeignete <strong>Test</strong>daten zu finden<br />

Kontrollflußorientiert<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 15


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Betrachtet werden<br />

– Definition,<br />

– lesende Zugriffe,<br />

– schreibende Zugriffe<br />

von Variablen<br />

• Defs/Uses-Verfahren:<br />

Datenflußorientiert<br />

– def: Wertzuweisung, auch Definitionen, Initialisierung<br />

– c-use: berechnende Benutzung (computational use)<br />

– p-use: prädikative Benutzung (predicate use)<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 16


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Datenflußgraph<br />

• Kontrollflußgraph mit Datenflußdarstellung:<br />

Function count(int x) {<br />

}<br />

int z;<br />

if x < 0 then z = -x;<br />

else z = x;<br />

while z > 0 { z--; }<br />

c-use x<br />

def z<br />

p-use z<br />

def x<br />

def z<br />

p-use x p-use x<br />

p-use z<br />

c-use z<br />

def z<br />

c-use x<br />

def z<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 17


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Datenflußmetriken<br />

• Metriken: (Statistiken aus Girgis, Woodware `86)<br />

– all defs: (24%, keine Kontrollflußfehler)<br />

• jede Definition muß in einer Berechnung oder Bedingung benutzt<br />

werden<br />

– all p-uses: (34%, identifiziert sicher Kontrollflußfehler)<br />

• Jede Kombination aus Variablendefinition und deren prädikative<br />

Nutzung muß getestet werden<br />

• Beinhaltet Zweigüberdeckung<br />

– all c-uses: (48%, identifiziert Berechnungsfehler)<br />

• Jede Kombination aus Variablendefinition und deren berechnende<br />

Benutzung muß getestet werden<br />

– all uses: (insgesamt ca. 70% der Programmierfehler)<br />

• c-uses und p-uses zusammen<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 18


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Whitebox-<strong>Test</strong>:<br />

Code<br />

<strong>Test</strong><br />

Abstraktion<br />

Modell<br />

<strong>Test</strong>fallermittlung<br />

Automatische Verfahren:<br />

Model-Checker,<br />

KI<br />

<strong>Test</strong>fälle und<br />

<strong>Test</strong>daten<br />

Überdeckung:<br />

Anweisungsüberdeckung,<br />

MC/DC<br />

Konkretisierung<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 19


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Blackbox-<strong>Test</strong>:<br />

Blackbox-<strong>Test</strong><br />

– Ermittlung der <strong>Test</strong>fälle ausschließlich aus der Spezifikation<br />

– Ziel ist eine möglichst umfassende und redundanzarme<br />

Prüfung der Funktionalität<br />

• Techniken:<br />

– Äquivalenzklassenbildung<br />

– Grenzwertanalyse<br />

– <strong>Test</strong>sequenzermittlung aus<br />

• Use-Cases<br />

• Beispielabläufen<br />

• Zust<strong>and</strong>sdiagrammen<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 20


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Äquivalenzklassenbildung:<br />

Äquivalenzklassen<br />

– Definitions- und Wertebereich in Äquivalenzklassen zerlegen<br />

• gültige Äquivalenzklassen => Funkionstests<br />

• ungültige Äquivalenzklassen => Stabilitätstests<br />

– Bsp: Monat : [1..12] zerlegen in<br />

• eine gültige Äquivalenzklasse : 1


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Classifaction Tree Editor:<br />

CTE<br />

Klassifikationsbaum<br />

≈ Kombination von<br />

Äquivalenzklassen<br />

Kombinationstabelle<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 22


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Zust<strong>and</strong>sautomaten<br />

• Ableitung von <strong>Test</strong>fällen aus Zust<strong>and</strong>sautomaten:<br />

– über Graphen:<br />

• Transitionsüberdeckung (Transitionstour)<br />

• Zust<strong>and</strong>süberdeckung<br />

• Pfadüberdeckung<br />

– durch Simulation<br />

• manuell mit Aufzeichnung<br />

• symbolische Ausführung<br />

– logikbasiert<br />

• Transformation in Aussagenlogik/Prädikatenlogik, deklarative<br />

Beschreibung der <strong>Test</strong>fälle<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 23


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Blackbox-<strong>Test</strong>:<br />

<strong>Test</strong>objekt<br />

<strong>Test</strong><br />

Spezifikation<br />

<strong>Test</strong>fallermittlung<br />

Automatische Verfahren:<br />

Model-Checker,<br />

KI<br />

<strong>Test</strong>fälle und<br />

<strong>Test</strong>daten<br />

<strong>Test</strong>ziel<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 24


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Methoden:<br />

Mealy-Automaten<br />

– Transitionstour, W-Methode, UIO-Methode<br />

• Vorteile:<br />

– vollautomatisch<br />

– auch Korrektheitsbeweis<br />

• Nachteile:<br />

– nur endliche Systeme<br />

– Korrektheitsbeweise erfordern starke Annahmen über <strong>Test</strong>objekt<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 25<br />

0/0<br />

0<br />

1/0<br />

0/1<br />

1<br />

1/1


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Transitionstour<br />

• Findet den kürzesten Pfad durch den Automaten, der alle<br />

Transitionen überdeckt<br />

• Vorteile:<br />

– vollautomatisch<br />

• Nachteile:<br />

– Automat muß bestimmte Eigenschaften haben:<br />

• stark zusammenhängend<br />

• errechnete Transitionssequenz muß wirklich durchführbar sein<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 26


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Methode:<br />

Model-Checking<br />

– Verwendung von Gegenbeispielen vom Model-Checker<br />

– Ermittlung der Systemläufe durch die Lösung aussagenlogischer<br />

Formeln<br />

• Vorteile:<br />

– vollautomatisch<br />

• Einschränkungen<br />

– nur zust<strong>and</strong>sendliche Systeme<br />

sonst Abstraktion notwendig<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 27


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

AF-Spezifikation<br />

Aussagenlogik<br />

<strong>Test</strong>ziel<br />

SATO<br />

(Aussagenlogik)<br />

<strong>Test</strong>fall<br />

(EET)<br />

Übersetzung Rückübersetzung<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 28


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Methode:<br />

CLP<br />

– Codierung in regelbasierte Systeme mit Constraint-Mechanismen (CLP<br />

= Constraint Logic Programming)<br />

– symbolische Simulation<br />

• Vorteile:<br />

– vollautomatisch<br />

– auch unendliche Systeme<br />

• Einschränkungen<br />

– Datentypen / Arithmetik<br />

– Schwierigkeiten mit nichtlinearen Prädikaten<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 29


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

AF-Spezifikation<br />

Constraintlogik<br />

<strong>Test</strong>ziel<br />

Prolog/CLP<br />

(Regeln,<br />

Constraintlogik)<br />

<strong>Test</strong>fall<br />

(EET)<br />

Übersetzung Rückübersetzung<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 30


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

• Weitgehend gelöst:<br />

– Metriken für Whitebox-<strong>Test</strong>s<br />

• Problematisch:<br />

– <strong>Test</strong>ziele definieren<br />

• Aktuell:<br />

– automatische <strong>Test</strong>fallermittlung aus<br />

• Use-Cases,<br />

• graphischen Beschreibungstechniken<br />

– Generierung von <strong>Test</strong>treibern, Stubs<br />

Schluß<br />

Inhalt Ziele Überblick <strong>Test</strong>stufen <strong>Test</strong>verfahren <strong>Test</strong>fallermittlung Schluß<br />

4. Juli 2000 H. Lötzbeyer 31


Lehrstuhl für<br />

<strong>Software</strong> & <strong>Systems</strong> <strong>Engineering</strong><br />

Next Events:<br />

ENDE<br />

Steinheil<br />

Alex B. Schmidt:<br />

Anwendungen der Relationenalgebra<br />

Dienstag 18.7.2000, 17.00 Uhr, Raum1546

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!