SlideShare ist ein Scribd-Unternehmen logo
Qualitätssicherung in ADF Projekten
der IKB Deutsche Industriebank AG
Torsten Kleiber, DOAG Development, 4.6.2014
IKB – Bank des Mittelstands
IKB im Überblick
Leistungsspektrum
Regionale Präsenz
1) Zzgl. 18.000 Kunden im Leasing-Geschäft
2) Stand: 30. September 2013
2
 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)
 Kernkapitalquote: 11,21 %2)
Mailand
London
Paris
Madrid
München
Stuttgart
Frankfurt
Düsseldorf (HQ)
Berlin
Hamburg
Fördermittel
Konsortial-
finanzierung
Leasing
Equity
Capital Markets
Advisory
M&A
Corporate Finance
Risikomanagement
Debt Advisory
Derivate
Sales & Trading
Kredit
Bilaterale
Finanzierung
Capital Markets
Debt
Capital Markets
Über mich
Torsten Kleiber
Software Architekt, Entwickler
Kreditplattform
15 Jahre IKB, 18 Jahre Oracle Erfahrung
von
Designer / Forms / Reports
PL/SQL
hin zu
Architektur
Fusion Middleware
SOA Mediator
ADF
Development Tools
Development Lifecycle
Release Management
3
Agenda
4
ADF in der IKB Warum und wie wird ADF in der IKB eingeführt?
Zielstellung QS
Welche Ziele werden bei den QS unterstützenden
Prozessen und Tools verfolgt?
Toolauswahl IDE / CI
Warum wurden welche IDE und welcher CI Server
ausgewählt?
Statische
Codeanalyse
Welche Tools zur statischen Codeanalyse werden
wie bei der IKB genutzt?
Automatisierter Test
Welche Tools für den automatischen Test werden wie
bei der IKB genutzt?
Code Abdeckung
Wie ermittelt man, wieviel und welcher Code getestet
ist?
Evaluierung Welche Tools befinden sich noch in der Evaluierung?
Fazit Der aktuelle Stand in den ADF Projekten.
ADF in der IKB
Ausgangspunkt: Migration Eigenentwicklung zur Kredit und Darlehensverwaltung
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)
Aktuell 16 Entwickler + 2 Tester + 3 Coaches (Opitz Consulting, esentri)
Entwicklung neuer User Stories wenn möglich in ADF (SEPA, FATCA, …)
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
5
Zielstellung Qualitätssicherung
kontinuierliche qualitative Verbesserung der Code Basis – keine 100%!
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
Integration der Regeln in die IDE des Entwicklers
Integration der Regeln in den Continuous Integration Prozess
Konsequenzen im Delivery-Prozess bei Verletzung kritischer Regeln
automatischer Regressionstest im Backend und der GUI
Messung der Codeabdeckung durch Tests
6
Toolauswahl – IDE und Continuous Integration Server
IDE
- 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
- Jenkins ist ein Fork von Hudson nach der Übernahme von Sun durch Oracle
- Kostenlos, aber kostenpflichtiger Support möglich
- Große Community
- 600+ Plugins
- Umstieg auf Jenkins nach Prüfung der Anforderungen in unter einem Tag
7
Vorbereitungen
Zentrale versionierte Ablage aller Tools (außer Jenkins
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
8
Statische Codeanalyse - Tools
Sucht / Prüft
Vor- / Nachteile
Integrationen
FindBugs PMD Checkstyle
 Bugs  Potenzielle Probleme
 Bugs
 Nicht benötigten und
suboptimalen Code
 Überkomplizierte Ausdrücke
 Duplizierten Code (CPD)
 Coding Standards
 Nur Java Code
 Schwer konfigurierbar
 Schwer erweiterbar
Unterdrückung von
Meldungen im Code möglich,
aber komplex
 Bytecode erforderlich
Schnell
Java, JSP, JSF, XML, XSL …
Einfach konfigurierbar
Einfach erweiterbar (Java,
XPath)
Unterdrückung von
Meldungen im Code möglich
 Nur Java Code
Einfach konfigurierbar
Einfach erweiterbar (Java)
Unterdrückung von
Meldungen im Code möglich
Diverse IDE‘s
 Nicht JDeveloper
ANT
Maven
Jenkins
Hudson
Diverse IDE‘s
JDeveloper (rudimentär)
ANT
Maven
Jenkins
Hudson
Diverse IDE‘s
 Nicht JDeveloper
ANT
Maven
Jenkins
Hudson
 Fazit: Die Tools decken verschieden Zwecke gut ab, sind im JDeveloper aber nur unzureichend integriert.
9
Statische Codeanalyse – Anpassungen PMD
Aufgrund XML-Analyse und XPath-Regeln bot sich PMD für eigene Regeln an
Anpassung für XML-Analyse von JDeveloper/ADF-Dateien in
%pmd-src%srcmainjavanetsourceforgepmdlangLanguage.java
XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml"),

XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml", "jws", "jpr", "cpx", "xcfg",
"dcx", "jpx"),
PMD bauen (hier Windows)
cd %pmd-src%
set JDEV_HOME=C:OracleJDev111240
set JAVA_HOME=%JDEV_HOME%jdk160_24
%JDEV_HOME%jdeveloperapache-maven-2.2.1binmvn clean package
Datei in %ciroot%rootlibpmdlib mit der aus %pmd-src%target ersetzen
10
Statische Codeanalyse – Regeln (1)
Standardregeln
- Checkstyle: sun_checks.xml wird mit ausgeliefert
- PMD: Verzeichnis rulesets in Source srcmainresources 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)
<module name="JavadocVariable">
<property name="excludeScope" value="private"/>
</module>
11
Statische Codeanalyse – Regeln (2)
Neue Regeln, PMD: Application Modules sollen auf JDBC Data Sources basieren
<rule name="OracleAdfAmShouldNotBaseOnJdbcUrl" language="xml"
message="ADF application module configurations should based on
JDBC data sources, not on JDBC URLs"
class="net.sourceforge.pmd.lang.rule.XPathRule">
<priority>1</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
/BC4JConfig/AppModuleConfigBag/AppModuleConfig[@JDBCName]
]]>
</value>
</property>
</properties>
</rule>
12
Statische Codeanalyse – Apache Ant
nur für PMD existiert für JDeveloper ein rudimentäres Plugin (gepflegt von mir)
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?
- Wo liegen die zu analysierenden Source-Verzeichnisse oder –Dateien?
- Wo ist das Middleware- und JDeveloper-Verzeichnis?
- 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
13
Statische Codeanalyse – JDeveloper External Tool
Tools  External Tools  New
Type: Apache Ant
Ant Buildfile: %ciroot%rootcheck.xml
Selected Targets: all (Default)
Properties:
- external.tool.sources.dir: ${file.dir}
- external.tool.sources.file: ${file.name}
- external.tool.sources.file.extension: ${file.ext}
- external.tool.project.dirname: ${project.dirname}
- external.tool.workspace.dir: ${workspace.dir}
Caption for Menu Items / ToolTip Text: Checkstyle, FindBugs and PMD this
Integration: Alle Checkboxes
14
Statische Codeanalyse – Unterdrückung von Verletzungen
Ziele
- 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="<Regel>",
justification="Begründung")
- Konfiguration: Filter
- PMD:
- Annotations: @SuppressWarnings("PMD.<Regeltyp>")
- Kommentare: // NOPMD (konfigurierbar)
- Regelkonfiguration: Violation Suppress Regex / Xpath
- Checkstyle
- Kommentare: Checkstyle:ON / Checkstyle:OFF
- Konfiguration: Filter (Regeln, Dateien, Zeilen)
15
Statische Codeanalyse – Offene Punkte / Tasks
• Als Tasks werden bestimmte Tags bezeichnet, die der Kennzeichnung von
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
• TASK
• Umfang des Codes mit solchen Tags sollte regelmäßig minimiert werden
• Tasks werden in fast allen IDE‘s und CI Servern konfigurierbar unterstützt
16
Statische Codeanalyse – Offene Punkte / Tasks im JDeveloper
11.x: View  Tasks
17
12.x: Window 
Issues  Live Issues
Bugs:
- nur *.java Dateien
- Marker fehlt
- Issues Scope falsch
Statische Codeanalyse – Demo JDeveloper
Statische Codeanalyse im JDeveloper
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
Commit
18
Statische Codeanalyse – Jenkins Jobs & Plugins
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)
- Build der Deploymentprofile der Applications
- Clone Jenkins Workspace für folgende Jobs (Clone Workspace SCM Plugin)
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)
19
Statische Codeanalyse – Abbruch bei hochpriorisierten Regelverstößen
Regelverstöße, die zu potenziellen Fehler führen, brechen auch den Job in
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
<pmd rulesetfiles="pmd_config.xml" failonruleviolation="true">
…
</pmd>
20
Statische Codeanalyse – Demo Jenkins
Job - Trends
Einzelergebnisse PMD -> PMD Warnungstypen
Statische Analyse Ergebnis (Zusammenfassung)
Job Instanz - Änderung Ergebnisse
21
Statische Codeanalyse – Jenkins Trends
22
Statische Codeanalyse – Jenkins Einzelergebnisse Offene Punkte
23
Statische Codeanalyse – Jenkins Einzelergebnisse Checkstyle
24
Statische Codeanalyse – Jenkins Einzelergebnisse FindBugs
25
Statische Codeanalyse – Jenkins Einzelergebnisse PMD
26
Statische Codeanalyse – Jenkins Einzelergebnisse PMD Warnungstypen
27
Statische Codeanalyse – Statische Analyse Ergebnis (Zusammenfassung)
28
Statische Codeanalyse – Änderung Ergebnisse
29
Automatisierter Test - Tools
Ziel
Vor-/Nachteile
Integration
JUnit
Mockito /
Powermock
Selenium
 Framework zum Schreiben
reproduzierbarer Tests
 Direkter Test oder
Ansteuerung anderer
Frameworks
 Unterstützung der Isolation
und Vortäuschung von
Schnittstellen (Platzhalter)
durch Inspektion der Klassen
 Unit Test in ADF BC
 Oberflächentest von Web-
Anwendungen
Assertions / Assumptions
Fixtures
Suite / Parameterized /
Categories Runners
Exception Testing
Matchers
Ignoring (nicht fertige Tests)
Timeout für Tests
 Code (nicht als Anforderung
lesbar)
 Mockito:
Einfaches Mocken
Gute Lesbarkeit
 Finale Klassen / statische
Methoden etc. nicht mockbar
 Powermock:
Unterstützt Mockito-Style
Konstruktoren / statische,
private, finale Methoden
IDE für Aufzeichnung (Add-
on)
WebDdriver (FF, IE, Chrome,
Safari, Android, …)
Server (lokal, remote)
Grid (parallel mehrere Server)
AJAX nicht einfach
Nur Webanwendungen
Diverse IDE‘s
JDeveloperANT
Maven
Jenkins
Hudson
über JUnit alle auch dort
genannten Integrationen
über JUnit alle auch dort
genannten Integrationen
 Fazit: Über die Kombination der Tools lassen sich Backend- und Oberflächentest für ADF abbilden.
30
Automatisierter Test - Unit Test mit Mockito / Powermock
Mocking: Isolation von Tests durch Simulation des Verhalten verwendeter Objekte
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)
- Refactoring Safe
- Type Safe
- 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.
31
Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Source
package oracle.summit.base;
import oracle.jbo.server.DBTransaction;
import oracle.jbo.server.EntityImpl;
import oracle.jbo.server.SequenceImpl;
public class SummitEntityImpl extends EntityImpl {
public SummitEntityImpl() {
super();
}
public oracle.jbo.domain.Number nextValSequence(String sequenceName, DBTransaction db) {
SequenceImpl s = getSequenceImpl(sequenceName, db);
return s.getSequenceNumber();
}
private SequenceImpl getSequenceImpl(String sequenceName, DBTransaction db) {
return new SequenceImpl(sequenceName, db);
}
}
32
Refactoring für Injizierung Mock
Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Test
@RunWith(PowerMockRunner.class)
@PrepareForTest(SummitEntityImpl.class)
public class SummitEntityImplTest {
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());
dBTransaction = Mockito.mock(DBTransaction.class);
sequenceImpl = Mockito.mock(SequenceImpl.class);
Mockito.when(sequenceImpl.getSequenceNumber()).thenReturn(seqVal);
PowerMockito.doReturn(sequenceImpl).when(spy, "getSequenceImpl", "test",
dBTransaction);
}
@Test
public void testNextValSequence_test_db() throws Exception {
assertEquals("Seq. not " + seqVal, seqVal, spy.nextValSequence("test", dBTransaction));
}
}
33
Mockobjekte
Erwartetes TestverhaltenTest
Runner Class (PowerMock)
ByteCode Transformation (PowerMock)
Automatisierter Test - GUI Test mit Selenium
Selenium IDE wird bei IKB nur selten zur Erstaufzeichnung von Tests genutzt
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
- <af:statusIndicator/>: Abfrage des Attributes Name oder Alt des Icons
Wegen Unverträglichkeit mit XML Parsern der ADF Editoren müssen Tests in
separatem Projekt liegen (auch wg. Deployment als ADF Library sinnvoll)
Derzeit Probleme mit Stabilität speziell des ersten Test nach Deployment
34
Automatisierter Test - GUI Test mit Selenium – Page Object Index
public class Index {
public static final String ENV_TEST_CONTEXT_ROOT = System.getenv("TEST_CONTEXT_ROOT");
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;
}
public void openTabWelcome() {
driverInstance.clickById(ID_TAB_WELCOME);
waitForAjaxCalls();
}
public InventoryControl openTabInventoryControl() {
driverInstance.clickById(ID_TAB_INVENTORY_CONTROL);
waitForAjaxCalls();
return new InventoryControl(driverInstance);
}
public void waitForAjaxCalls() {
driverInstance.waitForAlt(By.xpath(XPATH_BUSY_ICON), VALUE_BUSY_ICON_ALT);
}
}
35
Reiterkarte „Welcome“ öffnen
Reiterkarte „Inventory Control“ öffnen
Warten auf Abschluss von AJAX-Calls
Automatisierter Test - GUI Test mit Selenium – Page Object InventoryControl
public class InventoryControl extends Index {
private static final String XPATH_INVENTORY_CONTROL_HEADER =
"//td[@id='pt1:r2:0:ph1::_afrTtxt']/div/h1";
public InventoryControl(final UITestDriver driverInstance) {
super(driverInstance);
}
public String getInventoryControlHeaderText() {
return driverInstance.getTextByXpath(
XPATH_INVENTORY_CONTROL_HEADER);
}
}
36
Ableitung der Masterseite
Ermitteln des Headertexts
XPath des Headers
Automatisierter Test - GUI Test mit Selenium – Test
public class IndexTest extends SeleniumTest {
@Test
public void testOpenTabWelcome() {
driverInstance.getRelativeUrl(Index.TEST_CONTEXT_ROOT);
final Index index = new Index(driverInstance);
final InventoryControl inventoryControl=
index.openTabInventoryControl();
assertEquals("Header is not correct",
inventoryControl.getInventoryControlHeaderText(),
"Inventory Items (Low Stock)");
}
}
37
Abstrakte Beschreibung des Tests
Automatisierter Test - JUnit im JDeveloper
JUnit selbst für Tests oder als Wrapper für Mockito / PowerMockito / Selenium
JUnit muss als Extension in den JDeveloper installiert werden
Testausführung direkt im JDeveloper (außer PowerMockito in 12c – in Prüfung)
38
Automatisierter Test - JUnit in Jenkins (1)
Derzeit wird das JUnit Target in ANT verwendet, um die Tests auszuführen
<junit printsummary="yes"
<classpath refid="classpath.test"/>
<formatter type="xml"/>
<batchtest fork="yes" todir="${basedir}/results/junit">
<fileset dir="${test.dir}">
<include name="${sub.junit.run.test.inlude}"/>
</fileset>
</batchtest>
</junit>
In Jenkins ist JUnit Reporting integriert, es muss nur ein Pattern zu den
Ergebnissen angegeben werden
39
Automatisierter Test - JUnit in Jenkins (2)
Trend
40
Testergebnisse
Testabdeckung - Jacoco
Ermittelt, wie der Sourcecode im Test abgedeckt wird
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
<jacoco:instrument destdir="${jacoco.instrumented.classes.dir}">
<fileset dir="${base.project.classes.dir}"/>
</jacoco:instrument>
Ausführung ist Bestandteil der Testjobs und wrapped Junit (ANT)
<jacoco:coverage destfile="${jacoco.exec.file}">
<junit printsummary="yes" fork="true" forkmode="once">
…
</junit>
</jacoco:coverage>
41
Testabdeckung – Jacoco im JDeveloper
für den Entwickler wird per ANT ein Report erzeugt
<jacoco:report>
<executiondata><file file="${jacoco.exec.file}"/></executiondata>
<structure name="${base.project.dir}">
<classfiles><fileset dir="${jacoco.instrumented.classes.dir}"/></classfiles>
<sourcefiles><fileset dir="${base.project.sources.dir}"/></sourcefiles>
</structure>
<html destdir="${jacoco.results.dir}"/>
</jacoco:report>
42
Testabdeckung – Jacoco in Jenkins (1)
Im Jenkins kommt das JaCoCo Plugin zum Einsatz, Konfiguration:
43
Reports
Testabdeckung – Jacoco in Jenkins (2)
Reports (2)
44
Evaluierung
ADF EMG Audit Rules (Implementierung der ADF Code Guidelines)
- 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
- SonarQube ojaudit plugin für Prüfung in Sonarcube via Jenkins
-  12c
Testparallelisierung (ab JUnit 4.8, JUnit 4.10 erst im Plugin für 12c enthalten)
ADF Task Flow Tester
Testabdeckung GUI-Tests
…
45
Fazit
Erreichte Ziele
- 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:
- Schulung der Entwickler auf allen Gebieten
- Aufwände in die agile Entwicklungsweise verankern für
- Design und Automatisierung von Tests
- Umsetzung der Ergebnisse der statischen Codeanalyse
- Feinjustierung der Regeln
46
Fragen & Antworten
47
Referenzen
Markus Sprunck: Direct Comparison of FindBugs, PMD and Checkstyle
48

Weitere ähnliche Inhalte

Was ist angesagt?

Zend Framework
Zend FrameworkZend Framework
Zend Framework
luckec
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-ApplikationenPRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
luckec
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
OPEN KNOWLEDGE GmbH
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
NETWAYS
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Wolfgang Weigend
 
Requirements Engineering in agilen Projekten - Flexibilität ist gefordert
Requirements Engineering in agilen Projekten - Flexibilität ist gefordertRequirements Engineering in agilen Projekten - Flexibilität ist gefordert
Requirements Engineering in agilen Projekten - Flexibilität ist gefordert
GFU Cyrus AG
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 Minuten
QAware GmbH
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
Ulrich Krause
 
Qualitätssicherung in Webprojekten
Qualitätssicherung in WebprojektenQualitätssicherung in Webprojekten
Qualitätssicherung in Webprojekten
Sebastian Springer
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
Sandro Sonntag
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
Java Usergroup Berlin-Brandenburg
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
GFU Cyrus AG
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
GFU Cyrus AG
 

Was ist angesagt? (15)

Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-ApplikationenPRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
Requirements Engineering in agilen Projekten - Flexibilität ist gefordert
Requirements Engineering in agilen Projekten - Flexibilität ist gefordertRequirements Engineering in agilen Projekten - Flexibilität ist gefordert
Requirements Engineering in agilen Projekten - Flexibilität ist gefordert
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 Minuten
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Qualitätssicherung in Webprojekten
Qualitätssicherung in WebprojektenQualitätssicherung in Webprojekten
Qualitätssicherung in Webprojekten
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 

Andere mochten auch

Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUpsDie Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
Steffen Ritter
 
S U R F I N G
S U R F I N GS U R F I N G
S U R F I N G
Marlis
 
Verschiedenen Berufen
Verschiedenen BerufenVerschiedenen Berufen
Verschiedenen Berufen
lilalia
 
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
Christopher Buschow
 
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
e-teaching.org
 
Fremdsprachendidaktik und Lerntechnologien
Fremdsprachendidaktik und LerntechnologienFremdsprachendidaktik und Lerntechnologien
Fremdsprachendidaktik und Lerntechnologien
e-teaching.org
 
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
e-teaching.org
 
Webfonts in the wild
Webfonts in the wildWebfonts in the wild
Webfonts in the wild
Gerrit van Aaken
 
Eine (sehr) kurze Einführung in formale Ontologien
Eine (sehr) kurze Einführung in formale OntologienEine (sehr) kurze Einführung in formale Ontologien
Eine (sehr) kurze Einführung in formale Ontologien
mahok
 
E-Learning-Trendforschung: Marc Göcks
E-Learning-Trendforschung: Marc GöcksE-Learning-Trendforschung: Marc Göcks
E-Learning-Trendforschung: Marc Göcks
e-teaching.org
 
Die Pisastudie und ihre Ursachen
Die Pisastudie und ihre UrsachenDie Pisastudie und ihre Ursachen
Die Pisastudie und ihre Ursachen
guestcd857d
 
100 Jahre Viehzuchtverein Oberbalm Festführer
100 Jahre Viehzuchtverein Oberbalm Festführer100 Jahre Viehzuchtverein Oberbalm Festführer
100 Jahre Viehzuchtverein Oberbalm Festführer
werbal.com
 
Medienkompetenz und Wikipedia an Hochschulen.
Medienkompetenz und Wikipedia an Hochschulen.Medienkompetenz und Wikipedia an Hochschulen.
Medienkompetenz und Wikipedia an Hochschulen.
e-teaching.org
 
E-teaching Präsenation
E-teaching PräsenationE-teaching Präsenation
E-teaching Präsenation
e-teaching.org
 
Funny Olympics
Funny OlympicsFunny Olympics
Funny Olympics
alex
 
Kisses Can Be Different
Kisses Can Be DifferentKisses Can Be Different
Kisses Can Be Different
amonyhig .
 
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
e-teaching.org
 

Andere mochten auch (20)

Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUpsDie Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
Die Zukunft verkauft sich nicht von alleine: SaaS-Vertrieb für StartUps
 
S U R F I N G
S U R F I N GS U R F I N G
S U R F I N G
 
Verschiedenen Berufen
Verschiedenen BerufenVerschiedenen Berufen
Verschiedenen Berufen
 
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
Programm Workshop "Kulturorganisationen (weiter-)entwickeln", 20. - 21. Septe...
 
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
persönlich, komfortabel, interaktiv - Das virtuelle Klassenzimmer im Fernstud...
 
Fremdsprachendidaktik und Lerntechnologien
Fremdsprachendidaktik und LerntechnologienFremdsprachendidaktik und Lerntechnologien
Fremdsprachendidaktik und Lerntechnologien
 
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
Neue Lernorte an der Universität – das Projekt Mobile Lehre Hohenheim (Slides...
 
Webfonts in the wild
Webfonts in the wildWebfonts in the wild
Webfonts in the wild
 
Eine (sehr) kurze Einführung in formale Ontologien
Eine (sehr) kurze Einführung in formale OntologienEine (sehr) kurze Einführung in formale Ontologien
Eine (sehr) kurze Einführung in formale Ontologien
 
E-Learning-Trendforschung: Marc Göcks
E-Learning-Trendforschung: Marc GöcksE-Learning-Trendforschung: Marc Göcks
E-Learning-Trendforschung: Marc Göcks
 
Die Pisastudie und ihre Ursachen
Die Pisastudie und ihre UrsachenDie Pisastudie und ihre Ursachen
Die Pisastudie und ihre Ursachen
 
Licht An!
Licht An!Licht An!
Licht An!
 
100 Jahre Viehzuchtverein Oberbalm Festführer
100 Jahre Viehzuchtverein Oberbalm Festführer100 Jahre Viehzuchtverein Oberbalm Festführer
100 Jahre Viehzuchtverein Oberbalm Festführer
 
Medienkompetenz und Wikipedia an Hochschulen.
Medienkompetenz und Wikipedia an Hochschulen.Medienkompetenz und Wikipedia an Hochschulen.
Medienkompetenz und Wikipedia an Hochschulen.
 
E-teaching Präsenation
E-teaching PräsenationE-teaching Präsenation
E-teaching Präsenation
 
Funny Olympics
Funny OlympicsFunny Olympics
Funny Olympics
 
Verdures
VerduresVerdures
Verdures
 
Georg (saksakeelne)
Georg  (saksakeelne)Georg  (saksakeelne)
Georg (saksakeelne)
 
Kisses Can Be Different
Kisses Can Be DifferentKisses Can Be Different
Kisses Can Be Different
 
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
E-Prüfungs-Szenarien: Im Klausurraum, mit Prüfungslaptop und am eigenen Lapto...
 

Ähnlich wie Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG

Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Andreas Schreiber
 
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
BOSTON Server & Storage Solutions GmbH
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Andreas Schreiber
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur
Nico Steiner
 
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
OPITZ CONSULTING Deutschland
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
OPITZ CONSULTING Deutschland
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
Eduard Hildebrandt
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Aarno Aukia
 
OGD Cockpit Barcamp Bochum Krabina 2022.pdf
OGD Cockpit Barcamp Bochum Krabina 2022.pdfOGD Cockpit Barcamp Bochum Krabina 2022.pdf
OGD Cockpit Barcamp Bochum Krabina 2022.pdf
Bernhard Krabina
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann
 
Lean development 04
Lean development 04Lean development 04
Lean development 04
SuperB2
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle Datenbank
Ulrike Schwinn
 
CDI
CDICDI
Domain-Driven Design in der Praxis
Domain-Driven Design in der PraxisDomain-Driven Design in der Praxis
Domain-Driven Design in der Praxis
Michael Mirold
 
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
FotiosKaramitsos
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
Tobias Trelle
 
Roadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & FeaturesRoadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & Features
Digicomp Academy AG
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
camunda services GmbH
 
Infrastructure Solution Day | Core
Infrastructure Solution Day | CoreInfrastructure Solution Day | Core
Infrastructure Solution Day | Core
Microsoft Österreich
 

Ähnlich wie Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG (20)

Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
Fische im Rechenzentrum – Was genau ist eigentlich dieses Redfish und wozu br...
 
GWT
GWTGWT
GWT
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur2. Technologie-Tag - Frontend Architektur
2. Technologie-Tag - Frontend Architektur
 
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
 
OGD Cockpit Barcamp Bochum Krabina 2022.pdf
OGD Cockpit Barcamp Bochum Krabina 2022.pdfOGD Cockpit Barcamp Bochum Krabina 2022.pdf
OGD Cockpit Barcamp Bochum Krabina 2022.pdf
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Lean development 04
Lean development 04Lean development 04
Lean development 04
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle Datenbank
 
CDI
CDICDI
CDI
 
Domain-Driven Design in der Praxis
Domain-Driven Design in der PraxisDomain-Driven Design in der Praxis
Domain-Driven Design in der Praxis
 
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Roadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & FeaturesRoadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & Features
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
 
Infrastructure Solution Day | Core
Infrastructure Solution Day | CoreInfrastructure Solution Day | Core
Infrastructure Solution Day | Core
 

Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG

  • 1. Qualitätssicherung in ADF Projekten der IKB Deutsche Industriebank AG Torsten Kleiber, DOAG Development, 4.6.2014
  • 2. IKB – Bank des Mittelstands IKB im Überblick Leistungsspektrum Regionale Präsenz 1) Zzgl. 18.000 Kunden im Leasing-Geschäft 2) Stand: 30. September 2013 2  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)  Kernkapitalquote: 11,21 %2) Mailand London Paris Madrid München Stuttgart Frankfurt Düsseldorf (HQ) Berlin Hamburg Fördermittel Konsortial- finanzierung Leasing Equity Capital Markets Advisory M&A Corporate Finance Risikomanagement Debt Advisory Derivate Sales & Trading Kredit Bilaterale Finanzierung Capital Markets Debt Capital Markets
  • 3. Über mich Torsten Kleiber Software Architekt, Entwickler Kreditplattform 15 Jahre IKB, 18 Jahre Oracle Erfahrung von Designer / Forms / Reports PL/SQL hin zu Architektur Fusion Middleware SOA Mediator ADF Development Tools Development Lifecycle Release Management 3
  • 4. Agenda 4 ADF in der IKB Warum und wie wird ADF in der IKB eingeführt? Zielstellung QS Welche Ziele werden bei den QS unterstützenden Prozessen und Tools verfolgt? Toolauswahl IDE / CI Warum wurden welche IDE und welcher CI Server ausgewählt? Statische Codeanalyse Welche Tools zur statischen Codeanalyse werden wie bei der IKB genutzt? Automatisierter Test Welche Tools für den automatischen Test werden wie bei der IKB genutzt? Code Abdeckung Wie ermittelt man, wieviel und welcher Code getestet ist? Evaluierung Welche Tools befinden sich noch in der Evaluierung? Fazit Der aktuelle Stand in den ADF Projekten.
  • 5. ADF in der IKB Ausgangspunkt: Migration Eigenentwicklung zur Kredit und Darlehensverwaltung 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) Aktuell 16 Entwickler + 2 Tester + 3 Coaches (Opitz Consulting, esentri) Entwicklung neuer User Stories wenn möglich in ADF (SEPA, FATCA, …) 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 5
  • 6. Zielstellung Qualitätssicherung kontinuierliche qualitative Verbesserung der Code Basis – keine 100%! 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 Integration der Regeln in die IDE des Entwicklers Integration der Regeln in den Continuous Integration Prozess Konsequenzen im Delivery-Prozess bei Verletzung kritischer Regeln automatischer Regressionstest im Backend und der GUI Messung der Codeabdeckung durch Tests 6
  • 7. Toolauswahl – IDE und Continuous Integration Server IDE - 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 - Jenkins ist ein Fork von Hudson nach der Übernahme von Sun durch Oracle - Kostenlos, aber kostenpflichtiger Support möglich - Große Community - 600+ Plugins - Umstieg auf Jenkins nach Prüfung der Anforderungen in unter einem Tag 7
  • 8. Vorbereitungen Zentrale versionierte Ablage aller Tools (außer Jenkins 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 8
  • 9. Statische Codeanalyse - Tools Sucht / Prüft Vor- / Nachteile Integrationen FindBugs PMD Checkstyle  Bugs  Potenzielle Probleme  Bugs  Nicht benötigten und suboptimalen Code  Überkomplizierte Ausdrücke  Duplizierten Code (CPD)  Coding Standards  Nur Java Code  Schwer konfigurierbar  Schwer erweiterbar Unterdrückung von Meldungen im Code möglich, aber komplex  Bytecode erforderlich Schnell Java, JSP, JSF, XML, XSL … Einfach konfigurierbar Einfach erweiterbar (Java, XPath) Unterdrückung von Meldungen im Code möglich  Nur Java Code Einfach konfigurierbar Einfach erweiterbar (Java) Unterdrückung von Meldungen im Code möglich Diverse IDE‘s  Nicht JDeveloper ANT Maven Jenkins Hudson Diverse IDE‘s JDeveloper (rudimentär) ANT Maven Jenkins Hudson Diverse IDE‘s  Nicht JDeveloper ANT Maven Jenkins Hudson  Fazit: Die Tools decken verschieden Zwecke gut ab, sind im JDeveloper aber nur unzureichend integriert. 9
  • 10. Statische Codeanalyse – Anpassungen PMD Aufgrund XML-Analyse und XPath-Regeln bot sich PMD für eigene Regeln an Anpassung für XML-Analyse von JDeveloper/ADF-Dateien in %pmd-src%srcmainjavanetsourceforgepmdlangLanguage.java XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml"),  XML("XML", null, "xml", XmlRuleChainVisitor.class, "xml", "jws", "jpr", "cpx", "xcfg", "dcx", "jpx"), PMD bauen (hier Windows) cd %pmd-src% set JDEV_HOME=C:OracleJDev111240 set JAVA_HOME=%JDEV_HOME%jdk160_24 %JDEV_HOME%jdeveloperapache-maven-2.2.1binmvn clean package Datei in %ciroot%rootlibpmdlib mit der aus %pmd-src%target ersetzen 10
  • 11. Statische Codeanalyse – Regeln (1) Standardregeln - Checkstyle: sun_checks.xml wird mit ausgeliefert - PMD: Verzeichnis rulesets in Source srcmainresources 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) <module name="JavadocVariable"> <property name="excludeScope" value="private"/> </module> 11
  • 12. Statische Codeanalyse – Regeln (2) Neue Regeln, PMD: Application Modules sollen auf JDBC Data Sources basieren <rule name="OracleAdfAmShouldNotBaseOnJdbcUrl" language="xml" message="ADF application module configurations should based on JDBC data sources, not on JDBC URLs" class="net.sourceforge.pmd.lang.rule.XPathRule"> <priority>1</priority> <properties> <property name="xpath"> <value> <![CDATA[ /BC4JConfig/AppModuleConfigBag/AppModuleConfig[@JDBCName] ]]> </value> </property> </properties> </rule> 12
  • 13. Statische Codeanalyse – Apache Ant nur für PMD existiert für JDeveloper ein rudimentäres Plugin (gepflegt von mir) 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? - Wo liegen die zu analysierenden Source-Verzeichnisse oder –Dateien? - Wo ist das Middleware- und JDeveloper-Verzeichnis? - 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 13
  • 14. Statische Codeanalyse – JDeveloper External Tool Tools  External Tools  New Type: Apache Ant Ant Buildfile: %ciroot%rootcheck.xml Selected Targets: all (Default) Properties: - external.tool.sources.dir: ${file.dir} - external.tool.sources.file: ${file.name} - external.tool.sources.file.extension: ${file.ext} - external.tool.project.dirname: ${project.dirname} - external.tool.workspace.dir: ${workspace.dir} Caption for Menu Items / ToolTip Text: Checkstyle, FindBugs and PMD this Integration: Alle Checkboxes 14
  • 15. Statische Codeanalyse – Unterdrückung von Verletzungen Ziele - 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="<Regel>", justification="Begründung") - Konfiguration: Filter - PMD: - Annotations: @SuppressWarnings("PMD.<Regeltyp>") - Kommentare: // NOPMD (konfigurierbar) - Regelkonfiguration: Violation Suppress Regex / Xpath - Checkstyle - Kommentare: Checkstyle:ON / Checkstyle:OFF - Konfiguration: Filter (Regeln, Dateien, Zeilen) 15
  • 16. Statische Codeanalyse – Offene Punkte / Tasks • Als Tasks werden bestimmte Tags bezeichnet, die der Kennzeichnung von 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 • TASK • Umfang des Codes mit solchen Tags sollte regelmäßig minimiert werden • Tasks werden in fast allen IDE‘s und CI Servern konfigurierbar unterstützt 16
  • 17. Statische Codeanalyse – Offene Punkte / Tasks im JDeveloper 11.x: View  Tasks 17 12.x: Window  Issues  Live Issues Bugs: - nur *.java Dateien - Marker fehlt - Issues Scope falsch
  • 18. Statische Codeanalyse – Demo JDeveloper Statische Codeanalyse im JDeveloper 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 Commit 18
  • 19. Statische Codeanalyse – Jenkins Jobs & Plugins 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) - Build der Deploymentprofile der Applications - Clone Jenkins Workspace für folgende Jobs (Clone Workspace SCM Plugin) 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) 19
  • 20. Statische Codeanalyse – Abbruch bei hochpriorisierten Regelverstößen Regelverstöße, die zu potenziellen Fehler führen, brechen auch den Job in 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 <pmd rulesetfiles="pmd_config.xml" failonruleviolation="true"> … </pmd> 20
  • 21. Statische Codeanalyse – Demo Jenkins Job - Trends Einzelergebnisse PMD -> PMD Warnungstypen Statische Analyse Ergebnis (Zusammenfassung) Job Instanz - Änderung Ergebnisse 21
  • 22. Statische Codeanalyse – Jenkins Trends 22
  • 23. Statische Codeanalyse – Jenkins Einzelergebnisse Offene Punkte 23
  • 24. Statische Codeanalyse – Jenkins Einzelergebnisse Checkstyle 24
  • 25. Statische Codeanalyse – Jenkins Einzelergebnisse FindBugs 25
  • 26. Statische Codeanalyse – Jenkins Einzelergebnisse PMD 26
  • 27. Statische Codeanalyse – Jenkins Einzelergebnisse PMD Warnungstypen 27
  • 28. Statische Codeanalyse – Statische Analyse Ergebnis (Zusammenfassung) 28
  • 29. Statische Codeanalyse – Änderung Ergebnisse 29
  • 30. Automatisierter Test - Tools Ziel Vor-/Nachteile Integration JUnit Mockito / Powermock Selenium  Framework zum Schreiben reproduzierbarer Tests  Direkter Test oder Ansteuerung anderer Frameworks  Unterstützung der Isolation und Vortäuschung von Schnittstellen (Platzhalter) durch Inspektion der Klassen  Unit Test in ADF BC  Oberflächentest von Web- Anwendungen Assertions / Assumptions Fixtures Suite / Parameterized / Categories Runners Exception Testing Matchers Ignoring (nicht fertige Tests) Timeout für Tests  Code (nicht als Anforderung lesbar)  Mockito: Einfaches Mocken Gute Lesbarkeit  Finale Klassen / statische Methoden etc. nicht mockbar  Powermock: Unterstützt Mockito-Style Konstruktoren / statische, private, finale Methoden IDE für Aufzeichnung (Add- on) WebDdriver (FF, IE, Chrome, Safari, Android, …) Server (lokal, remote) Grid (parallel mehrere Server) AJAX nicht einfach Nur Webanwendungen Diverse IDE‘s JDeveloperANT Maven Jenkins Hudson über JUnit alle auch dort genannten Integrationen über JUnit alle auch dort genannten Integrationen  Fazit: Über die Kombination der Tools lassen sich Backend- und Oberflächentest für ADF abbilden. 30
  • 31. Automatisierter Test - Unit Test mit Mockito / Powermock Mocking: Isolation von Tests durch Simulation des Verhalten verwendeter Objekte 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) - Refactoring Safe - Type Safe - 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. 31
  • 32. Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Source package oracle.summit.base; import oracle.jbo.server.DBTransaction; import oracle.jbo.server.EntityImpl; import oracle.jbo.server.SequenceImpl; public class SummitEntityImpl extends EntityImpl { public SummitEntityImpl() { super(); } public oracle.jbo.domain.Number nextValSequence(String sequenceName, DBTransaction db) { SequenceImpl s = getSequenceImpl(sequenceName, db); return s.getSequenceNumber(); } private SequenceImpl getSequenceImpl(String sequenceName, DBTransaction db) { return new SequenceImpl(sequenceName, db); } } 32 Refactoring für Injizierung Mock
  • 33. Automatisierter Test - Unit Test mit Mockito / Powermock: Beispiel Test @RunWith(PowerMockRunner.class) @PrepareForTest(SummitEntityImpl.class) public class SummitEntityImplTest { 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()); dBTransaction = Mockito.mock(DBTransaction.class); sequenceImpl = Mockito.mock(SequenceImpl.class); Mockito.when(sequenceImpl.getSequenceNumber()).thenReturn(seqVal); PowerMockito.doReturn(sequenceImpl).when(spy, "getSequenceImpl", "test", dBTransaction); } @Test public void testNextValSequence_test_db() throws Exception { assertEquals("Seq. not " + seqVal, seqVal, spy.nextValSequence("test", dBTransaction)); } } 33 Mockobjekte Erwartetes TestverhaltenTest Runner Class (PowerMock) ByteCode Transformation (PowerMock)
  • 34. Automatisierter Test - GUI Test mit Selenium Selenium IDE wird bei IKB nur selten zur Erstaufzeichnung von Tests genutzt 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 - <af:statusIndicator/>: Abfrage des Attributes Name oder Alt des Icons Wegen Unverträglichkeit mit XML Parsern der ADF Editoren müssen Tests in separatem Projekt liegen (auch wg. Deployment als ADF Library sinnvoll) Derzeit Probleme mit Stabilität speziell des ersten Test nach Deployment 34
  • 35. Automatisierter Test - GUI Test mit Selenium – Page Object Index public class Index { public static final String ENV_TEST_CONTEXT_ROOT = System.getenv("TEST_CONTEXT_ROOT"); 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; } public void openTabWelcome() { driverInstance.clickById(ID_TAB_WELCOME); waitForAjaxCalls(); } public InventoryControl openTabInventoryControl() { driverInstance.clickById(ID_TAB_INVENTORY_CONTROL); waitForAjaxCalls(); return new InventoryControl(driverInstance); } public void waitForAjaxCalls() { driverInstance.waitForAlt(By.xpath(XPATH_BUSY_ICON), VALUE_BUSY_ICON_ALT); } } 35 Reiterkarte „Welcome“ öffnen Reiterkarte „Inventory Control“ öffnen Warten auf Abschluss von AJAX-Calls
  • 36. Automatisierter Test - GUI Test mit Selenium – Page Object InventoryControl public class InventoryControl extends Index { private static final String XPATH_INVENTORY_CONTROL_HEADER = "//td[@id='pt1:r2:0:ph1::_afrTtxt']/div/h1"; public InventoryControl(final UITestDriver driverInstance) { super(driverInstance); } public String getInventoryControlHeaderText() { return driverInstance.getTextByXpath( XPATH_INVENTORY_CONTROL_HEADER); } } 36 Ableitung der Masterseite Ermitteln des Headertexts XPath des Headers
  • 37. Automatisierter Test - GUI Test mit Selenium – Test public class IndexTest extends SeleniumTest { @Test public void testOpenTabWelcome() { driverInstance.getRelativeUrl(Index.TEST_CONTEXT_ROOT); final Index index = new Index(driverInstance); final InventoryControl inventoryControl= index.openTabInventoryControl(); assertEquals("Header is not correct", inventoryControl.getInventoryControlHeaderText(), "Inventory Items (Low Stock)"); } } 37 Abstrakte Beschreibung des Tests
  • 38. Automatisierter Test - JUnit im JDeveloper JUnit selbst für Tests oder als Wrapper für Mockito / PowerMockito / Selenium JUnit muss als Extension in den JDeveloper installiert werden Testausführung direkt im JDeveloper (außer PowerMockito in 12c – in Prüfung) 38
  • 39. Automatisierter Test - JUnit in Jenkins (1) Derzeit wird das JUnit Target in ANT verwendet, um die Tests auszuführen <junit printsummary="yes" <classpath refid="classpath.test"/> <formatter type="xml"/> <batchtest fork="yes" todir="${basedir}/results/junit"> <fileset dir="${test.dir}"> <include name="${sub.junit.run.test.inlude}"/> </fileset> </batchtest> </junit> In Jenkins ist JUnit Reporting integriert, es muss nur ein Pattern zu den Ergebnissen angegeben werden 39
  • 40. Automatisierter Test - JUnit in Jenkins (2) Trend 40 Testergebnisse
  • 41. Testabdeckung - Jacoco Ermittelt, wie der Sourcecode im Test abgedeckt wird 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 <jacoco:instrument destdir="${jacoco.instrumented.classes.dir}"> <fileset dir="${base.project.classes.dir}"/> </jacoco:instrument> Ausführung ist Bestandteil der Testjobs und wrapped Junit (ANT) <jacoco:coverage destfile="${jacoco.exec.file}"> <junit printsummary="yes" fork="true" forkmode="once"> … </junit> </jacoco:coverage> 41
  • 42. Testabdeckung – Jacoco im JDeveloper für den Entwickler wird per ANT ein Report erzeugt <jacoco:report> <executiondata><file file="${jacoco.exec.file}"/></executiondata> <structure name="${base.project.dir}"> <classfiles><fileset dir="${jacoco.instrumented.classes.dir}"/></classfiles> <sourcefiles><fileset dir="${base.project.sources.dir}"/></sourcefiles> </structure> <html destdir="${jacoco.results.dir}"/> </jacoco:report> 42
  • 43. Testabdeckung – Jacoco in Jenkins (1) Im Jenkins kommt das JaCoCo Plugin zum Einsatz, Konfiguration: 43 Reports
  • 44. Testabdeckung – Jacoco in Jenkins (2) Reports (2) 44
  • 45. Evaluierung ADF EMG Audit Rules (Implementierung der ADF Code Guidelines) - 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 - SonarQube ojaudit plugin für Prüfung in Sonarcube via Jenkins -  12c Testparallelisierung (ab JUnit 4.8, JUnit 4.10 erst im Plugin für 12c enthalten) ADF Task Flow Tester Testabdeckung GUI-Tests … 45
  • 46. Fazit Erreichte Ziele - 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: - Schulung der Entwickler auf allen Gebieten - Aufwände in die agile Entwicklungsweise verankern für - Design und Automatisierung von Tests - Umsetzung der Ergebnisse der statischen Codeanalyse - Feinjustierung der Regeln 46
  • 48. Referenzen Markus Sprunck: Direct Comparison of FindBugs, PMD and Checkstyle 48