<?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>Code Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/code/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Tue, 04 Feb 2025 11:39:27 +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>Code Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/code/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Syntax – Unsichtbares Regelwerk der Kommunikation und des Codes</title>
		<link>https://ceosbay.com/2025/03/15/syntax-unsichtbares-regelwerk-der-kommunikation-und-des-codes/</link>
					<comments>https://ceosbay.com/2025/03/15/syntax-unsichtbares-regelwerk-der-kommunikation-und-des-codes/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 15 Mar 2025 17:31:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[API-Testing]]></category>
		<category><![CDATA[Bildung]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[KI-Testing]]></category>
		<category><![CDATA[Performance-Testing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Spieleentwicklung]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Testmanagement]]></category>
		<category><![CDATA[Wissenschaftskommunikation]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Grammatik]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Kommunikation]]></category>
		<category><![CDATA[Linguistik]]></category>
		<category><![CDATA[Programmierlogik]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Regeln]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[Struktur]]></category>
		<category><![CDATA[Syntax]]></category>
		<category><![CDATA[Syntaxfehler]]></category>
		<category><![CDATA[Textverarbeitung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=3961</guid>

					<description><![CDATA[<p>Syntax – ein Begriff, den viele vielleicht aus dem Sprachunterricht oder der Informatik kennen. Doch was bedeutet er genau und warum spielt er eine so große Rolle in unserer Kommunikation sowie in der Programmierung? In &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2025/03/15/syntax-unsichtbares-regelwerk-der-kommunikation-und-des-codes/">Syntax – Unsichtbares Regelwerk der Kommunikation und des Codes</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Syntax – ein Begriff, den viele vielleicht aus dem Sprachunterricht oder der <a href="https://ceosbay.com/2023/11/08/informatik-die-zukunft-des-codes/">Informatik</a> kennen. Doch was bedeutet er genau und warum spielt er eine so große Rolle in unserer Kommunikation sowie in der Programmierung? In diesem Blogbeitrag gehen wir auf die Bedeutung ein und zeigen, warum sie für Sprache und Code gleichermaßen essenziell ist.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="871" height="871" src="https://i0.wp.com/ceosbay.com/wp-content/uploads/2025/02/Syntax.jpg?resize=871%2C871&#038;ssl=1" alt="Syntax" class="wp-image-4035" srcset="https://i0.wp.com/ceosbay.com/wp-content/uploads/2025/02/Syntax.jpg?w=1024&amp;ssl=1 1024w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2025/02/Syntax.jpg?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2025/02/Syntax.jpg?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2025/02/Syntax.jpg?resize=768%2C768&amp;ssl=1 768w" sizes="(max-width: 871px) 100vw, 871px" /></figure>



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



<p>Der Begriff stammt aus dem Griechischen und bedeutet so viel wie „Zusammenstellung“ oder „Ordnung“. In der Linguistik beschreibt Syntax die Regeln, nach denen Wörter in einer Sprache zu sinnvollen Sätzen angeordnet werden. In der <a href="https://ceosbay.com/2023/11/08/informatik-die-zukunft-des-codes/">Informatik</a> bezeichnet sie die Struktur und Grammatik von Programmiersprachen.</p>



<p>Ob in einer natürlichen Sprache wie Deutsch oder in einer Programmiersprache wie <a href="https://ceosbay.com/2022/12/20/erklaerung-python/">Python</a> – ohne eine klar definierte Syntax wäre die Verständigung unmöglich oder zumindest erheblich erschwert.</p>



<h3 class="wp-block-heading">In der Sprache</h3>



<p>In der menschlichen Sprache sorgt die Syntax dafür, dass wir verständliche und korrekte Sätze bilden können. Ein einfaches Beispiel:</p>



<ul class="wp-block-list">
<li><strong>Richtig:</strong> „Der Hund jagt die Katze.“</li>



<li><strong>Falsch:</strong> „Hund die Katze der jagt.“</li>
</ul>



<p>Im zweiten Fall ist der Satz grammatikalisch falsch und schwer verständlich. Auch wenn alle Wörter vorhanden sind, fehlt die korrekte Anordnung, um den Satz sinnvoll zu machen.</p>



<h3 class="wp-block-heading">Syntax in der Programmierung</h3>



<p>In der <a href="https://ceosbay.com/2022/12/20/erklaerung-python/">Informatik</a> bestimmt die Syntax einer Programmiersprache, wie man Code schreiben muss, damit der Computer versteht und weiß, was es ausführen soll. </p>



<h3 class="wp-block-heading">Hier ein Beispiel mit Python:</h3>



<p><strong>Korrek</strong>t<strong>:</strong></p>



<pre class="wp-block-code"><code>print("Hallo, Welt!")</code></pre>



<p><strong>Falsch:</strong></p>



<pre class="wp-block-code"><code>print "Hallo, Welt!"</code></pre>



<p>Der zweite Code führt zu einem Syntaxfehler, da moderne Versionen von Python Klammern für die <code>print</code>-Funktion verlangen.</p>



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



<p>Es ist die Basis für klare und eindeutige Kommunikation – sei es in der Sprache oder in der Programmierung. Ist sie fehlerhaft, kann sie zu Missverständnissen oder sogar kompletten Fehlfunktionen führen. In der Programmierung kann ein kleiner Fehler in der Syntax dazu führen, dass ein ganzes Programm nicht läuft oder unerwartete Fehler produziert.</p>



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



<p>Egal ob in der natürlichen Sprache oder in der Programmierung – sie ist unerlässlich für eine funktionierende Kommunikation. Während sie in der Sprache Flexibilität erlaubt, ist sie in der <a href="https://ceosbay.com/2022/12/20/erklaerung-python/">Informatik</a> oft streng festgelegt. Wer sich mit Syntax auskennt und sie beherrscht, hat sowohl in der Kommunikation als auch in der Programmierung einen entscheidenden Vorteil.</p>



<p>Hast du schon einmal Syntaxfehler erlebt? Teile deine Erfahrungen in den Kommentaren!</p>
<p>Der Beitrag <a href="https://ceosbay.com/2025/03/15/syntax-unsichtbares-regelwerk-der-kommunikation-und-des-codes/">Syntax – Unsichtbares Regelwerk der Kommunikation und des Codes</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2025/03/15/syntax-unsichtbares-regelwerk-der-kommunikation-und-des-codes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3961</post-id>	</item>
		<item>
		<title>Jasmine &#8211; JavaScript Testautomatisierung</title>
		<link>https://ceosbay.com/2023/04/16/erklaerung-jasmine/</link>
					<comments>https://ceosbay.com/2023/04/16/erklaerung-jasmine/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 06:23:35 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Anwendungen]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[Best]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Ent-to-End]]></category>
		<category><![CDATA[Flexibilität]]></category>
		<category><![CDATA[Funktionsweise]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Integrationstests]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Karma]]></category>
		<category><![CDATA[Konstrukt]]></category>
		<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Mocks]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Prozesse]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Qualitätsmanagement]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Spec]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Spy]]></category>
		<category><![CDATA[spyOn]]></category>
		<category><![CDATA[Struktur]]></category>
		<category><![CDATA[Strukturieren]]></category>
		<category><![CDATA[Suite]]></category>
		<category><![CDATA[Syntax]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testabdeckung]]></category>
		<category><![CDATA[Testbeschreibung]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unit]]></category>
		<category><![CDATA[Vorteile]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1483</guid>

					<description><![CDATA[<p>Die moderne Softwareentwicklung hat eine Vielzahl von Werkzeugen und Technologien, um Entwicklern bei der Gestaltung und Implementierung robuster Anwendungen zu helfen. Eines dieser Werkzeuge, dass ich in den letzten Tagen auf GitHub entdeckt habe, ist &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/16/erklaerung-jasmine/">Jasmine &#8211; JavaScript Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die moderne Softwareentwicklung hat eine Vielzahl von Werkzeugen und Technologien, um Entwicklern bei der Gestaltung und Implementierung robuster Anwendungen zu helfen. Eines dieser Werkzeuge, dass ich in den letzten Tagen auf <a href="https://ceosbay.com/2022/11/19/erklaerung-github/" target="_blank" rel="noreferrer noopener">GitHub</a> entdeckt habe, ist <a href="https://jasmine.github.io" target="_blank" rel="noreferrer noopener">Jasmine</a>. Es ist ein bekanntes <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> zur Testautomatisierung für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>. In diesem Blogbeitrag schaue ich mir an, was Jasmine ist, wie es funktioniert und welche Vorteile es bietet, wenn es um das Testen von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen geht.</p>



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



<p>Jasmine ist ein beliebtes Open-Source-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> für <a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/" target="_blank" rel="noreferrer noopener">Behavior-Driven Devel</a><a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/">opment</a> (<a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/" target="_blank" rel="noreferrer noopener">BDD</a>) Tests in <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>. Man verwendet es hauptsächlich, um das Verhalten von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Code durch das Schreiben von Test-Spezifikationen zu überprüfen. Jasmine bietet eine saubere, leicht verständliche Syntax und ermöglicht Entwicklern, ihre Tests unabhängig von ihrer Implementierung auszuführen. Dadurch können sie schnell und effizient sicherstellen, dass ihr Code wie erwartet funktioniert.</p>



<h3 class="wp-block-heading">Vorteile:</h3>



<ul class="wp-block-list">
<li><strong>Einfachheit</strong>: Man hat Jasmine entwickelt, um leicht verständlich und zugänglich für Entwickler zu sein. Die Test-Syntax ist klar und einfach, sodass selbst Entwickler, die neu in der Testautomatisierung sind, schnell damit arbeiten können.</li>



<li><strong>Unabhängigkeit</strong>: Jasmine ist unabhängig von anderen <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>, Browsern und DOM-Manipulationsbibliotheken, was bedeutet, dass man es praktisch jedem <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Projekt verwenden kann, unabhängig von der verwendeten Technologie.</li>



<li><strong>Flexibilität</strong>: Entwickler können Jasmine für Unit-Tests, Integrationstests und sogar für End-to-End-Tests verwenden. Dies gibt ihnen die Möglichkeit, das gesamte Verhalten ihrer Anwendung mit einem einzigen Tool abzudecken.</li>
</ul>



<h3 class="wp-block-heading">Wie funktioniert Jasmine?</h3>



<p>Jasmine basiert auf einer Hierarchie von Suites und Specs. Suites sind Gruppen von verwandten Tests, während Specs einzelne Testfälle sind. Diese Hierarchie ermöglicht es Entwicklern, ihre Tests klar zu strukturieren und den Code leicht zu organisieren.</p>



<p>Es verwendet das &#8222;describe&#8220;-Konstrukt, um Test-Suites zu definieren. Jede Suite kann mehrere Test-Spezifikationen (Specs) enthalten, die mit dem &#8222;it&#8220;-Konstrukt definiert werden. Diese Specs enthalten Erwartungen (Expectations) in Bezug auf das zu testende Verhalten des Codes.</p>



<h4 class="wp-block-heading">Ein einfaches Beispiel für eine Jasmine Test-Suite sieht wie folgt aus:</h4>



<pre class="wp-block-code"><code>describe("A suite is just a function", function() {
  let a;

  it("and so is a spec", function() {
    a = true;

    expect(a).toBe(true);
  });
});</code></pre>



<p>oder</p>



<pre class="wp-block-code"><code>describe('Array', () =&gt; {
  describe('#indexOf()', () =&gt; {
    it('sollte -1 zurückgeben, wenn der Wert nicht im Array vorhanden ist', () =&gt; {
      expect(&#91;1, 2, 3].indexOf(4)).toBe(-1);
    });
  });
});</code></pre>



<h3 class="wp-block-heading">Integration in die Softwareentwicklung</h3>



<p>Man kann Jasmine problemlos in moderne <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Projekte und Build-Tools integrieren. Mit Integrationen für Tools wie Grunt, Gulp und Webpack lässt es sich nahtlos in bestehende Entwicklungsprozesse einfügen. Darüber hinaus gibt es auch Jasmine-Plugins für gängige Entwicklungsumgebungen wie Visual Studio Code oder <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">IntelliJ</a>, die das Schreiben und Ausführen von Tests noch einfacher und bequemer gestalten.</p>



<p>Man kann es auch mit anderen Testing-Tools und Libraries kombinieren, um noch umfassendere Testlösungen zu schaffen. Beispielsweise kann man es mit Karma (einem <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Test-Runner) verwenden, um Tests in verschiedenen Browsern auszuführen, oder mit Protractor für End-to-End-Tests in Angular-Anwendungen.</p>



<h3 class="wp-block-heading">Best Practices für Jasmine-Tests</h3>



<p>Um das Beste aus Jasmine herauszuholen und effektive Tests zu erstellen, sind hier einige bewährte Vorgehensweisen:</p>



<ul class="wp-block-list">
<li><strong>Klare Testbeschreibungen</strong>: Man sollte aussagekräftige und präzise Beschreibungen für Suites und Specs verwenden. Dies erleichtert das Verständnis des Testzwecks und die Identifizierung von Fehlern.</li>



<li><strong>Kleine, fokussierte Tests</strong>: Es ist ratsam, Tests zu schreiben, die nur eine Funktion oder ein Verhalten testen. Dies erleichtert das Auffinden und Beheben von Fehlern, da man dadurch genau im Blick behält, welcher Teil des Codes betroffen ist.</li>



<li><strong>Testabdeckung</strong>: Man sollte sicherstellen, dass man eine ausreichende Testabdeckung für den Code hat. Dies bedeutet, dass man alle wichtigen Funktionen und Szenarien in den Tests berücksichtigt.</li>



<li><strong>Mocking und Spies</strong>: Es ist zu empfehlen, Mock-Objekte und Spies zu verwenden, um externe Abhängigkeiten zu isolieren und den Testfokus auf den zu testenden Code zu richten. Jasmine bietet dafür eingebaute Funktionen wie createSpy und spyOn.</li>



<li><strong>Regelmäßige Testausführung</strong>: Man sollte die Tests regelmäßig ausführen, um sicherzustellen, dass Änderungen im Code nicht zu unerwarteten Fehlern führen. Daher ist es ratsam, Jasmine in den <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">Continuous Integration (CI) bzw. Continuous Deployment</a> (<a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD</a>) Prozess integrieren, um automatisch Tests auszuführen, sobald man Codeänderungen vornimmt.</li>
</ul>



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



<p>Jasmine ist ein leistungsstarkes und vielseitiges <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> für das Testen von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen. Mit seiner klaren Syntax, Flexibilität und Integration in moderne Entwicklungsprozesse ist es ein unverzichtbares Werkzeug für jeden <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>-Entwickler. Durch die Befolgung der Best Practices und die regelmäßige Ausführung von Tests können Entwickler sicherstellen, dass ihr Code zuverlässig und fehlerfrei funktioniert. Insgesamt trägt Jasmine dazu bei, die Qualität von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen zu verbessern und die Entwicklungszeit zu reduzieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/16/erklaerung-jasmine/">Jasmine &#8211; JavaScript Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/16/erklaerung-jasmine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1483</post-id>	</item>
		<item>
		<title>Clean Code &#8211; Elegante Lösungen für effiziente und wartungsfreundliche Software</title>
		<link>https://ceosbay.com/2023/04/11/erklaerung-clean-code/</link>
					<comments>https://ceosbay.com/2023/04/11/erklaerung-clean-code/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 11 Apr 2023 19:53:02 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Bildung]]></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[Architekt]]></category>
		<category><![CDATA[Bob]]></category>
		<category><![CDATA[Clean]]></category>
		<category><![CDATA[CleanCode]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coder]]></category>
		<category><![CDATA[Continuous]]></category>
		<category><![CDATA[Craftmanship]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[DRY]]></category>
		<category><![CDATA[Einfachheit]]></category>
		<category><![CDATA[Erleichterung]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Fehlerhandhabung]]></category>
		<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Kommentare]]></category>
		<category><![CDATA[Komplex]]></category>
		<category><![CDATA[Komplexität]]></category>
		<category><![CDATA[Leichter]]></category>
		<category><![CDATA[Lesbarkeit]]></category>
		<category><![CDATA[Modularität]]></category>
		<category><![CDATA[Praxis]]></category>
		<category><![CDATA[Prinzipien]]></category>
		<category><![CDATA[Probleme]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Responsibility]]></category>
		<category><![CDATA[Single]]></category>
		<category><![CDATA[SRP]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Team Work]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Verständnis]]></category>
		<category><![CDATA[Wiederverwendbarkeit]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Zeitdruck]]></category>
		<category><![CDATA[Zusammenarbeit]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1398</guid>

					<description><![CDATA[<p>In der Welt der Softwareentwicklung hat sich der Begriff &#8222;Clean Code&#8220; zu einem wichtigen Leitprinzip entwickelt. Die Idee, dass sauberer, gut strukturierter und leicht verständlicher Code zu besseren und wartungsfreundlicheren Softwareprodukten führt, ist mittlerweile weit &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/11/erklaerung-clean-code/">Clean Code &#8211; Elegante Lösungen für effiziente und wartungsfreundliche Software</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In der Welt der Softwareentwicklung hat sich der Begriff &#8222;Clean Code&#8220; zu einem wichtigen Leitprinzip entwickelt. Die Idee, dass sauberer, gut strukturierter und leicht verständlicher Code zu besseren und wartungsfreundlicheren Softwareprodukten führt, ist mittlerweile weit verbreitet. Heute geht es um das Konzept von Clean Code, warum es wichtig ist und wie man es in der Praxis umsetzen kann.</p>



<h3 class="wp-block-heading">Was ist Clean Code?</h3>



<p>Clean Code bezieht sich auf den Ansatz, Code so zu schreiben, dass er leicht verständlich, wartbar und erweiterbar ist. Das Konzept wurde von Robert C. Martin, auch bekannt als &#8222;Uncle Bob&#8220;, in seinem Buch &#8222;Clean Code: A Handbook of Agile Software Craftsmanship&#8220; populär gemacht. Im Kern geht es darum, Softwareentwicklung als Handwerk zu betrachten und stets auf hohe Qualität und Präzision in der Codegestaltung zu achten.</p>



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



<p>Sauberer Code bietet verschiedene Vorteile, sowohl für den Entwickler selbst, für das gesamte Team und meiner Meinung nach auch für die ganze Welt.</p>



<ul class="wp-block-list">
<li>Verständlichkeit: Clean Code ist einfacher zu lesen und zu verstehen. Das hilft Entwicklern, sich schneller mit dem Code vertraut zu machen und Fehler oder Verbesserungsmöglichkeiten schneller zu erkennen.</li>



<li>Wartbarkeit: Sauberer Code ist leichter zu warten, da er klar strukturiert und weniger anfällig für Fehler oder unerwartete Probleme ist.</li>



<li>Effizienz: Da Clean Code einfacher zu verstehen ist, kann das Team schneller arbeiten und die Produktivität steigt.</li>



<li>Zusammenarbeit: Ein sauberer Code erleichtert die Zusammenarbeit im Team, da jeder den Code anderer Entwickler leichter lesen und verstehen kann.</li>
</ul>



<h3 class="wp-block-heading">Prinzipien von Clean Code</h3>



<p>Es gibt viele Prinzipien und Praktiken, die beim Schreiben von sauberem Code helfen können. Einige der wichtigsten sind:</p>



<ul class="wp-block-list">
<li>Lesbarkeit: Der Code sollte leicht lesbar und verständlich sein. Das bedeutet, dass man Variablen, Funktionen und Klassen sinnvoll benamt und ihre Funktion leicht erkennbar ist. Kommentare setzt man sparsam ein, um den Code nicht zu überfrachten.</li>
</ul>



<ul class="wp-block-list">
<li>Einfachheit: Man hält den Code so einfach wie möglich, ohne unnötige Komplexität oder Verwirrung. Das bedeutet, dass man sich auf das Wesentliche konzentrieren und abstrakte Konzepte wie Design Patterns oder Funktionen nur verwendet, wenn sie tatsächlich nützlich sind.</li>
</ul>



<ul class="wp-block-list">
<li>Modularität: Man teilt den Code in kleine unabhängige Module auf, die jeweils eine bestimmte Funktion erfüllen. Dadurch wird der Code leichter zu verstehen und zu warten.</li>
</ul>



<ul class="wp-block-list">
<li>Wiederverwendbarkeit: Man schreibt den Code so, dass die Wiederverwendbarkeit gewährleistet ist. Dies bedeutet, dass Funktionen oder Klassen, die eine bestimmte Aufgabe erfüllen, generisch genug sind, um in verschiedenen Situationen Verwendung zu finden.</li>
</ul>



<h3 class="wp-block-heading">Clean Code in der Praxis</h3>



<p>Hier sind einige konkrete Schritte, die man beim Schreiben von Clean Code in der Praxis beachten sollte:</p>



<ul class="wp-block-list">
<li>Variablen-, Funktions- und Klassennamen: Man wählt sinnvolle, beschreibende Namen, die klar machen, was eine Variable, Funktion oder Klasse macht. Die Vermeidung von Abkürzungen oder unverständliche Namen ist eines der obersten Gebote.</li>
</ul>



<ul class="wp-block-list">
<li>Single Responsibility Principle (SRP): Jede Funktion oder Klasse sollte nur eine einzige Verantwortung haben. Dies bedeutet, dass sie nur einen Aspekt des Problems lösen sollte, um den Code einfacher und leichter zu warten.</li>
</ul>



<ul class="wp-block-list">
<li>Funktionen und Methoden: Man hält Funktionen und Methoden kurz und konzentrieren sich darauf, dass sie eine einzige Aufgabe erfüllen. Eine Funktion oder Methode sollte in der Regel nicht länger als 20 Zeilen sein, um ihre Verständlichkeit zu gewährleisten.</li>
</ul>



<ul class="wp-block-list">
<li>KISS (Keep It Simple, Stupid) Prinzip: Man versucht, den Code so einfach wie möglich zu halten und unnötige Komplexität zu vermeiden. Wenn es eine einfachere Lösung gibt, zieht man diese der komplexeren vor.</li>
</ul>



<ul class="wp-block-list">
<li>Don&#8217;t Repeat Yourself (DRY) Prinzip: Man vermeidet doppelten Code, indem man wiederverwendbare Funktionen oder Klassen erstellt. Das verringert die Wahrscheinlichkeit von Fehlern und macht den Code leichter zu warten.</li>
</ul>



<ul class="wp-block-list">
<li>Code-Kommentare: Man sollte Kommentare dazu verwenden, den Zweck und die Funktionsweise von Code-Teilen zu erläutern, die nicht sofort offensichtlich sind. Man sollte jedoch nicht zu viele Kommentare schreiben, da dies den Code unübersichtlich machen kann.</li>
</ul>



<ul class="wp-block-list">
<li>Fehlerbehandlung: Die Implementierung einer angemessenen Fehlerbehandlung sollte unabdingbar sein, um unerwartete Probleme zu erkennen und angemessen darauf zu reagieren. Die Verwendung von Exceptions und try-catch-Blöcken, kann eine gute Lösung darstellen, um Fehler abzufangen und entsprechend darauf zu reagieren.</li>
</ul>



<ul class="wp-block-list">
<li>Testgetriebene Entwicklung (<a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">TDD</a>): Man schreibt zuerst Tests, bevor man den eigentlichen Code entwickelt. Auf diese Weise kann man sicherstellen, dass die Implementierung den gewünschten Anforderungen entspricht und weniger fehleranfällig ist. Siehe hierzu meinen <a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">Beitrag über Test Driven Development</a>.</li>
</ul>



<ul class="wp-block-list">
<li>Kontinuierliche Integration (CI) und Continuous Deployment (CD): Man verwendet CI/CD-Tools, um den Code regelmäßig zu testen und automatisch zu deployen. Dies stellt sicher, dass der Code immer auf dem neuesten Stand ist und das man potenzielle Probleme schnell erkennen kann.</li>
</ul>



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



<p>Im Grunde genommen ist dies für mich eine relativ neue Angelegenheit, da ich in der Vergangenheit schon recht of den Code einfach reingehackt habe, da ich mich unter Zeitdruck gefühlt habe. Ich ertappe mich hin und wieder immer noch dabei und dies sehr oft, wie ich auf alte Gewohnheiten und Muster zurückgreife. Doch dies sollte sich hoffentlich in den nächsten Monaten und Jahren auf ein Minimum reduzieren lassen. Ich bin davon überzeugt, dass Clean Code ein wesentlicher Bestandteil einer erfolgreichen Softwareentwicklung ist. Indem man sich auf Lesbarkeit, Einfachheit, Modularität und Wiederverwendbarkeit konzentriert, kann man den eigenen Code nicht nur leichter verstehen, sondern auch schneller und effizienter arbeiten. Durch die Anwendung der oben genannten Prinzipien und Praktiken kann man den Code verbessern und letztendlich zu erfolgreichen, wartungsfreundlichen Softwareprodukten beitragen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/11/erklaerung-clean-code/">Clean Code &#8211; Elegante Lösungen für effiziente und wartungsfreundliche Software</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/11/erklaerung-clean-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1398</post-id>	</item>
		<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>YAML &#8211; Klarheit und Einfachheit für strukturierte Daten und Konfigurationen</title>
		<link>https://ceosbay.com/2023/04/09/erklaerung-yaml/</link>
					<comments>https://ceosbay.com/2023/04/09/erklaerung-yaml/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 09 Apr 2023 20:28:02 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Dokumen]]></category>
		<category><![CDATA[Dokument]]></category>
		<category><![CDATA[Doppelpunkt]]></category>
		<category><![CDATA[Einfach]]></category>
		<category><![CDATA[Expressivität]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Komplex]]></category>
		<category><![CDATA[Lesbarkeit]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[Programme]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[YAML]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1319</guid>

					<description><![CDATA[<p>YAML ist eine von vielen Markup-Sprachen, die man in der Softwareentwicklung verwendet. Die Abkürzung YAML steht für &#8222;YAML Ain&#8217;t Markup Language&#8220;. Man hat es entwickelt, um eine einfache, leicht lesbare Sprache zu bieten, die für &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/09/erklaerung-yaml/">YAML &#8211; Klarheit und Einfachheit für strukturierte Daten und Konfigurationen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>YAML ist eine von vielen Markup-Sprachen, die man in der Softwareentwicklung verwendet. Die Abkürzung YAML steht für &#8222;YAML Ain&#8217;t Markup Language&#8220;. Man hat es entwickelt, um eine einfache, leicht lesbare Sprache zu bieten, die für menschliche Leser gut strukturiert und verständlich ist. Im Gegensatz zu anderen Markup-Sprachen wie <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> oder <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">JSON</a>, bietet es eine höhere Lesbarkeit und Benutzerfreundlichkeit.</p>



<h3 class="wp-block-heading">Wie funktioniert YAML?</h3>



<p>YAML ist eine Dateiformatierungssprache, die mithilfe von Schlüssel-Wert-Paaren und Einrückungen arbeitet, um die Datenstruktur zu definieren. Ein YAML-Dokument besteht aus Blöcken von Daten, die in Hierarchien und Listen organisiert sind. Jeder Block enthält einen Schlüssel und einen dazugehörigen Wert, die durch einen Doppelpunkt voneinander getrennt sind. </p>



<h4 class="wp-block-heading">Hier ein Beispiel:</h4>



<pre class="wp-block-code"><code>name: John
age: 30
hobbies:
  - reading
  - hiking</code></pre>



<p>In diesem Beispiel enthält das YAML-Dokument drei Schlüssel-Wert-Paare: &#8222;name&#8220;, &#8222;age&#8220; und &#8222;hobbies&#8220;. Der Schlüssel &#8222;hobbies&#8220; hat eine Liste von Werten, die durch Einrückungen unter dem Schlüssel definiert sind.</p>



<p>Man verwendet es oft, um Konfigurationsdateien zu definieren, die Programmen lesen und interpretieren können. Ein Beispiel dafür ist eine Docker Compose-Datei, die eine Anwendung und ihre Abhängigkeiten in einer einzigen Datei definiert. Man kann YAML auch verwenden, um Daten in einer Datenbank oder einer anderen Dateiformatierung zu speichern.</p>



<h3 class="wp-block-heading">Warum ist YAML nützlich?</h3>



<p>Es bietet mehrere Vorteile gegenüber anderen Markup-Sprachen wie <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> oder <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">JSON</a>. Hier sind einige davon:</p>



<ul class="wp-block-list">
<li><strong>Lesbarkeit</strong>: Es ist sehr leicht lesbar und strukturiert, was es einfacher macht, Dokumente zu erstellen und zu bearbeiten.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Kompakt</strong>: Es ist im Vergleich zu <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> oder <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">JSON</a> sehr kompakt und benötigt weniger Code zum Definieren von Daten.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Einfache Verwendung</strong>: Man kann es schnell und einfach verwenden, ohne dass ein spezielles Werkzeug oder ein besonderes Wissen erforderlich ist.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Erweiterbarkeit</strong>: Es ist erweiterbar und man kann es leicht an die Bedürfnisse einer bestimmten Anwendung oder eines bestimmten Datenformats anpassen.</li>
</ul>



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



<p>YAML ist eine leistungsfähige, einfach lesbare und schreibbare Markup-Sprache, die in der Softwareentwicklung sehr nützlich ist. Es bietet eine Vielzahl von Vorteilen gegenüber anderen Markup-Sprachen und findet häufig bei der Definition von Konfigurationsdateien und Datenstrukturen Einsatz.</p>



<p>Lediglich die Fehlererkennung sollte man nicht außer Acht lassen. Denn YAML-Dokumente können fehlerhaft sein und es kann sich als schwierig erweisen, diese Fehler zu erkennen. Da es sehr auf die Einhaltung der Einrückungen angewiesen ist, kann ein kleiner Fehler in der Formatierung schnell zu Problemen führen. </p>



<p>Auch der Mangel an Expressivität ist nicht zu vernachlässigen. Obwohl es für die meisten Anwendungsfälle ausreichend ist, gibt es Fälle, in denen es an Expressivität mangelt. In einigen Fällen muss man komplexe Datenstrukturen definieren, die über die Fähigkeiten von YAML hinausgehen. In solchen Fällen bieten sich möglicherweise andere Sprachen wie <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">JSON</a> oder <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> an. </p>



<p>Trotz der erwähnten Nachteile bleibt es eine nützliche und beliebte Markup-Sprache in der Softwareentwicklung. Wenn man sich entscheidet, YAML zu verwenden, sollte man jedoch diese Nachteile berücksichtigen und geeig</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/09/erklaerung-yaml/">YAML &#8211; Klarheit und Einfachheit für strukturierte Daten und Konfigurationen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/09/erklaerung-yaml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1319</post-id>	</item>
		<item>
		<title>Swagger &#8211; Mühelose API-Dokumentation und Interaktion für effiziente Entwicklungsprozesse</title>
		<link>https://ceosbay.com/2023/04/08/erklaerung-swagger/</link>
					<comments>https://ceosbay.com/2023/04/08/erklaerung-swagger/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 08 Apr 2023 13:16:16 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Aktualisierung]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[APIS]]></category>
		<category><![CDATA[Basis]]></category>
		<category><![CDATA[Benutzerfreundlichkeit]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Generator]]></category>
		<category><![CDATA[Gestaltung]]></category>
		<category><![CDATA[Offen]]></category>
		<category><![CDATA[OpenAPI]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Produktivität]]></category>
		<category><![CDATA[Programmiere]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Quell]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Quelle]]></category>
		<category><![CDATA[Restful]]></category>
		<category><![CDATA[Soft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Swagger]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Ware]]></category>
		<category><![CDATA[Werkzeug]]></category>
		<category><![CDATA[Zeitersparnis]]></category>
		<category><![CDATA[Zusammenarbeit]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1328</guid>

					<description><![CDATA[<p>In der Welt der Programmierung ist es unerlässlich, effektiv und effizient zusammenzuarbeiten. Im Gegensatz zu seinem allgemeinen Bedeutungsgebrauch handelt es sich bei diesem Swagger um ein mächtiges Werkzeug. Primär zur Gestaltung, Dokumentation und Optimierung von &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/08/erklaerung-swagger/">Swagger &#8211; Mühelose API-Dokumentation und Interaktion für effiziente Entwicklungsprozesse</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In der Welt der Programmierung ist es unerlässlich, effektiv und effizient zusammenzuarbeiten. Im Gegensatz zu seinem allgemeinen Bedeutungsgebrauch handelt es sich bei diesem Swagger um ein mächtiges Werkzeug. Primär zur Gestaltung, Dokumentation und Optimierung von APIs (Application Programming Interfaces).</p>



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



<p>Swagger, auch bekannt als OpenAPI, ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>&#8211;<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> zur API-Entwicklung. Es bietet Entwicklern eine standardisierte Methode, um RESTful-APIs zu entwerfen, zu dokumentieren und zu testen. Es hilft Entwicklern dabei, die Kommunikation zwischen verschiedenen Anwendungen zu vereinfachen und fördert die Zusammenarbeit innerhalb und zwischen Teams.</p>



<h3 class="wp-block-heading">Die wichtigsten Komponenten:</h3>



<ol class="wp-block-list" type="1">
<li>Swagger Editor: Ein browserbasiertes Werkzeug zur Erstellung und Bearbeitung von OpenAPI-Spezifikationen.</li>



<li>Swagger UI: Eine benutzerfreundliche Oberfläche, die es Entwicklern und Endbenutzern ermöglicht, API-Dokumentationen interaktiv zu visualisieren und zu testen.</li>



<li>Swagger Codegen: Ein Generator, der serverseitigen und clientseitigen Code für APIs auf Basis der OpenAPI-Spezifikation erstellt.</li>
</ol>



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



<ol class="wp-block-list" type="1">
<li>Klare und präzise API-Dokumentation: Es ermöglicht Entwicklern, leicht verständliche und konsistente API-Dokumentationen zu erstellen. Dadurch wird die Kommunikation zwischen Teammitgliedern und die Integration von APIs in verschiedene Systeme erleichtert.</li>



<li>Zeitersparnis: Die automatische Generierung von serverseitigem und clientseitigem Code reduziert die manuelle Arbeit und beschleunigt die Entwicklung von APIs.</li>



<li>Fördert die Zusammenarbeit: Es erleichtert die Zusammenarbeit zwischen Frontend- und Backend-Entwicklern, indem es eine gemeinsame Sprache und Struktur bietet.</li>



<li>Einfache Aktualisierung und Pflege: Man kann Änderungen an einer API problemlos in die bestehende Dokumentation integrieren, ohne dass man die gesamte Dokumentation manuell aktualisieren muss.</li>



<li>Benutzerfreundlichkeit: Die visuelle Darstellung der API-Endpunkte durch Swagger UI erleichtert das Verständnis der API-Funktionalität und ermöglicht das Testen direkt aus der Dokumentation heraus.</li>
</ol>



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



<p>Swagger, im Programmierkontext, hat sich als unverzichtbares Werkzeug für Entwicklerteams etabliert, um effizient und effektiv RESTful-APIs zu entwickeln und zu verwalten. Mit seinen leistungsstarken Funktionen zur Gestaltung, Dokumentation und Zusammenarbeit trägt Swagger wesentlich zur Steigerung der Produktivität und Qualität von Softwareprojekten bei. Es ist nicht nur ein nützliches Tool, sondern auch ein Beispiel dafür, wie offene Standards und innovative Technologien die IT-Landschaft nachhaltig beeinflussen können.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/08/erklaerung-swagger/">Swagger &#8211; Mühelose API-Dokumentation und Interaktion für effiziente Entwicklungsprozesse</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/08/erklaerung-swagger/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1328</post-id>	</item>
		<item>
		<title>Lombok &#8211; Entwicklerproduktivität steigern und Boilerplate-Code eliminieren für sauberen, effizienten Java-Code</title>
		<link>https://ceosbay.com/2023/03/28/erklaerung-lombok/</link>
					<comments>https://ceosbay.com/2023/03/28/erklaerung-lombok/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 28 Mar 2023 14:15:28 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Builder]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Equal]]></category>
		<category><![CDATA[Equals]]></category>
		<category><![CDATA[Getter]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[JAR]]></category>
		<category><![CDATA[Log]]></category>
		<category><![CDATA[Logging]]></category>
		<category><![CDATA[Lombok]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[pom]]></category>
		<category><![CDATA[Programmiersprache]]></category>
		<category><![CDATA[Setter]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[ToString]]></category>
		<category><![CDATA[Wert]]></category>
		<category><![CDATA[Zeit]]></category>
		<category><![CDATA[Zip]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1260</guid>

					<description><![CDATA[<p>Lombok ist ein Open Source Java-Framework, um die Entwicklungszeit von Java-Anwendungen zu verkürzen und um die Codequalität im Allgemeinen zu verbessern. Ins Leben gerufen durch die beiden Entwickler Eugen Paraschiv und Roel Spilker. Die Idee &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/28/erklaerung-lombok/">Lombok &#8211; Entwicklerproduktivität steigern und Boilerplate-Code eliminieren für sauberen, effizienten Java-Code</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lombok ist ein Open Source <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Framework, um die Entwicklungszeit von <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Anwendungen zu verkürzen und um die Codequalität im Allgemeinen zu verbessern. Ins Leben gerufen durch die beiden Entwickler Eugen Paraschiv und Roel Spilker. Die Idee hinter Lombok ist es, Entwicklern das Schreiben von Boilerplate-Code zu ersparen, indem man Annotationen verwendet, um häufig verwendete Konstrukte wie Getter, Setter, Builder, Konstruktoren und vieles mehr automatisch zu generieren.</p>



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



<p>Lombok bietet eine Vielzahl von Funktionen, die Entwicklern helfen, effizienten Code zu schreiben. Hier sind einige der wichtigsten Funktionen:</p>



<p><strong>Getter und Setter:</strong></p>



<p>Lombok ermöglicht es Entwicklern, Getter und Setter-Methoden für Klassenvariablen automatisch zu generieren. Dies ist besonders nützlich, wenn man viele Klassenvariablen hat und nicht jedes Mal manuell Getter und Setter schreiben möchte.</p>



<p><strong>Konstruktoren:</strong></p>



<p>Entwickler können Konstruktoren für ihre Klassen automatisch generieren lassen. Dies ist besonders nützlich, wenn man eine Klasse mit vielen Variablen hat und einen Konstruktor erstellen möchte, der diese Variablen automatisch initialisiert.</p>



<p><strong>Builder:</strong></p>



<p>Mit dem Builder können Entwickler Builder-Klassen automatisch generieren lassen, die es einfach machen, komplexe Objekte zu erstellen. Der Builder generiert eine Methode für jede Klassenvariable, mit der man den Wert der Variable setzen kann. Sobald alle Variablen gesetzt sind, erfolgt die Rückgabe des Objekts.</p>



<p><strong>ToString:</strong></p>



<p>Entwickler können die toString-Methode automatisch generieren lassen. Dies macht es einfach, die Inhalte eines Objekts zu debuggen oder zu protokollieren.</p>



<p><strong>Equals und HashCode:</strong></p>



<p>Entwickler können equals- und hashCode-Methoden automatisch generieren lassen. Dies ist besonders nützlich, wenn man eine Klasse hat, die Verwendung in einer Hash-Map hat.</p>



<p><strong>Log:</strong></p>



<p>Es bietet eine Annotation, mit der Entwickler eine Logger-Variable automatisch generieren können. Dies macht es einfach, Protokolle in der Anwendung zu erstellen.</p>



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



<p>Um Lombok in einem Projekt zu verwenden, muss man es installieren. Es gibt mehrere Möglichkeiten, Lombok zu installieren, doch die einfachste Methode besteht darin, die Lombok-JAR-Datei in das Projektverzeichnis zu kopieren und diese dann zu der IDE-Konfiguration hinzuzufügen. Als IDE&#8217;s sind beispielsweise <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">IntelliJ</a> oder <a href="https://ceosbay.com/2023/03/19/erklaerung-eclipse/" target="_blank" rel="noreferrer noopener">Eclipse</a> zu erwähnen.</p>



<p>Wenn man <a href="https://ceosbay.com/2022/12/22/erklaerung-maven/" target="_blank" rel="noreferrer noopener">Maven</a> verwendet, kann man Lombok einfach zu der POM-File hinzufügen:</p>



<pre class="wp-block-code"><code>&lt;dependency&gt;

&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.projectlombok&lt;/groupId&gt;

&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;lombok&lt;/artifactId&gt;

&nbsp;&nbsp;&nbsp;&lt;version&gt;X.XX.XX&lt;/version&gt;

&nbsp;&nbsp;&nbsp;&lt;scope&gt;provided&lt;/scope&gt;

&lt;/dependency&gt;</code></pre>



<p>Sobald es installiert ist, kann man die verschiedenen Annotationen verwenden, um den Code zu verbessern.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/28/erklaerung-lombok/">Lombok &#8211; Entwicklerproduktivität steigern und Boilerplate-Code eliminieren für sauberen, effizienten Java-Code</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/28/erklaerung-lombok/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1260</post-id>	</item>
		<item>
		<title>MapStruct &#8211; Schnelle und sichere Objektmapper für saubere und wartungsfreundliche Java-Anwendungen</title>
		<link>https://ceosbay.com/2023/03/27/erklaerung-mapstruct/</link>
					<comments>https://ceosbay.com/2023/03/27/erklaerung-mapstruct/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 27 Mar 2023 17:01:36 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Bean]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Codes]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Funktionalität]]></category>
		<category><![CDATA[Gradle]]></category>
		<category><![CDATA[Head]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Integrieren]]></category>
		<category><![CDATA[Intelli]]></category>
		<category><![CDATA[J]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Kompilieren]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Map]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Mappings]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Minimal]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Seite]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Struct]]></category>
		<category><![CDATA[Typ]]></category>
		<category><![CDATA[Types]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1241</guid>

					<description><![CDATA[<p>MapStruct ist ein Java-basiertes Open Source Framework zur automatischen Generierung von Mappings zwischen Java-Objekten (Bean-Types). Es ist eine Alternative zu anderen Mapping-Frameworks wie Dozer, ModelMapper und Orika. Das Ziel von MapStruct ist es, die Entwicklung &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/27/erklaerung-mapstruct/">MapStruct &#8211; Schnelle und sichere Objektmapper für saubere und wartungsfreundliche Java-Anwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>MapStruct ist ein <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-basiertes Open Source <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> zur automatischen Generierung von Mappings zwischen <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Objekten (Bean-Types). Es ist eine Alternative zu anderen Mapping-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Frameworks</a> wie Dozer, ModelMapper und Orika. Das Ziel von MapStruct ist es, die Entwicklung von Mapping-Code zu vereinfachen und zu beschleunigen und dabei typsichere und fehlerfreie Mappings zu generieren.</p>



<p>MapStruct nutzt dabei die Annotationen, die auf den <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Objekten angebracht sind, um automatisch Mapping-Code (Bean-Mappings) zu generieren. Das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> generiert dabei standardmäßig Mappings zwischen Objekten mit gleichem Namen und Typ, es können aber auch eigene Mappings definiert werden. Dabei können auch komplexere Mappings erstellt werden, beispielsweise wenn Attribute in den Quell- und Zielobjekten unterschiedliche Namen haben oder wenn sie unterschiedliche Typen haben.</p>



<p>MapStruct ist sehr einfach zu verwenden und erfordert nur eine minimale Konfiguration. Es integriert sich nahtlos in das Build-System, da es als Annotation Processor fungiert und beim Kompilieren des Codes aufgerufen wird. Das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> ist relativ schnell und hat einen geringen Overhead, da es keine Laufzeit-Abhängigkeiten hat.</p>



<h3 class="wp-block-heading">Vorteile auf einem Blick</h3>



<ul class="wp-block-list">
<li>Schnelle Ausführung durch Verwendung einfacher Methodenaufrufe anstelle von Reflexion (Bedeutet: Ein Programm kennt seine eigene Struktur und kann diese modifizieren)</li>



<li>Kompilierzeit-Typensicherheit. Nur Objekte und Attribute, die einander zugeordnet sind – Es findet keine versehentliche Zuordnung einer Auftragsentität zu einem Kunden-DTO statt.</li>



<li>In sich geschlossener Code &#8211; keine Laufzeit-Abhängigkeiten</li>



<li>Eindeutige Fehlerberichte zur Erstellungszeit, wenn:&nbsp;<ul><li>Mappings unvollständig sind (Wenn nicht alle Zieleigenschaften gemappt sind)</li></ul>
<ul class="wp-block-list">
<li>Mappings fehlerhaft sind (Wenn es keine geeignete Mapping-Methode oder Typkonvertierung findet)</li>
</ul>
</li>



<li>Leicht zu debuggender Mapping-Code (Oder manuell editierbar, z. B. im Falle eines Fehlers im Generator)</li>
</ul>



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



<p>Zusammenfassend ist MapStruct ein leistungsfähiges und einfach zu bedienendes <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" rel="nofollow">Framework</a>, das die Entwicklung von Mapping-Code vereinfacht und beschleunigt. Vor allem, weil das Übertragen von Daten zwischen Objektmodellen meist eine wiederkehrende Aufgabe bei der Anwendungsentwicklung ist. Es ist eine gute Wahl, wenn man schnell und effizient Mapping-Funktionalitäten in Anwendungen integrieren möchte. Man kann es in Befehlszeilen-Builds (<a href="https://ceosbay.com/2022/12/22/erklaerung-maven/" target="_blank" rel="noreferrer noopener">Maven</a>, Gradle usw.) als auch in der bevorzugten IDE wie z.B. <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">IntelliJ</a> oder <a href="https://ceosbay.com/2023/03/19/erklaerung-eclipse/" target="_blank" rel="noreferrer noopener">Eclipse</a> verwenden.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/27/erklaerung-mapstruct/">MapStruct &#8211; Schnelle und sichere Objektmapper für saubere und wartungsfreundliche Java-Anwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/27/erklaerung-mapstruct/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1241</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>
		<item>
		<title>JUnit &#8211; Framework für automatisierte Tests und Qualitätssicherung</title>
		<link>https://ceosbay.com/2023/03/18/erklaerung-junit/</link>
					<comments>https://ceosbay.com/2023/03/18/erklaerung-junit/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 18 Mar 2023 20:41:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Bytecode]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coverage]]></category>
		<category><![CDATA[DBUnit]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[EE5]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Erweiterung]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Failure]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[J2EEUnit]]></category>
		<category><![CDATA[JAR]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Unit]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1073</guid>

					<description><![CDATA[<p>JUnit ist ein Unit-Testing-Framework für die Programmiersprache Java. JUnit spielt eine wichtige Rolle bei der Entwicklung der testgesteuerten Entwicklung und gehört zu der Familie von Unit-Test-Frameworks, die zusammen als xUnit bekannt sind und ihren Ursprung &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/18/erklaerung-junit/">JUnit &#8211; Framework für automatisierte Tests und Qualitätssicherung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>JUnit ist ein Unit-Testing-Framework für die Programmiersprache Java. JUnit spielt eine wichtige Rolle bei der Entwicklung der testgesteuerten Entwicklung und gehört zu der Familie von Unit-Test-Frameworks, die zusammen als xUnit bekannt sind und ihren Ursprung in SUnit haben.</p>



<p>JUnit wird zur Kompilierzeit als JAR gelinkt. Bei einem JAR handelt es sich um ein Java Archiv (umgangssprachlich wegen der Dateiendung auch JAR-Datei genannt) dient der Gliederung, Verteilung und Bereitstellung von Klassenbibliotheken und ausführbaren Programmen, die in der Programmiersprache Java erstellt wurden. Technisch ist es eine komprimierte Datei im ZIP-Format. Das Archiv enthält kompilierte Java-Klassen (Bytecode) und ggf. weitere Ressourcen. In der Regel umfasst es auch eine oder mehrere Dateien mit Metadaten. Diese haben fest vorgegebene Namen und Strukturen und liegen im Verzeichnis META-INF. Wie es genau funktioniert, schreibe ich in einem zukünftigen Beitrag. Auf jeden Fall kann man sich die Kurzbezeichnung des Archivs als Wortspiel mit dem englischen Wort jar (deutsch: „Gefäß“) ganz gut merken.</p>



<p>Die neueste Version des Frameworks, JUnit 5, befindet sich im Paket org.junit.jupiter. Die Vorgängerversionen JUnit 4 und JUnit 3 waren unter den Paketen org.junit bzw. junit.framework zu finden.</p>



<p>Eine im Jahr 2013 durchgeführte Umfrage unter 10.000 auf GitHub gehosteten Java-Projekten ergab, dass JUnit (gleichauf mit slf4j-api) die am häufigsten eingebundene externe Bibliothek ist. Jede Bibliothek wurde von 30,7 % der Projekte verwendet.</p>



<h3 class="wp-block-heading">Wie funktioniert JUnit?</h3>



<p>Ein JUnit-Test kennt nur zwei Ergebnisse: Entweder der Test gelingt (dann ist dieser „grün“) oder er misslingt (dann ist dieser „rot“). Das Misslingen kann als Ursache einen Fehler (Error) oder ein falsches Ergebnis (Failure) haben. Beides signalisiert via Exception (Eine Ausnahmesituation, normalerweise durch Fehler hervorgerufen). Der Unterschied zwischen den beiden Begriffen liegt darin, dass man Failures erwartet, während Errors eher unerwartet auftreten.&nbsp;</p>



<p>Technisch betrachtet, sind Failures mittels einer speziellen Exception namens AssertionFailedError gekennzeichnet. Die Interpretation aller übrigen Exceptions erfolgen vom JUnit-Framework durch Errors.</p>



<h3 class="wp-block-heading">JUnit im Softwareentwicklungsprozess</h3>



<p>JUnit ist ein wichtiges Hilfsmittel im Extreme Programming und unterstützt in diesem Zusammenhang die Idee des Extreme Testing. Als Programmierer schreibt man zuerst einen automatisch wiederholbaren (JUnit-)Test und dann den zu testenden Code.</p>



<p>Der Test selbst ist ebenfalls ein Stück Software und ebenso wie der zu testende Code ist dafür die Programmierung notwendig.</p>



<p>Wenn man zu einem späteren Zeitpunkt den Code eines anderen Programmierers zum Ändern beabsichtigt, so ruft man zuerst alle JUnit-Tests auf, um sich zu vergewissern, dass der Code vor der Änderung fehlerfrei ist. Dann führt man die Änderung durch und ruft die JUnit-Tests erneut auf. Misslingen diese, so hat man die Erkenntnis, dass man selbst Fehler gemacht hat und muss diese korrigieren. Dieser Zyklus wiederholt sich so lange, bis alle JUnit-Tests wieder fehlerfrei durchlaufen.</p>



<p>Dieses Verfahren wird auch „testgetriebene Entwicklung“ (englisch test-driven software development) genannt und zählt zu den agilen Methoden. Die Idee dabei ist, fehlerarmen Code zu erzeugen, indem man nichts implementiert, was man nicht auch testet. Entstehen Testfälle erst nach der Entwicklung des Codes, so ist die Wahrscheinlichkeit höher, wichtige Testfälle zu übersehen. Doch darüber habe ich bereits hier einen Artikel geschrieben.</p>



<h3 class="wp-block-heading">Plugins und Erweiterungen für JUnit</h3>



<p>Eine Implementierung von JUnit für Jakarta EE ist Cactus (ehemals J2EEUnit) aus dem Jakarta-Projekt. Seit Java EE 5 haben sich sogenannte Out-of-container-Frameworks (zum Beispiel EJB3Unit) etabliert, die eine Ausführung von Tests außerhalb eines Containers erlauben.</p>



<p>Erweiterungen für JUnit dienen in der Regel für den Einsatz in spezifischen Bereichen (beispielsweise httpsUnit für Webentwicklung, DBUnit für Datenbankentwicklung). Darüber hinaus gibt es noch Plugins für Entwicklungsumgebungen, die den Einsatz innerhalb der Entwicklungsumgebung ermöglichen beziehungsweise erweitern (beispielsweise Infinitest für kontinuierliches Testen oder DJUnit für Berechnung der Code-Abdeckung, englisch Code Coverage, der Tests).</p>



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



<p>Bei der Testabdeckung geht es um das Verhältnis an tatsächlich getroffenen Aussagen eines Tests gegenüber den theoretisch möglich treffbaren Aussagen bzw. der Menge der gewünschten treffbaren Aussagen. Die Testabdeckung spielt als Metrik zur Qualitätssicherung und zur Steigerung der Qualität insbesondere im Maschinenbau und der Softwaretechnik eine große Rolle.</p>



<p>Die Testabdeckung lässt sich durch eine Erhöhung der Zahl an Messungen, Stichproben und Testfällen verbessern. Begrenzt wird die Testabdeckung in der Praxis jedoch durch die Kosten, die mit jedem Test verbunden sind. Doch dies ist ein komplexes Thema, welches ich gerne in einem separaten Beitrag thematisiere.</p>



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



<p>JUnit ist ein einfach zu benutzendes und leichtgewichtiges Framework für die Entwicklung von Softwaretests. Eine Integration in verschiedene IDE’s ist möglich. Dies thematisiere ich aber in den Artikeln zu den einzelnen IDE’s. Diese verlinke ich dann selbstverständlich auch hier. Die Ausführung einzelner Tests oder kompletter Testsuiten ist im Entwicklungsprozess jederzeit möglich. Nur das Programmieren der Tests kann man damit naturgemäß nicht leisten. Jedoch ist die Einstiegshürde für einen relativ guten Entwickler minimal. Es ist dabei sehr zu empfehlen, möglichst frühzeitig mit der Erstellung von Tests zu beginnen! In der Literatur beginnt die Erstellung der Tests, besonders im agilen Umfeld. Zeitgleich mit der Entwicklung selbst. Sie sind der wichtigste Bestandteil der Qualitätssicherung. Insbesondere spätere Änderungen an der Software im Rahmen funktionaler Erweiterungen oder eines <a href="https://ceosbay.com/2023/04/10/erklaerung-refactoring/">Refactorings</a> sind ohne vorhandene <a href="https://ceosbay.com/2023/10/20/regressionstest-qualitaet-zaehlt-sicherheit-garantiert/">Regressionstests</a> oftmals gar nicht durchführbar.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/18/erklaerung-junit/">JUnit &#8211; Framework für automatisierte Tests und Qualitätssicherung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/18/erklaerung-junit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1073</post-id>	</item>
	</channel>
</rss>
