Konzeption eines Qualitätsmanagement-Werkzeuges für die ...MAVEN •Build • mvn package •Maven...
Embed Size (px)
Transcript of Konzeption eines Qualitätsmanagement-Werkzeuges für die ...MAVEN •Build • mvn package •Maven...

SWAR #10
Felix Hohlwegler – WS1920

Wiederholung
Felix Hohlwegler – WS1920

Fassade Pattern
• verbirgt die Komplexität des Systems
• bietet Schnittstelle zum Client
• Strukturmuster
• fügt eine Schnittstelle zu einem bestehenden System hinzu
• eine einzige Klasse wird hinzugefügt
• stellt vereinfachte Methoden bereit
Felix Hohlwegler – WS1920

Fassade Pattern
https://www.tutorialspoint.com/design_pattern/facade_pattern.htm
Felix Hohlwegler – WS1920

Fassade Pattern
• Step3 → Fassade
Felix Hohlwegler – WS1920

Strategy Pattern
• Klassenverhalten oder Algorithmus kann zur Laufzeit geändert werden
• Objekte repräsentieren verschiedene Strategien
• Kontextobjekt ändert sein Verhalten je nach Strategieobjekt
• Strategieobjekt ändert den Ausführungsalgorithmus des Kontextobjekts
Felix Hohlwegler – WS1920

Strategy Pattern
https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
Felix Hohlwegler – WS1920

Strategy Pattern
• Step 3: Context
Felix Hohlwegler – WS1920

Adapter Pattern
• Brücke zwischen zwei inkompatiblen Schnittstellen
• Strukturmuster
• Es gibt eine einzige Klasse, welche die Funktionalitäten unabhängiger oder
inkompatibler Schnittstellen verbindet.
Felix Hohlwegler – WS1920

Adapter Pattern
https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm
Felix Hohlwegler – WS1920

Adapter Pattern
• Step 3 → Adapter Class
Felix Hohlwegler – WS1920

Tempo der Softwareentwicklung
• Desktop Anwendungen
• Office Suites, Browser, IDEs, Tools etc.
• Releases im Bereich von 0.5 – 3 Jahren
• Release Trains, fixe Release Zeitpunkte, z.B.: alle 12 Monate
• Mobile Applications
• Whatsapp, Instagram
• automatische Updates
• Release alle paar Tage (Maximal 1-3 Monate)
Felix Hohlwegler – WS1920

Tempo der Softwareentwicklung
• Release Train
Ein Software-Release-Zug ist eine
Form eines Software-Release-
Zeitplans, in dem eine Reihe
verschiedener Serien von
versionierten Software-Releases für
mehrere Produkte als eine Anzahl
verschiedener "Züge" in
regelmäßigen Abständen
veröffentlicht werden. Wikipedia
https://www.google.com/search?q=release+trains&safe=off&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjJyMmJt57iAhXC8qYKHWkpCXoQ_AUIDigB#imgrc=hZ75ys37WfHpXM:
Felix Hohlwegler – WS1920

Fehlerbehebungskosten
Felix Hohlwegler – WS1920

Anforderungen an denSW-Entwicklungsprozess
• kleine Teams
• Agile Entwicklung
• Testgetriebene Entwicklung
• Komponentenbasierte Architektur
• passende zugrundeliegende Architektur -> Gute Architektur ;)
• wenig Abhängigkeiten
• innerhalb der Applikation
• zu 3rd Party SW/Libs/Hardware
Felix Hohlwegler – WS1920

Continuous Integration
• Was ist Continuous Integration ?
• kontinuierliches Zusammenfügen von Komponenten einer Anwendung
• kontinuierliche Integration von Softwarekomponenten in die Gesamtcode-
Basis eines Programms
• Was ist das Ziel von CI?
• Steigerung der Softwarequalität
Felix Hohlwegler – WS1920

Continuous Integration
• Typische Tätigen beim CI?
• Build Prozesse
• Linking Prozesse
• beliebige andere Prozesse
• komplettes „Bauen“ einer Applikation
• automatisierte Tests
• Softwaremetriken erfassen
Felix Hohlwegler – WS1920

Themenblock 10
Felix Hohlwegler – WS1920

Ziele
• Sie wissen was Continuous Integration ist
• Sie wissen was Continuous Deployment ist
• Sie wissen was Continuous Delivery ist
• Sie wissen was ein Build Management ist
• Sie kennen CI Tools
Felix Hohlwegler – WS1920

Continuous Integration
Felix Hohlwegler – WS1920

Continuous Integration
• Typische Kombinationen?
• Nightly Build (Vorstufe des CI)
• Merge in Branch der Versionsverwaltung
Felix Hohlwegler – WS1920

Continuous Integration
• wird üblicherweise als Pipeline bezeichnet
• Prozesse werden sequentiell abgearbeitet
• Geschwindigkeit
• CI geht in der Regel sehr schnell, max. 5 min
• Entwickler erhält sehr schnell Feedback, ob die Qualitätsansprüche
erreicht wurden
Felix Hohlwegler – WS1920

Continuous Integration
• Grundsätze von CI
• gemeinsame Codebase
• sinnvolle Integration nur mit Versionsverwaltung möglich
• kontinuierliches committen
• automatischer Build
• automatisches compilen der Applikation
Felix Hohlwegler – WS1920

Continuous Integration
• Grundsätze von CI
• kontinuierliche Test-Entwicklung
• vor oder zumindest zeitgleiche Test-Implementierung
• getrennte Test-Umgebung
• kontinuierliche Integration
• Entwickler muss Code häufig ins Gesamte integrieren
• reduziert Risiko fehlgeschlagener Integrationen
• sichert Arbeitsfortschritt
Felix Hohlwegler – WS1920

Continuous Integration
• Grundsätze von CI
• Integration in Haupt-Branch
• sollte häufig durchgeführt werden
• Tests müssen getriggert werden
• gespiegelte Produktionsumgebung
• Integrationstest in Spiegelsystem des Live-Systems
• einfacher Zugriff
• auch Nicht-Entwickler brauchen einfachen Zugriff auf Test-Systeme
und Test-Ergebnisse
Felix Hohlwegler – WS1920

Continuous Integration
• Grundsätze von CI
• automatisches Reporting
• Ergebnisse der Integrationstests müssen einfach zugänglich sein
• automatisches Verteilen der Ergebnisse
• automatische Verteilung
• Deployment auf Dev/Test/Live-System muss automatisch
erfolgen
Felix Hohlwegler – WS1920

Continuous Integration
• Vorteile von CI
• Integrationsprobleme werden schnell erkannt und früh behoben
• frühe Warnung bei nicht zusammenpassenden „Teilen“
• ständige Verfügbarkeit eines laufenden Systems
• generelle Zeitersparnis
Felix Hohlwegler – WS1920

Continuous Integration
• Typische
Schritte
https://www.silverstripe.org/blog/developers-how-we-use-continuous-integration-at-silverstripe/
Felix Hohlwegler – WS1920

Continuous Integration
https://www.fpcomplete.com/hubfs/Blog/DevOps%20Infinity%20-%20Small%20Cropped.jpg
Felix Hohlwegler – WS1920

Continuous Integration
• Tools
• TeamCity (IDEA) / frei bis 100 Buildkonfigurationen
• AWS CodePipeline
• Bamboo (Atlassian)
• Travis CI / oldest solution
• Gitlab CI
• CodeShift
• Hudson• Kohsuke Kawaguchi, Sun, Oracle / Opensource
• Jenkins• Fork von Hudson / OpenSource Kohsuke Kawaguchi
Felix Hohlwegler – WS1920

Continuous Integration
• Jenkins vs. Hudson
Source: http://blog.cloudbees.com/2011/10/jenkins-safe-and-sensible-choice-for-ci.html
Felix Hohlwegler – WS1920

Jenkins
• CI Build Server
• läuft in einem Servlet Container (z.B. Tomcat)
• Plugin-Server
• über 600 Plugins verfügbar
• Version Control
• Build Tools
• Bug Databases
• Metric Tools
• Report Gen
Felix Hohlwegler – WS1920

Jenkins
Felix Hohlwegler – WS1920

Jenkins
Felix Hohlwegler – WS1920

Jenkins
Felix Hohlwegler – WS1920

AWS CodePipeline
• CI Build Server
• AWS CodePipeline ist ein vollständig verwalteter Continuous Delivery-Service, mit dem Sie Ihre
Veröffentlichungs-Pipelines für schnelle und zuverlässige Updates von Anwendungen und Infrastruktur
automatisieren können.
https://aws.amazon.com/de/codepipeline/
Felix Hohlwegler – WS1920

AWS CodePipeline
Felix Hohlwegler – WS1920

Continuous Deployment
Felix Hohlwegler – WS1920

Continuous Deployment
• Was ist Continuous Deployment?
• Teil der Contiuous Integration
• kontinuierliche Auslieferung der Software
Felix Hohlwegler – WS1920

Continuous Deployment
• Grundlagen
• Produktivsetzung der Software auf Knopfdruck
• jede Produktivsetzung verspricht bessere Qualität als die vorherige
• Aufhebung des Phasenmodells der Softwareentwicklung
• umfassende Tests vor Go-Live
• Geschwindigkeit
Felix Hohlwegler – WS1920

Continuous Deployment
• Nachteile
• muss eingerichtet werden
• je Projekt spezifisch
• Einrichtung meist komplex
Felix Hohlwegler – WS1920

Continuous Delivery
Felix Hohlwegler – WS1920

Continuous Deployment
• Was ist Continuous Delivery?
• Techniken, Prozesse und Werkzeuge, mit deren Hilfe kurze Entwicklungszyklen
und die schnelle Auslieferung von Software-Updates oder produktiven Endsystemen
ermöglicht werden
• Menge von Validierungen, die vor Go-Live „passed“ sein müssen
Felix Hohlwegler – WS1920

Continuous Deployment
• Unterschied Continuous Deployment / Delivery
• kein Synonym
• Deployment ist mehr als Delivery
• C-Deployment => Auch Deployment auf Live-Infrastruktur
• C-Delivery nur bis ins Staging
• danach Manuelles Exponieren
Felix Hohlwegler – WS1920

Schritte zum CDContinuous Deployment
Continuous Pipeline
Deployment Automation
Continuous Integration
Configuration Management
Automated Testing
Agile Development
Felix Hohlwegler – WS1920

Build Management
Felix Hohlwegler – WS1920

Build Management
• Kennt Ihr schon ein Build-Management-Tool?
• SBT
Felix Hohlwegler – WS1920

Build Management
• bisher wurde die Software über die IDE gebaut
• Jenkins ist unabhängig von der IDE - es wird ein Buildprozess gebraucht
• Was macht ein Buildprozess?
• Code kompilieren
• Ausführen automatischer Tests
Felix Hohlwegler – WS1920

Build Management
• Build Tools
• Shell Scripts
• Make
• Rake
• Grunt
• Gulp
• Composer
• SBT
• Ant
• Maven
• Gradle
• …. Felix Hohlwegler – WS1920

Felix Hohlwegler – WS1920

ANT
• ANT
• entwickelt von SUN als Alternative zu „make“
• für JSP/Servlet-Engine und Tomcat
• implementiert in Java
• XML für die Definition des Ablaufs und der Abhängigkeiten → build.xml
Felix Hohlwegler – WS1920

ANT
Felix Hohlwegler – WS1920

ANT
Felix Hohlwegler – WS1920

ANT
Felix Hohlwegler – WS1920

Felix Hohlwegler – WS1920

MAVEN
• MAVEN
• Software Management Tool
• Basiert auf einem Project Object Model (POM)
• XML Datei
• Beinhaltet alle Projekt und Konfigurationsdetails
• Verwaltet Project Build
• Stellt Reportings bereit
• Verwaltung der Dokumentation an einem zentralen Ort
Felix Hohlwegler – WS1920

MAVEN
• MAVEN ist mehr als ein Build Tool
• Build Prozess
• Einheitliches Build System
• Abhängigkeit Management
• Dokumentationstool
• Qualitätsinformationen
• Richtlinien für die Best Practices Entwicklung
Felix Hohlwegler – WS1920

MAVEN
• MAVEN in 5 Minutes
• Java muss installiert sein
• Maven Installieren https://maven.apache.org/download.cgi
• mvn –version
• mvn archetype:generate -DgroupId=com.mycompany.app
-DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4 -DinteractiveMode=false
Felix Hohlwegler – WS1920

MAVEN
• MAVEN in 5 Minutes
Felix Hohlwegler – WS1920

MAVEN
• MAVEN in 5 Minutes
src -> Normal Java classes
test -> JUnit Test classes
Felix Hohlwegler – WS1920

MAVEN
• pom.xml
• Core der Projektkonfiguration
• Single Configuration File
• Kann sehr groß & komplex werden
• Es ist nicht notwendig, alle Feinheiten zu verstehen, um sie effektiv nutzen
zu können
Felix Hohlwegler – WS1920

MAVEN
• pom.xml
Felix Hohlwegler – SS2019

MAVEN
Felix Hohlwegler – WS1920

MAVEN
• 1. Sektion (Dependencies) legt alle notwendigen Libraries fest
Felix Hohlwegler – WS1920

MAVEN
• 2. Sektion: Build: Die "Tasks" werden über Plugins definiert, die selbst über die GAVParameter
eindeutig identifiziert sind.
Felix Hohlwegler – WS1920

MAVEN
• 3. Sektion: Reporting
Felix Hohlwegler – SS2019

MAVEN
• Build
• mvn package
• Maven Phasen (Standard Lebenszyklus)
• validate: validate the project is correct and all necessary information is available
• compile: compile the source code of the project
• test: test the compiled source code using a suitable unit testing framework. These tests should not
require the code be packaged or deployed
• package: take the compiled code and package it in its distributable format, such as a JAR.
• integration-test: process and deploy the package if necessary into an environment where integration
tests can be run
• verify: run any checks to verify the package is valid and meets quality criteria
Felix Hohlwegler – WS1920

MAVEN
• Maven Phasen
• install: install the package into the local repository, for use as a dependency in other projects locally
• deploy: done in an integration or release environment, copies the final package to the remote repository
for sharing with other developers and projects.
• Beispiele
mvn compile; mvn test; mvn deploy
Felix Hohlwegler – WS1920

MAVEN
• Maven Projekt über Jenkins bauen
• Create a new Project in Jenkins
• Use freestyle
• Add your Git URL to the project
• Set the path to your pom file
• Check in the Workspace of the Jenkins project
• Add Post action SonarQube
• This requires a pom.xml file
• Get it to build successfully
Felix Hohlwegler – WS1920

Felix Hohlwegler – WS1920

Gradle
• Build-Management & Automatisierungstool
• Groovy basierende Projekt Konfiguration
• Offizielles Build System für Android
• Leichte Integration und Migration
• Out of the Box Support für ANT, Maven, Ivy
• Schneller aufgrund inkrementeller Builds
Felix Hohlwegler – WS1920

Gradle
• Gradle vs. Maven
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>de.htwg.examples</groupId>
<artifactId>example</artifactId>
<version>0.1-SNAPSHOT</version>
</project>
apply plugin: 'java'
Felix Hohlwegler – WS1920

Gradle
• Dependency Management
• Voll kompatibel mit Maven und Ivy und deren Repos
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core',
version: '3.6.7.Final'
}
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
build.gradle
short way
Felix Hohlwegler – WS1920

Gradleif (environment != 'production') {
println 'Production build!'
providedCompile 'javax.servlet:servlet-api:3.+'
compile('org.springframework.boot:spring-boot-starter-web:
${springBootVersion}') {
exclude module: 'spring-boot-starter-tomcat'
exclude module: 'spring-boot-starter-jetty'
}
} else {
if (embeddedserver == 'jetty') {
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: 'spring-boot-starter-tomcat'
}
compile('org.springframework.boot:spring-boot-starter-jetty')
} else {
compile('org.springframework.boot:spring-boot-starter-web:
${springBootVersion}')
}
testCompile 'junit:junit:4.12'
}
Felix Hohlwegler – WS1920

Gradle
• Plugins
• Gradle selbst ist klein und bietet nur wenige Funktionen
• Erweiterbar durch Plugins / Aufgaben
• Plugins für
• Java
• Android
• Scala
• IDEA (Intellij)
• NodeJS
• C++
• https://plugins.gradle.org/
Felix Hohlwegler – WS1920