Stufe 1: Roter Grad von CCD - Lutz Prechelt Institut für Informatik, Freie Universität Berlin
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Aldo Cavini Benedetti, Flickr Bevor wir starten: 4 wichtige Begriffe AG Software Engineering, Institut für Informatik, Freie Universität Berlin 2
1. "Abwägung" dance-dream.de fritz-berger.de • Kosten/Aufwand gegen Nutzen oder • verschiedene Vorteil/Nachteil-Kombinationen gegen einander Ist schwierig wegen: AG Software Engineering, Institut für Informatik, Freie Universität Berlin 3
2. "Risiko" • Möglichkeit eines unerwünschten Ereignisses • z.B. Aufwand (Nutzen bleibt aus), Defekt, schlechte Lesbarkeit • Eintrittswahrscheinlichkeit • bei uns meist sehr unklar • Schadenshöhe • bei uns oft unklar Benötigt wird: http://i.imgur.com/B2QZHtr.jpg AG Software Engineering, Institut für Informatik, Freie Universität Berlin 4
3. "Zutrauen" ("confidence") • Gewissheit von "Eintrittswahrscheinlichkeit ist genügend niedrig" Problem im Kurs dabei oft: peter heck AG Software Engineering, Institut für Informatik, Freie Universität Berlin 5
4. "Kurpfuscherei" ("snake oil") • Behauptete Wirkung einer Technik tritt nicht immer ein James Gillray - Der Aderlass (um 1805) AG Software Engineering, Institut für Informatik, Freie Universität Berlin 6
Also bitte… …nicht zu leicht beeindrucken lassen Äh, wo waren wir? Ach ja: Stefano Mortellaro, Flickr AG Software Engineering, Institut für Informatik, Freie Universität Berlin 7
Übersicht Prinzipien: Praktiken: • Don't Repeat Yourself (DRY) • Pfadfinderregel befolgen • Keep it simple, stupid • Root Cause Analysis (KISS) durchführen (RCA) • Vorsicht vor Optimierungen! • Versionskontrollsystem • Favour Composition over einsetzen Inheritance (FCoI) • Einfache Refaktorisierungen • Integration/Operation anwenden Segregation Principle (IOSP) • Extract Method, Rename • Täglich reflektieren Gestalt des Codes Eigenes Verhalten AG Software Engineering, Institut für Informatik, Freie Universität Berlin 9
Don't Repeat Yourself (DRY) • Was? • Hinderungsgrund: • Redundanz im Code • Anfangs ist Code mit vermeiden Redundanz oft sehr viel • Logik schneller zu produzieren • Daten, Konstanten • Annahmen! • Wofür? • Evolvierbarkeit • Korrektheit • Produktionseffizienz (immer gleicher Aufbau der ersten Folie) AG Software Engineering, Institut für Informatik, Freie Universität Berlin 10
Don't Repeat Yourself (DRY) • Arten von Verletzungen: • Hilfreiche Techniken: • Erhöhen den Pflegeaufwand • Abstraktion • Code-Klone • Unterprogramme, Klassen, • Werden sehr oft Konstanten etc. inkonsistent geändert • Funktionale Programmierg. (Defekte) • Aspekt-orientierte [CloneEvol, ClonesMatter] Programmierung (manchmal) • Verstreut hartkodierte • Convention over configurat. Annahmen aller Art • Objekt-relationales Mapping • z.B. Stringformate mit Schemamanagement • Domänenspezif. Sprachen (DSLs), Generatoren • auch Javadoc u.ä. AG Software Engineering, Institut für Informatik, Freie Universität Berlin 11
Don't Repeat Yourself (DRY) nicht übertreiben • Für alle Regeln in diesem • Beispiel für Übertreiben: Kurs gilt: • Clean Code, Ch.14, p.195: Maß halten ist wichtig! • Bibliothek zur Verarbeitung v. Kommandozeilen-Args. • Was, wenn man diese • DRY übertreiben heißt: erlaubten Formate in einer Zu viel Aufwand für die Fehlermeldung auflisten Redundanzvermeidung möchte? treiben • Falsch: • Ziel ist • Formate in Konstanten- Komplexitäts-Reduktion! Array speichern • Indices als symbolische Konstanten definieren • Richtig: • Redundanz in Kauf nehmen • Kommentar an Else-If- Ansichtssache! Kette kleben, der darauf hinweist AG Software Engineering, Institut für Informatik, Freie Universität Berlin 12
Don't Repeat Yourself (DRY) auf Prozessebene • Auch mehrfach wiederholte Tätigkeiten verletzten DRY • Dagegen hilft • Automatisierung (z.B. Build, Tests, Release/Deployment) • Teamkoordination • Firmenweite Koordination AG Software Engineering, Institut für Informatik, Freie Universität Berlin 13
Keep it simple, stupid (KISS) AG Software Engineering, Institut für Informatik, Freie Universität Berlin 14
Keep it simple, stupid (KISS) • Was? • Hinderungsgrund: • Versuche überall • Einfach ist oft schwierig (Architektur, • Saint-Exupéry: "Perfektion Klassenentwurf, Logik, ist nicht dann erreicht, Datenstrukturen, wenn es nichts mehr Infrastruktur usw. usf.) hinzuzufügen gibt, einfache Lösungen zu finden sondern wenn man nichts mehr • Verwende kompliziertere weglassen kann." nur, wenn es gewichtige • Unbedingt Maß halten! Gründe für sie gibt • Ob ein Grund gewichtig ist, ist oft unklar • Wofür? • Ob etwas einfach wirkt, • Evolvierbarkeit hängt vom Vorwissen ab • Korrektheit • Siehe "Simplicity by • Produktionseffizienz Design" in Java EE 6 2 AG Software Engineering, Institut für Informatik, Freie Universität Berlin 15
Kleiner KISS-Scherz: AG Software Engineering, Institut für Informatik, Freie Universität Berlin 16
Keep it simple, stupid (KISS) • XP1's rules of simple design • Hilfreiche Techniken: [DesignDead]: • Funktionalität ganz 1. Runs all the tests weglassen • tests are comprehensive • Inkrementelle Entwicklung and do not fail • Mehrere Entwerfer fragen 2. Reveals all the intention 3. Contains no duplication • OAOO: Do it once and only once (=DRY) 4. Has the smallest number of classes or methods • 4 ist das Gegengift gegen übertriebene Anwendung der hiesigen Ideen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 17
Keep it simple, stupid (KISS): vorher/nachher Beispiel Vorher: schlecht • Saros hat Operationen auf Dateiebene (FileUtils.java). 2 • Deren Teile wurden intern mittels WorkspaceRunnables zu atomaren Transaktionen zusammengefasst. • Tatsächlich enthielt aber jede Transaktion ohnehin nur 1 Operation • (Plus noch zwei andere überflüssige Sachen) Nachher: gut • 230 LOC eingespart, auch mehrere komplexe Methoden • https://github.com/saros-project/saros/commit/3adb19a • Man lasse mengenmäßig rot (=entfernt) und grün (=neu) auf sich wirken. • Die Änderungen sind im Detail schwierig zu verstehen, weil viele Methoden fusioniert werden AG Software Engineering, Institut für Informatik, Freie Universität Berlin 18
Keep it simple, stupid (KISS) auf Prozessebene • KISS gilt nicht nur für das Produkt, sondern auch für alle Methoden und Arbeitsprozesse Und für die Berührstellen (Abhängigkeiten) der beiden: • "Simple" heißt auch, die Qualitätsmaßstäbe geeignet an die Umstände anzupassen • Beispiel: Unsauberkeit im Code belassen, wenn • das Aufräumen viel Arbeit macht • aber die Unsauberkeit fast keine Probleme erwarten lässt. • Beispiel im Artikel [SuffDesign]: • einen "return null"-Smell im Code belassen, weil nur wenige alltägliche Änderungen dem Smell begegnen, 2 aber viele Änderungen nötig wären, ihn zu beseitigen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 19
Keep it simple, stupid (KISS) auf Metaebene • Viele der Prinzipien in diesem Kurs sind Konkretisierungen von KISS • z.B. SLA, SRP, SoC, LSP, YAGNI • Die Mehrzahl von diesen führt jedoch von KISS weg, wenn man die Anwendung übertreibt • z.B. alle obigen • Eine zusätzliche, sehr wichtige Konkretisierung lautet deshalb: Sei nicht dogmatisch bei der Anwendung von Prinzipien! AG Software Engineering, Institut für Informatik, Freie Universität Berlin 20
KISS: The Zen of Python 2 • http://legacy.python.org/de • Special cases aren't special v/peps/pep-0020/ enough to break the rules. • Beautiful is better than ugly. • Although practicality beats purity. • Explicit is better than implicit. • Errors should never pass silently. • Simple is better than complex. • Unless explicitly silenced. • Complex is better than • In the face of ambiguity, complicated. refuse the temptation to • Flat is better than nested. guess. • Sparse is better than dense. • There should be one-- and • Readability counts. preferably only one -- obvious way to do it. (plus 6 other, less important rules) AG Software Engineering, Institut für Informatik, Freie Universität Berlin 21
KISS: Nochmal eine Definition 2 KISS bedeutet • das Unnötige bleiben lassen • das Nötige tun • und zwar auf die geradlinigste, robusteste, einleuchtendste Art, die man mit moderatem Aufwand finden kann. • Das Problem: • Die Begriffe geradlinig, robust, einleuchtend, moderat sind allesamt auslegungsbedürftig. • Wir kommen um Urteilskraft nicht herum AG Software Engineering, Institut für Informatik, Freie Universität Berlin 22
Das vielleicht schwierigste Prinzip von allen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 23
Vorsicht vor Optimierungen! • Was? • Hinderungsgrund: • Optimiere nur, wo das • Manchmal juckt es einen wirklich nötig ist halt… • Denn unnötige Optimierung • Gelegentlich ist es schwierig kostet Aufwand und macht herauszufinden, wo eine den Code meistens Optimierung hin muss fehleranfällig, schwer zu verstehen und schwer zu ändern • (Donald Knuth: "Premature optimization is the root of all evil") • Diskussion • Wofür? • Evolvierbarkeit • Korrektheit • Produktionseffizienz AG Software Engineering, Institut für Informatik, Freie Universität Berlin 24
Vorsicht vor Optimierungen! • Arten von Verletzungen: • Hilfreiche Techniken: • Unnötig komplizierte • Rules of Optimization Algorithmen/Verfahren 1. Don't do it. • Unnötiges Caching 2. For experts only: • Verzicht auf Don't do it yet Fehlerprüfungen (Michael A. Jackson) • Verzicht auf Abstraktion • Überschlagsrechnungen • Einsparen weniger, • Teile ganz weglassen schneller Anweisungen • insbes. Ein-/Ausgaben: Platte, Netz, Bildschirm • etc. • Profiling 2 • Lazy Optimization [LazOpt] • Eine Mustersprache AG Software Engineering, Institut für Informatik, Freie Universität Berlin 25
Vorsicht vor Optimierungen!: Negativ- und Positivbeispiel • Negativ: • Positiv anschließend: • Oracle-Transaktionsanwdg. • Was wirklich half: Nicht lief zu langsam mehr zu Beginn 1 Satz in • Berater empfahl die leere Markertabelle Entfernung von Dutzenden schreiben und am Ende "if global_debug_flag then wieder löschen call trace routine" • Datensatz 1 ist bei Oracle • Quatsch!, denn: sehr langsam • Jede Transaktion umfasste • Dadurch wurde die Anwdg. ~200 solche Abfragen, um Faktor 3 schneller! aber auch ~20 DB-Abfragen • Negativ: 2 • Singleton-Cache für ein wichtiges Objekt zerbrach die Testisolation bei "anwesende" (Django) • Zugriff war aber gar nicht sehr häufig AG Software Engineering, Institut für Informatik, Freie Universität Berlin 26
Favour Composition over Inheritance (FCoI) • Was? • Hinderungsgrund: • Verwende Vererbung nur • Faulheit für is-a-Beziehungen • Zufügungen zu einer • nicht zur Wieder- Oberklasse verwendung von Methoden • und dabei übersehen: Nicht • In allen anderen Fällen alle Unterklassen brauchen bette hilfreiche Objekte dies! lieber ein (Komposition) • aktuelle oder künftige und schreibe einzeilige Methoden zur Verwendung (Delegation) • Wofür? • Evolvierbarkeit • Korrektheit AG Software Engineering, Institut für Informatik, Freie Universität Berlin 27
Favour Composition over Inheritance (FCoI) • Effekte von Verletzungen: • Hilfreiche Techniken: • Verwirrende • Komposition und Delegation Klassenhierarchie • die GoF-Entwurfsmuster • Hohe Kopplung (zur basieren oft darauf Oberklasse) • Erlaubt Auswählen/Aus- • evtl. ungünstige tauschen zur Laufzeit Methodennamen • Schlechtere Testbarkeit • Aber: • Unsinnige Methoden mit • Evtl. ist Vererbung geerbt einfacher zu verstehen • Abwägung nötig • Beispiel von Melle Koning 2 AG Software Engineering, Institut für Informatik, Freie Universität Berlin 28
Favour Comp. over Inheritance (FCoI): Negativbeispiele (zu wenig) 1. FCoI/apache-aries-MDBStats.java (lokal) • Singleton-Klasse! • benötigt von Oberklasse nur: manche Leseoperationen • aber z.B. nicht: containsValue, put, putAll 2. Beispiel von https://de.wikipedia.org/w/index.php?title=Mixin&oldid=130573817 Aua! AG Software Engineering, Institut für Informatik, Freie Universität Berlin 29
Integration/Operation Segregation Principle (IOSP) • Was? • Wofür? • Unterscheide Methoden • Evolvierbarkeit streng in zwei Sorten: • Korrektheit • Operationen: Kontrollstrukturen und Fremd-API-Aufrufe • aber keine Aufrufe der Häh? Wie soll das denn eigenen Codebasis gehen? Kein 'if'? • Integrationen: nur Aufrufe anderer Methoden dieser Codebasis • Spezialfall des Single oder: Responsibility Principle • Aufrufer einer Methode (SRP) verarbeitet nie selbst einen • Orangener Grad Rückgabewert • [MsgProgModel] AG Software Engineering, Institut für Informatik, Freie Universität Berlin 30/46
Übersicht Prinzipien: Praktiken: • Don't Repeat Yourself (DRY) • Pfadfinderregel befolgen • Keep it simple, stupid • Root Cause Analysis (KISS) durchführen (RCA) • Vorsicht vor Optimierungen! • Versionskontrollsystem • Favour Composition over einsetzen Inheritance (FCoI) • Einfache Refaktorisierungen • Integration/Operation anwenden Segregation Principle (IOSP) • Extract Method, Rename • Täglich reflektieren Gestalt des Codes Eigenes Verhalten AG Software Engineering, Institut für Informatik, Freie Universität Berlin 31
Pfadfinderregel befolgen • Was? • (Anmerkung: • [ClC], S.14: • in Wirklichkeit heißt es bei "The Boy Scout Rule […] den Scouts nur: • If we all checked-in our "Leave No Trace") code a little cleaner than when we checked it out, the • Wofür? code simply could not rot. • Evolvierbarkeit • The cleanup doesn’t have to be something big. • Change one variable name • Hinderungsgrund: for the better, • zu fokussiert auf aktuelles • break up one function eigenes Ziel that’s a little too large, • zu faul • eliminate one small bit of • es ist schon alles super duplication, • clean up one composite if statement." AG Software Engineering, Institut für Informatik, Freie Universität Berlin 32
Pfadfinderregel befolgen • Martin Fowler nennt das • Hilfreiche Techniken: "Opportunistic Refactoring" • Code smells kennen • dann sind eigene Zeitabschnitte für [Smells] • Aber immer schön 2 Refactoring unnötig locker bleiben, bitte! • weil sich Technische • IDE gut beherrschen Schulden (technical debt) • Nicht ärgern, sondern gar nicht erst ansammeln handeln • siehe Dilbert • [HowRefac]: Refactoring nebenbei ("Zahnseide") ist viel häufiger als massenhaftes Refactoring ("Wurzelbehandlung") AG Software Engineering, Institut für Informatik, Freie Universität Berlin 33
Pfadfinderregel befolgen: Positivbeispiel • Saros benutzt eine ganze Reihe Threads • Für das Debugging ist es hilfreich, deren Zweck leicht zuordnen zu können. • Leider waren die Namen unsystematisch. • Diese Änderung räumt (nur) diese Namen auf: https://github.com/saros-project/saros/commit/7c9bae AG Software Engineering, Institut für Informatik, Freie Universität Berlin 34
Pfadfinderregel befolgen: Negativbeisp. ("broken window theory") Broken Windows Theory (Wikipedia) AG Software Engineering, Institut für Informatik, Freie Universität Berlin 35/46
Pfadfinderregel befolgen: Negativbeispiel (zu wenig) 2 • Dieser größere Patch für Saros fügt mehrere Tests zu • auch ganze Klassen • und räumt nebenbei einige Kleinigkeiten auf. • Pfadfinderregel wird also angewendet! • Dabei werden in JIDTest.java • sowohl 2 neue Tests zugefügt (Z49-78neu) als auch • zwei schlechte Namen verbessert (Z83,91). • Leider gehören die beiden alten TO DO-Kommentare in Z80,88 jetzt eigentlich vor testMalformedJID (Z73) gezogen. • Hier hat der Pfadfinder also geschlafen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 36
Root Cause Analysis durchführen (RCA) • Was? • Hinderungsgrund: • Wenn ein Problem auftritt • Kognitiv evtl. schwierig (Defekt oder anderes), • Relevante Fakten oft beseitige es nicht nur, schwierig zu ermitteln sondern ermittle die ganze • Für die Betroffenen oft Ursachenkette, um den Ur- peinlich Grund (eine frühe Ursache) abstellen zu können • Wofür? • Reflexion AG Software Engineering, Institut für Informatik, Freie Universität Berlin 37
Root Cause Analysis durchführen (RCA) • Phänomene ohne: • Hilfreiche Techniken: • Prozessverbesserung erfolgt • Verletzte Prinzipien nur langsam aufdecken • Erfahrungslernen erfolgt • und dann weiter "Warum?" nur langsam fragen • Man erkennt Problemlagen • Gute Bücher oder Artikel zu wieder, kann sich aber nicht denkbaren Ursachen lesen mehr erinnern, wie sie sich • Kolleg_innen fragen beim letzten Mal lösen ließen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 38
Root Cause Analysis durchführen (RCA): Nicht-Software-Beispiel • Nach der Explosion des Space • Auslösender Grund des Shuttle Challenger 1986 suchte Unfalls: Die Start-Entschei- Richard Feynman in der Unter- dungsprozesse gaben den Ingenieuren zu wenig Stimme. suchungskommission auch nach soziologischen Ursachen • Fazit (Urgrund): "[NASA officials] must be realistic in • Sein Ergebnis: making contracts, in estimating • Direkter Grund: O-Ring costs, and the difficulty of the undicht projects. […] For a successful • Der war schon früher durch technology, reality must take Beschädigungen aufgefallen. precedence over public Diese waren unerwartet. relations, for nature cannot be • Für Ingenieure bedeutet so fooled." etwas höchste Alarmstufe. • Management befand die Konstruktion für flugtauglich, wegen d. "Sicherheitsreserven" • Die Reserven kennt man aber nur, wenn man die Konstruk- tionseigenschftn versteht. Das war hier nicht der Fall. • AG Software Engineering, Institut für Informatik, Freie Universität Berlin 39
Versionskontrollsystem einsetzen • Was? • Hinderungsgrund: • Verwalte allen Quellcode • schreiende Ignoranz und andere Artefakte des ganzen Teams stets in einer Versionsverwaltung • Wofür? • Korrektheit • Produktionseffizienz • Reflexion AG Software Engineering, Institut für Informatik, Freie Universität Berlin 40
Versionskontrollsystem einsetzen • Symptome ohne: • Hilfreiche Techniken: • Strenge Eigentümerschaft • Just do it von Code • Git verstehen • Manuelle Absprachen über • Ziemlich kompliziert, aber Änderungserlaubnis an für Könner unerhört Datei X hilfreich • Seltene Integration von • Git ist faktisch ein Änderungen im Team Dateibaum-Änderungs- • Defekte, die nach Editor Beseitigung erneut "auftauchen" • Verlust von Quellcode • ab dann: Änderungen auf Assembler-Ebene 2 • Lesen: Kapitel 3, 7, A3 im Pro Git Buch AG Software Engineering, Institut für Informatik, Freie Universität Berlin 41
Versionskontrollsystem einsetzen: Negativbeispiel Ca. 1992: • Bei der Entwicklung des Modula-2* Compilers trat ein Defekt auf, dessen Debugging zwei Tage dauerte • Zwei Wochen später nochmal einer gleicher Schwere • Wieder langes Debugging • Der stellte sich als derselbe heraus: Ein Entwickler hatte die letzten Änderungen versehentlich auf einer alten Kopie des Quellcode-Dateibaums gemacht AG Software Engineering, Institut für Informatik, Freie Universität Berlin 42
Versionskontrollsystem einsetzen: Arbeitsstil mit Git • Änderungen werden in die • Vollendete Teil-Änderungen kleinsten sinnhaltigen Teil- werden prompt auf den Änderungen zerlegt, Hauptzweig vereint • die noch in sich • Häufig, da Teil-Änd. klein abgeschlossen sind. • Probleme selten, da • Jede solche wird einzeln Vereinigung häufig eingecheckt • Bei Problemen ist • Mit einer klaren Lokalisierung einfach Beschreibung • Nach Abschluss wird der • Jede Änderung zunächst auf Zweig geschlossen einem privaten Zweig • Er dokumentiert ggf., • Defekte beim welche Teil-Änderungen Integrationstest lassen sich zusammen gehörten dann ggf. leicht lokalisieren • Durchsichten sind schnell http://git-scm.com/about und effektiv AG Software Engineering, Institut für Informatik, Freie Universität Berlin 43
Einfache Refaktorisierungen anwenden (Extract Method, Rename) • Was? • Hinderungsgrund: • Benenne blöd benannte • Faulheit Pakete, Klassen, Methoden, • Keine automatisierten Tests Variablen, Parameter etc. vorhanden ( Angst) um • Bei eigenem Code: • Extrahiere kleine Hilfs- Man bemerkt das Problem methoden aus unschön groß nicht gewordenen Methoden • Bei fremdem Code: Man ist evtl. zu sehr vom • Wofür? Verstehen abgelenkt • das sollte aber gerade das • Evolvierbarkeit Signal sein! • Reflexion AG Software Engineering, Institut für Informatik, Freie Universität Berlin 44
Einfache Refaktorisierungen anwenden (Extract Method, Rename) • Arten von Verletzungen: • Hilfreiche Techniken: • kryptische Namen • Entsprechende IDE- • nichtssagende Namen Operationen beherrschen • irreführende Namen • und ihre Grenzen kennen • hier sind dynamische • mehrdeutige Namen Sprachen im Nachteil! • lange Methoden • und Code so schreiben, • tiefe Verschachtelung in dass diese Grenzen wenig Methoden stören • Verletzungen von DRY oder • Kollegen nach Meinung über SLA, SRP, LoD meinen Code fragen • siehe nächste Wochen AG Software Engineering, Institut für Informatik, Freie Universität Berlin 45
Einfache Refaktorisierungen anwenden: Beispiele 1, 2 1. 2. Extract Method • Rename instance variable createAccountMenuItem() sarosSession session • Hier war zuvor das Prinzip • 11x in 1 Datei Single Level of Abstraction verletzt • Rename method accept run • siehe nächste Woche 2 • 2x in 2 Dateien • Es ist ein schlechtes • Rename method Zeichen, wenn Methoden start run mehrmals hintereinander • 2x in 2 Dateien wachsen • Dies ist in diesem Commit 2 kombiniert • plus: Exemplarvariable zugefügt, toter Code entfernt AG Software Engineering, Institut für Informatik, Freie Universität Berlin 46
Täglich reflektieren • Was? • Hinderungsgrund: • Reflektiere nach jedem • Angst vor der eigenen Arbeitspaket: Unvollkommenheit - Was war gut? • Denkfaulheit - Was nicht? Warum? - Was kann ich besser machen? Wie? • Zeitnot darf kein • Bilde genügend kleine Hinderungsgrund sein: Arbeitspakete • Reflektion senkt Stress, • ca. 0,5 bis 1 Tag weil man sich weniger als Opfer der Umstände fühlt • Wofür? • Reflexion AG Software Engineering, Institut für Informatik, Freie Universität Berlin 47
Täglich reflektieren • Phänomene ohne: • Hilfreiche Techniken: • Den "gleichen" Fehler • Aktuellen CCD-Grad mehrfach machen checklistenartig durchgehen • Dogmatisches Verfolgen • Vergleich mit ähnlichen von Regeln Situationen ein Jahr zuvor • Langsames Hinzulernen • Nach längerem Debugging • Wenige Lernerfolge werden und übersehenen bemerkt Anforderungen RCA machen • Mit Kolleg_innen diskutieren AG Software Engineering, Institut für Informatik, Freie Universität Berlin 48
Täglich reflektieren: Positivbeispiel (gelungen) • Ich habe mich mit dem TDD-Entwicklungsstil schwergetan • Das war mir durch Reflektion klar bewusst • Im Gespräch darüber mit einem TDD-Forscher fiel mir auf, dass das mit meinem Denkstil (MBTI intuitive, d.h. top-down- orientiert) zusammenhängen dürfte • Beim späteren Lesen über TDD fiel mir deshalb ein Rat sofort als sehr hilfreich auf: Testliste vorab formulieren AG Software Engineering, Institut für Informatik, Freie Universität Berlin 49
Übersicht Prinzipien: Praktiken: • Don't Repeat Yourself (DRY) • Pfadfinderregel befolgen • Keep it simple, stupid • Root Cause Analysis (KISS) durchführen (RCA) • Vorsicht vor Optimierungen! • Versionskontrollsystem • Favour Composition over einsetzen Inheritance (FCoI) • Einfache Refaktorisierungen • Integration/Operation anwenden Segregation Principle (IOSP) • Extract Method, Rename • Täglich reflektieren Gestalt des Codes Eigenes Verhalten AG Software Engineering, Institut für Informatik, Freie Universität Berlin 50
Hausaufgabe (nächste Wochen gehen analog) • Setzen Sie mindestens zwei • Stellen Sie uns das nächste der heutigen Elemente in Woche vor Ihrem Projekt ein • in max. 8 Minuten: • möglichst 1 Prinzip und • Erinnerung an Projekt 1 Praktik • Ausgangssituation • Gern auch mehr, • Probleme, Chancen wenn es sich ergibt • Praktik • Warum gerade diese? • Einsatzweise • Achtung: Wir interessieren • Wir machen später noch uns für die Praktik, einen zweiten Durchgang nicht für ihr Projekt 2 • Dann bitte andere • Kritik: Was war/ist gut, Prinzipien/Praktiken was noch nicht? auswählen • Reflektion: Was nehme ich daraus mit? AG Software Engineering, Institut für Informatik, Freie Universität Berlin 51
Danke! AG Software Engineering, Institut für Informatik, Freie Universität Berlin 52
Sie können auch lesen