<?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>Automation Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/automation/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/automation/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Fri, 21 Feb 2025 07:26:12 +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>Automation Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/automation/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Pestizid-Paradoxon &#8211; Resistenz von Bugs und Fehlern</title>
		<link>https://ceosbay.com/2023/07/15/pestizid-paradoxon-resistenz-von-bugs-und-fehlern/</link>
					<comments>https://ceosbay.com/2023/07/15/pestizid-paradoxon-resistenz-von-bugs-und-fehlern/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 15 Jul 2023 05:55:27 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Agil]]></category>
		<category><![CDATA[agile Entwicklung]]></category>
		<category><![CDATA[Analog]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[DevSecOps]]></category>
		<category><![CDATA[Ebenen]]></category>
		<category><![CDATA[Fälle]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Fehlerursache]]></category>
		<category><![CDATA[Fehlerwirkung]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Konzept]]></category>
		<category><![CDATA[Manifest]]></category>
		<category><![CDATA[Pestizid]]></category>
		<category><![CDATA[Pestizid-Paradoxon]]></category>
		<category><![CDATA[Pestizide]]></category>
		<category><![CDATA[Phänomen]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Soft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software-Sicherheit]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testfallentwicklung]]></category>
		<category><![CDATA[Teststrategie]]></category>
		<category><![CDATA[Ursache]]></category>
		<category><![CDATA[Ware]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1880</guid>

					<description><![CDATA[<p>Im komplexen Bereich der Softwareentwicklung stößt man häufig auf überraschende Parallelen zu anderen Disziplinen. Eines dieser interessanten Phänomene ist das Pestizid-Paradoxon, das ursprünglich aus der Welt der Insektenbekämpfung stammt. Aber wie passt dieses Konzept in &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/07/15/pestizid-paradoxon-resistenz-von-bugs-und-fehlern/">Pestizid-Paradoxon &#8211; Resistenz von Bugs und Fehlern</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im komplexen Bereich der Softwareentwicklung stößt man häufig auf überraschende Parallelen zu anderen Disziplinen. Eines dieser interessanten Phänomene ist das Pestizid-Paradoxon, das ursprünglich aus der Welt der Insektenbekämpfung stammt. Aber wie passt dieses Konzept in die Welt der Bits und Bytes? Die Antwort ist einfacher als gedacht.</p>



<p>Die Wurzeln des Pestizid-Paradoxons liegen in der Landwirtschaft. Wenn ein Bauer ständig dasselbe Pestizid verwendet, um seine Ernte zu schützen, entwickeln schließlich die Schädlinge, die überleben, eine Immunität gegen dieses spezifische Pestizid. Im Laufe der Zeit verliert das Pestizid seine Wirksamkeit. Analog dazu, in der Softwareentwicklung, wenn Entwickler und Tester immer wieder dieselben Tests anwenden, werden sie nur die Fehler finden und beheben, die diese Tests identifizieren können.</p>



<p>Das Pestizid-Paradoxon in der Softwareentwicklung verweist also auf die Notwendigkeit, kontinuierlich neue und verschiedene Testfälle zu erstellen. In der modernen agilen Entwicklung (Siehe Beitrag &#8222;<a href="https://ceosbay.com/2023/03/20/erklaerung-das-agile-manifest/">Agiles Manifest</a>&#8222;), bei der man Software kontinuierlich ändert und verbessert, muss das Testen Schritt halten und sich anpassen.</p>



<p>Mit der Zeit entdecken Testfälle weniger und weniger Bugs, genau wie Pestizide, die ihre Wirksamkeit gegen Schädlinge verlieren. Um Qualität und Sicherheit zu gewährleisten, muss man die Testszenarien daher regelmäßig überprüfen und aktualisieren. Ebenso muss man neue Tests entwickeln, um auf veränderte oder neue Funktionen zu reagieren.</p>



<p>Ein weiterer zentraler Aspekt des Pestizid-Paradoxons in der Softwareentwicklung ist die Notwendigkeit einer vielfältigen Teststrategie. Dazu gehören Funktionstests, Integrationstests, Leistungstests, Sicherheitstests und Benutzerakzeptanztests. Ein vielfältiges Test-Portfolio, das verschiedene Aspekte und Ebenen der Software abdeckt, erhöht die Wahrscheinlichkeit, dass mehr Fehler entdeckt und behoben werden.</p>



<p>Das Pestizid-Paradoxon ist somit eine starke Erinnerung daran, dass Veränderung in der Softwareentwicklung nicht nur unausweichlich, sondern notwendig ist. Es lehrt uns, dass wir uns nicht auf bewährte Testverfahren verlassen sollten. Es macht Sinn, ständig neue Methoden und Ansätze zu entwickeln und anzuwenden, um Softwarequalität und -sicherheit zu gewährleisten.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/07/15/pestizid-paradoxon-resistenz-von-bugs-und-fehlern/">Pestizid-Paradoxon &#8211; Resistenz von Bugs und Fehlern</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/07/15/pestizid-paradoxon-resistenz-von-bugs-und-fehlern/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1880</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>Spring Boot &#8211; Schnell und einfach Webanwendungen erstellen</title>
		<link>https://ceosbay.com/2023/03/22/erklaerung-spring-boot/</link>
					<comments>https://ceosbay.com/2023/03/22/erklaerung-spring-boot/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Wed, 22 Mar 2023 17:12:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Big-Data]]></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[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Abhängigkeiten]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Boot]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Dependencies]]></category>
		<category><![CDATA[Dependency]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frei]]></category>
		<category><![CDATA[Freie]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[Injizieren]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Lesitung]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Modular]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Optionated]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Webanwendungen]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1057</guid>

					<description><![CDATA[<p>Java Spring Framework ist ein beliebtes Open-Source&#8211;Framework zur Erstellung eigenständiger, produktionsreifer Anwendungen, die auf der Java Virtual Machine (JVM) laufen. Spring Boot ist ein Tool, dass die Entwicklung von Webanwendungen und Microservices mit Spring Framework &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/22/erklaerung-spring-boot/">Spring Boot &#8211; Schnell und einfach Webanwendungen erstellen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> ist ein beliebtes <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 Erstellung eigenständiger, produktionsreifer Anwendungen, die auf der <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> Virtual Machine (JVM) laufen. Spring Boot ist ein Tool, dass die Entwicklung von Webanwendungen und Microservices mit Spring Framework durch drei Kernfunktionen beschleunigt und einfacher macht.</p>



<ol class="wp-block-list" type="1">
<li>Autokonfiguration</li>



<li>Ein Opinionated-Konfigurationsansatz</li>



<li>Die Fähigkeit, eigenständige Anwendungen zu erstellen</li>
</ol>



<p>Das Zusammenspiel dieser Funktionen ermöglicht die Installation einer Spring basierten Anwendung mit minimalem Konfigurations- bzw. Einrichtungsaufwand, worauf ich nachfolgend näher eingehe. Mit einem breiten Spektrum an Funktionalitäten ist es eine ganzheitliche Lösung, wobei die Entkopplung der Applikationskomponenten im Vordergrund steht.</p>



<h3 class="wp-block-heading">Was ist das Spring Framework und was stellt Spring Boot damit an?</h3>



<p>Ein Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> bietet eine Abhängigkeitsinjektionsfunktion, mit der Objekte ihre eigenen Abhängigkeiten definieren können.Der Spring-Container injiziert diese nachfolgend. So kann man als Entwickler modulare Anwendungen erstellen, die aus losen verbundenen Komponenten bestehen. Diese eignen sich ideal für Microservices und verteilte Netzanwendungen.</p>



<p>Das Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> bietet auch die integrierte Unterstützung für typische Aufgaben, die eine Anwendung ausführen muss. Beispiele hierfür sind Datenbindung, Typumsetzung, Prüfung und Bewertung, Ausnahmebehandlung, Ressourcen- und Ereignismanagement und vielem mehr. Darüber hinaus lässt es sich mit verschiedenen <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> EE-Technologien wie RMI (Remote Method Invocation), AMQP (Advanced Message Queuing Protocol), <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> Web Services und anderen integrieren. Alles in allem liefert das Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> Entwicklern alle Tools und Funktionen, die man benötigt, um lose verbundene, plattformunabhängige <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> EE-Anwendungen zu erstellen, die man in den verschiedensten Umgebungen ausführen kann. So leistungsfähig und umfassend das Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> auch ist, so viel Zeit und Know-How erfordert es, Spring-Anwendungen sauber zu konfigurieren, einzurichten und bereitzustellen. Spring Boot verringert diesen Aufwand mit den bereits zu Beginn erwähnten drei wichtigen Funktionen.</p>



<h3 class="wp-block-heading">Autokonfiguration in Spring Boot</h3>



<p>Unter der Autokonfiguration verstehen man die Initialisierung von Anwendungen mit voreingestellten Abhängigkeiten ohne den manuellen Eingriff eines Entwicklers. Da <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> Spring Boot über integrierte Autokonfigurationsfunktionen verfügt, konfiguriert es sowohl das zugrunde liegende Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> als auch die Pakete von Drittanbietern automatisch auf der Grundlage der eigenen individuellen Einstellungen. Dies trägt auch zur grundlegenden Fehlervermeidung bei. Auch wenn man die Standardeinstellungen nach Abschluss der Initialisierung überschreiben kann, ermöglicht die Autokonfigurationsfunktion von <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> Spring Boot einen schnellen Start bei der Entwicklung von Spring-basierten Anwendungen. Dies reduziert die Möglichkeit menschlicher Fehler.</p>



<h3 class="wp-block-heading">Opinionated-Konfigurationsansatz</h3>



<p>Der Optionated-Ansatz bei Spring Boot findet Anwendung beim Hinzufügen und bei der Konfiguration von Steuer-Abhängigkeiten, basierend auf den Projektanforderungen. Spring Boot wählt nach eigenem Ermessen die passenden Pakete zur Installation aus und setzt auch die Standardwerte, ohne dass ein nachträgliches manuelles Eingreifen erforderlich ist.</p>



<p>Man kann die Anforderungen des jeweiligen Projekts während des Initialisierungsprozesses definieren. Dabei wählt man zwischen mehreren Starter-Abhängigkeiten (den Spring Starters) die typische Anwendungsfälle abdecken. Man startet den Spring Boot Initializr (Das ist kein Rechtschreibfehler 😉 ), indem man ein einfaches Webformular ausfüllt. Alles erst einmal ohne zu programmieren und ohne Code.</p>



<p>Mit der Starter-Abhängigkeit „Spring Web&#8220; kann man beispielsweise Spring-basierte Webanwendungen mit minimaler Konfiguration erstellen, indem man im Projekt alle erforderlichen Abhängigkeiten – wie den Apache Tomcat Webserver – hinzufügt. „Spring Security&#8220; ist eine weitere vielfach eingesetzte Starter-Abhängigkeit, die automatisch Authentifizierungs- und Zugriffskontrollfunktionen zur Verfügung stelllt. Spring Boot enthält von Haus aus über 50 Spring-Starter, und viele weitere Starter von Drittanbietern sind ebenfalls verfügbar.</p>



<h3 class="wp-block-heading">Eigenständige Anwendungen</h3>



<p>Spring Boot hilft Entwicklern, Anwendungen zu erstellen, die einfach funktionieren. Insbesondere kann man damit eigenständige Anwendungen erstellen, die ohne einen externen Webserver auskommen, indem man einen Webserver wie Tomcat oder Netty während des Initialisierungsprozesses in der eigenen Anwendung einbettet. So kann man die Anwendung auf jeder Plattform starten, indem man einfach auf den Befehl „Ausführen&#8220; klickt. Man kann aber auch auf diese Funktion verzichten, indem man dies in der Konfiguration deaktiviert.</p>



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



<p>In der Praxis ist die Verwendung von Spring Boot durchaus zu empfehlen. Außer man hat vor, eine sehr spezielle Konfiguration zu implementieren. Man kann weiterhin das vielfach eingesetzte Annotationssystem von Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> verwenden, mit dem man auf einfache Weise zusätzliche Abhängigkeiten (deren Abdeckung nicht von Spring Starters gewährleistet ist) in die Anwendung implementieren kann. Auch hat man weiterhin Zugriff auf alle Spring <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a>-Funktionen, einschließlich der einfachen Ereignisverarbeitung, Prüfung und Bewertung, Datenbindung, Typumsetzung und der integrierten Sicherheits- und Testfunktionen. Kurz zusammengefasst &#8211; Wenn die Abdeckung des Projektumfangs lediglich ein Spring Starter gewährleistet, kann Spring Boot die Entwicklung signifikant rationalisieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/22/erklaerung-spring-boot/">Spring Boot &#8211; Schnell und einfach Webanwendungen erstellen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/22/erklaerung-spring-boot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1057</post-id>	</item>
		<item>
		<title>jQuery &#8211; Die schnelle und leichte Werkzeug Bibliothek</title>
		<link>https://ceosbay.com/2023/03/09/erklaerung-jquery/</link>
					<comments>https://ceosbay.com/2023/03/09/erklaerung-jquery/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 09 Mar 2023 21:00:00 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Anwendungen]]></category>
		<category><![CDATA[Applikationen]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Bibliothek]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Document]]></category>
		<category><![CDATA[Dokument]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Erweiterung]]></category>
		<category><![CDATA[Erweiterungen]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[J]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[leistungsfähig]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[Webanwendungen]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1146</guid>

					<description><![CDATA[<p>jQuery ist eine Open Source JavaScript-Bibliothek, die es Entwicklern erleichtert, interaktive Webanwendungen zu erstellen. Es wurde erstmals im Jahr 2006 veröffentlicht und ist seitdem zu einer der am häufigsten verwendeten JavaScript-Bibliotheken geworden. jQuery ermöglicht es &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/09/erklaerung-jquery/">jQuery &#8211; Die schnelle und leichte Werkzeug Bibliothek</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>jQuery ist eine <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliothek, die es Entwicklern erleichtert, interaktive Webanwendungen zu erstellen. Es wurde erstmals im Jahr 2006 veröffentlicht und ist seitdem zu einer der am häufigsten verwendeten <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliotheken geworden. jQuery ermöglicht es Entwicklern, häufig wiederkehrende Aufgaben mit weniger Code auszuführen und unterstützt sie dabei, plattformübergreifende Anwendungen zu entwickeln.</p>



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



<p>jQuery wurde im Jahr 2006 von John Resig entwickelt. Resig war ein Entwickler bei Mozilla und arbeitete an der Entwicklung von <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>. Er erkannte jedoch, dass die vorhandenen <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Frameworks</a> zu umfangreich und schwerfällig waren und dass es schwierig war, plattformübergreifende Anwendungen zu entwickeln, die auf verschiedenen Browsern und Geräten funktionieren.</p>



<p>Um diese Herausforderung zu lösen, begann Resig damit, eine neue <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliothek zu entwickeln, die schlanker und schneller als vorhandene <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Frameworks</a> war. Er nannte diese Bibliothek &#8222;jQuery&#8220; und veröffentlichte sie im Januar 2006.</p>



<p>Das Ziel war es, Entwicklern eine einfache und intuitive Methode zu bieten, um mit dem DOM (Document Object Model) zu arbeiten und interaktive Webanwendungen zu erstellen. jQuery sollte auch die Entwicklung von plattformübergreifenden Anwendungen erleichtern und dafür sorgen, dass Anwendungen auf allen gängigen Browsern gleich aussehen und funktionieren.</p>



<p>Dank seiner schlanken und schnellen Natur wurde jQuery schnell zu einer der am häufigsten verwendeten <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliotheken in der Webentwicklung. Es hat die Art und Weise, wie Entwickler <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Code schreiben und Webanwendungen entwickeln, grundlegend verändert.</p>



<p>Heute ist es weiterhin eine der am häufigsten verwendeten <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliotheken und wird von einer großen Entwicklergemeinschaft unterstützt, die ständig neue Funktionen und Erweiterungen entwickelt.</p>



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



<p>Einer der Hauptvorteile von jQuery ist die Fähigkeit, das Schreiben von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Code zu vereinfachen. Es bietet eine Vielzahl von Funktionen, die das Schreiben von Code für häufige Aufgaben wie DOM-Manipulationen, Event-Handling und AJAX-Anfragen erleichtern. Durch die Verwendung von jQuery können Entwickler schneller und effizienter arbeiten und so die Entwicklungsdauer ihrer Anwendungen verkürzen.</p>



<p>jQuery bietet auch eine Cross-Browser-Unterstützung, die es Entwicklern ermöglicht, plattformübergreifende Anwendungen zu entwickeln, ohne sich um Browser-Inkompatibilitäten kümmern zu müssen. Die Bibliothek stellt sicher, dass Anwendungen auf allen gängigen Browsern gleich aussehen und funktionieren.</p>



<p>Ein weiterer Vorteil von jQuery ist die umfangreiche Dokumentation und die große Entwickler-Community. Die Bibliothek ist seit vielen Jahren in der Webentwicklung im Einsatz und es gibt eine Vielzahl von Dokumentationen, Tutorials, Foren und anderen Ressourcen, die Entwicklern helfen, die Bibliothek zu nutzen. Die Community bietet auch eine Vielzahl von Plugins und Erweiterungen, die Entwickler verwenden können, um ihre Anwendungen zu erweitern.</p>



<p>jQuery bietet auch eine große Anzahl von Plugins und Erweiterungen, die Entwickler verwenden können, um ihre Anwendungen zu erweitern. Diese Plugins bieten zusätzliche Funktionen und ermöglichen es Entwicklern, die Bibliothek weiter anzupassen und zu erweitern.</p>



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



<p>Alles in allem ist jQuery eine sehr nützliche und leistungsfähige <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Bibliothek, die es Entwicklern ermöglicht, Webanwendungen schneller und effizienter zu entwickeln. Es bietet eine Vielzahl von Funktionen und Unterstützung für plattformübergreifende Anwendungen. Durch die sehr umfangreiche Dokumentation und die große Entwickler-Community ist es auch relativ einfach zu erlernen bzw. am Ende des Tages zu verwenden. Wenn man Webanwendungen entwickelt, kann man es durchaus in Betracht ziehen, jQuery in die Tool-Box aufzunehmen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/09/erklaerung-jquery/">jQuery &#8211; Die schnelle und leichte Werkzeug Bibliothek</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/09/erklaerung-jquery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1146</post-id>	</item>
		<item>
		<title>Jest &#8211; Test-Framework für Testautomatisierung</title>
		<link>https://ceosbay.com/2023/03/07/erklaerung-jest/</link>
					<comments>https://ceosbay.com/2023/03/07/erklaerung-jest/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 20:03:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Ausführung]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Christoph]]></category>
		<category><![CDATA[Codeabdeckung]]></category>
		<category><![CDATA[Codes]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jest]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[Nakazawa]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Snapshot]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Stub]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1075</guid>

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



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



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



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



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



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



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



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



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



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



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



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



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



<p>Insgesamt ist Jest ein leistungsstarkes Testframework für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen, dass eine breite Palette von Funktionen bietet, um Entwicklern dabei zu helfen, effektive und zuverlässige Tests für ihre Anwendungen zu schreiben. Es ist eine wichtige Technologie für die Entwicklung moderner <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen und viele Entwickler sowie Unternehmen weltweit nutzen es.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/07/erklaerung-jest/">Jest &#8211; Test-Framework für Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/07/erklaerung-jest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1075</post-id>	</item>
		<item>
		<title>DevOps &#8211; Entwickeln, bereitstellen und verbessern</title>
		<link>https://ceosbay.com/2023/03/02/erklaerung-devops/</link>
					<comments>https://ceosbay.com/2023/03/02/erklaerung-devops/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 02 Mar 2023 18:30:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></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[Automation]]></category>
		<category><![CDATA[CD]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Entwickeln]]></category>
		<category><![CDATA[Experimente]]></category>
		<category><![CDATA[Experimentieren]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Fordern]]></category>
		<category><![CDATA[Geschwindigkeit]]></category>
		<category><![CDATA[Grafana]]></category>
		<category><![CDATA[Herausforderungen]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Investition]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Kosten]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Kulturell]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Philosophie]]></category>
		<category><![CDATA[Schnell]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwareentwicklungsphilosophie]]></category>
		<category><![CDATA[Stack]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Technologien]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Zusammenarbeit]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1369</guid>

					<description><![CDATA[<p>Im Zeitalter der digitalen Transformation ist der Begriff &#8222;DevOps&#8220; aus dem Bereich der Softwareentwicklung kaum mehr wegzudenken. Die traditionellen Methoden der Softwareentwicklung stoßen zunehmend an ihre Grenzen und man ersetzt sie durch innovative Ansätze wie &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/02/erklaerung-devops/">DevOps &#8211; Entwickeln, bereitstellen und verbessern</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im Zeitalter der digitalen Transformation ist der Begriff &#8222;DevOps&#8220; aus dem Bereich der Softwareentwicklung kaum mehr wegzudenken. Die traditionellen Methoden der Softwareentwicklung stoßen zunehmend an ihre Grenzen und man ersetzt sie durch innovative Ansätze wie DevOps. Aber was genau bedeutet DevOps und warum ist es für erfolgreiche Softwareentwicklung so wichtig? Heute beschäftige ich mich mit grundlegenden Prinzipien, Vorteilen sowie Nachteilen und Best Practices von DevOps.</p>



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



<p>DevOps ist ein Kofferwort, das aus den Begriffen &#8222;Development&#8220; (Entwicklung) und &#8222;Operations&#8220; (Betrieb) zusammengesetzt ist. Es beschreibt eine Philosophie, Kultur und Praxis, die darauf abzielt, die Zusammenarbeit und Kommunikation zwischen Entwicklern (Dev) und IT-Experten im Betrieb (Ops) zu verbessern. Der Ansatz ermöglicht es, Software schneller und mit höherer Qualität zu entwickeln, bereitzustellen und zu überwachen.</p>



<h3 class="wp-block-heading">Grundprinzipien von DevOps</h3>



<ol class="wp-block-list" type="1">
<li><strong>Zusammenarbeit:</strong>&nbsp;DevOps legt Wert auf eine enge Zusammenarbeit zwischen den verschiedenen Teams, um Wissensaustausch, gegenseitiges Verständnis und gemeinsame Verantwortung zu fördern.</li>



<li><strong>Automatisierung:</strong>&nbsp;Die Automatisierung von Prozessen spielt eine zentrale Rolle in DevOps, um manuelle Aufgaben zu reduzieren und um Fehler zu minimieren.</li>



<li><strong>Continuous Integration (CI):&nbsp;</strong>CI ist das automatisierte Zusammenführen von Codeänderungen aus unterschiedlichen Entwicklungsarbeiten. Dadurch kann man frühzeitig mögliche Konflikte oder Fehler erkennen und beheben.</li>



<li><strong>Continuous Delivery (CD):</strong>&nbsp;Hierbei handelt es sich um die fortlaufende Bereitstellung von Software in verschiedenen Umgebungen (Test (Siehe <a href="https://ceosbay.com/2023/03/13/erklaerung-test-driven-development/" target="_blank" rel="noreferrer noopener">TDD</a> und <a href="https://ceosbay.com/2023/03/12/erklaerung-behavior-driven-development/" target="_blank" rel="noreferrer noopener">BDD</a>)), Staging, Produktion) zur Validierung und schnellen Bereitstellung von Updates.</li>



<li><strong>Feedback und Lernen:</strong>&nbsp;DevOps ermutigt Teams, kontinuierlich Feedback zu sammeln und daraus zu lernen, um stetige Verbesserungen in der Softwareentwicklung zu erzielen.</li>
</ol>



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



<ol class="wp-block-list" type="1">
<li><strong>Schnellere Auslieferung bzw. Markteinführung:</strong>&nbsp;Durch die verbesserte Zusammenarbeit und Automatisierung von Prozessen kann man Software schneller entwickeln und ausliefern, was zu einem Wettbewerbsvorteil führt.</li>



<li><strong>Höhere Qualität:</strong>&nbsp;Man kann Fehler frühzeitig entdecken und beheben, wodurch man die Qualität der Software verbessert.</li>



<li><strong>Reduzierte Kosten:</strong>&nbsp;Durch effizientere Prozesse und Automatisierung kann man die Kosten senken und Ressourcen optimal nutzen.</li>



<li><strong>Erhöhte Flexibilität:</strong>&nbsp;Die enge Zusammenarbeit und ständige Verbesserung der Prozesse ermöglichen es Unternehmen, schneller auf Veränderungen zu reagieren und Innovationen voranzutreiben.</li>
</ol>



<h3 class="wp-block-heading">Nachteile von DevOps</h3>



<p>Obwohl es zahlreiche Vorteile für Unternehmen und Entwicklerteams bietet, gibt es auch einige Nachteile, die man bei der Einführung und Umsetzung dieses Ansatzes berücksichtigen sollte:</p>



<ol class="wp-block-list" type="1">
<li><strong>Kulturelle Herausforderungen:</strong>&nbsp;Eine der größten Herausforderungen bei der Implementierung von DevOps ist der Wandel der Unternehmenskultur. Die Zusammenarbeit zwischen Entwicklern und IT-Experten im Betrieb erfordert eine Änderung von Denkmustern und Arbeitsweisen, was nicht immer einfach ist.</li>



<li><strong>Anfangsinvestition:</strong>&nbsp;Um es erfolgreich umzusetzen, müssen Unternehmen oft in neue Tools, Technologien und Schulungen investieren. Dies kann insbesondere für kleinere Unternehmen eine finanzielle Belastung darstellen.</li>



<li><strong>Komplexität:</strong>&nbsp;Die Einführung von DevOps kann zu erhöhter Komplexität führen, da man zusätzliche Prozesse und Tools in den Entwicklungs- und Betriebsablauf integrieren muss. Dies erfordert eine umfangreiche Planung und Koordination, um effizient und erfolgreich zu sein.</li>



<li><strong>Widerstand im Team:</strong>&nbsp;Nicht alle Teammitglieder sind von Anfang an von den Vorteilen von DevOps überzeugt. Einige können skeptisch sein oder den Wandel ablehnen, was zu Konflikten und Spannungen innerhalb des Teams führen kann.</li>



<li><strong>Sicherheitsrisiken:</strong>&nbsp;Trotz des DevSecOps-Ansatzes, bei dem man Sicherheit in den Entwicklungsprozess integriert, kann die Einführung von DevOps zu zusätzlichen Sicherheitsrisiken führen. Zum Beispiel kann die automatisierte Bereitstellung von Code unbeabsichtigte Sicherheitslücken oder Fehler aufweisen, die Angreifern ausnutzen könnten.</li>



<li><strong>Kontinuierliche Anpassung:</strong>&nbsp;Da DevOps ein agiles Vorgehen erfordert, müssen sich Teams ständig an neue Technologien, Methoden und Prozesse anpassen. Dies kann anstrengend und zeitaufwändig sein und dazu führen, dass sich einige Mitarbeiter überfordert fühlen.</li>
</ol>



<p>Um diese Nachteile zu minimieren, ist es wichtig, bei der Einführung von DevOps eine gut durchdachte Strategie zu verfolgen, die alle Aspekte des Prozesses berücksichtigt. Offene Kommunikation, Schulungen und das Sammeln von Feedback sind entscheidend, um ein erfolgreiches DevOps-Umfeld zu schaffen und die möglichen Nachteile zu bewältigen.</p>



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



<ol class="wp-block-list" type="1">
<li><strong>Kultur der Zusammenarbeit fördern:</strong>&nbsp;Es ist entscheidend, ein Arbeitsumfeld zu schaffen, in dem Entwickler und IT-Experten im Betrieb offen kommunizieren und zusammenarbeiten können.</li>



<li><strong>Tools und Technologien nutzen:</strong>&nbsp;Für eine erfolgreiche Implementierung von DevOps ist es wichtig, geeignete Tools und Technologien einzusetzen, um Prozesse zu automatisieren und die Zusammenarbeit zu erleichtern. Dazu zählen CI/CD-Tools wie <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/" target="_blank" rel="noreferrer noopener">Jenkins</a> oder GitLab bzw. <a href="https://ceosbay.com/2022/11/19/erklaerung-github/" target="_blank" rel="noreferrer noopener">GitHub</a>, Container-Technologien wie <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/" target="_blank" rel="noreferrer noopener">Docker</a> und <a href="https://ceosbay.com/2022/12/24/erklaerung-kubernetes/" target="_blank" rel="noreferrer noopener">Kubernetes</a> sowie Monitoring- und Logging-Tools wie Grafana und ELK Stack.</li>



<li><strong>Infrastruktur als Code (IaC) einsetzen:</strong>&nbsp;Mit IaC können Entwickler und Betriebsteams die Infrastruktur ähnlich wie bei Softwareanwendungen entwickeln, verwalten und versionieren. Dadurch kann man die Konsistenz und Reproduzierbarkeit der Umgebungen gewährleisten. Beispiele für IaC-Tools sind Terraform, Ansible und Chef.</li>



<li><strong>Monitoring und Feedback:</strong>&nbsp;Um kontinuierlich zu lernen und Verbesserungen voranzutreiben, sollten Unternehmen umfangreiches Monitoring einsetzen, um Probleme frühzeitig zu erkennen und Feedback in den Entwicklungsprozess einfließen zu lassen.</li>



<li><strong>Sicherheit integrieren:</strong>&nbsp;Man sollte auch den Aspekt der Sicherheit berücksichtigen, indem Entwickler und Betriebsteams eng mit Sicherheitsexperten zusammenarbeiten. Der Ansatz &#8222;DevSecOps&#8220; betont die Integration von Sicherheitsmaßnahmen in den gesamten Softwarelebenszyklus.</li>



<li><strong>Experimentieren und Lernen:</strong>&nbsp;Man sollte DevOps-Teams immer wieder ermutigen, kontinuierlich neue Technologien, Prozesse und Methoden auszuprobieren, um aus Fehlern zu lernen und Innovationen voranzutreiben.</li>
</ol>



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



<p>DevOps ist eine transformative Strategie, die in der modernen Softwareentwicklung unerlässlich geworden ist. Durch die Zusammenarbeit zwischen Entwicklern und IT-Experten im Betrieb, die Automatisierung von Prozessen und den kontinuierlichen Feedback- und Lernprozess wird die Softwareentwicklung beschleunigt, die Qualität verbessert und die Flexibilität erhöht.</p>



<p>Die Einführung von DevOps erfordert jedoch Zeit und Engagement, um sowohl die Kultur als auch die notwendigen Technologien und Prozesse in einem Unternehmen zu etablieren. Eine erfolgreiche Implementierung von DevOps setzt voraus, dass Unternehmen bereit sind, sich kontinuierlich weiterzuentwickeln und ihre Teams mit den notwendigen Ressourcen und dem Wissen auszustatten. Der Einsatz von Best Practices und eine fortwährende Verbesserung der Prozesse sind Schlüsselfaktoren für den Erfolg von DevOps in der Softwareentwicklung.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/02/erklaerung-devops/">DevOps &#8211; Entwickeln, bereitstellen und verbessern</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/02/erklaerung-devops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1369</post-id>	</item>
		<item>
		<title>XML &#8211; Effiziente Datenstrukturierung</title>
		<link>https://ceosbay.com/2022/12/27/erklaerung-xml/</link>
					<comments>https://ceosbay.com/2022/12/27/erklaerung-xml/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 27 Dec 2022 06:59:00 +0000</pubDate>
				<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Metaverse]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Soziale Medien]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Aufbau]]></category>
		<category><![CDATA[Auto]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Base]]></category>
		<category><![CDATA[Consortium]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Daten]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Datenzentriert]]></category>
		<category><![CDATA[Dokument]]></category>
		<category><![CDATA[Dokumente]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Donauwörth]]></category>
		<category><![CDATA[DTD]]></category>
		<category><![CDATA[Element]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[end]]></category>
		<category><![CDATA[Extensible]]></category>
		<category><![CDATA[GPX]]></category>
		<category><![CDATA[GraphML]]></category>
		<category><![CDATA[Gültigkeit]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Klassifizierung]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Lesbarkeit]]></category>
		<category><![CDATA[logisch]]></category>
		<category><![CDATA[logische]]></category>
		<category><![CDATA[Mark]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[Maschine]]></category>
		<category><![CDATA[Maschinen]]></category>
		<category><![CDATA[München]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[physisch]]></category>
		<category><![CDATA[physische]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Prozessoren]]></category>
		<category><![CDATA[PULL]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[Semistrukturiert]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[Sprache Extensible Markup Language]]></category>
		<category><![CDATA[start]]></category>
		<category><![CDATA[Strukturiert]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tag]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[Valid]]></category>
		<category><![CDATA[Validität]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Wide]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1063</guid>

					<description><![CDATA[<p>XML (Extensible Markup Language) ist eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten im Format einer Textdatei, die sowohl von Menschen als auch von Maschinen lesbar ist. Im Endeffekt kann man damit Daten auf gemeinsam nutzbare &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/">XML &#8211; Effiziente Datenstrukturierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>XML (Extensible Markup Language) ist eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten im Format einer Textdatei, die sowohl von Menschen als auch von Maschinen lesbar ist. Im Endeffekt kann man damit Daten auf gemeinsam nutzbare Weise definieren und speichern. Es unterstützt den Informationsaustausch zwischen Computersystemen wie Websites, Datenbanken und Anwendungen von Drittanbietern. Vordefinierte Regeln erleichtern die Übertragung von Daten als XML-Dateien über ein beliebiges Netzwerk, da der Empfänger diese Regeln verwenden kann, um die Daten genau und effizient zu lesen. Dazu aber im Anschluss etwas mehr und vor allem etwas genauer.</p>



<h3 class="wp-block-heading">Eine wirklich kurze Zeitreise</h3>



<p>Die Extensible Markup Language wurde vom World Wide Web Consortium (W3C) am 10. Februar 1998 veröffentlicht. Die aktuelle Fassung ist die fünfte Ausgabe vom 26. November 2008. Alle bisherigen und aktuellen Publikationen kann man <a href="https://www.w3.org/XML/Core/#Publications" target="_blank" rel="noreferrer noopener">hier</a>&nbsp;einsehen.</p>



<h3 class="wp-block-heading">Was ist XML nun wirklich und was tut es?</h3>



<p>Es ist eine Metasprache, auf deren Basis durch strukturelle und inhaltliche Einschränkungen anwendungsspezifische Sprachen definiert werden. Diese Einschränkungen werden entweder durch eine Document Type Definition (DTD) oder durch ein XML Schema ausgedrückt. Beispiele für XML-Sprachen sind: RSS, MathML, GraphML, XHTML, XAML, Scalable Vector Graphics (SVG), GPX, aber auch das XML-Schema selbst. Auf diese Sprachen gehe ich in zukünftigen Sprachen ein. Besonders SVG hat einen Großteil meiner persönlichen Entwicklung geprägt.</p>



<p>Die Standardzeichenkodierung eines XML-Dokumentes ist UTF-8. XML-bearbeitende Systeme müssen die Kodierungen UTF-8 und UTF-16 beherrschen. XML-Dokumente, die UTF-8 oder UTF-16 verwenden, können in allen Texteditoren, die diese Kodierungen unterstützen, angezeigt und bearbeitet werden. Damit sind so ziemlich alle &#8222;Browser&#8220; gemeint 😉</p>



<p>Wenn das XML-Dokument Binärdaten enthalten soll, müssen diese Daten zu Text konvertiert bzw. umkodiert werden. Dazu kann z. B. die Base64-Kodierung verwendet werden.</p>



<h3 class="wp-block-heading">Das Element</h3>



<p>Die essenzielle Struktureinheit eines XML-Dokumentes ist das Element. Elemente können Text wie auch weitere Elemente als Inhalt enthalten. Elemente bilden die Knoten des Strukturbaumes eines XML-Dokumentes. Der Name eines Elementes kann in Dokumenten ohne Dokumenttypdefinition (DTD) frei gewählt werden. In XML-Dokumenten mit DTD muss der Name eines Elementes in der DTD deklariert sein und das Element muss sich in einer zugelassenen Position innerhalb des Strukturbaumes gemäß DTD befinden. In der DTD wird u. a. der mögliche Inhalt eines jeden Elementes definiert. Elemente sind die Träger der Information in einem XML-Dokument.</p>



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



<p>Für die Auszeichnung von Elementen werden Tags verwendet. Auf den ersten Blick sehen XML-Tags fast wie HTML-Tags aus. Start-Tags beginnen mit &lt; und End-Tags mit &lt;/. Bei beiden folgt anschließend der Name des Elements, und sie werden beide durch &gt; geschlossen. Anders als bei den HTML-Tags können Sie jedoch neue Tags erzeugen. Um eine Person zu beschreiben, benutzt man die Tags &lt;person&gt; und &lt;/person&gt;. Um ein Tier zu beschreiben, verwendet man die Tags &lt;tier&gt; und &lt;/tier&gt;. Die Namen der Tags spiegeln im Allgemeinen die Art des Inhalts innerhalb des Elements wider und nicht die Art und Weise, wie der Inhalt formatiert wird.</p>



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



<p>Ein XML-Dokument ist „wohlgeformt“ (well-formed), wenn es alle Regeln einhält.</p>



<h3 class="wp-block-heading">Die Regeln</h3>



<ul class="wp-block-list">
<li>Das Dokument besitzt genau ein Wurzelelement. Als Wurzelelement wird dabei das jeweils äußerste Element bezeichnet, z. B. &lt;html&gt; in XHTML.</li>



<li>Alle Elemente mit Inhalt besitzen einen Start- und einen Endtag (z. B. &lt;eintrag&gt;Eintrag 1&lt;/eintrag&gt;). Elemente ohne Inhalt können mit einem Leertag gekennzeichnet werden (z. B. &lt;eintrag /&gt;).</li>



<li>Die Start- und Endtags sind ebenentreu-paarig verschachtelt. Dies bedeutet, dass alle Elemente geschlossen sind, bevor die End-Auszeichner des entsprechenden Elternelements oder die Beginn-Auszeichner eines Geschwisterelements erscheinen.</li>



<li>Ein Element darf nicht mehrere Attribute mit demselben Namen besitzen.</li>



<li>Attributwerte müssen in Anführungszeichen stehen (&#8222;&#8230;&#8220; oder &#8218;&#8230;&#8216;).</li>



<li>Die Start- und Endtags sind Case sensitive, also beachten die Groß- und Kleinschreibung (z. B. &lt;eintrag&gt;&lt;/Eintrag&gt; ist ungültig).</li>
</ul>



<h3 class="wp-block-heading">Gültigkeit (Validität)</h3>



<p>Verwendet man es für den Datenaustausch, ist es von Vorteil, wenn das Format mittels einer Grammatik (z. B. einer Dokumenttypdefinition oder eines XML-Schemas) definiert ist. Der Standard definiert ein XML-Dokument als gültig (oder englisch valid), wenn es wohlgeformt ist, den Verweis auf eine Grammatik enthält und das durch die Grammatik beschriebene Format einhält.</p>



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



<p>Programme oder Programmteile, die XML-Daten auslesen, interpretieren und ggf. auf Gültigkeit prüfen, nennt man XML-Parser. Prüft der Parser die Gültigkeit, so ist er ein validierender Parser. Darauf gehe ich aber in einem zukünftigen Beitrag genauer ein.</p>



<h3 class="wp-block-heading">Wie sieht die Extensible Markup Language eigentlich aus?</h3>



<pre class="wp-block-code"><code>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
&lt;verzeichnis&gt;
    &lt;titel&gt;Städteverzeichnis&lt;/titel&gt;
    &lt;eintrag&gt;
        &lt;stichwort&gt;München&lt;/stichwort&gt;
        &lt;eintragstext&gt;München ist der Sitz von ...&lt;/eintragstext&gt;
    &lt;/eintrag&gt;
    &lt;eintrag&gt;
        &lt;stichwort&gt;Donauwörth&lt;/stichwort&gt;
        &lt;eintragstext&gt;Donauwörth ist eine Stadt, die ...&lt;/eintragstext&gt;
    &lt;/eintrag&gt;
&lt;/verzeichnis&gt;</code></pre>



<h3 class="wp-block-heading">XML-Dokumente besitzen einen physischen und einen logischen Aufbau.</h3>



<p><strong>Der physische Aufbau</strong></p>



<ul class="wp-block-list">
<li>Die Dokument-Entität (Document entity) enthält das Hauptdokument.</li>



<li>Weitere mögliche Entitäten sind über Entitätenreferenzen (&amp;name; für das Dokument bzw. %name; für die Dokumenttypdefinition) eingebundene Zeichenketten, eventuell auch ganze Dateien, sowie Referenzen auf Zeichenentitäten zur Einbindung einzelner Zeichen, die über ihre Nummer referenziert wurden (&amp;#Dezimalzahl; oder &amp;#xHexadezimalzahl;).</li>



<li>Eine XML-Deklaration wird verwendet, um die Version, Zeichenkodierung und eine mögliche Verarbeitbarkeit ohne DTD zu spezifizieren.</li>



<li>Eine DTD wird verwendet, um Entitäten sowie den erlaubten logischen Aufbau zu spezifizieren. Die Verwendung einer DTD kann in der Deklaration abgewählt werden.</li>
</ul>



<p><strong>Der logische Aufbau</strong></p>



<p>Der logische Aufbau entspricht einer Baumstruktur und ist damit hierarchisch organisiert. Es gibt folgende Baumknoten:</p>



<ul class="wp-block-list">
<li>Elemente, deren physische Auszeichnung mittels eines passenden Paars aus Starttag &lt;Tagname&gt; und End-Tag &lt;/Tagname&gt; oder eines Leertags &lt;Tagname/&gt; erfolgen kann.</li>



<li>Attribute als bei einem Starttag oder Leertag geschriebene zusätzliche Eigenschaften der Elemente in der Syntax Attributname=Attributwert.</li>



<li>Verarbeitungsanweisungen &lt;?Zielname Daten?&gt; (engl. Processing Instructions).</li>



<li>Kommentare &lt;!&#8211; Kommentar-Text &#8211;&gt;.</li>



<li>Text, der als normale Zeichendaten oder in Form eines CDATA-Abschnittes &lt;![CDATA[ beliebiger Text]]&gt; auftreten kann.</li>
</ul>



<p>Ein XML-Dokument muss genau ein Element auf der obersten Ebene enthalten. Unterhalb dieses Dokumentelements können weitere Elemente und Texte verschachtelt werden.</p>



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



<p>Wie vorher kurz ausgeschrieben und angeschnitten, handelt es sich dabei um die Dokumenttypdefinition und beschreibt die Struktur sowie Grammatik von Dokumenten. Sie ist Systembestandteil von XML und per Standard aktiviert.</p>



<p>Werden Dokumente mit Bezug zu einer externen Dokumenttypdefinition oder mit einer integrierten Dokumenttypdefinition erstellt, prüft der Parser das Dokument bereits beim Öffnen (Lesen). Ein Dokument auf Basis einer Dokumenttypdefinition ist stets ein valides Dokument. Die Übereinstimmung des Dokumentinhaltes mit den Regeln der Dokumenttypdefinition steht im Vordergrund. Die technische Lesbarkeit, also auch das Lesen von nicht validen Dokumenten ist nachrangig. Das ist für Volltextdokumente (erzählende Dokumente, engl. narrative documents) vorgesehen und der Haupteinsatzzweck.</p>



<p>Dokumente ohne DTD sind eher für den beliebigen Datenaustausch geeignet. Der Parser prüft diese Dokumente nur nach den Regeln der Wohlgeformtheit. Die technische Lesbarkeit steht hier an erster Stelle. Das Prüfen und Auslesen der eigentlichen Informationen wird mit nachgelagerten Prozessen realisiert.</p>



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



<p>Wie zu Beginn erwähnt, können alle Webbrowser wie Apple Safari, Google Chrome, Microsoft Edge, Mozilla Firefox, Opera usw. XML-Dokumente mit Hilfe des eingebauten Parsers direkt visualisieren. Dadurch werden keine zusätzlichen PlugIns oder der Gleichen benötigt.</p>



<h3 class="wp-block-heading">Klassifizierung von XML-Dokumenten</h3>



<p>XML-Dokumente lassen sich anhand ihrer Bestimmung und ihres Strukturierungsgrades in dokumentzentrierte und datenzentrierte Dokumente unterteilen. Die Grenze zwischen diesen Dokumentenarten ist fließend. Mischformen können als semistrukturiert bezeichnet werden.</p>



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



<p>Das Dokument ist an ein Textdokument angelehnt, dass für den menschlichen Leser größtenteils auch ohne die zusätzliche Metainformation verständlich ist. XML-Elemente werden hauptsächlich zur semantischen Markierung von Passagen des Dokuments genutzt.&nbsp;</p>



<p>Das Dokument ist nur schwach strukturiert. Aufgrund der schwachen Strukturierung ist eine maschinelle Verarbeitung schwierig.</p>



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



<p>Das Dokument ist hauptsächlich für die maschinelle Verarbeitung bestimmt. Es folgt einem Schema, das Entitäten eines Datenmodells beschreibt und definiert, in welcher Beziehung die Entitäten zueinanderstehen und welche Attribute die Entitäten haben. Das Dokument ist somit stark strukturiert und für den unmittelbaren menschlichen Gebrauch weniger geeignet.</p>



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



<p>Semistrukturierte Dokumente stellen eine Art Mischform dar, die stärker strukturiert ist als dokumentzentrierte Dokumente, aber schwächer als datenzentrierte Dokumente.</p>



<p>Es ist typisch für datenzentrierte XML-Dokumente, dass Elemente entweder Elementinhalte oder Textinhalte haben. Der sogenannte gemischte Inhalt (Mixed Content), bei dem Elemente sowohl Text als auch Childs (Kind-Elemente) enthalten, ist für die anderen XML-Dokumente typisch.</p>



<h3 class="wp-block-heading">Verarbeitungskriterien der Extensible Markup Language</h3>



<p>Grundsätzlich sind drei Aspekte beim Zugriff auf ein XML-Dokument von Bedeutung:</p>



<ol class="wp-block-list" type="1">
<li>Wie erfolgt der Zugriff auf die XML-Datei: sequenziell oder wahlfrei?</li>



<li>Wie ist der Ablauf beim Zugriff auf die Daten gestaltet: „Push“ oder „Pull“? (Push bedeutet, dass die Ablaufkontrolle des Programms beim Parser liegt. Pull bedeutet, dass die Ablaufkontrolle im Code, der den Parser aufruft, implementiert ist.)</li>



<li>Wie erfolgt das Baumstrukturmanagement der XML-Daten: hierarchisch oder verschachtelt?</li>
</ol>



<h3 class="wp-block-heading">Programmgesteuerter Zugriff auf XML-Dokumente</h3>



<p>Das Einlesen von XML-Dokumenten erfolgt auf unterster Ebene über eine spezielle Programmkomponente, einem XML-Prozessor, auch XML-Parser genannt. Er stellt eine Programmierschnittstelle (API) zur Verfügung, über die die Anwendung auf das XML-Dokument zugreift. Ich habe zwar in einem vorherigen Beitrag über die <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST API</a> geschrieben, doch werde ich definitiv die Programmierschnittstelle explizit nochmals ein einem Beitrag thematisieren.</p>



<h3 class="wp-block-heading">Die XML-Prozessoren unterstützen dabei drei grundlegende Verarbeitungsmodelle</h3>



<ol class="wp-block-list" type="1">
<li>DOM: Ein DOM-API repräsentiert ein XML-Dokument als Baumstruktur und gewährt wahlfreien Zugriff auf die einzelnen Bestandteile der Baumstruktur. DOM erlaubt außer dem Lesen von den Dokumenten auch die Manipulation der Baumstruktur und das Zurückschreiben der Baumstruktur in ein XML-Dokument. Aus diesem Grund ist DOM sehr speicherintensiv.</li>



<li>SAX: Ein SAX-API repräsentiert ein XML-Dokument als sequentiellen Datenstrom und ruft für im Standard definierte Ereignisse vorgegebene Rückruffunktionen (callback function) auf. Eine Anwendung, die SAX nutzt, kann eigene Unterprogramme als Rückruffunktionen registrieren und auf diese Weise die Daten auswerten.</li>



<li>Pull-API: Eine XML-Pull-API verarbeitet Daten sequenziell und bietet sowohl ereignisbasierte Verarbeitung als auch einen Iterator an. Es ist hoch speichereffizient und ggf. leichter zu programmieren als das SAX-API, da die Ablaufkontrolle beim Programm und nicht beim Parser liegt.</li>
</ol>



<p>Weitere Verarbeitungsmodelle sind das Data-Binding, welches die XML-Daten als Datenstruktur direkt für einen Programmzugriff bereitstellt. Die XML-Daten werden per Unmarshalling (Dies ist der Prozess der Umwandlung einer Art von Darstellung auf niedrigerer Ebene, oft ein &#8222;Drahtformat&#8220;, in eine Struktur auf höherer Ebene (Objekt).) direkt in z. B. Objekte gewandelt. Und die Nicht-extrahierende-XML-API, bei der die Daten auf Byte-Ebene sehr effizient verarbeitet sind.</p>



<p>Oftmals greift der Anwendungscode nicht direkt auf die Parser-API zu. Stattdessen wird es weiter gekapselt, so dass der Anwendungscode mit nativen Objekten / Datenstrukturen arbeitet, welche sich auf darauf abstützen. Beispiele für solche Zugriffsschichten sind JAXB in Java, der Data Binding Wizard in Delphi oder das XML Schema Definition Toolkit in .Net. Die Umwandlung von Objekten in die Extensible Markup Language ist üblicherweise bidirektional möglich. Diese Umwandlung bezeichnet man als Serialisierung oder Marshalling.</p>



<h3 class="wp-block-heading">Transformation und Darstellung von XML-Dokumenten</h3>



<p>Ein XML-Dokument kann mittels geeigneter Transformationssprachen wie XSLT oder DSSSL in ein anderes Dokument transformiert werden. Oftmals dient die Transformation zur Überführung eines Dokuments aus einer Extensible Markup Language in eine andere Extensible Markup Language, beispielsweise zur Transformation nach XHTML, um das Dokument in einem Webbrowser anzuzeigen.</p>



<h3 class="wp-block-heading">Warum XML?</h3>



<p><strong>Unterstützung von und bei Transaktionen</strong></p>



<p>Wenn ein Unternehmen eine Ware oder Dienstleistung an ein anderes Unternehmen verkauft, müssen die beiden Unternehmen Informationen wie Kosten, Spezifikationen und Lieferpläne austauschen. Man kann damit alle erforderlichen Informationen elektronisch teilen und komplexe Geschäfte automatisch abschließen, ohne dass ein menschliches Eingreifen erforderlich ist.</p>



<p><strong>Aufrechterhaltung der Datenintegrität</strong></p>



<p>Man kann damit Daten zusammen mit der Beschreibung der Daten übertragen und so den Verlust der Datenintegrität verhindern. Folglich kann man so die Datengenauigkeit überprüfen, automatische Anpassungen der Datenpräsentation für verschiedene Benutzer vornehmen und Daten konsistent über mehrere Plattformen hinweg speichern&nbsp;</p>



<p><strong>Sucheffizienz verbessern</strong></p>



<p>Computerprogramme wie Suchmaschinen können die Dateien damit effizienter und präziser sortieren und kategorisieren als andere Arten von Dokumenten. Beispielsweise kann das Wort mark (markieren) entweder ein Substantiv oder ein Verb sein. Basierend auf XML-Tags können Suchmaschinen mark für relevante Suchergebnisse genau kategorisieren. Somit hilft es, die natürliche Sprache für Maschinen effizienter interpretierbar zu machen.</p>



<p><strong>Flexible Anwendungen entwerfen</strong></p>



<p>Man kann damit auch das eigene Anwendungsdesign bequem aktualisieren oder ändern. Viele Technologien, insbesondere neuere Technologien, verfügen dafür über eine integrierte Schnittstelle bzw. Unterstützung. So kann man automatisch Datendateien lesen und verarbeiten, sodass die Änderungen stattfinden können, ohne gleich die gesamte Datenbank neu formatieren zu müssen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/">XML &#8211; Effiziente Datenstrukturierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/27/erklaerung-xml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1063</post-id>	</item>
	</channel>
</rss>
