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

of 77 /77
SWAR #10 Felix Hohlwegler – WS1920

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

    https://www.tutorialspoint.com/design_pattern/facade_pattern.htm

  • 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

    https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

  • 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

    https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm

  • 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

    https://en.wikipedia.org/wiki/Software_release_trainhttps://www.google.com/search?q=release+trains&safe=off&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjJyMmJt57iAhXC8qYKHWkpCXoQ_AUIDigB#imgrc=hZ75ys37WfHpXM:

  • 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

    https://www.silverstripe.org/blog/developers-how-we-use-continuous-integration-at-silverstripe/

  • Continuous Integration

    https://www.fpcomplete.com/hubfs/Blog/DevOps%20Infinity%20-%20Small%20Cropped.jpg

    Felix Hohlwegler – WS1920

    https://www.fpcomplete.com/hubfs/Blog/DevOps%20Infinity%20-%20Small%20Cropped.jpg

  • 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

    https://aws.amazon.com/de/devops/continuous-delivery/https://aws.amazon.com/de/codepipeline/

  • 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

    https://maven.apache.org/download.cgi

  • 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

    https://gradle.org/

  • Gradle

    https://gradle.org/

    Felix Hohlwegler – WS1920

    https://gradle.org/

  • 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

    4.0.0

    de.htwg.examples

    example

    0.1-SNAPSHOT

    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

    https://plugins.gradle.org/