Konzeption eines Qualitätsmanagement-Werkzeuges für die ...MAVEN •Build • mvn package •Maven...

77
SWAR #10 Felix Hohlwegler – WS1920

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

https://gradle.org/

Felix Hohlwegler – WS1920

Gradle

https://gradle.org/

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