PowerSqueak: sieben Jahre alter Code, neun Sprints und ein Bug im Event-Routing
Im Kurs Softwaretechnik haben wir ein altes Präsentationstool in Smalltalk übernommen und weitergebaut. Meine Features: Folien-Sektionen und ein Präsentations-Timer.
Wer PowerSqueak startet und sofort tippt, tippt ins Leere. Der Tastaturfokus landete beim Start nicht im Tool. Klingt nach einer Zeile. Gefunden habe ich die Ursache erst im Event-Routing des UI-Frameworks selbst.
Das war einer von vielen kleinen Funden in diesem Semester. Im Kurs Softwaretechnik I haben wir, dasselbe Siebenerteam wie im Winter, ein bestehendes Open-Source-Tool übernommen: PowerSqueak, ein Präsentationsprogramm in Squeak/Smalltalk. Geschichte seit 2018, über 1.100 Commits, seit 2019 pausiert. Keine CI, eine veraltete Squeak-Version, 84 Prozent Testabdeckung. Brownfield, wie es im Lehrbuch steht.
Gearbeitet haben wir in neun Sprints mit einem echten Kunden, dem Lehrstuhl. Jeden Mittwoch ein Kundengespräch, Pair Programming an den Tagen danach, Schätzen mit Planning Poker. Das Schätzen hat bei uns am Anfang gehakt, also habe ich ein kleines Planning-Poker-Tool als Squeak-Morph gebaut, mit Tests.
Meine zwei Features kann man in der Demo auf dieser Seite ausprobieren, mit Beispielfolien. Das erste sind benannte, verschachtelte Sektionen. In der Seitenleiste mit den Folien-Miniaturen bekommt eine Gruppe von Folien eine Überschrift. Sektionen lassen sich in Sektionen stecken, mit Tab einrücken und wieder ausrücken, einklappen, verschieben und löschen, mit Rückfrage. Der eingeklappte Zustand wird gespeichert. Und beim Präsentieren springt man mit n und p zur nächsten oder vorigen Sektion.
Im Präsentationsmodus läuft oben links der LED-Timer (MM:SS). n/p springen zur nächsten/vorigen Sektion, t blendet den Timer aus, h pausiert.
Die wichtigste Entscheidung dabei: Eine Folie gehört über ihre Position zu einer Sektion, nicht über einen gespeicherten Index-Bereich. Sonst bricht jede verschobene Folie die Sektionen. Das steht so auch in einem kurzen Design-Dokument, damit die nächste Gruppe nicht raten muss.
Das zweite Feature ist ein LED-Timer für Präsentationen. Den habe ich als kleine Unterklasse des bestehenden Timer-Morphs gebaut. So wenig fremden Code anfassen wie möglich, das war die Regel für alles in diesem Projekt.
Dazu kam Aufräumarbeit, die man nicht sieht. Eine CI mit GitHub Actions und smalltalkCI, Support für Squeak 6.1, ein neu geschriebenes README mit Tastenkürzeln und Screenshots. Drag and Drop für Folien rastet jetzt in einen Slot ein, damit niemand beim Verschieben aus Versehen eine Folie löscht. Danach liefen 456 Tests grün. Und der Fokus-Bug vom Anfang, mit Bugreport und einem Regressionstest, damit er nicht zurückkommt.
Insgesamt waren es von mir 38 Commits und rund 4.800 Zeilen. Das Team hat zusammen etwa 30 Features gebaut, Undo und Redo über das Command-Pattern eingeführt und die Testabdeckung von 84 auf 95 Prozent gebracht. Am 14. Juli war die Code Defense, bei der wir den Code vor den Betreuern verteidigen mussten.
Ich habe in diesem Projekt sehr bewusst mit KI gearbeitet. Es gab eine eigene CLAUDE.md für das Projekt und elf Smalltalk-Styleguides, gegen die der Code geprüft wurde, und Regeln, damit keine KI-Spuren im Repo landen.
Was ich mitnehme: In fremdem Code ist der kleinste Eingriff meist der beste. Ein Bug, der nach einer Zeile aussieht, kann tief im Framework sitzen. Und wenn ein Teamprozess hakt, kann man auch einfach ein Werkzeug dafür bauen.
Tools und Skills: Squeak/Smalltalk mit Morphic, SUnit, GitHub Actions und smalltalkCI, Scrum mit Kundengesprächen, Pair Programming, Planning Poker, Refactoring, Debugging und Dokumentation.
Nachtrag: Die Modulnote ist eine 1,0.