<?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>JavaScript Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/javascript/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Fri, 21 Feb 2025 07:28:17 +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>JavaScript Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Konfusionsmatrix &#8211; Schlüsselwerkzeug zur Bewertung von KI-Modellen</title>
		<link>https://ceosbay.com/2025/01/30/konfusionsmatrix-schluesselwerkzeug-zur-bewertung-von-ki-modellen/</link>
					<comments>https://ceosbay.com/2025/01/30/konfusionsmatrix-schluesselwerkzeug-zur-bewertung-von-ki-modellen/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 30 Jan 2025 19:28:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Deepfakes]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Explainable AI]]></category>
		<category><![CDATA[KI-Modelle]]></category>
		<category><![CDATA[KI-Testing]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Maschinelles Lernen]]></category>
		<category><![CDATA[Natural Language Processing]]></category>
		<category><![CDATA[Neuronales Netzwerk]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Spieleentwicklung]]></category>
		<category><![CDATA[Super AI]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Accuracy]]></category>
		<category><![CDATA[Datenanalyse]]></category>
		<category><![CDATA[F1-Score]]></category>
		<category><![CDATA[False Negative]]></category>
		<category><![CDATA[False Positive]]></category>
		<category><![CDATA[Fehleranalyse]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[interaktive Anwendung]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[KI]]></category>
		<category><![CDATA[Klassifikation]]></category>
		<category><![CDATA[Konfusionsmatrix]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Modellbewertung]]></category>
		<category><![CDATA[Modelloptimierung]]></category>
		<category><![CDATA[Precision]]></category>
		<category><![CDATA[Recall]]></category>
		<category><![CDATA[Sensitivität]]></category>
		<category><![CDATA[Spezifität]]></category>
		<category><![CDATA[Statistik]]></category>
		<category><![CDATA[True Negative]]></category>
		<category><![CDATA[True Positive]]></category>
		<category><![CDATA[Vorhersagemodell]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=3144</guid>

					<description><![CDATA[<p>Die Konfusionsmatrix ist eines der wichtigsten Werkzeuge zur Bewertung von Klassifikationsmodellen in der Datenanalyse und künstlichen Intelligenz. Sie hilft dabei, die Leistung eines Modells zu analysieren und zu verstehen, wo es Fehler macht. Dabei werden tatsächliche Werte mit vom Modell vorhergesagten &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2025/01/30/konfusionsmatrix-schluesselwerkzeug-zur-bewertung-von-ki-modellen/">Konfusionsmatrix &#8211; Schlüsselwerkzeug zur Bewertung von KI-Modellen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><p style="font-family: Arial, sans-serif;">Die <strong>Konfusionsmatrix</strong> ist eines der wichtigsten Werkzeuge zur Bewertung von Klassifikationsmodellen in der <strong>Datenanalyse und <a href="https://ceosbay.com/2023/04/02/erklaerung-kuenstliche-intelligenz/">künstlichen Intelligenz</a></strong>. Sie hilft dabei, die Leistung eines Modells zu analysieren und zu verstehen, wo es Fehler macht. Dabei werden <strong>tatsächliche Werte</strong> mit <strong>vom Modell vorhergesagten Werten</strong> verglichen.</p></p>



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



<h3 class="wp-block-heading">Bedeutung der einzelnen Werte:</h3>



<ul class="wp-block-list">
<li><strong>True Positive (TP)</strong> – Das Modell hat ein positives Ereignis korrekt erkannt.</li>



<li><strong>False Negative (FN)</strong> – Das Modell hat ein positives Ereignis fälschlicherweise als negativ klassifiziert.</li>



<li><strong>False Positive (FP)</strong> – Das Modell hat ein negatives Ereignis fälschlicherweise als positiv klassifiziert.</li>



<li><strong>True Negative (TN)</strong> – Das Modell hat ein negatives Ereignis korrekt erkannt.</li>
</ul>



<p>Durch diese Werte lassen sich&nbsp;<strong>wichtige Metriken</strong>&nbsp;berechnen, die die Qualität des Modells bewerten:</p>



<ul class="wp-block-list">
<li><strong>Accuracy (Genauigkeit)</strong> – Anteil der korrekten Vorhersagen.</li>



<li><strong>Precision (Präzision)</strong> – Wie viele der als positiv klassifizierten Werte tatsächlich positiv sind.</li>



<li><strong>Recall (Sensitivität)</strong> – Wie viele der tatsächlich positiven Fälle erkannt wurden.</li>



<li><strong>F1-Score</strong> – Eine Kombination aus Präzision und Recall für ein ausgewogenes Bild der Modellqualität.</li>
</ul>



<p><p style="font-family: Arial, sans-serif;">Eine typische Konfusionsmatrix für ein binäres Klassifikationsmodell sieht folgendermaßen aus:</p></p>



<table style="font-family: Arial, sans-serif; border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f2f2f2;">
<th style="border: 1px solid #ddd; padding: 8px;"></th>
<th style="border: 1px solid #ddd; padding: 8px;">Vorhergesagt: Positiv</th>
<th style="border: 1px solid #ddd; padding: 8px;">Vorhergesagt: Negativ</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;"><strong>Tatsächlich: Positiv</strong></td>
<td style="border: 1px solid #ddd; padding: 8px;">True Positive (TP)</td>
<td style="border: 1px solid #ddd; padding: 8px;">False Negative (FN)</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;"><strong>Tatsächlich: Negativ</strong></td>
<td style="border: 1px solid #ddd; padding: 8px;">False Positive (FP)</td>
<td style="border: 1px solid #ddd; padding: 8px;">True Negative (TN)</td>
</tr>
</tbody>
</table>



<p><p style="font-family: Arial, sans-serif;">Die Werte der Matrix helfen dabei, verschiedene Kennzahlen zur Bewertung des Modells zu berechnen:</p></p>



<ul style="font-family: Arial, sans-serif;">
<li><strong>Accuracy (Genauigkeit)</strong>: (TP + TN) / (TP + TN + FP + FN) – Anteil der korrekt klassifizierten Fälle</li>
<li><strong>Precision (Präzision)</strong>: TP / (TP + FP) – Wie viele der als positiv vorhergesagten Werte tatsächlich positiv sind</li>
<li><strong>Recall (Sensitivität)</strong>: TP / (TP + FN) – Wie viele der tatsächlich positiven Fälle korrekt erkannt wurden</li>
<li><strong>F1-Score</strong>: 2 × (Precision × Recall) / (Precision + Recall) – Harmonisches Mittel aus Präzision und Recall</li>
</ul>



<h3 class="wp-block-heading">Interaktive Anwendung</h3>



<p>Um die Berechnung dieser Metriken besser zu verstehen, bietet die folgende interaktive Anwendung die Möglichkeit, Werte für TP, FP, TN und FN einzugeben. Das System berechnet daraufhin automatisch die entsprechenden Metriken und zeigt zudem den vollständigen Rechenweg an.</p>



<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Interaktive Konfusionsmatrix</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; }
        table { margin: auto; border-collapse: collapse; width: 50%; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: center; }
        input { width: 80px; height: 40px; font-size: 16px; text-align: center; }
        .result { margin-top: 20px; font-weight: bold; text-align: left; display: inline-block; }
        .button-container { margin-top: 20px; }
        button { padding: 15px 30px; font-size: 18px; border: none; cursor: pointer; border-radius: 5px; }
        button:hover { opacity: 0.9; }
        .calculate-btn { background-color: #007BFF; color: white; }
    </style>
</head>
<body>
    <h2>Interaktive Konfusionsmatrix</h2>
    <table>
        <tr>
            <th></th>
            <th>Vorhergesagt: Positiv</th>
            <th>Vorhergesagt: Negativ</th>
        </tr>
        <tr>
            <td><strong>Tatsächlich: Positiv</strong></td>
            <td><input type="number" id="tp" value="50" min="0"></td>
            <td><input type="number" id="fn" value="10" min="0"></td>
        </tr>
        <tr>
            <td><strong>Tatsächlich: Negativ</strong></td>
            <td><input type="number" id="fp" value="5" min="0"></td>
            <td><input type="number" id="tn" value="100" min="0"></td>
        </tr>
    </table>
    <div class="result" id="results"></div>
    <div class="button-container">
        <button class="calculate-btn" onclick="calculateMetrics()">Berechnen</button>
    </div>
    
    <script>
        function calculateMetrics() {
            let tp = parseInt(document.getElementById('tp').value) || 0;
            let fp = parseInt(document.getElementById('fp').value) || 0;
            let tn = parseInt(document.getElementById('tn').value) || 0;
            let fn = parseInt(document.getElementById('fn').value) || 0;

            let accuracy = ((tp + tn) / (tp + tn + fp + fn)).toFixed(2);
            let precision = (tp / (tp + fp)).toFixed(2);
            let recall = (tp / (tp + fn)).toFixed(2);
            let f1Score = (2 * (precision * recall) / (parseFloat(precision) + parseFloat(recall))).toFixed(2);

            document.getElementById('results').innerHTML = `
                <p>Genauigkeit (Accuracy): <strong>${accuracy}</strong></p>
                <p>Berechnung: (${tp} + ${tn}) / (${tp} + ${tn} + ${fp} + ${fn})</p>
                <p>Präzision (Precision): <strong>${precision}</strong></p>
                <p>Berechnung: ${tp} / (${tp} + ${fp})</p>
                <p>Recall (Sensitivität): <strong>${recall}</strong></p>
                <p>Berechnung: ${tp} / (${tp} + ${fn})</p>
                <p>F1-Score: <strong>${f1Score}</strong></p>
                <p>Berechnung: 2 × (${precision} × ${recall}) / (${precision} + ${recall})</p>
            `;
        }
    </script>
</body>
</html>



<p><p style="font-family: Arial, sans-serif;">Die Konfusionsmatrix ist also ein essenzielles Hilfsmittel, um die Stärken und Schwächen eines Modells zu verstehen. Sie liefert detaillierte Einblicke in die Klassifikationsleistung und hilft dabei, das Modell gezielt zu verbessern.</p></p>
<p>Der Beitrag <a href="https://ceosbay.com/2025/01/30/konfusionsmatrix-schluesselwerkzeug-zur-bewertung-von-ki-modellen/">Konfusionsmatrix &#8211; Schlüsselwerkzeug zur Bewertung von KI-Modellen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2025/01/30/konfusionsmatrix-schluesselwerkzeug-zur-bewertung-von-ki-modellen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3144</post-id>	</item>
		<item>
		<title>Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</title>
		<link>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/</link>
					<comments>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 12 Oct 2023 21:58:52 +0000</pubDate>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Spieleentwicklung]]></category>
		<category><![CDATA[Algorithmus]]></category>
		<category><![CDATA[Anwendungslogik]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Benutzeroberfläche]]></category>
		<category><![CDATA[Breakpoint]]></category>
		<category><![CDATA[Call-Stack]]></category>
		<category><![CDATA[Codeausführung]]></category>
		<category><![CDATA[Codeteilung]]></category>
		<category><![CDATA[Codeüberprüfung]]></category>
		<category><![CDATA[Computergeschichte]]></category>
		<category><![CDATA[Datenbankabfragen]]></category>
		<category><![CDATA[Datenbankantworten]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Designfehler]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Exception-Handling]]></category>
		<category><![CDATA[Fehlerbehebung]]></category>
		<category><![CDATA[Fehlerdiagnose]]></category>
		<category><![CDATA[Fehlerprotokoll]]></category>
		<category><![CDATA[Fehlerquelle]]></category>
		<category><![CDATA[Fehlerreproduktion]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Funktionsüberprüfung]]></category>
		<category><![CDATA[Grace Hopper]]></category>
		<category><![CDATA[Haltepunkte]]></category>
		<category><![CDATA[Heap-Analyse]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[Isolierung]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Kompilierungsfehler]]></category>
		<category><![CDATA[Konsolenprotokoll]]></category>
		<category><![CDATA[Laufzeitfehler]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Laufzeituntersuchung]]></category>
		<category><![CDATA[Logging-Techniken]]></category>
		<category><![CDATA[Logikfehler]]></category>
		<category><![CDATA[Lösungsimplementierung]]></category>
		<category><![CDATA[Multithreading-Probleme]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance-Messung]]></category>
		<category><![CDATA[Problemidentifikation]]></category>
		<category><![CDATA[Programmfluss]]></category>
		<category><![CDATA[Programmierfehler]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Race-Bedingungen]]></category>
		<category><![CDATA[Regressionstest]]></category>
		<category><![CDATA[Reproduktion]]></category>
		<category><![CDATA[Schleifen-Fehler]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwarefehler]]></category>
		<category><![CDATA[Speicherlecks]]></category>
		<category><![CDATA[Stack-Trace]]></category>
		<category><![CDATA[Symptome]]></category>
		<category><![CDATA[Synchronisationsprobleme]]></category>
		<category><![CDATA[Systematischer Ansatz]]></category>
		<category><![CDATA[Techniken]]></category>
		<category><![CDATA[Testen]]></category>
		<category><![CDATA[Thread-Analyse]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unit-Test]]></category>
		<category><![CDATA[Variablenüberwachung]]></category>
		<category><![CDATA[Watchpoint]]></category>
		<category><![CDATA[Webanwendungen]]></category>
		<category><![CDATA[Webfehler]]></category>
		<category><![CDATA[Zustandsprüfung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2597</guid>

					<description><![CDATA[<p>Debugging stellt einen zentralen Prozess in der Softwareentwicklung dar und beschäftigt sich mit der Identifizierung und Behebung von Fehlern in einem Code. Aber wie hat sich dieses Konzept entwickelt und welche Methoden gibt es, um &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/">Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Debugging stellt einen zentralen Prozess in der Softwareentwicklung dar und beschäftigt sich mit der Identifizierung und Behebung von Fehlern in einem Code. Aber wie hat sich dieses Konzept entwickelt und welche Methoden gibt es, um es effektiv zu nutzen? In diesem Beitrag biete ich eine grobe Übersicht über das Debugging und zeige anhand von Beispielen, wie es in der Praxis funktioniert.</p>



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



<p>Debugging bezeichnet den Prozess, Fehler (sogenannte &#8222;Bugs&#8220;) in einem Softwareprogramm zu finden und zu beheben. Dies kann Designfehler, Logikfehler oder Laufzeitfehler einschließen. Ziel ist es, eine reibungslose, effiziente und korrekte Ausführung des Programms sicherzustellen.</p>



<h3 class="wp-block-heading">Geschichte des Debuggings</h3>



<p>Der Begriff &#8222;Debugging&#8220; leitet sich von der frühen Computergeschichte ab, als Grace Hopper, eine Computerpionierin, einen echten Insekten (einen Motte) im Relay eines Computers entdeckte und diesen entfernte. Dieses Ereignis dokumentierte sie als &#8222;ersten echten Bug&#8220; und gab so dem Prozess seinen Namen. Das Foto von dieser Motte möchte ich niemandem vorenthalten.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="871" height="585" src="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=871%2C585&#038;ssl=1" alt="" class="wp-image-2733" srcset="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1024%2C688&amp;ssl=1 1024w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=300%2C202&amp;ssl=1 300w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=768%2C516&amp;ssl=1 768w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1536%2C1032&amp;ssl=1 1536w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1070%2C719&amp;ssl=1 1070w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?w=1720&amp;ssl=1 1720w" sizes="(max-width: 871px) 100vw, 871px" /></figure>



<h3 class="wp-block-heading">Wie nähert man sich dem Debugging?</h3>



<ol class="wp-block-list">
<li><strong>Verstehen des Problems</strong>: Bevor man einen Fehler beheben kann, muss man das Problem genau verstehen. Deshalb gilt, die Symptome des Bugs zu identifizieren und zu wissen, wann und wie er auftritt.</li>



<li><strong>Reproduktion des Fehlers</strong>: Ein Fehler, den man zuverlässig reproduzieren kann, lässt sich leichter lokalisieren und beheben.</li>



<li><strong>Einsatz von Debugging-Tools</strong>: Moderne Programmiersprachen bieten spezielle Werkzeuge, um den Code zur Laufzeit zu untersuchen, z.B. Debugger, die es erlauben, den Code Schritt für Schritt auszuführen und den Zustand der Variablen zu beobachten.</li>



<li><strong>Isolieren des Problems</strong>: Manchmal hilft es, den Code in kleinere Abschnitte zu unterteilen oder testweise Codeabschnitte zu deaktivieren. Somit kann man die Fehlerquelle eingrenzen.</li>



<li><strong>Lösung implementieren und testen</strong>: Nachdem der Fehler gefunden ist, muss man eine Lösung implementieren und ausführlich testen, um sicherzustellen, dass das Problem behoben ist und keine neuen Fehler eingeführt wurden.</li>
</ol>



<h3 class="wp-block-heading">Praktische Beispiele für Debugging</h3>



<ul class="wp-block-list">
<li><strong>Fehler in einer Schleife</strong>: Ein Programm zählt nicht korrekt. Daher untersucht man mit einem Debugger den Schleifen-Code, setzt Haltepunkte und beobachtet, wie sich die Zählvariable verändert.</li>



<li><strong>Datenbankabfragen</strong>: Eine Datenbankabfrage liefert nicht die erwarteten Ergebnisse. Daher kann man durch das Überprüfen der Abfrage und den Einsatz von Logging-Techniken sehen, welche Daten die Datenbank tatsächlich zurückgibt und wo das Problem liegt.</li>



<li><strong>Webanwendungen</strong>: Ein Button auf einer Webseite funktioniert nicht. Somit lassen sich mit den Entwicklertools des Browsers <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>-Fehler aufdecken und beheben.</li>
</ul>



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



<p>Es gibt viele Debugging-Tools, die sich in ihrer Funktionalität, Anwendungsbereich und unterstützten Programmiersprachen unterscheiden. Hier ist eine Liste einiger gängiger und weit verbreiteter Debugging-Tools:</p>



<ol class="wp-block-list">
<li><strong>GDB (GNU Debugger)</strong>: Ein mächtiger Debugger für viele Programmiersprachen, insbesondere C und <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a>.</li>



<li><strong>LLDB</strong>: Der Debugger von LLVM, der primär für C, <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a> und Objective-C verwendet wird.</li>



<li><strong>pdb</strong>: Ein Debugger für <a href="https://ceosbay.com/2022/12/20/erklaerung-python/">Python</a>.</li>



<li><strong>Visual Studio Debugger</strong>: Integriert in die <a href="https://ceosbay.com/2023/02/22/visual-studio-code-der-leichte-schwergewicht/">Visual Studio</a> IDE und unterstützt mehrere Sprachen, insbesondere C#, <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a> und VB.NET.</li>



<li><strong>Xcode Debugger</strong>: Ein Debugger für iOS- und <a href="https://ceosbay.com/2023/10/05/macos-intuitiv-sicher-nahtlos/">MacOS</a>-Anwendungen, hauptsächlich in Swift und Objective-C geschrieben. (Siehe auch meinen Beitrag über <a href="https://ceosbay.com/2023/09/26/xcode-wo-ideen-zu-apple-apps-werden/">Xcode</a>)</li>



<li><strong>Eclipse Java Development Tools (JDT)</strong>: Für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a>-Anwendungen.</li>



<li><strong>NetBeans Debugger</strong>: Ein Debugger für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> und andere Sprachen, der in der NetBeans IDE integriert ist.</li>



<li><strong>Firebug &amp; Firefox Developer Tools</strong>: Werkzeuge zum Debuggen von Webseiten, insbesondere <a href="https://ceosbay.com/2022/12/29/erklaerung-html/">HTML</a>, <a href="https://ceosbay.com/2023/02/27/erklaerung-css/">CSS</a> und <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>, in Firefox.</li>



<li><strong>Chrome Developer Tools</strong>: Integrierte Debugging- und Profilierungswerkzeuge für Webentwickler in Google Chrome.</li>



<li><strong>Safari Web Inspector</strong>: Debugging-Tool für Webentwickler in Safari.</li>



<li><strong>Opera Dragonfly</strong>: Debugging-Tool für Webentwickler in Opera.</li>



<li><strong>WinDbg</strong>: Ein Windows-Debugger für native Anwendungen und Systemprobleme.</li>



<li><strong>Fiddler</strong>: Ein Web-Debugging-<a href="https://ceosbay.com/2023/07/21/proxy-sicher-schnell-und-zuverlaessig/">Proxy</a>, mit dem der Datenverkehr zwischen Computer und Internet überwacht werden kann.</li>



<li><strong>Wireshark</strong>: Ein Netzwerkanalyse-Tool, mit dem Datenverkehr &#8222;geschnüffelt&#8220; und analysiert werden kann. Siehe meinen Beitrag über <a href="https://ceosbay.com/2022/11/24/erklaerung-wireshark/">Wireshark</a>.</li>



<li><strong>Valgrind</strong>: Ein Instrumentierungsframework für das Dynamic Analysis von <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/">Linux</a>-Programmen. Besonders nützlich zum Aufspüren von Speicherlecks.</li>



<li><strong>IntelliJ IDEA Debugger</strong>: Für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> und andere JVM-Sprachen. Teil der <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/">IntelliJ IDEA IDE</a>.</li>



<li><strong>DTrace</strong>: Ein Werkzeug für die Tracing und Fehlerbehebung von Anwendungen und Systemen, verfügbar auf einigen <a href="https://ceosbay.com/2023/10/06/unix-das-betriebssystem-das-die-it-welt-veraenderte/">Unix</a>-basierten Systemen.</li>



<li><strong>strace &amp; ltrace</strong>: Tools für das Tracing von Systemaufrufen und Library-Aufrufen in <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/">Linux</a>.</li>



<li><strong>jdb</strong>: Ein Command-Line <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a>-Debugger.</li>



<li><strong>Node.js Inspector</strong>: Für das Debuggen von <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.js</a>-Anwendungen.</li>
</ol>



<h3 class="wp-block-heading">Weniger ist mehr</h3>



<p>Ich habe in diesem Beitrag nur einige der vielen verfügbaren Debugging-Tools genannt. Je nach Bedarf, Plattform und Programmiersprache gibt es spezialisierte Debugger und Hilfsmittel. Es empfiehlt sich, dass richtige Tool für den jeweiligen Anwendungsfall auszuwählen und sich mit seinen Funktionen vertraut zu machen.</p>



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



<p>Debugging spielt eine unverzichtbare Rolle in der Softwareentwicklung. Mit einem systematischen Ansatz und den richtigen Tools lässt sich der Prozess effizient gestalten. Es lohnt sich, ständig die eigenen Debugging-Fähigkeiten zu schärfen, um Programme von höchster Qualität zu erstellen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/">Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2597</post-id>	</item>
		<item>
		<title>Puppeteer &#8211; Automatisierung und End-to-End-Tests im Web</title>
		<link>https://ceosbay.com/2023/10/10/puppeteer-automatisierung-und-end-to-end-tests-im-web/</link>
					<comments>https://ceosbay.com/2023/10/10/puppeteer-automatisierung-und-end-to-end-tests-im-web/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 10 Oct 2023 16:10:00 +0000</pubDate>
				<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Informationstechnologie]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Browser-Steuerung]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Chromium]]></category>
		<category><![CDATA[Content-Rendering]]></category>
		<category><![CDATA[End-to-End-Tests]]></category>
		<category><![CDATA[Formularautomatisierung]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Headless-Browser]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Netzwerküberwachung]]></category>
		<category><![CDATA[Node-Bibliothek]]></category>
		<category><![CDATA[Node.JS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PDF-Generierung]]></category>
		<category><![CDATA[Performance-Analyse]]></category>
		<category><![CDATA[Puppeteer]]></category>
		<category><![CDATA[Screenshot-Erstellung]]></category>
		<category><![CDATA[Seiteninteraktion]]></category>
		<category><![CDATA[Web-Scraping]]></category>
		<category><![CDATA[Webanwendungen]]></category>
		<category><![CDATA[Webautomatisierung]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2535</guid>

					<description><![CDATA[<p>Puppeteer hat in der Welt der Webentwicklung viel Anerkennung gefunden. Aber was genau verbirgt sich dahinter? In diesem Beitrag erkläre ich einiges über Puppeteer, die Entstehung, Nutzung und über die Einrichtung. Was ist Puppeteer? Puppeteer &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/10/puppeteer-automatisierung-und-end-to-end-tests-im-web/">Puppeteer &#8211; Automatisierung und End-to-End-Tests im Web</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Puppeteer hat in der Welt der Webentwicklung viel Anerkennung gefunden. Aber was genau verbirgt sich dahinter? In diesem Beitrag erkläre ich einiges über Puppeteer, die Entstehung, Nutzung und über die Einrichtung.</p>



<h2 class="wp-block-heading">Was ist Puppeteer?</h2>



<p>Puppeteer stellt eine Node-Bibliothek dar und ist <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a>. Es bietet eine High-Level-<a href="https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/">API</a> zur Steuerung von Chrome oder Chromium über das DevTools Protocol. Es ermöglicht Entwicklern, Headless-Browser- oder Full-Browser-Tests durchzuführen, Inhalte zu rendern, Seiten zu scannen und viele andere automatisierte Aufgaben in Webseiten durchzuführen.</p>



<p>Das Projekt wird von Google Chrome entwickelt und <a href="https://github.com/puppeteer/puppeteer">steht auf GitHub zur Verfügung</a>. Interessierte Entwickler können den Quellcode einsehen, Änderungen vorschlagen, Fehler melden oder sogar zur Weiterentwicklung des Projekts beitragen. Da es <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> ist, fördert es eine aktive Gemeinschaftsbeteiligung und bietet Transparenz in Bezug auf Funktionalität und Sicherheit.</p>



<h2 class="wp-block-heading">Die Entstehung von Puppeteer</h2>



<p>Google Chrome hat es entwickelt und 2017 erstmals veröffentlicht. Die primäre Intention lag darin, Entwicklern eine Möglichkeit zu bieten, ihre Webanwendungen automatisch zu testen und die Performance ihrer Seiten zu analysieren. Da Puppeteer direkt von dem Team hinter Chrome stammt, genießt es nahtlose Integrationen und ständige Updates, die mit den neuesten Browserfunktionen übereinstimmen.</p>



<h2 class="wp-block-heading">Puppeteer nutzen</h2>



<p>Um es optimal zu nutzen, benötigen Entwickler Grundkenntnisse in <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>, da die Bibliothek auf <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.js</a> basiert. Hier einige Hauptfunktionen und wie man sie nutzt:</p>



<ol class="wp-block-list">
<li><strong>Seiten öffnen und Screenshots erstellen</strong></li>
</ol>



<pre class="wp-block-code"><code>const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'screenshot.png' });
  await browser.close();
})();</code></pre>



<ol class="wp-block-list">
<li><strong>Automatisiertes Formularausfüllen und Klicken</strong></li>
</ol>



<pre class="wp-block-code"><code>const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/form');
  
  await page.type('#username', 'myUser');
  await page.type('#password', 'myPassword');
  await page.click('&#91;type="submit"]');
  
  await browser.close();
})();</code></pre>



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



<p>Die Einrichtung erfolgt in wenigen Schritten:</p>



<ol class="wp-block-list">
<li><strong>Node.js installieren</strong>: Node.js ist eine Voraussetzung. Daher sollte man zuerst Node.js und npm (Node Package Manager) auf dem System installieren.</li>



<li><strong>Puppeteer über npm installieren</strong>: <code>npm install puppeteer</code></li>



<li>Nach erfolgreicher Installation lässt es sich in jedem Node.js-Skript verwenden.</li>
</ol>



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



<p>Puppeteer revolutioniert die Art und Weise, wie Entwickler das Web automatisieren und testen. Mit einer aktiven Community und der starken Unterstützung von Google bleibt es ein wertvolles Tool für jeden Webentwickler. Es bietet nicht nur Testmöglichkeiten, sondern auch Performance-Optimierungen, Content-Scraping und mehr. Mit der einfachen Einrichtung und der umfangreichen Dokumentation starten Entwickler in kürzester Zeit mit der Automatisierung ihrer Webanwendungen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/10/puppeteer-automatisierung-und-end-to-end-tests-im-web/">Puppeteer &#8211; Automatisierung und End-to-End-Tests im Web</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/10/puppeteer-automatisierung-und-end-to-end-tests-im-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2535</post-id>	</item>
		<item>
		<title>XSS Cross-Site Scripting</title>
		<link>https://ceosbay.com/2023/08/17/xss-cross-site-scripting/</link>
					<comments>https://ceosbay.com/2023/08/17/xss-cross-site-scripting/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 17 Aug 2023 15:27:36 +0000</pubDate>
				<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Angriffsmethoden]]></category>
		<category><![CDATA[Benutzersicherheit]]></category>
		<category><![CDATA[Browser-Sicherheit]]></category>
		<category><![CDATA[Content Security Policies]]></category>
		<category><![CDATA[Cookie-Diebstahl]]></category>
		<category><![CDATA[Cross-Site Scripting]]></category>
		<category><![CDATA[Cyberbedrohungen]]></category>
		<category><![CDATA[DOM-basiertes XSS]]></category>
		<category><![CDATA[Eingabeüberprüfung]]></category>
		<category><![CDATA[Eingabevalidierung]]></category>
		<category><![CDATA[Gespeichertes XSS]]></category>
		<category><![CDATA[HTML-Desinfektion]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Reflektiertes XSS]]></category>
		<category><![CDATA[Sicherheitsbest-Practices]]></category>
		<category><![CDATA[Sicherheitsrisiken]]></category>
		<category><![CDATA[Skript-Attacken]]></category>
		<category><![CDATA[Web-Sicherheitslücke]]></category>
		<category><![CDATA[Web-Sicherheitspraktiken]]></category>
		<category><![CDATA[Webanwendungsbedrohungen]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[XSS]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2126</guid>

					<description><![CDATA[<p>Cross-Site Scripting, häufig unter dem Kürzel XSS bekannt, ist eine der bekanntesten und am weitesten verbreiteten Sicherheitslücken im Web. Bei dieser Art von Angriff kann ein Angreifer schädlichen Code in Webseiten einfügen, die dann von &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/08/17/xss-cross-site-scripting/">XSS Cross-Site Scripting</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cross-Site Scripting, häufig unter dem Kürzel XSS bekannt, ist eine der bekanntesten und am weitesten verbreiteten Sicherheitslücken im Web. Bei dieser Art von Angriff kann ein Angreifer schädlichen Code in Webseiten einfügen, die dann von ahnungslosen Benutzern ausgeführt wird.</p>



<h2 class="wp-block-heading"><strong>Entstehungsgeschichte von XSS</strong></h2>



<p>Die Wurzeln von XSS liegen in den frühen Tagen des Webs. Mit der wachsenden Beliebtheit von interaktiven Webanwendungen und der steigenden Komplexität von <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a> entstand ein Bedarf, diese Skripte sicher beherrschen. Es ist schwer zu bestimmen, wer genau den ersten Angriff mit dieser Methode durchgeführt hat, da viele Webentwickler unabhängig voneinander auf diese Sicherheitslücke stießen. Der Begriff &#8222;Cross-Site Scripting&#8220; selbst entstand in den 1990er Jahren und war eine Anspielung auf &#8222;Cross-Site Tracking&#8220;.</p>



<h2 class="wp-block-heading"><strong>Funktionsweise von XSS</strong></h2>



<p>Ein einfaches Beispiel: Eine Webseite erlaubt es Benutzern, Kommentare zu posten. Ein Angreifer könnte nun einen Kommentar posten, der im eigentlichen Sinn ein schädliches Skript ist:</p>



<p><code>&lt;script&gt;alert('XSS Angriff!');&lt;/script&gt;</code></p>



<p>Würde die Webseite diesen Kommentar ohne Überprüfung anzeigen, würde jeder Besucher dieses Kommentars eine Popup-Nachricht mit &#8222;XSS Angriff!&#8220; sehen. Das ist ein einfaches Beispiel, aber in der Praxis können derartige Angriffe viel komplexer und schädlicher sein, etwa indem sie <a href="https://ceosbay.com/2023/07/16/cookies-versteckte-kruemel-monster-des-internets/">Cookies</a> stehlen oder andere Aktionen im Namen des Benutzers ausführen.</p>



<h2 class="wp-block-heading"><strong>Arten von XSS-Angriffen</strong></h2>



<ol class="wp-block-list">
<li><strong>Reflektiertes XSS</strong>: Hier wird der schädliche Code über die URL oder durch eine andere externe Eingabe an die Webseite übermittelt und direkt ausgeführt, ohne das eine Speicherung auf der Webseite erfolgen muss.</li>



<li><strong>Gespeichertes XSS</strong>: Dieser Angriff beinhaltet das Speichern des schädlichen Skripts auf der Webseite. Beispielsweise durch einen Kommentar. Wenn andere Benutzer die Seite besuchen, erfolgt die Ausführung des Skripts.</li>



<li><strong>DOM-basiertes XSS</strong>: Bei diesem Angriff wird der schädliche Code durch Manipulation des Document Object Models (DOM) der Seite eingefügt und ausgeführt.</li>
</ol>



<h2 class="wp-block-heading"><strong>Schutz vor XSS</strong></h2>



<p>Sicherheit dagegen erfordert eine robuste Eingabevalidierung und -desinfektion. Folgende Praktiken helfen dabei:</p>



<ul class="wp-block-list">
<li>Nutzen von Content Security Policies (CSP), die das Ausführen von nicht autorisierten Skripten blockieren.</li>



<li>Validierung sämtlicher Eingaben vor der Verarbeitung.</li>



<li><a href="https://ceosbay.com/2022/12/29/erklaerung-html/">HTML</a>&#8211; und <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>-Code mithilfe von Bibliotheken oder Funktionen wie <code>htmlspecialchars()</code> in <a href="https://ceosbay.com/2023/02/26/erklaerung-php/">PHP</a> oder <code>encodeForHTML()</code> in <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> desinfizieren.</li>



<li>Verwendung von <a href="https://ceosbay.com/2023/07/04/https-und-https-eine-reise-zur-web-sicherheit/">HTTP</a>-only-<a href="https://ceosbay.com/2023/07/16/cookies-versteckte-kruemel-monster-des-internets/">Cookies</a>, um das Stehlen von <a href="https://ceosbay.com/2023/07/16/cookies-versteckte-kruemel-monster-des-internets/">Cookies</a> zu verhindern.</li>
</ul>



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



<p>XSS ist eine ernste Bedrohung im modernen Web, aber durch sorgfältige Entwicklung und die Implementierung von Best Practices lässt sich das Risiko erheblich reduzieren. Es bleibt entscheidend, immer auf dem neuesten Stand der Sicherheitspraktiken zu bleiben und Webanwendungen regelmäßig auf Schwachstellen zu überprüfen. Ansonsten kann ich an dieser Stelle auch den Beitrag über <a href="https://ceosbay.com/2023/08/15/owasp-der-schluessel-zur-sicherheit-von-webanwendungen/">OWASP</a> empfehlen (Zur <a href="https://owasp.org">offiziellen Seite von OWASP</a> geht es <a href="https://owasp.org">hier</a> entlang).</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/08/17/xss-cross-site-scripting/">XSS Cross-Site Scripting</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/08/17/xss-cross-site-scripting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2126</post-id>	</item>
		<item>
		<title>Jasmine &#8211; JavaScript Testautomatisierung</title>
		<link>https://ceosbay.com/2023/04/16/erklaerung-jasmine/</link>
					<comments>https://ceosbay.com/2023/04/16/erklaerung-jasmine/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 16 Apr 2023 06:23:35 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Anwendungen]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[Best]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Ent-to-End]]></category>
		<category><![CDATA[Flexibilität]]></category>
		<category><![CDATA[Funktionsweise]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Integrationstests]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Karma]]></category>
		<category><![CDATA[Konstrukt]]></category>
		<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Mocks]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Prozesse]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Qualitätsmanagement]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Spec]]></category>
		<category><![CDATA[Specs]]></category>
		<category><![CDATA[Spy]]></category>
		<category><![CDATA[spyOn]]></category>
		<category><![CDATA[Struktur]]></category>
		<category><![CDATA[Strukturieren]]></category>
		<category><![CDATA[Suite]]></category>
		<category><![CDATA[Syntax]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testabdeckung]]></category>
		<category><![CDATA[Testbeschreibung]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unit]]></category>
		<category><![CDATA[Vorteile]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1483</guid>

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



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



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



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



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



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



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



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



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



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



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



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

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

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



<p>oder</p>



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



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



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



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



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



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



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



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



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



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



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



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



<p>Jasmine ist ein leistungsstarkes und vielseitiges <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> für das Testen von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen. Mit seiner klaren Syntax, Flexibilität und Integration in moderne Entwicklungsprozesse ist es ein unverzichtbares Werkzeug für jeden <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>-Entwickler. Durch die Befolgung der Best Practices und die regelmäßige Ausführung von Tests können Entwickler sicherstellen, dass ihr Code zuverlässig und fehlerfrei funktioniert. Insgesamt trägt Jasmine dazu bei, die Qualität von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Anwendungen zu verbessern und die Entwicklungszeit zu reduzieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/16/erklaerung-jasmine/">Jasmine &#8211; JavaScript Testautomatisierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/16/erklaerung-jasmine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1483</post-id>	</item>
		<item>
		<title>SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</title>
		<link>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/</link>
					<comments>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 17 Mar 2023 16:12:48 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[1061]]></category>
		<category><![CDATA[1998]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[Anwendung]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Checkstyle]]></category>
		<category><![CDATA[Cobol]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Codebasis]]></category>
		<category><![CDATA[Entwicklungsprozess]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[FindBugs]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Komplexität]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[PMD]]></category>
		<category><![CDATA[Prüfung]]></category>
		<category><![CDATA[Qube]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Quelle]]></category>
		<category><![CDATA[Quelltext]]></category>
		<category><![CDATA[Rechner]]></category>
		<category><![CDATA[Richtlinien]]></category>
		<category><![CDATA[Schnittstellen]]></category>
		<category><![CDATA[Schulden]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sonar]]></category>
		<category><![CDATA[SonarQube]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[Sting]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Überprüfen]]></category>
		<category><![CDATA[Zyklomatisch]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1176</guid>

					<description><![CDATA[<p>SonarQube früher Sonar, ist eine Plattform für die statische Analyse und Bewertung der technischen Qualität von Quelltext bzw. Code. SonarQube analysiert den Quelltext hinsichtlich verschiedener Qualitätsmerkmale und stellt die Ergebnisse über eine Website dar. SonarQube &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/17/erklaerung-sonarqube/">SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>SonarQube früher Sonar, ist eine Plattform für die statische Analyse und Bewertung der technischen Qualität von Quelltext bzw. Code. SonarQube analysiert den Quelltext hinsichtlich verschiedener Qualitätsmerkmale und stellt die Ergebnisse über eine Website dar. SonarQube ist in <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> programmiert, unterstützt aber neben der Analyse von <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Anwendungen mit entsprechenden Plugins unter anderem die Programmiersprachen <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, Groovy, Flex, PHP, PL/SQL, C#, Cobol und die des .Net-Frameworks.</p>



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



<p><strong>SonarQube besteht aus drei Komponenten</strong></p>



<ol class="wp-block-list" type="1">
<li>Einem Modul für Build-Management-Tools wie <a href="https://ceosbay.com/2022/12/22/erklaerung-maven/" target="_blank" rel="noreferrer noopener">Apache Maven</a> oder Apache Ant. (Hauptsächlich für die Analyse des Quelltextes hinsichtlich verschiedener Qualitätsmerkmale.)</li>



<li>Einer Datenbank, für Speicherung der Ergebnisse der Qualitätsanalyse.</li>



<li>Einer Website für die visuelle Darstellung, Auswertung und das Management der Qualitätsanalyse-Ergebnisse.</li>
</ol>



<p>Durch diese Architektur kann man sowohl eine Prüfung des Quelltextes auf dem Entwicklungsrechner ermöglichen als auch eine Einbindung von SonarQube in den Entwicklungsprozess gewährleisten. Dies unterstützt die Ermittlung der Qualitätsmetriken auf einem Build-Server für die kontinuierliche Integration.</p>



<p>SonarQube analysiert den Quelltext hinsichtlich der Abdeckung durch Modultests, checkt den Quellcode nach doppeltem Code und in Bezug auf die Komplexität. Auch werden unter anderem potenzielle Fehler im Code, Kodier-Richtlinien als auch Kommentare überprüft.</p>



<h3 class="wp-block-heading">Modularer Aufbau und Erweiterungen</h3>



<p>SonarQube ist modular aufgebaut und integriert selbst einige bekannte Entwicklungswerkzeuge zur Analyse der Codequalität, darunter PMD und Checkstyle für die Erkennung von doppeltem Code für die Prüfung von Kodier-Richtlinien. Damit wird unter anderem auch nach ineffizientem Code gesuche. FindBugs dient beispielsweise zum Aufdecken potenzieller Fehler sowie Surefire und Cobertura zur Messung der Qualität der Modultests.</p>



<p>Diese Werkzeuge nutzen entsprechend ihrer Natur und Einsatzgebiete Metriken, um die jeweiligen Auswertungen bzw. Statistiken zu erzeugen. Der Name „Metrik“ trägt jedoch wenig Bedeutung von dem in sich, was eine Metrik ausmacht. Schlägt man nämlich nach woher der Name kommt, landet man im Lateinischen: „ars metrica„, die Lehre von den Maßen. Fragt man jedoch das Institute of Electrical and Electronics Engineers, was eine Softwaremetrik ist, erhält man folgende Antwort:</p>



<p>„software quality metric: A function whose inputs are software data and whose output is a single numerical value that can be interpreted as the degree to which software possesses a given attribute that affects its quality.“ „Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software-Einheit in einen Zahlenwert abbildet, der als Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit interpretierbar ist.“ – IEEE Standard 1061, 1998</p>



<p>Folglich bedeutet dies, dass es sich bei einer Metrik am Ende des Tages um eine Funktion handelt, die für beliebige Eingaben Zahlen erzeugt. Die Beschaffenheit ist so, dass sie, nur so&nbsp;</p>



<p>lange sie von derselben Funktion erzeugt wurden, vergleichbar sind. Dadurch kann man Rückschlüsse auf die Eingabe mit Hinblick auf die Funktion erzielen.</p>



<p>Ein Beispiel dafür ist die McCabe-Metrik, auch zyklomatische Komplexität genannt. Diese sehr grundlegende Metrik berechnet die Anzahl der unterschiedlichen Pfade durch ein Stück Code. Die Formel ist relativ einfach: Es wird die Anzahl an Kontrollstrukturen wie if, while, case und boolescher Operatoren wie &amp;&amp; und || summiert und nochmals mit 1 addiert. Möchte man diese Information nochmals anhand eines Beispiels betrachten, sieht es folgendermaßen aus:</p>



<pre class="wp-block-code"><code>String nameDesWochenTags(int nr) {
  switch(nr) {
    case 1: return "Montag";
    case 2: return "Dienstag";
    case 3: return "Mittwoch";
    case 4: return "Donnerstag";
    case 5: return "Freitag";
    case 6: return "Samstag";
    case 7: return "Sonntag";
  }
  return "";
}</code></pre>



<p>Diese relativ einfache Methode gibt den Namen eines Wochentages entsprechend seiner 1-indizierten Position innerhalb der Woche zurück. Ihre zyklomatische Komplexität beträgt 8. Zumal 1 + 7 x case. Dies ist ein verhältnismäßig hoher Wert. Ein Maximalwert von 10 gilt als allgemein akzeptiert und ausreichend erprobt. Um also die Komplexität dieser Methode zu verringern, findet eine Refaktorisierung statt, die folgendermaßen aussehen kann:</p>



<pre class="wp-block-code"><code>String nameDesWochenTags(int nr) {
  String&#91;] names = new String&#91;] {
    "Montag", "Dienstag", "Mittwoch",
    "Donnerstag", "Freitag", "Samstag",
    "Sonntag"
  };
  if(nr) &gt; 0 &amp;&amp; &lt;= names.length) {
    return names&#91;nr - 1];
  }
  return "";
}</code></pre>



<p>Die zyklomatische Komplexität dieser Methode beträgt 3. Zumal 1 + 1 x if + 1 x &amp;&amp;. Durch den unterschiedlichen Ansatz kann man die Komplexität verringern. Dennoch ist es relativ unstrittig, dass die erste Version leichter zu verstehen ist.</p>



<p>Will man nun also alle Tools gemeinsam benutzen, muss man alle konfigurieren und ihre Ergebnisse zusammenführen, damit sich ein Gesamtbild darstellen lässt. Außerdem kommt es dabei zwangsweise zu Dopplungen in ausgewerteten Metriken oder anderen Kennzahlen. PMD beispielsweise besitzt durch seinen relativ vagen Aufgabenbereich Überschneidungen im Hinblick auf Codestil mit checkstyle, während es aber auch genauso wie FindBugs auf toten Code achtet. An solchen und weiteren Stellen kann SonarQube Verbesserungen herbeiführen.</p>



<p>Neben der visuellen Anzeige der Ergebnisse der einzelnen Bereiche, ermöglicht SonarQube das Drill-Down der Ergebnisse bis auf die einzelne Metrik und Codezeile sowie die Verknüpfung der einzelnen Metriken sowie die Darstellung ihrer historischen Entwicklung in einer recht übersichtlichen grafischen Oberfläche.</p>



<p>Über einen ausgeklügelten Plugin-Mechanismus ist eine relativ einfache Integration von Erweiterungen möglich. Neben den Erweiterungen für die Analyse zusätzlicher Programmiersprachen gibt es Plugins für ergänzende Metriken, Governance, Schnittstellen zu Entwicklungsumgebungen, Visualisierungen, Integration sowie zur Berechnung der technischen Schuld(en).</p>



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



<p>Ich arbeite noch nicht so lange mit SonarQube. Um genau zu sein, habe ich es mir erst heute das erste Mal angeschaut. Zusammenfassend kann ich folgendes sagen:</p>



<p>Statistiken sind zwar interessant und es kann Spaß machen, sich diese anzuschauen, doch ist eine statische Codeanalyse erst dann wirklich vollständig, wenn ein Mindestmaß an Interpretation hineingeflossen ist.</p>



<p>Die Codeanalyse liefert ein gutes Gefühl für die Codebasis. Erst so kann man fundierte Aussagen darüber treffen, welche Bereiche des Projekts besonders gefährdet, instabil oder verbesserungsfähig sind.</p>



<p>Regelmäßige Analysen können die Teammotivation erhöhen. Eine positive Issuebilanz am Ende eines Sprints und aufwärtszeigende Historiengraphen sollten gute Treiber für eine Gruppe Entwickler und ein Beweis für die eigene Leistung sein.</p>



<p>Alles in allem sind Analyseergebnisse immer gut als Argumentationsgrundlage. Mit Hilfe der Projekthistorie, die eine Auswahl gut darstellbarer Kennzahlen beinhaltet, kann man vor Kunden oder Entscheidern besser über ein eventuell nötiges technisches Release diskutieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/17/erklaerung-sonarqube/">SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1176</post-id>	</item>
		<item>
		<title>JSON &#8211; Schönheit der einfachen Datenübertragung</title>
		<link>https://ceosbay.com/2023/03/14/erklaerung-json/</link>
					<comments>https://ceosbay.com/2023/03/14/erklaerung-json/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Tue, 14 Mar 2023 18:23:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[8]]></category>
		<category><![CDATA[Anwendung]]></category>
		<category><![CDATA[Anwendungen]]></category>
		<category><![CDATA[Bibliotheken]]></category>
		<category><![CDATA[Daten]]></category>
		<category><![CDATA[Echtzeit]]></category>
		<category><![CDATA[Gründer]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[ISO]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Notation]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[Socket]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1071</guid>

					<description><![CDATA[<p>JSON JavaScript Object Notation, ist ein offenes Standard-Datei- und Datenaustauschformat, dass menschenlesbaren Text zur Speicherung und Übertragung (Serialisierung) von Datenobjekten, einschließlich dem von Webanwendungen mit Servern ermöglicht. JSON ist von JavaScript abgeleitet und Programmiersprachen unabhängig. &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/14/erklaerung-json/">JSON &#8211; Schönheit der einfachen Datenübertragung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>JSON <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> Object Notation, ist ein offenes Standard-Datei- und Datenaustauschformat, dass menschenlesbaren Text zur Speicherung und Übertragung (Serialisierung) von Datenobjekten, einschließlich dem von Webanwendungen mit Servern ermöglicht. JSON ist von <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> abgeleitet und Programmiersprachen unabhängig. Parser und Generatoren existieren in allen verbreiteten Sprachen.&nbsp;</p>



<p>Insbesondere trifft man auf JSON bei Webanwendungen und mobilen Apps in Verbindung mit <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, Ajax oder WebSockets zum Übertragen von Daten zwischen dem Client und dem Server.</p>



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



<p>Bei einer Abbildung von strukturierten Daten auf eine sequenzielle Darstellungsform, spricht man in der Informatik von einer Serialisierung. Die Serialisierung wird hauptsächlich für die Speicherung von Objekten in Dateien und für die Übertragung von Objekten über das Netzwerk bei verteilten Softwaresystemen verwendet.</p>



<p>Übliche Speichermedien sind nur in der Lage, Datenströme zu speichern. Serialisierung für die Persistenz von Objekten. Hier wird der komplette Zustand des Objektes, inklusive aller referenzierten Objekte, in einen Datenstrom umgewandelt, der anschließend auf ein Speichermedium geschrieben wird.</p>



<p>Nach der Serialisierung liegt ein Objekt mehrfach vor. Sowohl in der externen Darstellung, beispielsweise als Datei als auch im Arbeitsspeicher. Wird nach der Serialisierung eine Änderung am Objekt im Arbeitsspeicher vorgenommen, hat dieses keine Auswirkung auf das serialisierte Objekt in der externen Darstellung.</p>



<p>Die Umkehrung der Serialisierung, also die Umwandlung eines Datenstroms in Objekte, bezeichnet man als Deserialisierung.</p>



<p>In der Linguistik bezeichnet man mit Serialisierung die Art und Weise, wie hierarchische grammatikalische Strukturen in eine lineare Abfolge gebracht sind, damit sie in einer zeitlichen Abfolge sprachlicher Ausdrücke dargestellt werden kann. Diese Reihenfolge kann in verschiedenen Sprachen unterschiedlich sein.</p>



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



<p>JSON entstand aus der Notwendigkeit heraus, ein zustandsloses (stateless) Echtzeit-Kommunikationsprotokoll zwischen Server und Browser zu haben, ohne Browser-PlugIns wie Flash oder Java-Applets zu verwenden, die sich Anfang der 2000er Jahre als vorherrschende Methoden, im Einsatz befanden.</p>



<p>Crockford spezifizierte und verbreitete als Erster das JSON-Format. Das Akronym stammt von State Software, ein von Crockford und anderen im März 2001 gegründetes Unternehmen. Die Gründer hatten sich geeinigt, ein System zu entwickeln, dass Standard-Browser-Funktionen nutzte und eine Abstraktionsschicht für Web-Entwickler bereitstellte, um zustandsbehaftete (abstraction layer) Web-Anwendungen zu erstellen, die über eine dauerhafte Duplex-Verbindung zu einem Web-Server verfügten. Sie hielten dafür zwei Hypertext Transfer Protocol (https)-Verbindungen offen und bauten die Verbindung wieder auf, bevor die Standard-Browser-Timeouts eintraten, wenn kein Datenaustausch stattfand. Die Gründer stimmten darüber ab, ob das Datenformat JSML (<a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> Markup Language) oder JSON (<a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> Object Notation) genannt und unter welcher Lizenz die Verfügungstellung stattfinden sollte. Die Website JSON.org ging dann im Jahr 2002 online. Im Dezember 2005 begann Yahoo! damit, die ersten Webdienste (Web-Services) in JSON anzubieten.</p>



<h3 class="wp-block-heading">Vorgänger geht auf ein Spiel für Kinder</h3>



<p>Ein Vorläufer der JSON-Bibliotheken wurde in einem Projekt für Kinder, einem digitalen Trading-Spiel namens Cartoon Orbit bei Communities.com (Die Gründer von State hatten alle zuvor bei diesem Unternehmen gearbeitet), für Cartoon Network verwendet, dass ein browserseitiges Plugin mit einem proprietären Nachrichtenformat zur Manipulation von DHTML-Elementen nutzte (Dieses System gehört übriges 3DO). Nach der Entdeckung der frühen Ajax-Fähigkeiten verwendeten digiGroups, Noosh und andere, Frames, um Informationen in das visuelle Feld des Browsers zu übertragen, ohne den visuellen Kontext einer Webanwendung aktualisieren zu müssen. So hatten sie Rich-Web-Anwendungen in Echtzeit erstellt, die nur die Standard https-, <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a>&#8211; und <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Fähigkeiten von Netscape 4.0.5+ und IE 5+ verwendeten. Crockford fand darauf heraus, dass <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> als objektbasiertes Nachrichtenformat für ein solches System verwendet werden kann. Das System wurde später an Sun Microsystems, Amazon.com und EDS verkauft.</p>



<p>JSON basiert teilweise auf <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> und wird häufig auch mit <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> verwendet. Dennoch ist es ein sprachunabhängiges Datenformat. Code zum Parsen und Generieren von JSON-Daten ist in vielen Programmiersprachen leicht verfügbar. Auf der JSON-Website sind die JSON-Bibliotheken nach Sprachen geordnet.</p>



<p>Im Oktober 2013 veröffentlichte Ecma International die erste Ausgabe seines JSON-Standards ECMA-404. Im selben Jahr verwendete RFC 7158 ECMA-404 als Referenz. 2014 wurde RFC 7159 zur Hauptreferenz für die Verwendung von JSON im Internet und löste RFC 4627 sowie RFC 7158 ab (wobei ECMA-262 und ECMA-404 als Hauptreferenzen beibehalten wurden). Im November 2017 veröffentlichte ISO/IEC JTC 1/SC 22 ISO/IEC 21778:2017 als internationalen Standard. Am 13. Dezember 2017 hat die Internet Engineering Task Force RFC 7159 durch die Veröffentlichung von RFC 8259, der aktuellen Version des Internet-Standards STD 90, überholt (ersetzt).</p>



<p>Crockford fügte der JSON-Lizenz eine Klausel hinzu, die besagt, dass &#8222;die Software für das Gute, nicht für das Böse verwendet werden soll&#8220;, um die JSON-Bibliotheken zu öffnen und sich gleichzeitig über Unternehmensjuristen und diejenigen lustig zu machen, die übermäßig pedantisch sind. Ironischer- und lustigerweise führte diese Klausel zu Konflikten der JSON-Lizenz mit anderen <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>-Lizenzen, da <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>-Software und freie Software in der Regel keine Einschränkungen hinsichtlich des Verwendungszwecks implizieren.</p>



<h3 class="wp-block-heading">Wie ist JSON aufgebaut?</h3>



<p>Die Daten können beliebig verschachtelt werden, beispielsweise ist ein Array (indizierte Liste) von Objekten möglich, die wiederum Arrays oder Objekte enthalten. Als Zeichenkodierung benutzt JSON standardmäßig UTF-8. Auch UTF-16 und UTF-32 werden unterstützt.</p>



<h3 class="wp-block-heading">JSON und die Typen von Elementen</h3>



<ul class="wp-block-list">
<li>null = Nullwert (Wird durch das Schlüsselwort null dargestellt.)</li>



<li>Boolean = Boolescher Wert (Wird durch die Schlüsselwörter true und false dargestellt. Dies sind keine Zeichenketten. Sie werden daher, wie null, nicht in Anführungszeichen gesetzt.</li>



<li>Number = Zahl (Ist eine Folge der Ziffern 0–9. Diese Folge kann durch ein negatives Vorzeichen &#8211; eingeleitet und durch einen Dezimalpunkt . unterbrochen sein. Die Zahl kann durch die Angabe eines Exponenten e oder E ergänzt werden, dem ein optionales Vorzeichen + oder &#8211; und eine Folge der Ziffern 0–9 folgt.)</li>



<li>String = Zeichenkette (Eine Folge von null oder mehr Unicode-Zeichen. Es beginnt und endet mit doppelten geraden Anführungszeichen (&#8222;). Es kann Unicode-Zeichen und durch \ eingeleitete Escape-Sequenzen enthalten.</li>



<li>Array = Anordnung (Beginnt mit [ und endet mit ]. Es enthält eine durch Kommata geteilte, indizierte Liste von Elementen gleichen oder verschiedenen Typen. Leere Arrays sind ebenfalls zulässig.</li>



<li>Object = Objekt (Beginnt mit { und endet mit }. Es enthält eine durch Kommata geteilte, ungeordnete Liste von Eigenschaften. Objekte ohne Eigenschaften („leere Objekte“) sind ebenfalls zulässig. Das Objekt besteht aus einem Schlüssel und einem Wert, getrennt durch einen Doppelpunkt (Schlüssel : Wert). Die Schlüssel sollten eindeutig sein, da unterschiedliche Parser mit mehrfach vorkommenden Schlüsseln unterschiedlich umgehen. Während ECMA-404 keine Eindeutigkeit voraussetzt, fordert RFC 7159, dass Schlüssel innerhalb eines Objekts eindeutig sind. Folglich ist der Schlüssel eine Zeichenkette und der Wert ein beliebiges Element.</li>
</ul>



<p>Nicht signifikante Leerraum-Zeichen sind erlaubt, also Leerzeichen (Unicode U+0020), horizontale Tabs (U+0009), Zeilenumbrüche mittels LF und / oder CR (U+000D und U+000A). Diese Zeichen werden außerhalb von Zeichenketten bei der Interpretation ignoriert.</p>



<h3 class="wp-block-heading">Die Grenzen von JSON</h3>



<p>JSON unterstützt nicht alle von JavaScript unterstützten Datentypen. Bei nicht unterstützten Datentypen wird folgendermaßen serialisiert:</p>



<ul class="wp-block-list">
<li>NaN, Infinity und -Infinity werden zu null serialisiert.</li>



<li>Date-Objekte werden in eine Zeichenkette konvertiert, die einer Datumsformatbeschreibung nach ISO-8601 genügt.</li>



<li>Function-, RegExp- und Error-Objekte werden verworfen.</li>
</ul>



<h3 class="wp-block-heading">Das folgende Beispiel zeigt eine mögliche JSON-Darstellung zur Beschreibung meiner Person.</h3>



<pre class="wp-block-code"><code>{
  "Unternehmen": "COEZBAY",
  "Nummer": "2023-23-23-777",
  "Waehrung": "BTC",
  "Inhaber": "CEO"
  {
    "Name": "Oezbay",
    "Vorname": "Cagatay",
    "maennlich": true,
    "Hobbys": &#91;"IT", "Schach", "Basketball"],
    "Alter": 38,
    "Kinder": &#91;],
    "Partner": null
  }
}</code></pre>



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



<p>Das JSON-Schema gibt ein JSON-basiertes Format an, um die Struktur von JSON-Daten für die Validierung, Dokumentation und Interaktionssteuerung zu definieren. Es enthält einen Contract für die JSON-Daten, die für eine bestimmte Anwendung erforderlich sind und wie diese Daten geändert werden können.</p>



<p>Das Schema basiert auf den Konzepten des <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Schemas, ist jedoch JSON-basiert. Wie in XSD (<a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> Schema Definition) können dieselben Serialisierungs- und Deserialisierungsprogramme sowohl für das Schema als auch für die Daten verwendet werden. Es ist selbstbeschreibend und in einem Internet-Entwurf der <a href="https://www.ietf.org" target="_blank" rel="noreferrer noopener">Internet Engineering Task Force</a>&nbsp;festgelegt. Für verschiedene Programmiersprachen stehen mehrere Validatoren mit jeweils unterschiedlichen Konformitätsstufen zur Verfügung.</p>



<h3 class="wp-block-heading">Der Vergleich mit XML</h3>



<p>Sowohl JSON als auch <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> beschreiben die Struktur eines Datensatzes. Der Datensatz kann weitere Datensätze enthalten. Dadurch sind beliebig tief verschachtelte Strukturen möglich.</p>



<p>In XML sind die einzelnen Knoten der Datenstruktur benannt, während die Knoten in JSON unbenannt bleiben.</p>



<p>Einfache Zeichenketten in <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> können sowohl als Attribut eines Elements als auch als eigenständiges Element beschrieben sein. In JSON gibt es diese Unterscheidung nicht. Diese in den meisten Fällen irrelevante Flexibilität führt dazu, dass sich die Struktur von <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Dokumenten häufig unnötigerweise unterscheidet.</p>



<p>Sowohl für JSON als auch für <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> gibt es Beschreibungssprachen, um weiter einzugrenzen, wie „gültige“ Dokumente auszusehen haben. Ganz im Gegensatz zu „wohlgeformten“ Dokumenten.</p>



<p>Die Syntax von JSON ist einfacher gestaltet und erscheint daher oft lesbarer und insbesondere leichter schreibbar. In der Regel produziert JSON auch einen geringeren Overhead im Vergleich zu <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>.</p>



<p>Sowohl JSON als auch <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> müssen von einem speziellen Parser eingelesen werden. Traditionell ist jedes wohlgeformte JSON-Dokument ein gültiger <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>-Ausdruck. Das unaufmerksame Interpretieren von JSON-Dokumenten mit eval() führt jedoch zu Sicherheitslücken, die nicht zu unterschätzen sind.</p>



<p>Sowohl JSON als auch <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> sind nicht gut zum Repräsentieren von Binärdaten geeignet, da beide Datenformate als Grundelement zeichenbasiert sind und nicht bytebasiert.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/14/erklaerung-json/">JSON &#8211; Schönheit der einfachen Datenübertragung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/14/erklaerung-json/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1071</post-id>	</item>
		<item>
		<title>Cucumber &#8211; Das kollaborative Tool für Behavior Driven Development</title>
		<link>https://ceosbay.com/2023/03/11/erklaerung-cucumber/</link>
					<comments>https://ceosbay.com/2023/03/11/erklaerung-cucumber/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 11 Mar 2023 20:08:00 +0000</pubDate>
				<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Driven]]></category>
		<category><![CDATA[Frame]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Gherkin]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Machine]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Syntax]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Verhaltensgetrieben]]></category>
		<category><![CDATA[Virtual]]></category>
		<category><![CDATA[Werkzeug]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1117</guid>

					<description><![CDATA[<p>Cucumber ist ein Open Source (BDD-Framework) Behavior-Driven-Development-Werkzeug bzw. Framework (Siehe &#8222;Verhaltensgetriebene Softwareentwicklung&#8220; – Thematisiere ich definitiv und explizit in einem zukünftigen Beitrag) zur textuellen Spezifikation von Anforderungen an Software und zum automatisierten Testing bzw. mit &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/11/erklaerung-cucumber/">Cucumber &#8211; Das kollaborative Tool für Behavior Driven Development</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cucumber ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> (BDD-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a>) Behavior-Driven-Development-Werkzeug bzw. <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> (Siehe &#8222;Verhaltensgetriebene Softwareentwicklung&#8220; – Thematisiere ich definitiv und explizit in einem zukünftigen Beitrag) zur textuellen Spezifikation von Anforderungen an Software und zum automatisierten Testing bzw. mit dem sich (unter anderem) sehr gut lesbare, gut zu wartbare und elegante Akzeptanz-Tests für Web-Anwendungen schreiben lassen.</p>



<p>Cucumber wurde ursprünglich in der Programmiersprache <a href="https://ceosbay.com/2022/12/19/erklaerung-ruby/" target="_blank" rel="noreferrer noopener">Ruby</a> für Ruby-Anwendungen geschrieben. In der Zwischenzeit unterstützt es aber auch andere Programmiersprachen wie Java und alle anderen auf der Java <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/" target="_blank" rel="noreferrer noopener">Virtual Machine</a> gängigen Programmiersprachen sowie C++ und <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>. Darüber hinaus gibt es Projekte, die Cucumber noch für weitere Programmiersprachen zur Verfügung stellen und sich als Teil der Cucumber-Familie sehen. Darunter beispielsweise SpecFlow, eine Implementierung für C#.</p>



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



<p>Wie auch bei den meisten anderen BDD-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Frameworks</a> werden in Cucumber Funktionalitäten mittels der Beschreibungssprache „Gherkin“ beschrieben. Gherkin verwendet natürliche Schriftsprache als Grundlage. Lediglich bestimmte Schlüsselwörter werden besonders behandelt.</p>



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



<p>Gherkin ist die Sprache, die Cucumber verwendet, um Testfälle zu definieren. Sie ist so konzipiert, dass sie sich nicht-technisch und für den Menschen lesbar gestaltet. Es beschreibt Anwendungsfälle in Bezug auf ein Softwaresystem. Der Zweck hinter der Gherkin-Syntax ist die Förderung verhaltensorientierter Entwicklungspraktiken in einem Entwicklungsteam, einschließlich Geschäftsanalysten und Managern. Sie zielt darauf ab, bereits in den ersten Phasen der Anforderungsdefinition durch die Geschäftsleitung und in anderen Phasen des Entwicklungslebenszyklus einer Anwendung feste, eindeutige Anforderungen durchzusetzen.</p>



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



<p>Die Syntax ist ähnlich wie bei <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a> zeilenorientiert aufgebaut. Die Struktur einer Datei wird durch Leerzeichen und andere Steuerzeichen definiert. # wird als Zeilen bzw. Kommentarzeichen verwendet und kann an jeder beliebigen Stelle in einer Datei stehen. Anweisungen sind jede nicht leere und nicht kommentierte Zeile. Sie bestehen aus einem konkreten Gherkin-Schlüsselwort, gefolgt von einer Zeichenkette.</p>



<p>Alle Gherkin-Dateien haben die Dateierweiterung .feature. Sie enthalten eine einzelne Feature-Definition für das zu testende System und sind ein ausführbares Testskript.</p>



<p>Neben der Bereitstellung eines Skripts für automatisierte Tests ist die Syntax von Gherkin so konzipiert, dass sie eine einfache Dokumentation des zu testenden Codes ermöglicht. Gherkin unterstützt derzeit Schlüsselwörter in Dutzenden von Sprachen.</p>



<h3 class="wp-block-heading">Schlüsselwörter der Gherkin Sprache</h3>



<ul class="wp-block-list">
<li>Feature: Name bzw. die Bezeichnung des Features</li>



<li>Rule: Regeln des Features</li>



<li>Example oder Scenario: Die Bezeichnung des Szenarios (Beispielsweise &#8222;Die erfolgreiche Anmeldung mit gültigen Anmeldeinformationen.&#8220;)</li>



<li>Given, When, Then, And, But für die steps (oder *)- Vorbedingungen (Gegeben sei), die Aktion, die ausgeführt wird bzw. die Erweiterung durch andere Schlüsselwörter um die Aktion die ausgeführt wird zu ergänzen bzw. zu erweitern. (Der User gibt beispielsweise seine Zugangsdaten, Username and Password ein), gefolgt von der erwarteten Reaktion des Systems (Beispielsweise die Nachricht, bei einem erfolgreichen Login.)</li>



<li>Background &#8211; Ein Background ermöglicht es einem, den nachfolgenden Scenarios einen gewissen Kontext hinzuzufügen. Es kann einen oder mehrere Vorgegebene Schritte enthalten, die vor jedem Scenario aber nach jedem Before hook ausgeführt werden.</li>



<li>Scenario Outline oder Scenario Template &#8211; Damit lässt sich dasselbe Szenario mehrmals mit unterschiedlichen Wertekombinationen ausführen.</li>



<li>Examples oder Scenarios &#8211; Eine Scenario Outline muss einen oder mehrere Abschnitte mit Examples bzw. Scenarios enthalten. Sie dienen als Steps bzw. Interpretationsvorlage, die nie direkt ausgeführt werden. Stattdessen wird die Szenariogliederung einmal für jede Zeile mit den darunter liegenden Abschnitten von Examples ausgeführt.</li>
</ul>



<h3 class="wp-block-heading">Gherkin in deutscher Sprache</h3>



<p>Um eine Funktionalität auf Deutsch zu schreiben, muss am Beginn des Features # language: de angegeben werden. Damit sind u.A. folgende deutsche Schlüsselwörter verfügbar:</p>



<ul class="wp-block-list">
<li>Funktionalität</li>



<li>Grundlage</li>



<li>Szenario</li>



<li>Szenariogrundriss</li>



<li>Beispiele</li>



<li>Angenommen</li>



<li>Gegeben sei</li>



<li>Wenn</li>



<li>Dann</li>



<li>Und und Aber, sowie *</li>
</ul>



<h3 class="wp-block-heading">Die Command line (CL)</h3>



<p>Cucumber verfügt über eine integrierte Kommandozeilenschnittstelle, die eine umfassende Liste von Anweisungen enthält. Wie die meisten Kommandozeilen-Tools bietet Cucumber die Option &#8211;help an, die eine Zusammenfassung der Befehle liefert, die diese Command Line akzeptiert.</p>



<pre class="wp-block-code"><code>$ cucumber --help
        -r, --require LIBRARY|DIR        Require files before executing the features.
        --i18n LANG                      List keywords for in a particular language.
                                         Run with "--i18n help" to see all languages.
        -f, --format FORMAT              How to format features (Default: pretty).
        -o, --out &#91;FILE|DIR]             Write output to a file/directory instead of
        ...</code></pre>



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



<p>Gherkin ist nicht nur zum Schreiben von automatisierten Tests geeignet. Man kann Gherkin grundsätzlich auch dazu verwenden, um strukturierte Tests zu erstellen, die man später als Projektdokumentation verwendet kann. Erst die Eigenschaft, strukturiert zu sein, gibt uns die Möglichkeit zu automatisieren.</p>



<p>Sowohl die Sprache Gherkin wie auch das Tool Cucumber, bieten weitaus mehr Funktionalitäten, die ich hier nicht thematisiert habe. Zumal ich auch recht frisch in dieses Thema eingestiegen bin. So ist beispielsweise ein Datengetriebenes Szenario mithilfe von Tabellen möglich. Fernab können verschiedene Schritte, die im Prinzip das Gleiche tun, über Platzhalter definiert werden.</p>



<p>Um solche und weitere Vorteile zu nutzen, ist neben Cucumber oder anderen Testtools vor allem Disziplin beim Verfassen der Dokumentation bzw. der Gherkin Dokumente gefragt. Gleichzeitig müssen die formulierten Schritte präzise genug sein, um die gewünschten Verhaltensweisen ausreichend genau zu beschreiben. Ansonsten zerfällt die Abstraktion und Gherkin Dokumente werden lediglich zu etwas besser lesbaren Testskripten statt dem Ansatz des BDD zu folgen.</p>



<p>Cucumber lässt sich auch mit IntelliJ nutzen. Aber darüber gibt es dann in naher Zukunft einen weiteren Beitrag.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/11/erklaerung-cucumber/">Cucumber &#8211; Das kollaborative Tool für Behavior Driven Development</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/11/erklaerung-cucumber/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1117</post-id>	</item>
		<item>
		<title>IntelliJ IDEA &#8211; Die intelligente und leistungsstarke Entwicklungsumgebung</title>
		<link>https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/</link>
					<comments>https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 10 Mar 2023 18:34:56 +0000</pubDate>
				<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cython]]></category>
		<category><![CDATA[Dart]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[Export]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Haml]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IDEA]]></category>
		<category><![CDATA[Import]]></category>
		<category><![CDATA[Intelli]]></category>
		<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[J]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Less]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python and Jython]]></category>
		<category><![CDATA[Ruby and JRuby]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[SCSS]]></category>
		<category><![CDATA[Slim]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testfall]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[Ultimate]]></category>
		<category><![CDATA[Umfeld]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[XPath]]></category>
		<category><![CDATA[XSL]]></category>
		<category><![CDATA[YAML]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1084</guid>

					<description><![CDATA[<p>IntelliJ IDEA ist eine integrierte Entwicklungsumgebung (IDE) des Softwareunternehmens JetBrains. Es existieren derzeit zwei verschiedene Editionen. Zum einen die kostenpflichtige Ultimate Edition und die kostenfreie Community Edition. Features Im Wesentlichen unterscheiden sich die beiden Versionen &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/">IntelliJ IDEA &#8211; Die intelligente und leistungsstarke Entwicklungsumgebung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>IntelliJ IDEA ist eine integrierte Entwicklungsumgebung (IDE) des Softwareunternehmens JetBrains. Es existieren derzeit zwei verschiedene Editionen. Zum einen die kostenpflichtige Ultimate Edition und die kostenfreie Community Edition.</p>



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



<p>Im Wesentlichen unterscheiden sich die beiden Versionen im Funktionsumfang. Hierzu von der Ultimate Version unterstützte Sprachen: Java, Groovy, Kotlin, Scala, Python and Jython, Cython, <a href="https://ceosbay.com/2022/12/19/erklaerung-ruby/" target="_blank" rel="noreferrer noopener">Ruby</a> and JRuby, Rust, PHP, Go, Dart, SQL, HTML, XML, JSON, YAML, XSL, XPath, Markdown, <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, TypeScript, CSS, Sass, SCSS, Less, Haml, Slim, Liquid</p>



<p>Wobei zu beachten ist, dass die Ultimate Edition von IntelliJ IDEA neben den nativ unterstützten Sprachen, einige der Sprachen lediglich durch den Einsatz von PlugIns unterstützt. In der Community Edition sind auch einige Sprachen gar nicht berücksichtigt. Eine explizite bzw. genaue Differenzierung möchte ich in diesem Beitrag nicht vornehmen. Also sind die Angaben bzgl. der Features mit Vorsicht zu genießen.</p>



<p>Auch ist zu beachten, dass lediglich die Ultimate Edition von IntelliJ IDEA die umfangreiche <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> Unterstützung mitbringt. Im Enterprise Umfeld sind diese in der Regel unabdingbar.</p>



<p>Auch bei den Build Tools gibt es Unterschiede. Besonders auffällig ist dabei die Tatsache, dass <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/" target="_blank" rel="noreferrer noopener">npm</a> zwar in der Ultimate Edition läuft, jedoch nicht in der Community Edition. Ich habe es auch in der Community Version zum Laufen gebracht. Dennoch ist dies mit Vorsicht zu genießen, da ich aufgrund von Fehlern dennoch auf die Ultimate Edition geswitched bin.</p>



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



<p>Auf die Funktionsfähigkeit bei der Versionskontrolle bzw. bei <a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/" target="_blank" rel="noreferrer noopener">Cloud</a>-basierten Diensten wie <a href="https://ceosbay.com/2022/11/18/erklaerung-git/" target="_blank" rel="noreferrer noopener">Git</a>, <a href="https://ceosbay.com/2022/11/19/erklaerung-github/" target="_blank" rel="noreferrer noopener">GitHub</a>, Subversion, Mercurial und Team Foundation Server kann man sich verlassen. Bei Perforce ist man zumindest in der Community Edition verlassen.</p>



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



<p>Während die Community Edition lediglich <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/" target="_blank" rel="noreferrer noopener">Docker</a> für das Deployment unterstützt sind es mit der Ultimate Edition <a href="https://ceosbay.com/2022/12/24/erklaerung-kubernetes/" target="_blank" rel="noreferrer noopener">Kubernetes</a>, Java Applications Servers als auch <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/" target="_blank" rel="noreferrer noopener">Docker</a>.</p>



<h3 class="wp-block-heading">Codevervollständigung</h3>



<p>Die Codevervollständigung ist eine Funktion, die vor allem Programmieranfängern sehr entgegenkommt. Nur wenige werden als Coder geboren, oder!? Da vergisst man schon mal schnell eine import-Anweisung, IDEA aber nicht. Meistens weist IntelliJ einen auf den Fehler hin und schlägt Korrekuren vor. Dies gilt auch für nicht verwendete Importe, die IntelliJ entsprechend einer manuellen Zustimmung entsorgt.</p>



<p>Es nimmt einem den Grossteil der Tipparbeit ab, damit man sich dem Programmdesign widmen kann und nicht über korrekt formulierte JAVA-Anweisungen nachdenken muss. Ich muss gestehen, dass ich mich bisher noch nicht wirklich mit JAVA auseinandergesetzt habe. Doch dies hole ich derzeit nach und auch darüber gibt es in der nahen Zukunft einen Beitrag.</p>



<h3 class="wp-block-heading">Code Layout Manager</h3>



<p>Den Code Layout Manager weiß man spätestens dann zu schätzen, wenn man im eigenen Quelltext nicht mehr durchblickt oder fremden Quelltext bearbeiten muss. Dann kann man Text markieren und von IDEA neu formatieren lassen. Dies geht relativ intelligent von statten.</p>



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



<p>Auch die Refactoringfähigkeiten von IntelliJ sind nicht zu unterschätzen. Wer die Funktionen einmal in Aktion erlebt hat, der möchte sie nicht mehr missen. Dazu gehören u.A. das Renaming, Move, Introduce Explaining Variable, Extract Method usw.</p>



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



<p>Ich arbeite noch nicht lange mit dem Programm. Doch IntelliJ hat scheinbar in enger Kooperation mit den Anwendern ein relativ gutes Produkt entwickelt, mit dem man gut im Enterprise Umfeld arbeiten kann. Besonders die große PlugIn Bibliothek als auch die individuelle Erweiterbarkeit durch eine offen gelegte API haben mir persönlich sehr gefallen. Dadurch ist es auch möglich eigene PlugIns für IntelliJ zu schreiben und diese zu selbst zu implementieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/">IntelliJ IDEA &#8211; Die intelligente und leistungsstarke Entwicklungsumgebung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1084</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>
	</channel>
</rss>
