1 / 30 Ein Ansatz zum modellgetriebenen Integrationstest von EJB-basierten Informationssystemen Zwischenvortrag zur Diplomarbeit Steffen Conrad (235183) Research Group Software Construction RWTH Aachen 30.11.2011
2 / 30 Übersicht 1 Grundlagen 2 Rückblick: Analysephase 3 Entwurfsphase 4 Ausblick: Implementierung
GRUNDLAGEN 3 / 30
4 / 30 modellbasierte vs. modellgetriebene Entwicklung modellbasierte Softwareentwicklung (einmalige) Modellierung und Generierung Restimplementierung im Code modellgetriebene Softwareentwicklung iterative Entwicklung der Modelle wiederholte Codegenerierung Codeanpassungen geringer Anteil Ziel: klare Trennung, z.b. Interfaces generiert, Inhalt manuell
4 / 30 modellbasierte vs. modellgetriebene Entwicklung modellbasierte Softwareentwicklung (einmalige) Modellierung und Generierung Restimplementierung im Code modellgetriebene Softwareentwicklung iterative Entwicklung der Modelle wiederholte Codegenerierung Codeanpassungen geringer Anteil Ziel: klare Trennung, z.b. Interfaces generiert, Inhalt manuell
5 / 30 MDA Model Driven Architecture CIM PIM PSM Architecture Metamodel Transformation Description Model Platform Description Model MDA: Anwendung von Architekturmustern über Meta-Modelle und Modelltransformationen CIM: Domänenmodell PIM: formale Beschreibung der Struktur und Funktionalität des Systems PSM: Anreicherung um plattform-abhängige Informationen Modell Code Modell- Transformation V. Gruhn, D. Pieper, C. Röttgers: MDA, Springer, 2006
5 / 30 MDA Model Driven Architecture CIM PIM PSM Architecture Metamodel Transformation Description Model Platform Description Model MDA: Anwendung von Architekturmustern über Meta-Modelle und Modelltransformationen CIM: Domänenmodell PIM: formale Beschreibung der Struktur und Funktionalität des Systems PSM: Anreicherung um plattform-abhängige Informationen Modell Code Modell- Transformation V. Gruhn, D. Pieper, C. Röttgers: MDA, Springer, 2006
6 / 30 EJB-Generator Übersicht Meta-Modelle und Transformationen Modelle Code Laufzeit
7 / 30 MDA beim EJB-Generator I Generatormodel Modell Modell- Transformation Entitymodel EJB- Generatormodel Domain-Code PIM PSM JSF-Code Generatormodell: Domäne Entitymodell: Persistenzinformationen EJB-Generatormodell: EJB-Kontext, EJB-Persistenz EJB-Modell: DAO, Management, Controller, Fassade EJB-Model EJB-Code
7 / 30 MDA beim EJB-Generator I Generatormodel Modell Modell- Transformation Entitymodel EJB- Generatormodel Domain-Code PIM PSM JSF-Code Generatormodell: Domäne Entitymodell: Persistenzinformationen EJB-Generatormodell: EJB-Kontext, EJB-Persistenz EJB-Modell: DAO, Management, Controller, Fassade EJB-Model EJB-Code
7 / 30 MDA beim EJB-Generator I Generatormodel Modell Modell- Transformation Entitymodel EJB- Generatormodel Domain-Code PIM PSM JSF-Code Generatormodell: Domäne Entitymodell: Persistenzinformationen EJB-Generatormodell: EJB-Kontext, EJB-Persistenz EJB-Modell: DAO, Management, Controller, Fassade EJB-Model EJB-Code
7 / 30 MDA beim EJB-Generator I Generatormodel Modell Modell- Transformation Entitymodel EJB- Generatormodel Domain-Code PIM PSM JSF-Code Generatormodell: Domäne Entitymodell: Persistenzinformationen EJB-Generatormodell: EJB-Kontext, EJB-Persistenz EJB-Modell: DAO, Management, Controller, Fassade EJB-Model EJB-Code
8 / 30 MDA beim EJB-Generator II Browser EJB Application Server JSP Application Facade Entity Manager Action Handler Controller Actions Management Entities Database Client-Schicht Geschäftsschicht Datenschicht Kontrollfluss T. Löwenthal: Generierung von web-basierten Prototypen für Geschäftsanwendungen, RWTH Aachen, 2011
9 / 30 Begriffe Informationssystem Ein Informationssystem dient der rechnergestützten Erfassung, Speicherung, Verarbeitung, Pflege, Analyse, Benutzung, Verbreitung, Disposition, Übertragung und Anzeige von Informationen bzw. Daten. Integrationstesten Testen, bei dem Soft- und/oder Hardwarekomponenten kombiniert und getestet werden, um die Interaktion zwischen ihnen zu evaluieren. (nach IEEE 610.12) Facade-Entwurfsmuster Eine Facade bietet eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems.
9 / 30 Begriffe Informationssystem Ein Informationssystem dient der rechnergestützten Erfassung, Speicherung, Verarbeitung, Pflege, Analyse, Benutzung, Verbreitung, Disposition, Übertragung und Anzeige von Informationen bzw. Daten. Integrationstesten Testen, bei dem Soft- und/oder Hardwarekomponenten kombiniert und getestet werden, um die Interaktion zwischen ihnen zu evaluieren. (nach IEEE 610.12) Facade-Entwurfsmuster Eine Facade bietet eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems.
9 / 30 Begriffe Informationssystem Ein Informationssystem dient der rechnergestützten Erfassung, Speicherung, Verarbeitung, Pflege, Analyse, Benutzung, Verbreitung, Disposition, Übertragung und Anzeige von Informationen bzw. Daten. Integrationstesten Testen, bei dem Soft- und/oder Hardwarekomponenten kombiniert und getestet werden, um die Interaktion zwischen ihnen zu evaluieren. (nach IEEE 610.12) Facade-Entwurfsmuster Eine Facade bietet eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems.
10 / 30 Ziele der Diplomarbeit Ein Ansatz zum modellgetriebenen Integrationstest von EJB-basierten Informationssystemen Analyse der Möglichkeiten zur Integrationstestgenerierung Implementierung Generator für Integrationstests abschließende Evaluierung des Generatoransatzes mögliche Erweiterungen: abstraktes, wiederverwendbares Testmodell
ANALYSE 11 / 30
12 / 30 Integrationstests beim EJB-Generator Test: Interaktion von Geschäfts- und Datenschicht über Facade Client EJB Application Server HtmlUnit Application Facade Entity Manager Test-Servlet (EJB) Controller Management Entities Database Client-Schicht Geschäftsschicht Datenschicht Kontrollfluss
13 / 30 Entwicklungsansatz Wiederverwendung der EJB-Generatortechnologien Bottom-Up-Design 1 manuelle Implementierung der Testprototypen 2 Test-Modell Ableitung von Anforderungen aus Prototypen Implementierung des Codegenerators 3 Test-Templates Ableitung von Test-Templates aus Prototypen Implementierung der Transformationen ins Test-Modell
13 / 30 Entwicklungsansatz Wiederverwendung der EJB-Generatortechnologien Bottom-Up-Design 1 manuelle Implementierung der Testprototypen 2 Test-Modell Ableitung von Anforderungen aus Prototypen Implementierung des Codegenerators 3 Test-Templates Ableitung von Test-Templates aus Prototypen Implementierung der Transformationen ins Test-Modell
13 / 30 Entwicklungsansatz Wiederverwendung der EJB-Generatortechnologien Bottom-Up-Design 1 manuelle Implementierung der Testprototypen 2 Test-Modell Ableitung von Anforderungen aus Prototypen Implementierung des Codegenerators 3 Test-Templates Ableitung von Test-Templates aus Prototypen Implementierung der Transformationen ins Test-Modell
13 / 30 Entwicklungsansatz Wiederverwendung der EJB-Generatortechnologien Bottom-Up-Design 1 manuelle Implementierung der Testprototypen 2 Test-Modell Ableitung von Anforderungen aus Prototypen Implementierung des Codegenerators 3 Test-Templates Ableitung von Test-Templates aus Prototypen Implementierung der Transformationen ins Test-Modell
13 / 30 Entwicklungsansatz Wiederverwendung der EJB-Generatortechnologien Bottom-Up-Design 1 manuelle Implementierung der Testprototypen 2 Test-Modell Ableitung von Anforderungen aus Prototypen Implementierung des Codegenerators 3 Test-Templates Ableitung von Test-Templates aus Prototypen Implementierung der Transformationen ins Test-Modell
Test-Prototyp 14 / 30
15 / 30 Test-Prototyp Initialisierung Szenario-Setup Setup Action Szenario-Ausgaben Check Asserts
16 / 30 Ergebnisse des Test-Prototyps Teststruktur 1 Setup Initialisierung Szenario-Setup: Aufbau über Facade-Aufrufe 2 Action: Facade-Aufruf 3 Check Szenario-Ausgaben: Zugriff über Facade-Aufrufe und Domänenmodell Assertions 4 Cleanup
17 / 30 Ergebnisse des Test-Prototyps Templates Test-Templates für Facade-Methoden Templatetyp über Semantik Create Retrieve Update Delete... in Entwicklung Spezialfall: Exception-Tests
17 / 30 Ergebnisse des Test-Prototyps Templates Test-Templates für Facade-Methoden Templatetyp über Semantik Create Retrieve Update Delete... in Entwicklung Spezialfall: Exception-Tests
17 / 30 Ergebnisse des Test-Prototyps Templates Test-Templates für Facade-Methoden Templatetyp über Semantik Create Retrieve Update Delete... in Entwicklung Spezialfall: Exception-Tests
Code-Templates 18 / 30
ENTWURF 19 / 30
Test-Modell 20 / 30
21 / 30 Test-Modell??
22 / 30 Test-Facade abstrakte Facade für beliebiges System Under Test Abbildung Methoden Parameter Typen Idee: eigene Facade für Domänen-Klassen Zugriff auf Domänenobjekte für Szenario-Ausgaben nötig Integrationstests EJB-Modell-Facade = System Under Test optional: Facade-Mapping-Modell für Integrationstests Test-Modell als PIM!
22 / 30 Test-Facade abstrakte Facade für beliebiges System Under Test Abbildung Methoden Parameter Typen Idee: eigene Facade für Domänen-Klassen Zugriff auf Domänenobjekte für Szenario-Ausgaben nötig Integrationstests EJB-Modell-Facade = System Under Test optional: Facade-Mapping-Modell für Integrationstests Test-Modell als PIM!
22 / 30 Test-Facade abstrakte Facade für beliebiges System Under Test Abbildung Methoden Parameter Typen Idee: eigene Facade für Domänen-Klassen Zugriff auf Domänenobjekte für Szenario-Ausgaben nötig Integrationstests EJB-Modell-Facade = System Under Test optional: Facade-Mapping-Modell für Integrationstests Test-Modell als PIM!
22 / 30 Test-Facade abstrakte Facade für beliebiges System Under Test Abbildung Methoden Parameter Typen Idee: eigene Facade für Domänen-Klassen Zugriff auf Domänenobjekte für Szenario-Ausgaben nötig Integrationstests EJB-Modell-Facade = System Under Test optional: Facade-Mapping-Modell für Integrationstests Test-Modell als PIM!
22 / 30 Test-Facade abstrakte Facade für beliebiges System Under Test Abbildung Methoden Parameter Typen Idee: eigene Facade für Domänen-Klassen Zugriff auf Domänenobjekte für Szenario-Ausgaben nötig Integrationstests EJB-Modell-Facade = System Under Test optional: Facade-Mapping-Modell für Integrationstests Test-Modell als PIM!
23 / 30 Integrationtest-Generator-Modell Annotationen der Facade-Methoden im EJB-Modell Create Retrieve Update Delete... Auswahl von Test-Templates für einzelne Facade-Methoden anhand Annotation Anwendung der Templates bei Transformation ins Test-Modell
23 / 30 Integrationtest-Generator-Modell Annotationen der Facade-Methoden im EJB-Modell Create Retrieve Update Delete... Auswahl von Test-Templates für einzelne Facade-Methoden anhand Annotation Anwendung der Templates bei Transformation ins Test-Modell
23 / 30 Integrationtest-Generator-Modell Annotationen der Facade-Methoden im EJB-Modell Create Retrieve Update Delete... Auswahl von Test-Templates für einzelne Facade-Methoden anhand Annotation Anwendung der Templates bei Transformation ins Test-Modell
24 / 30 Entwurf Übersicht EJB-Model Integrationtest- Generator-Model Test-Model Facade- Mapping-Model EJB-Modell: Facade, Annotationen Integrationtest-Generator-Modell: Test-Templateauswahl Test-Modell: Facade, Teststruktur Facade-Mapping-Modell: Facade-Abstraktion Modell Test-Code Modelltransformation Modellverwendung
24 / 30 Entwurf Übersicht EJB-Model Integrationtest- Generator-Model Test-Model Facade- Mapping-Model EJB-Modell: Facade, Annotationen Integrationtest-Generator-Modell: Test-Templateauswahl Test-Modell: Facade, Teststruktur Facade-Mapping-Modell: Facade-Abstraktion Modell Test-Code Modelltransformation Modellverwendung
24 / 30 Entwurf Übersicht EJB-Model Integrationtest- Generator-Model Test-Model Facade- Mapping-Model EJB-Modell: Facade, Annotationen Integrationtest-Generator-Modell: Test-Templateauswahl Test-Modell: Facade, Teststruktur Facade-Mapping-Modell: Facade-Abstraktion Modell Test-Code Modelltransformation Modellverwendung
24 / 30 Entwurf Übersicht EJB-Model Integrationtest- Generator-Model Test-Model Facade- Mapping-Model EJB-Modell: Facade, Annotationen Integrationtest-Generator-Modell: Test-Templateauswahl Test-Modell: Facade, Teststruktur Facade-Mapping-Modell: Facade-Abstraktion Modell Test-Code Modelltransformation Modellverwendung
AUSBLICK 25 / 30
26 / 30 Implementierung prototypische Implementierung des gesamten Prozesses 1 Test-Modell + Codegenerator 2 Facade-Mapping 3 Integrationtest-Generator-Modell + Templates iterative Erweiterung um neue Test-Templates Fokus auf den Ansatz, volle Abstraktion (noch) nicht oberstes Ziel
26 / 30 Implementierung prototypische Implementierung des gesamten Prozesses 1 Test-Modell + Codegenerator 2 Facade-Mapping 3 Integrationtest-Generator-Modell + Templates iterative Erweiterung um neue Test-Templates Fokus auf den Ansatz, volle Abstraktion (noch) nicht oberstes Ziel
26 / 30 Implementierung prototypische Implementierung des gesamten Prozesses 1 Test-Modell + Codegenerator 2 Facade-Mapping 3 Integrationtest-Generator-Modell + Templates iterative Erweiterung um neue Test-Templates Fokus auf den Ansatz, volle Abstraktion (noch) nicht oberstes Ziel
27 / 30 Entwicklung: Infrastruktur Eclipse EMF Modelle Maven Build Xpand/Xtend Transformationen/Codegenerierung JUnit/HtmlUnit Tests, Testauswertung Cargo Deployment via Maven Enterprise Java Beans Glassfish Application Server Hudson Continuous Integration Server
27 / 30 Entwicklung: Infrastruktur Eclipse EMF Modelle Maven Build Xpand/Xtend Transformationen/Codegenerierung JUnit/HtmlUnit Tests, Testauswertung Cargo Deployment via Maven Enterprise Java Beans Glassfish Application Server Hudson Continuous Integration Server
27 / 30 Entwicklung: Infrastruktur Eclipse EMF Modelle Maven Build Xpand/Xtend Transformationen/Codegenerierung JUnit/HtmlUnit Tests, Testauswertung Cargo Deployment via Maven Enterprise Java Beans Glassfish Application Server Hudson Continuous Integration Server
27 / 30 Entwicklung: Infrastruktur Eclipse EMF Modelle Maven Build Xpand/Xtend Transformationen/Codegenerierung JUnit/HtmlUnit Tests, Testauswertung Cargo Deployment via Maven Enterprise Java Beans Glassfish Application Server Hudson Continuous Integration Server
28 / 30 Risiken hoher Einarbeitungsaufwand Eclipse-Plattform Vielzahl an verwendeten Technologien komplexe Integration Vielzahl an Projekten agile Modelle durch nebenläufige Projekte jeweils eigene Anforderungen und Ziele Modelle unterliegen stetigen Anpassungen sich wiederholender Integrationsaufwand
28 / 30 Risiken hoher Einarbeitungsaufwand Eclipse-Plattform Vielzahl an verwendeten Technologien komplexe Integration Vielzahl an Projekten agile Modelle durch nebenläufige Projekte jeweils eigene Anforderungen und Ziele Modelle unterliegen stetigen Anpassungen sich wiederholender Integrationsaufwand
28 / 30 Risiken hoher Einarbeitungsaufwand Eclipse-Plattform Vielzahl an verwendeten Technologien komplexe Integration Vielzahl an Projekten agile Modelle durch nebenläufige Projekte jeweils eigene Anforderungen und Ziele Modelle unterliegen stetigen Anpassungen sich wiederholender Integrationsaufwand
29 / 30 Projekt-Interaktionen Integrationstests Systemtests basierend auf HtmlUnit und JSF-Interface Testmodell wiederverwendbar! andere Testschnittstelle, Abbildung über Facade-Mapping-Modell Klicks Formulare Navigation über mehrere Seiten EJB-Generator: Erweiterung der Assoziationen Kompositionen, Kardinalitäten Spezialisierung/Generalisierung Generator JSF-Interface
29 / 30 Projekt-Interaktionen Integrationstests Systemtests basierend auf HtmlUnit und JSF-Interface Testmodell wiederverwendbar! andere Testschnittstelle, Abbildung über Facade-Mapping-Modell Klicks Formulare Navigation über mehrere Seiten EJB-Generator: Erweiterung der Assoziationen Kompositionen, Kardinalitäten Spezialisierung/Generalisierung Generator JSF-Interface
29 / 30 Projekt-Interaktionen Integrationstests Systemtests basierend auf HtmlUnit und JSF-Interface Testmodell wiederverwendbar! andere Testschnittstelle, Abbildung über Facade-Mapping-Modell Klicks Formulare Navigation über mehrere Seiten EJB-Generator: Erweiterung der Assoziationen Kompositionen, Kardinalitäten Spezialisierung/Generalisierung Generator JSF-Interface
29 / 30 Projekt-Interaktionen Integrationstests Systemtests basierend auf HtmlUnit und JSF-Interface Testmodell wiederverwendbar! andere Testschnittstelle, Abbildung über Facade-Mapping-Modell Klicks Formulare Navigation über mehrere Seiten EJB-Generator: Erweiterung der Assoziationen Kompositionen, Kardinalitäten Spezialisierung/Generalisierung Generator JSF-Interface
30 / 30 Zusammenfassung Ansatz 1: einheitliche Teststruktur Ansatz 2: template-getriebene Testgenerierung über Facade-Annotationen Ziel: abstraktes, wiederverwendbares Test-Modell trotz erheblicher Unterschiede der Testinfrastruktur! Vielen Dank für die Aufmerksamkeit!
30 / 30 Zusammenfassung Ansatz 1: einheitliche Teststruktur Ansatz 2: template-getriebene Testgenerierung über Facade-Annotationen Ziel: abstraktes, wiederverwendbares Test-Modell trotz erheblicher Unterschiede der Testinfrastruktur! Vielen Dank für die Aufmerksamkeit!
30 / 30 Zusammenfassung Ansatz 1: einheitliche Teststruktur Ansatz 2: template-getriebene Testgenerierung über Facade-Annotationen Ziel: abstraktes, wiederverwendbares Test-Modell trotz erheblicher Unterschiede der Testinfrastruktur! Vielen Dank für die Aufmerksamkeit!
30 / 30 Zusammenfassung Ansatz 1: einheitliche Teststruktur Ansatz 2: template-getriebene Testgenerierung über Facade-Annotationen Ziel: abstraktes, wiederverwendbares Test-Modell trotz erheblicher Unterschiede der Testinfrastruktur! Vielen Dank für die Aufmerksamkeit!