<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Testing &amp; Quality on JAVAPRO Germany</title><link>https://javapro.svenruppert.com/categories/testing--quality/</link><description>Recent content in Testing &amp; Quality on JAVAPRO Germany</description><generator>Hugo</generator><language>de-DE</language><lastBuildDate>Wed, 08 Apr 2026 12:00:36 +0000</lastBuildDate><atom:link href="https://javapro.svenruppert.com/categories/testing--quality/index.xml" rel="self" type="application/rss+xml"/><item><title>Großes Kino für Java-Entwickler &amp; Architekten</title><link>https://javapro.svenruppert.com/grosses-kino-fuer-java-entwickler-architekten/</link><pubDate>Wed, 08 Apr 2026 12:00:36 +0000</pubDate><guid>https://javapro.svenruppert.com/grosses-kino-fuer-java-entwickler-architekten/</guid><description>&lt;p&gt;&lt;strong&gt;JCON EUROPE 2026 | 20. bis 23. April 2026 | Cinedom in Köln&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wer heute über moderne Softwareentwicklung spricht, spricht zwangsläufig über Java. Kaum eine Technologie prägt die Enterprise-Welt so nachhaltig – und kaum eine Community ist gleichzeitig so lebendig, vielfältig und innovationsgetrieben. Genau hier setzt die JCON an: als Treffpunkt, als Plattform und als Erlebnisraum für Entwicklerinnen und Entwickler aus der ganzen Welt. Mit Teilnehmern aus über 70 Ländern hat sich die JCON längst zu einem internationalen Treffpunkt entwickelt. Dabei bleiben &lt;strong&gt;Offenheit, Wissensaustausch und Community-Gedanke&lt;/strong&gt; zentrale Elemente.&lt;/p&gt;</description></item><item><title>Teste deine Tests: Mutation Testing in Java mit PIT</title><link>https://javapro.svenruppert.com/teste-deine-tests-mutation-testing-in-java-mit-pit/</link><pubDate>Mon, 20 Oct 2025 07:20:49 +0000</pubDate><guid>https://javapro.svenruppert.com/teste-deine-tests-mutation-testing-in-java-mit-pit/</guid><description>&lt;h2 id="mehr-als-nur-code-coverage"&gt;Mehr als nur Code Coverage&lt;/h2&gt;
&lt;p&gt;Automatisierte Tests gehören inzwischen fest zur professionellen Softwareentwicklung. Ob klassisch mit Unit-Tests oder im voll testgetriebenen Workflow (TDD) – Tests sorgen dafür, dass Anwendungen korrekt, wartbar und refaktorierbar bleiben. Die meisten Java Teams messen ihre Testabdeckung mit Tools wie JaCoCo und binden die Metriken in ihre CI/CD-Pipelines ein. Auf den ersten Blick wirkt das ausreichend: Hohe Testabdeckung – also sind wir sicher, oder?&lt;/p&gt;
&lt;p&gt;Leider führt genau diese Annahme oft in eine trügerische Sicherheit. Testabdeckung zeigt nur, dass eine Zeile oder ein Branch beim Testlauf ausgeführt wurde. Sie sagt aber nichts darüber aus, ob der Test auch wirklich das Ergebnis überprüft hat. Eine Zeile Code kann „abgedeckt“ sein, nur weil ein Test zufällig darüberläuft – ohne eine sinnvolle Assertion. Selbst 100 % Branch Coverage garantieren nicht, dass kritische Bedingungen auch korrekt getestet wurden.&lt;/p&gt;</description></item><item><title>Agile Nightmares: Wenn Agilität zum Innovationshemmnis wird</title><link>https://javapro.svenruppert.com/agile-nightmares-wenn-agilitaet-zum-innovationshemmnis-wird/</link><pubDate>Mon, 15 Sep 2025 07:00:03 +0000</pubDate><guid>https://javapro.svenruppert.com/agile-nightmares-wenn-agilitaet-zum-innovationshemmnis-wird/</guid><description>&lt;h2 id="die-schaurigen-gestalten-der-agilität"&gt;Die schaurigen Gestalten der Agilität&lt;/h2&gt;
&lt;p&gt;In der dynamischen Welt der Softwareentwicklung und darüber hinaus hat sich Agilität als ein prägender Ansatz etabliert. Doch hinter dem Versprechen von Flexibilität, Kundenorientierung und kontinuierlicher Verbesserung verbergen sich mitunter schädliche Muster, die ihre Versprechen weit verfehlen und Agilität unglaubwürdig machen.&lt;/p&gt;
&lt;p&gt;Die Rufe mehren sich, Agilität als ineffektiv oder gar &amp;rsquo;tot&amp;rsquo; zu erklären. Die eigentlichen Ursachen für diese wachsende Skepsis liegen jedoch selten in den agilen Prinzipien selbst, sondern vielmehr in deren schleichender oder sogar bewusster Fehlinterpretation und Anwendung.&lt;/p&gt;</description></item><item><title>MockServer NeoLight: Eine schlanke Alternative für API-Tests mit Testcontainers</title><link>https://javapro.svenruppert.com/mockserver-neolight-eine-schlanke-alternative-fuer-api-tests-mit-testcontainers/</link><pubDate>Fri, 29 Aug 2025 13:22:36 +0000</pubDate><guid>https://javapro.svenruppert.com/mockserver-neolight-eine-schlanke-alternative-fuer-api-tests-mit-testcontainers/</guid><description>&lt;p&gt;Das Open-Source-Projekt &lt;a href="https://github.com/xdev-software/mockserver-neolight"&gt;MockServer NeoLight&lt;/a&gt; wurde als leichtgewichtige Neufassung des ursprünglichen &lt;a href="https://github.com/mock-server/mockserver"&gt;MockServer&lt;/a&gt; veröffentlicht. Der Schwerpunkt liegt auf &lt;strong&gt;Einfachheit&lt;/strong&gt;, &lt;strong&gt;Wartbarkeit&lt;/strong&gt; und der nahtlosen Integration mit &lt;a href="https://java.testcontainers.org/"&gt;&lt;strong&gt;Testcontainers&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Das MockServer-Konzept ermöglicht es Entwicklern, HTTP- und HTTPS-Anfragen zu &lt;strong&gt;mocken und damit APIs für Testzwecke zu simulieren&lt;/strong&gt;. Durch das Festlegen von Erwartungen an eingehende Anfragen und definierten Antworten lassen sich kontrollierte Umgebungen für Integrationstests schaffen. Dadurch wird das zu testende System von realen externen Abhängigkeiten isoliert, was zu vorhersehbaren und wiederholbaren Ergebnissen führt.&lt;/p&gt;</description></item><item><title>Testcontainer Tests in Lichtgeschwindigkeit: Tests schneller und flexibler gestalten</title><link>https://javapro.svenruppert.com/testcontainer-tests-in-lichtgeschwindigkeit-tests-schneller-und-flexibler-gestalten/</link><pubDate>Fri, 29 Aug 2025 12:53:22 +0000</pubDate><guid>https://javapro.svenruppert.com/testcontainer-tests-in-lichtgeschwindigkeit-tests-schneller-und-flexibler-gestalten/</guid><description>&lt;p&gt;Testcontainers ist in vielen Java-Projekten zu einem unverzichtbaren Werkzeug geworden, um Integrations- und Systemtests in realistischen Umgebungen durchzuführen. Wenn Testszenarien jedoch komplexer werden, stoßen Entwickler oft an Grenzen – insbesondere in Bezug auf Konfiguration, Parallelisierung und Ressourcennutzung. Ein auf Testcontainers aufbauendes Open-Source-Framework begegnet einigen dieser Herausforderungen mit leistungsstarken Erweiterungen.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/xdev-software/tci-base"&gt;&lt;strong&gt;Testcontainers Infrastructure (TCI)&lt;/strong&gt; Framework&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1-verbesserte-anpassbarkeit-und-parallelisierung"&gt;&lt;strong&gt;1. Verbesserte Anpassbarkeit und Parallelisierung&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Durch die Verwendung des Factory Patterns bei der Erstellung von Container wird es für den Entwickler einfacher, die Container nach Bedarf anzupassen:&lt;/p&gt;</description></item><item><title>Wenn hashCode() lügt und equals() hilflos ist</title><link>https://javapro.svenruppert.com/wenn-hashcode-luegt-und-equals-hilflos-ist/</link><pubDate>Sun, 08 Jun 2025 09:53:06 +0000</pubDate><guid>https://javapro.svenruppert.com/wenn-hashcode-luegt-und-equals-hilflos-ist/</guid><description>&lt;p&gt;Ein tiefer Blick in Java’s HashMap-Fallen – visuell demonstriert mit Vaadin Flow&lt;/p&gt;
&lt;h3 id="die-stille-gefahr-in-der-standardbibliothek"&gt;&lt;strong&gt;Die stille Gefahr in der Standardbibliothek&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Die Verwendung von HashMap und HashSet gehört zum täglich Brot in der Java-Entwicklung. Diese Datenstrukturen bieten exzellente Performance für Lookup- und Einfügeoperationen – solange ihre fundamentalen Annahmen erfüllt bleiben. Eine davon lautet: Der hashCode() eines Schlüssels bleibt stabil. Was aber, wenn das nicht der Fall ist?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=u-tSy27RXA8"&gt;https://www.youtube.com/watch?v=u-tSy27RXA8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Genau hier lauert eine der subtilsten und zugleich gefährlichsten Fallen der Java-Standardbibliothek: mutable Schlüsselobjekte. In diesem Artikel zeigen wir nicht nur, warum diese Konstellation problematisch ist, sondern führen das Phänomen interaktiv mit Vaadin Flow vor. Leserinnen und Leser erfahren, wie die HashMap intern funktioniert, warum equals() allein nicht genügt, und wie man mit modernen Sprachmitteln wie record robuste, unveränderliche Schlüssel erzeugt.&lt;/p&gt;</description></item><item><title>Die Kunst der statischen Codeanalyse</title><link>https://javapro.svenruppert.com/die-kunst-der-statischen-codeanalyse/</link><pubDate>Tue, 04 Feb 2025 22:49:43 +0000</pubDate><guid>https://javapro.svenruppert.com/die-kunst-der-statischen-codeanalyse/</guid><description>&lt;p&gt;Die meisten Java-Entwickler (und nicht nur) haben zumindest eine Art statisches Analysetool verwendet, um eine Aufgabe wie (um nur einige zu nennen) auszuführen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ableiten von Quellcodemetriken wie Codezeilen oder zyklomatische Komplexität;&lt;/li&gt;
&lt;li&gt;Entdecken von Fehlern, Schwachstellen oder Code-Smells wie ungenutzten Variablen (was beliebte IDEs typischerweise tun);&lt;/li&gt;
&lt;li&gt;Durchführen eines automatisierten Refactorings oder einer Code-Vervollständigung;&lt;/li&gt;
&lt;li&gt;Durchsetzung von Code- und Qualitätsstandards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um eine statische Codeanalyse durchzuführen, benötigen wir normalerweise eine geeignete Darstellung des Quellcodes, die für die Analyse geeignet ist. Eine Programmiersprache kann durch eine formale Grammatik beschrieben werden. Darüber hinaus kann ein Parser erstellt oder generiert werden, indem man den Regeln einer formalen Grammatik folgt, um aus dem Quellcode eine ordnungsgemäße Darstellung (normalerweise einen Analysebaum) zu erstellen. Abhängig von der Art der Sprache, die wir darstellen möchten, können wir unterschiedliche Arten formaler Grammatiken verwenden:&lt;/p&gt;</description></item><item><title>Bewährte Praktiken für CI/CD Pipelines</title><link>https://javapro.svenruppert.com/bewaehrte-praktiken-fuer-ci-cd-pipelines/</link><pubDate>Wed, 30 Nov 2022 17:51:53 +0000</pubDate><guid>https://javapro.svenruppert.com/bewaehrte-praktiken-fuer-ci-cd-pipelines/</guid><description>Diese Praktiken sollen eine Vorstellung davon vermitteln, wie einige Probleme in modernen CI/CD-Pipelines gelöst und was vermieden werden sollte. Verwenden Sie diese Muster als Richtlinie beim Implementieren Ihrer eigenen Pipelines.</description></item><item><title>PCI DSS-Sicherheitsauditverfahren - alles, was Sie wissen müssen</title><link>https://javapro.svenruppert.com/pci-dss-sicherheitsauditverfahren-alles-was-sie-wissen-muessen/</link><pubDate>Thu, 02 Jun 2022 14:56:43 +0000</pubDate><guid>https://javapro.svenruppert.com/pci-dss-sicherheitsauditverfahren-alles-was-sie-wissen-muessen/</guid><description>Die Einhaltung des Datensicherheitsstandards (DSS) der Zahlungskartenbranche (PCI, engl.: Payment Card Industry) erfordert eine jährliche Berichterstattung. Diese jährliche Berichterstattung umfasst umfangreiche PCI-DSS-Auditverfahren für Organisationen, die die höchsten Transaktionsvolumina abwickeln. Die Auditverfahren werden im Rahmen einer Vor-Ort-Bewertung durchgeführt, die als Konformitätsbe</description></item><item><title>Die typische Lebenslinie einer Sicherheitslücke</title><link>https://javapro.svenruppert.com/die-typische-lebenslinie-einer-sicherheitsluecke/</link><pubDate>Wed, 30 Jun 2021 11:00:42 +0000</pubDate><guid>https://javapro.svenruppert.com/die-typische-lebenslinie-einer-sicherheitsluecke/</guid><description>&lt;p&gt;**Immer wieder lesen wir in den IT-Nachrichten etwas über gefundene Sicherheitslücken. Je schwerer die Einstufung dieser Lücke ist, desto mehr Aufmerksamkeit bekommen diese Informationen in der allgemeinen Presse. Über all die gefundenen Sicherheitslücken, die nicht den Bekanntheitsgrad von zum Beispiel dem SolarWinds Hack erlangen, hört und liest man meistens nichts. Aber wie ist die typische Lebenslinie einer solchen Sicherheitslücke? ** Beginnen wir mit der Geburt einer Sicherheitslücke. Das kann auf zwei unterschiedlich motivierte Arten geschehen. Zum einen kann es jedem Entwickler passieren, dass er durch eine unglückliche Kombination von Quelltextstücken eine Sicherheitslücke erzeugt. Zum anderen kann es auch auf einer gezielten Manipulation beruhen. Allerdings hat das im Wesentlichen keine Auswirkungen auf den weiteren Verlauf der Lebenslinie einer Sicherheitslücke. Wir gehen im nachfolgenden einfach davon aus, dass eine Sicherheitslücke erzeugt worden ist und diese sich nun aktiv in irgendeiner Software befindet. Dabei kann es sich um ausführbare Programme handeln oder auch um angebotene Bibliotheken die als Dependency in andere Softwareprojekte eingebunden wird.&lt;/p&gt;</description></item><item><title>H2 für JUnit-Tests</title><link>https://javapro.svenruppert.com/h2-fuer-junit-tests/</link><pubDate>Thu, 17 Dec 2020 15:16:56 +0000</pubDate><guid>https://javapro.svenruppert.com/h2-fuer-junit-tests/</guid><description>&lt;p&gt;&lt;strong&gt;H2 ist eine komplett in Java implementierte, relationale Open-Source-Datenbank, die man embedded, als Server- oder In-Memory-Datenbank verwenden kann. H2 eignet sich unter anderem in Prototypen, kleinen Services und für automatisierte Unit-Tests.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Moderne Ansätze zum Systemdesign wie Microservices oder Self-Contained-Systems bieten die Möglichkeit, einzelne Aspekte eines Gesamtsystems isoliert betrachten und bearbeiten zu können. Implementierung, Erweiterung und Deployment der einzelnen Komponenten sind durch automatisierte Tests schnell und trotz zahlreicher Build- und Deployment-Pipelines sicher. Die Vorteile der Isolation kommen vor allem in der Entwicklung zum Tragen, wenn es gelingt Services ohne weitere Umgebungskonfiguration auf der Entwicklermaschine aufzusetzen und testgetrieben entwickeln zu können. Für Services und Systeme, die eine relationale Datenbank als Datenquelle nutzen, gibt es für lokal und in Pipelines ausgeführte Unit-Tests unterschiedliche Ansätze zur Einbindung einer Datenquelle. In diesem Zusammenhang wird im Folgenden das relationale Datenbankmanagementsystem H2 vorgestellt, das insbesondere für Tests auch als In-Memory Lösung konfigurierbar ist.&lt;/p&gt;</description></item><item><title>Prototyping spart Zeit und Kosten</title><link>https://javapro.svenruppert.com/prototyping-spart-zeit-und-kosten/</link><pubDate>Thu, 09 Jul 2020 16:51:10 +0000</pubDate><guid>https://javapro.svenruppert.com/prototyping-spart-zeit-und-kosten/</guid><description>&lt;p&gt;&lt;strong&gt;Heute muss Software zügig entwickelt und produktiv gesetzt werden (Time-to-Market). Dabei kann &lt;a href="https://de.wikipedia.org/wiki/Prototyping_(Softwareentwicklung)"&gt;Prototyping&lt;/a&gt; helfen, die Effizienz im Entwicklungsprozess zu verbessern. Allerdings gilt es sorgfältig zu überlegen, welche Prototyping-Methode zum eigenen Projekt passt.&lt;/strong&gt; Softwareentwicklung ist eine sehr dynamische Disziplin, in der sich die Anforderungen schnell ändern. Häufig entwickelt die Auftraggeberseite eine Reihe von Anforderungen oder &lt;a href="https://de.wikipedia.org/wiki/User_Story"&gt;User-Stories&lt;/a&gt;, obwohl sie das entsprechende Resultat nicht genau einschätzen kann. Das Entwicklerteam macht sich Gedanken und arbeitet an einem repräsentablen Stakeholder. Wenn dieser jedoch hinter den Erwartungen zurückbleibt, weil die Anlage zur Visualisierung anfänglicher Anforderungen fehlt, kann es passieren, dass so ein Projekt komplett neu auf die Spur gesetzt werden muss. Das führt im Ergebnis zu einem erhöhten Budgetbedarf für die Produktentwicklung. Um den Ablauf und dementsprechend das Budget zu optimieren, können verschiedene Ansätze verfolgt werden: &lt;a href="https://de.wikipedia.org/wiki/Proof_of_Concept"&gt;Proof-of-Concept&lt;/a&gt;, Wireframes, Funktionales Prototyping, &lt;a href="https://de.wikipedia.org/wiki/Minimum_Viable_Product" title="MVP (Minimum Viable Product)"&gt;MVP (Minimum Viable Product)&lt;/a&gt; oder ein Pilotprojekt. Dieser Artikel konzentriert sich auf das &lt;a href="https://de.wikipedia.org/wiki/Prototyping_(Softwareentwicklung)"&gt;Prototyping&lt;/a&gt;:&lt;/p&gt;</description></item></channel></rss>