<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Modultest Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/modultest/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/modultest/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Tue, 24 Oct 2023 05:21:18 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Modultest Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/modultest/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Bedingungsüberdeckungstest &#8211; Jeden Codepfad analysieren und optimieren</title>
		<link>https://ceosbay.com/2023/10/21/bedingungsueberdeckungstest/</link>
					<comments>https://ceosbay.com/2023/10/21/bedingungsueberdeckungstest/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 21 Oct 2023 20:56:37 +0000</pubDate>
				<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Anforderungstest]]></category>
		<category><![CDATA[Anwendungsfalltest]]></category>
		<category><![CDATA[Bedingungsüberdeckungstest]]></category>
		<category><![CDATA[Black-Box-Test]]></category>
		<category><![CDATA[Codeanalyse]]></category>
		<category><![CDATA[Codeüberdeckung]]></category>
		<category><![CDATA[Compliance-Test]]></category>
		<category><![CDATA[Condition Coverage]]></category>
		<category><![CDATA[Continuous Testing]]></category>
		<category><![CDATA[Datenflusstest]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Entscheidungsbaum]]></category>
		<category><![CDATA[Entwicklungsprozess]]></category>
		<category><![CDATA[Fehlerfindung]]></category>
		<category><![CDATA[Funktionstest]]></category>
		<category><![CDATA[Grenzwertanalyse]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[Kontrollfluss]]></category>
		<category><![CDATA[Lasttest]]></category>
		<category><![CDATA[Modultest]]></category>
		<category><![CDATA[Performancetest]]></category>
		<category><![CDATA[Pfadüberdeckung]]></category>
		<category><![CDATA[Qualitätsgarantie]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Qualitätssicherungsprozess]]></category>
		<category><![CDATA[Qualitätstests]]></category>
		<category><![CDATA[Regressionstest]]></category>
		<category><![CDATA[Sicherheitstest]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwarefehler]]></category>
		<category><![CDATA[Softwaretest]]></category>
		<category><![CDATA[Stresstest]]></category>
		<category><![CDATA[Systemtest]]></category>
		<category><![CDATA[Testabdeckung]]></category>
		<category><![CDATA[Testdaten]]></category>
		<category><![CDATA[Testdesign]]></category>
		<category><![CDATA[Testdokumentation]]></category>
		<category><![CDATA[Testdriven Development]]></category>
		<category><![CDATA[Testfallerstellung]]></category>
		<category><![CDATA[Testfallkonstruktion]]></category>
		<category><![CDATA[Testframeworks]]></category>
		<category><![CDATA[Testkonzepte]]></category>
		<category><![CDATA[Testkriterien]]></category>
		<category><![CDATA[Testlifecycle]]></category>
		<category><![CDATA[Testmanagement]]></category>
		<category><![CDATA[Testmethoden]]></category>
		<category><![CDATA[Testphasen]]></category>
		<category><![CDATA[Testplanung]]></category>
		<category><![CDATA[Testprozesse]]></category>
		<category><![CDATA[Testreport]]></category>
		<category><![CDATA[Testskript]]></category>
		<category><![CDATA[Teststrategieentwicklung]]></category>
		<category><![CDATA[Teststrategien]]></category>
		<category><![CDATA[Testumgebung]]></category>
		<category><![CDATA[Testwerkzeuge]]></category>
		<category><![CDATA[Testzyklus]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[Usabilitytest]]></category>
		<category><![CDATA[Validierung]]></category>
		<category><![CDATA[Verifikation]]></category>
		<category><![CDATA[White-Box-Test]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2772</guid>

					<description><![CDATA[<p>Der Softwaretest stellt einen entscheidenden Schritt in der Softwareentwicklung dar. Unter den zahlreichen Testmethoden hebt sich der Bedingungsüberdeckungstest (engl. Condition Coverage) durch seine Spezifität und Wirksamkeit ab. Doch was genau verbirgt sich dahinter? Definition des &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/21/bedingungsueberdeckungstest/">Bedingungsüberdeckungstest &#8211; Jeden Codepfad analysieren und optimieren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Der Softwaretest stellt einen entscheidenden Schritt in der Softwareentwicklung dar. Unter den zahlreichen Testmethoden hebt sich der Bedingungsüberdeckungstest (engl. Condition Coverage) durch seine Spezifität und Wirksamkeit ab. Doch was genau verbirgt sich dahinter?</p>



<h3 class="wp-block-heading">Definition des Bedingungsüberdeckungstests</h3>



<p>Der Bedingungsüberdeckungstest, oft auch &#8222;Condition Coverage&#8220; genannt, fokussiert sich auf die verschiedenen Bedingungen innerhalb einer Entscheidungsstruktur. Er zielt darauf ab, sicherzustellen, dass jede Bedingung mindestens einmal sowohl wahr als auch falsch getestet wird. Dies ermöglicht eine tiefgehende Analyse und stellt sicher, dass alle Bedingungszweige im Code überprüft werden.</p>



<p>Der Bedingungsüberdeckungstest gehört zu den <a href="https://ceosbay.com/2023/06/01/whitebox-tests-bugs-aufspueren-und-qualitaet-sicherstellen/">Whitebox</a>-Testmethoden. Bei <a href="https://ceosbay.com/2023/06/01/whitebox-tests-bugs-aufspueren-und-qualitaet-sicherstellen/">Whitebox-Tests</a>, auch als strukturbasierte oder gläserne Kasten-Tests bezeichnet, liegt der Fokus auf der internen Struktur des Codes. Der Tester hat vollen Einblick in den Quellcode und entwirft Testfälle basierend auf der inneren Logik und Struktur der Software.</p>



<p>Der Bedingungsüberdeckungstest speziell konzentriert sich darauf, dass jede einzelne Bedingung im Code sowohl wahr als auch falsch getestet wird. Damit untersucht er die internen Entscheidungsstrukturen und gewährleistet, dass alle möglichen Bedingungspfade abgedeckt sind.</p>



<p>Im Gegensatz dazu stehen <a href="https://ceosbay.com/2023/06/02/blackbox-tests-software-pruefen-ohne-eine-zeile-code-zu-sehen/">Blackbox-Tests</a>, bei denen der Tester keinen Einblick in den internen Code hat. Bei diesen Tests konzentriert man sich auf die Funktion der Software und darauf, ob sie die erwarteten Ergebnisse liefert, basierend auf den gegebenen Eingaben. Hierbei bleibt die innere Arbeitsweise der Software verborgen.</p>



<h3 class="wp-block-heading">Entstehung des Bedingungsüberdeckungstests</h3>



<p>Die wachsende Komplexität von Software-Systemen im Laufe der Zeit erforderte verbesserte Testmethoden. Während der Anweisungsüberdeckungstest sicherstellt, dass jede Anweisung ausgeführt wird, ging man mit dem Bedingungsüberdeckungstest einen Schritt weiter. Hier legt man den Fokus nicht nur auf die Anweisungen, sondern auch darauf, wie sie ausgeführt werden, abhängig von den gegebenen Bedingungen.</p>



<h3 class="wp-block-heading">Effektives Vorgehen beim Bedingungsüberdeckungstest</h3>



<ol class="wp-block-list">
<li><strong>Identifizierung der Entscheidungen</strong>: Zunächst identifiziert man alle Entscheidungsstrukturen im Code, wie z.B. if-, while- oder for-Statements.</li>



<li><strong>Aufschlüsselung der Bedingungen</strong>: Jede Entscheidung kann mehrere Bedingungen haben. Diese Bedingungen trennt man und testet sie individuell.</li>



<li><strong>Erstellung der Testfälle</strong>: Für jede identifizierte Bedingung entwickelt man Testfälle, die diese Bedingung sowohl wahr als auch falsch machen.</li>



<li><strong>Ausführung und Auswertung</strong>: Nachdem die Testfälle entwickelt sind, führt man sie aus und wertet die Ergebnisse aus, um sicherzustellen, dass alle Bedingungen abgedeckt sind.</li>
</ol>



<h3 class="wp-block-heading"><strong>Beispiele für den Einsatz des Bedingungsüberdeckungstests</strong></h3>



<h4 class="wp-block-heading">Beispiel 1: Ein einfaches If-Statement</h4>



<pre class="wp-block-code"><code>if (A &amp;&amp; B) {
    // Code
}</code></pre>



<p>Hier gibt es zwei Bedingungen: A und B. Um eine vollständige Bedingungsüberdeckung zu gewährleisten, benötigt man Testfälle für:</p>



<ul class="wp-block-list">
<li>A = wahr, B = wahr</li>



<li>A = wahr, B = falsch</li>



<li>A = falsch, B = wahr</li>



<li>A = falsch, B = falsch</li>
</ul>



<h4 class="wp-block-heading">Beispiel 2: Ein zusammengesetztes Statement</h4>



<pre class="wp-block-code"><code>if (A &amp;&amp; (B || C)) {
    // Code
}</code></pre>



<p>Hier identifiziert man drei Bedingungen: A, B und C. Es ergeben sich diverse Testfälle, um sicherzustellen, dass jede Bedingung sowohl wahr als auch falsch getestet wird.</p>



<h3 class="wp-block-heading">Interaktiv &#8211; Bedingungsüberdeckungstest mit einer Wetter-App</h3>



<p><strong>Bedienungsanleitung</strong>:</p>



<ol class="wp-block-list">
<li>In das Feld &#8222;Stadt&#8220; den Namen &#8222;München&#8220; eingeben.</li>



<li>Zwischen &#8222;Aktueller Wetterbericht&#8220; und &#8222;Wettervorhersage&#8220; wählen, um den gewünschten Wettertyp zu bestimmen.</li>



<li>Auf &#8222;Prüfen&#8220; klicken.</li>



<li>Die resultierende Ausgabe betrachten. Bei korrekter Eingabe erscheint entweder der aktuelle Wetterbericht oder die Wettervorhersage für München. Bei einer anderen Stadt zeigt eine Nachricht an, dass die Anwendung die Stadt nicht in der Datenbank finden kann. Wenn kein Wettertyp ausgewählt ist, erscheint eine Aufforderung zur Auswahl.</li>
</ol>



<!DOCTYPE html>
<html lang="de">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bedingungsüberdeckungstest &#8211; Interaktive Veranschaulichung</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f7f9fc;
            padding: 20px;
        }

        #output {
            border: 2px solid #007BFF;
            padding: 15px;
            width: 320px;
            height: 120px;
            display: none;
            background-color: #e6f0ff;
            font-size: 1.2em;
        }

        input[type="text"] {
            padding: 10px;
            font-size: 1.1em;
            width: 300px;
            margin-top: 10px;
        }

        input[type="radio"] {
            margin: 10px 5px;
            transform: scale(1.5);
        }

        label {
            font-size: 1.2em;
        }

        button {
            padding: 10px 15px;
            font-size: 1.1em;
            background-color: #007BFF;
            color: white;
            border: none;
            cursor: pointer;
            margin-top: 10px;
        }

        button:hover {
            background-color: #0056b3;
        }
    </style>
</head>

<body>

<div>
    <label for="city">Stadt:</label>
    <input type="text" id="city" placeholder="Stadt eingeben">
</div>
<div>
    <input type="radio" id="current" name="weather" value="current">
    <label for="current">Aktueller Wetterbericht</label><br>
    <input type="radio" id="forecast" name="weather" value="forecast">
    <label for="forecast">Wettervorhersage</label>
</div>
<button onclick="checkConditions()">Prüfen</button>

<div id="output"></div>

<script>
    function checkConditions() {
        const city = document.getElementById('city').value;
        const currentWeather = document.getElementById('current').checked;
        const forecastWeather = document.getElementById('forecast').checked;
        const output = document.getElementById('output');

        output.style.display = "block";

        if (city === 'München') { 
            if (currentWeather) {
                output.innerHTML = "Aktueller Wetterbericht für München: Sonnig, 23°C.";
            } else if (forecastWeather) {
                output.innerHTML = "Wettervorhersage für München: Morgen leicht bewölkt, 21°C.";
            } else {
                output.innerHTML = "Bitte Wettertyp auswählen!";
            }
        } else {
            output.innerHTML = "Stadt nicht in der Datenbank gefunden!";
        }
    }
</script>

</body>

</html>



<p></p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Der Bedingungsüberdeckungstest stellt ein leistungsstarkes Werkzeug dar, um die Qualität von Software zu sichern. Indem man jede Bedingung gründlich testet, minimiert man das Risiko unentdeckter Fehler und gewährleistet eine robustere Anwendung. Es empfiehlt sich, diesen Test in Kombination mit anderen Testmethoden anzuwenden, um ein umfassendes Testniveau zu erreichen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/21/bedingungsueberdeckungstest/">Bedingungsüberdeckungstest &#8211; Jeden Codepfad analysieren und optimieren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/21/bedingungsueberdeckungstest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2772</post-id>	</item>
		<item>
		<title>Zyklomatische Komplexität &#8211; Messen. Verstehen. Optimieren.</title>
		<link>https://ceosbay.com/2023/10/18/zyklomatische-komplexitaet-messen-verstehen-optimieren/</link>
					<comments>https://ceosbay.com/2023/10/18/zyklomatische-komplexitaet-messen-verstehen-optimieren/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Wed, 18 Oct 2023 17:23:00 +0000</pubDate>
				<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Codeverständlichkeit]]></category>
		<category><![CDATA[Entwicklungsprozess]]></category>
		<category><![CDATA[Funktionsanalyse]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[Modultest]]></category>
		<category><![CDATA[Pfadanalyse]]></category>
		<category><![CDATA[Programmkomplexität]]></category>
		<category><![CDATA[Programmstruktur]]></category>
		<category><![CDATA[Qualitätsmetrik]]></category>
		<category><![CDATA[Risikobewertung]]></category>
		<category><![CDATA[Softwareengineering]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwarequalitätssicherung]]></category>
		<category><![CDATA[Softwarewartung]]></category>
		<category><![CDATA[Systemdesign]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testfallentwicklung]]></category>
		<category><![CDATA[Teststrategie]]></category>
		<category><![CDATA[Unabhängige Pfade]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2832</guid>

					<description><![CDATA[<p>Die Welt der Softwareentwicklung ist voller komplexer Konzepte und Algorithmen. Ein solches Konzept, das sowohl für Entwickler als auch für Tester von großer Bedeutung ist, ist die Zyklomatische Zahl. In diesem Blogbeitrag versuche ich einen &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/18/zyklomatische-komplexitaet-messen-verstehen-optimieren/">Zyklomatische Komplexität &#8211; Messen. Verstehen. Optimieren.</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die Welt der Softwareentwicklung ist voller komplexer Konzepte und Algorithmen. Ein solches Konzept, das sowohl für Entwickler als auch für Tester von großer Bedeutung ist, ist die Zyklomatische Zahl. In diesem Blogbeitrag versuche ich einen detaillierten Überblick über die Zyklomatische Komplexität, ihre Geschichte, ihre Anwendung und Beispiele für ihren Einsatz zu bieten. Ich habe das Thema bereits in meinem Beitrag über <a href="https://ceosbay.com/2023/03/17/erklaerung-sonarqube/">SonarQube</a> angeschnitten aber möchte es heute in einem gesonderten Beitrag festhalten.</p>



<h3 class="wp-block-heading">Was ist die Zyklomatische Zahl?</h3>



<p>Die Zyklomatische Zahl, auch als Zyklomatische Komplexität oder McCabe-Metrik bekannt, quantifiziert die Komplexität eines Programms oder einer Funktion basierend auf der Anzahl der linearen, unabhängigen Pfade durch den Code. Einfach ausgedrückt: Es handelt sich um eine Zahl, die angibt, wie viele verschiedene Wege es gibt, einen bestimmten Codeabschnitt auszuführen.</p>



<h3 class="wp-block-heading">Entstehung</h3>



<p>Thomas McCabe entwickelte die Zyklomatische Komplexität 1976. Er suchte nach einer Methode, die Komplexität von Software zu messen, um sowohl den Entwicklungsprozess zu verbessern als auch die Software-Qualität sicherzustellen. McCabes Forschung legte den Grundstein für viele der heutigen Softwaremetriken.</p>



<h3 class="wp-block-heading">Vorgehensweise zur Bestimmung der Zyklomatischen Zahl</h3>



<p><strong>Die Bestimmung erfolgt durch die Formel:</strong></p>



<p>V(G)=E−N+2P</p>



<p>wobei:</p>



<ul class="wp-block-list">
<li><em>V</em> Die zyklomatische Komplexität</li>



<li>G Kontrollflussgraph des Programms oder der Funktion, den man analysiert</li>



<li>E Die Anzahl der Kanten im Kontrollflussgraphen</li>



<li>N Die Anzahl der Knoten</li>



<li>P Die Anzahl der verbundenen Komponenten (normalerweise 1 für einen zusammenhängenden Graphen) sind.</li>
</ul>



<h3 class="wp-block-heading">Anwendungsbeispiele</h3>



<p><strong>Qualitätssicherung</strong><em>:</em> Ein hohes Maß an zyklomatischer Komplexität deutet auf einen Code hin, der schwer zu warten und zu testen ist. Ein niedriger Wert hingegen suggeriert einen einfacheren und wartungsfreundlicheren Code.</p>



<p><strong>Software-Testing:</strong> Die Zyklomatische Zahl gibt an, wie viele Testfälle man mindestens benötigt, um jeden Pfad durch den Code einmal auszuführen. Dies erleichtert die Testplanung.</p>



<h3 class="wp-block-heading">Praktische Beispiele</h3>



<p>Bei der Betrachtung des nachfolgenden einfachen Codeausschnitts:</p>



<pre class="wp-block-code"><code><code>def&nbsp;beispiel_funktion(x):&nbsp;if&nbsp;x &gt;&nbsp;10:&nbsp;return&nbsp;"Groß"&nbsp;else:&nbsp;return&nbsp;"Klein"</code></code></pre>



<p>Man stellt fest, dass die zyklomatische Komplexität dieses Codes 2 beträgt, da es zwei Pfade durch den Code gibt: Einmal, wenn die Bedingung wahr ist, und einmal, wenn sie falsch ist.</p>



<p>Ein komplexerer Code mit Schleifen und mehreren Bedingungen hätte entsprechend eine höhere zyklomatische Komplexität.</p>



<h3 class="wp-block-heading">Zyklomatische Komplexität &#8211; Interaktive Visualisierung</h3>



<p><strong>Über die Anwendung:</strong><br>Wie bereits erklärt, handelt es sich bei der zyklomatischen Komplexität um ein Software-Metriken-Indikator, der die Anzahl der linearen unabhängigen Pfade durch den Quellcode eines Programms misst. Sie dient als ein Maß für die Komplexität eines Programms. Diese interaktive Anwendung visualisiert diese Komplexität durch Knoten (entsprechend den Anweisungen/Blöcken in einem möglichen Code) und Verbindungen zwischen ihnen (entsprechend den Pfaden).</p>



<p><strong>So wird die Anwendung verwendet:</strong></p>



<ol class="wp-block-list">
<li><strong>Knoten hinzufügen/entfernen:</strong><br>Die Schaltflächen &#8222;Knoten hinzufügen&#8220; und &#8222;Letzten Knoten entfernen&#8220;, um Knoten zum Diagramm hinzuzufügen bzw. zu entfernen.</li>



<li><strong>Verbindungen erstellen:</strong><br>Klicken auf einen Knoten, um ihn auszuwählen (er wird markiert). Im Anschluss auf einen anderen Knoten klicken, um eine Verbindung zwischen den beiden Knoten herzustellen.</li>



<li><strong>Knoten bewegen:</strong><br>Knoten ziehen, um seine Position im Diagramm zu verändern.</li>



<li><strong>Zyklomatische Komplexität ablesen:</strong><br>Die zyklomatische Komplexität wird unter dem Diagramm angezeigt. Sie aktualisiert sich automatisch basierend auf der Anzahl der Knoten und Verbindungen in dem Diagramm.</li>
</ol>



<p><strong>Hinweis:</strong><br>Die Visualisierung passt sich automatisch an, je nachdem, wie viele Knoten und Verbindungen man hinzufügt. Man kann mit verschiedenen Strukturen experimentieren, um ein besseres Verständnis für die zyklomatische Komplexität und ihre Bedeutung in der Softwareentwicklung zu erhalten.</p>







<h3 class="wp-block-heading">Fazit</h3>



<p>Die Zyklomatische Zahl bietet einen wertvollen Einblick in die Komplexität von Softwarecode. Sie ermöglicht Entwicklern und Testern, den Code besser zu verstehen, die Qualität zu bewerten und den Testaufwand einzuschätzen. Durch das Verständnis und die Anwendung dieses Konzepts können Softwareteams effizienter arbeiten und höherwertige Produkte liefern.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/18/zyklomatische-komplexitaet-messen-verstehen-optimieren/">Zyklomatische Komplexität &#8211; Messen. Verstehen. Optimieren.</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/18/zyklomatische-komplexitaet-messen-verstehen-optimieren/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2832</post-id>	</item>
		<item>
		<title>Entscheidungstabellentest &#8211; Effektivität trifft Präzision</title>
		<link>https://ceosbay.com/2023/10/16/entscheidungstabellentest-effektivitaet-trifft-praezision/</link>
					<comments>https://ceosbay.com/2023/10/16/entscheidungstabellentest-effektivitaet-trifft-praezision/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 16 Oct 2023 18:48:00 +0000</pubDate>
				<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Akzeptanztest]]></category>
		<category><![CDATA[Anforderungsprüfung]]></category>
		<category><![CDATA[Anwendungstest]]></category>
		<category><![CDATA[Black-Box-Test]]></category>
		<category><![CDATA[Boundary-Test]]></category>
		<category><![CDATA[Eingabekombinationen]]></category>
		<category><![CDATA[End-to-End-Test]]></category>
		<category><![CDATA[Entscheidungslogik]]></category>
		<category><![CDATA[Entscheidungsmatrix]]></category>
		<category><![CDATA[Entscheidungstabellentest]]></category>
		<category><![CDATA[Exploratives Testen]]></category>
		<category><![CDATA[Fehlerbericht]]></category>
		<category><![CDATA[Fehleridentifikation]]></category>
		<category><![CDATA[Funktionalitätstest]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[Kontexttest]]></category>
		<category><![CDATA[Lasttest]]></category>
		<category><![CDATA[Modultest]]></category>
		<category><![CDATA[Performancetest]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Regressionsprüfung]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwaretest]]></category>
		<category><![CDATA[Stresstest]]></category>
		<category><![CDATA[Systemtest]]></category>
		<category><![CDATA[Systemverhalten]]></category>
		<category><![CDATA[Szenariotest]]></category>
		<category><![CDATA[Testabdeckung]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testdaten]]></category>
		<category><![CDATA[Testdesign]]></category>
		<category><![CDATA[Testdokumentation]]></category>
		<category><![CDATA[Testfallerstellung]]></category>
		<category><![CDATA[Testmethodik]]></category>
		<category><![CDATA[Testplanung]]></category>
		<category><![CDATA[Testskript]]></category>
		<category><![CDATA[Teststrategie]]></category>
		<category><![CDATA[Testumgebung]]></category>
		<category><![CDATA[Testverfahren]]></category>
		<category><![CDATA[Testwerkzeuge]]></category>
		<category><![CDATA[Testzyklus]]></category>
		<category><![CDATA[Usability-Test]]></category>
		<category><![CDATA[White-Box-Test]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2784</guid>

					<description><![CDATA[<p>Ein effizientes Werkzeug zur Überprüfung der Funktionalität von Software und zur Identifizierung von Testfällen ist der Entscheidungstabellentest. In diesem Blog-Beitrag beschäftige ich mich mit diesem Testverfahren, dessen Ursprüngen, Anwendungen und Vorteilen. Was ist der Entscheidungstabellentest? &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/16/entscheidungstabellentest-effektivitaet-trifft-praezision/">Entscheidungstabellentest &#8211; Effektivität trifft Präzision</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ein effizientes Werkzeug zur Überprüfung der Funktionalität von Software und zur Identifizierung von Testfällen ist der Entscheidungstabellentest. In diesem Blog-Beitrag beschäftige ich mich mit diesem Testverfahren, dessen Ursprüngen, Anwendungen und Vorteilen.</p>



<h3 class="wp-block-heading">Was ist der Entscheidungstabellentest?</h3>



<p>Der Entscheidungstabellentest, auch bekannt als Decision Table Testing, ermöglicht die systematische Überprüfung von Systemverhalten auf Basis unterschiedlicher Eingaben. Hierbei steht die Kombination verschiedener Eingabeparameter und die resultierenden Ausgaben im Fokus.</p>



<h3 class="wp-block-heading">Ursprung des Entscheidungstabellentests</h3>



<p>Die Wurzeln des Entscheidungstabellentests liegen in den 1960er Jahren. Entwickler suchten nach einer Möglichkeit, die Verarbeitungslogik von Informationssystemen zu dokumentieren und zu verifizieren. Sie fanden in den Entscheidungstabellen ein effizientes Mittel, komplexe Geschäftsregeln und Entscheidungslogiken übersichtlich darzustellen.</p>



<h3 class="wp-block-heading">Wie geht man den Entscheidungstabellentest an?</h3>



<ol class="wp-block-list">
<li><strong>Identifikation der Entscheidungsparameter</strong>: Zuerst identifiziert man die relevanten Eingangsparameter und Ausgaben für den zu testenden Prozess oder das System.</li>



<li><strong>Erstellung der Tabelle</strong>: Für jeden Eingangsparameter wird eine Zeile angelegt. Zusätzlich gibt es Zeilen für die jeweiligen Ausgaben. In den Spalten werden verschiedene Kombinationen der Eingaben und die dazugehörigen erwarteten Ausgaben dargestellt.</li>



<li><strong>Ausarbeitung der Testfälle</strong>: Anhand der Tabelle lassen sich Testfälle erstellen, die alle möglichen Kombinationen von Eingaben abdecken.</li>



<li><strong>Testdurchführung</strong>: Jeder Testfall wird nun gegen das System oder den Prozess ausgeführt und die tatsächlichen Ausgaben mit den erwarteten Ergebnissen verglichen.</li>
</ol>



<h3 class="wp-block-heading">Beispiele für den Einsatz vom Entscheidungstabellentest</h3>



<ul class="wp-block-list">
<li><strong>Online-Bestellsysteme</strong>: Bei einem Bestellsystem können verschiedene Parameter wie Artikelverfügbarkeit, Versandoptionen und Zahlungsmethoden kombiniert werden, um verschiedene Szenarien zu testen.</li>



<li><strong>Kreditsysteme in Banken</strong>: Banken können Entscheidungstabellen nutzen, um verschiedene Kreditantrags-Szenarien durchzuspielen, z.B. bei unterschiedlichen Einkommen, Kreditbeträgen oder Laufzeiten.</li>



<li><strong>Heizungssysteme</strong>: Bei der Entwicklung von intelligenten Heizungssystemen können unterschiedliche Temperatureinstellungen, Uhrzeiten und Modi kombiniert werden, um das Verhalten des Systems unter verschiedenen Bedingungen zu testen.</li>
</ul>



<h3 class="wp-block-heading">Genereller Überblick über die Struktur</h3>



<ol class="wp-block-list">
<li><strong>Eingangsbedingungen (oben links)</strong>: Dieser Bereich listet alle möglichen Eingabebedingungen oder -parameter auf.</li>



<li><strong>Ausgabehandlungen (unten links)</strong>: Hier werden die möglichen Ausgaben oder Aktionen des Systems aufgeführt.</li>



<li><strong>Entscheidungsregeln (oben rechts)</strong>: In diesem Abschnitt werden verschiedene Kombinationen der Eingabebedingungen aufgeführt. Jede Spalte repräsentiert einen Testfall.</li>



<li><strong>Ergebnisse der Entscheidungsregeln (unten rechts)</strong>: Hier werden die erwarteten Ausgaben für jede Regelkombination dargestellt.</li>
</ol>



<h4 class="wp-block-heading">Beispiel: Einfaches Online-Bestellsystem</h4>



<p>Angenommen, wir haben ein einfaches Bestellsystem, in dem die Kunden entweder per Kreditkarte oder PayPal bezahlen können und es gibt eine Überprüfung, ob der Artikel vorrätig ist.</p>



<figure class="wp-block-table"><table><thead><tr><th><strong>Eingangsbedingungen/Ausgabehandlungen</strong></th><th><strong>Regel 1</strong></th><th><strong>Regel 2</strong></th><th><strong>Regel 3</strong></th><th><strong>Regel 4</strong></th></tr></thead><tbody><tr><td>Artikel verfügbar?</td><td>Ja</td><td>Ja</td><td>Nein</td><td>Nein</td></tr><tr><td>Zahlungsmethode = Kreditkarte?</td><td>Ja</td><td>Nein</td><td>Ja</td><td>Nein</td></tr></tbody></table></figure>



<figure class="wp-block-table"><table><thead><tr><th>Zahlungsmethode = PayPal?</th><th>Nein</th><th>Ja</th><th>Nein</th><th>Ja</th></tr></thead><tbody><tr><td>Bestellung akzeptieren?</td><td>Ja</td><td>Ja</td><td>Nein</td><td>Nein</td></tr><tr><td>Hinweis &#8222;Artikel nicht verfügbar&#8220; anzeigen?</td><td>Nein</td><td>Nein</td><td>Ja</td><td>Ja</td></tr></tbody></table></figure>



<p>Für <strong>Regel 1</strong> ist der Artikel verfügbar, und die Zahlung erfolgt per Kreditkarte. Für die Bestellung erfolgt die Akzeptanz und es gibt keinen Hinweis zur Nichtverfügbarkeit des Artikels. Bei <strong>Regel 3</strong> ist der Artikel jedoch nicht verfügbar, und es spielt keine Rolle, welche Zahlungsmethode der User gewählt hat: Die Bestellung ist inakzeptabel und es erfolgt der Hinweis auf Nichtverfügbarkeit.</p>



<p>Auf diese Weise kann man verschiedene Kombinationen von Eingabeparametern testen und die erwarteten Ausgaben systematisch darstellen.</p>



<h3 class="wp-block-heading">Konkrete Anwendung in der Praxis</h3>



<p>Die vorherige Erklärung bietet einen generellen Überblick über die Struktur einer Entscheidungstabelle. Für eine konkrete Anwendung in der Praxis muss man oft spezifischere Details berücksichtigen. Nachfolgend ein detaillierteres Beispiel, um das Konzept besser zu illustrieren.</p>



<h4 class="wp-block-heading">Rabattsystem eines Online-Shops</h4>



<p>Ein Online-Shop bietet seinen Kunden Rabatte an, die auf der Gesamtmenge der gekauften Artikel und dem Kundenstatus basieren.</p>



<h4 class="wp-block-heading">Regeln:</h4>



<ol class="wp-block-list">
<li>Standardkunden erhalten bei einer Bestellung von mehr als 10 Artikeln einen Rabatt von 5%.</li>



<li>Premiumkunden erhalten immer einen Rabatt von 5%.</li>



<li>Bei einer Bestellung von mehr als 20 Artikeln erhalten alle Kunden einen Rabatt von 10%.</li>
</ol>



<h4 class="wp-block-heading">Entscheidungstabelle:</h4>



<figure class="wp-block-table"><table><thead><tr><th><strong>Eingangsbedingungen/Ausgabehandlungen</strong></th><th><strong>Regel 1</strong></th><th><strong>Regel 2</strong></th><th><strong>Regel 3</strong></th><th><strong>Regel 4</strong></th></tr></thead><tbody><tr><td>Anzahl der Artikel &gt; 10?</td><td>Ja</td><td>Ja</td><td>Nein</td><td>Nein</td></tr><tr><td>Anzahl der Artikel &gt; 20?</td><td>Nein</td><td>Ja</td><td>Nein</td><td>Nein</td></tr></tbody></table></figure>



<figure class="wp-block-table"><table><thead><tr><th>Kundenstatus = Premium?</th><th>Ja</th><th>Ja</th><th>Ja</th><th>Nein</th></tr></thead><tbody><tr><td>Rabatt = 5%?</td><td>Ja</td><td>Nein</td><td>Ja</td><td>Nein</td></tr><tr><td>Rabatt = 10%?</td><td>Nein</td><td>Ja</td><td>Nein</td><td>Nein</td></tr><tr><td>Kein Rabatt?</td><td>Nein</td><td>Nein</td><td>Nein</td><td>Ja</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">In dieser Tabelle:</h4>



<ul class="wp-block-list">
<li><strong>Regel 1</strong> repräsentiert einen Premiumkunden, der 11-20 Artikel kauft. Dieser erhält einen Rabatt von 5%.</li>



<li><strong>Regel 2</strong> repräsentiert einen Premiumkunden, der mehr als 20 Artikel kauft. Dieser erhält einen Rabatt von 10% (da der 5%-Rabatt für Premiumkunden in diesem Fall vom höheren Mengenrabatt überschrieben wird).</li>



<li><strong>Regel 3</strong> repräsentiert einen Premiumkunden, der 10 oder weniger Artikel kauft. Dieser erhält den standardmäßigen 5%-Rabatt für Premiumkunden.</li>



<li><strong>Regel 4</strong> repräsentiert einen Standardkunden, der 10 oder weniger Artikel kauft. Dieser erhält keinen Rabatt.</li>
</ul>



<p>Durch die Entscheidungstabelle stellt man klar, welchen Rabatt man unter welchen Bedingungen gewährt. Sie bietet einen systematischen Ansatz, um sicherzustellen, dass man alle Kombinationen von Bedingungen testet.</p>



<h4 class="wp-block-heading">In der nachfolgenden Tabelle gilt es, die möglichen Testfälle für alle Aktionen zu ermitteln:</h4>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">Bedingungen:</th><th>I</th><th>II</th><th>III</th><th>IV</th><th>V</th><th>VI</th><th>VII</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><strong>Bedingung A</strong></td><td>x</td><td>x</td><td>x</td><td>x</td><td></td><td></td><td></td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Bedingung B</strong></td><td>x</td><td>x</td><td></td><td></td><td>x</td><td>x</td><td></td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Bedingung C</strong></td><td>x</td><td></td><td>x</td><td></td><td>x</td><td></td><td>x</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Aktionen:</strong></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Aktion 1</strong></td><td></td><td></td><td></td><td></td><td></td><td>x</td><td></td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Aktion 2</strong></td><td></td><td>x</td><td></td><td>x</td><td></td><td></td><td></td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Aktion 3</strong></td><td>x</td><td></td><td>x</td><td></td><td>x</td><td></td><td>x</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Aktion 4</strong></td><td></td><td></td><td></td><td></td><td></td><td>x</td><td></td></tr></tbody></table></figure>



<p>Zur Ermittlung der Anzahl von Testfällen, die alle Aktionen abdecken, wird die Tabelle analysiert:</p>



<ul class="wp-block-list">
<li><strong>Aktion 1</strong> wird in Spalte VI abgedeckt.</li>



<li><strong>Aktion 2</strong> wird in den Spalten II und IV abgedeckt.</li>



<li><strong>Aktion 3</strong> wird in den Spalten I, III, V und VII abgedeckt.</li>



<li><strong>Aktion 4</strong> wird ebenfalls in Spalte VI abgedeckt.</li>
</ul>



<p>Durch Analyse der Tabelle ergeben sich die folgenden Testfälle:</p>



<ol class="wp-block-list">
<li>Spalte I deckt Aktion 3 ab.</li>



<li>Spalte II deckt Aktion 2 ab.</li>



<li>Spalte VI deckt Aktion 1, Aktion 3 und Aktion 4 ab.</li>
</ol>



<p>Insgesamt werden 3 Testfälle benötigt, um alle Aktionen abzudecken.</p>



<h3 class="wp-block-heading">Welche Software kann man dafür nutzen?</h3>



<p>Für den Entscheidungstabellentest und andere Softwaretest-Aktivitäten gibt es eine Reihe von Werkzeugen, die auf dem Markt verfügbar sind. Die Wahl des besten Tools hängt von den spezifischen Anforderungen, dem Budget und der Komplexität des Projekts ab. Hier sind einige der populären Werkzeuge, die in der Softwaretest-Community weit verbreitet sind:</p>



<ol class="wp-block-list">
<li><strong>JIRA + Zephyr</strong>: Atlassian&#8217;s JIRA, in Kombination mit dem Zephyr-Plugin, bietet eine umfassende Testmanagement-Lösung, die es Teams ermöglicht, Testfälle zu erstellen, zu verwalten und Berichte zu erstellen.</li>



<li><strong>TestRail</strong>: Ein beliebtes Testmanagement-Tool, das nahtlose Integrationen mit anderen gängigen Tools wie JIRA, Selenium und mehr bietet.</li>



<li><strong>Selenium</strong>: Ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Tool für automatisierte Webanwendungstests. Es ist nicht speziell für den Entscheidungstabellentest entwickelt, man kann es aber zum Automatisieren von Testfällen verwenden, die man aus der Entscheidungstabelle ableitet.</li>



<li><strong>HP Quality Center (jetzt Teil von Micro Focus)</strong>: Ein umfassendes Testmanagement-Tool, das das Erstellen, Verwalten und Ausführen von Testfällen unterstützt.</li>



<li><strong>QTest</strong>: Eine moderne Testmanagement-Plattform, die Agile-Teams bei der Planung, Verfolgung und Ausführung von Testfällen unterstützt.</li>



<li><strong>SpecFlow</strong>: Ein <a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/">Behavior-Driven Development</a> (<a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/">BDD</a>) Tool, das man in Kombination mit der Gherkin-Syntax verwendet. Es kann zur Definition von Szenarien basierend auf Entscheidungstabellen und zur Automatisierung dieser Szenarien eingesetzt werden.</li>



<li><strong>Confluence</strong>: Auch wenn es primär ein Team-Kollaborations-Werkzeug ist, nutzen einige Teams Confluence, um Entscheidungstabellen zu erstellen und zu verwalten.</li>



<li><strong>Excel oder Google Sheets</strong>: Man kann auch einfache Tabellenkalkulationsprogramme verwenden, um Entscheidungstabellen zu entwerfen und zu verwalten. Sie bieten Flexibilität, sind aber nicht speziell für das Testen entwickelt.</li>
</ol>



<p>Es gibt viele weitere spezialisierte Tools auf dem Markt. Die Wahl hängt letztlich von den spezifischen Bedürfnissen des Testteams und den vorhandenen Technologie-Stacks ab. Es empfiehlt sich, eine gründliche Bewertung durchzuführen und möglicherweise einige Demos oder Testversionen auszuprobieren, bevor man sich für ein bestimmtes Tool entscheidet.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Der Entscheidungstabellentest bietet eine strukturierte und systematische Methode, um komplexe Systeme oder Prozesse zu testen. Durch die umfassende Berücksichtigung aller möglichen Kombinationen von Eingaben gewährleistet dieser Test eine hohe Abdeckung und ermöglicht eine qualitativ hochwertige Qualitätssicherung.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/16/entscheidungstabellentest-effektivitaet-trifft-praezision/">Entscheidungstabellentest &#8211; Effektivität trifft Präzision</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/16/entscheidungstabellentest-effektivitaet-trifft-praezision/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2784</post-id>	</item>
		<item>
		<title>Unit Tests &#8211; Fundament für stabile und effiziente Software</title>
		<link>https://ceosbay.com/2023/03/26/erklaerung-unit-tests/</link>
					<comments>https://ceosbay.com/2023/03/26/erklaerung-unit-tests/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 26 Mar 2023 17:50:20 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Algorithmen]]></category>
		<category><![CDATA[Algorithmus]]></category>
		<category><![CDATA[Anwendung]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Auto]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Baustein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Codebasis]]></category>
		<category><![CDATA[Contract]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Driven]]></category>
		<category><![CDATA[Entwickler]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Jacoco]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Kompilierung]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Komponententest]]></category>
		<category><![CDATA[Lauffähigkeit]]></category>
		<category><![CDATA[Modul]]></category>
		<category><![CDATA[Modultest]]></category>
		<category><![CDATA[Nachteil]]></category>
		<category><![CDATA[Nachteile]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Produkt]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testarten]]></category>
		<category><![CDATA[Teststufe]]></category>
		<category><![CDATA[Unit]]></category>
		<category><![CDATA[Unittests]]></category>
		<category><![CDATA[Vertrag]]></category>
		<category><![CDATA[Vorteil]]></category>
		<category><![CDATA[Vorteile]]></category>
		<category><![CDATA[Weise]]></category>
		<category><![CDATA[Zehnerregel]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1246</guid>

					<description><![CDATA[<p>Ein Unit Test, auch Modul- oder Komponententest bezeichnet, ist ein Test, mit dem man in der Architektur eines Systems einzelne, abgrenzbare Teile (z. B. ausgewählte Codeabschnitte, Module, Unterprogramme, Units oder im Fall objektorientierter Programmierung als &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/26/erklaerung-unit-tests/">Unit Tests &#8211; Fundament für stabile und effiziente Software</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ein Unit Test, auch Modul- oder Komponententest bezeichnet, ist ein Test, mit dem man in der Architektur eines Systems einzelne, abgrenzbare Teile (z. B. ausgewählte Codeabschnitte, Module, Unterprogramme, Units oder im Fall objektorientierter Programmierung als Klassen), meist auf niedrigster Ebene überprüft. Ziel dieser häufig durch den Softwareentwickler selbst durchgeführten Softwaretests ist, deren technische Lauffähigkeit und die Korrektheit ihrer fachlichen (Teil-)Ergebnisse nachzuweisen.</p>



<p>Man verwendet den Ausdruck Modultest unter anderem bei frühen Teststufen, in denen man die inneren, detailliertesten Komponenten der Software testet. Gemäß Software Validation &amp; Verification Plan sind diese Tests nur für Module mit geringer Kritikalität nicht notwendig. Im Grunde genommen bei Fehlern, die dem User nur geringfügige Unannehmlichkeiten bereiten.</p>



<p>In einer Abstraktion der verwendeten Programmiersprache, spricht man von Komponente oder Softwarebaustein. Den Test eines solchen einzelnen Softwarebausteins bezeichnet man auch allgemeiner als Komponententest.</p>



<p>Als Testbasis kann man in der Regel die komponentenspezifische Anforderung und das Softwaredesign der Komponente (auch Komponentenspezifikation genannt) heranziehen. Für Whitebox-Testfälle oder um Aussagen zur Codeüberdeckung zu erhalten, kann man zusätzlich den Sourcecode einer Komponente analysieren und diesen als Testbasis verwenden. Wobei dabei auch Tools wie <a href="https://ceosbay.com/2023/03/25/erklaerung-jacoco/" target="_blank" rel="noreferrer noopener">Jacoco</a> helfen können. Ob die Komponente auf einen Testfall richtig reagiert, muss man allerdings auch hier auf Basis der Design- und Anforderungsdokumente beurteilen.</p>



<p>Typische Testobjekte sind wie bereits beschrieben Programmunits, -Module bzw. Klassen. Aber auch Kommandozeilenskripte des Betriebssystems (Shell-Skripte), Datenbankskripte, Datenkonvertierungs- oder Migrationsprozeduren, Datenbankinhalte sowie Konfigurationsdaten können Testobjekte sein. Kennzeichnend ist in der Regel der isolierte Test eines einzelnen Softwarebausteins. Dies dient primär, um komponentenexterne Einflüsse beim Testen auszuschließen. Alle so ermittelten Fehler kann man so dem spezifischen Modul zuordnen.</p>



<p>Klar zu unterscheiden ist auf jeden Fall der Integrationstest, den ich in einem separaten Beitrag thematisiere. Bei einem Integrationstest konzentriert man sich auf die Wechselwirkung mit Nachbarkomponenten.</p>



<p>Die Erstellung solcher Tests ist in der Regel die Aufgabe eines Programmierers. Dies liegt zum einen daran, dass man ein ausgeprägtes Verständnis für die Programmiersprache in der die Anwendung geschrieben ist haben muss. Und zum anderen daran, dass man meist auch einen Testtreiber benötigt, dessen Programmierung in der Regel auch der Entwickler übernimmt.</p>



<h3 class="wp-block-heading">Einordnung im Testprozess</h3>



<p>Algorithmen auf Unitebene besitzen meist nur eine begrenzte Komplexität und man kann sie über klar definierte Schnittstellen aktivieren. Daher kann sie mit relativ wenigen Testfällen weitgehend vollständig testen. Dies gilt als Voraussetzung für die anschließende Teststufe. Dem Integrationstest, um dort die Testfälle auf das integrierte Zusammenwirken größerer Funktionsteile oder der gesamten Anwendung ausrichten zu können. Die modulspezifischen Detailkonstellationen lassen sich damit auf Stichproben beschränken, was die Anzahl der erforderlichen Testfälle signifikant reduziert.</p>



<p>Zum Vergleich: Ein Gerät wird erst dann als Ganzes getestet, wenn die Funktionsfähigkeit seiner Einzelteile gesichert ist.</p>



<h3 class="wp-block-heading">Test des Vertrages und nicht der Algorithmen</h3>



<p>Man testet bei Modultests gemäß dem Design-by-contract-Prinzip möglichst nicht die Interna einer Methode, sondern nur ihre externen Auswirkungen (Rückgabewerte, Ausgaben, Zustandsänderungen, Zusicherungen). Sind die internen Details der Methode geprüft (dies wird als White-Box-Testing bezeichnet), kann der Test fehlschlagen, obwohl sich die externen Auswirkungen nicht geändert haben. Daher empfiehlt man in der Regel das sogenannte Black-Box-Testing, bei dem man sich auf das Prüfen der externen Auswirkungen beschränkt.</p>



<h3 class="wp-block-heading">Was sind die Vorteile von Unit Tests?</h3>



<ul class="wp-block-list">
<li>Mittels automatisierter Unittests kann man im Schnitt 30 % der Fehler erkennen. Bei der Verwendung von <a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">TDD</a> (<a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/">Test Driven Development</a>) kann man im Schnitt 45 % und im besten Fall 85 % der Fehler vermeiden.</li>



<li>Fehler erkennt man durch Modultests bereits während der Entwicklung. Die durch Unittests vermiedenen Fehlerkosten sind daher gemäß der Rule of Ten (Dazu später mehr) um ein Vielfaches höher als bei späteren Teststufen, was Unittests zur effizientesten Teststufe machen.</li>



<li>Im Falle eines Fehlers kann man diesen sehr viel genauer eingrenzen und damit schneller finden und beheben.</li>



<li>Die Tests erfüllen den Zweck einer lebenden Dokumentation. In Kombination mit einer sinnvollen Benamung der Objekte (Clean Code) können zusätzliche Dokumentationsmaßnahmen entfallen.</li>



<li>Da einzelne Module nur wenige mögliche Codeausführungspfade besitzen, muss man viel weniger mögliche kombinatorische Ausführungspfade berücksichtigen als bei anderen Testarten. Bei übergeordneten Tests kann man sich dann stichprobenartig auf die wichtigsten Ausführungspfade konzentrieren und damit die Anzahl dieser Tests deutlich reduzieren.</li>



<li>Da man nur einzelne Module testet, kann man Modultests, oft um mehrere Größenordnungen, schneller und damit öfter (bzw. kontinuierlich) ausführen als andere Testarten.</li>



<li>Wenn man Fehler mit einem Test absichert, kann man den erneuten Auftritt des gleichen Fehlers verhindern.</li>



<li>Durch die Fehlerreduktion ergeben sich Geschwindigkeitsvorteile in der Entwicklung in mittleren bis großen Softwareprojekten.</li>



<li>Da man Abhängigkeiten zwingend vermeiden muss, um einen Modultest zu ermöglichen, bleibt der Code verhältnismäßig schnell änderbar. Hierdurch kann man schneller auf wechselnde Anforderungen reagieren. Siehe <a href="https://ceosbay.com/2023/03/20/erklaerung-das-agile-manifest/" target="_blank" rel="noreferrer noopener">Agile Manifest</a> 😉</li>



<li>Da automatisch ausgeführte Tests um mehrere Größenordnungen schneller sind als manuelle Tests, reduziert sich der Zeitaufwand für das Testen deutlich. Hierdurch kann man die Entwicklungsstufen schneller durchlaufen und die Release-Zyklen signifikant verkürzen.</li>
</ul>



<h3 class="wp-block-heading">Was sind die Nachteile von Unit Tests?</h3>



<ul class="wp-block-list">
<li>Bei der Implementierung neuer Funktionen muss man nicht nur die Funktion implementieren, sondern auch die dazugehörenden Tests vorbereiten bzw. definieren. Dadurch ergibt sich ein oft mehrfacher Implementierungsaufwand.</li>



<li>Bei Änderungen muss man nicht nur die geänderten Funktionen, sondern auch die dazugehörenden Tests anpassen. Insbesondere bei der Entwicklung von Prototypen, bei der sich die Codebasis schnell verändert, ist das Testen daher oft eher ein Hindernis.</li>



<li>Da man die Funktionalität der Tests verwendet, ist in den IDEs schwerer ersichtlich, ob eine Funktionalität keine Verwendung mehr findet und ob man es daher entfernen kann.</li>



<li>Weisen die Tests untereinander Abhängigkeiten auf (z. B. durch gemeinsame Testdaten), so können einzelne Änderungen an der Codebasis eine Vielzahl von Tests beeinflussen, was den Änderungsaufwand mit der Größe der Codebasis exponentiell erhöht.</li>
</ul>



<h3 class="wp-block-heading">Fehlerkosten 10er Regel (Rule of ten)</h3>



<p>Die Zehnerregel der Fehlerkosten besagt, dass je weiter ein Fehler sich unentdeckt in die späten Phasen des Werdegangs eines Produktes oder Prozesses bewegt – oder gar bis zum Kunden –, desto höher steigen die Kosten zur Behebung des Fehlers. Eindrucksvoll untermauert durch die Ergebnisse einiger Studien aus den 70er Jahren in Japan, USA und Großbritannien, die sich mit den Ursachen von Produkt- bzw. Qualitätsmängeln beschäftigten. Alle Analysen lieferten nahezu die gleichen Ergebnisse: Ca. 70 % aller Produktmängel hatten ihre Ursache bereits in der Entwicklung, Konstruktion und Arbeitsvorbereitung. Der Herstellungsprozess selbst hat bezüglich der Endqualität des Produktes offensichtlich eher einen sekundären Einfluss. Eine VDMA-Studie zum Thema „Qualitätsbezogene Kosten“ Anfang der 90er Jahre in der Bundesrepublik Deutschland bestätigt dieses Ergebnis.</p>



<p>Die Zehnerregel der Fehlerkosten oder „Rule of ten“ sagt aus, dass sich die Fehlerkosten für einen nicht entdeckten Fehler von Stufe zu Stufe der Wertschöpfung um den Faktor 10 erhöhen. Je früher ein Fehler entdeckt und beseitigt wird, desto kostengünstiger ist dies für die Organisation und schlussendlich auch für den User bzw. Kunden.</p>



<p>Ansonsten sind diese auch in der DIN 55350-11 im Rahmen des Qualitätsmanagements festgehalten. Doch darauf gehe ich in einem separaten Beitrag ein.</p>



<h3 class="wp-block-heading">Wo sind die Grenzen der Unit Tests?</h3>



<p>Unit Tests können (wie jeder Test) die Fehlerfreiheit der getesteten Units, Module usw. nicht garantieren oder nachweisen, sondern lediglich unterstützen. Die Grenzen von Unit Tests liegen primär nur in den Fällen vor in denen man Fehler finden kann, zu deren Entdeckung die verwendeten Tests geeignet sind. Eine Softwarekomponente, die „grün“ testet, ist also nur bedingt fehlerfrei.</p>



<p>Das Merkmal von Code, „grün“ zu testen, und durchaus auch der Wunsch nach diesem Ergebnis, kann dazu führen, dass man tatsächlich (unbewusst) nur so viel testet, bis alle Tests „grün“ sind. Module, die keine fehlschlagenden Modultests haben, als fehlerfrei zu behandeln, ist ein Fehlschluss in der Praxis des (<a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">TDD</a>) <a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">Test Driven Development</a>.</p>



<p>Um eine ausreichende Testabdeckung zu erzielen, lohnt es sich u.U., vor dem Erstellen der Testfälle Refactoring-Maßnahmen anzuwenden. Dies erst nach abgeschlossenen Unit Tests (für den alten Code) zu tun, schafft Raum (wie jede Änderung im Code) für neue Fehlerrisiken und kann deshalb wiederholtes Testen erforderlich machen.</p>



<p>Wenn der Autor von Unit Tests mit dem Autor der Module identisch ist, können Denkfehler in der Implementierung auch im Test erscheinen und verpasst gegebenenfalls die Chance, diese aufzudecken. Wenn es sich um dieselbe Person handelt, kann man die vorrangige Entwicklung der Tests ebenfalls nicht garantieren, da sowohl die beabsichtigte Funktionsweise des Codes als auch die zukünftige Gestalt bereits im Gedankengut des Testautors und späteren Codeautors präsent sein können. Dies kann im Extreme Programming durch „Test Ping-Pong“ abgefangen werden, bei der sich Entwickler bei der Implementierung der Funktionalität und der Tests abwechseln.</p>



<p>Bei der Entwicklung von Modultests können Testfälle entstehen, die der Zielsetzung und dem Charakter von Modultests nicht oder nur zum Teil entsprechen. Wie bei der Programmierung existieren daher auch für die Entwicklung von Modultests Anti-Pattern, die man möglichst vermeiden sollte.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/26/erklaerung-unit-tests/">Unit Tests &#8211; Fundament für stabile und effiziente Software</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/26/erklaerung-unit-tests/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1246</post-id>	</item>
	</channel>
</rss>
