Kurs "Professionelle Softwareentwicklung"
Beschreibung
Ein Universitätsstudium in Informatik dreht sich hauptsächlich um Konzepte.
Das ist grundsätzlich sinnvoll, denn diese Konzepte sind erheblich langlebiger
und breiter anwendbar als konkrete Einzelheiten es wären.
Leider bleibt dabei vieles Detaillierte, das für konkrete
Softwareentwicklung aber nun mal wichtig ist, weitgehend auf der Strecke.
Dieses Defizit soll diese Veranstaltung reduzieren.
Auch hier geht es zwar zum großen Teil um Konzepte, aber immer nur um solche,
die
direkt mit Softwareentwicklung zu tun haben und anhand konkreter,
persönlicher, praktischer Anwendung -- und zwar (im Gegensatz zu den meisten
Softwareprojekt-Lehrveranstaltungen) mit gemeinsamer Reflektion über die
Anwendung.
Die besprochenen und eingeübten Konzepte lassen sich drei verschiedenen (aber
mit einander eng verbundenen) Sphären zuordnen:
- Softwareentwurf und -strukturierung (und zwar objektorientiert)
- Vorgehensmethoden (z.B. in den Bereichen Prototyping, Automatisierung, inkrementelle Verbesserung)
- Persönlichkeitsentwicklung (Aspekte wie Konsequenz, Verantwortlichkeit, Kommunikationsfertigkeiten)
Wichtig: Jede/r Teilnehmer/in muss ein bereits weit vor der Veranstaltung begonnenes
Softwareprojekt haben (bei einer Firma, Forschungsgruppe, für eine Firmengründung oder als
Open-Source-Projekt), an dem er/sie über die gesamte Dauer dieser Lehrveranstaltung
hinweg jede Woche mitarbeitet (in aller Regel im Team)
und das als Umgebung für das Einüben der Konzepte dient.
Dies ist eine zwingende Teilnahmevoraussetzung.
Organisatorisches
Veranstalter
- LutzPrechelt: Methodenkurs (vorlesungsähnlich) und Praxisseminar (übungsähnlich)
Voraussetzungen/Zielgruppe, Einordnung, Leistungpunkte etc.
Unverzichtbare Voraussetzung für die Teilnahme ist ein
eigenes Softwareprojekt wie oben beschrieben, das für die gesamte Dauer der
Veranstaltung mit mindestens 6 Wochenstunden von für die Themen dieser
Veranstaltung frei verfügbarem(!) Aufwand weitergeführt wird.
Zielgruppe sind Studierende, die durch intensives Üben Fertigkeiten
aufbauen möchten, die gute und professionell arbeitende
Softwareentwickler/innen benötigen.
Die Veranstaltung ist eine Wahlveranstaltung für den Studiengang
Master Informatik mit 5 Leistungspunkten.
Termine und Nachrichten
- Methodenkurs (vorlesungsähnlicher Teil): freitags 10:00 – 12:00 Uhr, SR 053 @ Takustr. 9
- Praxisseminar (praktische Übungen): freitags 12:00 – 14:00 Uhr, SR 053 @ Takustr. 9
Prüfungsmodalitäten
Zur Note zählen die einzelnen Arbeitsergebnisse,
sie Sie für die jeweiligen Übungsaufgaben erbringen und in der
Veranstaltung vorstellen (so genannte "Portfolioprüfung"; die Vorstellung selbst ist dabei ein wichtiger Bestandteil
dieses Arbeitsergebnisses, denn seine Werke und Tätigkeiten angemessen
erklären zu können ist eine wichtige Kompetenz).
Es zählen ferner die Intensität und Qualität der Teilnahme an der
allgemeinen Diskussion in der Übung.
Eine Abschlussprüfung (als Klausur oder mündliche Prüfung) gibt es nicht.
Stoffplan
- 2018-10-19:
- V: Professionalität und Verantwortung (Folien)
[ClCr]: Kap. 1–3, [PrPr]: Kap. 1, [CoCo]: Kap. 33–34
- Übung: Die erste Hälfte der Teilnehmenden stellen ihr Projekt vor:
- Anforderungen: Was ist es? Wozu dient es? Was tut es? Wer benutzt es?
- Prozess: Wer entwickelt es? Mit welchen Technologien? Mit welchen Prozessen? Was ist meine Rolle dabei?
- Qualität: Welche Schwächen hat die Software bei z.B. Entwurfsqualität, Codestruktur, Defektdichte, Dokumentation, Testautomatisierung, Qualitätssicherung, Entwicklungsprozesse etc. pp.?
- 2018-10-26:
- V: Praktiken von Grad Rot von clean-code-developer.de (Folien)
- Prinzipien: Don´t Repeat Yourself (DRY); Keep it simple, stupid (KISS); Vorsicht vor Optimierungen! (VO); Favour Composition over Inheritance (FCoI); Integration Operation Segregation Principle (IOSP).
- Praktiken: Pfadfinderregel befolgen (BSR); Root Cause Analysis durchführen (RCA); Versionskontrollsystem einsetzen; Einfache Refaktorisierungen anwenden (Extract Method, Rename); Täglich reflektieren.
- Übung: Die zweite Hälfte der Teilnehmenden stellen ihr Projekt vor
- 2018-11-02:
- V: Praktiken von Grad Orange (Folien)
- Prinzipien: Single Level of Abstraction (SLA); Single Responsibility (SRP); Separation of Concerns (SoC); Source Code Konventionen.
- Praktiken: Limit WIP; Issue Tracking; Automatisierte Integrationstests; Lesen, Lesen, Lesen; Reviews.
- Übung: 5–10 aus dem Hut Gezogene stellen zu je zwei der Praktiken der Vorwoche (also Rot) vor, a) welchen Zustand ihr Projekt/Code bzw. ihr eigenes Verhalten hatte b) was sie unternommen haben, um diesen Zustand zu verbessern Das ist jeweils mit konkreten Codebeispielen zu untermauern.
- 2018-11-09:
- V: Praktiken von Grad Gelb (Folien)
- Prinzipien: Interface Segregation (ISP); Dependency Inversion Principle (DIP)/Dependency Injection (DI); Liskov Substitution Principle (LSP); Principle of Least Astonishment (PLA); Information Hiding (IH).
- Praktiken: Automatisierte Unit Tests; Mockups (Testattrappen); Code Coverage Analyse; Teilnahme an Fachveranstaltungen; Komplexe Refaktorisierungen.
- Übung: wie vor zu Grad Orange
- 2018-11-16:
- V: Praktiken von Grad Grün (Folien)
- Prinzipien: Open Closed Principle (OCP); Tell, don´t ask (TDA); Law of Demeter (LoD).
- Praktiken: Continuous Integration (CI); Statische Codeanalyse (Metriken); Inversion of Control Container (ICC); Erfahrung weitergeben; Messen von Fehlern.
- Übung: wie vor zu Grad Gelb
- 2018-11-23:
- V: Praktiken von Grad Blau (Folien)
- Prinzipien: Entwurf und Implementation wiederholen einander nicht; Implementation spiegelt Entwurf; You Ain't Gonna Need It (YAGNI)/Defer Commitment;.
- Praktiken: Continuous Delivery (CD); Iterative Entwicklung; Komponentenorientierung; Test first.
- Übung: wie vor zu Grad Grün
- 2018-11-30:
- V: Grad Weiß (Folien)
- Umfasst alle Prinzipien und Praktiken der vorherigen Grade zusammen: Übersicht nach thematischen Gruppen
- Kurze Wiederholung von Woche 1: Professionalität und Verantwortung
- Allgemeine Lehren: Begriffe hinterfragen!; Zweck im Auge behalten!; Maß halten!!
- Beispiele für Themen, die wir nicht besprochen haben
- Einstieg in das Thema der nächsten Woche: Agiles Testen
- Übung: wie vor zu Grad Blau
- 2018-12-07:
- V: Agiles Testen
Testarten; Zweck: Risiken reduzieren; Kosten und Gefahren von Tests; Eigenschaften guter Testsuites; Methoden: Attrappen/Isolation, Test-First/Test-Last, outside-in/inside-out/middle-out, TDD; gemeinsame TDD-Übung (Randori)
- Übung: wie vor zu Grad Weiß (also wahlfrei)
- 2018-12-14:
- V: Arbeiten mit Altcode (Agiles Testen, Teil 2)
Von der Theorie zur Praxis: Testbarkeit herstellen bei Legacy Code, Rollen von Refactoring
- Übung: zum Einüben von TDD 2 Katas von cyber-dojo.org in Paararbeit (mit Ping Pong Pair Programming) machen und darüber berichten: Probleme, Aha-Erlebnisse, Erfolgserlebnisse.
- 2018-12-21:
- V: Zweiter Durchgang mit Grad Rot:
Einige komplexere Aspekte und Beispiele sind bislang nur angerissen worden und werden jetzt vertieft.
- Übung: Ein paar Integrationstests schaffen an einer Stelle, wo bislang keine Testbarkeit gegeben ist, aber eine Änderung ansteht.
- 2019-01-11:
- V: Zweiter Durchgang mit Grad Orange
- Übung: Einsatz von weiteren zwei der Prinzipien und Praktiken von Grad Rot.
- 2019-01-18:
- V: Zweiter Durchgang mit Grad Gelb
- Übung: wie vor zu der Vertiefung von Grad Orange
- 2019-01-25:
- V: Zweiter Durchgang mit Grad Grün
- Übung: wie vor zu der Vertiefung von Grad Gelb
- 2019-02-01:
- V: Zweiter Durchgang mit Grad Blau
- Übung: wie vor zu der Vertiefung von Grad Grün
- 2019-02-08:
- Keine Vorlesung mehr, sondern im ersten Zeitabschnitt Übung, im zweiten Fazit.
- Übung: wie vor zu der Vertiefung von Grad Blau
- Persönliches Fazit:
- Welche Prinzipien und Praktiken habe ich schon (halbwegs) stabil in mein Verhalten aufgenommen?
- Welche zwei bis vier davon erscheinen mir am wertvollsten? Warum?
- Für welche zwei bis vier erwarte ich, dass ihr Wert für mich künftig noch stark zunehmen wird? Warum?
- Mit welchen ringe ich noch? Warum klemmt es da?
- (Diese Gruppen müssen nicht alle Praktiken abdecken)
Quellen
Unsere Hauptquelle
Bücher
- [ClC] Robert Martin: Clean Code: A Handbook of Agile Software Craftsmanship, (bei Safari, Zusammenfassung)
- Robert Martin (voller Name Robert C. Martin) firmiert auch häufig unter Bob Martin oder unter Uncle Bob.
- ersatzweise gibt es auch eine lange Reihe von Artikeln, die frei verfügbar sind und ähnliches Material enthalten
- [ClCr] Robert Martin: The Clean Coder: A Code of Conduct for Professional Programmers, (bei Safari, Zusammenfassung)
- [CoCo] Steve McConnell: Code Complete, 2nd ed., (bei Safari)
- [Legacy] Michael Feathers: Working Effectively with Legacy Code (Präsentation dazu, Vorläufer-Artikel)
- [PrPr] Andrew Hunt, David Thomas: The Pragmatic Programmer: From Journeyman to Master, (bei Safari, Zusammenfassung)
- [SpecByEx] Gojko Adzic: Specification by Example: How successful teams deliver the right software (bei Amazon)
- [TDD] Lasse Koskela: Test Driven: Practical TDD and Acceptance TDD for Java Developers (bei Safari)
- [XP2] Kent Beck: Extreme Programming Explained: Embrace Change, Second Edition (bei Safari)
- [xUTP] Gerard Meszaros: xUnit Test Patterns: Refactoring Test Code (siehe Website xunitpatterns.com für die meisten der Buchinhalte; Buch bei Safari)
Auf viele der Bücher aus obiger Liste bekommt man Volltextzugriff,
indem man ein
Safari-Abonnement
abschließt oder indem man
professional member bei der ACM
wird.
Wissenschaftliche Artikel
- [ClonesMatter] Juergens, Deissenboeck, Hummel, Wagner: Do code clones matter?
- [CloneEvol] Pate, Tairas, Kraft: Clone Evolution: a systematic review, Journal of Software: Evolution and Process 25(3):261–283, Wiley, 2013.
- [EvoVis] Wettel, Lanza: Visual Exploration of Large-Scale System Evolution, 15th Working Conf. on Reverse Engineering, IEEE CS, pp.219–228, 2008
- [HowRefac] Murphy-Hill, Parnin, Black: How we refactor and how we know it, IEEE Trans. on Software Engineering 38(1):5–18, 2012.
- [Quasar] Siedersleben, Denert: Wie baut man Informationssysteme: Überlegungen zur Standardarchitektur, Informatik Spektrum 23(4):247–257, 2000.
Auf diese Artikel bekommt man mit einer FU-Berlin-IP-Adresse automatisch
Volltextzugriff. Nötigenfalls also VPN benutzen.
Online-Quellen
- [AOP] Laddad: I want my AOP!, JavaWorld, 2002
- [DesignDead] Fowler: Is Design Dead?, 2004
- [IoCSaros] Zieris: IoC-Beispiele aus Saros
- [LazOpt] Auer, Beck: Lazy Optimization (a pattern language), ~1996
- [MicroSvc] Fowler: Microservices, 2014
- [MockStub] Fowler: Mocks Aren't Stubs, 2007
- [MsgProgModel] Westphal: Messaging as a Programming Model, ...-2016
- [PrPrT] Online-Liste der Tipps aus "The Pragmatic Programmer", 1999
- [Smells] Mäntila/Lassenius: A Taxonomy for "Bad Code Smells" , 2006
- [SuffDesign] Kerievsky: Sufficient Design, 2010
- [StatDyn] Robert Martin: Are Dynamic Languages Going to Replace Static Languages?, 2003
- [TDDblog] Bache: Coding is like cooking, ongoing (blog on various topics, often testing)
Blick über den Zaun
Diese Quellen betreffen nicht die Themen, die wir hier im Kurs direkt besprechen,
sondern angrenzendes.
- Suzanne und James Robertson: Requirements in Agile Projects (Audio, 60 Minuten)
Ein Interview von Software Engineering Radio über den richtigen Blickwinkel auf agile SW-Entwicklung insgesamt und die dafür nötige Kultur. Sehr empfehlenswert.
Historie des Stoffplans (Durchführung nur jedes zweite Jahr)
- 2014: erste Durchführung
- 2016: Roter Grad ergänzt um Integration Operation Segregation Principle (IOSP)
- 2018: Oranger Grad ergänzt um Limit WIP
Kommentare
Wenn Sie Anmerkungen oder Vorschläge zu dieser Seite haben, können Sie sie
hier (möglichst mit Datum und Name) hinterlassen:
SWTIDSR