<?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>Komponenten Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/komponenten/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/komponenten/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Fri, 21 Feb 2025 07:26:24 +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>Komponenten Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/komponenten/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>V-Modell in der Softwareentwicklung &#8211; Leitfaden</title>
		<link>https://ceosbay.com/2023/07/14/v-modell-in-der-softwareentwicklung-leitfaden/</link>
					<comments>https://ceosbay.com/2023/07/14/v-modell-in-der-softwareentwicklung-leitfaden/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 14 Jul 2023 15:49:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Akzeptanz]]></category>
		<category><![CDATA[Akzeptanztest]]></category>
		<category><![CDATA[Anforderungsdefinition]]></category>
		<category><![CDATA[Architekt]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Funktionaler]]></category>
		<category><![CDATA[Implementierung]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT-Test]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Modelle]]></category>
		<category><![CDATA[Paradigma]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Prozessmodell]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Software-Architektur]]></category>
		<category><![CDATA[Software-Design]]></category>
		<category><![CDATA[Software-Testing]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[System-Test]]></category>
		<category><![CDATA[Systemdesign]]></category>
		<category><![CDATA[Systementwurf]]></category>
		<category><![CDATA[Systemtest]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[Technisch]]></category>
		<category><![CDATA[Testphasen]]></category>
		<category><![CDATA[Unit]]></category>
		<category><![CDATA[Unit-Test]]></category>
		<category><![CDATA[V]]></category>
		<category><![CDATA[V-Modell]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1884</guid>

					<description><![CDATA[<p>Was ist das V-Modell? Das V-Modell ist ein Prozessmodell in der Softwareentwicklung, das sich durch seine konsistente Systematik auszeichnet. Es hat seinen Ursprung in der Verifikation und Validierung von Software. In diesem Beitrag versuche ich &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/07/14/v-modell-in-der-softwareentwicklung-leitfaden/">V-Modell in der Softwareentwicklung &#8211; Leitfaden</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Was ist das V-Modell?</h2>



<p>Das V-Modell ist ein Prozessmodell in der Softwareentwicklung, das sich durch seine konsistente Systematik auszeichnet. Es hat seinen Ursprung in der Verifikation und Validierung von Software. In diesem Beitrag versuche ich die Besonderheiten dieses Modells zu erläutern, die es zu einer effektiven Methode für die Entwicklung qualitativ hochwertiger Software machen.</p>



<p>Per Definition handelt es sich um ein lineares Verfahren zur Softwareentwicklung, das die Beziehung zwischen jedem Entwicklungsstadium und seinem entsprechenden Teststadium definiert. Es legt die Abfolge der Entwicklungsschritte in einer Art V-Form dar, wobei die linke Seite des &#8222;V&#8220; die Entwicklung und die rechte Seite die Integration und das Testen der Software darstellt.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="871" height="555" src="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/07/IllustrationVModell.png?resize=871%2C555&#038;ssl=1" alt="" class="wp-image-1886" srcset="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/07/IllustrationVModell.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/07/IllustrationVModell.png?resize=300%2C191&amp;ssl=1 300w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/07/IllustrationVModell.png?resize=768%2C489&amp;ssl=1 768w" sizes="(max-width: 871px) 100vw, 871px" /></figure>



<h2 class="wp-block-heading">Phasen im V-Modell</h2>



<p>Die linke Seite des V-Modells beinhaltet die Anforderungsdefinition, System- und Software-Design sowie die Implementierung der Software. Jede Phase auf der linken Seite hat eine korrespondierende Phase auf der rechten Seite, in der das Testen durchgeführt wird.</p>



<ol class="wp-block-list">
<li><strong>Anforderungsdefinition</strong>: In dieser Phase werden die Anforderungen des Benutzers, des Systemanwenders oder des Kunden erfasst und dokumentiert. Dies bildet die Grundlage für die anschließende Entwurfsphase.</li>



<li><strong>Funktionaler Systementwurf bzw. Systemdesign</strong>: Hier werden die Architektur und das High-Level-Design des Systems erstellt. Folglich die Anforderungen auf Funktionen und Dialogabläufe des neuen Systems abgebildet. Man kann auch von der Definition der Hauptkomponenten des Systems und ihre Interaktion sprechen.</li>



<li><strong>Technischer Systementwurf bzw. Software-Design</strong>: In dieser Phase wird der detaillierte Entwurf der Software erstellt. Sie umfasst die Ausarbeitung der Einzelheiten der Software, die Erstellung von Algorithmen, Schnittstellen zur Systemumwelt und die Datenstrukturplanung. Man spricht auch von Komponenten, die möglichst unabhängig voneinander entwickelt werden können.</li>



<li><strong>Komponentenspezifikation</strong>: In dieser Phase werden für jedes Teilsystem Aufgabe, Verhalten, innerer Aufbau und Schnittstellen zu anderen Teilsystemen definiert.</li>



<li><strong>Programmierung</strong>: In dieser Phase wird der Code für die Software geschrieben. Sie basiert auf den Design-Entscheidungen, die in den vorherigen Phasen getroffen wurden. Jeder spezifizierte Baustein (Unit, Klasse usw.) wird in einer Programmiersprache (Siehe <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a>, <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a>, <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>) entwickelt (programmiert bzw. implementiert).</li>
</ol>



<h2 class="wp-block-heading">Auf der rechten Seite des V-Modells finden die entsprechenden Testphasen statt.</h2>



<ol class="wp-block-list">
<li><strong>Komponenten- bzw. Unit-Test</strong>: Hier wird der Code auf Ebene der elementauf Fehler überprüft. Jede Funktion oder Methode wird einzeln getestet, um sicherzustellen, dass sie korrekt arbeitet.</li>



<li><strong>Integrationstest</strong>: In dieser Phase wird überprüft, ob die verschiedenen Teile der Software richtig zusammenarbeiten.</li>



<li><strong>Systemtest</strong>: Hier wird das gesamte System getestet, um sicherzustellen, dass es als Ganzes funktioniert.</li>



<li><strong>Akzeptanztest bzw. Abnahmetest</strong>: Dieser Test wird durchgeführt, um zu überprüfen, ob das System die ursprünglich festgelegten Anforderungen erfüllt.</li>
</ol>



<h2 class="wp-block-heading">Vorteile des V-Modells</h2>



<p>Die Vorgehensweise des V-Modells bietet verschiedene Vorteile. Durch die strikte Trennung von Entwicklungs- und Testphasen ist eine klare Struktur gegeben, die es den Entwicklern ermöglicht, sich auf eine Aufgabe zur Zeit zu konzentrieren. Zudem erlaubt das Modell eine frühe Fehlererkennung und -behebung, da jeder Entwicklungsschritt von einem spezifischen Test begleitet wird.</p>



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



<p>Das V-Modell ist ein wichtiger Bestandteil der Softwareentwicklung. Durch seine systematische und strukturierte Herangehensweise hilft es Entwicklerteams, qualitativ hochwertige Software zu erstellen und gleichzeitig effizient zu arbeiten. Obwohl es nicht in jedem Entwicklungsprojekt zum Einsatz kommt, kann es in den richtigen Kontexten einen erheblichen Beitrag zur Verbesserung der Softwarequalität und -effizienz leisten. Insbesondere ist es nicht zu empfehlen, wenn Agilität und Flexibilität gefordert sind, wie beispielsweise in Start-ups oder bei der Entwicklung von Webanwendungen. Doch in Sektoren, in denen Robustheit, Sicherheit und Zuverlässigkeit der Software von zentraler Bedeutung sind, hat sich das V-Modell als äußerst wertvoll erwiesen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/07/14/v-modell-in-der-softwareentwicklung-leitfaden/">V-Modell in der Softwareentwicklung &#8211; Leitfaden</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/07/14/v-modell-in-der-softwareentwicklung-leitfaden/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1884</post-id>	</item>
		<item>
		<title>Vue.js &#8211; Das progressive JavaScript Framework</title>
		<link>https://ceosbay.com/2023/04/18/vue-js-das-progressive-javascript-framework/</link>
					<comments>https://ceosbay.com/2023/04/18/vue-js-das-progressive-javascript-framework/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 18 Apr 2023 10:30:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Aktiv]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Ecosystem]]></category>
		<category><![CDATA[Einarbeitung]]></category>
		<category><![CDATA[Einfach]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[File]]></category>
		<category><![CDATA[Flexibilität]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Ökosystem]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Produktivität]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Single]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Vast]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[Vue.js]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1743</guid>

					<description><![CDATA[<p>Vue.js ist ein leichtgewichtiges, progressives und anpassungsfähiges Open Source JavaScript&#8211;Framework für den Aufbau benutzerfreundlicher und leistungsstarker Single-Page-Anwendungen (SPA) sowie kleiner und großer Webanwendungen. Seit seiner Einführung im Jahr 2014 durch den Entwickler Evan You hat &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/18/vue-js-das-progressive-javascript-framework/">Vue.js &#8211; Das progressive JavaScript Framework</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Vue.js ist ein leichtgewichtiges, progressives und anpassungsfähiges <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>&#8211;<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> für den Aufbau benutzerfreundlicher und leistungsstarker Single-Page-Anwendungen (SPA) sowie kleiner und großer Webanwendungen. Seit seiner Einführung im Jahr 2014 durch den Entwickler Evan You hat es sich rasch zu einem der beliebtesten <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks</a> für die Webentwicklung entwickelt. In diesem Beitrag geht es um die Hauptmerkmale von Vue.js und warum es für Entwickler in der Webentwicklung von Vorteil ist.</p>



<h3 class="wp-block-heading">Hauptmerkmale von Vue.js</h3>



<ul class="wp-block-list">
<li>Leichtgewichtig und Modularität: Vue.js ist für seine geringe Größe bekannt, wobei die kompilierte und gzip-komprimierte Version gerade einmal 20 KB wiegt. Das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> ist in verschiedene Module unterteilt, sodass Entwickler nur diejenigen auswählen müssen, die sie für ihr Projekt benötigen, um den Overhead gering zu halten.</li>



<li>Progressive Anpassung: Vue.js ist als progressives <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> konzipiert, was bedeutet, dass man es schrittweise in bestehende Projekte implementieren kann. Es ermöglicht Entwicklern, bestehenden Anwendungen schrittweise Verbesserungen hinzuzufügen, ohne die gesamte Anwendung neu schreiben zu müssen.</li>



<li>Reaktive Datenbindung: Eine der Hauptstärken von Vue.js ist die reaktive Datenbindung. Dies bedeutet, dass die Übertragung aller Änderungen auf die Benutzeroberfläche automatisch stattfindet, ohne dass der Entwickler explizit eingreifen muss.</li>



<li>Single-File-Komponenten: Vue.js bietet eine einfache Möglichkeit, wiederverwendbare Komponenten zu erstellen, indem <a href="https://ceosbay.com/2022/12/29/erklaerung-html/">HTML</a>, <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> und <a href="https://ceosbay.com/2023/02/27/erklaerung-css/">CSS</a> via Kapselung in einer einzigen .vue-Datei zusammengefasst sind. Diese Tatsache vereinfacht die Strukturierung und Wartung von Projekten maßgeblich.</li>



<li>Declarative Rendering: Mit Vue.js können Entwickler deklarativ angeben, wie die Anwendung auf der Grundlage der zugrunde liegenden Daten rendert. Diese Herangehensweise verbessert die Lesbarkeit und Wartbarkeit des Codes, indem sie sich auf die Logik und das Verhalten der Anwendung konzentriert, anstatt auf die Implementierungsdetails.</li>



<li>Hervorragende Dokumentation und Community: Die offizielle Dokumentation von Vue.js ist umfassend und gut organisiert, was den Einstieg in das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> wesentlich erleichtert. Die Vue.js-Community ist aktiv und wächst stetig, was zu einer Vielzahl von Ressourcen, Plugins und Erweiterungen führt, die Entwicklern zur Verfügung stehen.</li>
</ul>



<h3 class="wp-block-heading">Warum Vue.js für Webentwickler von Vorteil ist</h3>



<ul class="wp-block-list">
<li>Einfache Einarbeitung: Im Vergleich zu anderen <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks</a> wie <a href="https://ceosbay.com/2023/03/21/erklaerung-angular/">Angular</a> oder <a href="https://ceosbay.com/2022/12/21/erklaerung-react/" target="_blank" rel="noreferrer noopener">React</a>, ist die Lernkurve relativ flach. Dies ermöglicht neuen Entwicklern einen schnellen Einstieg, während erfahrene Entwickler leicht von anderen <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks</a> umsteigen können.</li>



<li>Flexibilität und Skalierbarkeit: Aufgrund der modularen Architektur und progressiven Anpassung eignet sich Vue.js sowohl für kleine als auch für große Projekte. Entwickler können es sowohl für einfache Widgets als auch für komplexe Anwendungen verwenden. Man kann es problemlos in bestehende Projekte integrieren oder als Grundlage für neue Projekte verwenden.</li>



<li>Verbesserte Produktivität: Durch die Verwendung von Single-File-Komponenten und reaktiven Datenbindungen ermöglicht Vue.js Entwicklern, schneller und effizienter zu arbeiten. Weniger Zeit wird für die Aktualisierung des UI-Codes und die Synchronisierung von Daten aufgewendet, was zu einer höheren Produktivität führt.</li>



<li>Vast Ecosystem: Das Vue.js-Ökosystem umfasst eine breite Palette von Tools, Bibliotheken und Erweiterungen, die die Entwicklung von Anwendungen beschleunigen und vereinfachen. Beispiele hierfür sind das Vue CLI (Command Line Interface), Vuex für State Management und das Vue Router-Modul für die Navigation.</li>



<li>Aktive Entwicklung und Wartung: Die Weiterentwicklung und Wartung erfolgt stetig. Folglich kann man immer mit zeitgemäßen neuen Funktionen und Verbesserungen rechnen. Dies stellt sicher, dass das <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> auf dem neuesten Stand der Webentwicklungstechniken bleibt und gleichzeitig sicher und stabil ist.</li>
</ul>



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



<p>Vue.js hat sich als vielseitiges und leistungsstarkes <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>&#8211;<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> etabliert, das Entwicklern ermöglicht, auf einfache Weise schnelle und skalierbare Webanwendungen zu erstellen. Mit seinen progressiven Anpassungsmöglichkeiten, reaktiven Datenbindungen und einem wachsenden Ökosystem ist es ein ausgezeichnetes Werkzeug für Webentwickler, unabhängig von ihrem Erfahrungsstand. Die einfache Einarbeitung und Flexibilität von Vue.js machen es zu einer attraktiven Wahl für Entwickler, die nach einer modernen Lösung für die Webentwicklung suchen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/18/vue-js-das-progressive-javascript-framework/">Vue.js &#8211; Das progressive JavaScript Framework</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/18/vue-js-das-progressive-javascript-framework/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1743</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>Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</title>
		<link>https://ceosbay.com/2022/11/14/erklaerung-frameworks/</link>
					<comments>https://ceosbay.com/2022/11/14/erklaerung-frameworks/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 14 Nov 2022 10:31:37 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Baukasten]]></category>
		<category><![CDATA[Bausteine]]></category>
		<category><![CDATA[Bibliotheken]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Coordination]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[Effizienz]]></category>
		<category><![CDATA[Entwickeln]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Herangehensweise]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Rahmenwerk]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Struktur]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=505</guid>

					<description><![CDATA[<p>Frameworks &#8211; Wie der Name schon sagt, handelt es sich dabei um Rahmenwerke oder ein Grundgerüst, die dem Programmierer die Bestimmung der&#160;grundlegenden&#160;Architektur der Software ermöglichen. Frameworks kommen in der Regel bei der objektorientierten Programmierung zum &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Frameworks &#8211; Wie der Name schon sagt, handelt es sich dabei um Rahmenwerke oder ein Grundgerüst, die dem Programmierer die Bestimmung der&nbsp;grundlegenden&nbsp;Architektur der Software ermöglichen. Frameworks kommen in der Regel bei der objektorientierten Programmierung zum Einsatz. Sie umfassen eine Laufzeitumgebung, Bibliotheken und eine Reihe weiterer Komponenten, um die optimale Grundstruktur zur Verfügung zu stellen. Die Basisbausteine sind in konkrete und abstrakte Klassen unterteilt. Diese stehen einem Programmierer direkt zur Verfügung, was zu einer enormen Zeiteinsparung führt. Vor allem, da die Elemente nicht jedes Mal neu programmiert werden müssen.</p>



<h3 class="wp-block-heading">Ab wann werden Frameworks relevant?</h3>



<p>In der Regel definiert man als Programmierer oder als Team, zu Beginn eines Projekts, auf Basis der Anforderungen und der wirtschaftlichen Aspekte, die Herangehensweise. </p>



<p>Man hat immer die Auswahl, alles von Grund auf selber bzw. nativ zu programmieren, was zwar eine extrem individuelle Lösung darstellt und alles bis auf das kleinste Detail erstellt bzw. programmiert werden kann, ein CMS (Content Management System = Eine Software zur gemeinschaftlichen Erstellung, Bearbeitung, Organisation und Darstellung digitaler Inhalte zumeist zur Verwendung in Webseiten aber auch in anderen Medienformen) zu nutzen &#8211; Wobei ich Zweites in einem separaten Beitrag ausführlich thematisieren möchte (Übrigens basiert diese Webseite auch auf einem CMS. In diesem Fall handelt es sich um eine WordPress-Instanz). Und dann gibt es natürlich Frameworks. Wobei die Anforderungen an die Professionalität des Entwicklers bei dieser Herangehensweise relativ hoch angesiedelt sind. Allerdings muss man sagen, dass das hohe Maß an Flexibilität und die Verfügbarkeit ausgefeilter Struktur-Merkmale nicht unwesentlich sind.</p>



<h3 class="wp-block-heading">Welche Frameworks gibt es?</h3>



<p>Application Frameworks: Als Grundgerüst für die Programmierung von Anwendungen mit spezifischen Strukturen und Funktionen.</p>



<p>Web-Frameworks: Für die Entwicklung und Programmierung dynamischer Web-Sites und Web-Anwendungen.</p>



<p>Komponenten-Frameworks: Als Umgebungsrahmen für die Programmierung und Einbindung von Programm-Paketen.</p>



<p>Domain Frameworks: Als Rahmen für vordefinierte Problembereiche.</p>



<p>Coordination Frameworks: Zur Einrichtung von Geräte-Interaktionen bzw. für die Abfolge zu steuernder Einzelschritte.</p>



<p>Class Frameworks: Zur Zusammenfassung von „Klassen“ und „Methoden“, im Sinne einer optimalen Unterstützung des Programmierers bei der Implementierung seiner spezifischen Anwendungen.</p>



<p>Test Frameworks: Für das Testen von Programmen. Klassische Beispiele hierfür sind „<a href="https://www.selenium.dev" target="_blank" rel="noreferrer noopener">Selenium</a>“ für den Test von Webanwendungen und „JUnit“ für den Test von Modulen. <a href="https://ceosbay.com/2022/11/25/selenium/">Selenium</a> habe ich in diesem <a href="https://ceosbay.com/2022/11/25/selenium/">Beitrag</a> thematisiert.</p>



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



<p>Eines der Vorteile ist, wie bereits erwähnt, dass Wiederkehrende Aufgaben schneller abgewickelt werden können, da im Framework bereits eine Reihe an Elementen vorprogrammiert sind. Diese können beliebig oft verwendet werden.&nbsp;Darüberhinaus beinhalteten Frameworks Basis-Bausteine, die auf die Design-Struktur eines Programms Einfluss nehmen. Sie bieten sich in der Regel bei speziellen Anforderungen  und individuellen Lösungen an, so kann das vom Framework zur Verfügung gestellte Programmier-Gerüst eine gute Wahl darstellen. Nichtsdestotrotz sollte man meines Erachtens nach bei &#8222;kleineren&#8220; Projekten die Nutzung von Content Management Systemen in Erwägung ziehen. Schlussendlich, hängt die Wahl der jeweiligen Herangehensweise und die Effizienz, in der das Projekt realisiert wird, häufig von der Qualifikation und dem Skillset eines jeden Programmierers ab.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/14/erklaerung-frameworks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">505</post-id>	</item>
		<item>
		<title>Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</title>
		<link>https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/</link>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 28 Oct 2022 12:18:00 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Images]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Portainer]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwareanwendung]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMs]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=82</guid>

					<description><![CDATA[<p>Docker ist ein beliebtes Open-Source-Tool, das eine portable und konsistente Laufzeitumgebung für Softwareanwendungen bietet. In anderen Worten: Ein Tool, mit dem Entwickler, Systemadministratoren und andere Normalsterbliche ihre Anwendungen einfach in einer Sandbox (genannt Container) bereitstellen &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Docker ist ein beliebtes <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Tool, das eine portable und konsistente Laufzeitumgebung für Softwareanwendungen bietet. In anderen Worten: Ein Tool, mit dem Entwickler, Systemadministratoren und andere Normalsterbliche ihre Anwendungen einfach in einer Sandbox (genannt Container) bereitstellen können, um sie auf dem Host-Betriebssystem, z. B. auf Linux, auszuführen. Der Hauptvorteil besteht darin, dass es Benutzern ermöglicht, eine Anwendung mit all ihren Abhängigkeiten in eine standardisierte Einheit für die Softwareentwicklung zu verpacken. Im Gegensatz zu virtuellen Maschinen haben Container keinen hohen Overhead (Verwaltungsaufwand) und ermöglichen daher eine effizientere Nutzung des zugrunde liegenden Systems und der Ressourcen. Es kann für die gängigen Betriebsysteme auf der <a href="https://www.docker.com" target="_blank" rel="noreferrer noopener">Website</a> heruntergeladen werden (Achtung! &#8211; Die Desktop Version ist keine <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Anwendung!).</p>



<h2 class="wp-block-heading">Was sind Container?</h2>



<p>Zu dem heutigen Industriestandard gehört die Verwendung von virtuellen Maschinen (VMs) zur Ausführung von Softwareanwendungen zum Alltag. Ein Docker-Container ist eine Standardsoftwareeinheit, die einen Code in all seinen Abhängigkeiten speichert. So wird die Anwendung schnell und zuverlässig auf verschiedensten Computerumgebungen lauffähig. Ein Container bildet ein leichtes eigenständiges ausführbares Softwarepaket ab, das alles enthält, was zum Ausführen einer Anwendungscodelaufzeit benötigt wird. Was im Grunde genommen benötigt wird sind in der Regel der Programmcode, diverse RunTime-Engines, Systemtools, die dazugehörigen Systembibliotheken und so ziemlich alle Einstellungen. Diese containerisierte Software läuft unabhängig von dem Betriebssystem, also auf Linux-, Mac- und Windows-basierten Systemen. Und dies vollkommen unabhängig von der jeweiligen Infrastruktur. Die Container isolieren die Software von der Umgebung und stellen sicher, dass sie trotz der Unterschiede einheitlich funktioniert.</p>



<h2 class="wp-block-heading">Vorteile von Containern</h2>



<p>Docker-Container sind besonders beliebt, weil sie gegenüber&nbsp;<a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">Virtuellen Maschinen (VMs)</a>&nbsp;viele Vorteile bieten. <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> enthalten grundsätzlich vollständige Kopien eines umfassenden Betriebssystems, die Anwendung(en) selbst, alle erforderlichen Binärdateien und Bibliotheken. Diese Tatsache beansprucht in der Regel Unmengen an Speicherkapazität.</p>



<p><a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> booten im Vergleich auch ausgesprochen langsam. Container benötigen grundsätzlich weniger Speicherplatz, da ihre Images normalerweise nur wenige hundert Megabyte groß sind. So können bei dem Einsatz von Docker viel mehr Anwendungen gleichzeitig verarbeitet werden. Dies reduziert Verwendung von <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> und Betriebssystemen. </p>



<p>Auch der Einsatz von Containern auf&nbsp;Edge-Devices, z.B. auf kompakten Einplatinencomputern (Single-Board Computer (SBC) wie die beliebten Raspberry Pi&#8217;s oder NVIDIA Jetson&#8217;s, sowie robusten und wartungsarmen Embedded PC&#8217;s in der Industrie, ist problemlos möglich. Container sind flexibler und effektiver als <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> und die Verwendung von Docker in der Cloud ist ebenfalls sehr beliebt. Die Möglichkeit, dass verschiedene Anwendungen auf einer einzelnen Betriebssystem-Instanz ausgeführt werden können, verbessert vielfältige Einsatzmöglichkeiten immens. Ein weiterer entscheidender&nbsp;Vorteil von Containern&nbsp;ist die Fähigkeit, Apps nicht nur voneinander, sondern auch von ihrem zugrundeliegenden System zu isolieren. </p>



<p>So kann der Anwender leicht bestimmen, wie eine zugewiesene containerisierte Einheit das jeweilige System und die vorhandenen Ressourcen (CPU, GPU und Netzwerk) nutzt. Zudem stellt es auch sicher, dass Daten und Code voneinander getrennt bleiben was durchaus eine weitere Sicherheitsinstanz darstellen kann.</p>



<h2 class="wp-block-heading">Komponenten von Docker</h2>



<p>Die Docker-Plattform besteht aus einer Reihe von Komponenten. Desktop und Engine sind die zwei wesentlichen Bestandteile davon. Images definieren den Inhalt von Containern. Container sind lauffähige Instanzen von Images. Der Daemon ist eine Hintergrundanwendung, die Images und -Container verwaltet und ausführt. Der Client ist ein Befehlszeilenprogramm (CLI <em>Command-Line Interface</em>) &#8222;Ein Befehlszeileninterpreter oder Befehlszeilenprozessor.&#8220; Es verwendet eine Befehlszeilenschnittstelle, um Befehle von einem Benutzer in Form von Textzeilen zu empfangen, dass die API des Daemons aufruft. Registries enthalten Images, und der Hub ist ein weit verbreitetes öffentliches Registry. Zudem gibt es noch die&nbsp;Toolbox,&nbsp;um Docker auf Systeme zu bringen, die nicht nativ unterstützt werden. Dies wird dadurch erreicht, indem eine virtualisierte Linux-Instanz gestartet wird. Dies geschieht beispielsweise innerhalb von VirtualBox. Und Docker wird dann innerhalb dieser virtuellen Maschine ausgeführt.‎ Ein Großteil von Docker (jedoch nicht Desktop) ist <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a>. Lizenziert ist es unter der Apache-V2-Lizenz.</p>



<h2 class="wp-block-heading">Docker Desktop</h2>



<p>Während die meisten Komponenten sowohl für Windows, Mac und Linux verfügbar sind, und trotz der Tatsache, dass die meisten Container auf Linux lauffähig sind, ist Docker Desktop lediglich für Windows und Mac verfügbar. Docker Desktop ist ein GUI-Tool (Graphical User Interface / Grafische Benutzeroberfläche), welches im Wesentlichen eine <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">virtuelle Maschineninstallation</a> abdeckt. Diese virtuelle Maschine ist unter Linux nicht notwendig, da hier direkt die Engine lauffähig ist. Docker Desktop dient unter Windows und Mac zum Management verschiedener Komponenten und Funktionen, einschließlich von Containern, Images, Volumes (an Container angehängter Speicher), lokalem Kubernetes (eine Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen &#8211; Doch hierzu später mehr), Entwicklungsumgebungen innerhalb von Containern und vielem mehr.</p>



<h2 class="wp-block-heading">Docker-Images und -Registry</h2>



<p>Ein Docker-Image ist eine unveränderliche Datei, die im wesentlichen Sinn einen Schnappschuss eines Containers darstellt. Images werden mit dem Befehl „build“ erstellt und erzeugen einen Container, wenn sie mit „run“ gestartet werden. Images werden in einer Registry wie „registry.hub.docker.com“ gespeichert. Sie sind so konzipiert, dass sie aus mehreren Schichten anderer Images bestehen können. So muss bei der Übermittlung von Images über das Netzwerk nur eine geringe Datenmenge übertragen werden.</p>



<h2 class="wp-block-heading">Docker-Container</h2>



<p>Als Programmierer spricht man bei einem Image immer von einer Klasse und bei Containern über eine Instanz einer Klasse – bzw. über ein Laufzeitobjekt. Container sind der Grund, warum Docker so vielfältig verwendet wird: Sie sind leichtgewichtige und portable Kapselungen einer Umgebung, in der Anwendungen ausgeführt werden können.</p>



<h2 class="wp-block-heading">Docker-Engine</h2>



<p>Bei einem Blick auf die Docker-Engine und ihre Komponenten, kann man eine grundlegende Vorstellung davon erhalten, wie das System funktioniert. Mit der Engine entwickelt man Anwendungen, stellt sie zusammen, liefert sie aus und im Anschluss kann man sie ausführen, indem die folgenden Komponenten verwenden: Der <strong>Docker Deamon</strong> &#8211; Ein dauerhafter Hintergrundprozess, der Images, Container, Netzwerke und Speichervolumen verwaltet. Der Daemon „betrachtet“ ständig die Docker-API-Anforderungen und verarbeitet sie.</p>



<p>Die <strong>Docker Engine REST API</strong> &#8211; Eine Schnittstelle, die von Anwendungen verwendet wird, um mit dem Daemon zu interagieren. Auf sie kann über einen https-Client zugegriffen werden. Der <strong>Docker Client bzw. die CLI</strong> &#8211; Ermöglicht den Benutzern die Interaktion mit Docker. Er kann sich auf demselben Host wie der Daemon befinden oder eine Verbindung zu einem Daemon auf einem entfernten Host herstellen und mit mehr als einem Daemon kommunizieren.</p>



<p>Der Docker-Client bietet eine Befehlszeilenschnittstelle (CLI = Command Line Interpreter), über die man einem Daemon Befehle zum Erstellen, Ausführen und Anhalten von Anwendungen erteilen kann. Der Hauptzweck des Clients besteht darin, ein Mittel zur Verfügung zu stellen, mit dem Images aus einer Registry gezogen und auf einem Docker-Host ausgeführt werden können. Die gängigen Befehle, die von einem Client ausgegeben werden, sind: docker build, docker pull und docker run. </p>



<p><strong>Portainer</strong> &#8211; Zur Vereinfachung der Arbeit mit Docker-Befehlen ist das freie, intuitive und leicht zu implementierende GUI (Graphical User Interface = Grafische Benutzeroberfläche) Portainer oft eine gute Wahl. Die Verwaltung der Engines und das komplette Management ist mit Portainer auch für kleine Projekte geeignet. Ich selbst hatte nur wenig Kontakt damit, daher bitte mit Vorsicht genießen ;). Hardwareinformationen wie die Anzahl der Prozessoren und die Größe des Arbeitsspeichers, sowie Docker-spezifische Informationen (Anzahl der Container, Images, Volumes und Networks) sind auf jeden Fall relativ leicht ersichtlich. So kann das Dockertool mit seiner übersichtlichen Weboberfläche die Standard-Docker-Funktionen und die Verwaltung übernehmen.</p>



<h2 class="wp-block-heading">Kubernetes</h2>



<p>Ein Thema, mit dem ich mich auch noch auseinandersetzen werde und es noch einen gesonderten Beitrag darüber geben wird. Im Grunde genommen ist Kubernetes ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-System, welches mit Hilfe von Prozessautomatisierung die Verwaltung der Container übernimmt und somit Hand in Hand mit dem Docker zusammenarbeitet. </p>



<p>In einem Helm-Chart werden Konfigurationsdaten an Kubernetes übergeben. Dort wird konfiguriert, welche Container ausgerollt, überwacht und verwaltet werden sollen. Kubernetes löst diese Aufgabe auch mit einer hohen Anzahl an Containern problemlos. Außerdem kann Kubernetes Ressourcen perfekt einsetzen. Maschinen, die nicht benötigt werden, können entweder ausgeschaltet oder an andere Tasks weitervergeben werden, um Kosten sowie Kapazitäten zu sparen und folglich ein besseres Ressourcenmanagement zu ermöglichen.</p>



<h2 class="wp-block-heading">Auf welchen Betriebssystemen läuft Docker?</h2>



<p>Ein Docker-Container läuft mit der Engine direkt unter Linux und auf jedem Host-Computer, der die Container-Laufzeitumgebung „Docker Desktop“ unterstützt (Mac und Windows). Die Anwendungen müssen nicht an das Host-Betriebssystem angepasst werden. So kann sowohl die Anwendungsumgebung, als auch die zugrunde liegende Betriebssystemumgebung sauber und minimalistisch gehalten werden. Containerbasierte Anwendungen können so problemlos von Systemen in Cloud-Umgebungen oder von Entwickler-Notebooks auf Server geschoben werden, wenn das Zielsystem Docker und alle damit verwendeten Tools von Drittanbietern unterstützt.</p>



<h2 class="wp-block-heading">Wie kann Docker installiert werden?</h2>



<ul class="wp-block-list">
<li><a rel="noreferrer noopener" href="https://docs.docker.com/desktop/windows/install/" target="_blank">Installationsanleitung für Docker Desktop (Windows)</a></li>



<li><a rel="noreferrer noopener" href="https://docs.docker.com/desktop/mac/install/" target="_blank">Installationsanleitung für Docker Desktop (Mac)</a></li>



<li><a href="https://docs.docker.com/engine/install/" target="_blank" rel="noreferrer noopener">Installationsanleitung für die Docker-Engine auf diversen Linux Distributionen</a></li>
</ul>



<h2 class="wp-block-heading">Microservices-Modell &#8211; Was ist das?</h2>



<p>Die meisten Geschäftsanwendungen bestehen aus mehreren separaten Komponenten, die in einem sogenannten „Stack“ organisiert sind. Beispiele hierfür sind ein Webserver, eine Datenbank oder ein In-Memory-Cache. Container ermöglichen es, diese einzelnen Komponenten zu einer funktionalen Einheit mit leicht austauschbaren Teilen zusammenzustellen. Verschiedene Container können diese Komponenten beinhalten. So kann jede Komponente für sich gepflegt, aktualisiert und unabhängig von den anderen modifiziert werden. Im Grunde ist dies das Microservices-Modell des Anwendungsdesigns. Indem die Anwendungsfunktionalität in separate und in sich geschlossene Dienste unterteilt ist, bietet das Modell eine Alternative zu langsamen traditionellen Entwicklungsprozessen und unflexiblen Apps. Leichtgewichtige übertragbare Container machen es einfacher, Microservices basierende Anwendungen zu erstellen und zu pflegen.</p>



<p>Alles in allem trägt Docker dazu bei, die Verwaltung einer kompletten Infrastruktur wesentlich zu vereinfachen, indem es die zugrunde liegenden Instanzen leichter, schneller und robuster macht. Darüber hinaus trennt es die Anwendungsschicht von der Infrastrukturebene und bringt die dringend benötigte Portabilität, Zusammenarbeit und Kontrolle über die Softwarebereitstellungskette. Es wurde für moderne DevOps-Teams entwickelt. Das Verständnis seiner Architektur kann helfen, das Beste aus containerisierten Anwendungen herauszuholen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">82</post-id>	</item>
	</channel>
</rss>
