<?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>Binaris Informatik</title>
	<atom:link href="https://stage-binaris-informatik.de/feed/" rel="self" type="application/rss+xml" />
	<link>https://stage-binaris-informatik.de/</link>
	<description>Software &#38; Agilität als Passion</description>
	<lastBuildDate>Tue, 27 May 2025 12:59:11 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://stage-binaris-informatik.de/wp-content/uploads/2022/03/cropped-favicon-bianris-informatik-32x32.png</url>
	<title>Binaris Informatik</title>
	<link>https://stage-binaris-informatik.de/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Verteilung der Fähigkeiten in Teams</title>
		<link>https://stage-binaris-informatik.de/2023/05/16/verteilung-der-faehigkeiten-in-teams/</link>
		
		<dc:creator><![CDATA[Tobias Lotz]]></dc:creator>
		<pubDate>Tue, 16 May 2023 08:48:43 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Team]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=5433</guid>

					<description><![CDATA[<p>Einleitung Nachdem wir uns in einem früheren Artikel mit den Fähigkeiten beschäftigt haben, die Scrum Teams idealerweise haben sollen, wird es nun darum gehen, das Vorhandensein dieser Fähigkeiten bzw. des Wissens zu überprüfen. Dabei geht es auch darum, herauszufinden, wie dieses Wissen im Team verteilt ist. So sollen Wissensinseln und Wissensdefizite entdeckt werden. Zusätzlich werden [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/05/16/verteilung-der-faehigkeiten-in-teams/">Verteilung der Fähigkeiten in Teams</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="5433" class="elementor elementor-5433" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-1f1369b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1f1369b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7e67479f" data-id="7e67479f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5c296902 elementor-widget elementor-widget-heading" data-id="5c296902" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Einleitung</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-73e67c55 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="73e67c55" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1d1d82ac" data-id="1d1d82ac" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6b189ff8 elementor-widget elementor-widget-text-editor" data-id="6b189ff8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Nachdem wir uns in einem früheren Artikel mit den Fähigkeiten beschäftigt haben, die Scrum Teams idealerweise haben sollen, wird es nun darum gehen, das Vorhandensein dieser Fähigkeiten bzw. des Wissens zu überprüfen. Dabei geht es auch darum, herauszufinden, wie dieses Wissen im Team verteilt ist. So sollen Wissensinseln und Wissensdefizite entdeckt werden. Zusätzlich werden dann noch Methoden vorgestellt, um Wissen zu transferieren damit mögliche Wissensinseln zu beseitigen.</p>
<p>Wir sollten zwischen Wissen, Fähigkeiten bzw. Know-how unterscheiden, welches jedes Teammitglied haben muss und welches nicht jedes Teammitglied haben muss. Bei ersterem können wir beispielsweise das Qualitätsbewusstsein und die Konfliktfähigkeit nennen. Nur wenn alle Teammitglieder möglichst optimal an den Anforderungen des Kunden arbeiten, kann das Team zusammenarbeiten und das gewünschte Produkt herstellen. </p>
<p>Zu zweiterem zählt das Konfliktmanagement. Bei diesem geht es um das Erkennen und Lösen von Konflikten. Das Lösen dieser, und die daraus resultierende Zusammenarbeit, hilft dabei bessere Ergebnisse zu erzielen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2eb3814 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2eb3814" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-32e37f6" data-id="32e37f6" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4b2ad0a elementor-widget elementor-widget-heading" data-id="4b2ad0a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Wissensinseln</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-f69fbb4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f69fbb4" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b2868d1" data-id="b2868d1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e46bb4b elementor-widget elementor-widget-text-editor" data-id="e46bb4b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wissensinseln sind Wissen oder Fähigkeiten, welche nur 1-2 Personen im Team haben. Solche Wissensinseln stellen für das Team ein Risiko dar, denn fällt nun genau diese Person/Personen aus, so ist das Team handlungsunfähig und kann nicht mehr normal weiterarbeiten.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-53ad3d2 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="53ad3d2" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4637928b" data-id="4637928b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-54bd3966 elementor-widget elementor-widget-heading" data-id="54bd3966" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Skill Matrix</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7df2327 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7df2327" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bcb938a" data-id="bcb938a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-48414f1 elementor-widget elementor-widget-text-editor" data-id="48414f1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Um jetzt die Wissensengpässe zu identifizieren, können wir die Skill-Matrix nutzen. In dieser werden die Fähigkeiten der Mitarbeiter dargestellt. Somit können Stärken und Schwächen sowie ausbaufähige Skills veranschaulicht werden. Es ist damit möglich, Stellen zu identifizieren, an denen das Ausfallrisiko eines Teams am höchsten ist. In den Zeilen der Matrix werden die Fähigkeiten und das Wissen aufgeführt, während die Spalten die Namen der Personen enthalten. Der Wissensstand der Teammitglieder wird festgehalten, um einen Überblick über das Team zu haben. </p>
<p>Wichtig hierbei, dass nicht jeder Mitarbeite jedes Wissen und jede Fähigkeit besitzen muss. Das Ziel ist es, das Wissen breiter zu streuen und somit das Ausfallrisiko zu minimieren. In der Tabelle kann festgelegt werden, wie häufig und in welchem Level Wissen vorhanden sein soll. Diese gibt dann an, ab welcher Stufe das geforderte Wissen, erfüllt ist. Ein Beispiel dafür sehen wir in der Tabelle bei der Fähigkeit Projektmanagement. Dort sehen wir das 2 Personen gefordert sind und diese erst ab dem Level Experte gezählt werden. </p>
<p>Idealerweise gibt es eine Einheitsdefinition, allerdings benötigen unterschiedliche Fähigkeiten unterschiedliche Ausprägungen. Auch muss die Lesbarkeit der Tabelle beachtet werden. Somit kann diese Ausprägung entweder in der Tabelle stehen oder separat dokumentiert werden. </p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1c4b210 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1c4b210" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-450beeb" data-id="450beeb" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-f08276f elementor-widget elementor-widget-image" data-id="f08276f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img fetchpriority="high" decoding="async" width="800" height="418" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/05/SkillMatrix.png" class="attachment-large size-large wp-image-5436" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/05/SkillMatrix.png 886w, https://stage-binaris-informatik.de/wp-content/uploads/2023/05/SkillMatrix-300x157.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/05/SkillMatrix-768x401.png 768w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-08cc1ae elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="08cc1ae" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-82f7109" data-id="82f7109" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-556897b elementor-widget elementor-widget-text-editor" data-id="556897b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Anhand der Beispielmatrix sind die Mitglieder eines Scrum Teams zu erkennen, sowie deren Wissensstand in den verschiedenen Bereichen. Unter der Spalte „Vorhanden“ ist zu sehen, wie viele Personen über das Wissen bereits verfügen und unter „Gefordert“, mit wie vielen Personen geplant wird. Bei der Personenanzahl für die „Gefordert“ Spalte sollten wir immer an ein Worst-Case-Szenario denken und schauen, dass das Team weiterarbeiten kann. Hier muss das Team entscheiden, ab welchem Wissensstand eine Person mitgezählt werden kann.</p>
<p>Gleichzeitig ist es wichtig, dass nicht jedes Teammitglied alles wissen muss. Ein weiterer Punkt ist sich als Team zu überlegen, ab welcher Stufe eine Person mitgezählt wird. Das sollte das Team entscheiden und so auf aktuelle und zukünftige Anforderungen reagieren. Hierbei sehen wir direkt, dass die Teamarbeit und die analytischen Fähigkeiten noch ausgebaut werden müssen.<span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p>
<p>Bei der Bewertung der Fähigkeiten gibt es verschiedene Möglichkeiten. Die Fähigkeiten können wie hier mit „Grundkenntnisse“, „Fortgeschritten“ und „Experte“ gekennzeichnet werden. Es ist aber auch möglich eine Skala von z.B. 1-10 zu nutzen. Dabei muss dann Transparent gemacht werden, welche Zahl für welche Stufe steht. Bleiben wir aber bei der Einteilung, welche in der Tabelle verwendet wurde. Eine Definition wie die Stufen definiert sind, könnte lauten:</p>
<ul>
<li>Anfänger: Ein Anfänger ist eine Person, die neu in einem bestimmten Bereich ist und wenig oder keine Erfahrung oder Kenntnisse in diesem Bereich hat. Anfänger benötigen Anleitung und Hilfe, um grundlegende Fähigkeiten und Kenntnisse zu erlernen, und sie machen häufig Fehler, da sie sich noch nicht mit der Materie vertraut gemacht haben.</li>
<li>Fortgeschrittener: Ein Fortgeschrittener ist eine Person, die über grundlegende Kenntnisse und Fähigkeiten in einem bestimmten Bereich verfügt und in der Lage ist, selbstständig zu arbeiten. Sie hat bereits einige Erfahrungen gesammelt und kann schwierigere Aufgaben bewältigen. Fortgeschrittene benötigen jedoch manchmal noch Anleitung oder Unterstützung, um ihre Fähigkeiten weiter zu verbessern.</li>
<li>Experte: Ein Experte ist eine Person, die über umfassende Kenntnisse, Erfahrungen und Fähigkeiten in einem bestimmten Bereich verfügt. Experten können komplexe Probleme bewältigen und sind in der Lage, innovative Lösungen zu finden. Sie können auch anderen helfen, ihre Fähigkeiten zu verbessern und ihr Wissen zu erweitern. Experten haben in der Regel viele Jahre in einem bestimmten Bereich gearbeitet und verfügen über eine breite und tiefe Expertise.</li>
</ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1b97470 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1b97470" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b466c1a" data-id="b466c1a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8a583a4 elementor-widget elementor-widget-text-editor" data-id="8a583a4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es gib eine Vielzahl von Möglichkeiten, die Fähigkeiten zu bewerten. Nutzt die Methode, welche am besten für euch passt. Das Gleiche gilt für die Fähigkeiten, die verglichen werden, dies sind hier nur Beispiele und sollen euch helfen das Konzept schneller und einfacher zu verstehen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-ac846fd elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="ac846fd" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6f24948" data-id="6f24948" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-29c2efd elementor-widget elementor-widget-heading" data-id="29c2efd" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Truck-Faktor-Analyse</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-544fec4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="544fec4" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4021a45" data-id="4021a45" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-723a04c elementor-widget elementor-widget-text-editor" data-id="723a04c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Die Truck-Faktor-Analyse ist ein leichtgewichtiger Ansatz, um den Einfluss von einzelnen Personen auf das Projekt zu verdeutlichen. Dabei wird die Frage gestellt: „Was sind die Auswirkungen für das Projekt, wenn ein Mitarbeiter von einem LKW erfasst wurde und deswegen überraschend und dauerhaft ausfällt?“ Diese bietet uns eine personenbezogene Analyse an, wodurch Fähigkeiten identifiziert werden, welche wichtig sind und eventuell noch nicht erfasst wurden.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1ff7ecfa elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1ff7ecfa" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aee1d52" data-id="aee1d52" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-2b2c4f4e elementor-widget elementor-widget-heading" data-id="2b2c4f4e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Wissenstransfer</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-334e95d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="334e95d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3d6771b" data-id="3d6771b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-81e0091 elementor-widget elementor-widget-text-editor" data-id="81e0091" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Nun haben wir unsere möglichen Wissensinseln identifiziert und wissen, welche Mitarbeiter über welche Fähigkeiten, Wissen oder Know-how verfügen. Im nächsten Schritt geht es darum, dass Wissen den anderen Teammitgliedern zugänglich zu machen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-dacb2b5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="dacb2b5" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-024b0e6" data-id="024b0e6" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8d39bea elementor-widget elementor-widget-heading" data-id="8d39bea" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Dokumentation</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-32ac036 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="32ac036" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e9f049c" data-id="e9f049c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e392b47 elementor-widget elementor-widget-text-editor" data-id="e392b47" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Eine Möglichkeit ist die Dokumentation. Bei dieser geht es darum, alle Aufgaben und Prozesse, die als Wissensinseln identifiziert wurden, zu dokumentieren und zu kommentieren. Somit können andere Personen ein Verständnis aufbauen den Prozess bzw. die Aufgabe zu verstehen und eigenständig durchführen zu können. In der Softwareentwicklung kann dies bedeuten, den Programmcode zu kommentieren und somit die einzelnen Funktionen einfach und schnell zu erklären. Größere Zusammenhänge wie die Architektur, können in UML-Diagrammen oder in einem Architekturdokument beschrieben werden.</p>
<p>Dabei gibt es verschiedene Nachteile. Zum einen verrottet so eine Dokumentation und kann somit nach einer gewissen Zeit unbrauchbar werden.. Das Format spielt hierbei eine wichtige Rolle. Wenn die Dokumentation den Programmcode nur erklärt und somit die Informationen des Programmcodes in anderer Form widerspiegeln, so ist die Information redundant. Erklärt die Dokumentation weitere Zusammenhänge, Abläufe und Entscheidungen, so ist die Dokumentation hilfreich. </p>
<p>Egal ob die Dokumentation redundant ist oder nicht, bei jeder Veränderung besteht das Risiko, dass diese Veränderung nicht in der Dokumentation angepasst wird. Es gibt also ein grundsätzliches Problem, dass eine Veränderung nicht nachgehalten wird und es somit eine Abweichung zwischen Programmcode und Dokumentation vorhanden ist. Geht es um Wissen, welches nur ein Mitarbeiter hat und dieses ist nicht in anderer Form festgehalten, so ist die Dokumentation eine gute Idee, um das Wissen zu verbreiten bzw. festzuhalten.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c76422c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c76422c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9369e5b" data-id="9369e5b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-dcd95b1 elementor-widget elementor-widget-heading" data-id="dcd95b1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Pair Programming</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-83c0808 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="83c0808" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ec9d41f" data-id="ec9d41f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-23f6469 elementor-widget elementor-widget-text-editor" data-id="23f6469" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das Pair Programming ist ein Teil des Extreme Programming. Beim Pair-Programming sitzen zwei Entwickler zusammen und bearbeiten gemeinsam eine Aufgabe. Dabei gibt ein Entwickler den Code ein, während der andere beobachtet, Feedback gibt und Fragen stellt, also mit dem anderen interagiert. Nach ungefähr 5-10 Minuten werden die Rollen gewechselt. Durch diese Zusammenarbeit ist es möglich, potenzielle Fehler und Probleme frühzeitig zu erkennen.<span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p>
<p>Aufgrund dieser Zusammenarbeit entstehen einige Vorteile:</p>
<ul>
<li>Es entsteht eine bessere Code-Qualität, da die beiden Entwickler zusammenarbeiten und Feedback geben können. </li>
<li>Beim Pair-Programming entsteht ein Wissensaustausch, dabei werden Erfahrungen, Wissen und Know-how weitergegeben, wodurch Wissensinseln aufgelöst werden. </li>
<li>Es werden schneller Probleme identifiziert und gelöst.</li>
</ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-9f70aca elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9f70aca" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2cf1ca6" data-id="2cf1ca6" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-d7d6ccc elementor-widget elementor-widget-text-editor" data-id="d7d6ccc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Leider gibt es auch ein paar Nachteile, die angesprochen werden müssen:</p>
<ul>
<li>Beim Pair-Programming müssen zwei Entwickler an einer Aufgabe arbeiten, was, zumindest in einer kurzen Betrachtungsweise, mit höheren Kosten verbunden ist. Langfristig spart das Pair-Programming Zeit ein, da der Programmcode eine höhere Qualität besitzt und somit ein reduzierter Aufwand für das Bug-Fixing und die Weiterentwicklung entsteht. </li>
<li>Durch unterschiedliche Arbeitsweisen kann es zu Konflikten führen, welche die Produktivität kurzfristig beeinflussen Zuerst müssen beide Entwickler lernen, wann der beste Zeitpunkt ist, nachzufragen. Auch ist es wichtig zu erkennen, dass diese Nachfragen wertvoll sind und dadurch die Zusammenarbeit verbessert wird.</li>
</ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-144a218 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="144a218" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-746b277" data-id="746b277" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e423e30 elementor-widget elementor-widget-text-editor" data-id="e423e30" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Langfristig sorgt das Pair Programming für eine bessere Zusammenarbeit im Team, da die Teammitglieder die unterschiedlichen Arbeitsweisen kennenlernen. Das Konzept des Pair-Programming kann auch auf andere Tätigkeiten übertragen werden, dazu zählen das generelle Lernen, die Problemlösung, Marketing oder Design. Bei allen diesen Tätigkeiten, sitzen zwei Personen zusammen, um die Aufgabe schneller zu lösen bzw. ein besseres Ergebnis zu erzielen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8d1e3ef elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8d1e3ef" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a01b7c8" data-id="a01b7c8" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c4039eb elementor-widget elementor-widget-heading" data-id="c4039eb" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Rotation der Aufgaben</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-4efc5f4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4efc5f4" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-48c8265" data-id="48c8265" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-a3b5654 elementor-widget elementor-widget-text-editor" data-id="a3b5654" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Unter der Rotation der Aufgabe verstehen wir, dass die Mitarbeiter regelmäßig Ihre Tätigkeitsbereiche wechseln. Das meint bei Scrum, dass immer verschiedene Mitarbeiter beispielsweise das Front-End entwickeln und dadurch die Entstehung von Wissensinseln direkt vermieden wird. Es wird also darauf geachtet, dass die Mitarbeiter verschiedene Kompetenzen entwickeln. </p>
<p>Durch die Rotation können Mitarbeiter ein breiteres Wissen und Verständnis für verschiedene Bereiche entwickeln, es wird also das Risiko von Wissensinseln verringert. Es gibt auch Nachteile bei einer möglichen Rotation.<span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p>
<p>Zum einen brauchen Mitarbeiter eventuell länger für die Erledigung von Aufgaben da Ihnen die Routine bei der Durchführung fehlt. Es kann zu Kompetenzverlust führen, da Mitarbeiter über eine gewisse Zeit die Aufgabe nicht ausführen können und somit mehr Zeit in der Einarbeitung benötigen. Generell muss auch der Planungsaufwand berücksichtigt werden. Die Rotation von Aufgaben muss sorgfältig geplant werden, damit das Projekt nicht beeinträchtigt wird. </p>
<p>Die Rotation der Aufgaben lässt sich sehr gut mit dem Pair-Programming verbinden, da eine routinierte Person mit einer nicht erfahrenen Person zusammenarbeitet und viele Nachteile ausgleicht. Gleichzeitig gibt es durch diesen gemeinsamen Ansatz selbst Vor- und Nachteile, welche berücksichtigt werden müssen. Die Rotation der Aufgaben sollte insgesamt als Investition in die Zukunft gesehen werden.</p>
<p>In Scrum gibt es zwei Events, welche dazu beitragen, dass Wissen vermittelt und verteilt wird. Dazu zählen: </p>
<ul>
<li>Daily Scrum</li>
</ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-b4beeed elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="b4beeed" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a1d98e0" data-id="a1d98e0" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-abe9937 elementor-widget elementor-widget-text-editor" data-id="abe9937" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Bei dem Daily Scrum, kommt das gesamte Scrum-Team zusammen, um sich über den Fortschritt und Probleme auszutauschen. Hier wird kein ausführlicher Wissenstransfer stattfinden können, allein schon wegen der 15-minütigen Timebox. Daher wird hier ein eventuell notwendiger Wissenstransfer identifiziert und organisiert. Es können anschließend sogenannten Meet-Afters stattfinden, in denen sich die angesprochenen Personen treffen und das Vorgehen beim Wissenstransfer besprechen können.</p>
<ul>
<li>Sprint Retrospektive</li>
</ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-dab67a6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="dab67a6" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-132438a" data-id="132438a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-15042bb elementor-widget elementor-widget-text-editor" data-id="15042bb" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Bei der Sprint Retrospektive geht es darum, dass sich das Team über den vergangenen Sprint austauscht. Hier besteht die Möglichkeit Best Practices und Verbesserungsvorschläge auszutauschen oder auch neue Vorgehen zu besprechen. Durch die Ableitung von Problemen, kann herausgefunden werden, warum es ein Problem gab. Hierbei können auch Wissensinseln identifiziert und angegangen werden. Durch diese Überprüfung kann auch die Skill-Matrix immer wieder ergänzt und erweitert werden.</p>
<p>Wir sehen also, es gibt verschiedene Arten, um Wissensinseln aufzulösen. Diese müssen allerdings zielgerichtet eingesetzt werden, um auch einen Nutzen für das Projekt zu generieren. Jetzt bist du dran, identifiziert doch Wissensinseln in eurem Team und versucht diese aufzulösen. Denkt daran, das Auflösen von Wissensinseln kann länger dauern, hilft eurem Projekt allerdings langfristig.</p>
<div> </div>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/05/16/verteilung-der-faehigkeiten-in-teams/">Verteilung der Fähigkeiten in Teams</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Test Driven Development in sechs einfachen Schritten</title>
		<link>https://stage-binaris-informatik.de/2023/04/25/test-driven-development-in-sechs-einfachen-schritten/</link>
		
		<dc:creator><![CDATA[Carsten Czeczine]]></dc:creator>
		<pubDate>Tue, 25 Apr 2023 11:51:38 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testen]]></category>
		<guid isPermaLink="false">http://webseite.binaris-informatik.de/?p=369</guid>

					<description><![CDATA[<p>Sie möchten eine neue Software entwickeln. Dabei haben Sie natürlich die Absicht ein tolles Produkt mit einer hervorragenden technischen Qualität zu erzeugen. Und diese hervorragende technische Qualität wollen Sie mit einer möglichst umfassenden Testabdeckung beweisen und absichern. Doch in erschreckend vielen Fällen werden die Punkte hervorragende technische Qualität und umfassende Testabdeckung deutlich verfehlt. Bei der [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/04/25/test-driven-development-in-sechs-einfachen-schritten/">Test Driven Development in sechs einfachen Schritten</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="369" class="elementor elementor-369" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-7fa32fa1 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7fa32fa1" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-244d2cf9" data-id="244d2cf9" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-116e1cdc elementor-widget elementor-widget-text-editor" data-id="116e1cdc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Sie möchten eine neue Software entwickeln. Dabei haben Sie natürlich die Absicht ein tolles Produkt mit einer hervorragenden technischen Qualität zu erzeugen. Und diese hervorragende technische Qualität wollen Sie mit einer möglichst umfassenden Testabdeckung beweisen und absichern. Doch in erschreckend vielen Fällen werden die Punkte hervorragende technische Qualität und umfassende Testabdeckung deutlich verfehlt.</p><p>Bei der Suche nach einem Weg, wie Sie das in Zukunft besser machen können wird dann oft ein Konzept in den Raum geworfen, dass die Lösung für all unsere Probleme sein soll:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-f0c8b20 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f0c8b20" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-44b335a" data-id="44b335a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-9a6d285 elementor-widget elementor-widget-text-editor" data-id="9a6d285" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p style="text-align: center;">Test Driven Development</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-a09e694 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a09e694" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c40b4c0" data-id="c40b4c0" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-97f2f7e elementor-widget elementor-widget-text-editor" data-id="97f2f7e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wenn Sie dann fragen, wie Test Driven Development dieses Wunder denn vollbringen möchte, dann bekommen Sie oft zur Antwort, dass Sie einfach nur die Reihenfolge von Programmierung und Testen umdrehen müssen und der Rest regelt sich dann schon von ganz alleine.</p><p>In diesem Artikel wollen wir uns damit beschäftigen, ob dieses Versprechen zu schön ist, um wahr zu sein oder ob da doch etwas dran ist.</p><p>Um es hier gleich zum Anfang zu verraten: Ja, Test Driven Development kann tatsächlich dieses scheinbare Wunder wirken. Allerdings nur, wenn wir Test Driven Development, oft einfach auch nur TDD genannt, wirklich verstehen. Inklusive allem, was rund um das Grundkonzept mit zum Gesamtpaket TDD gehört.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-6dfde930 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="6dfde930" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-59c01226" data-id="59c01226" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-3874760d" data-id="3874760d" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5fd8eb4e elementor-widget elementor-widget-text-editor" data-id="5fd8eb4e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><i>„Test Driven Development ist  nicht nur ‚erst Test, dann Programmierung‘, es ist ein Gesamtpaket“</i></p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-4d2904e0" data-id="4d2904e0" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-f4408f0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f4408f0" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-77cf2c4" data-id="77cf2c4" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6401e9c elementor-widget elementor-widget-text-editor" data-id="6401e9c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Sehr oft beobachten wir, dass Unternehmen TDD einführen wollen und kurz danach wieder verwerfen, weil es bei ihnen scheinbar nicht funktioniert oder nicht passt. Unsere These ist dann in den meisten Fällen, dass sie nicht den vollen Umfang von TDD verstanden und nur den offensichtlichen Teil probiert haben. Deshalb schauen wir uns heute gemeinsam an, woraus das Gesamtpaket TDD besteht und welche Schritte notwendig sind, damit es auch bei Ihnen funktionieren kann.</p><p>Betrachten wir TDD genauer, dann stellen wir fest, dass bevor wir zum offensichtlichen Kernelement kommen, also die Reihenfolge Implementierung/Test umzudrehen, wir erst ein paar Hausaufgaben zu machen haben. Und dass wir nach der Umsetzung des Kernelements noch einen zusätzlichen Schritt weitergehen müssen, um wirklichen Erfolg haben zu können.</p><p>Aber keine Angst, in diesem einfachen 6-Schritte-Programm zeigen wir Ihnen, wie Sie Test Driven Development erfolgreich in Ihrem Unternehmen oder Projekt einführen und damit in Zukunft Ihre Erwartungen an technische Qualität und Testabdeckung erfüllen können.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2f54faeb elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2f54faeb" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-98f842" data-id="98f842" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-659c4215 elementor-widget elementor-widget-heading" data-id="659c4215" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Eins: Die Motivation zum Testen klären</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-59d6e810 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="59d6e810" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-631a2907" data-id="631a2907" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-56b60e10 elementor-widget elementor-widget-text-editor" data-id="56b60e10" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der erste Schritt besteht darin, zu klären was Tests eigentlich sind oder besser, warum wir eigentlich testen wollen.</p>
<p>„Warum müssen wir denn über den Grund für das Testen reden, der ist doch klar. Ich will nur wissen, ob mein Programm auch funktioniert!“ mag sich da so mancher nun denken. So haben es viele von uns auch ursprünglich mal gelernt. Wir schreiben ein Stück Software und dann überprüfen wir, ob es auch funktioniert. Fertig!</p>
<p>Doch die Realität ist ein bisschen komplexer. In unserer Wahrnehmung gibt es vier Gründe zum Testen bzw. zum Schreiben von automatisierten Tests:</p>
<ol style="font-size: 16px; background-color: #ffffff;">
<li style="font-size: 16px;">Wir suchen die Ursache für einen Fehler und testen deshalb das Verhalten eines gegebenen Systems</li>
<li style="font-size: 16px;"><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Wir haben ein System oder einen Teil eines Systems erstellt und wollen nun die einwandfreie Funktionsweise unserer Schöpfung beweisen und auf Dauer sicherstellen</span></li>
<li style="font-size: 16px;">Wir haben vor, ein System oder einen Teil eines Systems zu erstellen und wollen über Tests bereits im Vorfeld unsere Erwartungshaltung definieren, damit wir genau das Richtige implementieren</li>
<li style="font-size: 16px;">Wir haben vor, ein System oder einen Teil eines Systems zu erstellen und wollen mit Tests dabei helfen, dass unser System wartbar und weiterentwickelbar ist bzw. bleibt</li>
</ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-971408d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="971408d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c093b0c" data-id="c093b0c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c9ca2f3 elementor-widget elementor-widget-text-editor" data-id="c9ca2f3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Für jede dieser Intentionen gibt es verschiedene Arten von Test und Vorgehensweisen, die den angestrebten Zweck erreichen können. Abhängig davon, was wir eigentlich mit unserem Testen erreichen wollen, müssen oder können wir die dazu passenden Formen von Tests und Vorgehensweisen wählen.</p><p>Das klingt sehr trivial und ist es auch. Vielleicht ist es gerade deshalb so wichtig, diesen Schritt bewusst zu gehen. Wenn wir ein neues Produkt erstellen oder ein bereits bestehendes um neue Funktionalitäten erweitern wollen, dann sind vor allem der dritte und vierte Grund unsere Hauptmotivation in Verbindung mit dem zweiten.</p><p>Nur den zweiten Grund als Motivation zum Testen zu sehen ist eine sehr eingeschränkte Sichtweise, die das volle Potenzial des Testens außen vor lässt und unsere Möglichkeiten beschränkt, die bessere Software erstellen zu können. Erst hinterher durch Tests die korrekte Funktionsweise einer Software sicherstellen zu wollen ist der Grund, warum in vielen Unternehmen die Qualitätssicherung nichts mit der Produktentwicklung zu tun hat und warum Testen als ein separater, von der Programmierung getrennter Schritt verstanden wird. Das ist die Absicht, erst hinterher festzustellen, dass „es“ nicht funktioniert und dann noch zu versuchen, das Produkt zu retten. </p><p>Wir dahingehen wollen Qualitätssicherung oder Qualitätsmanagement als Bestandteil der Produktentwicklung sehen. Wir wollen direkt das funktionierende, wartbare und erweiterbare Produkt bauen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2cd1ebc4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2cd1ebc4" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-49ee3d78" data-id="49ee3d78" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5fa31277 elementor-widget elementor-widget-heading" data-id="5fa31277" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Zwei: Die Eigenschaften guter Software erkennen</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5f55993 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5f55993" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4bf1482" data-id="4bf1482" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-ffe1ffd elementor-widget elementor-widget-text-editor" data-id="ffe1ffd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das führt uns direkt zum zweiten Schritt in unserem Programm, die technischen Eigenschaften guter Software. Gute, robuste Softwarekomponenten zeichnen sich durch folgende vier Eigenschaften aus:</p><ul><li>Lauffähigkeit</li><li>Einfachheit</li><li>Relevanz</li><li>Redundanzfreiheit</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-6956303 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="6956303" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4d6c239" data-id="4d6c239" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c0d41fc elementor-widget elementor-widget-text-editor" data-id="c0d41fc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Was bedeutet das? In erster Linie wollen wir, dass unsere Software funktioniert. Und zwar fehlerfrei. Das ist schon mal klar verständlich.</p><p>Dann möchten wir aus Gründen der Wartbarkeit, dass sie möglichst einfach ist bzw. dass alle einzelnen Komponenten möglichst simple und leicht verständlich sind. Jeder Softwareentwickler, der schon mal in eher schwer verständlichen Sourcecode Änderungen einbauen musste, ist von diesem Punkt direkt ein großer Fan. Und ebenso jeder Projektverantwortliche, der für eine Weiterentwicklung schon mal astronomische Aufwandsschätzungen zu hören bekam mit der Begründung, der aktuelle Softwarestand wäre schwer zu verstehen und deshalb schwer zu erweitern.</p><p>Und natürlich ist es eine gute Idee, wenn jedes Stück Sourcecode auch wirklich einen relevanten Teil zur Lösung des Problems beiträgt. Unnützer oder toter Code reduziert nur die Wartbarkeit. </p><p>Das gleiche gilt auch für die Freiheit von Redundanzen, also doppeltem Code; auch diese erhöht die Wartbarkeit und reduziert das Fehlerrisiko.</p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Relevanz und Redundanzfreiheit sind in dieser Liste Begriffe, die in sich schon sehr gut erklären, wann sie tatsächlich gegeben sind. Wenn jedes Stück Sourcecode auch wirklich benutzt wird, dann ist alles relevant und wenn es nirgendwo identische Codestellen gibt, dann ist die Software auch redundanzfrei.</span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Spannender wird es schon bei der Lauffähigkeit und der Einfachheit, denn für beides ist eine genauere Definition nötig. Die Lauffähigkeit lässt sich gut durch Akzeptanzkriterien definieren oder auch eine sogenannte Definition of Done, in der die Beteiligten gemeinsam festhalten, was es bedeutet, dass eine Funktionalität oder ein Feature fertig ist.</span></p><p>Ähnliches gilt für Einfachheit, auch diese Worthülse darf mit einer gemeinsamen Definition mit echtem Leben gefüllt werden, z.B. mit Code Metriken, Style Guides oder gemeinsamen Architekturkonzepten.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1b6e353a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1b6e353a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4ea4920" data-id="4ea4920" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-11afc18 elementor-widget elementor-widget-heading" data-id="11afc18" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Drei: Das Schreiben echter Unit Tests lernen</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-fcfe775 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="fcfe775" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-287c41b" data-id="287c41b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-28674df elementor-widget elementor-widget-text-editor" data-id="28674df" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Im nächsten Schritt dürfen wir lernen, was echte Unit Tests sind und wie sie geschrieben werden. </p><p>Wie wir jetzt auf Unit Tests kommen? Wie wir gleich sehen werden, sind Unit Tests die unterste und elementarste Ebene der technischen Tests und eine Grundlage beim Test Driven Development. Deshalb beschäftigen wir uns nun in diesem Schritt mit Unit Tests.</p><p>Bei dem Begriff Unit Test haben wir ähnliche Herausforderungen wie bei den Begriffen Lauffähigkeit und Einfachheit: Jeder hat den Begriff schon gehört und auch eine Vorstellung davon, was diese bedeuten. Nur bedeutet das noch lange nicht, dass wir auch alle das Gleiche darunter verstehen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-35084eaa elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="35084eaa" data-element_type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5f18cbb2" data-id="5f18cbb2" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6b6da82d elementor-widget elementor-widget-text-editor" data-id="6b6da82d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><b>Die babylonische Sprachverwirrung</b></p><p>Modul-, Komponenten-, Integrations-, System-, Akzeptanz-, End-to-End- oder Abnahmetest, Namen für unterschiedlichen Testlevel oder -arten gibt es viele. Allerdings sind die Bedeutungen nicht wirklich standardisiert. Sie sind nur Vereinbarungen zwischen den betroffenen Personen. Stellen Sie also sicher, dass Sie wirklich alle das gleiche unter diesen Begriffen verstehen und gehen Sie nicht einfach blind davon aus. Den Begriffen oben ist gemeinsam, dass sie alle die Reichweite, den Scope, der Teststufe beschreiben und nicht das Verfahren. Im Gegensatz zu Begriffen wie Performance-, Last-, Langzeit-, Monkey- oder Smoketests. Und auch hier gilt: Klären Sie das gemeinsame Verständnis der Begriffe.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-6a91f658 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="6a91f658" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dfabf88" data-id="dfabf88" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8de6301 elementor-widget elementor-widget-text-editor" data-id="8de6301" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Definitionen zu Unit-Test, die wir schon oft von unseren Kunden zu gehört haben sind diese:</p><ul><li>„Unit Tests sind die Entwicklertests, also alles, was die Entwickler testen“</li><li>„Mit Unit Tests testen wir einzelne Einheiten“</li><li>„Unit Tests sind Klassentests“</li><li>„Unit Tests testen die Funktionen von Klassen“</li><li>„Unit Tests sind die automatisierten Tests“</li><li>„Unit Tests sind Tests, die mit JUnit geschrieben wurden“</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-28f788f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="28f788f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-71c8b96" data-id="71c8b96" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-aeb845e elementor-widget elementor-widget-text-editor" data-id="aeb845e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Jede dieser Definitionen ist durchaus nachvollziehbar und doch ist keine davon so richtig hilfreich. Gehen wir also in die genaue Klärung des Begriffs Unit Test.</p><p>In der Liste der Motivationen zum Testen sind Unit Tests ein geeignetes Mittel für die Punkte zwei, drei und vier. Um diese Behauptung überprüfen zu können, betrachten wir, was denn ein Unit Test eigentlich sein soll. Unser erster Versuch einer Definition lautet wie folgt:</p><p>Unit Tests sind ein Verfahren, um das Verhalten einer Komponente isoliert, d.h. ohne ihre Abhängigkeiten zu anderen Komponenten, zu überprüfen.</p><p>Das bedeutet, wir wollen ein bestimmtes Verhalten in einem klar definierten Kontext überprüfen und dabei jede Form von Seiteneffekten vermeiden. Deshalb klammern wir die Abhängigkeiten zu anderen Komponenten explizit aus. Jede weitere Komponente, von der unser zu testendes Verhalten abhängig ist, bedeutet einen weiteren Faktor, den wir kontrollieren müssen bzw. der das Ergebnis unseres Tests beeinflussen kann. </p><p>Wie können wir nun diesen Anspruch auf isoliertes Testen in unseren Tests umsetzen?</p><p>Sehen wir uns dazu ein Beispiel in Java an. In einem Baseballszenario wirft ein Pitcher einen Ball, den ein Spieler zu treffen versucht. Wir möchten einen Unit Test für die Methode hitBaseball() schreiben, bei der der Spieler einen durchschnittlich geworfenen Ball erfolgreich treffen soll. Spontan sähe unser Test so aus:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-41edb81 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="41edb81" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9424a07" data-id="9424a07" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8369eb0 elementor-widget elementor-widget-image" data-id="8369eb0" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="800" height="184" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-1024x235.png" class="attachment-large size-large wp-image-5322" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-1024x235.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-300x69.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-768x176.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-1536x353.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/01_Codebeispiel-simple-2048x470.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-65ae858b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="65ae858b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2be29637" data-id="2be29637" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6fd4131e elementor-widget elementor-widget-text-editor" data-id="6fd4131e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Pitcher erzeugt beim Werfen einen Ball, der alle Attribute eines Balles hat, der durchschnittlich geworfen wurden. Der Spieler versucht den Ball zu treffen und wir gehen eigentlich davon aus, dass er das müsste. Das ist unsere Erwartungshaltung.</p><p>Ist das nun ein Unit Test gemäß unserer Definition oben? Ganz klar nein! </p><p>Neben der Methode hitBaseball(x), dem Verhalten, dass wir eigentlich testen wollen, testen wir hier auch direkt noch throw(y) von Pitcher mit und die interne Implementierung von Baseball. Wenn dieser Test fehlschlägt, dann ist nicht deutlich ersichtlich, woran das liegen könnte, die Anzahl der Codestellen, die sich unerwartet verhalten ist einfach zu groß.</p><p>Probieren wir es mal anders:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-37fb445 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="37fb445" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-853b04e" data-id="853b04e" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-ea3e3ab elementor-widget elementor-widget-image" data-id="ea3e3ab" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="800" height="205" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-1024x262.png" class="attachment-large size-large wp-image-5326" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-1024x262.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-300x77.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-768x196.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-1536x393.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/02_Codebeispiel-erweitert-2048x524.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-457ca1f5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="457ca1f5" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6ebba0c8" data-id="6ebba0c8" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-339e2193 elementor-widget elementor-widget-text-editor" data-id="339e2193" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Was ist jetzt anders? </p><p>Um die Methode hitBaseball testen zu können, benötigen wir einen Baseball. Nur lassen wir uns den diesmal nicht von einem Pitcher, den wir ja hier überhaupt nicht testen wollen, erzeugen. Stattdessen erzeugen wir uns mit Hilfe eines Mock Frameworks, hier Mockito, einen Mock, der so aussieht, wie ein Baseball.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-4c2bdf3 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4c2bdf3" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-68eafb6" data-id="68eafb6" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-605eb13 elementor-widget elementor-widget-image" data-id="605eb13" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="38" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-1024x48.png" class="attachment-large size-large wp-image-5327" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-1024x48.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-300x14.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-768x36.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-1536x72.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/03_Codebeispiel-Mock-erzeugt-2048x95.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-15cb991 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="15cb991" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f9befe5" data-id="f9befe5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-603d4b1 elementor-widget elementor-widget-text-editor" data-id="603d4b1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wir brauchen jetzt keinen Pitcher mehr und sind damit in unserem Test auch nicht mehr davon abhängig, dass der Pitcher sich wirklich wie erwartet verhält. Durch den Mock haben wir uns selber etwas erzeugt, dass wie ein Baseball aussieht. Allerdings müssen wir nun noch sicherstellen, dass sich dieser Mock auch wie ein durchschnittlich geworfener Baseball verhält.</p><p>In diesem Beispiel wissen wir aus der Implementierung vom BaseballPlayer, dass wir den Ball nach seiner Geschwindigkeit fragen werden. Also erklären wir dem Mock, dass er 90 (mph) zu antworten hat, wenn er nach seiner Geschwindigkeit gefragt wird.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-deb2b9b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="deb2b9b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-edf4398" data-id="edf4398" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-dd4ce84 elementor-widget elementor-widget-image" data-id="dd4ce84" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="38" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-1024x48.png" class="attachment-large size-large wp-image-5331" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-1024x48.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-300x14.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-768x36.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-1536x71.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/04_Codebeispiel-Mockverhalten-2048x95.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-09747b6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="09747b6" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f26c09a" data-id="f26c09a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5a698cf elementor-widget elementor-widget-text-editor" data-id="5a698cf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>So testen wir exakt nur noch das Verhalten von hitBaseball(x).</p><p>Wenn wir Tests auf diese Art und Weise schreiben, dann bekommen wir als Ergebnis eine ganze Menge an Tests, die jeweils nur ein ganz bestimmtes Verhalten einer Komponente testen. Wir sagen manchmal auch, ein Unit Test testet nur einen einzelnen Aspekt einer Komponente. Das verfeinert unsere Definition von Unit Test.</p><p>Aber warum tun wir uns das an? Es ist schon eine ganze Menge Arbeit, so viele so kleine Tests zu schreiben. Und es ist ja nicht nur die Menge der Tests, die nun zu schreiben sind. Auch die Implementierung selbst ist so zu halten, dass diese einzelnen Aspekte überhaupt isoliert testbar sind. </p><p>Wir könnten doch auch einfach eine kleinere Anzahl an großen Tests schreiben, die direkt mehrere, oder sogar alle Aspekte einer Komponente und das Zusammenspiel mit ihren abhängigen Komponenten testen, oder? Ja, könnten wir. Aber genau das wollen wir nicht mehr. </p><p>Lassen Sie uns drei Motivationen anführen, warum wir stattdessen echte Unit Tests verwenden möchten:</p><p style="padding-left: 40px;"><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">a. Wenn meine „großen“, komplexen Tests grün laufen, also kein Fehler auftritt, dann ist alles in Ordnung. Easy going. Aber wenn jetzt doch was nicht in Ordnung ist, was genau stimmt dann nicht. Mein „großer“ Test verrät es im schlimmsten Fall nicht, die einzige Aussage wäre: „Irgendetwas stimmt nicht!“ Und selbst bei einem besser strukturierten Test bleiben noch eine Reihe von potenziellen Fehlergründen offen, die wir nun manuell durchtesten müssten. Bis wir wüssten, was tatsächlich das Problem ist und es beheben könnten, müssten wir viel weitere Arbeit investieren. Haben wir viele einzelne Tests, die unabhängig voneinander einzelne Aspekte testen, zeigt uns der fehlschlagende Test direkt die Fehlerursache an. Fehlerfinden und -beheben wird damit zum Kinderspiel.</span></p><div style="padding-left: 40px;"><p><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">b. Ein größerer Testkontext besteht meistens aus einer größeren Anzahl an Parametern, Ausgangsbedingungen oder Ablaufmöglichkeiten, die unterschiedliche Ergebnisse erzielen können. Selbst wenn wir nur eine repräsentative Auswahl an realistischen Szenarien mit Tests abbilden möchten, wird durch die Komplexität der Abhängigkeiten die Anzahl der notwendigen Tests schnell groß, oft sogar sehr groß. Und wir reden hier von „größeren“ Tests, also höherem Aufwand pro Test. Haben Sie dadurch schon mal sehenden Auges eine geringere Testabdeckung in Kauf genommen, obwohl Sie ein schlechtes Gefühl dabei hatten? Seien Sie ehrlich! Die Reduzierung des Testkontextes auf den einzelnen Aspekt einer Komponente, reduziert damit auch die Komplexität der Tests. Weil diese Test unabhängig voneinander sind, entsteht für die Testabdeckung nun auch nicht mehr das Kreuzprodukt aller möglichen Kombinationen. Für die Auswahl der übergeordneten Tests, die das Zusammenspiel der Aspekte testen, können wir uns nun auf eine wirklich repräsentative Auswahl realistischer Szenarien beschränken. Wir werden später noch über diese Art von Tests reden.</span></p><p><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">c. Was schrieben wir oben? Für Unit Tests muss die Implementierung so geschrieben sein, dass die einzelnen Aspekte überhaupt einzeln testbar sind. Das bedeutet nichts anderes als ein wirklich modulares Design bis in den letzten Winkel und ein hohes Maß an loser Kopplung. Müssen wir hier noch über die Vorteile einer derartigen Architektur reden? Wohl kaum. Unit Tests zwingen uns also zum besseren technischen Design.</span></p></div>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-51a83d7e elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="51a83d7e" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4c6eddbd" data-id="4c6eddbd" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-42417e93 elementor-widget elementor-widget-heading" data-id="42417e93" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default"><h4 class="elementor-heading-title elementor-size-default elementor-inline-editing pen" data-elementor-setting-key="title" data-pen-placeholder="Eingabe hier..." style="font-family: Poppins, sans-serif; font-weight: var( --e-global-typography-primary-font-weight ); line-height: var( --e-global-typography-primary-line-height );">AAA-Regel</h4></h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-aa20797 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="aa20797" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b6b95b6" data-id="b6b95b6" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cb6b35a elementor-widget elementor-widget-text-editor" data-id="cb6b35a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Um jetzt gute Unit Tests zu schreiben, gibt es ein paar Faustformeln, wie ein Unit Test aussehen sollte. Eine davon ist die AAA-Regel. AAA steht dabei für</p><ul><li>Arrange</li><li>Act</li><li>Assert</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-15b66c3 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="15b66c3" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f584917" data-id="f584917" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-94834ce elementor-widget elementor-widget-text-editor" data-id="94834ce" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>und beschreibt den Aufbau eines Unit Tests. </p><p>Im <b>Arrange </b>wird die Startsituation des Tests definiert. Die Komponente wird erzeugt und initialisiert, Mocks werden erzeugt, gesetzt und evtl. das Verhalten der Mocks definiert, Variablen werden gesetzt.</p><p>Im <b>Act</b> wird die eigentliche Aktion, die das zu verifizierende Ergebnis erzeugen soll, durchgeführt. In der Regel ist das der Aufruf der Methode, deren Verhalten getestet werden soll. Ein guter Unit-Test besteht hier nur aus einem Aufruf. Ist mehr als ein Aufruf notwendig, dann ist das ein Hinweis darauf, dass mehr als nur ein einfacher Aspekt getestet wird!</p><p>Und schlussendlich wird im <b>Assert </b>nun überprüft, ob auch das erwartete Ergebnis durch das Act erzielt wurde. Hier gilt, dass nur ein einzelnes fachliches Ergebnis geprüft werden soll. Und dabei liegt die Betonung auf fachliches Ergebnis, nicht technisches. Das bedeutet also nicht zwangsläufig, dass dafür nur ein einzelnes Assert-Statement verwendet werden darf. Wenn über mehrere Vergleiche verschiedene Teilaspekte des fachlichen Ergebnisses überprüft werden müssen, dann ist das schon in Ordnung. Wenn allerdings z.B. ein Unit-Test TestInsertKunde im Assert prüft, ob der Kunde wirklich in der die Datenbank geschrieben UND ein entsprechender Logeintrag im Logfile erzeugt wurde, dann ist das ein Hinweis darauf, dass hier mehr als nur ein einzelner Aspekt getestet wurde. </p><p>So simple und vielleicht auch nervig, wie die Einhaltung der AAA-Regel auch scheinen mag, sie hilft, echte Unit Tests zu identifizieren.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c5f82d7 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c5f82d7" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31e6714" data-id="31e6714" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0831eca elementor-widget elementor-widget-image" data-id="0831eca" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="202" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-1024x259.png" class="attachment-large size-large wp-image-5344" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-1024x259.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-300x76.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-768x194.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-1536x388.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/05_AAA-Regel-in-Codebeispiel-2048x517.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5d9f6d6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5d9f6d6" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e080ce7" data-id="e080ce7" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-51343bd elementor-widget elementor-widget-text-editor" data-id="51343bd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wir sehen in dem Beispiel, dass hier Act und Assert in einer Zeile, quasi ineinander verschachtelt stehen. Hier kann man argumentieren, dass für die bessere Lesbarkeit dieses zu trennen ist, also den Schlag des Spielers in einer einzelnen Zeile und das Ergebnis daraus in einer lokalen Variable fangen und dann diese im Assert auswerten.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-a5ea2bf elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a5ea2bf" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3485adf" data-id="3485adf" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-93cb268 elementor-widget elementor-widget-image" data-id="93cb268" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="243" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-1024x311.png" class="attachment-large size-large wp-image-5345" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-1024x311.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-300x91.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-768x234.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-1536x467.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/06_AAA-Regel-in-ueberarbeitetem-Codebeispiel-2048x623.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-fab3d76 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="fab3d76" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4b5762e" data-id="4b5762e" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1e39fd5 elementor-widget elementor-widget-text-editor" data-id="1e39fd5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Ob das nun der besseren Lesbarkeit und Wartbarkeit wegen wirklich notwendig ist, ist schwer objektiv zu beurteilen. Deshalb überlassen wir diese Entscheidung denen, die mit dem Code und den Tests arbeiten müssen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8f9003c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8f9003c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3420548c" data-id="3420548c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7102df39 elementor-widget elementor-widget-heading" data-id="7102df39" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">FIRST</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-90fafb1 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="90fafb1" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8c41f23" data-id="8c41f23" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cc47a7a elementor-widget elementor-widget-text-editor" data-id="cc47a7a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Ein anderes Akronym zur Identifizierung von guten Unit Tests ist FIRST, auch als FIRST Properties von Unit Tests bekannt. FIRST steht dabei für:</p><ul><li>Fast</li><li>Isolated</li><li>Repeatable</li><li>Self-Validating</li><li>Timely</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8ef01ad elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8ef01ad" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d40f910" data-id="d40f910" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-17e8129 elementor-widget elementor-widget-text-editor" data-id="17e8129" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><b>Fast</b>: Ein Unit Test soll schnell in der Ausführung sein. Warum? Nun, so granular wie Unit Tests sind, reden wir bei der Durchführung der Tests nicht von einem oder zwei Unit Tests, sondern im Laufe der Zeit wird die Anzahl eher auf ein paar Hundert Unit Tests ansteigen, vielleicht auch ein paar Tausend. Und der große Vorteil einer guten Codeabdeckung durch automatisierte Tests ist, dass wir bei Änderungen quasi durch einen Mausklick überprüfen können, ob noch alles funktioniert. Wenn der Durchlauf aller Tests aber ein oder zwei Stunden dauert, oder vielleicht noch länger, dann wird die Motivation abnehmen, diese Testläufe in kurzen Intervallen durchzuführen. Das geht wieder auf Kosten der Qualität, weshalb jeder einzelne Unit Test schnell sein muss, zwei bis drei Sekunden maximal. Und noch schneller wäre noch besser.</p><p><b>Isolated</b>: Unit Tests sind unabhängig voneinander. Das bedeutet, die Durchführbarkeit eines Unit Tests hängt weder davon ab, dass ein anderer Test bereits gelaufen ist, noch dass ein anderer Test vorher ein bestimmtes Ergebnis erzielt hat. Jeder Unit Test erzeugt im Arrange selbst die für ihn notwendige Startkonstellation.</p><p><b>Repeatable</b>: Ein Test muss beliebig oft wiederholbar sein. Und zwar ohne, dass zwischen zwei Testläufen manuell oder auch durch einen anderen Prozess (z.B. ein anderer Test) die im ersten Testlauf erzeugten Zustände zurückgesetzt werden müssen. Oder anderes formuliert: Ein Unit Test hinterlässt keine persistenten Zustandsänderungen im System. Entweder erzeugt er erst keine Zustandsänderungen oder er räumt sie selber zum Abschluss des Tests wieder auf, indem er z.B. Werte aus der Datenbank wieder löscht oder zurücksetzt. Das steht in einem engen Zusammenhang mit den Punkt Isolated.</p><p><b>Self-Validating</b>: Ein Unit Test kann immer selber eineindeutig bestimmen, ob er erfolgreich war oder fehlgeschlagen ist. Für diese Beurteilung ist definitiv keine manuelle Bewertung durch einen Menschen erforderlich. Klingt blöd und eigentlich selbstverständlich. Doch finden wir immer mal wieder vor, dass erst einer der Entwickler oder Tester nochmal darauf schauen muss, um zu beurteilen, ob der Testlauf jetzt ok war oder eher nicht. Wenn das der Fall ist, dann stimmt etwas mit der Grundidee der entsprechenden Tests nicht.</p><p><b>Timely</b>: Unit Tests sind nicht besonders gut geeignet, um sie irgendwann mal später zu schreiben, vielleicht Tage, Wochen oder Monate nachdem der Sourcecode geschrieben wurde. Quasi nur, um nachträglich noch eine gute Testabdeckung zu erreichen. Wie wir oben schon gesehen haben, hat alleine das Schreiben der Unit Tests einen großen Einfluss darauf, wie der Sourcecode strukturiert wird. Deshalb gehören die Erstellung von Sourcecode und Unit Tests unmittelbar zusammen. Das werden wir uns gleich noch genauer ansehen, wenn wir über die testgetriebene Entwicklung reden.</p><p>Das sind eine Menge Faktoren, die für die Erstellung guter Unit Tests zu berücksichtigen sind. Und deshalb nochmal die Frage. Warum tun wir uns das an?</p><p>Nun, der konsequente Einsatz von Unit Tests hilft uns, Software zu schreiben, die die Kriterien guter, robuster Software erfüllen (siehe Schritt 2).</p><p>Also schreiben wir doch einfach konsequent Unit Tests. Doch jetzt gibt es beim klassischen Test-After Ansatz, das heißt ich schreibe erst meinen Sourcecode und erst danach die entsprechenden Tests, ein kleines Problem mit den Unit Tests. Wie wir oben gesehen haben, hat die Erstellung eines Unit Tests großen Einfluss auf die Struktur und das Design des eigentlichen Sourcecodes. Ich werde also vermutlich oft beim Schreiben eines Unit Tests feststellen, dass ich diesen Test so gar nicht schreiben kann, weil die Implementierung des Sourcecodes es nicht zulässt. Also zurück in den Sourcecode und diesen ändern. Beim nächsten Unit Test wieder und wieder und wieder. Das kann schnell nervig werden und die Motivation reduzieren, weitere Unit Tests zu schreiben.</p><p>Wenn jedoch meine Unit Tests mir sowieso schon vorgeben wollen, wie ich den Sourcecode zu schreiben habe, warum dann nicht direkt die ganze Idee einfach umdrehen? Also erst den Test schreiben und dann dazu passend implementieren? Und schon sind wir mitten in der testgetriebenen Entwicklung gelandet, auf Neudeutsch auch Test Driven Development oder TDD genannt.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-15d433cc elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="15d433cc" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3682cd09" data-id="3682cd09" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-677a6ea4 elementor-widget elementor-widget-heading" data-id="677a6ea4" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Vier: Test Driven Development Grundprinzip verstehen</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-91c7ae9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="91c7ae9" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6b9b549" data-id="6b9b549" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-b602809 elementor-widget elementor-widget-text-editor" data-id="b602809" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Also ist TDD einfach nur zuerst den Test zu schreiben und dann den Sourcecode?</p><p>Ja … und nein. Tatsächlich ist die einfache Umkehrung der Reihenfolge die Grundidee des TDDs. Schon alleine das wäre oft eine große Verbesserung im Hinblick auf Testqualität und -abdeckung. Doch die TDD-Gurus sagen immer so schön: </p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7de3658f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7de3658f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-3d047677" data-id="3d047677" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-51a4a708" data-id="51a4a708" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4d7d657 elementor-widget elementor-widget-text-editor" data-id="4d7d657" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>„TDD is a design process, not a testing process“</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-2d3b7ae4" data-id="2d3b7ae4" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7b6294a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7b6294a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7861a93" data-id="7861a93" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-691246d elementor-widget elementor-widget-text-editor" data-id="691246d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es geht, genau wie bei den Unit Tests nicht nur darum, eine gute Testqualität und -abdeckung zu erzielen, sondern wir wollen besseren Sourcecode schreiben. </p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Damit wir das erreichen können, gibt es da noch ein paar weiterführende Ideen im TDD, die wir uns jetzt ansehen wollen. Die erste grundlegende Idee ist, dass der TDD-Zyklus nicht aus zwei, sondern aus drei Phasen besteht:</span></p><ol><li><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">Schreibe einen Test</span></li><li>Implementiere gegen den Test</li><li>Räume auf</li></ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-be6a4dd elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="be6a4dd" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-59c654e" data-id="59c654e" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-23511f8 elementor-widget elementor-widget-text-editor" data-id="23511f8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Zum ersten Schritt müssen wir nicht mehr viel sagen. Obwohl … ja doch, ein paar Anmerkungen gibt es auch dazu. Die Betonung liegt auf einen Test. Wir schreiben also nur einen Test und nicht gleich alle Tests, die uns gerade einfallen. Dann starten wir den Test und dieser Test muss fehlschlagen! Das ist wichtig. Wenn dieser Test jetzt schon erfolgreich durchlaufen würde, dann hätten wir in Wirklichkeit einen Test für eine bereits bestehende Lösung geschrieben. Und das wäre wieder Test-After.</p><p>Jetzt implementieren wir gegen den Test, das heißt, wir schreiben genau den Sourcecode, der nötig ist, damit der Test erfolgreich durchläuft. Und zwar auch nur so viel, wie unbedingt nötig ist und keine Zeile mehr. Alles, was wir mehr programmieren würden, wäre nicht durch einen Test abgedeckt. In dieser Phase geht es ausschließlich darum, eine lauffähige Lösung zu finden. Und noch nicht um Schönheit.</p><p>Wenn der Test erfolgreich durchgelaufen ist, räumen wir auf, inzwischen auch in Deutschland gerne als Refactoring bezeichnet. Nachdem wir bewiesen haben, dass wir die eigentliche Lösung gefunden haben, dürfen wir das Ganze auch hübsch machen, das heißt, wir entfernen jetzt eventuell redundanten Code, machen Variablen oder Methodennamen sprechender, überprüfen, ob wir uns an alle Programmiervorgaben gehalten haben, ob alle Code Metriken erfüllt sind und was sonst noch so ansteht, damit das Ergebnis unserer Definition von gutem Sourcecode entspricht.</p><p>Einige erfahrene Entwickler behaupten hier gerne, sie können sofort richtig und sauber programmieren, der letzte Schritt wäre damit unnötig. Auf einige ganz wenige Profis trifft das auch zu. Doch die meisten von uns sind in Wirklichkeit doch noch nicht ganz so weit. Das ist keine Schande, auch wir halten uns an die Trennung von zuerst die Lösung finden und erst dann aufräumen. Wir stehen dazu!</p><p>Was hier auch noch einen besonderen Hinweis verdient ist, dass das Aufräumen sich nicht nur auf unsere Lösungsimplementierung bezieht, sondern natürlich auch auf unseren Test Code. Sie erinnern Sich an das F in FIRST? F wie Fast. Jeder einzelne Test verdient es, dass Sie ihn nochmal unter die Lupe nehmen. Kann der nicht noch schlanker und schnell werden? Und auch noch lesbarer und wartbarer? Bedenken Sie, im Laufe der Zeit wird die Anzahl der Tests auf eine drei- bis vierstellige Anzahl anwachsen. Dann müssen die alle zusammen immer noch performant und wartbar sein. Kümmern wir uns also doch einfach direkt darum, bevor es zu spät ist.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7aefb4d0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7aefb4d0" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2ba322b" data-id="2ba322b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7e60c745 elementor-widget elementor-widget-heading" data-id="7e60c745" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Fünf: In kurze Zyklen zu arbeiten lernen</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-9c3839f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9c3839f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6eb81d9" data-id="6eb81d9" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-42aa3f6 elementor-widget elementor-widget-text-editor" data-id="42aa3f6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wo wir gerade bei Geschwindigkeit sind, sehen wir uns doch mal die zweite grundlegende Idee an, der schnelle Durchlauf des kompletten TDD-Zyklus.</p><p>Eine sehr spannende Idee ist, dass ein vollständiger TDD-Zyklus (Testscheiben, Implementierung, Refactoring) innerhalb von 90 Sekunden durchlaufen werden soll.</p><p>90 Sekunden? Warum diese Eile?</p><p>Dies zwingt uns in kleinen Lösungsschritten zu arbeiten. Wenn ich in 90 Sekunden den ganzen Zyklus durchlaufen möchte, wie groß darf der Test dann maximal sein, dass ich in einem Teil der Zeit schreiben kann. Und wie groß darf das Problem maximal sein, dass ich dann in einem Teil der verbleibenden Zeit lösen muss. Diese selbstauferlegte Herausforderung erzwingt, dass wir wirklich in sehr kleinen Einheiten unser Softwareproblem lösen. Wir müssen große Probleme in kleinere und noch kleinere Probleme zerlegen, für die wir dann auch dementsprechend kleine Lösungen finden müssen. Das nimmt die Komplexität aus dem Thema und reduzierte Komplexität führt in den meisten Fällen zu besseren und zuverlässigeren Lösungen. Das erinnert stark an das, was wir oben über Unit-Tests besprochen haben.</p><p>Jetzt sind 90 Sekunden allerdings tatsächlich ziemlich knapp für die Vorstellung, in dieser Zeit aus dem Nichts einen vollständigen lauffähigen Unit Test und die dazu passende Implementierung zu schreiben und dann noch beides hübsch zu machen. Selbst dann, wenn wir uns nur ein sehr, sehr kleines Problem vornehmen wollen.</p><p>Deswegen dürfen wir verstehen, dass ein Durchlauf des Zyklus nicht bedeutet, dass danach schon alles fertig läuft. Ein Stück Software zu schreiben, auch wenn es nur ein sehr kleines Stück ist, erfordert viele Durchläufe des TDD-Zyklus. </p><p>Wie kann ich mir das jetzt vorstellen? Nun, das erste Testtool, das uns zur Verfügung steht, ist der Compiler. In den meisten modernen IDEs ist der bereits fest eingebunden und läuft im Hintergrund los, sobald wir Code eingeben. Und gibt uns umgehend Feedback darüber, ob wir zumindest aus Sicht des Compilers lauffähigen Sourcecode erzeugt haben oder nicht.</p><p>Nehmen wir an, wir wollen in Java z.B. mit Eclipse eine Klasse Rechner und in dieser eine Methode addieren erstellen.</p><p>Als erstes generieren wir z.B. eine JUnit Testklasse TestRechner und in dieser den Testfall TestAddierenEinfach. Und in diesem Testfall erzeugen wir uns eine Instanz von Rechner mit</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-068401d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="068401d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a7f29c3" data-id="a7f29c3" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1930a21 elementor-widget elementor-widget-image" data-id="1930a21" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="163" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-1024x208.png" class="attachment-large size-large wp-image-5382" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-1024x208.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-300x61.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-768x156.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-1536x313.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/07_Codebeispiel-Compilerfeedback-2048x417.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-779d85b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="779d85b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8e47e62" data-id="8e47e62" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-264175b elementor-widget elementor-widget-text-editor" data-id="264175b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Dumm nur, dass es die Klasse Rechner noch nicht gibt und der Compiler uns dementsprechend Feedback gibt. Das ist unser erster Testlauf und er schlägt fehl. Also implementieren wir jetzt so lange, bis der Test durchläuft, der Compiler zufrieden ist. Bedeutet in diesem Fall, wir implementieren eine leere Klasse Rechner. Das können wir bequem von der IDE erledigen lassen und bekommen dann zum Beispiel dieses hier als Ergebnis:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c761bd7 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c761bd7" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6e10ad7" data-id="6e10ad7" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-bc55d29 elementor-widget elementor-widget-image" data-id="bc55d29" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="79" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-1024x101.png" class="attachment-large size-large wp-image-5386" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-1024x101.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-300x30.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-768x76.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-1536x152.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/08_Codebeispiel-Class-Rechner-leer-2048x202.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8f97d89 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8f97d89" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7df18b2" data-id="7df18b2" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-30ece58 elementor-widget elementor-widget-text-editor" data-id="30ece58" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Zu refakturieren gibt es hier noch nicht viel, also ist der erste Durchlauf durch den Zyklus erledigt. Problemlos innerhalb von 90 Sekunden. Zugegeben, viel bekommen haben wir noch nicht. Aber jetzt geht es ja weiter.</p><p>Nun wollen im Test die Methode addieren mit den ganzen Zahlen 3 und 5 aufrufen und das Ergebnis in einer Variablen aufnehmen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-42a5c19 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="42a5c19" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6a12d48" data-id="6a12d48" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-34b9783 elementor-widget elementor-widget-image" data-id="34b9783" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="205" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-1024x262.png" class="attachment-large size-large wp-image-5387" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-1024x262.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-300x77.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-768x196.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-1536x393.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/09_Codebeispiel-TestRechner-mit-Addieren-2048x524.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-16412c0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="16412c0" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8eb6777" data-id="8eb6777" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-3c20914 elementor-widget elementor-widget-text-editor" data-id="3c20914" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Auch hier bekommen wir unverzüglich Feedback vom Compiler, unserem ersten Testtool, er kennt die Methode addieren nicht. Also tun wir ihm den Gefallen und erzeugen sie, und am besten überlassen wir auch das wieder der IDE.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-086f5b9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="086f5b9" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5afd6c5" data-id="5afd6c5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-e284336 elementor-widget elementor-widget-image" data-id="e284336" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="121" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-1024x155.png" class="attachment-large size-large wp-image-5391" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-1024x155.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-300x45.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-768x116.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-1536x232.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/10_Codebeispiel-Class-Rechner-retrun0-2048x310.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-86a3e0a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="86a3e0a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-12a8c4f" data-id="12a8c4f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0477a92 elementor-widget elementor-widget-text-editor" data-id="0477a92" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Compiler ist glücklich und der Testlauf damit bestanden, allerdings hätten wir diesmal durchaus ein paar Punkte, die wir bezüglich Lesbarkeit und Wartbarkeit verbessern können. Zum Beispiel ist die Benennung der Parameter in der Implementierung nicht so toll und wir verändern sie entsprechend:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-11433ca elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="11433ca" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8f65de1" data-id="8f65de1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-bf7b1c5 elementor-widget elementor-widget-image" data-id="bf7b1c5" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="121" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-1024x155.png" class="attachment-large size-large wp-image-5395" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-1024x155.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-300x45.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-768x116.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-1536x232.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/11_Codebeispiel-Class-Rechner-retrun0-refaktored-2048x310.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-46b0b71 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="46b0b71" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1120d8d" data-id="1120d8d" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-05c98ea elementor-widget elementor-widget-text-editor" data-id="05c98ea" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Und auch im Testfall wollen wir vielleicht die konkrete Festlegung der Testwerte aus dem eigentlichen Aufruf herausziehen:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-bc8628d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="bc8628d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31a3b2b" data-id="31a3b2b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-128da11 elementor-widget elementor-widget-image" data-id="128da11" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="267" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-1024x342.png" class="attachment-large size-large wp-image-5396" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-1024x342.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-300x100.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-768x257.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-1536x513.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/12_Codebeispiel-TestRechner-mit-Addieren-refaktured-2048x684.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-3debc46 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="3debc46" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ce2aa3f" data-id="ce2aa3f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-d4bc2a4 elementor-widget elementor-widget-text-editor" data-id="d4bc2a4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Schon sieht das Ganze deutlich zukunftsträchtiger aus. Wenn wir uns an die AAA-Regel erinnern, wir haben nun Arrange und Act, fehlt noch Assert:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7e9ea33 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7e9ea33" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fecfe5f" data-id="fecfe5f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-8a30bdc elementor-widget elementor-widget-image" data-id="8a30bdc" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="309" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-1024x396.png" class="attachment-large size-large wp-image-5397" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-1024x396.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-300x116.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-768x297.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-1536x594.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/13_Codebeispiel-TestRechner-mit-Assertion-2048x792.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-de34457 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="de34457" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-37dfb60" data-id="37dfb60" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-923752f elementor-widget elementor-widget-text-editor" data-id="923752f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Da der Compiler in diesem Fall nichts zu bemängeln hat, besteht der Test ab jetzt auch darin, den JUnit Test laufen zu lassen. Und der schlägt nun natürlich fehl, weil unsere aktuelle Implementierung stur 0 zurückgibt. Also implementieren wir nun soweit, dass unser Test grün läuft. In diesem Beispiel ist das ziemlich einfach:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-010db6e elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="010db6e" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8728b31" data-id="8728b31" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-38684da elementor-widget elementor-widget-image" data-id="38684da" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="121" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-1024x155.png" class="attachment-large size-large wp-image-5398" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-1024x155.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-300x45.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-768x116.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-1536x232.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/14_Codebeispiel-Class-Rechner-mit-Implementierung-2048x310.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5437602 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5437602" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-91e773a" data-id="91e773a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-ebcce45 elementor-widget elementor-widget-text-editor" data-id="ebcce45" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Test neu laufen lassen und nun läuft er erfolgreich durch. Jetzt noch wieder den letzten Schritt des TDD-Zyklus, das Aufräumen. Die Implementierung sieht ok für uns aus, allerdings am Testfall ist noch was zu verbessern. Ähnlich wie bei den Summanden kann auch der Vergleichswert der Summe, der im Assert verwendet wird, in eine eigene Variable ausgelagert werden:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-d81cfef elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d81cfef" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-72dca83" data-id="72dca83" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-33c3536 elementor-widget elementor-widget-image" data-id="33c3536" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="330" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-1024x423.png" class="attachment-large size-large wp-image-5399" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-1024x423.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-300x124.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-768x317.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-1536x634.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/15_Codebeispiel-TestRechner-mit-Assertion-refaktored-2048x846.png 2048w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7ef265a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7ef265a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-db25dbc" data-id="db25dbc" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5a3dcdf elementor-widget elementor-widget-text-editor" data-id="5a3dcdf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wir haben jetzt in kurzen Zyklen eine Methode geschrieben, bei der wir jederzeit wiederholbar beweisen können, dass sie korrekt 3 und 5 addieren kann. Jetzt können wir in weiteren Zyklen erst mal sicherstellen, dass andere gültige Konstellationen funktionieren. Oder prüfen, wie die aktuelle Methode mit extremen Eingabewerten umgeht und das Verhalten der Methode dann entsprechend erweitern. Was passiert zum Beispiel, wenn wir 2147483647 und 1 addieren wollen. Das übersteigt den Wertebereich von int und wird zu unerwünschten Ergebnissen führen. Was uns der Test schnell zeigt und uns die Möglichkeit gibt, dass zu lösen.</p><p>Das war jetzt kein besonders schwieriges Beispiel, es zeigt jedoch sehr gut, wie in sehr kurzen Zyklen testgetrieben eine Lösung entwickelt werden kann. Es wird deutlich, dass jeder dieser Schritte mit etwas Übung innerhalb von 90 Sekunden realisiert werden kann.</p><p>Jetzt könnten wir allerdings mit diesem Verfahren fast unbegrenzt lange fortfahren und erst nach Stunden den ersten wirklich lauffähigen Test vorweisen. Was aber auch nicht der Sinn der Sache ist, denn erst wenn wir erste wirklich lauffähige Tests haben, sehen wir, dass wir auch etwas mit Wert schaffen. Also ergänzen wir unsere 90 Sekundenregel noch um eine 10 Minutenregel. Ziel ist, innerhalb von maximal 10 Minuten einen ersten/weiteren lauffähigen Test zu haben. Oder anders formuliert, wir wollen innerhalb von 10 Minuten einen durch Tests abgesicherten Mehrwert schaffen.</p><p>Damit sind wir wieder beim Fokus auf kleine Einheiten mit simplen Lösungen.</p><p>Wir sind jetzt soweit, dass wir durch Unit Test getrieben unsere Software schreiben. Oder zumindest die vielen kleinen technischen Komponenten. Das ist schon super. Aber ein Softwareprodukt besteht aus mehr nur kleinen technischen Komponenten, es besteht auch aus mehr oder weniger großen Zusammenhängen. Und genauso besteht eine gute Testabdeckung aus mehr als nur Unit Tests.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-4bf5eb3a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4bf5eb3a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-68b078c5" data-id="68b078c5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-164f5676 elementor-widget elementor-widget-heading" data-id="164f5676" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Schritt Sechs: Die Testpyramide aufbauen</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-db813e9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="db813e9" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9af0111" data-id="9af0111" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-322e56e elementor-widget elementor-widget-text-editor" data-id="322e56e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Die drängende Frage lautet nun also: Kann ich mit Test Driven Development jetzt also nur Unit Tests schreiben? Das wäre ja nicht so günstig, denn wir wollen ja nicht nur die einzelnen, voneinander unabhängigen Aspekte unserer Komponenten testen, wir wollen auch sicherstellen, dass alles korrekt zusammen funktioniert. </p><p>Auch das kann ich testgetrieben machen. Nachdem ich z.B. durch Unit Tests getrieben zwei kleine Aspekte implementiert habe, schreibe ich einen Test, der das Zusammenspiel der beiden Aspekte testet. Anschließend implementiere ich dieses Zusammenspiel. Zu beachten ist dabei, dass ich in diesem ‚Integrationstest‘ jetzt nicht mehr die grundsätzliche Funktion der jeweiligen einzelnen Units testen muss, sondern wirklich nur noch das Zusammenspiel.</p><p>Auf diese Art und Weise können wir uns nun die Testpyramide hocharbeiten. Wie bei einer echten Pyramide legen wir immer erst unten Steine hin, bevor wir die Steine der nächsten Ebene setzen. Das Bedeutet im Bereich des Testens von Software: </p><ul><li>Erst ein paar Unit Tests</li><li>dann die Modultests, die die getesteten Units verbinden</li><li>dann die Komponententests, die z.B. die bereits getesteten Module verbinden</li><li>dann evtl. schon der Integrationstest, bei dem unser bereits erstelltes und bis dorthin getestetes Stück Software jetzt mit Drittsystemkomponenten zusammen getestet wird </li><li>und dann weiter bis hin zum End-to-End-Test oder Akzeptanztest.</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-027336f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="027336f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d45e2e1" data-id="d45e2e1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-23541be elementor-widget elementor-widget-text-editor" data-id="23541be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Dabei haben wir jetzt mit Ausnahme des Unit Tests die Begriffe der Teststufen nach unserem Ermessen gewählt.</p><p>Wie die jeweiligen Teststufen in Ihrem Unternehmen benannt werden, ist auch weiterhin Ihre Entscheidung.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-855baae elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="855baae" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31a1752" data-id="31a1752" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5170722 elementor-widget elementor-widget-image" data-id="5170722" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="709" height="166" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/16_Testebenen-und-deren-Scope.png" class="attachment-large size-large wp-image-5412" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/16_Testebenen-und-deren-Scope.png 709w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/16_Testebenen-und-deren-Scope-300x70.png 300w" sizes="(max-width: 709px) 100vw, 709px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-54c8a3b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="54c8a3b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e852bc2" data-id="e852bc2" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-b337321 elementor-widget elementor-widget-text-editor" data-id="b337321" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Nur zur Wiederholung nochmal: Auch bei den Teststufen oberhalb der Unit Tests schreiben wir immer zuerst den Test und erst dann Implementieren wir den Sourcecode, der bereits getestete Einheiten zu einem größeren Ganzen zusammenfügt.</p><p>Ein einfaches Beispiel: Wir haben testgetrieben bereits eine sum Methode geschrieben, die zwei ganze Zahlen entgegennimmt und diese aufaddiert zurückgibt. Durch Unit Tests haben wir ausgiebig sichergestellt, dass das auch funktioniert. Auch haben wir bereits eine checksum Methode geschrieben, der wir eine ganze Zahl übergeben können und von dieser die Quersumme zurückbekommen. Auch das ist hinreichend durch Unit Tests sichergestellt. Nun wollen wir einen Handler schreiben, der zwei ganze Zahlen übergeben bekommt, sich diese durch die bereits vorhandenen Methode sum aufaddieren und das Ergebnis davon von checksum bearbeiten lässt.</p><p>Alles, was der Handler braucht, um sicherzustellen, dass er auch wirklich zwei ganze Zahlen bekommen hat, stellen wir durch Unit Tests sicher, denn das ist vermutlich eine neu zu erstellende Funktionalität. Wenn wir jetzt jedoch die Tests für den Ablauf „zwei ganze Zahlen durch sum aufaddieren und dann durch checksum bearbeiten lassen“ schreiben, dann müssen wir nun nicht mehr in diesem Test sicherstellen, dass sum oder checksum wirklich mit allen möglichen Eingaben klarkommen und die Ergebnisse wirklich stimmen. Das haben wir bereits in den entsprechenden Unit Tests sichergestellt.</p><p>Der Prozess des Test Driven Development führt uns auf diese Art von unten nach oben durch die verschiedenen Testebenen und wir wissen das wir mit dem Entwickeln fertig sind, wenn wir die Tests auf der obersten Ebene geschrieben haben und diese erfolgreich durchlaufen.</p><p>Warum nennen wir das Testpyramide, das sieht doch in der Abbildung oben gar nicht aus wie eine Pyramide? Dem können wir abhelfen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1dc1b6d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1dc1b6d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b800699" data-id="b800699" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-43df365 elementor-widget elementor-widget-image" data-id="43df365" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="709" height="148" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/17_Testfallverteilung-als-Testpyramide.png" class="attachment-large size-large wp-image-5416" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/17_Testfallverteilung-als-Testpyramide.png 709w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/17_Testfallverteilung-als-Testpyramide-300x63.png 300w" sizes="(max-width: 709px) 100vw, 709px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-60be244 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="60be244" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5678db8" data-id="5678db8" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6414d0a elementor-widget elementor-widget-text-editor" data-id="6414d0a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>In der ersten Abbildung haben wir den Scope der einzelnen Tests auf den verschiedenen Testebenen abgebildet. In der zweiten Graphik zeigen wir die typische Verteilung der Menge an Tests, die bei einer sauber umgesetzten Teststruktur entsteht.</p><p>Was auffällt ist, dass die Menge an Tests/Testfällen von unten nach oben hin abnimmt. Das ist das Ergebnis daraus, dass wir schon auf der Ebene der Unit Tests einen Großteil der Funktionalität mit Tests abdecken und dann von Ebene zu Ebene quasi nur noch den Mehrwert testen, der aus der Kombination kleinerer Einheiten entsteht.</p><p>Das hat direkt mehrere Vorteile:</p><p style="padding-left: 40px;">a. Da jeder Test nur noch einen begrenzten Scope hat, den es an Funktionalität wirklich sicherzustellen hat, sind alles Tests relativ klein, leicht verständlich und gut wartbar</p><p style="padding-left: 40px;">b. Je weiter oben in der Testhierarchie ein Test steht, umso schwieriger und aufwändiger ist es, Funktionalität weiter unten im System zu testen. Das ist das typische Problem von Black Box Tests. Je weiter unten in der Testhierarchie wir einen Test schreiben, umso einfacher ist es eine bestimmte technische Funktionalität testen zu können. Wir bewegen uns im Bereich der White Box Tests. Durch den Aufbau einer sauberen Testpyramide reduzieren oder vermeiden wir es sogar komplett die Notwendigkeit, von höheren Testebenen aus technische Detailfunktionen testen zu müssen, Tests auf höheren Ebenen sind damit einfacher (siehe Punkt a.)</p><p style="padding-left: 40px;">c. Wenn zu einem späteren Zeitpunkt sich Verhalten im System unerwünscht ändert, also ein Fehler auftritt, dann zeigen uns die fehlschlagenden Tests in der Testpyramide konkret, an welcher Stelle das Verhalten des Systems nicht mehr stimmt. Bei der Fehleranalyse und Fehlerbehebung fangen wir dann immer mit den fehlschlagenden Tests auf der niedrigsten Ebene an. Die Fehleranalyse und Fehlerbehebung werden dadurch deutlich beschleunigt.</p><p>Diese Verteilung der Testfälle wird einige etwas überraschen, weil es sich nicht mit ihrer Erfahrung deckt. In vielen Unternehmen besteht die große Menge an Tests aus GUI-, Integrations- und Akzeptanztests. Und je weiter nach unten man in der Testhierarchie schaut, umso weniger Testfälle werden es. Wir reden hier auch von der sogenannten Eistüte.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-56a7046 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="56a7046" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a24a20b" data-id="a24a20b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7544741 elementor-widget elementor-widget-image" data-id="7544741" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="532" height="405" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/18_Testfallverteilung-als-Eistuete.png" class="attachment-large size-large wp-image-5420" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/18_Testfallverteilung-als-Eistuete.png 532w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/18_Testfallverteilung-als-Eistuete-300x228.png 300w" sizes="(max-width: 532px) 100vw, 532px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-46693bd elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="46693bd" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1bb00ff" data-id="1bb00ff" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-19aa008 elementor-widget elementor-widget-text-editor" data-id="19aa008" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Was in diesem Modell viele Projekte an die Grenzen oder sogar darüber hinausbringt ist, dass sehr viel auch der fundamentalsten technischen Basisfunktionalitäten über die oberste der Testebenen abgesichert werden muss. Wie wir gerade besprochen haben, ist genau das der ungünstigste, weil schwierigste und damit zeitaufwändigste Ort dafür. Die Konsequenz ist oft eine unzureichende Testabdeckung, weil das Schreiben dieser Tests in der notwendigen Menge zu aufwändig ist.</p><p>Nutzen Sie also lieber TDD und formen Sie Ihre Eistüte in eine Pyramide um.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-70de7c3b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="70de7c3b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4fcc3d12" data-id="4fcc3d12" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-2685e4f0 elementor-widget elementor-widget-heading" data-id="2685e4f0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Fazit</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5325d40 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5325d40" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9cc2ce5" data-id="9cc2ce5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0a052d8 elementor-widget elementor-widget-text-editor" data-id="0a052d8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Richtig verstanden und angewendet ist TDD ein sehr mächtiges Vorgehensmodell, um funktionierende Software auf einem sehr hohen Qualitätsniveau zu erstellen. Allerdings stellt TDD keine Abkürzung dar, mit der man mal so auf die Schnelle ein Stück Software aus dem Boden stanzen kann und dann läuft es schon. TDD setzt voraus, das von Anfang an kompromisslos auf Qualität gesetzt und damit die dafür notwendige Zeit investiert wird. Im Nachhinein kann auch TDD die Qualität einer Software nicht mehr retten.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7ed58fd9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7ed58fd9" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-6a259056" data-id="6a259056" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-1cd4896f" data-id="1cd4896f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4ec62b08 elementor-widget elementor-widget-text-editor" data-id="4ec62b08" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>„Qualität ist nicht verhandelbar“</p>								</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-23719dfc" data-id="23719dfc" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-10baf81 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="10baf81" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2a1e508" data-id="2a1e508" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-88af9b6 elementor-widget elementor-widget-text-editor" data-id="88af9b6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Den einen oder anderen Entscheider mag diese konsequente Investition in Qualität erst mal erschrecken, weil damit Quick-n-Dirty Schnellschüsse nicht mehr möglich sind. Aber sobald Sie TDD erst mal wirklich in Ihrem Unternehmen eingesetzt haben, werden Sie schnell merken, dass sich diese Investition doppelt und dreifach rechnet.</p><p>Was wir bekommen, ist eine Software, bei der von Anfang an die Funktionsfähigkeit bewiesen ist und die aufgrund des ständigen Refactorings während des Entwicklungsprozesses und der hohen Abdeckung durch automatisierte Tests jederzeit problemlos gewartet und weiterentwickelt werden kann.</p><p>Damit Sie allerdings das Beste aus TDD herausholen können, ist neben der guten Absicht auch eine gute Ausbildung Ihrer Softwareentwickler nicht nur im Umgang mit TDD, sondern auch in den Prinzipien guten Softwaredesigns sinnvoll.</p><p>Investieren Sie hier, um auch in Zukunft hervorragende Produkte zu bauen.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/04/25/test-driven-development-in-sechs-einfachen-schritten/">Test Driven Development in sechs einfachen Schritten</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schrödingers Katze im Projektmanagement</title>
		<link>https://stage-binaris-informatik.de/2023/04/24/schroedingers-katze-im-projektmanagement/</link>
		
		<dc:creator><![CDATA[Carsten Czeczine]]></dc:creator>
		<pubDate>Mon, 24 Apr 2023 09:46:49 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=5244</guid>

					<description><![CDATA[<p>… oder, wie geht es eigentlich meinem Projekt? Wenn wir ein großes Projekt durchführen wollen, dann wissen wir, dass es zu Abweichungen vom Projektplan kommen kann. Und niemand von uns mag es, erst am Ende des Projektes diese Abweichungen zu entdecken oder festzustellen, dass das Projekt ein Fehlschlag war. Deutlich angenehmer ist es für uns, [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/04/24/schroedingers-katze-im-projektmanagement/">Schrödingers Katze im Projektmanagement</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="5244" class="elementor elementor-5244" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-c1b85ef elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c1b85ef" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-331f4a22" data-id="331f4a22" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-30a63388 elementor-widget elementor-widget-text-editor" data-id="30a63388" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>… oder, wie geht es eigentlich meinem Projekt?</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-922e95d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="922e95d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bee0a89" data-id="bee0a89" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-138c6a7 elementor-widget elementor-widget-text-editor" data-id="138c6a7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wenn wir ein großes Projekt durchführen wollen, dann wissen wir, dass es zu Abweichungen vom Projektplan kommen kann. Und niemand von uns mag es, erst am Ende des Projektes diese Abweichungen zu entdecken oder festzustellen, dass das Projekt ein Fehlschlag war. Deutlich angenehmer ist es für uns, von diesen Abweichungen früher zu erfahren, denn dann können wir darauf reagieren und das Projekt immer noch zum Erfolg führen. Diese Erkenntnis ist nun nicht neu im Projektmanagement und Generationen von Projektmanagern vor uns haben sich schon mit der Fortschrittskontrolle von Projekten beschäftig und dafür entsprechende Instrumente entwickelt. Und dennoch werden in vielen Projekten gravierende Probleme und Hindernisse erst in der Schlussphase entdeckt und führen dann oft zum Scheitern des Projektes oder zu unerwarteten Verzögerungen. Wie kann das sein?</p><p>1935 schlug der Physiker Erwin Schrödinger ein faszinierendes <a href="https://de.wikipedia.org/wiki/Schr%C3%B6dingers_Katze" target="_blank" rel="noopener">Gedankenexperiment</a> vor. In eine undurchsichtige Stahlkammer wird eine Katze zusammen mit einer winzigen Menge einer radioaktiven Substanz, einem Geiger‘schen Zählrohr und einem Kolben Blausäure eingesperrt. Bei der radioaktiven Substanz besteht eine 50 prozentige Chance, dass innerhalb einer Stunde eines der Atome zerfällt, was von dem Geiger‘schen Zählrohr gemessen werden kann. Und in diesem Falle würde das Zertrümmern des Kolbens mit der Blausäure durch einen Hammer auslösen werden mit dem Ergebnis, dass die Katze stirbt.</p><p>Dann wird eine Stunde gewartet und erst nach Ablauf dieser Stunde nachgesehen, ob die Katze noch lebt oder Tod ist.</p><p>Da nur eine 50 prozentige Chance besteht, dass eines der Atome zerfällt, existiert die Katze in der Wahrnehmung der Außenwelt  in dieser Stunde gleichzeitig in zwei sich wiedersprechenden Zuständen: </p><ul><li>Sie ist tot </li><li>und sie ist lebendig (und vermutlich ziemlich verärgert).</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-fd819a3 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="fd819a3" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a5e270a" data-id="a5e270a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1ae4b88 elementor-widget elementor-widget-text-editor" data-id="1ae4b88" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Erst wenn wir nach Ablauf der Stunde die Stahlkammer öffnen und nachsehen, wird einer der beiden Zustände real und der andere verliert seine Bedeutung. Die Quantenphysiker sagen wir auch, mit der Messung kollabiert das System der überlagernden Zustände.</p><p>Was hat das nun mit Projektmanagement zu tun?</p><p>Bei der Durchführung von Projekten werden wir sehr oft mit Faktoren konfrontiert, die im Vorfeld nicht bekannt oder nicht genau vorhersagbar waren. Um derartige Projekte dennoch erfolgreich durchführen zu können ist der Einsatz von sinnvollem Projektcontrolling und erfolgreicher Projektsteuerung notwendig. Beides lebt davon, den aktuellen Zustand eines Projektes korrekt ermitteln zu können. Und hier fängt nun oft das Problem an. Die Wurzel unseres Problems liegt oft in der Art, wie wir klassisch Projekte planen. </p><p><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">Bevor wir mit der Umsetzung anfangen: </span></p><ol><li>Sammeln wir alle Anforderungen an das zu erstellende Ergebnis</li><li>Erstellen wir daraus ein detailliertes fachliches Konzept</li><li>Erzeugen wir basierend auf dem fachlichen Konzept ein detailliertes und vollständiges technisches Konzept</li><li>Leiten wir aus dem technischen Konzept alle notwendigen Tätigkeiten ab</li><li>Erstellen wir den Projektplan, der genau festlegt, wer bis wann was tun wird</li></ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-f2267ab elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="f2267ab" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5741495" data-id="5741495" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-eed3ea9 elementor-widget elementor-widget-text-editor" data-id="eed3ea9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das Ergebnis ist quasi die vollständige Beschreibung des Lösungswegs. Die Fortschrittskontrolle findet dann oft als Abgleich zwischen Tätigkeiten, die bis jetzt hätten fertig sein sollen und Tätigkeiten, die bis jetzt tatsächlich geleistet wurden statt. Wir messen den Projektfortschritt also auf der Basis geleisteter Arbeit verglichen mit geplanter Arbeit. Klingt erst mal logisch.</p>
<p>Der Irrtum dieses Verfahrens liegt in der Annahme, dass der Projektplan vollständig und seine Umsetzung fehlerfrei ist. Und wird damit daraus geschlussfolgert, dass das Befolgen des Projektplans automatisch zum gewünschten Projektergebnis führen muss.</p>
<p>Um herauszufinden, ob der Projektplan tatsächlich vollständig war und wir mit ihm damit auch das vollständige und Funktionierende Ergebnis erzeugt haben, dass gewünscht war, ist jedoch nur durch eine realistische Überprüfung genau dieser Ergebnisse möglich. In der klassischen Projektplanung findet dies zumeist erst zum Ende des Projektes statt und da kann das Erwachen dann sehr schmerzhaft sein. Wir finden dann erst in der Schlussphase des Projektes heraus, dass das Produkt eventuell nicht fertig ist oder nicht funktioniert. Und das, obwohl doch alle geplanten Tätigkeiten durchgeführt wurden. Jetzt noch das Projekt innerhalb von Time und Budget zu retten, ist schier unmöglich.</p>
<p>Der Grund für diese späte Erkenntnis ist, dass wir das Falsche messen. Wir messen die Menge an geleisteter Arbeit und vergleichen das mit der Menge an Arbeit, von der wir glauben, dass sie notwendig ist. Was wir nicht messen, ist das erzielte Ergebnis. Und mit Ergebnis meine ich das, was uns wirklich interessiert: Das fertige, funktionsfähige und benutzbare Produkt[JH9]. Dadurch, dass wir in diesem Szenario nur die Ausführung der Aufgaben, aber nicht den Zustand des Ergebnisses überprüfen, verbleibt unser Projekt während seiner Laufzeit trotz einer regelmäßigen scheinbaren Messung in einem überlagerten Zustand: Es ist gleichzeitig ein voller Erfolg (wir führen erfolgreich die geplanten Aufgaben durch) und ein totaler Misserfolg (wir wissen nicht, ob am Ende des gewünschte Ergebnis herauskommen wird). Im Bild von Schrödingers Katze wäre das so, als würden wir den Zustand der Katze rein durch das Verstreichen der Zeit bestimmen wollen, ohne dabei die Tür der Stahlkammer zu öffnen.</p>
<p>Wenn wir ein Projekt realistisch bewerten wollen, dann stellt sich zuerst die Frage nach dem erzielten Ergebnis, also was kann das erzeugte Produkt. Dicht gefolgt von der Frage nach den Kosten. Niemand wird uns aufrichtig für unseren unermüdlichen Arbeitseinsatz und die vielen geleisteten Stunden danken, wenn das Ergebnis nicht stimmt. Was unsere Kunden an erster Stelle interessiert ist, ob das Produkt fertig ist, wie gewünscht funktioniert und was es gekostet hat!</p>
<p>Wie können wir dieses Problem der falschen Fortschrittsmessung lösen? Nur indem wir in kurzen Abständen die Tür zur Stahlkammer öffnen und uns vom tatsächlichen Zustand der Katze überzeugen. Wir lassen das System der überlagernden Zustände durch die konkrete Messung kollabieren. Im Projektmanagement bedeutet das, dass wir uns in kurzen Abständen die tatsächlich erzielten Ergebnisse ansehen.</p>
<p>Das agile Framework Scrum zeigt, wie das funktionieren kann. In Scrum werden innerhalb kurzer Iterationen von maximal vier Wochen Länge sogenannte benutzbare Produktinkremente erzeugt. Das bedeutet, es werden immer vollständige Funktionalitäten erstellt, und zwar in finaler Marktqualität. Finale Marktqualität meint in diesem Kontext, dass innerhalb der Iteration alle notwendigen Tätigkeiten durchgeführt werden, um diese Funktionalität ausliefern zu können. Bei den meisten Softwareprodukten würde das z.B. das vollständige Testen, Vorbereitung von Build und Deployment und die Erstellung von Dokumentation mit einschließen. Das Ziel ist, dass eine Funktionalität am Ende einer Iteration wirklich fertig ist und keine versteckten Restaufwände mehr für diese Funktionalität existieren. Welche Ansprüche genau ein Produktinkrement erfüllen muss, damit es als benutzbar gilt, definieren wir in einer sogenannten Definition of Done.</p>
<p>Was sind jetzt versteckte Restaufwände? Versteckte Restaufwände sind alle die Tätigkeiten, die wir ungeplant zu einem späteren Zeitpunkt durchführen müssen, damit die Funktion wirklich produktiv funktioniert. Wir stellen zum Beispiel in der Test- oder Abnahmephase unseres Projektes fest, das eine Funktionalität nicht ordnungsgemäß funktioniert. Oder in unseren Entwicklungs- und Testumgebungen hat sie funktioniert, aber nach dem Deployment in der produktiven Endumgebung tut sie es nicht mehr. Und jetzt müssen wir das natürlich nachbessern. Für Nachbesserungen in der Test- oder Abnahmephase hatten wir initial vielleicht noch genügend Puffer eingeplant, sodass es noch passt. Vielleicht aber auch nicht. Bei Nachbesserungen in der produktiven Endumgebung liegen wir eindeutig außerhalb des Plans. Diese zusätzlichen Aufwände, die so nicht geplant waren sind es, was uns am Ende eines Projektes die Kopfschmerzen bereiten.</p>
<p>Wenn wir mit Scrum arbeiten. dann bewerten wir am Ende jeder Iteration, welche Funktionalitäten wirklich fertig sind und welche nicht. Wir bekommen damit einen realistischen Überblick über den Zustand unseres Projektes und eine realistische Information darüber, wie schnell wir tatsächlich sind.</p>
<p>Auf diese neue Art der Bewertung umzusteigen führt in vielen Projekten jedoch erst mal zur Ernüchterung. Plötzlich liegt Schwarz auf Weiß der Nachweis vor, dass die ursprünglichen Erwartungen mehr oder weniger zu optimistisch waren. Dieses Phänomen ist so normal, dass es sogar in der Psychologie Beachtung gefunden hat und dort als&nbsp;<a href="https://de.wikipedia.org/wiki/Planungsfehlschluss" target="_blank">planning fallacy</a>&nbsp;beschrieben wird. Gerne wird nun die überraschend geringe Entwicklungsgeschwindigkeit erst Mal dem Mehraufwand durch das direkte Testen zugeschrieben. Ich habe dann leider schon mehrmals erlebt, dass dann als Reaktion darauf das direkte Testen gestrichen und die Überprüfung wieder auf eine spätere Testphase verschoben wird. Denn gefühlt scheint es wichtiger zu sein, erst Mal möglichst viele Funktionalitäten zu erstellen und das gebündelte Testen und Korrigieren in dieser Phase wäre dann effizienter. Doch das ist purer Selbstbetrug. Den Aufwand zum Testen und Nachbessern müssen Sie so oder so betreiben. Je weiter Sie ihn aber nach hinten verschieben, desto mehr erhöhen Sie das Risiko eines Projektfehlschlages, da Sie nicht abschätzen können, wieviel Aufwand Testen und Korrigieren bedeuten wird und Ihnen damit möglicherweise am Ende die Zeit davonläuft, ein funktionierendes Produkt vorweisen zu können. Im schlimmsten Fall haben Sie am Ende ihres Budgets zwar viele Funktionalitäten erstellt, aber keine davon funktioniert wie gewünscht.</p>
<p>Wenn wir das Risiko in Projekten reduzieren wollen, dann müssen wir uns auftretenden Problemen stellen, sobald sie auftreten. Meine Lieblingsfrage, die ich Projekt- und Produktmanagern immer wieder gerne stelle, ist: „Wann möchten Sie wissen, dass Sie ein Problem in Ihrem Projekt haben?“ Und die für mich einzige sinnvolle Antwort darauf lautet: „So früh wie möglich!“&nbsp;</p>
<p>Je früher wir im Projekt wissen, dass wir ein Problem haben, umso mehr Optionen haben wir noch, dieses Problem zu lösen und das Projekt so erfolgreich zu Ende zu führen.</p>
<p>„Ja, aber bei uns ist es nicht möglich innerhalb von vier Wochen eine ganze Funktionalität zu realisieren“. Ist das wirklich so? In der Tat gibt es sehr vereinzelte Themenkomplexe, in denen Kernfunktionalitäten nicht so weit reduzierbar oder sinnvoll zerlegbar sind, dass sie innerhalb von vier Wochen umgesetzt werden können. Aber das ist bei weitem nicht so oft der Fall, wie es uns viele Projektmanager oder Produktverantwortliche glauben machen wollen. Denken Sie selbst mal darüber nach, könnte es genau diese Sichtweise von zu großen Funktionalitäten sein, die die Entwicklung Ihrer Produkte so komplex und herausfordernd macht?</p>
<p>Ein anderer gerne genommener Einwand ist: „Wir können nicht innerhalb von vier Wochen etwas entwickeln und vollständig testen. Unsere Tests sind dafür viel zu aufwendig.“&nbsp;</p>
<p>Hier müssen wir genau hinsehen, worin das Problem besteht. Ja, in einigen Kontexten sind die Tests und anderen Abnahmeverfahren aufgrund der Thematik ans sich tatsächlich, selbst bei bester Organisation, nicht in einem derart kurzen Zeitraum machbar. In den meisten Fällen liegt die Ursache für das Problem jedoch in der Struktur und Arbeitsweise der Organisation und nicht in der Thematik an sich. Vor allem in der Softwareentwicklung gibt es inzwischen eine Reihe von Ansätzen, über die das Testen deutlich leichtgewichtiger wird. Diese Ansätze setzen jedoch entsprechende Schulungen und oft auch Investitionen in Infrastruktur voraus und haben meistens auch Einfluss auf das Design der Lösungen, die in den Projekten entwickelt werden. In späteren Artikeln werden wir auf ein paar dieser Ansätze eingehen.</p>
<p>Es ist also in der Regel schon machbar, allerdings bedeutet es in vielen Fällen Investitionen in Knowhow und Infrastruktur und die Bereitschaft, alte Sichtweisen über Bord zu werfen.</p>
<p>Was wir also sehen ist, dass es für die Umstellung von Projekten auf ein realistischen Bewertungs- und Messverfahren in kurzen Intervallen nicht einfach mit dem Beschluss getan ist, sich alle vier Wochen die Ergebnisse ansehen zu wollen. Tatsächlich ist es dazu notwendig, den gesamten Prozess, wie Produkte und Projekte geplant, entwickelt und getestet werden unter die Lupe zu nehmen und auf das Ziel der stückweisen Abnahme in kleinen Inkrementen umzustellen. Eine Anstrengung, die sich jedoch immer lohnt, denn sie führt zu einem Unternehmen, das zukünftig in kürzerer Zeit die besseren Produkte in besserer Qualität entwickeln wird. Überlassen wir also Schrödingers Katze den Physikern und arbeiten lieber mit eindeutigen Zuständen.</p>
<p>In der Quantenphysik dient Schrödingers Katze als Parabel, um den quantenmechanischen Effekt der Zustandsüberlagerung zu veranschaulichen und führt dort zu neuen Erklärungsversuchen unserer Welt oder so faszinierenden Ideen, wie der Theorie unendlich vieler paralleler Universen. Im Projektmanagement dahingegen führt Schrödingers Katze zu Kopfschmerzen und zu manchmal scheinbar unendlicher Frustration.&nbsp;</p>
<p>Hier lässt sich Schrödingers Katze übrigens auch gut mit einer alten Weisheit der Dakota-Indianer kombinieren: Wenn dein Pferd tot ist, steig ab!</p>
<p>Diese Weisheit wird gerne im Kontext des Projektmanagements zitiert, um klarzumachen, dass gescheiterte Projekte losgelassen werden sollen. Aber wie wir oben schon gesehen haben, scheitern viele an der Frage, ob das Pferd denn wirklich schon tot ist.</p>
<p>So gesehen leiden viele Projekte sogar an Schrödingers Pferd!</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/04/24/schroedingers-katze-im-projektmanagement/">Schrödingers Katze im Projektmanagement</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Das Kano-Modell der Kundenzufriedenheit</title>
		<link>https://stage-binaris-informatik.de/2023/04/13/das-kano-modell-der-kundenzufriedenheit/</link>
		
		<dc:creator><![CDATA[Carsten Czeczine]]></dc:creator>
		<pubDate>Thu, 13 Apr 2023 09:44:36 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Anforderungsmanagement]]></category>
		<category><![CDATA[Kano Modell]]></category>
		<category><![CDATA[Product Backlog]]></category>
		<category><![CDATA[Produktmanagement]]></category>
		<category><![CDATA[Requirements]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=5194</guid>

					<description><![CDATA[<p>In dem Artikel&#160;Prioritäten von Anforderungen – Kategorie oder Reihenfolge&#160;hatte ich mehrfach Bezug auf das Kano-Modell der Kundenzufriedenheit genommen, ohne dieses dabei näher zu erklären. In diesem Artikel holen wir das nach. Die meisten von uns, die sich mit Produkt- oder Anforderungsmanagement auseinandersetzen, kennen das folgende Problem der Entscheidung: In welcher Reihenfolge sind Anforderungen umzusetzen bzw. [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/04/13/das-kano-modell-der-kundenzufriedenheit/">Das Kano-Modell der Kundenzufriedenheit</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="5194" class="elementor elementor-5194" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-4134f468 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4134f468" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4cd4c377" data-id="4cd4c377" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6f790f5d elementor-widget elementor-widget-text-editor" data-id="6f790f5d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>In dem Artikel <a href="https://stage-binaris-informatik.de/2023/04/05/prioritaeten-von-anforderungen-kategorie-oder-reihenfolge/" target="_blank" rel="noopener">Prioritäten von Anforderungen – Kategorie oder Reihenfolge</a> hatte ich mehrfach Bezug auf das Kano-Modell der Kundenzufriedenheit genommen, ohne dieses dabei näher zu erklären. In diesem Artikel holen wir das nach.</p><p>Die meisten von uns, die sich mit Produkt- oder Anforderungsmanagement auseinandersetzen, kennen das folgende Problem der Entscheidung: In welcher Reihenfolge sind Anforderungen umzusetzen bzw. welche sind überhaupt umzusetzen? <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );">Selten mangelt es an Anforderungen an das, was ein zu erstellendes Produkt alles können soll. Unzählige Interessenvertreter haben ihre eigenen Vorstellungen davon, was absolut unverzichtbar ist und damit auf jeden Fall umgesetzt werden muss. Und zwar immer als allererstes! </span></p><p>Das Kano-Modell versucht hierbei Licht ins Dunkel zu bringen und dem Entscheider ein Werkzeug an die Hand zu geben, um in diesem Wirrwarr die Streu vom Weizen zu trennen. Dadurch wird eine nachvollziehbare Grundlage für die Entscheidungen geschaffen, was umgesetzt wird und was eher nicht und in welcher Reihenfolge.</p><p>Damit ist jedoch auch klar, was das Kano-Modell nicht macht: Es unterstützt nicht bei der Erhebung der Anforderungen. Um diesen Pool an Anforderungen zu generieren, müssen vorher andere Techniken verwendet werden, auf die wir in diesem Artikel jedoch nicht eingehen wollen. <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Zur Entstehung des Modells möchte ich mich an dieser Stelle darauf beschränken, dass das </span><a href="https://de.wikipedia.org/wiki/Kano-Modell" target="_blank" rel="noopener">Kano-Modell</a><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> auf Prof. Dr. Noriaki Kano von der Universität Tokio zurückgeht.</span></p><p>Bevor wir in die Details des Kano-Modells einsteigen, klären wir erst noch kurz drei Definitionen.</p><p>Als erstes müssen wir festhalten, dass im Kano-Modell nicht von Anforderungen, sondern von Produktmerkmalen gesprochen wird. Anforderungen sollten sich in der Regel auf Produktmerkmale beziehen, d.h. sie „fordern an“, dass das Produkt ein bestimmtes Merkmal aufweist bzw. nicht aufweist. <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Ein Produktmerkmal selbst ist eine für den Kunden spürbare Eigenschaft des Produkts, also z.B., dass er sich anmelden kann. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Und unter Kunden verstehen wir hier den Personenkreis, der mit unserem neuen Produkt umgehen muss bzw. es kaufen soll.</span></p><p>Kommen wir jetzt zum Kano-Modell. Dort werden Produktmerkmale in fünf Kategorien aufgeteilt:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-9afc16f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9afc16f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ad8e98f" data-id="ad8e98f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7339c48 elementor-widget elementor-widget-text-editor" data-id="7339c48" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li><b>Basis-/Must-Have Merkmal:</b> Basismerkmale eines Produktes sind so grundlegend und selbstverständlich, dass sie dem Kunden erst bei Nichterfüllung bewusst werden. Werden sie aber nicht erfüllt, dann entsteht eine starke Unzufriedenheit. Umgekehrt entsteht aber bei Erfüllung nicht wirkliche Zufriedenheit. Ein Beispiel hierfür kann die Möglichkeit zur Anmeldung in einer Software sein. </li><li><b style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif;">Lineares-/Leistungsmerkmal: </b><span style="background-color: transparent; color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );">Lineare Merkmale sind dem Kunden durchaus bewusst und sie beseitigen Unzufriedenheit oder schaffen Zufriedenheit abhängig vom Ausmaß der Erfüllung. Die Bereitstellung linearer Merkmale wird von Kunden also bewusst mit Zufriedenheit belohnt. Ein Beispiel hierfür ist die Reaktionsgeschwindigkeit eines Softwareprodukts.</span></li><li><b>Begeisterungsmerkmal: </b>Begeisterungsmerkmal sind Nutzen stiftende Merkmale, mit denen der Kunde nicht unbedingt rechnet, also Merkmale, die dem Kunden einen überraschenden Mehrwert liefern. Sie zeichnen das Produkt gegenüber der Konkurrenz aus und rufen damit oft Begeisterung hervor. Eine kleine Leistungssteigerung kann zu einer überproportionalen Nutzenstiftung führen. Die Differenzierungen gegenüber der Konkurrenz können gering sein, die Nutzenstiftung aber dennoch enorm.</li><li><b>Unerhebliches Merkmal: </b>Sind sowohl bei Vorhandensein wie auch beim Fehlen ohne Belang für den Kunden. Sie können daher keine Zufriedenheit stiften, führen aber auch beim Fehlen nicht zu Unzufriedenheit.</li><li><b>Rückweisungsmerkmal: </b>Rückweisungsmerkmale führen beim Vorhandensein zu Unzufriedenheit, beim Fehlen jedoch nicht zu Zufriedenheit. Rückweisungsmerkmale sind häufig Merkmale, die nicht dem Kunden, sondern dem Hersteller oder Produktanbieter nutzen. Ein Beispiel hierfür wäre ein Kopierschutz oder das Sammeln von Kundendaten für Marketingzwecke.</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-9c55f99 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9c55f99" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-225a381" data-id="225a381" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-656659b elementor-widget elementor-widget-text-editor" data-id="656659b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Soweit so gut, wir habe jetzt also auf der einen Seite 5 Kategorien und auf der anderen eine große Liste voll mit Anforderungen. Aber wie ordne ich jetzt meine Anforderungen in diese fünf Kategorien ein?</p>
<p>Eine Möglichkeit wäre, dass ich als der Produktverantwortliche dieses anhand der Beschreibungen oben jetzt selbst mache. Dafür muss ich aber die zukünftigen Kunden und deren Bedürfnisse schon ziemlich genau kennen. Und die Wahrscheinlichkeit, dass ich dabei des Öfteren mal danebenliege, dürfte recht hoch sein.</p>
<p>Besser also, ich frage die potenziellen Kunden selbst, und zwar möglichst viele davon. Allerdings stellt sich auch hier die Frage, nach welchen Kriterien eine Anforderung einer der fünf Kategorien zuzuordnen ist. Die Beschreibungen oben sind verhältnismäßig dürftig und könnten von jedem etwas anders verstanden werden. Dadurch wird die Aufgabe der Zuordnung schnell eine recht anspruchsvolle und komplexe Tätigkeit.&nbsp;</p>
<p>Deshalb geht das Kano-Modell einen anderen Weg, den einer bipolaren Befragung. Jede:r Proband:in wird zu jedem Merkmal jeweils mit einer funktionalen und einer dysfunktionalen Frage konfrontiert. Oder verständlicher ausgedrückt: Er:sie soll zu jedem Merkmal mitteilen, wie er:sie es fände, wenn:</p>
<ul>
<li>es vorhanden ist&nbsp;</li>
<li>wenn es fehlt</li>
</ul>
<p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"><br></span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Als Antwortmöglichkeiten stehen ihr:m für beide Fragen&nbsp; zur Verfügung:&nbsp;</span><br></p>
<ul>
<li>Ich mag es genau so</li>
<li>Ich erwarte, dass es so ist</li>
<li>Mir egal</li>
<li>Ich kann damit leben</li>
<li>Das stört mich</li>
</ul>
<p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"><br></span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Super, jetzt habe ich pro Merkmal sogar zwei Antworten von einem Probanden, wie soll ich denn daraus jetzt zu meiner Kategorie kommen? Hier kommt die Magie des Kano-Modells ins Spiel, und zwar in Form der Antworten-Kategorien-Matrix.</span><br></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-1597269 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1597269" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-34906f0" data-id="34906f0" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0ebb8b2 elementor-widget elementor-widget-image" data-id="0ebb8b2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="509" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix-1024x651.png" class="attachment-large size-large wp-image-5212" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix-1024x651.png 1024w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix-300x191.png 300w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix-768x488.png 768w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix-1536x976.png 1536w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/KanoModellMatrix.png 1802w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-da0c31a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="da0c31a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-992a8f1" data-id="992a8f1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cd6e5d1 elementor-widget elementor-widget-text-editor" data-id="cd6e5d1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wir finden in dieser Matrix in den Schnittpunkten der möglichen Antworten auf die beiden Fragen alle unsere fünf Kategorien wieder plus zweimal eine unlogische Kombination. Bei den beiden unlogischen Antwortkonstellationen hat möglicherweise der:die Proband:in die  Fragestellungen nicht richtig verstanden. Entweder ignorieren wir das oder, wenn wir die Möglichkeit dazu haben, wir stellen die Frage nochmal und achten dabei auf das Verständnis der Fragestellungen.</p><p>Aus den Antworten auf die beiden Fragen einer:s Probanden:in kann nun die Kategorie einfach abgelesen werden. Jetzt befragen wir natürlich nicht nur einen Kunden, sondern pro Produktmerkmal fragen wir möglichst viele potenzielle Kunden und halten das Ergebnis in einer Tabelle fest. In der Tabelle unten habe ich ein Beispiel dafür erstellt.</p><p>Wir haben drei Merkmale befragt und die Verteilung der Zielkategorien der einzelnen Befragungen prozentual in einer Tabelle zusammengefasst.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7accaa5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7accaa5" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a0e41fe" data-id="a0e41fe" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-d4dcdf4 elementor-widget elementor-widget-image" data-id="d4dcdf4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="765" height="161" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/auswertungsbeispielkanomodell.png" class="attachment-large size-large wp-image-5216" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/auswertungsbeispielkanomodell.png 765w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/auswertungsbeispielkanomodell-300x63.png 300w" sizes="(max-width: 765px) 100vw, 765px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2c06d52 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2c06d52" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b5026b3" data-id="b5026b3" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0ae6c46 elementor-widget elementor-widget-text-editor" data-id="0ae6c46" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Bei dem Produktmerkmal 1 haben wir mit 43,8% eine eindeutige Spitze für lineares Merkmal, bei dem Produktmerkmal 2 mit 54,3% eine eindeutige Spitze für Basismerkmal. Beim Produktmerkmal 3 jedoch haben wir zwei Spitzen, einmal 36,6% für Basismerkmal und dann nochmal 39,1% für Begeisterungsmerkmal. </p><p>Dies kann darauf hindeuten, dass wir vielleicht zwei unterschiedliche Arten von Kunden für unser Produkt haben, die unterschiedliche Erwartung an unser Produkt hegen. Sinnvollerweise analysieren wir in diesem Fall, welche unterschiedlichen Kundenarten das sind und legen anschließend fest, auf welche von beiden Kundenarten wir den Fokus legen wollen.</p><p>Kommen wir zurück zu unserer Ausgangssituation: Wir sind ein armer Produktverantwortlicher und alle Interessenvertreter haben uns mit Unmengen an Anforderungen zugeschüttet. Wir haben aus (fast) all diesen Anforderungen Produktmerkmale extrahiert und diese durch das Kano-Modell in Kategorien eingeordnet. </p><p>Ist damit jetzt klar, welche Anforderungen bzw. Produktmerkmale umzusetzen sind und in welcher Reihenfolge?</p><p>Leider nicht so ganz. Fangen wir mit den einfachen Fällen an: Die Rückweisungsmerkmale und die unerheblichen Merkmale. </p><p>Das Kano-Modell priorisiert Produktmerkmale aus Sicht des Kunden und aus dieser Sicht sollte auf Rückweisungsmerkmale auf jeden Fall verzichtet und unerhebliche Merkmale sollten nur am Schluss umgesetzt werden, wenn noch Zeit und Geld da ist. Obwohl sie aus dieser Sicht eigentlich nur Resourcenverschwendung sind. Also besser auch nicht umsetzen.</p><p>Allerdings bestimmen ja nicht immer nur die Kundenwünsche die Notwendigkeiten für bestimmte Produktmerkmalen. Bevor diese Merkmale also tatsächlich komplett gefeuert werden, müssen wir erst noch prüfen, was die Intention zu diesen Merkmalen war. Bei gesetzlichen Vorgaben oder technischen Notwendigkeiten kann die Welt schon ganz anders aussehen. Aber wenn nichts dergleichen zutrifft, dann raus damit und lieber ein schlankes Produkt gestalten.</p><p>Kommen wir zu unserem Dreigestirn: Basis-, lineare und Begeisterungsmerkmale.</p><p>Mit Basismerkmalen gewinnt man keinen Blumentopf, wenn sie aber fehlen, floppt wahrscheinlich das ganze Produkt. Also müssen sie wohl rein. </p><p>Wie dringend sie rein müssen, also mit welcher Priorität verglichen mit den Linearen und Begeisterungsmerkmalen, hängt davon ab, wie ich die Releases auf den Markt bringe. Wenn ich klassisch im Wasserfall arbeite und vielleicht nur alle 12 Monate ein neues Release rausbringe (oder sogar noch seltener), dann müssen alle Basismerkmale bereits im ersten Release drin sein, denn die Kunden werden das Produkt so lange nicht akzeptieren, wie die Basismerkmale nicht enthalten sind oder mit der baldigen Nachlieferung zu rechnen ist. </p><p>Wenn ich dahingegen in wesentlich kürzeren Zeitabständen meine Releases ausliefere, z.B. jeden Monat oder alle zwei und dieses auch entsprechend kommuniziere, dann sind Kunden schon eher geneigt, dass Fehlen von Basismerkmalen für kurze Zeit in Kauf zu nehmen.</p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Natürlich muss das, was ich ausliefere, immer in sich funktionsfähig sein, alles andere wäre ja völliger Unsinn. Aber anstatt für den gesamten geplanten Funktionsumfang des Produktes erst mal nur die Basismerkmale zu erstellen und auszuliefern und dem Kunden damit ein „ist ja ganz nett“ zu entlocken, fokussiert man nur einen bestimmten Funktionsbereich. Diesem realisieren wir mit seinen notwendigen Basismerkmalen plus weiteren linearen und Begeisterungsmerkmalen. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Der Kunden gewinnt damit einen guten Eindruck dessen, was ihn nach und nach bei unserem Produkt erwarten wird und er kann evtl. auch mit der Teilfunktionalität schon Mehrwerte für sich erzielen.</span></p><p>Damit wäre das mit den Basismerkmalen schon mal geklärt. Aber wie gewichten wir lineare Merkmale gegenüber Begeisterungsmerkmalen?</p><p>Begeisterungsmerkmale sprechen oft ein sehr subjektives Empfinden gegenüber einem Produkt an und gewinnen in der Regel eher durch den Überraschungseffekt oder das Alleinstellungsmerkmal („das hat halt kein anderer so, deshalb ist es cool“). Beide Effekte nutzen sich aber mehr oder weniger schnell ab. Der Überraschungseffekt ebbt ab oder die Konkurrenz zieht nach.</p><p>Lineare Merkmale stellen dahingegen meist tatsächliche Wehrwerte des Produktes für den Kunden dar, die meistens auch auf Dauer erhalten bleiben. <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Rein ökonomisch gesehen wären deshalb die linearen Merkmale den Begeisterungsmerkmalen vorzuziehen. Unsere Kunden sind jedoch alle auch nur Menschen und die Begeisterungsmerkmale sind es, die dann doch oft die Kaufentscheidung oder die Akzeptanzbereitschaft für unser Produkt stark beeinflussen. So gesehen ist die Entscheidung für Begeisterungsmerkmale irgendwie auch ökonomisch. Zumindest für den, der das Produkt verkauft.</span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Im Endeffekt macht es die gesunde Mischung aus. Ein Produkt nur mit linearen Merkmalen ist zwar wertvoll, aber unsexy. Ein Produkt nur mit Begeisterungsmerkmalen verleitet zwar zum schnellen Kauf, aber nicht zur Nutzung. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Ein guter Erfahrungswert ist, den Schwerpunkt auf lineare Merkmale zu setzen, damit der Kunden tatsächlich echten Mehrwert erhält und das mit einer Handvoll Begeisterungsmerkmale zu würzen, damit er sich auch für unser Produkt entscheidet bzw. die Nutzer das Produkt bereitwillig akzeptieren.</span></p><p>Ich hoffe, ich konnte ein bisschen Licht ins Dunkel bringen. Die Quintessenz ist, dass das Kano-Modell eine gute Unterstützung dabei anbietet, sich der Qualität von Anforderungen bewusst zu werden und sich aus der Vielzahl an Anforderungen auf die zu konzentrieren, die bei den Kunden gut ankommen werden. Es ist aber kein Mechanismus, in den ich oben einfach eine Liste an Anforderungen reinkippen kann und unten kommt dann die fertige Reihenfolge heraus. Der gesunde Menschenverstand der Produktverantwortlichen ist bei den Entscheidungen immer noch erforderlich. </p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7e47cef elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7e47cef" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a880d03" data-id="a880d03" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0a0db9b elementor-widget elementor-widget-text-editor" data-id="0a0db9b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Quellen:</p><ul><li>Agile Estimating and Planning, Mike Cohn, 2006</li><li>https://de.wikipedia.org/wiki/Kano-Modell</li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/04/13/das-kano-modell-der-kundenzufriedenheit/">Das Kano-Modell der Kundenzufriedenheit</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Prioritäten von Anforderungen –Kategorie oder Reihenfolge?</title>
		<link>https://stage-binaris-informatik.de/2023/04/05/prioritaeten-von-anforderungen-kategorie-oder-reihenfolge/</link>
		
		<dc:creator><![CDATA[Carsten Czeczine]]></dc:creator>
		<pubDate>Wed, 05 Apr 2023 14:25:08 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Anforderungsmanagement]]></category>
		<category><![CDATA[Product Backlog]]></category>
		<category><![CDATA[Produktmanagement]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=5078</guid>

					<description><![CDATA[<p>Ein typisches Problem in jedem Projekt (nicht nur in der Softwareentwicklung) ist die Frage der Prioritäten der Anforderungen. Was muss zuerst erledigt werden, was geht auch später, auf was kann ggfs. ganz verzichtet werden? Es gibt verschiedene Methoden und Verfahren, diese Wichtigkeiten der Anforderungen zu bestimmen, auf die ich heute nicht näher eingehen möchte. Heute möchten wir uns [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/04/05/prioritaeten-von-anforderungen-kategorie-oder-reihenfolge/">Prioritäten von Anforderungen –Kategorie oder Reihenfolge?</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="5078" class="elementor elementor-5078" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-3d414eed elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="3d414eed" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-58b8e8ad" data-id="58b8e8ad" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-952a347 elementor-widget elementor-widget-text-editor" data-id="952a347" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Ein typisches Problem in jedem Projekt (nicht nur in der Softwareentwicklung) ist die Frage der <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Prioritäten der Anforderungen. Was muss zuerst erledigt werden, was geht auch später, auf was </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">kann ggfs. ganz verzichtet werden?</span></p><p>Es gibt verschiedene Methoden und Verfahren, diese Wichtigkeiten der Anforderungen zu <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">bestimmen, auf die ich heute nicht näher eingehen möchte. Heute möchten wir uns jedoch mit der </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Frage beschäftigen, wie diese Prioritäten anschließend festgehalten werden.</span></p><p>Aktuell sind mir dazu zwei Modelle geläufig: </p><ul><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Einteilung in feste Kategorien und</span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">relative Priorität in Form einer Reihenfolge</span></li></ul>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-0f096eb elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="0f096eb" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8882838" data-id="8882838" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-3c4eca9 elementor-widget elementor-widget-image" data-id="3c4eca9" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="470" height="450" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/prioritaeten-entscheiden.png" class="attachment-large size-large wp-image-5084" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/prioritaeten-entscheiden.png 470w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/prioritaeten-entscheiden-300x287.png 300w" sizes="(max-width: 470px) 100vw, 470px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-47ac3541 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="47ac3541" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-416ff89d" data-id="416ff89d" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4490d857 elementor-widget elementor-widget-text-editor" data-id="4490d857" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Betrachten wir im ersten Schritt beide Modelle mal getrennt voneinander:</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-e592701 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e592701" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-76960fcb" data-id="76960fcb" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-179f82d3 elementor-widget elementor-widget-heading" data-id="179f82d3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Das Modell der Kategorien</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-3df2f4e5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="3df2f4e5" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-20da9984" data-id="20da9984" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-31cb64f8 elementor-widget elementor-widget-text-editor" data-id="31cb64f8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Zur Einteilung der Anforderungen wird eine Anzahl von n Kategorien definiert. Besonders beliebt sind <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">die Kategorien Priorität 1 bis Priorität 5. Wenn sich der Prozessverantwortliche noch besonders viel </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Mühe gibt, dann bekommen die Kategorien auch noch so sprechende Bezeichnungen/Beschreibung </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wie z.B. „must have“, „nice to have“ oder auch „sehr wichtig“, „wichtig“ oder „normal“. </span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Dass sich mal jemand getraut hätte eine Kategorie ganz offen als „wird wohl niemals gemacht </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">werden“ zu deklarieren, habe ich leider noch nicht erlebt. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Aber richtig ehrlich wäre es. Und wenn Sie doch zu einem dieser Mutigen gehören, mailen Sie mich </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">an, ich werde Sie in späteren Artikel lobend erwähnen.</span></p><p>Mittels einer geeigneten Methode (z.B. dem <a href="https://de.wikipedia.org/wiki/Kano-Modell" target="_blank" rel="noopener">Kano Modell</a>) oder oft auch dem Bauchgefühl wird nun <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">jede Anforderung einer dieser Kategorien zugeordnet. </span></p><p>Der Vorteil dieses Modell ist, dass die meisten Methoden zur Priorisierung primär nur dieses Modell <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">unterstützen (wie z.B. das schon erwähnte Kano Modell) und dass neue Anforderung mit teilweise </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wenig Aufwand einfach in eine der Kategorien gesteckt werden können. Die Entscheidung, welcher </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Kategorie eine Anforderung zugeordnet wird, kann für jede Anforderung isoliert gefällt werden.</span></p><p>Idealerweise sind für alle Kategorien klare Kriterien definiert, anhand der die Entscheidungen über <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">die Zuordnung gefällt werden. In vielen Organisationen ist dies aber oft nicht der Fall.</span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p><p>Nachteile ergeben sich oft in der Abarbeitung der Anforderung nach Priorität bzw. bei der Planung <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">von Iteration in agilen Vorgehensmodellen, da dieses Modell keine geeignete Unterstützung bei zu </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">knappen Kapazitäten zur Umsetzung der Anforderungen biete. Dazu aber gleich mehr.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-dfba5cd elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="dfba5cd" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-791680f" data-id="791680f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-a2e2c80 elementor-widget elementor-widget-heading" data-id="a2e2c80" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Das Modell der Reihenfolge</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-40e4a75 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="40e4a75" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3132b57" data-id="3132b57" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-b26a758 elementor-widget elementor-widget-text-editor" data-id="b26a758" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Hier werden die Anforderungen abhängig von ihrer Wichtigkeit/Dringlichkeit in eine lineare und <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">eindeutige Reihenfolge gebracht. Dadurch wissen alle Projektbeteiligte genau genommen immer nur, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">die Anforderung A ist wichtiger als die Anforderung B und diese wiederum wichtiger als die </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung C, ohne dass es dadurch schon eine qualitative Bewertung gibt. Es ist dadurch z.B. noch </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">nicht klar, ob A es überhaupt wert ist, umgesetzt zu werden.</span></p><p>Eine größere Menge an Anforderungen in eine sortierte Reihenfolge zu bringen, scheint auf den <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ersten Blick eine komplexe Aufgabe zu sein. Das ist sie aber nicht mehr, wenn man die Aufgabe in </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">kleinere Schritte runterbricht. </span></p><p>Ich nehme mir wahlfrei zwei erste Anforderung und vergleiche in diesem Schritt nur, welche von <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">beiden mir wichtiger ist. Diese ordnen ich denn oberhalb der anderen Anforderung an. Dann nehme </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ich mir eine weitere Anforderung und fange oben an und vergleiche diese neue Anforderung mit der </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">obersten Anforderung in meiner „Liste“. Ist die neue Anforderung wichtiger als die aktuell wichtigste </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung, dann ordne ich sie oben in der Liste an. Ist sie weniger wichtig, dann gehe ich zum </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">nächsten Eintrag in der Liste und vergleiche die neue Anforderung mit diesem Eintrag, usw.</span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">In der Programmierung kennen wir diese Verfahren als </span><a style="font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); background-color: #ffffff; font-size: 1rem;" href="https://de.wikipedia.org/wiki/Bubblesort" target="_blank" rel="noopener">Bubblesort</a></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-b3db3cd elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="b3db3cd" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-71cdd40" data-id="71cdd40" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-b9f1c66 elementor-widget elementor-widget-image" data-id="b9f1c66" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="498" height="529" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Bubblesort.jpg" class="attachment-large size-large wp-image-5103" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Bubblesort.jpg 498w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Bubblesort-282x300.jpg 282w" sizes="(max-width: 498px) 100vw, 498px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-56a16e4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="56a16e4" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3ce1649" data-id="3ce1649" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-4c61064 elementor-widget elementor-widget-text-editor" data-id="4c61064" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Nachteil ist, dass der Initiale Aufbau der Reihenfolge etwas aufwändig scheint, da man die <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">einzelnen Anforderungen bei der Frage nach ihrer Priorität nicht isoliert betrachten kann. Und auch </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">bei der Aufnahme weiterer Anforderungen ist ein Vergleich mit den anderen Anforderungen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">notwendig. </span></p><p>Dabei muss man allerdings bei der Einsortierung nicht immer ganz oben oder unten anfangen; wenn <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ich z.B. weiß, dass meine neue Anforderung H wichtiger ist als die bereits einsortierte Anforderung D, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">dann ist sie auch automatisch wichtiger als alle Anforderungen unterhalb von D und ich muss mich </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">nur auf die Vergleiche oberhalb von D konzentrieren. </span></p><p>Wenn mir gerade kein direkter Vergleich präsent ist, dann kann ich alternativ auch auf ein Verfahren <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zurückgreifen, dass in der Softwareentwicklung als </span><a href="https://de.wikipedia.org/wiki/Bin%C3%A4re_Suche" target="_blank" rel="noopener">Binäres Suchen</a><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> bekannt ist. </span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Bei diesem </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Verfahren fange ich mit dem Vergleich in der Mitte meiner Liste an. Ich nehme mir also als ersten </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Vergleichskandidaten eine Anforderung aus der Mitte meiner Anforderungsliste und beantworte mir </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">die Frage, ob meine neue Anforderung wichtiger ist, als diese Anforderung in der Mitte. Ist sie mir </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wichtiger, dann nehme ich mir als nächsten Vergleichskandidaten eine Anforderung, die in der Mitte </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zwischen meinem letzten Vergleichskandidaten und dem oberen Ende der Liste liegt und vergleiche </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wieder. Abhängig von diesem Vergleich suche ich mir jetzt wieder die Mitte im oberen oder unteren </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Viertel meiner Liste für den Vergleich aus und mache das solange weiter, bis ich genau zwischen zwei </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen lande, die entsprechend etwas wichtiger bzw. unwichtiger als meine neue </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung sind.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-6948136 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="6948136" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-79ec5ea" data-id="79ec5ea" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-21bebaf elementor-widget elementor-widget-image" data-id="21bebaf" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="658" height="398" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Binaeres-Suchen-1.jpg" class="attachment-medium_large size-medium_large wp-image-5120" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Binaeres-Suchen-1.jpg 658w, https://stage-binaris-informatik.de/wp-content/uploads/2023/04/Binaeres-Suchen-1-300x181.jpg 300w" sizes="(max-width: 658px) 100vw, 658px" />															</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-18ccbc2 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="18ccbc2" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f8a64db" data-id="f8a64db" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-20a27d8 elementor-widget elementor-widget-text-editor" data-id="20a27d8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Die Mathematiker jetzt aber bitte nicht alle melden und darauf hinweisen, dass es optimalere <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Algorithmen für die Sortierung gibt. Ich kann mir nur schwer vorstellen, dass tatsächlich ein </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Produktverantwortlicher oder Anforderungsmanager einen mathematischen Sortieralgorithmus </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">verwenden wird, die Vergleiche dienen hier nur als anschauliche Beispiele.</span></p><p>Der Vorteil der relativen Prioritäten (wie ich das Modell mit der Reihenfolge ab hier nennen möchte) <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ist, dass ich hier nun eine eindeutige Reihenfolge habe, in der die Anforderungen umzusetzen sind. </span></p><p>Was ist, wenn ich zwischen zwei Anforderungen nicht entscheiden kann, welche von beiden <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wichtiger ist? Dafür kann es eigentlich nur einen von zwei Gründen geben:</span></p><ol><li>Der Unterschied in der Wichtigkeit ist so klein, dass ich deshalb keine eindeutige <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Entscheidung fällen kann oder es gibt sogar keinen. In diesem Fall treffen ich einfach eine </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Entscheidung. Durch Zufallsprinzip (Münzwurf) oder Bauchgefühl. Es spielt keine Rolle.</span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Mir fehlen bei beiden Anforderungen die notwendigen Informationen, um die Entscheidung </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">fällen zu können. Auch in diesem Fall kann ich einfach so eine Entscheidung fällen, es ist zu </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">diesem Zeitpunkt quasi nicht wichtig, welche von beiden wichtiger ist, da beide </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen in diesem Zustand nicht umsetzbar sind.  Meine Aufgabe nach der eher </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zufälligen Entscheidung (ich muss mich entscheiden) ist jetzt, die notwendigen Informationen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zu erlangen, damit ich eine qualifizierte Entscheidung fällen kann. Idealerweise sollten beide </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen in diesem Zustand nicht zur sofortigen Umsetzung anstehen.</span></li></ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-11daf047 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="11daf047" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2e7891ec" data-id="2e7891ec" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-439d914c elementor-widget elementor-widget-text-editor" data-id="439d914c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Ist klar, dass eine der beiden Anforderungen aufgrund äußerer Umstände erst später umsetzbar sein <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );">wird, dann kann sie auch direkt weiter nach unten wandern. Dies gehört aber zum Thema, wie </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );">überhaupt bestimmt werden kann, welche Anforderungen wichtiger sind wie andere. Das werden </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );">wir in späteren Artikeln behandeln.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-95caeda elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="95caeda" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3a1bd99" data-id="3a1bd99" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-bf802a2 elementor-widget elementor-widget-heading" data-id="bf802a2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Der direkte Vergleich</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-65ff654 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="65ff654" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cd6ac9b" data-id="cd6ac9b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c9e9fec elementor-widget elementor-widget-text-editor" data-id="c9e9fec" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Werfen wir beide Modell nun mal in den Ring und betrachten wir ihre Stärken und Schwächen im <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">direkten Vergleich. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Bei einer kleinen überschaubaren Anzahl an Anforderungen machen sich beide Kandidaten recht gut. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Die Vergabe der Prioritäten im auf Kategorien basierenden Ansatzes ist wie bereits besprochen ja eh </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">recht trivial: </span></p><ol><li>Priorisierungsmethode der Wahl anwenden</li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Ergebnis nehmen und auf Kategorien transformieren</span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Fertig</span></li></ol>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-111515b elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="111515b" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-999afae" data-id="999afae" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-51f211b elementor-widget elementor-widget-text-editor" data-id="51f211b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Aber auch im relativen Modell ist der direkte Vergleich der Wichtigkeit der Anforderungen <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">untereinander schnell erledigt. Und auch bei der Abarbeitung der Anforderungen bzw. der </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Einplanung zeigen sich beide Modelle in diesem Szenario noch recht hilfreich.</span></p><p>Wie sieht es denn bei einer größeren Anzahl an Anforderungen aus, wie sie in durchschnittlichen <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Projekten schnell erreicht ist? Wir unterstellen mal eine initiale Anzahl von 100 Anforderungen zum </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Projektstart. Und hier wird es langsam interessant.</span></p><p>Betrachten wir als erstes wieder den Aufwand für die Initiale Priorisierung der Anforderungen. <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Im auf Kategorien basierenden Modell nehmen wir mal die typische Aufteilung in fünf Kategorien an, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">die wir hier als P1 bis P5 bezeichnen wollen, wobei P1 für die wichtigsten Anforderungen stehen wird </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und P5 für die unwichtigsten. </span></p><p>Die Verteilung der 100 Anforderungen auf die fünf Kategorien ist erneut mit wenig Aufwand <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">verbunden. Na gut, mit verhältnismäßig wenig Aufwand. Natürlich muss jede der 100 Anforderungen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">bewertet werden, das ist schon Arbeit. Als Ergebnis bestimmen wir jetzt in unserem Beispiel, dass 30 </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen P1 sind, 40 P2, weitere 20 P3 und die restlichen 10 verteilen sich gleichmäßig auf P4 </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und P5. </span></p><p>Es scheint nicht unüblich zu sein, dass der überwiegende Teil der initialen Anforderungen als ziemlich <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wichtig bewertet wird. Zumindest begegnet mir das so laufend in Projekten.</span></p><p>Beim relativen Modell steigt der initiale Aufwand deutlich, denn hier müssen nun die 100 <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen im Verhältnis zueinander nach Wichtigkeit sortiert werden. Das klingt aber schlimmer </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">als es dann wirklich ist. Man fängt mit zwei Anforderungen an und fügt dann Anforderung für </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung hinzu. Und wie oben schon mal erklärt, muss nicht bei jeder Anforderung unten mit der </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Sortierung angefangen werden, sondern in der Regel kann direkt weiter oben in der Reihenfolge </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">eingestiegen werden. Ich sage da gleich noch was zu.</span></p><p>Wie sieht es jetzt mit der Einplanung der Anforderungen aus? Auch hier treffen wir für unser Beispiel <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ein paar vereinfachte Annahmen. Wir definieren:</span></p><ul><li>dass wir mit Scrum arbeiten, </li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">dass alle Anforderungen mit einem Aufwand von einem Story Point geschätzt sind </span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und dass wir in einen Sprint 20 Story Points unterbringen können</span></li></ul><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );">Wenn wir nun unseren ersten Sprint planen, dann stellen wir im Kategorienmodell fest, dass wir </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">insgesamt 30 Story Points haben, die Priorität vor allem anderen haben. Soweit ist das Modell ja </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">schon mal hilfreich. </span></p><p>Im ersten Sprint unterbringen können wir aber nur 20 Story Points. Welche sollen wir da nun <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">nehmen? Hier fangen wir dann vermutlich an, diese 30 Anforderungen untereinander zu vergleichen, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">um innerhalb dieser Gruppe eine gewisse Sortierung zu erzielen. Das gleiche gilt dann für die </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">nächsten Sprints. </span></p><p>Vorausgesetzt, die 20 geplanten Story Points des ersten Sprints werden auch umgesetzt, dann stehen <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">für den zweiten Sprint 10 weitere Story Points der Priorität P1 an und 40 der Priorität P2, von denen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">aber nur 10 im Sprint Platz finden. Also wieder vergleichen und sortieren innerhalb der Kategorie P2, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und so weiter. </span></p><p>Wir fangen uns also hier genau den Aufwand ein, den wir vorher bei der initialen Priorisierung <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">vermeintlich gespart hatten.</span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p><p>Bei der bereits eindeutig sortierten Reihenfolge des relativen Modells haben wir diese Probleme bei <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">der Einplanung in die Sprints nicht mehr. Es ist jederzeit klar was als nächstes am wichtigsten ist. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Dafür haben wir aber auch vorher mehr Aufwand reinstecken müssen.</span></p><p>Und jetzt kommen wir zur Königsdisziplin: Eine neue Anforderung, die wichtiger ist wie alles andere <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen, die wir bereits aufgenommen und bewertet hatten. Sagen wir, eine gesetzliche </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Vorgabe, die scheinbar über Nacht vom Himmel gefallen ist. Natürlich ist sie nicht wirklich </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">überraschend vom Himmel gefallen, aber einige Organisationen sind erstaunlich gut darin, z.B. neue </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">gesetzliche Vorgaben so lange zu ignoriert, bis sie dann auf den letzten Drücker doch plötzlich </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">unvermeidbar scheinen.</span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;"> </span></p><p>Wie bilde ich das mit meinen Kategorien ab? </p><p>P1 ist ja schon die höchste und wichtigste Kategorie. Aber meine neue Anforderung ist sogar noch <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wichtiger als die 30 bereits als P1 eingestuften Anforderungen. Definiere ich jetzt adhoc eine neue </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Kategorie P0, die noch über P1 steht? Da dauert es garantiert nicht lange, bis auch diese neue </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Kategorie regelmäßig gefüllt wird, denn Kategorien mit Top-Priorität haben die Eigenschaft, </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen anzuziehen. </span></p><p><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Wir haben hier also ein nichttriviales Problem, dass in vielen Fällen damit gelöst wird, dass zusätzlich </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zur eigentlichen Kategorie noch ein weiteres Attribut wie z.B. Severity hinzugefügt wird. Das kann </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">dann z.B. so erklärungsbedürftige Ausprägungen wie blocker, critical, major, normal, minor, trivial </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und/oder enhancement annehmen. </span></p><p>Und falls Sie jetzt vermuten, dass ich mir das nur ausgedacht habe,  dann schauen Sie doch mal in <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Tools in ihrem Unternehmen nach, welche Attribute dort für die Bewertung von Anforderungen oder </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Tickets vorhanden sind und wie diese bei Ihnen verwendet werden.</span></p><p>Diese zusätzlichen Attribute sind aber nicht nur redundant, sondern können auch zu Inkonsistenzen <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">führen. Was ist denn nun wichtiger, eine Anforderung mit P1/enhancement oder eine mit </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">P3/blocker? Und wieso kann eine P3 Anforderung ein Blocker sein, bzw. wieso kann ein scheinbarer </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Blocker nur die Priorität P3 haben? Das führt eindeutig zu Chaos!</span></p><p>Bei der eindeutigen Reihenfolge des relativen Modells ohne Kategorien ist das Problem der neuen <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung, die wichtiger ist als alle bisherigen, dahingegen leicht zu lösen. Die neue Anforderung </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">wird einfach ganz oben einsortiert. Problem gelöst.</span></p><p>Bis hierhin scheint das relative Modell also besser geeignet zu sein.</p><p>Jetzt hatte ich aber weiter oben ausgeführt, dass die meisten Methoden zur Priorisierung von <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen eher das Denken in Kategorien unterstützen. Das jetzt schon mehrfach zitierte Kano </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Modell der Kundenzufriedenheit z.B. teilt Produktmerkmale, aus denen später Anforderungen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">werden, in fünf Kategorien ein:</span></p><ul><li>Basismerkmal, </li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Leistungsmerkmal, </span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Begeisterungsmerkmal, </span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Unerhebliches </span></li><li><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">und Rückweisungsmerkmal</span></li></ul><p>Muss ich nun auf diese Methoden verzichten, wenn ich mit einem relativen Prioritätsmodell arbeiten <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">möchte? </span></p><p>Natürlich nicht! Wenn ich eine eindeutige Reihenfolge meiner Anforderungen aufbauen möchte, <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">dann muss ich die Wichtigkeit der einzelnen Anforderungen irgendwie begründen können. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Warum ist denn die Anforderung A wichtiger als die Anforderung B? Da brauche ich für beide </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen irgendwelche Anhaltspunkte dafür, weshalb sie wichtig oder auch nicht wichtig sind. </span></p><p>Und genau dafür sind viele Methoden der Priorisierung eine große Hilfe. Mit ihnen kann ich <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">zumindest schon mal ein grobes Raster schaffen, dass mir bei der ersten Vorsortierung hilft. </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Und wenn die Anforderung A nach dem Kano Modell in die Kategorie Basismerkmal fällt und die </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderung B in die Kategorie Leistungsmerkmal, dann weiß ich ganz automatisch, das A wichtiger </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">ist als B. Und nur wenn die Anforderung C ebenfalls ein Basismerkmal zu sein scheint, muss ich mir </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">im Vergleich von A und C mehr Informationen heranziehen, um hier eine eindeutige Entscheidung </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">fällen zu können.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c9d7e3c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c9d7e3c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0a3afe9" data-id="0a3afe9" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-40f4890 elementor-widget elementor-widget-heading" data-id="40f4890" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Fazit</h4>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-44204dbc elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="44204dbc" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4befe17a" data-id="4befe17a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-a145204 elementor-widget elementor-widget-text-editor" data-id="a145204" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Kommen wir zur Antwort auf die sich nun stellende Frage, ob Kategorien in der Priorisierung von <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Anforderungen strikt abzulehnen sind. </span></p><p>Ich sage nein, denn sie sind eine hilfreiche Zwischenstufe auf dem Weg zu einer sortieren <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Reihenfolge relativer Wichtigkeit. Und diese Zwischenstufe kann nicht nur viel Zeit sparen, sondern </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">bei der Verwendung geeigneter Methoden die fundierte Basis für die Bewertung der relativen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Wichtigkeiten liefern. </span></p><p>Ich allerdings davon ab, bei der Verwendung von Kategorien stehen zu bleiben und den <span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Aufwand der Transformation in eine sortierte Liste zu scheuen, da z.B. in iterativen </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">Verfahren wie Scrum die Kategorien meistens nicht dabei helfen zu identifizieren, was am </span><span style="color: var( --e-global-color-b9c1851 ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight ); font-size: 1rem;">sinnvollsten im nächsten Sprint umgesetzt werden soll.</span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/04/05/prioritaeten-von-anforderungen-kategorie-oder-reihenfolge/">Prioritäten von Anforderungen –Kategorie oder Reihenfolge?</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welche Fähigkeiten braucht ein Scrum Team?</title>
		<link>https://stage-binaris-informatik.de/2023/04/04/welche-faehigkeiten-braucht-ein-scrum-team/</link>
		
		<dc:creator><![CDATA[Tobias Lotz]]></dc:creator>
		<pubDate>Tue, 04 Apr 2023 07:37:00 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Scrum Team]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=4909</guid>

					<description><![CDATA[<p>Wenn wir Scrum nutzen, stehen wir vor besonderen Herausforderungen. Eine zentrale Herausforderung ist, dass am Ende eines Sprints ein benutzbares Produktinkrement vorhanden sein muss. Und um dieses Produktinkrement vorzeigen zu können, hat das Scrum-Team maximal 4 Wochen zur Verfügung. Zusätzlich ist es als komplettes Team für die Ergebnisse verantwortlich. Um diesen Herausforderungen begegnen zu können, [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/04/04/welche-faehigkeiten-braucht-ein-scrum-team/">Welche Fähigkeiten braucht ein Scrum Team?</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="4909" class="elementor elementor-4909" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-2a1fa120 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2a1fa120" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2144aee1" data-id="2144aee1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-77504745 elementor-widget elementor-widget-text-editor" data-id="77504745" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wenn wir Scrum nutzen, stehen wir vor besonderen Herausforderungen. Eine zentrale Herausforderung ist, dass am Ende eines Sprints ein benutzbares Produktinkrement vorhanden sein muss. Und um dieses Produktinkrement vorzeigen zu können, hat das Scrum-Team maximal 4 Wochen zur Verfügung. Zusätzlich ist es als komplettes Team für die Ergebnisse verantwortlich. Um diesen Herausforderungen begegnen zu können, benötigen wir verschiedene Fähigkeiten.</p><p>Bei der Recherche zu diesem Artikel kam bei mir öfters die Frage auf, ist der Punkt nun eine Fähigkeit oder doch Wissen und was unterscheidet beides voneinander? Deshalb wollen wir vorher klären, was Fähigkeiten von Wissen unterscheidet.</p><p>Um dem aktuellen Trend um künstliche Intelligenzen zu folgen, habe ich ChatGPT nach Definitionen von Wissen und Fähigkeiten gefragt. Das hier habe ich als Antwort bekommen: „Wissen und Fähigkeiten sind ähnliche Konzepte. Wissen bezieht sich dabei auf die Kenntnis von Informationen, Fakten und Grundsätzen. Fähigkeiten bezeichnet das können, um eine bestimmte Aufgabe oder Handlung durchzuführen.</p><p>Wissen ist also die Ansammlung von Informationen, die eine Person durch die eigene Erfahrung oder das Studium bekommt. Fähigkeiten beziehen sich auf Kompetenzen oder die Eignung einer Person, das Wissen zur Ausführung bestimmter Aufgaben anzuwenden.“<br>Für eine erste Spur, um auf die notwendigen Fähigkeiten zu kommen, die für alle Teammitglieder wichtig sind, können wir zuerst in den Scrum-Guide schauen. Dort finden wir 5 Werte, die jedes Teammitglied vertreten und verinnerlicht haben sollte.</p><p>Eine erste Spur, um Fähigkeiten zu identifizieren, welche für die Teammitglieder wichtig sind, führt zum Scrum-Guide. Dort finden wir 5 Werte, die jedes Teammitglied vertreten und verinnerlicht haben sollte. Die 5 Werte sind:<br></p>								</div>
				</div>
				<div class="elementor-element elementor-element-92fd7f6 elementor-widget elementor-widget-text-editor" data-id="92fd7f6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li>Commitment</li><li>Focus</li><li>Openness</li><li>Courage</li><li>Respect</li></ul><div> </div>								</div>
				</div>
				<div class="elementor-element elementor-element-28377a7 elementor-widget elementor-widget-text-editor" data-id="28377a7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Unter <i>Commitment </i>ist gemeint, dass jeder im Scrum-Team sich für die eigene Arbeit und das Produkt verantwortlich fühlt, Zusagen ernst nimmt und diese auch einhält.</p><p><i>Focus </i>meint, dass sich die Teammitglieder auf die Aufgaben konzentrieren, die wichtig für den Sprint sind. Es ist zuallererst eine Ermahnung an die Teammitglieder, aus welcher sich dann aber auch Konsequenzen für die Organisation um das Team herum ableiten lassen.</p><p>Das Team muss damit umgehen können, wenn sich Pläne anders entwickeln oder diese nicht funktionieren und deswegen nach neuen Lösungen gesucht werden muss. Dies verstehen wir unter <i>Openness</i>.</p><p>Unter <i>Courage </i>verstehen wir den Mut, neue Wege auszuprobieren und damit Fehler zu riskieren und auch unangenehme Wege zu gehen.</p><p><i>Respect </i>meint sowohl den respektvollen Umgang innerhalb des Teams als auch zwischen verschiedenen Teams und dem Umfeld.</p><p>Allerdings sind dies laut Scrum Guide erstmal Werte und noch keine Fähigkeiten, daher schauen wir uns jetzt mal, welche Fähigkeiten sich aus diesen Werten ergeben und welche anderen Fähigkeiten wir noch identifizieren können.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-fa22f67 elementor-widget elementor-widget-heading" data-id="fa22f67" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Commitment</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-897125e elementor-widget elementor-widget-text-editor" data-id="897125e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Um den Wert Commitment leben zu können, sind folgende Fähigkeiten wichtig:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-6ae2e91 elementor-widget elementor-widget-heading" data-id="6ae2e91" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Qualitätsbewusstsein</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-8da805b elementor-widget elementor-widget-text-editor" data-id="8da805b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es ist wichtig, dass die Developer, der Product Owner und der Scrum Master das gleiche Verständnis für Qualität haben. Die Developer stehen dabei für die technische Qualität ein und müssen auch unter Zeitdruck sauber arbeiten. Durch das saubere Arbeiten werden keine technischen Schulden verursacht, wodurch Probleme in der Zukunft vermieden werden. Gerade am Anfang eines Projektes dauert es länger qualitativ hochwertige Arbeit zu leisten. Die Vorteile im späteren Projektverlauf sind, die Wartung und die Weiterentwicklung des Produkts. Somit wird durch höher qualitative Arbeit am Ende Zeit und Geld gespart. Der Product Owner muss dieses Qualitätsverständnis teilen und den Stakeholdern dieses erklären und verteidigen. Ein guter Leitsatz ist hierbei: „Qualität ist nicht verhandelbar“. Der Product Owner ist zusätzlich dafür verantwortlich, durch die Arbeit des Scrum Teams den Mehrwert für die Anwender und das Unternehmen zu steigern. Dies kann nur gelingen, wenn die Anforderungen an das Produkt klar ausgearbeitet sind und somit auch kommuniziert werden können. Somit ist der Product Owner für eine fachliche Qualität verantwortlich.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-2699f69 elementor-widget elementor-widget-heading" data-id="2699f69" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Vertrauen</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-ecf1ba4 elementor-widget elementor-widget-text-editor" data-id="ecf1ba4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Generell ist es immer gut, Vertrauen im Team zu haben. Trotzdem wollen wir uns diesen Punkt genauer anschauen und herausfinden, warum genau Vertrauen wichtig ist. Intuitiv könnte man annehmen, dass man im klassischen Projektmanagement weniger Vertrauen haben muss als in Scrum, da im klassischen Projektmanagement alles im Voraus geplant ist. Wohingegen es bei Scrum so scheint, dass weniger geplant wird und daher den einzelnen Teammitgliedern und dem ganzen Team mehr vertraut werden muss. Ich behaupte aber, dass in Scrum weniger Vertrauen vorhanden sein muss als im klassischen Projektmanagement. Dafür gibt es einige Faktoren. Zuerst ist Scrum sehr transparent, dadurch ist es schwieriger Fehler zu verbergen. Dafür haben z.B. wir das Daily Scrum, bei dem alle Developer zusammenkommen und sich darüber abstimmen, was seit gestern erledigt wurde, woran heute gearbeitet wird und wo es eventuell Probleme gibt. Insgesamt basiert Scrum auf der Arbeit mit <a href="https://stage-binaris-informatik.de/2023/01/12/die-feedbackschleife-in-scrum/" target="_blank" rel="noopener">Feedbackschleifen </a>wodurch diese hohe Transparenz entsteht.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-32efe85 elementor-widget elementor-widget-heading" data-id="32efe85" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Active Learning</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-473f14b elementor-widget elementor-widget-text-editor" data-id="473f14b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Active Learning bezeichnet die Bereitschaft aller Teammitglieder sich ständig weiterzubilden. Rein theoretisch könnte es sein, dass entweder vereinzelt oder alle Teammitglieder schon alles Nötige für ein Projekt wissen oder können und dieser Punkt damit wegfällt. Das ist aber eher unwahrscheinlich.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-37af3dd elementor-widget elementor-widget-heading" data-id="37af3dd" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Focus</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-b508c79 elementor-widget elementor-widget-text-editor" data-id="b508c79" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Wert Focus spricht die folgenden Fähigkeiten an:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-eb0f449 elementor-widget elementor-widget-heading" data-id="eb0f449" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Verständnis der Wertschöpfung</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-73710c4 elementor-widget elementor-widget-text-editor" data-id="73710c4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das Verständnis der Wertschöpfung können wir in die Planung und die Durchführung des Sprints unterteilen. Bei der Planung muss sich der Product Owner Gedanken darüber machen, welche Anforderungen den Mehrwert des Produkts am meisten steigern. Es müssen also die Anforderungen bewertet werden und es muss ein Unterschied zwischen Wichtigem und Unwichtigen Anforderungen erfolgen. Bei der Durchführung ist es wichtig, dass sich die Developer auf das Sprint Goal konzentrieren und sich dabei nicht ablenken lassen. Diese Ablenkungen können sowohl Störungen aus der Organisation sein oder eigene Begehrlichkeiten. Die Developer erkennen, was wichtig ist, um das Ziel zu erreichen.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-f891b88 elementor-widget elementor-widget-heading" data-id="f891b88" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Zeitmanagement</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-f71f999 elementor-widget elementor-widget-text-editor" data-id="f71f999" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das Zeitmanagement zielt darauf ab, dass die Developer ein Bewusstsein entwickeln, auch während des Sprints den Fortschritt zu überprüfen und damit möglichst früh zu verstehen, ob das Sprint-Goal erreicht wird. Dadurch soll verhindert werden, erst am Ende des Sprints herauszufinden, dass Funktionalitäten nicht umgesetzt werden. Die Developer behalten also einen Überblick über die schon umgesetzten bzw. über die noch zu bearbeitenden User-Storys und vergleichen den Fortschritt mit der verbleibenden Zeit.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-8596b52 elementor-widget elementor-widget-heading" data-id="8596b52" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Openness</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-7cec384 elementor-widget elementor-widget-text-editor" data-id="7cec384" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Für Openness benötigen wir:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-fc190de elementor-widget elementor-widget-heading" data-id="fc190de" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Kommunikation</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-f425ee3 elementor-widget elementor-widget-text-editor" data-id="f425ee3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Die Fähigkeit zu kommunizieren, meint dabei für den Product Owner, dass dieser mit den Stakeholdern im Austausch sein muss, um deren Ideen zu verstehen und diese auch an die Developer weiterzugeben. Wichtig ist diese Fähigkeit auch zwischen den Developern und dem Product Owner. Es ist dadurch möglich, auftretende Probleme früh gemeinsam zu identifizierten und neue Lösungswege zu erarbeiten. Die Developer erhalten so auch Feedback vom Product Owner und erfahren, ob die Umsetzungen den Erwartungen entsprechen.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-9786cce elementor-widget elementor-widget-heading" data-id="9786cce" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Teamfähigkeit</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-4503675 elementor-widget elementor-widget-text-editor" data-id="4503675" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Dies bedeutet, dass sich die verschiedenen Verantwortlichkeiten gegenseitig bei Problemen helfen und unterstützen. Die Developer sollten dies sowieso tun, um dem Wert Commitment zu leben. Aber auch der Scrum Master und Product Owner müssen beide im Team arbeiten können, denn nur durch die Zusammenarbeit der drei Rollen kann es am Ende eines jeden Sprints ein benutzbares Produktinkrement geben. Gleichzeitig ist damit eine Unterstützung gemeint, bei welcher die Einzelperson nicht die auf die eigenen Ziele hinarbeitet, sondern immer das komplette Projekt im Blick hat.</p><p>Das Verständnis der <b>Wertschöpfung </b>ist ebenfalls wichtig, wurde aber unter dem Punkt Focus schon besprochen und wird dementsprechend hier nicht wiederholt.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-85804f7 elementor-widget elementor-widget-heading" data-id="85804f7" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Courage</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-3070e18 elementor-widget elementor-widget-text-editor" data-id="3070e18" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Die Courage wird durch folgende Fähigkeiten gelebt:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-6c7226b elementor-widget elementor-widget-heading" data-id="6c7226b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Konfliktfähigkeit</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-c823824 elementor-widget elementor-widget-text-editor" data-id="c823824" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Konfliktfähigkeit ist die Bereitschaft, sich einem Konflikt zu stellen und diesem konstruktiv zu lösen. Diese Fähigkeit ist für alle Mitglieder des Scrum Teams wichtig, da diese mit unterschiedlichen Personen kommunizieren und zusammenarbeiten.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-8b4d406 elementor-widget elementor-widget-heading" data-id="8b4d406" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Konfliktmanagement</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-29551b1 elementor-widget elementor-widget-text-editor" data-id="29551b1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Beim Konfliktmanagement geht es, um die Kompetenz, Konflikte mit Techniken aus dem Bereich der Kommunikation und des Coachings produktiv und klar zu lösen. Dabei sollte mindestens eine Person aus dem Scrum-Team diese Fähigkeit besitzen. Dies muss nicht unbedingt der Scrum Master sein. Vielmehr sollte dieser das Scrum-Team unterstützen, diese Fähigkeit zu entwickeln und somit zu einem selbst managenden Team zu werden.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-f8aeb22 elementor-widget elementor-widget-heading" data-id="f8aeb22" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Überzeugungskraft</h5>				</div>
				</div>
				<div class="elementor-element elementor-element-f2d9971 elementor-widget elementor-widget-text-editor" data-id="f2d9971" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Product Owner muss eine Vision des Produkts entwickeln und diese an die Stakeholder und Developer kommunizieren. Gerade bei der Kommunikation mit den Stakeholdern muss der Product Owner begründen können, warum welche Features umgesetzt werden und welche nicht. Dazu gehört auch die Erklärung, warum Features eventuell anders umgesetzt wurden als es sich die Stakeholder vorgestellt haben.</p><p>Im Verlauf eines Projekts entstehen bei Personen Widerstände, bei diesen Personen muss es der Scrum Master schaffen eine Bereitschaft herzustellen sich neuen Ideen oder Möglichkeiten überhaupt anzuhören. Dabei wird der Widerstand gegen die Idee abgebaut und eine Offenheit für neue Ideen erzeugt. Es geht dabei jedoch nicht darum, die Person von der Idee zu überzeugen oder sogar zu überreden, sondern, dass diese sich die Idee anhört und über diese nachdenkt.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-843903f elementor-widget elementor-widget-heading" data-id="843903f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Respect</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-8432276 elementor-widget elementor-widget-text-editor" data-id="8432276" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Respekt innerhalb des Teams ist essenziell, da es durch die Transparenz und ergebnisorientierte Arbeit schnell zu Konflikten kommen kann. Diese müssen angesprochen und es muss eine konstruktive Lösung gefunden werden. Dabei ist es wichtig, dass die Teammitglieder nach dem Konflikt weiterhin zusammenarbeiten können.</p><p>Die beiden folgenden Punkte sind ebenfalls wichtig für den Respect, wurden aber in vorherigen Absätzen schon besprochen.</p><ul><li>Die Zusammenarbeit als Team</li><li>Konfliktmanagement</li></ul><div> </div>								</div>
				</div>
				<div class="elementor-element elementor-element-1f85333 elementor-widget elementor-widget-heading" data-id="1f85333" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Scrum</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-63d5ace elementor-widget elementor-widget-text-editor" data-id="63d5ace" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es gibt eine weitere Fähigkeit, auf die ich in diesem Zusammenhang eingehen möchte. Diese ist das <b>Wissen über Scrum.</b><br>Je mehr alle Beteiligten vorab über Scrum wissen, desto leichter fällt der Start mit dem agilen Arbeiten, wodurch der Scrum Master weniger Aufwand hat, Scrum im Team zu etablieren. Kollegen, die schon über Wissen in Scrum verfügen haben, kennen schon die Werte, Abläufe und Events, die stattfinden. Sie müssen also nicht alles neu lernen und finden sich schneller im Scrum Framework zurecht. Es ist möglich, dass Sie durch Ihre Erfahrung anderen Teammitgliedern helfen, schneller mit Scrum vertraut zu werden, sodass diese dann sicherer im Umgang mit Scrum werden. </p>
<p>Durch dieses Wissen unterstützen Sie den Scrum Master bei der Einführung und Akzeptanz von Scrum im Team.</p><p>Obwohl Kenntnisse oder sogar Erfahrungen mit Scrum oder agilem Arbeiten bei den Developern und dem Product Owner sehr wünschenswert sind, sind sie jedoch keine zwingende Voraussetzung für den Start mit Scrum. In diesem Fall unterstützt der Scrum Master die anderen dabei, Scrum beim aktiven Einsatz Schritt für Schritt immer besser zu erlernen und zu verstehen</p>								</div>
				</div>
				<div class="elementor-element elementor-element-91b62b3 elementor-widget elementor-widget-heading" data-id="91b62b3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Scrum Master</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-072f48a elementor-widget elementor-widget-text-editor" data-id="072f48a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Für den Scrum Master gibt es noch einige weitere spezielle Fähigkeiten, die dieser besitzen muss, vor allem da er auch in der Organisation Scrum einführen und etablieren soll. Dies kann je nach Größe der Organisation unterschiedlich lange dauern. Daher ist eine sehr grundlegende Eigenschaft für den Scrum Master Geduld und Nervenstärke, um auch über lange Zeit eine Veränderung in der Organisation bewirken zu können.</p><p>Diese Veränderung zu bewirken, dauert meistens lange und ist nur durch kleine Schritte und Erfolge möglich. Es müssen die verschiedensten Personen von den Vorteilen der Agilität und Scrum überzeugt werden. Teilweise wollen diese Personen auch erst abwarten, wie das Scrum-Team arbeitet und ob es eine höhere Kundenzufriedenheit schafft. Hierbei muss sich der Scrum Master im Klaren sein, dass dieser mit dem komplexesten System arbeitet, das man sich vorstellen kann: dem Menschen. </p>								</div>
				</div>
				<div class="elementor-element elementor-element-d86208e elementor-widget elementor-widget-heading" data-id="d86208e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Fazit</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-0615059 elementor-widget elementor-widget-text-editor" data-id="0615059" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Wir können die Scrum Werte als Grundbausteine verstehen, auf denen wir dann als Team aufbauen. Diese helfen uns für eine gemeinsame Sicht- und Verhaltensweise. Gleichzeitig sehen wir, dass wir durch die Kombination der verschiedenen Werte unterschiedliche Fähigkeiten identifizieren können, die benötigt werden, um als Team zu arbeiten und Scrum<br>
umzusetzen. Wir sehen, dass die Ausprägungen, wie die Fähigkeiten im Einzelnen umgesetzt werden, je nach Verantwortlichkeit unterschiedlich sind.</p><div>Jetzt bist du an der Reihe. <br></div><div>Welche Fähigkeiten sind schon bei dir oder deinem Team vorhanden?&nbsp; <br></div><div>Gibt es Fähigkeiten, die noch entwickelt werden müssen? <br></div><div>Welche nächsten Schritte unternimmst du, um die Fähigkeiten zu entwickeln?</div>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/04/04/welche-faehigkeiten-braucht-ein-scrum-team/">Welche Fähigkeiten braucht ein Scrum Team?</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Die Feedbackschleife in Scrum</title>
		<link>https://stage-binaris-informatik.de/2023/01/12/die-feedbackschleife-in-scrum/</link>
		
		<dc:creator><![CDATA[Tobias Lotz]]></dc:creator>
		<pubDate>Thu, 12 Jan 2023 09:21:20 +0000</pubDate>
				<category><![CDATA[Agilität]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Deming]]></category>
		<category><![CDATA[Scrum]]></category>
		<guid isPermaLink="false">http://stage-binaris-informatik.de/?p=4602</guid>

					<description><![CDATA[<p>Die Feedbackschleife in Scrum Das Ziel von Feedback ist es, eine Veränderung zu bewirken. In der Agilität werden Fehler als Chancen begriffen. Diese Chancen treten in einem Projekt früher oder später auf und sollten daher genutzt werden, um bestehenden Prozesse infrage zu stellen. Durch das frühe Auftreten der Chancen können alle Projektbeteiligten aus diesen lernen [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2023/01/12/die-feedbackschleife-in-scrum/">Die Feedbackschleife in Scrum</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="4602" class="elementor elementor-4602" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-4b37224 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="4b37224" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-03cc48b" data-id="03cc48b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-fa51416 elementor-widget elementor-widget-heading" data-id="fa51416" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h1 class="elementor-heading-title elementor-size-default">Die Feedbackschleife in Scrum</h1>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8a66f99 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8a66f99" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d73fced" data-id="d73fced" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-2e3b6d9 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2e3b6d9" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9108039" data-id="9108039" data-element_type="column">
			<div class="elementor-widget-wrap">
							</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-cd2db6c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="cd2db6c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e784a71" data-id="e784a71" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-110668e elementor-widget elementor-widget-text-editor" data-id="110668e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Das Ziel von Feedback ist es, eine Veränderung zu bewirken. In der Agilität werden Fehler als Chancen begriffen. Diese Chancen treten in einem Projekt früher oder später auf und sollten daher genutzt werden, um bestehenden Prozesse infrage zu stellen. <br>Durch das frühe Auftreten der Chancen können alle Projektbeteiligten aus diesen lernen und diese in Zukunft verhindern.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-3100892 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="3100892" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-63b0e3d" data-id="63b0e3d" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-08b32ed elementor-widget elementor-widget-heading" data-id="08b32ed" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Der PDCA-Zyklus</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-5961245 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5961245" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-53d407a" data-id="53d407a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-fe9b144 elementor-widget elementor-widget-text-editor" data-id="fe9b144" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Der Deming-Kreis bzw. PDCA-Zyklus verdeutlicht, wie eine Feedbackschleife funktioniert. Dieser veranschaulicht, wie mit kontinuierlichen Veränderungen umgegangen werden kann und wie diese in einem Unternehmen eingeführt werden können. </p><p>Der PDCA-Zyklus arbeitet in Schleifen. Die einzelnen Schritte ergeben einen Kreis, wodurch am Ende ein erreichter Zustand beibehalten wird. Von diesem erreichten Zustand können weitere Optimierungen geplant und durchgeführt werden. Hierbei sind kurze Zeiträume wichtig, damit schnell Feedback berücksichtigt werden kann.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-7d6ee0c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7d6ee0c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-40335a3" data-id="40335a3" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-c3e6478 elementor-widget elementor-widget-image" data-id="c3e6478" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="261" height="322" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild1.png" class="attachment-medium_large size-medium_large wp-image-4634" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild1.png 261w, https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild1-243x300.png 243w" sizes="(max-width: 261px) 100vw, 261px" />											<figcaption class="widget-image-caption wp-caption-text">PDCA-Zyklus (Deming-Kreis)</figcaption>
										</figure>
									</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-0539030 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="0539030" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31a0dc5" data-id="31a0dc5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-af65b26 elementor-widget elementor-widget-text-editor" data-id="af65b26" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									In Feedbackschleifen zu arbeiten bedeutet, dass sich die verschiedenen Mitglieder eines Projektteams regelmäßig austauschen, um Probleme zu lösen und bestehende Prozesse zu verbessern, welche die Arbeitsleistung bzw. die Geschwindigkeit einschränken oder die Erstellung funktionierender Produktinkremente behindern. <br><br>Im ersten Schritt, dem Plan, geht es um die Planung und Erkennung von konkreten Verbesserungspotenzialen. <br><br>Im Do werden die vorher besprochenen Aufgaben durchgeführt, der Plan wird also in die Tat umgesetzt. <br>Beim Check geht es um die Überprüfung des Ergebnisses und ob es den Erwartungen entspricht. Um die Ergebnisse überprüfen zu können, ist es wichtig, dass diese messbar sind. <br><br>Beim letzten Schritt, dem Act, wird entschieden, ob das erreichte Ergebnis den Erwartungen entspricht oder ob der Arbeitsprozess weiter verbessert werden muss. Damit die weitere Verbesserung funktioniert, wird das vorher erreichte Ergebnis als Standard implementiert. Von diesem Standard beginnt der PDCA-Zyklus wieder von vorne.<br><br>3-Säulen von Scrum<br>Scrum selbst basiert auf den drei Säulen, welche eine eigene Funktionsweise der Feedbackschleife darstellen. Diese sind: <br>•&nbsp;&nbsp; &nbsp;Transparenz <br>•&nbsp;&nbsp; &nbsp;Überprüfung<br>•&nbsp;&nbsp; &nbsp;Anpassung								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-89dec45 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="89dec45" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a8c3aca" data-id="a8c3aca" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-6fc58c4 elementor-widget elementor-widget-heading" data-id="6fc58c4" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Die 3 Säulen von Scrum</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-8d07c4a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="8d07c4a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5483ef0" data-id="5483ef0" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-3d9308e elementor-widget elementor-widget-text-editor" data-id="3d9308e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Scrum selbst basiert auf den drei Säulen, welche eine eigene Funktionsweise der Feedbackschleife darstellen. Diese sind: <br><br>•&nbsp;&nbsp; &nbsp;Transparenz <br>•&nbsp;&nbsp; &nbsp;Überprüfung<br>•&nbsp;&nbsp; &nbsp;Anpassung</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-863589a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="863589a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-56a6102" data-id="56a6102" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-2d1058a elementor-widget elementor-widget-image" data-id="2d1058a" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="600" height="439" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/ScrumSaeulen.png" class="attachment-large size-large wp-image-4665" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/ScrumSaeulen.png 600w, https://stage-binaris-informatik.de/wp-content/uploads/2023/01/ScrumSaeulen-300x220.png 300w" sizes="(max-width: 600px) 100vw, 600px" />											<figcaption class="widget-image-caption wp-caption-text">Säulen in Scrum</figcaption>
										</figure>
									</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-9c9409f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="9c9409f" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bff21b1" data-id="bff21b1" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-0f17500 elementor-widget elementor-widget-text-editor" data-id="0f17500" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Bei der Transparenz geht es sowohl um offene Kommunikation als auch, dass alle Personen Zugriff auf alle Artefakte und Ergebnisse haben sowie das gleiche unter den verwendeten Begriffen verstehen. <br /><br />Mit der Überprüfung ist die Kontrolle von Ergebnissen gemeint. Scrum hat das Ziel, am Ende eines jeden Sprints ein benutzbares Produktinkrement bereitzustellen. Nur durch das vorherige Setzen eines konkreten Ziels, ist die Überprüfung und Nachverfolgbarkeit von Ergebnissen überhaupt möglich. <br /><br />Durch diese Überprüfung schaffen wir die Möglichkeit sowohl die Produkte als auch die Prozesse zu verbessern. Dadurch können wir die entsprechenden Bedingungen für das Projekt so gestalten und bei Bedarf verändern, dass ein Projekt erfolgreich wird.<br /><br />Durch die allgegenwärtige Transparenz im Zusammenspiel mit der Überprüfung und der Anpassung während des Sprints bildet dies eine kontinuierliche Feedbackschleife.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-50d0678 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="50d0678" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cf7118a" data-id="cf7118a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-bdbcd50 elementor-widget elementor-widget-heading" data-id="bdbcd50" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Einsatz des PDCA-Zyklus im Scrum-Prozess</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-351f1b0 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="351f1b0" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-530e6a3" data-id="530e6a3" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-cca500f elementor-widget elementor-widget-text-editor" data-id="cca500f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									Scrum hat seinen eigenen Aufbau des PDCA-Zyklus. Dabei wird Feedback in verschiedenen Zyklen generiert. Genau darum geht es hier.<br>&nbsp;<br>Wenn wir mit Scrum arbeiten, dann nutzen wir nicht nur eine Feedbackschleife, sondern viele kleine. Genauer gesagt ist jeder Sprint eine Feedbackschleife. In dieser gibt es dann in verschiedenen Abständen Events, in denen Feedback eingeholt wird. Diese werden im weiter unten genauer besprochen. Alle diese Schleifen haben die Erreichung des Product Goals zum Ziel. <br><br>Dieses wird für jeden Sprint in ein Sprint Goal heruntergebrochen. Als Ausnahme ist hierbei die Retrospektive zu nennen, bei diesem Event geht es vorrangig um die Verbesserung des Entwicklungsprozesses. In den jeweiligen Sprints gibt es verschiedene Scrum-Events, welche das Ziel haben Feedback einzuholen und im Anschluss für die Erstellung des Produktes zu nutzen. <br><br>Dabei können sich der Product Owner und die Developer folgende generelle Fragen stellen: <br><br>•&nbsp;&nbsp; &nbsp;Welche Prozesse laufen gut und können verbessert werden? &nbsp;<br>•&nbsp;&nbsp; &nbsp;Was läuft schlecht und muss verbessert werden? <br>•&nbsp;&nbsp; &nbsp;Bauen wir als Scrum Team das richtige Produkt? &nbsp;<br><br>Gerade die letzte Frage stellt sich der Product Owner bei der Abnahme immer. Diese Abnahme geschieht im Optimalfall schon während des Sprints. Dadurch kann schon Feedback, welches im Sprint gewonnen wurde, berücksichtigt werden.								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-0d84fda elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="0d84fda" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8fddb2c" data-id="8fddb2c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5cf7e92 elementor-widget elementor-widget-heading" data-id="5cf7e92" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Die Scrum Events</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-772a8b2 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="772a8b2" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-38b196f" data-id="38b196f" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5fd2c92 elementor-widget elementor-widget-text-editor" data-id="5fd2c92" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es gibt verschiedene Scrum Events, welche in einem regelmäßigen Rhythmus abgehalten werden. Das Ziel dieser Events ist, Feedback zu generieren und es im Anschluss zu nutzen. Diese sind:<br><br>1.&nbsp;&nbsp; &nbsp;Daily Scrum<br>2.&nbsp;&nbsp; &nbsp;Sprint Review <br>3.&nbsp;&nbsp; &nbsp;Sprint Retrospektive<br>4.&nbsp;&nbsp; &nbsp;Product Backlog Refinement</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-a4ae807 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a4ae807" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-66cc5cf" data-id="66cc5cf" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-9898316 elementor-widget elementor-widget-image" data-id="9898316" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="498" height="388" src="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild3.png" class="attachment-large size-large wp-image-4692" alt="" srcset="https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild3.png 498w, https://stage-binaris-informatik.de/wp-content/uploads/2023/01/Bild3-300x234.png 300w" sizes="(max-width: 498px) 100vw, 498px" />											<figcaption class="widget-image-caption wp-caption-text">Der Scrum Flow</figcaption>
										</figure>
									</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-79e6328 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="79e6328" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-304e70a" data-id="304e70a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-5d60898 elementor-widget elementor-widget-text-editor" data-id="5d60898" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Beim Daily Scrum Meeting tauschen sich die Developer darüber aus, was seit dem letzten Daily Scrum geschafft wurde, was diese planen, heute zu erledigen und ob es Probleme bei der Arbeit gibt. Durch diesen täglichen Abgleich wissen alle Developer, an was gearbeitet wird. Sollten technische Probleme aufgedeckt werden, so helfen sich die Developer nach dem Daily. <br>Geht es um organisatorische Probleme, so wird der Product Owner bzw. Scrum Master informiert und diese versuchen die Probleme zu beseitigen. <br><br>Dieser Austausch hilft dabei am Ende das Product Goal und das Sprint Goal zu erreichen. Ein Nebeneffekt dieser Ehrlichkeit dem Team gegenüber ist, dass das Team zusammenwächst und dadurch immer besser zusammenarbeitet. Durch das Vertrauen und die Ehrlichkeit, die jedem Teammitglied entgegengebracht werden, wächst das Team immer besser zusammen und verbessert auch die Zusammenarbeit.<br><br>Im Review präsentiert das Scrum Team das Sprintergebnis den Stakeholdern. Dabei können die Stakeholder das Produktinkrement idealerweise selbst testen. Basierend auf der Präsentation und dem selbstständigen Ausprobieren, erhält das Scrum Team Produktfeedback. <br>Das generierte Feedback fließt dann in die weitere Produktentwicklung mit ein. Durch diesen Prozess weiß das Scrum Team, was sich die Stakeholder wünschen, und kann diese Wünsche für die weitere Entwicklung berücksichtigen. Das Scrum Team erhält hier eine Antwort auf die Frage, ob das richtige Produkt erstellt wird.<br><br>In der Sprint Retrospektive tauscht sich das Scrum Team über den letzten Sprint aus. Hierbei können sowohl negative als auch positive Punkte angesprochen werden. <br>Durch das Ansprechen von Problemen bzw. weitere zu optimieren Prozessen, schafft es das Team immer besser zusammenzuarbeiten. Durch eine immer bessere Zusammenarbeit kann das Team versuchen seine Velocity zu verbessern bzw. zu halten. Ab einem bestimmten Punkt wird es immer schwieriger die Geschwindigkeit eines Scrum Teams zu verbessern, dass bedeutet aber nicht, dass es nicht Probleme oder Verbesserungspotenziale gibt, die trotzdem angesprochen werden müssen.<br><br>Beim Product Backlog Refinement geht es um das Feedback, welches die Developer dem Product Owner geben. Dieser kann dahingehend die Priorisierung anpassen bzw. von einer (neu) Schätzung der Back Log-Items profitieren. <br>Durch die Nutzung dieses Wissens kann der Product Owner besser einschätzen, welche Anforderungen von den Developern fertiggestellt werden können und welche nicht. <br>Somit gelingt eine immer bessere vorhersage, welche Funktionalitäten realistisch entwickelt werden können.</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-e905e59 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e905e59" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-618256e" data-id="618256e" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7dae3d3 elementor-widget elementor-widget-heading" data-id="7dae3d3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h5 class="elementor-heading-title elementor-size-default">Fazit</h5>				</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-d831c01 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d831c01" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eef03fb" data-id="eef03fb" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-eaf4b36 elementor-widget elementor-widget-text-editor" data-id="eaf4b36" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Es wird deutlich, dass ein Projekt immer von Feedback profitiert. Scrum hilft dabei, Feedback im laufenden Projekt einzuholen. Dafür gibt es viele Scrum-Events, die dies ermöglichen. <br>Damit Feedback dabei hilft, das Projekt erfolgreich abzuschließen, muss dieses auch umgesetzt werden. Dabei kann dir der PDCA-Zyklus unterstützen. <br><br>Versuchen Sie also Feedback zu bekommen und dieses auch umzusetzen!</p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div><p>The post <a href="https://stage-binaris-informatik.de/2023/01/12/die-feedbackschleife-in-scrum/">Die Feedbackschleife in Scrum</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>KI für Drohnentechnologie</title>
		<link>https://stage-binaris-informatik.de/2022/05/23/ki-fuer-drohnentechnologie/</link>
		
		<dc:creator><![CDATA[jpieper]]></dc:creator>
		<pubDate>Mon, 23 May 2022 11:34:26 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Informationstechnologie]]></category>
		<category><![CDATA[KI]]></category>
		<category><![CDATA[Phyton]]></category>
		<category><![CDATA[Referenzen]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<guid isPermaLink="false">http://justwebsite.binaris-informatik.de/?p=3822</guid>

					<description><![CDATA[<p>Aufgabe Implementierung einer KI basierend auf neuronalen Netzen für die Erkennung und Vorhersage von Kollisionen in Drohnenschwärmen. Einbindung von Motioncapturing Kameras, welche Drohnenschwärme autonom aufgenommen haben. Ziel war eine kollisionsvorhersage in der Industrie 4.0. Für die Anlernung der neuronalen KI musste das eigene Kernel umgeschrieben werden. Beyond LOS (line of sight) und autonomes fliegen möglich. [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/ki-fuer-drohnentechnologie/">KI für Drohnentechnologie</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Aufgabe</h2><p>Implementierung einer KI basierend auf neuronalen Netzen für die Erkennung und Vorhersage von Kollisionen in Drohnenschwärmen. Einbindung von Motioncapturing Kameras, welche Drohnenschwärme autonom aufgenommen haben. Ziel war eine kollisionsvorhersage in der Industrie 4.0. Für die Anlernung der neuronalen KI musste das eigene Kernel umgeschrieben werden. Beyond LOS (line of sight) und autonomes fliegen möglich.</p><h2 class="wp-block-heading">Technologien</h2><p>C#, Visual Studio, Python, PyThorch, Scipy, MQTT, Vicon, Optitrack, NVidia Cuda</p><p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/ki-fuer-drohnentechnologie/">KI für Drohnentechnologie</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Weiterentwicklung einer Bestellsoftware</title>
		<link>https://stage-binaris-informatik.de/2022/05/23/weiterentwicklung-einer-bestellsoftware/</link>
		
		<dc:creator><![CDATA[jpieper]]></dc:creator>
		<pubDate>Mon, 23 May 2022 11:33:03 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Handel]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Referenzen]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<guid isPermaLink="false">http://justwebsite.binaris-informatik.de/?p=3820</guid>

					<description><![CDATA[<p>Aufgabe Portierung und Weiterentwicklung einer Bestellsoftware für die interne Benutzung der Märkte von JSF auf Angular. Performance &#8211; Optimierung für die Benutzung auf älteren Systemen und Implementierung neuer Features. Webbasierte QM-Audit Software Entwicklung einer webbasierten QM-Audit Software für die Speicherung, Organisation und Durchführung von Qualitätsmanagement-Audits in Filialen. Insbesondere Sicherstellung einer hohen Kompatibilität zwischen verschiedenen Systemen [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/weiterentwicklung-einer-bestellsoftware/">Weiterentwicklung einer Bestellsoftware</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Aufgabe</h2><p>Portierung und Weiterentwicklung einer Bestellsoftware für die interne Benutzung der Märkte von JSF auf Angular. Performance &#8211; Optimierung für die Benutzung auf älteren Systemen und Implementierung neuer Features. Webbasierte QM-Audit Software Entwicklung einer webbasierten QM-Audit Software für die Speicherung, Organisation und Durchführung von Qualitätsmanagement-Audits in Filialen. Insbesondere Sicherstellung einer hohen Kompatibilität zwischen verschiedenen Systemen und Browsern. Weiterentwlickung der Applikation zu einer PWA (progressive web app): Implementierung der Offline-Fähigkeit und versionsbasierte Installation auf den Geräten.</p><h2 class="wp-block-heading">Technologie</h2><p>Java, Angular, TypeScript, Javascript, TDD, Liquibase, VSCode, Git, IntelliJ, Tomcat</p><p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/weiterentwicklung-einer-bestellsoftware/">Weiterentwicklung einer Bestellsoftware</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Entwicklung Google VR App</title>
		<link>https://stage-binaris-informatik.de/2022/05/23/entwicklung-google-vr-app/</link>
		
		<dc:creator><![CDATA[jpieper]]></dc:creator>
		<pubDate>Mon, 23 May 2022 11:31:44 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Gesundheitswesen]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Jsf]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Referenzen]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<guid isPermaLink="false">http://justwebsite.binaris-informatik.de/?p=3816</guid>

					<description><![CDATA[<p>Aufgabe Die Android App dient der Vorbereitung von Kindern auf einen MRT-Scan. Hintergrund ist, dass Kinder oftmals durch Aufregung, Nervösität oder Angst nicht still im MRT liegen bleiben können womit die resultierenden Scan Bilder unbrauchbar werden. Es wurden dazu eine Reihe von VR-Minispielen konzipiert die dem Kind helfen sollen ruhig und gelassen im MRT zu [&#8230;]</p>
<p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/entwicklung-google-vr-app/">Entwicklung Google VR App</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Aufgabe</h2><p>Die Android App dient der Vorbereitung von Kindern auf einen MRT-Scan. Hintergrund ist, dass Kinder oftmals durch Aufregung, Nervösität oder Angst nicht still im MRT liegen bleiben können womit die resultierenden Scan Bilder unbrauchbar werden. Es wurden dazu eine Reihe von VR-Minispielen konzipiert die dem Kind helfen sollen ruhig und gelassen im MRT zu liegen. Zusätzlich werden in dem Spiel Statistiken gesammelt die der leitende Arzt zum Entscheid ob ein Kind nun einen MRT-Scan durchführen kann oder nicht zur Hilfe nehmen kann.</p><h2 class="wp-block-heading">Technologie</h2><p>Java, REST, Jsf, Node.js, C#, Unity, GoogleVR, Google Cardboard</p><p>The post <a href="https://stage-binaris-informatik.de/2022/05/23/entwicklung-google-vr-app/">Entwicklung Google VR App</a> appeared first on <a href="https://stage-binaris-informatik.de">Binaris Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
