<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Testgetriebene_Entwicklung</id>
	<title>Testgetriebene Entwicklung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Testgetriebene_Entwicklung"/>
	<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Testgetriebene_Entwicklung&amp;action=history"/>
	<updated>2026-05-09T05:41:57Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MimiPedia</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mletkin.net/index.php?title=Testgetriebene_Entwicklung&amp;diff=81&amp;oldid=prev</id>
		<title>Ullrich: Die Seite wurde neu angelegt: „Category:Java Category:Ausbildung __NOTOC__ = Grundgedanke = Der &quot;klassische&quot; Entwickler bekommt eine Problembeschreibung, implementiert dann eine Lös…“</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Testgetriebene_Entwicklung&amp;diff=81&amp;oldid=prev"/>
		<updated>2021-08-30T09:15:31Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&lt;a href=&quot;/index.php?title=Kategorie:Java&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Java (Seite nicht vorhanden)&quot;&gt;Category:Java&lt;/a&gt; &lt;a href=&quot;/index.php?title=Kategorie:Ausbildung&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Ausbildung (Seite nicht vorhanden)&quot;&gt;Category:Ausbildung&lt;/a&gt; __NOTOC__ = Grundgedanke = Der &amp;quot;klassische&amp;quot; Entwickler bekommt eine Problembeschreibung, implementiert dann eine Lös…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Java]]&lt;br /&gt;
[[Category:Ausbildung]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
= Grundgedanke =&lt;br /&gt;
Der &amp;quot;klassische&amp;quot; Entwickler bekommt eine Problembeschreibung, implementiert dann&lt;br /&gt;
eine Lösung, schaut daß sie funktioniert und ist fertig...&lt;br /&gt;
&lt;br /&gt;
Der Knackpunkt dabei ist die Frage, wie das Funktionieren überprüft werden soll.&lt;br /&gt;
Wir gehen mal davon aus, daß das Problem so beschrieben ist, daß der Entwickler &lt;br /&gt;
genau versteht wie das Ergebnis auszusehen hat. Dann kann er mit diesem Wissen&lt;br /&gt;
sein Programm überprüfen. Was aber, wenn das Programm geändert oder ergänzt werden&lt;br /&gt;
soll? Dann muß der Entwickler erneut überprüfe ob noch alles tut und im Laufe der&lt;br /&gt;
Zeit wächst der Test-Aufwand immer weiter an.&lt;br /&gt;
&lt;br /&gt;
Die Lösung besteht darin, die Überprüfung zu automatisieren. Dann kann eine billige&lt;br /&gt;
Maschine die Überprüfung durchführen, während der teure Entwickler &amp;#039;&amp;#039;wichtige&amp;#039;&amp;#039; Dinge tut.&lt;br /&gt;
&lt;br /&gt;
Der Test wird damit zu einem integralen Bestandteil der Software, wird mit dem&lt;br /&gt;
produktiven Code zusammen erstellt und gepflegt.&lt;br /&gt;
&lt;br /&gt;
= Test First Development =&lt;br /&gt;
Wie der Name schon andeutet, wird die Erstellung des Unit-Tests der Erstellung &lt;br /&gt;
des Produktiv-Codes vorangestellt. Das hat schon den unmittelbaren Vorteil,&lt;br /&gt;
daß nicht implementiert wird, wenn nicht klar ist was getan werden soll.&lt;br /&gt;
&lt;br /&gt;
Dieses Vorgehen hat damit zwei Schritte:&lt;br /&gt;
# Schreibe einen Test der die Funktionalität testet und fehlschlägt (Test ist &amp;quot;rot&amp;quot;)&lt;br /&gt;
# Implementiere die Funktionalität bis der Test durchläuft (Test ist &amp;quot;grün&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Die Herausforderung besteht -- zumindest am Anfang -- darin, Probleme so in&lt;br /&gt;
einzelne Funktionalitäten zu schneiden, daß sie sich in einfachen Unit-Tests&lt;br /&gt;
testen lassen. Das Schreiben der Tests ist eine Fähigkeit die man sich durch Üben&lt;br /&gt;
recht schnell aneignen kann.&lt;br /&gt;
&lt;br /&gt;
Dieses Vorgehens hat folgende Vorteile:&lt;br /&gt;
* Die Test-Erstellung wird nicht vergessen&lt;br /&gt;
* Am Ende der Implementierung ist der Code  mit Tests vollständig abgedeckt und dokumentiert&lt;br /&gt;
* Der Code kann bei Erweiterung mit Unit-Tests abgesichert werden&lt;br /&gt;
* Es ist klar dokumentiert, was der produktive Code tun soll&lt;br /&gt;
&lt;br /&gt;
= Test Driven Development (TDD) =&lt;br /&gt;
Gerät durch das sture Hinzufügen einzelner Features der Blick auf das Gesamtprogramm aus dem Fokus,&lt;br /&gt;
wird das Endergebnis als ein Haufen zusammengeworfener Methoden und Klassen dastehen.&lt;br /&gt;
Zwar garantieren die Tests, daß das Programm tut was es soll, aber der arme Mensch der das später&lt;br /&gt;
erweitern soll wird keine Freude daran haben.&lt;br /&gt;
&lt;br /&gt;
Durch Hinzufügen eines weiteren Schritts kann man das Verfahren zum TDD ausweiten&lt;br /&gt;
wie Kent Beck es im Rahmen des &amp;quot;extreme Programming&amp;quot; beschrieben hat (citation?).&lt;br /&gt;
&lt;br /&gt;
Halte nach jedem Schritt (bzw. nach jedem grün gewordenen Test) inne und sieh Dir das Gesamtprodukt an.&lt;br /&gt;
Überlege Dir:&lt;br /&gt;
*Kann ich etwas besser machen?&lt;br /&gt;
*Kann ich etwas zusammenfassen?&lt;br /&gt;
*Kann ich etwas verallgemeinern?&lt;br /&gt;
Setze Maßnahmen, die Dir sinnvoll scheinen um und überprüfe das Ergebnis anhand der Unit-Tests.&lt;br /&gt;
&lt;br /&gt;
Wichtig dabei ist:&lt;br /&gt;
{{quotation|Die Änderungen dürfen keine Änderungen an der bestehende Funktionalität mit sich bringen}}&lt;br /&gt;
&lt;br /&gt;
Dieses Vorgehen –- man nennt es Refactoring –- erfordert Übung und Erfahrung.&lt;br /&gt;
Zögere nicht, Kollegen hinzuzuziehen, wenn Du damit Schwierigkeiten hast oder Anregungen brauchst.&lt;/div&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
</feed>