====== Lessons Learned ====== ===== Probleme beim Entwickeln, die auf einen schlechten Entwurf hindeuten ===== * Methoden geben Arrays mit benannten Indizes (assoziative Arrays) zurück -> deutet auf die Notwendigkeit einer neuen Klasse (oder besser eines Structs) mit den Array-Indizes als Attribute hin * beim Entwickeln einer Klasse stellt man fest, dass sie am Besten von zwei Basisklassen erben sollte, um ihre Funktionalität zu implementieren -> die Klasse hat wahrscheinlich zu viele Verantwortlichkeiten und muss aufgeteilt werden * beim Erstellen von Tests für eine Klasse werden dieser Attribute/Methoden hinzugefügt, die nur vom Test benötigt werden und nicht von "normalen" Klassen -> diese Attribute/Methoden sollten eliminiert und die Vorgehensweise der Tests überdacht werden; wahrscheinlich werden Interna getestet, die besser anders geprüft werden sollten * Methoden in Interfaces haben unterschiedliche Abstraktionsstufen, z.B. ''LiesCsvDaten()'' (Textverarbeitung) und ''ErzeugePerson()'' (fachliche Logik). ===== Tägliche Arbeit ===== * Man kann jede (noch so langweilige) Routine-Programmieraufgabe zu einer interessanten machen, indem man dabei neue Dinge ausprobiert, z.B. "reines" TDD, 100% Code Coverage, Mutationstesten usw. \cite{RubyRogues47}