1 2 3 4 5 6 7 8 9 10
Inhaltsbox Beispieltext . Zweite Ebene - Dritte Ebene
Kundenlogoposition horizontal (hochformatige Logos weiter nach oben) 1 Kapitel 1
2 Kapitel 2 Version 1.29 12.08.2013 3 Kapitel 3 1 4 Kapitel 4
5 Kapitel 5 Kundenlogoposition vertikal 6 Kapitel 6
7 Kapitel 7
8 Kapitel 8 Qualitätssicherung in ADF Projekten der IKB Deutsche Industriebank AG 1 Kapitel 1 2 Kapitel 2 Torsten Kleiber, DOAG Development, 4.6.2014 3 Kapitel 3
4 Kapitel 4
5 Kapitel 5
6 Kapitel 6
7 Kapitel 7
8 Kapitel 8
Mezzanine Minderheitsbeteiligung Börsengang/Kapitalerhöhung Convertible Bond . [Text] . [Text] . [Text] . [Text] Beschreibung
. [Text] . [Text] . [Text] . [Text] Laufzeit
. [Text] . [Text] . [Text] . [Text] Investoren
. [Text] . [Text] . [Text] . [Text] Dokumentation
. [Text] . [Text] . [Text] . [Text] Marketing
. [Text] . [Text] . [Text] . [Text] EK-Stärkung
. [Text] . [Text] . [Text] . [Text] Gesetzl. Rahmen
. [Text] . [Text] . [Text] . [Text] Vorteile
. [Text] . [Text] . [Text] . [Text] Nachteile
Bsp.-Zeile mit . [Text] . 1. Hervorhebung von . [Text] . 2. Hervorhebung von Hervorhebungen Zelle/Spalte/Zeile Zelle/Spalte/Zeile
2010 2011 2012 2013E
NRW 1.234,00 1.234,00 1.234,00 1.234,00
Hessen 1.234,00 1.234,00 1.234,00 1.234,00
Bayern 1.234,00 1.234,00 1.234,00 1.234,00
Baden- 1.234,00 1.234,00 1.234,00 1.234,00 Württemberg
Sachsen 1.234,00 1.234,00 1.234,00 1.234,00
Niedersachsen 1.234,00 1.234,00 1.234,00 1.234,00
Rheinland-Pfalz 1.234,00 1.234,00 1.234,00 1.234,00
Thüringen 1.234,00 1.234,00 1.234,00 1.234,00
Berlin- 1.234,00 1.234,00 1.234,00 1.234,00 Brandenburg
Gesamt 1.234,00 1.234,00 1.234,00 1.234,00 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 IKB – Bank des Mittelstands 2
Blocktitel 6,6 12pt 5,8 IKB im Überblick Regionale Präsenz Block oben . Seit 90 Jahren Finanzierungspartner des Mittelstands . 2.500 Kunden in Deutschland und Europa1) . Aktionäre: Lone Star 91,5 %, Streubesitz 8,5 % . ca. 1.500 Mitarbeiter . Bilanzsumme: € 25,8 Mrd.2) London 2) Hamburg . Kernkapitalquote: 11,21 % Berlin Düsseldorf (HQ) 0,6 Frankfurt
Stuttgart Blocktitel 0,8 München 12pt 1,6 Leistungsspektrum Paris Block unten Kredit Capital Markets Advisory Mailand Bilaterale Debt M&A Finanzierung Capital Markets Equity Madrid Fördermittel Debt Advisory Capital Markets Konsortial- Derivate Corporate Finance finanzierung
Leasing Sales & Trading Risikomanagement 7,8
8,2 1) Zzgl. 18.000 Kunden im Leasing-Geschäft Fußnote 2) Stand: 30. September 2013 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Über mich 3
Blocktitel 6,6 Torsten Kleiber 12pt 5,8 Block Software Architekt, Entwickler oben Kreditplattform
15 Jahre IKB, 18 Jahre Oracle Erfahrung von .Designer / Forms / Reports .PL/SQL 0,6
Blocktitel 0,8 hin zu 12pt 1,6 Block .Architektur unten .Fusion Middleware .SOA Mediator .ADF .Development Tools .Development Lifecycle .Release Management 7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Agenda 4
Blocktitel 6,6 12pt 5,8 Block ADF in der IKB Warum und wie wird ADF in der IKB eingeführt? oben Welche Ziele werden bei den QS unterstützenden Zielstellung QS Prozessen und Tools verfolgt? Warum wurden welche IDE und welcher CI Server Toolauswahl IDE / CI ausgewählt? Statische Welche Tools zur statischen Codeanalyse werden
0,6 Codeanalyse wie bei der IKB genutzt?
Blocktitel 0,8 12pt 1,6 Welche Tools für den automatischen Test werden wie Block Automatisierter Test unten bei der IKB genutzt? Wie ermittelt man, wieviel und welcher Code getestet Code Abdeckung ist? Evaluierung Welche Tools befinden sich noch in der Evaluierung? Fazit Der aktuelle Stand in den ADF Projekten.
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 ADF in der IKB 5
Blocktitel 6,6 12pt 5,8 .Ausgangspunkt: Migration Eigenentwicklung zur Kredit und Darlehensverwaltung Block oben .Forms & Reports ADF & ??? .Entscheidung ADF hauptsächlich wegen Strategie bei Oracle Fusion Applications .> 500 Forms, > 60 Menüs, > 40 Bibliotheken, > 350 Reports .Ca. 50% der Module in englisch .Startpunkt 2012 Migration 1 Eigenentwicklung MS Access ADF mit 6 Personen .Gleichzeitig Einführung agiler Methoden (Kanban) 0,6 .Aktuell 16 Entwickler + 2 Tester + 3 Coaches (Opitz Consulting, esentri) Blocktitel 0,8 12pt 1,6 .Entwicklung neuer User Stories wenn möglich in ADF (SEPA, FATCA, …) Block unten .Projekt zur Ablösung Forms & Reports über ca. 3 Jahre .Aktuell ADF Version 11.1.1.5, Migration nach 12c ist für August 2014 geplant .Internet Explorer als Browser gesetzt
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Zielstellung Qualitätssicherung 6
Blocktitel 6,6 12pt 5,8 .kontinuierliche qualitative Verbesserung der Code Basis – keine 100%! Block oben .Erlernen von Best Practices .Prüfen von Entscheidungen z.B. zu Architektur, Best Practices .Konfiguration von gegebenen Regeln .Erstellung von eigenen Regeln .Dokumentation bewusster Abweichungen von Regeln im Code und Unterbindung der weiteren Verletzung 0,6 .Integration der Regeln in die IDE des Entwicklers Blocktitel 0,8 12pt 1,6 .Integration der Regeln in den Continuous Integration Prozess Block unten .Konsequenzen im Delivery-Prozess bei Verletzung kritischer Regeln .automatischer Regressionstest im Backend und der GUI .Messung der Codeabdeckung durch Tests
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Toolauswahl – IDE und Continuous Integration Server 7
Blocktitel 6,6 12pt 5,8 .IDE Block oben - Standard ADF Stack (ADF BC, ADF Controller, ADF Faces) in der IKB, damit JDeveloper als IDE gesetzt. .Continuous Integration Server - zunächst Oracle Hudson als CI Server eingeführt - Spezielle Anforderungen an Jobs durch Hudson nicht lösbar - Support bzw. ausreichende Weiterentwicklung konnte nicht beobachtet werden 0,6 - Jenkins ist ein Fork von Hudson nach der Übernahme von Sun durch Oracle Blocktitel 0,8 12pt 1,6 - Kostenlos, aber kostenpflichtiger Support möglich Block unten - Große Community - 600+ Plugins - Umstieg auf Jenkins nach Prüfung der Anforderungen in unter einem Tag
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Vorbereitungen 8
Blocktitel 6,6 12pt 5,8 .Zentrale versionierte Ablage aller Tools (außer Jenkins Block oben Plugins) wegen Upgrades .Kann sowohl für JDeveloper als auch Jenkins verwendet werden .Beispiel der Präsentations-Umgebung verfügbar auf: https://github.com/tkleiber/de.kleiber.ciroot.git
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse - Tools 9
Blocktitel 6,6 12pt 5,8 FindBugs PMD Checkstyle Block oben . Bugs . Potenzielle Probleme . Coding Standards . Bugs Sucht / Prüft . Nicht benötigten und suboptimalen Code . Überkomplizierte Ausdrücke . Duplizierten Code (CPD) Nur Java Code Java, JSP, JSF, XML, XSL … Nur Java Code Schwer konfigurierbar Einfach konfigurierbar Einfach konfigurierbar Schwer erweiterbar Einfach erweiterbar (Java, Einfach erweiterbar (Java) XPath) 0,6 Vor- / Nachteile Unterdrückung von Unterdrückung von Meldungen im Code möglich, Unterdrückung von Meldungen im Code möglich Blocktitel 0,8 aber komplex Meldungen im Code möglich 12pt 1,6 Block Bytecode erforderlich unten Schnell Diverse IDE‘s Diverse IDE‘s Diverse IDE‘s Nicht JDeveloper JDeveloper (rudimentär) Nicht JDeveloper ANT ANT ANT Integrationen Maven Maven Maven Jenkins Jenkins Jenkins Hudson Hudson Hudson
Fazit: Die Tools decken verschieden Zwecke gut ab, sind im JDeveloper aber nur unzureichend integriert. 7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Anpassungen PMD 10 Blocktitel 6,6 .Aufgrund XML-Analyse und XPath-Regeln bot sich PMD für eigene Regeln an 12pt 5,8 Block oben .Anpassung für XML-Analyse von JDeveloper/ADF-Dateien in %pmd-src%\src\main\java\net\sourceforge\pmd\lang\Language.java
XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml"), XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml", "jws", "jpr", "cpx", "xcfg", "dcx", "jpx"), 0,6 Blocktitel 0,8 12pt 1,6 Block .PMD bauen (hier Windows) unten cd %pmd-src%\ set JDEV_HOME=C:\Oracle\JDev111240 set JAVA_HOME=%JDEV_HOME%\jdk160_24 %JDEV_HOME%\jdeveloper\apache-maven-2.2.1\bin\mvn clean package
7,8 .Datei in %ciroot%\root\lib\pmd\lib mit der aus %pmd-src%\target ersetzen
8,2 Fußnote 8pt 9,2
12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Regeln (1) 11
Blocktitel 6,6 12pt 5,8 .Standardregeln Block oben - Checkstyle: sun_checks.xml wird mit ausgeliefert - PMD: Verzeichnis rulesets in Source src\main\resources oder in pmd-x.x.x.jar .Konfiguration, z.B. Checkstyle - Javadoc Tag Prüfung ist bei privaten Variablen nicht erforderlich, wenn dafür kein Javadoc erzeugt werden soll (und die Namen selbstdokumentierend sind)
0,6
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Regeln (2) 12
Blocktitel 6,6 12pt 5,8 .Neue Regeln, PMD: Application Modules sollen auf JDBC Data Sources basieren Block oben
0,6
Blocktitel 0,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Apache Ant 13
Blocktitel 6,6 12pt 5,8 .nur für PMD existiert für JDeveloper ein rudimentäres Plugin (gepflegt von mir) Block oben .Checkstyle, PMD, FindBugs, JDeveloper in Version 11.1.1.5 und Jenkins unterstützen Ant .Output in bestimmten Format ermöglicht Sprung zum Source Code im JDeveloper .Checkstyle und PMD erfüllen Format, für FindBugs wurde ein Request angelegt .Also: allgemeines Ant-Skripts mit folgenden Anforderungen - Welche Priorität der Regelverstöße soll angezeigt werden? 0,6 - Wo liegen die zu analysierenden Source-Verzeichnisse oder –Dateien? Blocktitel 0,8 12pt 1,6 - Wo ist das Middleware- und JDeveloper-Verzeichnis? Block unten - Relative Pfade für Wiederverwendbarkeit in JDeveloper und Jenkins - Einschränkung auf Java- und ADF-Dateien - Ausführung von FindBugs immer auf mindestens dem Projekt zur Datei wg. Vermeidung False Positives bezüglich Kopplungsregeln
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – JDeveloper External Tool 14
Blocktitel 6,6 12pt 5,8 .Tools External Tools New Block oben .Type: Apache Ant .Ant Buildfile: %ciroot%\root\check.xml .Selected Targets: all (Default) .Properties: - external.tool.sources.dir: ${file.dir} - external.tool.sources.file: ${file.name} 0,6 - external.tool.sources.file.extension: ${file.ext} Blocktitel 0,8 12pt 1,6 - external.tool.project.dirname: ${project.dirname} Block unten - external.tool.workspace.dir: ${workspace.dir} .Caption for Menu Items / ToolTip Text: Checkstyle, FindBugs and PMD this .Integration: Alle Checkboxes
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Unterdrückung von Verletzungen 15
Blocktitel 6,6 12pt 5,8 .Ziele Block oben - Dokumentierte Unterdrückung im Einzelfall - Bestimmte Dateimuster (z.B. generierte Dateien) von der Analyse filtern .Für die verschiedenen Tools gibt es verschiedene Arten der Unterdrückung, z.B.: - FindBugs: - Annotations (Hierzu muss FindBugs.jar in den Pfad genommen werden!): @edu.umd.cs.FindBugs.annotations.SuppressFBWarnings(value="
7,8 - Konfiguration: Filter (Regeln, Dateien, Zeilen)
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Offene Punkte / Tasks 16
Blocktitel 6,6 12pt 5,8 • Als Tasks werden bestimmte Tags bezeichnet, die der Kennzeichnung von Block oben unfertigem oder zu korrigierenden Code dienen • Workarounds für Fehler in Komponenten, von denen man abhängig ist, werden typischerweise so gekennzeichnet • Typische Tags sind • FIXME • TODO 0,6 • TASK Blocktitel 0,8 12pt 1,6 • Umfang des Codes mit solchen Tags sollte regelmäßig minimiert werden Block unten • Tasks werden in fast allen IDE‘s und CI Servern konfigurierbar unterstützt
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Offene Punkte / Tasks im JDeveloper 17
Blocktitel 6,6 12pt 5,8 .11.x: View Tasks Block oben
0,6
Blocktitel 0,8 12pt 1,6 .12.x: Window Block unten Issues Live Issues .Bugs: - nur *.java Dateien - Marker fehlt - Issues Scope falsch
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Demo JDeveloper 18
Blocktitel 6,6 12pt 5,8 .Statische Codeanalyse im JDeveloper Block oben .Beseitigen einer kritischen Verletzung .Erneute Analyse, um Beseitigung der Verletzung nachzuweisen .Unterdrückung einer Verletzung .Erneute Analyse, um Unterdrückung der Verletzung nachzuweisen .Anzeige eines Tasks .Erledigen eines Tasks 0,6 .Commit Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Jobs & Plugins 19
Blocktitel 6,6 12pt 5,8 Block oben
.CI Root: stellt aktuelles %ciroot% Verzeichnis für alle anderen Jobs bereit .Summit – Build nach Commit: - Pollen VCS und Checkout bei Änderungen - Umgebung für Build konfigurieren (EnvInject Plugin) 0,6 - Build der Deploymentprofile der Applications Blocktitel 0,8 12pt 1,6 - Clone Jenkins Workspace für folgende Jobs (Clone Workspace SCM Plugin) Block unten .Summit – Statische Codeanalyse: - Jenkins Workspace aus Build nach Commit (Clone Workspace SCM Plugin) - Umgebung für Codeanalyse konfigurieren (EnvInject Plugin) - Ausführen der Codeanalyse - Veröffentlichen Ergebnisse (FindBugs, PMD, Checkstyle, Task Scanner Plugin) - Zusammenfassung der Einzelergebnisse (Analysis Collector Plugin) 7,8 8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Abbruch bei hochpriorisierten Regelverstößen 20
Blocktitel 6,6 12pt 5,8 .Regelverstöße, die zu potenziellen Fehler führen, brechen auch den Job in Block oben Jenkins .Beispiel: Application Modules sollen auf JDBC Datasourcen basieren (JDBC Url‘s verweisen immer auf dieselbe Datenbank, eine JDBC Datasource ist dagegen im Application Server für die entsprechende Umgebung konfiguriert) .Separates Target im Ant-Skript
0,6
Blocktitel 0,8 … 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Demo Jenkins 21
Blocktitel 6,6 12pt 5,8 .Job - Trends Block oben .Einzelergebnisse PMD -> PMD Warnungstypen .Statische Analyse Ergebnis (Zusammenfassung) .Job Instanz - Änderung Ergebnisse
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Trends 22
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Einzelergebnisse Offene Punkte 23
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Einzelergebnisse Checkstyle 24
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Einzelergebnisse FindBugs 25
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Einzelergebnisse PMD 26
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Jenkins Einzelergebnisse PMD Warnungstypen 27
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Statische Analyse Ergebnis (Zusammenfassung) 28
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Statische Codeanalyse – Änderung Ergebnisse 29
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - Tools 30
Blocktitel 6,6 Mockito / JUnit Selenium 12pt 5,8 Powermock Block oben . Framework zum Schreiben . Unterstützung der Isolation . Oberflächentest von Web- reproduzierbarer Tests und Vortäuschung von Anwendungen Ziel . Direkter Test oder Schnittstellen (Platzhalter) Ansteuerung anderer durch Inspektion der Klassen Frameworks . Unit Test in ADF BC
Assertions / Assumptions . Mockito: IDE für Aufzeichnung (Add- on) Fixtures Einfaches Mocken WebDdriver (FF, IE, Chrome, Suite / Parameterized / Gute Lesbarkeit Categories Runners Safari, Android, …) Finale Klassen / statische 0,6 Exception Testing Server (lokal, remote) Vor-/Nachteile Methoden etc. nicht mockbar Blocktitel 0,8 Matchers Grid (parallel mehrere Server) 12pt 1,6 . Powermock: Ignoring (nicht fertige Tests) AJAX nicht einfach Block Unterstützt Mockito-Style unten Timeout für Tests Nur Webanwendungen Konstruktoren / statische, Code (nicht als Anforderung private, finale Methoden lesbar) Diverse IDE‘s über JUnit alle auch dort über JUnit alle auch dort JDeveloperANT genannten Integrationen genannten Integrationen Integration Maven Jenkins Hudson
Fazit: Über die Kombination der Tools lassen sich Backend- und Oberflächentest für ADF abbilden. 7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - Unit Test mit Mockito / Powermock 31
Blocktitel 6,6 12pt 5,8 .Mocking: Isolation von Tests durch Simulation des Verhalten verwendeter Objekte Block oben .Weniger Aufwand/Fehler als bei selbstgeschriebenen Stubs .Mockito - On the fly Erzeugung von Mock Objekten durch „Ausspähen“ - Nur erwartetes Verhalten wird überschrieben - Prüfung der korrekten Benutzung des verwendeten Objekts ist möglich - Plain Java Code (Code Completion) 0,6 - Refactoring Safe Blocktitel 0,8 12pt 1,6 - Type Safe Block unten - Wenig Code und gut lesbar .Powermock - erweitert andere Mock-Frameworks PowerMockito für Mockito - Custom Classloader / ByteCode Manipulation für Mocking von statischen Methoden, Konstruktoren, finalen Klassen und Methoden, private Methoden etc.
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Source 32
Blocktitel 6,6 12pt 5,8 package oracle.summit.base; Block oben import oracle.jbo.server.DBTransaction; import oracle.jbo.server.EntityImpl; import oracle.jbo.server.SequenceImpl;
public class SummitEntityImpl extends EntityImpl { public SummitEntityImpl() { super(); }
0,6 Blocktitel 0,8 public oracle.jbo.domain.Number nextValSequence(String sequenceName, DBTransaction db) { 12pt 1,6 Block SequenceImpl s = getSequenceImpl(sequenceName, db); unten return s.getSequenceNumber(); } Refactoring für Injizierung Mock
private SequenceImpl getSequenceImpl(String sequenceName, DBTransaction db) { return new SequenceImpl(sequenceName, db); } }
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Test 33 Blocktitel 6,6 Runner Class (PowerMock) 12pt 5,8 @RunWith(PowerMockRunner.class) Block @PrepareForTest(SummitEntityImpl.class) oben public class SummitEntityImplTest { ByteCode Transformation (PowerMock) private SummitEntityImpl spy; private SequenceImpl sequenceImpl; private DBTransaction dBTransaction; private Number seqVal= new Number(1);
@Before public void prepareTest() throws Exception { spy = PowerMockito.spy(new SummitEntityImpl()); Mockobjekte 0,6 dBTransaction = Mockito.mock(DBTransaction.class); Blocktitel 0,8 sequenceImpl = Mockito.mock(SequenceImpl.class); 12pt 1,6 Block Mockito.when(sequenceImpl.getSequenceNumber()).thenReturn(seqVal); unten PowerMockito.doReturn(sequenceImpl).when(spy, "getSequenceImpl", "test", dBTransaction); } Test Erwartetes Testverhalten @Test public void testNextValSequence_test_db() throws Exception { assertEquals("Seq. not " + seqVal, seqVal, spy.nextValSequence("test", dBTransaction)); } }
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - GUI Test mit Selenium 34
Blocktitel 6,6 12pt 5,8 .Selenium IDE wird bei IKB nur selten zur Erstaufzeichnung von Tests genutzt Block oben .Selenium Grid für parallelen Test auf verschiedener Hardware / Browsern / OS … .Wrapper Bibliothek entwickelt für häufige Aufrufe, Testtreiber, Timeouts etc. .Page Object Design Pattern (Trennen von Seiten und Testcode Refactoring besser möglich) .AJAX? - Asynchrone Änderungen schwer trackbar 0,6 -
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - GUI Test mit Selenium – Page Object Index 35
Blocktitel 6,6 12pt 5,8 public class Index { Block public static final String ENV_TEST_CONTEXT_ROOT = System.getenv("TEST_CONTEXT_ROOT"); oben public static final String TEST_CONTEXT_ROOT = (ENV_TEST_CONTEXT_ROOT != null ? ENV_TEST_CONTEXT_ROOT : "SummitADF-ViewController-context-root/faces/index"); private static final String ID_TAB_WELCOME = "pt1:sdi1::disAcr"; private static final String ID_TAB_INVENTORY_CONTROL = "pt1:sdi3::disAcr"; private static final String XPATH_BUSY_ICON = "//span[@id='pt1:statInd']/img"; private static final String VALUE_BUSY_ICON_ALT = "Frei"; protected UITestDriver driverInstance;
public Index(final UITestDriver driverInstance) { this.driverInstance = driverInstance; 0,6 } Reiterkarte „Welcome“ öffnen Blocktitel 0,8 12pt 1,6 public void openTabWelcome() { Block unten driverInstance.clickById(ID_TAB_WELCOME); waitForAjaxCalls(); Reiterkarte „Inventory Control“ öffnen } public InventoryControl openTabInventoryControl() { driverInstance.clickById(ID_TAB_INVENTORY_CONTROL); waitForAjaxCalls(); return new InventoryControl(driverInstance); } public void waitForAjaxCalls() { Warten auf Abschluss von AJAX-Calls driverInstance.waitForAlt(By.xpath(XPATH_BUSY_ICON), VALUE_BUSY_ICON_ALT); }
7,8 }
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - GUI Test mit Selenium – Page Object InventoryControl 36
Blocktitel 6,6 12pt 5,8 public class InventoryControl extends Index { Block oben Ableitung der Masterseite private static final String XPATH_INVENTORY_CONTROL_HEADER = "//td[@id='pt1:r2:0:ph1::_afrTtxt']/div/h1"; XPath des Headers public InventoryControl(final UITestDriver driverInstance) { super(driverInstance);
0,6 } Ermitteln des Headertexts
Blocktitel 0,8 12pt 1,6 Block public String getInventoryControlHeaderText() { unten return driverInstance.getTextByXpath( XPATH_INVENTORY_CONTROL_HEADER); } }
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - GUI Test mit Selenium – Test 37
Blocktitel 6,6 12pt 5,8 public class IndexTest extends SeleniumTest { Block oben @Test public void testOpenTabWelcome() { driverInstance.getRelativeUrl(Index.TEST_CONTEXT_ROOT); final Index index = new Index(driverInstance); final InventoryControl inventoryControl=
0,6 index.openTabInventoryControl();
Blocktitel 0,8 assertEquals("Header is not correct", 12pt 1,6 Block inventoryControl.getInventoryControlHeaderText(), unten "Inventory Items (Low Stock)"); } }
Abstrakte Beschreibung des Tests
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - JUnit im JDeveloper 38
Blocktitel 6,6 12pt 5,8 .JUnit selbst für Tests oder als Wrapper für Mockito / PowerMockito / Selenium Block oben .JUnit muss als Extension in den JDeveloper installiert werden .Testausführung direkt im JDeveloper (außer PowerMockito in 12c – in Prüfung)
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - JUnit in Jenkins (1) 39
Blocktitel 6,6 12pt 5,8 .Derzeit wird das JUnit Target in ANT verwendet, um die Tests auszuführen Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten .In Jenkins ist JUnit Reporting integriert, es muss nur ein Pattern zu den Ergebnissen angegeben werden
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Automatisierter Test - JUnit in Jenkins (2) 40
Blocktitel 6,6 12pt 5,8 .Trend Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten .Testergebnisse
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Testabdeckung - Jacoco 41
Blocktitel 6,6 12pt 5,8 .Ermittelt, wie der Sourcecode im Test abgedeckt wird Block oben .Messung erfolgt derzeit nur für Unit-Tests .on-the-fly instrumentation nicht nutzbar, da auch PowerMockito dynamic classfile transformation vornimmt und diese Testabdeckung dann nicht gemessen werden kann offline intrumentation
0,6
12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Testabdeckung – Jacoco im JDeveloper 42
Blocktitel 6,6 12pt 5,8 .für den Entwickler wird per ANT ein Report erzeugt Block oben
0,6
Blocktitel 0,8
12pt 1,6 Block unten7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Testabdeckung – Jacoco in Jenkins (1) 43
Blocktitel 6,6 12pt 5,8 .Im Jenkins kommt das JaCoCo Plugin zum Einsatz, Konfiguration: Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten .Reports
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Testabdeckung – Jacoco in Jenkins (2) 44
Blocktitel 6,6 12pt 5,8 .Reports (2) Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Evaluierung 45
Blocktitel 6,6 12pt 5,8 .ADF EMG Audit Rules (Implementierung der ADF Code Guidelines) Block oben - für 11.1.1.x seit kurzem verfügbar - in 11.1.1.x keine Meldungsunterdrückung möglich via Suppress Warnings Extension - 12c .Sonarcube - ADF EMG Audit Rules für Prüfung in JDeveloper 0,6 - SonarQube ojaudit plugin für Prüfung in Sonarcube via Jenkins Blocktitel 0,8 12pt 1,6 - 12c Block unten .Testparallelisierung (ab JUnit 4.8, JUnit 4.10 erst im Plugin für 12c enthalten) .ADF Task Flow Tester .Testabdeckung GUI-Tests .…
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Fazit 46
Blocktitel 6,6 12pt 5,8 .Erreichte Ziele Block oben - Es wurden diverse Voraussetzungen für die automatisierte QS geschaffen - Zusätzlich zum automatisierten Test erfolgt ein Pre-Test in IT und der Acceptance Test in der Fachabteilung - Erste automatisierte Tests wurden erstellt - Know How in diversen Tools wurde aufgebaut .Herausforderungen: 0,6 - Schulung der Entwickler auf allen Gebieten Blocktitel 0,8 12pt 1,6 - Aufwände in die agile Entwicklungsweise verankern für Block unten - Design und Automatisierung von Tests - Umsetzung der Ergebnisse der statischen Codeanalyse - Feinjustierung der Regeln
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Fragen & Antworten 47
Blocktitel 6,6 12pt 5,8 Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2 12,4 rot = 1/2-Layout grün = 1/3-Layout 5,0 4,0 0,6 0,6 4,0 5,0 12,4
Seitentitel 9,0 20pt
7,4 Referenzen 48
Blocktitel 6,6 12pt 5,8 .Markus Sprunck: Direct Comparison of FindBugs, PMD and Checkstyle Block oben
0,6
Blocktitel 0,8 12pt 1,6 Block unten
7,8
8,2 Fußnote 8pt 9,2