SEUH 2023 Nachhaltigkeit als Qualit tskriterium von Software - Den Blick auf ressourcen-sparsame Softwareentwicklung sch rfen

Die Seite wird erstellt Vroni Naumann
 
WEITER LESEN
SEUH 2023
                       Software Engineering im Unterricht der Hochschulen

Nachhaltigkeit als QualitŠtskriterium von Software
                   Den Blick auf ressourcen-sparsame
                   Softwareentwicklung schŠrfen

Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven
Motivation

            Oliver Radfelder                                        Karin Vosseberg
    Softwareentwicklung mit Java                                Analytische Verfahren der QS
       DevOps und Monitoring                                     QS in Vorgehensmodellen
        Testautomatisierung                                         Testautomatisierung
 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven                                  2
Software Engineering an der HS Bremerhaven
  EinfŸhrung in Informatik/Wirtschaftsinformatik
 EinfŸhrung in Linux-basierte Serverumgebung
 Kleine Automatisierungsketten
  Software Engineering (1-3)
 SWE 1 - Modellierung
 SWE 2 - Requirements Engineering
 SWE 3 - Software Architekturen
  Programmierung (1-2)
 JAVA - als Hauptsprache

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   3
IT-Infrastruktur des Informatikbereichs
   Linux-basierte Server-Infrastruktur
   Docker-Container fŸr jeden User
   Git-Repository
   Nachhaltigkeit als Entwicklungskonzept
   IT-Infrastrukturgruppe
   Au§ercurriculare Lerngemeinschaft von
   Lehrenden, Mitarbeitenden und Studierenden
   Module
   Infrastrukturen bzw. Technik fŸr Wirtschaftsinformatik

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   4
Nachhaltigkeit in der Softwareentwicklung

   Ressourcen-Sparsamkeit
   Ressourcen-beschrŠnkte Systemumgebung
   Monitoring
   Langlebigkeit und Wartbarkeit
   Softwarearchitekturen
   Umsetzung in Java

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   5
Grundlagen QualitŠtsmanagement (WP)

   QualitŠtssicherung in Vorgehensmodellen
   Teststufen und Testarten, QS in agilen Teams, DevOps
   Testverfahren
   Funktionale und nicht-funktionale QualitŠtskriterien
   Testautomatisierung
   CI/CD-Prozess, Testwerkzeuge
   Monitoring
   Betrachtung von Gesamtsystemen

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   6
Grundlagen QualitŠtsmanagement (WP)
  Didaktisches Konzept
  Wechselspiel zwischen Vermittlung von Konzepten
  und gemeinsame Umsetzung in einer Java-Umgebung
  Hands-on Workshops
  gemeinsam kleine Beispiele coden
  Ergebnisse der analytischen QS nutzen
  Diskussionen Ÿber Matrix weiterfŸhren
  Plakatausstellung
  Studierende bereiten eine Fragestellung mit
  prototypischer Umsetzung

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   7
Beispiel fŸr Monitoring von Gesamtsystemen
   Ziel des Beispiels
   QualitŠt von Software nicht nur abhŠngig von der
   FunktionalitŠt der neu- oder weiterentwickelten Software
   Sensibilisieren fŸr Ressourcen-Verbrauch
   Sensibilisieren fŸr das Zusammenspiel von DevOps
   Off-Heap Memory Leaks in Servlet-Containern
   Problem beobachtet in der Docker-Umgebung
   der IT-Infrastruktur
   Wie kann ein solches beobachtetes Problem
   systematisch untersucht werden?

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   8
Off-Heap Memory Leaks in Servlet-Containern

   Web-Anwendung
   Docker-Container mit 4 virtuellen CPU und 2 GB virtueller Speicher
   Websocket-Endpunkt und ContextListener deployt im Tomcat
   2 node-Prozesse mit jeweils 2500 gešffneten
   Websockets
   Nach 10 Minuten schlŠgt der OOM-Killer zu
   Was ist die Ursache?
   Problem im Tomcat, in der JVM oder liegt es an
   den beschrŠnkten Ressourcen

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven           9
Off-Heap Memory Leaks in Servlet-Containern
3000                                                3000                                       3000

2500                                                2500                                       2500

2000                                                2000                                       2000

1500                                                1500                                       1500

1000                                                1000                                       1000

500                                                 500                                            500

   0                                                   0                                             0
        12:00     13:00     14:00   15:00   16:00          17:00   18:00   19:00   20:00   21:00         22:00   23:00     00:00   01:00   02:00

                   Tomcat                                              Jetty                                             Wildfly

        Legende:
        RSS MB Docker
        RSS MB Servlet-Container
        Java Heap
        Message-per-Second

       Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven                                                                        10
Off-Heap Memory Leaks in Servlet-Containern

   Technisches Fazit
   Tomcat mit deaktivierter per-message-deflate ist vergleichbar mit den
   Ergebnissen von wildfly - aber leistungsfŠhiger in messages per seconds
   Weitere Experimente mit komplexeren Anwendungen sind notwendig
   Gerade bei Last- und Performancetest und Ressourcenverbrauch spielt
   oft das Gesamtsystem eine gro§e Rolle
   Monitoring gehšrt zum soliden Handwerkszeug
   Informationen aus dem Produktivsystem fŸr
   die Weiterentwicklung

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven                11
Entwicklung und Vergleich von CI Pipelines

Plakatausstellung
                                                                                                                                                                                                                                                                                                                                                                                                                                           Jonas Behling (37772), David Maiza (37789), Marvin Austmeyer (37672), Erik Bensch (35613)
                                                                                                                                                                                                                                                                                                                                                                                                                                           Modul: Grundlagen Qualitätsmanagement

                                                                                                                                                                                                                                                                                                                                                                                                                                           Beschreibung                                                                             Szenario                                                                            Fazit
                                                                                                                                                                                                                                                                                                                                                                                                                                            In diesem Projekt haben wir uns das Ziel gesetzt verschiedene CI Pipeline               Um unsere verschiedenen CI-Architekturen vergleichen zu können, haben                    !   Die Pushing-Variante ist pla݀䁦ormabhängig und kann nur verwen-
                                                                                                                                                                                                                                                                                                                                                                                                                                            Architekturen umzusetzen und zu vergleichen. Bei jeder Architektur soll                 wir uns ein Szenario überlegt. Ein So昀‫܀‬warehersteller entwickelt eine                        det werden, wenn der Repository-Anbieter dieses Feature unter-
                                                                                                                                                                                                                                                                                                                                                                                                                                            ein Git-Push in das Git Repository eine CI Pipeline starten. Dies ist in                Webanwendungen zusammen mit einem Team aus zehn Personen. Es                                 stützt.

                                                                                                                                                                                                            Java-Bytecodeanalyse im Softwaretesting                                                                                                                                                                                         unseren Szenarien ein Bash Skript, welches im Git Repository liegt.                     sollen maximal zehn gleichzei琀‫؀‬ge CI-Durchläufe parallel ablaufen können.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Die Testvorgänge laufen auf einem Testserver. Auf diesem Server läu昀‫܀‬
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             !   Da die Zielgruppe in dem Beispielszenario das interne Un-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ternehmen ist, mit freier Git-Backend Wahl, kann beides genutzt
                                                                                                                                                                                                                                                                                                                                                                                                                                            Was ist eine CI Pipeline und wofür ist sie gut?                                         eine Tomcat Instanz, welche in den Testvorgängen für dynamische Tests                        werden: Pushing oder Polling.
                                                                                                                                                                                                            Erstellung eines variablen Klassenanalyseprogramms                                                                                                                                                                              Eine Con琀‫؀‬nuous Integra琀‫؀‬on Pipeline hat verkürzt gesagt den Zweck
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    benutzt wird. Für jeden parallelen Durchlauf stellen wir 2GB RAM zur
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Verfügung. Somit werden insgesamt 20 GB RAM für den Test-Server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             !   Eine Warteschlange mit in der CI-Architektur zu integrieren bringt
                                                                                                                                                                                                                                                                                                                                                                                                                                            den =Mergeday= zu verbannen. Mithilfe der CI sind Entwickler in der                                                                                                                  viele Vorteile mit sich. Zum einen können so die maximale paralle-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    benö琀‫؀‬gt. Jeder Testvorgang dauert normalerweise maximal 60 Sekunden.
                                                                                                                                                                                                                                                                                                                                                                                                                                            Lage, ihre Codeänderungen in einem gemeinsamen Branch zusammen-                                                                                                                      len CI Pipelines bes琀‫؀‬mmt werden (durch die Anzahl der gestarteten
                                                                                                                                                                                                            Fabian Lignitz 37160 | Jannik Peters 37450 | Leon Sander 36235                                                                                                                                                                  zuführen. Nachdem der Entwickler seinen Code an den gemeinsamen                                                                                                                      Worker), anderseits können diese leicht mit einem weiteren Pro-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Umsetzung 1
                                                                                                                                                                                                                                                                                                                                                                                                                                            Branch commitet und gepusht hat, werden unterschiedliche Schri琀‫܀‬e von                                                                                                                gramm überwacht und in Sta琀‫؀‬s琀‫؀‬ken ausgegeben werden.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Diese verfügt im Gegensatz zu Umsetzung 3 über keine Warteschlange.
                                                                                                                                                                                                                                                                                    Bereitstellung von Eingabedaten und die Überprüfung der zu                                                                                              automa琀‫؀‬sierten Prüfungen ausgelöst. Häu昀‫؀‬g handelt es sich dabei um                    Bei der Umsetzung 1, also das pollende CI-System werden Pushes mit                       !   Für unsere interne Infrastruktur in der Hochschule empfehlen wir

                              Interne Konferenz
                                                                                                                                                                                                             Theoretische Herleitung                                                erwartenden Rückgabe der Daten [1, S. 110].                                        Umsetzung mit Java Reflections                                       Unit- und Integra琀‫؀‬onstests. Bei der Entwicklung der CI Pipeline können                 einer Verzögerung von maximal 60 Sekunden detek琀‫؀‬ert. Verzögerungen                          die Polling Variante, da diese rela琀‫؀‬v einfach von den Studierenden
                                                                                                                                                                                                                                                                                    Wie aufgezeigt, nimmt die Codeanalyse in der Qualitätssiche-                                                                                            unterschiedliche Architekturen zum Einsatz kommen. vgl. [2]                             sind nicht auszuschließen, was das Arbeiten sehr ine٠恩zient werden                           innerhalb der Docker Container verwendet werden kann.
                                                                                                                                                                                                                                                                                    rung einen nicht unerheblichen Platz ein. Dabei wird in vielen                    Die Java API bietet mit der Funktionalität der JVM eine Abs-                                                                                                  lassen kann. Das Polling-Intervall ist kon昀‫؀‬gurierbar und kann herabge-
                                                                                                                                                                                                            Codeanalyse hat einen festen Platz in der Qualitätssicherung            Fällen der Zugriff auf den Quellcode vorausgesetzt (White-Box-                                                                                          Umsetzung 1: Polling                                                                    senkt werden, was aber auch mehr Server-Ressourcen beansprucht und
                                                                                                                                                                                                            und im Bereich des Softwaretestens. So 昀‫؀‬nden sich in der meis-                                                                                           traktion über Bestandteile von Programmen, auf die wir mit                                                                                                                                                                                        Literatur
                                                                                                                                                                                                                                                                                    Test). Im Bereich der Java Programmierung 昀‫؀‬nden sich für die                                                                                           Bei der Umsetzung unser ersten CI-Architektur verwenden wir ein                         mit einem Cronjob nicht ohne weiteres umsetzbar ist. Außerdem wird
                                                                                                                                                                                                            ten Grundlagenliteratur Abschnitte der Codeanalyse, oftmals                                                                                               Re昀‫؀‬ections zur Laufzeit zugreifen können. Dafür können wir zu
                                                                                                                                                                                                                                                                                    Codeanalyse viele Tools, besonders erwähnt werden soll an die-                                                                                          pollendes System. Das System ist ein schlankes Bash Skript, welches                     in dieser Umsetzung immer nur der letzte Commit-Hash betrachtet, we-
                                                                                                                                                                                                            unter Begriffen wie statische oder dynamische Codeanalyse                                                                                                 einer beliebigen Klasse ein Objekt der Klasse java.lang.Class                                                                                                                                                                                      [1] Paul Duvall, Steve Matyas, and Andrew Glover. Con琀‫؀‬nuous Integra-
                                                                                                                                                                                                                                                                                    ser Stelle Checkstyle [4].                                                                                                                              mithilfe eines cronjobs im Minutentakt ausgeführt wird. Das Skript                      shalb ggf. Commits übersehen werden könnten. Das pollende System ist
                                                                                                                                                                                                            bzw. der statischen und dynamischen Tests [1, Kap. 4-5] [2, Kap.                                                                                          erhalten, das alle Informationen über (und Zugriff auf) die Ziel-                                                                                                                                                                                      琀‫؀‬on. Improving So昀‫܀‬ware Quality and Reducing Risk (The Addison-
                                                                                                                                                                                                                                                                                    Checkstyle ermöglicht eine Analyse des Quellcodes zur Über-                                                                                             prü昀‫ ܀‬ob es einen neuen Hash im Repository gibt, wenn ja, dann wird                     pla݀䁦ormunabhängig und kann ohne Abhängigkeiten integriert werden.
                                                                                                                                                                                                            5] [3].                                                                                                                                                   klasse enthält, wie Methoden, Konstruktoren, Felder, etc.                                                                                                                                                                                              Wesley Signature Series). Addison-Wesley Professional, 2007, p. 336.
                                                                                                                                                                                                                                                                                    prüfung, bspw. der Einhaltung der Code-Konvention (Format-                                                                                              ein Skript, welches im jeweiligen Repository liegt ausgeführt und somit
                                                                                                                                                                                                            Neben der theoretischen Verortung in der Fachliteratur 昀‫؀‬n-                                                                                               Um mit Klassen arbeiten zu können, müssen diese in der                                                                                                                                                                                                 ISBN: 9780321336385.
                                                                                                                                                                                                                                                                                    ter), Ermittlung der zyklomatische Zahl und ungenutzten Codes.                                                                                          alle qualitätssichernden Maßnahmen. Es vergeht maximal eine Minute                      Umsetzung 2
                                                                                                                                                                                                            den sich verschiedene Tools zur praktischen Umsetzung der                                                                                                 JVM geladen sein. Das geschieht zum einen durch das auto-
                                                                                                                                                                                                                                                                                    Checkstyle stellt dabei ein API zur Verfügung, welches die Erstel-                                                                                      bis das System erkennt, dass es einen neuen Push gab und die Pipeline                   Sowie auch die Erste verfügt diese Umsetzung über keine Warteschlange.               [2] Craig Johnston. In-Pla琀‫؀‬orm CI/CD. Berkeley, CA: Apress, 2020,
                                                                                                                                                                                                            Codeanalyse [4] [5] [6]. Die statische Codeanalyse wird in der                                                                                            matische Laden der Klassen im CLASSPATH durch den Sys-
                                                                                                                                                                                                                                                                                    lung eigener Test ermöglicht, eine Vielzahl von vorde昀‫؀‬nierten                                                                                          startet. vgl. [1]                                                                       Sobald ein Push im Repository durchgeführt wird, wird die CI-Pipeline                    pp. 1173152. ISBN: 978-1-4842-5611-4. DOI: 10.1007/978-1-4842-
                                                                                                                                                                                                            Literatur zumeist im Bereich der White-Box-Test verortet und                                                                                              tem ClassLoader [7] oder das manuelle Laden von Klassen
                                                                                                                                                                                                                                                                                    Test bieten Google und Sun bereits an. Um Funktionalitäten                                                                                                                                                                                      durch einen Git-Hook gestartet. Dies hat zur Folge, dass allerdings bei                  5611-4_4. URL: https://doi.org/10.1007/978-1-4842-5611-
                                                                                                                                                                                                            setzt Zugang zum Quellcode voraus. Ziel der statischen Ana-                                                                                               zur Laufzeit mit einem geeigenten Classloader, wie z. B. dem
                                                                                                                                                                                                                                                                                    jenseits des Linting bereitzustellen, wird für die Überprüfung                                                                                          Umsetzung 2: Pushing                                                                    sehr häu昀‫؀‬gem oder gleichzei琀‫؀‬gen pushen, CI-Pipelines parallel ausge-                   4_4.
                                                                                                                                                                                                            lysen ist es, Fehler und Verletzungen festgelegter Standards                                                                                              java.net.URLClassLoader. [8]
                                                                                                                                                                                                                                                                                    der Abstract Syntax Tree (AST) gebaut und auf diesem gearbei-                                                                                           Ein weiterer Ansatz ist das pushende Modell. Im Gegensatz zur pollenden                 führt werden. In unserem Szenario, mit einer überschaubaren Anzahl an                [3] Riccardo Padovani. A beginner9s guide to con琀‫؀‬nuous integra琀‫؀‬on. On-
                                                                                                                                                                                                            und der Spezi昀‫؀‬kation zu entdecken. Die statische Analyse kann          tet [4, Kap. 1]. Mithilfe von Checkstyle lässt sich somit sehr gut                                                                                      Architektur, wo ein laufender Prozess (Runner) kon琀‫؀‬nuierlich nach                      Personen, welche Commits pushen, kommt dieser Nachteil nur wenig                         line verfuegbar: https://about.gitlab.com/blog/2018/01/22/
                                                                                                                                                                                                            dabei auch auf Fehler in der Projektplanung hinweisen. Sie be-          auf einzelnen Dateien, jedoch nicht auf einem ganzen Projekt                      In Anwendung könnte mit der Methode java.lang.Class                   neuen Commit-Hashes prü昀‫܀‬, wird beim pushenden Modell direkt beim                       zum Tragen.                                                                              a - beginners - guide - to - continuous - integration/, letztmalig
                                                                                                                                                                                                            sitzt stets präventiven Charakter, soll also Fehler während des         arbeiten. Ebenso muss der Quellcode zur Verfügung stehen.                         .getDeclaredConstructor().newInstance() [8] ein Objekt einer          pushen in das Repository die CI-Pipeline angestoßen. Dies wird möglich
                                                                                                                                                                                                            Entwicklungsprozesses sichtbar machen und nachträgliche Ver-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             abgerufen am 27.09.2022 um 11:11 Uhr. Jan. 2018.
                                                                                                                                                                                                                                                                                                                                                                      zur Laufzeit geladenen Klasse erzeugt werden. Da dieses Ob-           durch einen Git hook. Git hooks sind automa琀‫؀‬sierte Skripte, welche bei                 Umsetzung 3
                                                                                                                                                                                                            besserungen vermeiden oder zumindest minimieren [1, S. 81].                                                                                               jekt jedoch vom Typ java.lang.Object [8] ist, muss es zum ge-         bes琀‫؀‬mmten Git-Events ausgeführt werden. vgl. [3]                                       Umsetzung 3 baut auf dem Pushing-Modell auf, verfügt aber über Beson-
                                                                                                                                                                                                            Die Analyse kann dabei werkzeuggestützt oder durch Nutzung                                                                                                wünschten Typ umgewandelt werden, wenn objekttypspezi昀‫؀‬-                                                                                                      derheiten. Die Anzahl der parallelen CI-Pipeline-Ausführungen sind durch
                                                                                                                                                                                                            der >[...] gezielten menschlichen Analyse- und Denkfähigkei-            Neben einer Quellcodeanalyse kann jedoch auch direkt auf dem                      sche Methoden aufgerufen werden sollen.                               Umsetzung 3: Pushing mit Warteschlange                                                  die Anzahl der zu startenden Worker frei kon昀‫؀‬gurierbar. Wird nur ein
                                                                                                                                                                                                            ten< [1, S. 81] erfolgen. Die werkzeuggestütze Analyse erfolgt          Bytecode operiert werden. Dies ist für Java nicht unüblich und                    Der Typ der zu ladenden Klasse ist im Code nicht unbedingt            Bei der dri琀‫܀‬en Umsetzung haben wir die pushende Architektur mit einer                  Worker gestartet ist auch immer nur eine Pipeline zurzeit am durch-
                                                                                                                                                                                                            z.B. schon durch den Compiler, ebenso zählen Linter bzw. For-           ermöglicht eine Vielzahl von Möglichkeiten. Zu den anspruchs-                     bekannt, sodass eine Typumwandlung nicht direkt möglich ist,          Warteschlange gekoppelt. Wird jetzt ein Git hook ausgelöst, wird nicht di-              laufen. Dieses Feature kommt aber mit dem Nachteil, dass zusätzlich
                                                                                                                                                                                                            matter zu den Werkzeugen der statischen Analyse. Tools zur              vollsten gehört sicherlich die Bytecodemanipulation, jedoch                       da diese fest im Quelltext eingetragen sein muss. Um trotzdem         rekt die Pipeline gestartet, sondern der Commit-Hash wird in eine Redis-                eine In-Memory Datenbank/Message-Broker benö琀‫؀‬gt wird. In unserem

QS mit ESLint und dem Airbnb Style Guide
                                                                                                                                                                                                            Ermittlung von Metriken, z.B. der zyklomatischen Zahl werden            lässt sich auch mit einem relativ einfachen Mechanismus Byte-                     typspezi昀‫؀‬sche Methoden verwenden zu können, müssen von               Liste hinzugefügt. Um diese Redis-Liste mit den Commit-Hashes abzuar-                   Szenario haben wir ein kleines Unternehmen, welches sehr dynamis-
                                                                                                                                                                                                            ebenso diesem Bereich der Qualitätssicherung zugeordnet [1, S.          code nutzen. Hierfür stellt das Java API die Re昀‫؀‬ections bereit,                  der geladenen Klasse, im Code bekannte Klassen oder Interfaces        beiten, gibt es einen Redis-Runner. Dieser Runner prü昀‫ ܀‬kon琀‫؀‬nuierlich ob               che Prozesse aufweist, weshalb eine zusätzliche So昀‫܀‬wareeinführung kein
                                                                                                                                                                                                            104ff].                                                                 welche es uns ermöglichen, Codeanalyse auf Bytecodeebene                          implementiert werden. Dies funktioniert, da ein Objekt einer          es einen Eintrag in der Liste gibt, welcher dann aus der Liste entnommen                Problem darstellt. Dies kann ggf. in einem anderen Szenario anders sein,
                                                                                                                                                                                                            Neben der statischen besteht die Möglichkeit der dynamischen            durchzuführen. Darüber hinaus können mithilfe von Re昀‫؀‬ections                     Klasse B, die ein Interface A implementiert oder eine Klasse A        wird und den eigentlichen Pipeline-Prozess startet. vgl. [1]                            was den Nachteil größer gewichten kann.
Automatisierung der Qualitätssicherung in Typescript                                                                                                                                                        Codeanalyse, in diesem Fall sind White- sowie Black-Box Ver-
                                                                                                                                                                                                            fahren möglich und lassen sich zumeist auch einem der beiden
                                                                                                                                                                                                                                                                                    und Classloading gezielte Analysen durchgeführt werden. Zum
                                                                                                                                                                                                                                                                                    einen lassen sich über diesen Weg grundlegende Informationen
                                                                                                                                                                                                                                                                                                                                                                      erweitert, unter anderem auch vom Typ A ist.

                                                                                                                                                                                                            Bereiche zuordnen. Die dynamische Codeanalyse erfordert ein             über den Code erheben, wie Anzahl der Methoden, Superklas-
                                                                                                                                                                                                            lauffähiges Programm, dabei wird überlicherweise gegen die              sen etc. und zum anderen können gezielt Methoden aufgerufen                       Alternativ kann auch variabel auf Methoden einer Klasse zuge-
Tobias Höbbel(36277), Sönke Thiel(36658), Luca Wittenberg(36281)                                                                                                                                            Spezi昀‫؀‬kation getestet. Ziel ist es, den Nachweis zur Erfüllung         werden .Diese lassen sich bspw. mit unterschiedlichen Parame-                     griffen und diese aufgerufen werden. Dafür steht unter ande-
                                                                                                                                                                                                            sämtlicher Anforderungen zu erbringen bzw. Abweichungen                 terübergaben testen.                                                              rem die Funktion java.lang.Class.getDeclaredMethods() [8]
Hochschule Bremerhaven                                                                                                                                                                                      festzustellen [1, S. 109ff].                                            Eine solche Analyse ist zwar eingeschränkter als eine solche mit                  zur Verfügung, um auf Methoden repräsentierende Objekte der
                                                                                                                                                                                                            White-Box-Test sind häu昀‫؀‬g in den unteren Teststufen zu 昀‫؀‬nden,         Zugriff auf den Quellcode, jedoch ermöglicht sie die Analyse                      Klasse java.lang.reflect.Method [8] zugreifen zu können. Die-
                                                                    grammiersprachen integriert werden. Über die Jahre gewann                                                                               Black-Box-Test zumeist in den höheren [1, S. 112]. Während des          von Code, welcher den Testenden eventuell nicht als Quellcode                     se Objekte bieten die Methode invoke(Object, Object...) [8]
 Einleitung                                                         der Style Guide immer mehr an Popularität und gehört heut-                                                                              Black-Box-Tests werden unfertige oder noch nicht integrierte            vorliegt oder grundlegende Informationen über Code, welcher                       an, um die Methoden mit ihren entsprechenden Parametern für
                                                                    zutage zu einer der meist verfolgten Guides und zählt zu den                                                                            Systeme simuliert. Der Test erfolgt beispielsweise durch die            sehr komplex ist.                                                                 beliebige Objekte aufzurufen.
Die Qualitätssicherung (kurz QS) ist ein wesentlicher Bestand-      Standards. Es werden alle Aspekte des Codes abgedeckt, wobei
teil der Softwareentwicklung. Diese bietet viele Vorteile, unter
anderem Folgende:
                                                                    z.B die Richtlinien von Variablen, Deklarationen oder Funktio-
                                                                    nen berücksichtigt werden. Es werden Tipps für besseren Code                       Abbildung 1: Linting der Dateien
                                                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                                                                                                                                                                                 Off-Heap Memory Leaks in Servlet-Containern
Zum einen die Einsparung von Zeit und Geld. Denn wenn früh-
zeitig gute QS-Prozesse implementiert werden lassen sich Feh-
                                                                    gegeben und das Programm kann auch automatisch formatiert
                                                                    und verbessert werden.                                                                                                                                                                                                                                                                                                                                                       Modul Qualitätssicherung, Oliver Radfelder & Karin Vosseberg
ler vermieden. Dies erspart gegenüber späterer oder garkeiner       Bei unserem Projekt sorgt der Styleguide dafür, dass die Formar-    Prettier ESlint
Implementierung einiges an Aufwand. Außerdem bleibt die Soft-       tierung einheitlich ist und kann diese auch selbstständig berich-
ware durch regelmäßige Qualitätssicherungsprozesse immer            tigen.                                                              Prettier ESlint ist ein automatisches Formatierungstool welches
auf dem neusten Stand der Sicherheit. Denn in einer, sich schnell                                                                       bei der Arbeit mit VS-Code eingesetzt wird. Nach installierung
wandelnden Softwarewelt kann morgen eine Sicherheitslücke                                                                               des Plugins lassen sich per Tastenkombination die in ESlint                                                                                                                                                                                                                                               Abbildung 1: Java-Webanwendung im tomcat 10 im Docker-Container mit Java SE 17, -Xmx512m, 5000 aktiven Websockets und deaktiviertem per-message-de昀‫؀‬ate: der verbrauchte Speicher des Java-Prozesses bleibt unter 1 GB
entstehen, die heute noch keine war. Doch nicht nur im Ba-
ckend muss auf Qualitätssicherung geachtet werden. Auch im
                                                                     Verwendete Technologien
                                                                                                                                        de昀‫؀‬nierten Regeln umsetzen. In der Console kann man dies mit
                                                                                                                                        dem Befehl npm run format umsetzen.                                 Qualitätssicherung 2022                                                                                                                                                                                                            2000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                rss MB docker
Frontend ist es wichtig, dass durch mangelnde Kontrolle Ein-                                                                                                                                                                                                                                                                                                                                                                                   1500                                                                                                                                                                                                                             rss MB tomcat
schränkungen für den Nutzer entstehen. Denn nur ein optimales
Nutzererlebnis sorgt dafür, dass dieser auch zufrieden ist. Dabei   Git Pipeline
                                                                                                                                                                                                            Definition der Werkzeuge Checkstyle, JaCoCo und JavaParser                                                                                                                                                                         1000
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               java heap used
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (messages/sec) /100
wird in 4 Verschiedene Testfälle unterschieden:
Beim Unit Test werden die einzelnen Bestandteile getestet. Hier-
                                                                                                                                                                                                                                                                                                                                                                                                                                                500

bei ist das Testen einzelner Komponenten möglich und Fehler         Die Git-Pipeline läuft über den Code und ist für das Linting ver-                                                                       Tom Puschmann, Patrick Wieland, Morten Bellmann & Ahmet Iciger                                                                                                                                                                        0
lassen sich genauer eingrenzen. Beim Integrationstest dage-         antwortlich. Nach dem Committen wird das Linting angesteuert.                                                                                                                                                                                                                                                                                                                         10:00           12:00            14:00          16:00             18:00            20:00             22:00           00:00          02:00            04:00          06:00           08:00             10:00
gen werden die Abhängigkeiten der einzelnen Komponenten             Wenn dieses ohne Probleme erfolgt, dann wird kein Fehler zu-                                                                            Hochschule Bremerhaven
getestet. Ein Schwerpunkt liegt dabei auf den Schnittstellen.       rück gemeldet. Wenn es jedoch Fehler gibt, dann schlägt die                                                                                                                                                                                                                                                                                                                                                                             Nach 100 Nachrichten wird der jeweilige Websocket                  Zusätzlich ist zu beobachten:                                 2.5 GB. Bekommt der Docker-Container lediglich 2 GB
                                                                                                                                                                                                                                                                                                                                                                                                                                                Problemstellung
Anders beim Systemtest. Dort werden alle funktionalen Anfor-        Pipeline automatisch auch Fehl. Pre Commits sind hier nicht                                                                                                                                                     p u b l i c void foo ( ) {                                                        Wie sieht die konkrete Anwendung aus?                                                                                                 geschlossen und ein neuer geöffnet, so dass insge-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   " die Anzahl der Nachrichten pro Sekunde liegt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             virtuellen Speicher zugewiesen, wird der Java-Prozess
                                                                                                                                                                                                             CheckStyle
                                                                                                                                                                                                                                                                                1
derungen anhand des Lastenhefts geprüft. Nicht-funktionale                                                                                          Abbildung 2: Formatieren der Dateien                                                                                                                                                                                                                                                                                                                    samt durchgängig über Stunden etwa 5000 aktive                                                                                   nach weniger als 10 Minuten von dem OOM-Killer be-
                                                                    möglich, da wir uns auf der Git-Lab Ober昀‫؀‬ä                                                                                                                                                                 2      int i = 5;                                                                                                                                              In der Infrastruktur der Informatik an der Hochschu-                                                                                  bei etwa 20.000
Anforderungen wie Bedienbarkeit und Wartbarkeit können nicht                                                                                                                                                                                                                                                                                                                                                                                                                                                Websockets verbunden sind.                                                                                                       endet.
                                                                    che und nicht bei Git be昀‫؀‬nden.                                                                                                                                                                             3      i f ( i > 3 ) ; // v i o l a t i o n , =;= r i g h t a f t e r i f statement                                                                            le Bremerhaven werden den Studierenden Docker-
                                                                                                                                                                                                                                                                                                                                                                      Man besitzt eine einfache Java-Applikation und lädt sich JaCoCo                                                                                                                                              " der Java-Heap liegt tatsächlich nahezu durchge-
getestet werden, da diese manuellen Interaktionen benötigen.                                                                                                                                                Wo wird das Tool eingesetzt?
                                                                                                                                                                                                                                                                                4           i ++;                                                                                                                                              Container zur Verfügung gestellt, in denen als Servlet-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     hend bei 500 MB
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Hier ist weiterhin zu beobachten:
                                                                                                                                                                                                                                                                                       f o r ( i = 0 ; i < 5 ; i ++) ; // v i o l a t i o n                           als Abhängigkeit in sein Projekt. Anschließend werden Methoden           Engines tomcat, wild昀‫؀‬y und jetty installiert sind. Die        Erste Beobachtung
Zum Schluss erfolgt der Finale Abnahmetest. Dieser wird durch                                                                                                                                                                                                                   5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " auch hier beträgt die Anzahl der abgearbeiteten
                                                                                                                                                                                                                                                                                                                                                                      erfasst, die die Quellcodezeilen testen (abdecken) sollen. Wie           Java-Versionen 8, 11 und 17 stehen ebenfalls bereit. Die
den Kunden durchgeführt, der mit seinen eigenen Daten tes-                                                                               Literatur                                                                                                                              6

                                                                                                                                                                                                                                                                                7
                                                                                                                                                                                                                                                                                            i ++;
                                                                                                                                                                                                                                                                                       while ( i > 10) // OK                                                          bereits beschrieben, ist das Ziel, eine möglichst hohe Testabde-         Container selbst werden mit je vier virtuellen CPUs          In der Standardkon昀‫؀‬guration des tomcat 10 unter Java
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Diese Kombination lässt darauf schließen, dass so-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               wohl auf den Garbage-Collector als auch auf das Ver-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Nachrichten pro Sekunde etwa 20.000
tet.(easyname, 2022)                                                                                                                                                                                        Checkstyle findet seinen Einsatz in der Codeformatierung. Bei                   i ++;                                                                                                                                              und zwei GB virtuellem Speicher gestartet.                   SE 17 stellt sich heraus, dass bei 2 GB virtuellem Spei-
                                                                    ESlint                                                                                                                                                                                                                                                                                            ckung zu erreichen. Um dies kontrollieren zu können, wird nach                                                                                                                                           arbeiten der Websocket-Nachrichten nicht unerheb-                " der tatsächlich gebrauchte Heap beträgt im Mit-
                                                                                                                                                                                                                                                                                8
                                                                                                                                        airbnb. (2022). Airbnb JavaScript Style Guide. Verfügbar 27. Sep-   Checkstyle handelt es sich um eine statische Codeanalyse [1]            }                                                                                                                                                                                                                       cher der OOM-Killer den Java-Prozess innerhalb von
                                                                                                                                                                                                                                                                                9
                                                                                                                                                                                                                                                                                                                                                                      dem Test ein Report entweder im xml-, html- oder csv-Format ge-                                                                                                                                          liche Anteile an dem CPU-Verbrauch fallen.                         tel nur etwa die Hälfte von dem, den der tomcat
                                                                                                                                           tember 2022 unter https://github.com/airbnb/javascript           (Durchführung zur Compile-Zeit [2]), zur Formatierung von Java-                                                                                                                                                                    In aktuellen Webanwendungen werden Websockets
                                                                                                                                                                                                                                                                                            Listing 1: Checkstyle-Beispiel: EmptyStatement[5]                                                                                                                                                               10 Minuten beendet. Bei zugewiesenen 3 GB virtuel-                                                                                    benötigt
                                                                                                                                        easyname. (2022). Qualitätssicherung in der Softwareentwick-                                                                                                                                                                  neriert. In diesem Bericht kann man sehen, wie viele Anweisungen         als Technologie eingesetzt. Seit einigen Jahren ist
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            lem Speicher läuft der Prozess auch nach Stunden                   Die gleichen Ergebnisse sind mit tomcat in den Ver-
                                                                                                                                                                                                            Quellcode. Eine eigene Definition von Regeln hilft einer Grup-
                                                                    ESlint ist in diesem Projekt ein Werkzeug zur Codeanalyse. Es                                                                                                                                                                                                                                     anhand der verwendeten Tests nicht ausgeführt werden konnten.            bereits zu beobachten, dass eine Webanwendung                                                                                   sionen 8 und 9 sowie den Java-Versionen 9 und 11 zu
                                                                                                                                           lung. Verfügbar 25. September 2022 unter https : / /                                                                                                                                                                                                                                                                                                             noch. Allerdings steigt der Verbrauch auf über 2.5 GB
 Airbnb Style Guide                                                 läuft über den JavaScript Code und analysiert diesen. Sobald           www . easyname . at / blog / digitales - business - 2 /
                                                                                                                                                                                                            pe von Entwicklern dabei, einen einheitlichen Programmierstil
                                                                                                                                                                                                            durchzusetzen. Unter Codeformatierung fließen Aspekte, wie bei-
                                                                                                                                                                                                                                                                                                                                                                      Des Weiteren können wir die Anzahl der Verzweigungen sehen,              mit Websockets in einer so RAM-beschränkten Um-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (siehe Abb. 2 mit Legende aus Abb. 1).                             beobachten. Als Werkzeuge haben sich nach mehre-
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3000

                                                                                                                                                                                                                                                                                    In welchem Schritt der Entwicklung wird es genutzt?                                                                                                        gebung im tomcat in den Versionen 8, 9 und nun                                                                                  ren Experimenten u.a. mit pmap und ps als besonders
                                                                    Problematische Stellen erkannt werden, wird entweder eine              qualitaetssicherung-in-der-softwareentwicklung/                                                                                                                                                                            die nicht durchlaufen wurden. Zur Veranschaulichung werden die                                                                                                                                                                                                          2500
                                                                                                                                                                                                            spielsweise die Form der Klammersetzung oder das Einrücken                                                                                                                                                                         auch 10 unter Last schnell so viele Ressourcen ver-                                                                             geeignet letztlich docker stats, pidstat und jcmd her-
Der Airbnb Style Guide(airbnb, 2022) wurde von Harrison Shoff       Warnung in der Console ausgegeben (npn run lint) oder mit dem                                                                                                                                                                                                                                     beiden gerade genannten Werte als Prozentsatz dargestellt. Im            braucht, dass der OOM-Killer (OutOfMemory) den
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3000
                                                                                                                                                                                                            von Quellcode mit ein. Bei der statischen Codeanalyse wird die                                                                                                                                                                                                                                                                                                     ausgestellt, mit denen die Daten für die Auf bereitun-         2000
als open source im Jahre 2012 veröffentlicht. Er wird hauptsäch-    richtigen VS-Code Plugin live unterstrichen.                                                                                                                                                                    Wie oben bereits erwähnt, wird Checkstyle zur Compile-Zeit ausge-                 Report verwendet Jacoco ein bestimmtes Farbschema, um schnell            Java-Prozess beendet. Das betrifft alle drei verfüg-                                                                            gen erzeugt wurden.
                                                                                                                                                                                                            Prüfung zur Compile-Zeit durchgeführt, während bei den dyna-                                                                                                                                                                                                                                      2500
lich in JavaScript verwendet, kann aber auch in anderen Pro-                                                                                                                                                                                                                        führt und analysiert den geschriebenen Code, bevor das Programm                   verdeutlichen zu können, welcher Code erreicht (Farbe
Fazit

   Theoretisches Wissen zu Handlungswissen
   Studierende erhalten konkrete Ideen,
   zur Umsetzung von Konzepten der QS und
   den Mehrwert fŸr Softwareentwicklung
   Mischung zwischen Vorstellung von
   Konzepten und Umsetzung in Java wird
   von den Studierenden positiv bewertet
   Gro§e Herausforderung fŸr Studierende
   tief in Java-Konzepte einzusteigen

 Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   13
oradfelder@hs-bremerhaven.de
                           kvosseberg@hs-bremerhaven.de

Oliver Radfelder und Karin Vosseberg, Hochschule Bremerhaven   14
Sie können auch lesen