<?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>tests Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/tests/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/tests/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Sun, 16 Apr 2023 07:59:07 +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>tests Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/tests/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Refactoring &#8211; Optimierung und Evolution für nachhaltigen Code</title>
		<link>https://ceosbay.com/2023/04/10/erklaerung-refactoring/</link>
					<comments>https://ceosbay.com/2023/04/10/erklaerung-refactoring/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 10 Apr 2023 09:15:17 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Aufwand]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[Funktionalität]]></category>
		<category><![CDATA[HAL]]></category>
		<category><![CDATA[Inkonsistenz]]></category>
		<category><![CDATA[Inkonsistenzen]]></category>
		<category><![CDATA[Komplex]]></category>
		<category><![CDATA[Komplexität]]></category>
		<category><![CDATA[Lesbarkeit]]></category>
		<category><![CDATA[Modular]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Optimal]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Praktisch]]></category>
		<category><![CDATA[Praxis]]></category>
		<category><![CDATA[Probleme]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Qualitätsstandards]]></category>
		<category><![CDATA[Refactor]]></category>
		<category><![CDATA[Schulden]]></category>
		<category><![CDATA[Sicherstellen]]></category>
		<category><![CDATA[Smell]]></category>
		<category><![CDATA[Smells]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[Verstand]]></category>
		<category><![CDATA[Verstehen]]></category>
		<category><![CDATA[Wartbarkeit]]></category>
		<category><![CDATA[Websiteentwicklung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1357</guid>

					<description><![CDATA[<p>Refactoring ist eine kontinuierliche Praxis im Softwareentwicklungsprozess, die es ermöglicht, die Struktur und Lesbarkeit des Codes zu verbessern, ohne dessen Funktionalität zu verändern. Dieser Prozess ermöglicht es, den Code sauber, wartbar und skalierbar zu halten. &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/10/erklaerung-refactoring/">Refactoring &#8211; Optimierung und Evolution für nachhaltigen Code</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Refactoring ist eine kontinuierliche Praxis im Softwareentwicklungsprozess, die es ermöglicht, die Struktur und Lesbarkeit des Codes zu verbessern, ohne dessen Funktionalität zu verändern. Dieser Prozess ermöglicht es, den Code sauber, wartbar und skalierbar zu halten.</p>



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



<p>Der Begriff wurde zum ersten Mal in einer Arbeit von Ralph Johnson und William Opdyke 1990 gebraucht (Refactoring: An aid in designing application frameworks and evolving object-oriented systems. In: Proceedings of Symposion on Object-Oriented Programming Emphasizing Practical Applications (SOOPPA), September 1990). Opdyke promovierte 1992 zu dem Thema. Sie entwickelten die Idee einer Software-Refactory, die das Umgestalten (eben das Refactoring) von Computerprogrammen erleichtern sollte. Die unzutreffende Übersetzung Refaktorisierung stammt aus einer Verwechslung mit einer häufig zitierten Analogie, die ursprünglich nicht Begriffsinhalt war: Refactoring ist eine Art, ein Programm so zu modifizieren, dass man verborgene Strukturen offenlegt, ohne die Funktionalität zu ändern. Dies, so der (fälschliche) Analogieschluss, entspreche dem Vorgehen der Faktorisierung von Polynomen in der Mathematik. Bin aber kein Mathematiker 😉</p>



<h3 class="wp-block-heading">Warum ist Refactoring wichtig?</h3>



<ul class="wp-block-list">
<li><strong>Verbesserung der Code-Lesbarkeit</strong>: Lesbarkeit ist entscheidend, um den Code effizient zu warten und zu erweitern. Durch das Refactoring können Entwickler den Code vereinfachen, Duplikate entfernen und konsistente Benennungen und Formatierungen verwenden, um die Lesbarkeit zu verbessern.</li>



<li><strong>Reduzierung der technischen Schulden</strong>: Technische Schulden entstehen, wenn man die Software in Eile entwickelt, ohne auf Qualitätsstandards zu achten. Sie führen oft zu schwer zu wartendem und unzuverlässigem Code. Es hilft, technische Schulden zu reduzieren und verhindert, dass sie sich im Laufe der Zeit anhäufen.</li>



<li><strong>Optimierung der Code-Wartbarkeit</strong>: Refactoring hilft dabei, den Code modular und gut strukturiert zu halten, was die Wartung und Fehlerbehebung erleichtern kann.</li>



<li><strong>Verbesserung der Code-Performance</strong>: Durch das Entfernen von unnötigem Code und die Optimierung von Algorithmen kann Refactoring dazu beitragen, die Performance der Software zu steigern.</li>



<li><strong>Erleichterung der Teamarbeit</strong>: Ein sauberer und gut strukturierter Code ist leichter zu verstehen und ermöglicht eine effektivere Zusammenarbeit zwischen Entwicklern.</li>
</ul>



<h3 class="wp-block-heading">Strategien für effektives Refactoring</h3>



<ul class="wp-block-list">
<li><strong>Code Smells identifizieren</strong>: &#8222;Code Smells&#8220; sind Anzeichen dafür, dass man den Code möglicherweise verbessern muss. Beispiele sind lange Methoden, große Klassen, doppelter Code und unklare Benennungen. Entwickler sollten diese Anzeichen erkennen und entsprechende Maßnahmen ergreifen, um den Code zu verbessern.</li>



<li><strong>Schrittweise Verbesserungen vornehmen</strong>: Refactoring sollte schrittweise erfolgen, um den Code schrittweise zu verbessern und gleichzeitig die Funktionalität intakt zu halten.</li>



<li><strong>Automatisierte Tests verwenden</strong>: Um sicherzustellen, dass die Funktionalität nach dem Refactoring unverändert bleibt, ist es entscheidend, automatisierte Tests zu verwenden. Dies stellt sicher, dass Änderungen am Code keine unerwünschten Nebenwirkungen verursachen.</li>



<li><strong>Konsistente Coding-Standards einhalten</strong>: Ein konsistenter Codierungsstil erleichtert das Lesen und Verstehen des Codes. Es ist wichtig, dass das gesamte Team die gleichen Standards einhält, um Inkonsistenzen zu vermeiden.</li>



<li><strong>Regelmäßiges Refactoring betreiben</strong>: Man Refactoring als fortlaufenden Prozess betrachten, der in die tägliche Arbeit eines Entwicklers integriert ist. Regelmäßiges Refactoring hilft dabei, den Code kontinuierlich sauber und auf dem neuesten Stand zu halten, wodurch man die langfristige Wartbarkeit der Software verbessern kann. Außerdem hilft es dabei, den Code zu besser verstehen und tiefere Erkenntnisse über das Programmieren selbst zu erhalten.</li>
</ul>



<h3 class="wp-block-heading">Beliebte Refactoring-Techniken</h3>



<ol class="wp-block-list" type="1">
<li><strong>Extract Method</strong>: Wenn eine Methode zu lang oder zu komplex ist, kann sie in kleinere, gut definierte Methoden aufgeteilt werden, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.</li>



<li><strong>Rename Variable/Method/Class</strong>: Durch das Umbenennen von Variablen, Methoden und Klassen in klarere und aussagekräftigere Namen kann man den Code verständlicher und leichter pflegbar machen.</li>



<li><strong>Remove Duplication</strong>: Duplikate im Code können Wartungsprobleme verursachen und man sollte sie entfernen. Bei der Erkennung von Duplikaten können Entwickler allgemeine Funktionen extrahieren und wiederverwenden, um den Code zu straffen.</li>



<li><strong>Replace Conditional with Polymorphism</strong>: Anstatt mehrere bedingte Anweisungen zu verwenden, kann man Polymorphismus eingesetzen, um den Code besser zu strukturieren und die Lesbarkeit zu erhöhen.</li>



<li><strong>Encapsulate Field</strong>: Durch das Kapseln von Feldern in Klassen und die Bereitstellung von Zugriffs- und Mutationsmethoden kann man den Code modularer und besser wartbar machen.</li>
</ol>



<h3 class="wp-block-heading">Tools und Programme</h3>



<p>Es gibt eine Vielzahl von Tools und Programmen, die Entwicklern beim Refactoring helfen. Nachfolgend sind einige der gängigsten Tools für verschiedene Programmiersprachen (Einige davon habe ich bereits in diversen Beiträgen thematisiert. Hierzu einfach auf die jeweiligen Verlinkungen klicken oder die Suchfunktion verwenden 😉 ):</p>



<p>Integrated Development Environments (IDEs): Viele moderne IDEs bieten integrierte Refactoring-Unterstützung für verschiedene Programmiersprachen an. Einige der bekanntesten sind:</p>



<p>a. <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">JetBrains IntelliJ IDEA</a> (<a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>, Kotlin, Scala, u.a.)</p>



<p>b. JetBrains PhpStorm (PHP)</p>



<p>c. JetBrains PyCharm (<a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a>)</p>



<p>d. JetBrains ReSharper (C# in Visual Studio)</p>



<p>e. Microsoft Visual Studio (C#, C++, VB.NET)</p>



<p>f. <a href="https://ceosbay.com/2023/03/19/erklaerung-eclipse/" target="_blank" rel="noreferrer noopener">Eclipse</a> (<a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>)</p>



<p>g. Xcode (Swift, Objective-C)</p>



<p>Standalone-Tools: Es gibt auch eigenständige Refactoring-Tools, die man unabhängig von der IDE verwenden kann. Einige Beispiele sind:</p>



<p>a. JDeodorant (<a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>)</p>



<p>b. SonarLint und SonarQube (<a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>, <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, TypeScript, u.a.)</p>



<p>c. JSLint und ESLint (<a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>)</p>



<p>d. RuboCop (<a href="https://ceosbay.com/2022/12/19/erklaerung-ruby/" target="_blank" rel="noreferrer noopener">Ruby</a>)</p>



<p>e. Clang-Tidy (C++, Objective-C)</p>



<p>Code-Editor-Erweiterungen: Viele Code-Editoren, wie Visual Studio Code und Sublime Text, verfügen über Erweiterungen, die Refactoring-Unterstützung für verschiedene Programmiersprachen bieten. Einige dieser Erweiterungen sind:</p>



<p>a. Visual Studio Code Refactoring Extensions (z.B. <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a>, <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, TypeScript, PHP, <a href="https://ceosbay.com/2022/12/19/erklaerung-ruby/" target="_blank" rel="noreferrer noopener">Ruby</a>, C#)</p>



<p>b. Sublime Text Refactoring Plugins (z.B. Anaconda für <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a>, JsPrettier für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>)</p>



<p>Es ist wichtig zu beachten, dass jedes Tool seine eigenen Stärken und Schwächen hat. Ein Entwickler sollte die verfügbaren Optionen für seine Programmiersprache und seinen Arbeitsablauf sorgfältig prüfen, um das am besten geeignete Refactoring-Tool zu finden.</p>



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



<p>Refactoring ist ein wesentlicher Bestandteil des Softwareentwicklungsprozesses, der es ermöglicht, den Code sauber, lesbar und wartbar zu halten. Durch das Identifizieren von &#8222;Code Smells&#8220;, die Anwendung bewährter Techniken und das kontinuierliche Integrieren von Refactoring in den Arbeitsablauf können Entwickler qualitativ hochwertigen Code schreiben, der leicht zu verstehen und zu erweitern ist.</p>



<p>Die Investition in regelmäßiges Refactoring zahlt sich langfristig aus, indem sie dazu beiträgt, die technischen Schulden zu reduzieren und die Zusammenarbeit im Team zu verbessern. Der Schlüssel zum erfolgreichen Refactoring liegt in der Kombination aus automatisierten Tests, konsistenten Codierungsstandards und einem proaktiven Ansatz zur Code-Optimierung. Durch die Priorisierung von Refactoring in der Softwareentwicklung können Entwickler sicherstellen, dass ihre Projekte skalierbar und zukunftssicher sind.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/10/erklaerung-refactoring/">Refactoring &#8211; Optimierung und Evolution für nachhaltigen Code</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/10/erklaerung-refactoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1357</post-id>	</item>
		<item>
		<title>Jest &#8211; Test-Framework für Testautomatisierung</title>
		<link>https://ceosbay.com/2023/03/07/erklaerung-jest/</link>
					<comments>https://ceosbay.com/2023/03/07/erklaerung-jest/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 20:03:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Ausführung]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Christoph]]></category>
		<category><![CDATA[Codeabdeckung]]></category>
		<category><![CDATA[Codes]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jest]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[Nakazawa]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Snapshot]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Stub]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1075</guid>

					<description><![CDATA[<p>Jest ist ein Open Source JavaScript-Testframework, dass speziell für die Verwendung mit React, Vue.js, Angular und anderen modernen JavaScript&#8211;Frameworks und -Bibliotheken entwickelt wurde. Das Framework hat Facebook, um genau zu sein, Christoph Nakazawa entworfen und &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/07/erklaerung-jest/">Jest &#8211; Test-Framework für Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Jest ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Testframework, dass speziell für die Verwendung mit <a href="https://ceosbay.com/2022/12/21/erklaerung-react/" target="_blank" rel="noreferrer noopener">React</a>, Vue.js, <a href="https://ceosbay.com/2023/03/21/erklaerung-angular/" target="_blank" rel="noreferrer noopener">Angular</a> und anderen modernen <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>&#8211;<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Frameworks</a> und -Bibliotheken entwickelt wurde. Das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> hat Facebook, um genau zu sein, Christoph Nakazawa entworfen und entwickelt. Wobei man bei der Entwicklung den Schwerpunkt auf die Einfachheit und die Unterstützung von großen Webanwendungen gesetzt hat. Heute nutzen es viele Entwickler sowie Unternehmen weltweit.</p>



<p>Es bietet eine Reihe von Funktionen und Tools, die es Entwicklern erleichtert, effektive und zuverlässige Tests für ihre <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen zu schreiben. Zu den Funktionen von Jest gehören unter anderem:</p>



<p><strong>Automatisierte Testausführung:</strong></p>



<p>Jest führt Tests automatisch aus, wenn es Codeänderungen erkennt. Dies beschleunigt den Entwicklungsprozess und sorgt dafür, dass man häufiger bzw. effektiver Tests ausführen kann. Dies steigert am Ende des Tages die Qualität der Anwendungen grundsätzlich.</p>



<p><strong>Snapshot-Tests:</strong></p>



<p>Mit Jest können Entwickler Snapshot-Tests durchführen. Dadurch stellt man sicher, dass das Rendering der Komponenten oder Funktionen konsistent stattfindet. Dies kann auch dabei helfen, visuelle Fehler in der Benutzeroberfläche zu identifizieren und zu beheben.</p>



<p><strong>Mocking:</strong></p>



<p>Jest erleichtert das Erstellen von Mocks und Stubs für Abhängigkeiten, die man in den zu entwickelnden Anwendungen verwendet. Dies kann Entwicklern dabei helfen, ihre Tests zu isolieren und sicherzustellen, dass die Ausführung unabhängig voneinander stattfindet.</p>



<p><strong>Codeabdeckung:</strong></p>



<p>Jest bietet eine integrierte Codeabdeckungsfunktion. Dies ermöglicht den Entwicklern die Überprüfung, wie viel des Codes während der Testausführung abgedeckt ist. Dies kann helfen, Lücken in der Testabdeckung zu identifizieren und die Qualität der Anwendung insgesamt zu verbessern.</p>



<p><strong>Parallele Testausführung:</strong></p>



<p>Jest kann Tests parallel ausführen, was die Testdauer verkürzt, und die Gesamtgeschwindigkeit des Entwicklungsprozesses erhöht.</p>



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



<p>Insgesamt ist Jest ein leistungsstarkes Testframework für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen, dass eine breite Palette von Funktionen bietet, um Entwicklern dabei zu helfen, effektive und zuverlässige Tests für ihre Anwendungen zu schreiben. Es ist eine wichtige Technologie für die Entwicklung moderner <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen und viele Entwickler sowie Unternehmen weltweit nutzen es.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/07/erklaerung-jest/">Jest &#8211; Test-Framework für Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/07/erklaerung-jest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1075</post-id>	</item>
		<item>
		<title>Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</title>
		<link>https://ceosbay.com/2022/12/26/erklaerung-pact-io/</link>
					<comments>https://ceosbay.com/2022/12/26/erklaerung-pact-io/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 26 Dec 2022 17:30:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Alternativen]]></category>
		<category><![CDATA[Änderungen]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Broker]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[Contracts]]></category>
		<category><![CDATA[Dependency]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[pact]]></category>
		<category><![CDATA[Provider]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[Type]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1049</guid>

					<description><![CDATA[<p>Pact ist ein Open Source Code-First-Tool zum Testen von https- und Nachrichtenintegrationen mithilfe von Contract Tests. Diese stellen sicher, dass die Nachrichten zwischen den Anwendungen mit einem gemeinsamen Verständnis übereinstimmen, dass in einem Contract dokumentiert &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/26/erklaerung-pact-io/">Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pact ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> Code-First-Tool zum Testen von https- und Nachrichtenintegrationen mithilfe von Contract Tests. Diese stellen sicher, dass die Nachrichten zwischen den Anwendungen mit einem gemeinsamen Verständnis übereinstimmen, dass in einem Contract dokumentiert ist. Die Alternative zu Contract Tests, sind Integrationstests, auf die ich in späteren Beiträgen eingehen werde. Alles in allem sind sie dafür da, um sicherzustellen, dass die Anwendungen korrekt zusammenarbeiten.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>Bis zum Aufkommen der Microservice-Architekturen wurde Software klassischerweise als Monolith entworfen. Dabei gab es keinerlei interne Schnittstellen, da alle Informationen im Monolithen weitergereicht werden konnten. Dementsprechend konnte man sich im Testing nur auf die Stufen Unittests, Integrationstests und End-to-End-Tests konzentrieren. Mit dem Aufkommen der Microservice-Architekturen existiert nun eine Vielzahl an internen Schnittstellen und damit entsteht die Notwendigkeit, diese zu testen. Die Kommunikation der Services untereinander geschieht dabei nicht zufällig, sondern folgt klar definierten Regeln, den sogenannten Schnittstellen-Contracts.</p>



<h3 class="wp-block-heading">Was ist Contract Testing?</h3>



<p>Wie bereits angesprochen, wurde die korrekte Zusammenarbeit von API und Consumer meist durch Integrationstests sichergestellt. Da diese allerdings eine lauffähige Systemlandschaft benötigen, können Fehler erst relativ spät erkannt werden. Bei der Entwicklung ist es jedoch von Vorteil, das Feedback so früh wie möglich zu erhalten. Hinzu kommt, dass Integrationstests eigentlich zum Prüfen der Fachlichkeit dienen. In heutigen Testlandschaften stellen sie strenggenommen &#8222;nur nebenher&#8220; fest, wenn es technische Probleme an der Schnittstelle gibt. Das kann sowohl bedeuten, dass der Aufwand bei der Fehlersuche steigt, weil neben fachlichen Problemen auch technische Ursachen zum Fehlschlag des Tests führen können, als auch der Wartungsaufwand der Tests sich erhöht.</p>



<p>Macht also Sinn, dedizierte Tests zu nutzen, um Fehler an Schnittstellen zu finden. Hier bietet sich Contract Testing, genauer gesagt, Consumer Driven Contract Testing (CDCT) an. Verträge für Softwarekomponenten. Der Zusatz &#8222;Consumer Driven&#8220; bedeutet, der Consumer bestimmt den Vertrag (Aus diesem Grund nennt man es auch Consumer Contract) und das sich die API nach dessen Vorgaben richten muss.</p>



<p>Neben Consumer Contracts gibt es die etwas verbreiteteren Provider Contracts wie WSDL-/XML-Schemata von SOAP-APIs oder Werkzeuge wie Swagger im Kontext von <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST-Services</a>.</p>



<p>Auch wenn sich die Funktionsweise von <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> zu <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> unterscheidet, bleibt die Idee dahinter gleich. Der Provider erfüllt den vom Consumer definierten Vertrag.</p>



<p>Der Vertrag enthält die API samt Parameter und die erwartete (minimale) Antwort. Dabei kann die Beschreibung der Parameter durch den Einsatz von regulären Ausdrücken beliebig präzise sein. So kann der Consumer erwarten, beim Aufruf der API einen unbestimmten String-Parameter oder einen bestimmten String-Parameter aus einem vordefinierten Set zu übergeben. Der zweite Fall ist äußerst hilfreich, wenn der Provider diesen String-Parameter in einen Enum-Wert übersetzt.</p>



<h3 class="wp-block-heading">Der Consumer Test mit Pact</h3>



<p>Sämtliche Verträge zwischen dem Consumer und dem Provider werden in einer JSON-Datei, auch Pact-Datei genannt, definiert. Der Consumer generiert diese Pact-Datei beim Ausführen seiner Pact-Tests und veröffentlicht sie auf dem Pact-Broker. Bei den Tests handelt es sich um gewöhnliche Unit-Tests und sie basieren auf einem der vielen von Pact unterstützen Test-Frameworks wie JUnit oder Jest. In dem Test ruft der Consumer die zu testende API inklusive Parameter auf. Der Aufruf wird von einem Mock-Provider, der vom Pact-Framework zur Verfügung gestellt wird, entgegengenommen. Der Mock-Provider prüft, ob dieser Aufruf mit dem Aufruf aus dem Vertrag übereinstimmt. Sind keine Abweichungen gefunden, antwortet der Mock-Provider mit der minimalen Antwort, die ebenfalls aus dem Vertrag stammt. Der Consumer empfängt in seinem Test die Antwort und vergleicht sie mit seiner Erwartung. Stimmen sie überein, ist der Test erfolgreich. Auf diesem Weg stellt der Pact-Test sicher, dass der Consumer den Aufruf tätigen und die Antwort verarbeiten kann.</p>



<p>Der Pact-Broker ist ein Webserver, der sowohl vom Consumer als auch vom Provider erreichbar sein muss. Er verwaltet die Verträge, indem er sie versioniert ablegt, sie dem Provider zur Verfügung stellt und die Testergebnisse speichert. Die Art und Weise wie der Consumer die Verträge auf dem Pact-Broker veröffentlicht, ist abhängig von der eingesetzten Programmiersprache der Tests und/oder dem eingesetzten Dependendency-Management. Für Maven beispielsweise gibt es ein spezielles Pact-Plugin, das den publish-Goal anbietet, für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> existiert hingegen eine spezielle Pact-Version mit dem Namen Pact-js.</p>



<h3 class="wp-block-heading">Der Provider Test</h3>



<p>Analog zum Consumer-Test ist der Provider-Test auch ein Unit-Test und wird im Rahmen der restlichen Unit-Tests ausgeführt. Hierbei werden alle Verträge, die der Provider mit seinen Consumern abgeschlossen hat, vom Pact-Broker heruntergeladen. Der Aufruf der APIs erfolgt lokal, sodass ein Aufruf durch den Consumer simuliert wird. Der Provider verarbeitet den Aufruf und generiert seine Antwort, die mit der erwarteten Antwort aus dem Vertrag verglichen wird. Sollten sie gleich sein, hat der Provider den Pact-Test bestanden. Ansonsten gilt der Test als fehlgeschlagen und das Artefakt des Providers kann nicht ordnungsgemäß gebaut werden. Die Ursache für Fehlschläge sind in den meisten Fällen Code-Änderungen am Provider ohne den Consumer entsprechend angepasst zu haben oder die Erwartungshaltung des Consumers ist fehlerhaft. In beiden Fällen wird durch CDCT ein Missstand aufgedeckt, der erst zur Laufzeit bemerkbar gewesen wäre.</p>



<h3 class="wp-block-heading">Alternativen zu Pact</h3>



<p>Natürlich ist Pact nicht das einzige Framework zum Implementieren von CDCT, wenn auch aktuell eines der am weitesten verbreiteten. Neben Pact existieren noch ein paar weitere Möglichkeiten für das vertragsbasierte Testen wie Postman, Spring Cloud Contract Project oder Dredd, auf die ich noch in zukünftigen Beiträgen eingehen werde. Aus diesem Grund erfolgt auch das Fazit erst, wenn ich ein paar Vergleiche aufstellen kann.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/26/erklaerung-pact-io/">Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/26/erklaerung-pact-io/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1049</post-id>	</item>
	</channel>
</rss>
