[Semester 4] Woche 8 & 9 - Technical Review & Retrospektive #41
Replies: 3 comments
-
|
Gut strukturierter Bericht! Die Wahl des Simulation Cores als Review-Fokus war smart , gerade der Punkt mit den Flip-Flop-Updates, die direkt ins gemeinsame State-Objekt schreiben, ist ein klassischer Bug. Auch das fehlende Konvergenz-Feedback ist wichtig: Nutzer sollten wissen, ob ein Ergebnis stabil ist oder nicht. Die Retrospektive klingt ehrlich und die Act-Punkte sind konkret und realistisch. Viel Erfolg beim Abschluss! |
Beta Was this translation helpful? Give feedback.
-
|
Liebes BitFlow-Team, ich finde eure Review und Retro sehr gelungen. Eure Caesar`s Gambit devs |
Beta Was this translation helpful? Give feedback.
-
|
Guter Bericht. Die Ergebnisse des Reviews sind leicht verständlich. [Nom Nom Now] |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Technical Review
Datum und Zeitrahmen
Teilnehmer
Ziel und Fokus des Reviews
Ziel des Reviews ist es, einen begrenzten, aber für den Projekterfolg zentralen Ausschnitt von BitFlow technisch zu bewerten. BitFlow ist ein Softwareprojekt im Bereich digitaler Schaltungen. Der betrachtete Ausschnitt betrifft insbesondere die Simulation von Schaltungen sowie die Verwaltung und Darstellung von Gate- und Pin-Strukturen.
Der Fokus liegt daher nicht auf dem gesamten Repository, sondern bewusst auf dem Simulation Core und der Gate-Bibliothek. Diese Komponenten sind besonders relevant, weil sie direkt beeinflussen, ob eine vom Nutzer erstellte Schaltung fachlich korrekt ausgewertet und verständlich dargestellt wird. Fehler in diesen Bereichen können dazu führen, dass die Anwendung falsche Simulationsergebnisse liefert, bei bestimmten Schaltungen instabil wird oder für zukünftige Erweiterungen schwer wartbar bleibt.
Die Auswahl orientiert sich an den Review-Guidelines aus der Vorlesung: Es wurden kritische Komponenten priorisiert, insbesondere Kernfunktionalität, komplexere Logik und potenzielle Hochrisikostellen im Hinblick auf Korrektheit, Wartbarkeit und Stabilität.
Auswahl des Projektquellcodes
evaluateCircuit.tsevaluateCircuit.tsevaluateCircuit.tsevaluateCircuit.tsevaluateCircuit.tsgateLibrary.tsgateLibrary.tsgateLibrary.tsReview-Kriterien
Review-Methode
Verwendet wurde ein technisches Code Review mit Walkthrough-Charakter. Der Code wurde nicht vollständig flächendeckend geprüft, sondern anhand kritischer Komponenten schrittweise nachvollzogen. Im Mittelpunkt standen dabei folgende Fragen:
Diese Methode passt zum Aufgabenblatt, weil ein begrenzter Teil des Projekts bewusst ausgewählt, anhand definierter Kriterien untersucht und anschließend mit konkreten Maßnahmen dokumentiert wurde.
Ergebnisse des Reviews
Positive Beobachtungen
DisjointSet) zur Gruppierung verbundener Netze ist für eine Schaltungssimulation ein passender und effizienter Ansatz.Kritische Beobachtungen und Risiken
DisjointSet.findinevaluateCircuit.tswhile-Schleife ersetzen.DisjointSet.findinevaluateCircuit.tsif (!parent ...)ist hauptsächlich wegenMap.get()und TypeScript nötig, obwohl der Key direkt vorher initialisiert wird.evaluateCircuit.tsevaluateCircuit.tsfalsezurück.evaluateCircuit.tsmaxIterations = Math.max(4, circuit.gates.length * 5)nutzt einen festen Faktor ohne dokumentierte Begründung.evaluateCircuit.tsconverged,iterationsund ggf.warningserweitern.evaluateCircuit.tsstate-Objekt.gateLibrary.tswhile-Schleife zur Höhenanpassung hat keine obere Grenze.gateLibrary.tsgateLibrary.tsDetaillierte Review-Punkte
1. Rekursive Pfadkompression in
DisjointSetDie Union-Find-Struktur ist grundsätzlich eine gute Wahl, weil sie verbundene Pins effizient zu Gruppen zusammenfasst. Kritisch ist jedoch die rekursive Umsetzung der
find()-Methode. Bei sehr tiefen Parent-Ketten kann Rekursion in JavaScript zu einem Stack Overflow führen.Für den aktuellen Projektumfang ist das vermutlich kein häufiger Fehlerfall. Trotzdem ist eine iterative Variante robuster und kaum komplexer. Gerade weil diese Funktion zur Kernlogik der Simulation gehört, lohnt sich hier eine defensive Implementierung.
Empfohlene Maßnahme:
find()iterativ umsetzen und die Pfadkompression anschließend explizit auf dem besuchten Pfad durchführen.2. Erkennung von Output-Output-Verbindungen
Die aktuelle Logik fasst Ausgangswerte auf demselben Netz über ein logisches OR zusammen. Für normale Schaltungen mit genau einem Treiber pro Netz ist das unproblematisch. Sobald aber mehrere Outputs dasselbe Netz treiben, wird ein fachlicher Verdrahtungsfehler verdeckt.
Das kann zu Simulationsergebnissen führen, die zwar technisch berechenbar sind, aber nicht dem entsprechen, was ein Nutzer von einer realistischen Schaltungssimulation erwartet.
Empfohlene Maßnahme: Während der Netzanalyse zählen, welche Output-Pins ein Netz treiben. Bei mehr als einem Treiber sollte die Simulation mindestens eine Warnung erzeugen.
3. Floating Inputs
Nicht verbundene Eingänge werden implizit als
falsebehandelt. Das ist als deterministischer Default sinnvoll, sollte aber sichtbar sein. Ein Nutzer kann sonst eine Schaltung falsch verdrahten und erhält trotzdem ein scheinbar normales Ergebnis.Empfohlene Maßnahme: Floating Inputs in der Simulation erkennen und über die UI anzeigen, zum Beispiel als gelbes Warnsymbol am betroffenen Pin oder als Liste von Simulationswarnungen.
4. Iterationslimit und Konvergenz
Das aktuelle Iterationslimit ist abhängig von der Anzahl der Gates, aber der konkrete Faktor ist nicht begründet. Noch wichtiger ist, dass ein Nichterreichen eines stabilen Zustands nicht klar an den Nutzer zurückgemeldet wird.
Bei kombinatorischen Schaltungen mit Rückkopplungen oder bei oszillierenden Strukturen ist es fachlich wichtig zu wissen, ob die Simulation stabil konvergiert ist.
Empfohlene Maßnahme: Die Simulation sollte nicht nur Signalwerte zurückgeben, sondern auch Metainformationen wie
converged,iterationsundwarnings.5. Flip-Flop-Zustände und Simultanität
Die In-Place-Mutation des Flip-Flop-Zustands ist der wichtigste fachliche Review-Punkt. In realen digitalen Schaltungen übernehmen Flip-Flops ihren neuen Zustand gleichzeitig zur Taktflanke. Wenn die Software den Zustand jedoch während der Gate-Schleife direkt verändert, kann die Reihenfolge der Gates das Ergebnis beeinflussen.
Empfohlene Maßnahme: Neue Flip-Flop-Zustände während der Evaluation in einem temporären Objekt sammeln und erst nach Abschluss des Simulationsschritts in den globalen Zustand übernehmen.
6. Gate-Layout und Pin-Verteilung
Die Gate-Bibliothek enthält kompakte Logik zur Positionierung von Pins. Positiv ist, dass die Implementierung unterschiedliche Fälle berücksichtigt. Gleichzeitig ist die Logik nicht selbsterklärend, weil sie stark von Parität und geometrischer Interpretation abhängt.
Empfohlene Maßnahme: Die Funktion durch Kommentare, Beispiele und kleine Unit-Tests absichern. Dadurch wird verhindert, dass spätere Änderungen am Layout unbeabsichtigt bestehende Gate-Darstellungen beschädigen.
7. Label-Erhalt beim Resize
Wenn bei einer Gate-Konfiguration Pins neu erzeugt werden, sollten vorhandene nutzerdefinierte Labels nicht verloren gehen. Gerade bei Custom Gates oder komplexeren Schaltungen können Pin-Namen fachliche Bedeutung tragen.
Empfohlene Maßnahme: Beim Resize alte Pins positionsbasiert übernehmen und nur für neu hinzugefügte Pins auf Template-Labels zurückfallen.
Abgeleitete Maßnahmen
find()-Methode iterativ implementieren.find()kommentieren oder lesbarer gestalten.Gelernte Best Practices
falsefür offene Eingänge sind nur dann gut, wenn Nutzer sie nachvollziehen können.Gesamtfazit
Der betrachtete Ausschnitt von BitFlow ist insgesamt sinnvoll strukturiert und zeigt mehrere gute technische Entscheidungen. Besonders positiv sind die Union-Find-basierte Netzanalyse, die zentralisierte Gate-Bibliothek und die Unterstützung benutzerdefinierter Gates. Diese Ansätze bilden eine solide Grundlage für eine erweiterbare digitale Schaltungssimulation.
Die wichtigsten Risiken liegen weniger in der allgemeinen Struktur, sondern in fachlichen Edge Cases der Simulation. Besonders relevant sind die reihenfolgeabhängige Flip-Flop-Auswertung, fehlende Rückmeldung bei Nicht-Konvergenz und das stille Zusammenführen mehrerer Output-Treiber. Diese Punkte sollten priorisiert behoben werden, weil sie direkt die fachliche Korrektheit der Simulation betreffen.
Für die weitere Projektentwicklung empfiehlt sich, das Simulationsergebnis um Warnungen und Statusinformationen zu erweitern. Dadurch könnte BitFlow nicht nur Werte anzeigen, sondern Nutzern auch erklären, warum eine Schaltung möglicherweise fehlerhaft, instabil oder unvollständig verdrahtet ist. Insgesamt ist der Review-Ausschnitt gut gewählt, weil er zentrale Kernfunktionalität, Wartbarkeit und Benutzerfeedback gleichzeitig adressiert.
Retrospektive
Zusammenfassung:
Erläuterung:
Continue
Die regelmäßigen Blogeinträge und die Fortschrittsdokumentation sollten wir beibehalten, weil sie den Projektverlauf nachvollziehbar machen. Auch Pull Requests mit Reviews haben geholfen, Fehler früher zu erkennen und Code nicht unkontrolliert zu mergen. SonarCloud, automatisierte Tests und CI/CD sollten ebenfalls weiter genutzt werden, da sie uns schnelles Feedback zur Codequalität, Sicherheit und Stabilität geben. Gute Kommunikation im Team war außerdem wichtig, um Aufgaben abzustimmen und Missverständnisse zu vermeiden.
Stop
Wir sollten aufhören, zu viele Features gleichzeitig zu beginnen, bevor ältere Aufgaben sauber abgeschlossen sind. Das führt schnell zu offenen Baustellen und macht das Projekt unübersichtlich. Außerdem sollten Tests nicht erst am Ende gemacht werden, weil Fehler dann schwerer und stressiger zu beheben sind. Große Codeänderungen ohne Absprache oder Review sollten ebenfalls vermieden werden. Technische Schulden, wie unsauberer Code, fehlende Tests oder Code Smells, sollten nicht zu lange liegen bleiben, da sie die Weiterentwicklung erschweren.
Invent
Für zukünftige Sprints wäre es sinnvoll, früher mit automatisierten Tests zu starten. Dadurch fallen Fehler schon während der Entwicklung auf. Außerdem sollten Aufgaben klarer verteilt werden, damit es weniger Überschneidungen gibt und jeder weiß, woran er arbeitet. Regelmäßige kleinere Reviews von Zwischenständen könnten helfen, Probleme früher zu erkennen, statt erst am Ende große Änderungen prüfen zu müssen. Auch die Dokumentation sollte parallel zur Entwicklung gepflegt werden, damit später keine wichtigen Informationen fehlen.
Act
Als nächste konkrete Schritte sollten wir zuerst das Backend weiter ausarbeiten und offene Bugs sowie technische Schulden priorisieren. Danach sollten wir die SonarCloud-Ergebnisse prüfen und wichtige Code Smells beheben. Außerdem müssen wir kontrollieren, ob alle SRS-Anforderungen erfüllt oder zumindest sauber dokumentiert sind. Besonders kritische Funktionen sollten stärker getestet werden, damit das Projekt am Ende stabiler, vollständiger und besser bewertbar ist.
Beta Was this translation helpful? Give feedback.
All reactions