SEUH 2023 Nachhaltigkeit als Qualit tskriterium von Software - Den Blick auf ressourcen-sparsame Softwareentwicklung sch rfen
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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