Uns ist es leider nicht möglich gewesen ein Review-GesprÀch zu organisieren, stattdessen haben wir textuell eine offene Fragerunde auf Discord gestartet, wo unter anderem Interessant gewesen ist:
Das Ergebnis, also die individuellen Antworten auf diese Frage fassen sich wie folgt zusammen:
Es ist ein Fakt, dass mehrere Verzeichnisse in unserem Repository existieren.
Diese Verzeichnisse enthalten verschiedene .ts-Dateien und diese eine und mehr Funktionen.
Der letzte Punkt ĂŒber 1:n Relation auf mehrere Funktionen in einer Datei ist als Verbesserungsvorschlag hervorgegangen, dass eine .ts-Datei möglichst wenig unabhĂ€ngige Funktionen enthalten soll. Dieser Vorschlag wird durch das Single Responsibility Prinzip gestĂŒtzt.
Die SOLID-Prinzipien sind allen soweit bekannt und der Bezug auf React (Native)
ist klargestellt. Genaue Implementierungsweisen sind teilweise unklar,
was nicht zuletzt React selbst geschuldet ist,
wonach Hooks nur in einem bestimmten (React-)Kontext verwendet werden dĂŒrfen.
Dennoch sind besonders die Single Responsibility und Dependency Inversion allseits angewandte Best-Practices.
Gute Dokumentation lebt und im Fokus der Problemlösung & Feature-Implementierung rĂŒckt die Dokumentation gerne in den Hintergrund. README.md
-Dateien existieren in manchen Verzeichnissen, sind jedoch hĂ€ufig einmalige Produktionen. Hier ist es wĂŒnschenswert die Dokumentation soweit zu beleben, dass diese mit dem Projektfortschritt mithalten.
Die Antwort im Team ist »ja«, unser Code ist wartbar, da wir uns auf allgemeine, wie spezielle Best-Practices stĂŒtzen. Diese Aussage gilt universell fĂŒr unser React-Native Front-End, sowie unser Backend mit seinen Edge-Functions und PostgreSQL.
Hinsichtlich der Einhaltung der definierten Atomic-Architektur im Front-End mĂŒssen wir jedoch einrĂ€umen, dass wir aufgrund des Zeitdrucks gegen Ende des Projekts dieseOrdnung etwas vernachlĂ€ssigt haben und viele Komponenten in einer Datei getestet und geschrieben worden und spĂ€ter nicht aufgeteilt worden sind. Hier steht uns in Zukunft ein Refactor bevor, um eine striktere Einhaltung der Architekturprinzipien sicherzustellen und um unsere Code-Duplikations-Metrik im Sinne einer besseren Wartbarkeit gering zu halten.
Im Bereich der nicht-funktionalen AbhĂ€ngigkeiten sind wir in der Umsetzung vor allem an der Front der Sicherheit gut gerĂŒstet. Infrastrukturell ist das Backend ausschlieĂlich ĂŒber HTTPS erreichbar, wobei alle Datenbankzugriffe ĂŒber restriktive (manuell) getestete RLS-Policies auf den aktuellen Benutzer und dessen CRUD-Freigabe beschrĂ€nkt werden. Infolge der Entscheidung zu Beginn des 4. Semesters, das Projekt-Ziel auf das Front-End zu fixieren und das Backend zu vereinfachen, können wir mit der Umstellung auf Supabase zugleich auf einen eigenen Controller verzichten. Etwaige GeschĂ€ftslogik, wie die Organisations-Initialisierung werden ĂŒber TypeScript-Edge-Functions abgebildet. Durch die Verwendung von Deno und dem Vorkompilieren von TS-Code reagieren die Endpunkte selbst bei einem Kaltstart ohne ĂŒberflĂŒssige Verzögerungen.
Ein Hauptproblem war die mangelnde Erfahrung im Bereich der Projektbeschreibung und Zielsetzung fĂŒr ein komplett neues Projekt in diesem Umfang. Wir haben uns zu viele Funktionen fĂŒr die Version 1.0 vorgenommen. Ein besserer Ansatz wĂ€re gewesen, sich von Anfang an auf die Grundkonzepte zu konzentrieren und zusĂ€tzliche Features fĂŒr spĂ€tere Versionen zu planen. Durch eine Fokussierung auf die BasisfunktionalitĂ€ten hĂ€tte das Projekt wahrscheinlich innerhalb des vorgesehenen Zeitrahmens abgeschlossen werden können.
Diese FehleinschĂ€tzung fĂŒhrte dazu, dass wir zu Beginn des vierten Semesters das aktuelle Projekt zu 80 % verwerfen mussten und noch einmal von vorn anfangen mussten. Dies hat uns wertvolle Zeit und Ressourcen gekostet.
Genauso mĂŒssen wir KrankheitsausfĂ€llen BerĂŒcksichtigung schenken.
Diese unvorhergesehenen AusfĂ€lle haben gelegentlich zu zeitlichen Problemen gefĂŒhrt.
In Zukunft sollten wir Pufferzeiten in unseren ZeitplÀnen einplanen
und eventuell Vertretungsregelungen festlegen, um solche EngpÀsse besser abzufangen.
Das kann die Resilienz des Teams erhöhen und sicherstellen,
dass der Projektfortschritt nicht durch einzelne AusfÀlle gefÀhrdet wird.
Des Weiteren sind regelmĂ€Ăige Meetings und eine offene Kommunikationskultur förderlich,
um alle Teammitglieder auf dem gleichen Stand zu halten und MissverstÀndnisse zu vermeiden.
Obwohl bereits ein Kanban-Board verwendet wird, kann die Implementierung zusÀtzlicher, agiler Praktiken (scrum ceremonies) die Effizienz und FlexibilitÀt des Teams weiter steigern.
Insbesondere sollten ausfĂŒhrliche und verpflichtende Sprint-Planungen und regelmĂ€Ăige Jour-Fixe eingefĂŒhrt werden.
Aus der Projektmanagement-Sicht haben wir zusammengefasst gefolgert,
dass die folgenden Punkte höher priorisiert werden mĂŒssen:
Besser spÀt als nie, nun zum 18. Blogbeitrag hier die Ergebnisse unserer ersten statischen Code-Analyse mit SonarQube und dem SonarScanner:
Grob zusammengefasst sagt der Score aus,
dass unsere Code-QualitÀt einen akzeptablen Zustand erreicht hat.
Zwei der angegebenen âSecurity-Hotspotsâ entstehen aus einer Test-Datei zu der RegisterComponent.ts
,
da diese bei Beginn in die Auswertung gerutscht ist, weshalb SonarQube hier fÀlschlicherweise zwei High priority potentially hardcoded credential
angibt.
Eine weitere tritt in der HomeScreen.tsx
Datei auf, wo wir bis dato
noch Zufallszahlen als Statistik-Werte verwenden,
wobei SonarCube diese mit einem pseudorandom number
Fehler unter Medium priority versieht.
Der einzig ernst zu nehmende Security-Hotspot mit low priority scheinen somit
die Wildcard-CORS Angabe der Backend-Funktionen, sowie die Auto-Generierten Berechtigungs-Anfragen von Expo im Android-Kontext zu sein,
bei letzterem werden Berechtigungen fĂŒr WRITE_EXTERNAL_STORAGE
und RECORD_AUDIO
angefragt,
zumal wir maximal fĂŒr ersteres im Storage-Kontext einen nutzen haben.
Die Code-Smells bewegen sich gröĂtenteils im Minor-Bereich, dennoch haben wir 8 kritische Code Smells, wobei fĂŒnf auf noch nicht implementierte, aber deklarierte Funktionen zurĂŒckzufĂŒhren sind, sowie zwei durchzufĂŒhrende Refactors zwecks zu hoher KomplexitĂ€t der Funktionen und eine bezĂŒglich eines Duplikats in einer TS-Typendeklaration, die wohl durch den Linter nicht dedupliziert worden ist.
Da diese Probleme fĂŒr uns vorerst keine PrioritĂ€t haben und diese unsere Demo nicht weiter einschrĂ€nken oder im Endeffekt unsicherer machen, ist es dennoch gut ĂŒber deren Existenz informiert zu sein, um in Zukunft mögliche MaĂnahmen treffen zu können.
Letzte Woche: Neue Woche: Fortschritte und Optimierungen
NĂ€chste Woche: Handout