Softwareentwicklung

Last modified by Marco Grawunder on 2026/08/26 10:16

SoftwareprojektLogo.png

Information

Worum geht es auf dieser Seite?

Diese Seite enthält die allgemeinen technischen und funktionalen Anforderungen an die Softwareentwicklung im Softwareprojekt. Dazu gehören Client-Server-Architektur, Meilensteine, Implementierung, Testen, Qualitätssicherung und der Umgang mit generativen KI-Werkzeugen.

Die konkrete Spielaufgabe und andere jahrgangsspezifische Vorgaben stehen im geschützten Bereich Aktuelles.

Technische und funktionale Anforderungen

  • Client-Server-Umsetzung; die zentrale Spiellogik liegt auf dem Server.
    • Der Server muss vollständig Java-basiert sein.
    • Der Client kann ebenfalls in Java umgesetzt werden, muss dies aber nicht. Alternativ können z. B. Web-Frameworks wie Angular oder React verwendet werden. Dabei ist zu berücksichtigen, dass eine zusätzliche Web-Technologie insbesondere zu Beginn einen höheren Integrations- und Einarbeitungsaufwand verursachen kann.
  • Aus didaktischen Gründen (nicht optional!):
    • „beliebig“ viele registrierte Nutzer
    • mehrere Spielrunden gleichzeitig im Server
    • Spieler können vom selben Client aus an mehreren Spielen teilnehmen (also nicht mehrere Clients starten und dann teilnehmen)
  • Chat 
    • globaler Chat im Hauptmenü
    • Lobby und Spielechats
  • Nutzerverwaltung
    • gekapselter Zugriff, d.h. es darf für die Verwendung nicht sichtbar sein, wie die Daten wirklich verwaltet werden. Initial wird hier beispielsweise mit einer hauptspeicherbasierten Struktur gearbeitet.
    • relationales DBMS 
    • einfache Austauschbarkeit des DBMS-Servers (unterschiedliche Verbindungen, unterschiedliche Hersteller)
  • Computergesteuerte Spieler (je nach aktueller Spielaufgabe)
    • Das Spiel muss die Integration eines computergesteuerten Spielers unterstützen.
    • Es muss mindestens eine einfache Strategie, z. B. eine zufallsbasierte Strategie, umgesetzt werden.
  • Bei einem JavaFX-Client muss die Struktur die Anforderungen des Model-View-Presenter-Ansatzes (MVP) erfüllen.
  • Andere Client-Arten, z. B. ein Konsolenclient, sollen mit möglichst geringem Aufwand angebunden werden können. Dies ist ein weiterer Grund dafür, die Spiellogik auf dem Server zu halten.
  • Visuelles Thema/Design darf im vorgegebenen Rahmen variiert werden (muss aber nicht!!)
  • Qualität und Bedienbarkeit haben Vorrang vor visuellen Zusatzfunktionen.
    • Wichtig sind insbesondere verständlicher, erweiterbarer und wartbarer Code sowie eine gute Benutzerführung.
    • Eine ansprechende optische Gestaltung ist willkommen, sofern sie nicht zulasten der Kernfunktionalität geht.
Information

Wichtig!

  • Überlegen Sie genau, welche Features Sie umsetzen können und welche weggelassen werden sollten
  • Lieber etwas weniger sehr gut umsetzen, als vieles schlecht! Qualität vor Quantität!
  • Bedienbarkeit ist wichtig! Optisches Design weniger! 
  • KISS: Lösungen möglichst einfach und nachvollziehbar halten.
  • Fokus auf das Wichtige! Es gibt keine Zusatzpunkte für Dinge wie
    • Freundeslisten
    • privaten Chat
    • 3D
  • Sie dürfen die Regeln vereinfachen/verändern! Je nach Veränderung kann diese natürlich auch zu einer Reduktion der Komplexität und damit auch zu einer schlechteren Bewertung führen.
  • Sie haben nur begrenzte Ressourcen zur Verfügung und müssen das auch vertreten!

Allgemeine Regeln zur Brettspieladaption

  • keine Originalgrafiken ohne Freigabe veröffentlichen,
  • Regeln dürfen vereinfacht/angepasst werden,
  • Spielspaß soll erhalten bleiben,
  • Aktionen anderer Spieler müssen nachvollziehbar sein,
  • Zusatzdienste nur sinnvoll einsetzen.

Vorgegebene Meilensteine

Für den Einstieg und zur Orientierung im Projektverlauf gibt es mehrere vorgegebene Meilensteine. Zusätzlich definiert jede Gruppe eigene fachliche Meilensteine.

  • Der erste Meilenstein ist durch die gemeinsame Bearbeitung der Übungsaufgaben erreicht. 
  • Für den zweiten Meilenstein gibt es eine Zwischenpräsentation
  • Es gibt eine Präsentation für den Prototypen (Meilenstein X), im zweiten Semester.
  • Es gibt eine Präsentation für das finale Produkt (Endabnahme) zum Ende des zweiten Semesters.

Meilenstein 1: Basisarchitektur mit UserManagement (Vertikaler Durchstich, wird gemeinsam gemacht)

  • Hier geht es darum, die Basisarchitektur des SWP kennen zu lernen und gemeinsam in das SWP hineinzufinden.
  • Die Speicherung der Nutzer erfolgt im Hauptspeicher, d.h. nach einem Neustart, sind keine Nutzer mehr vorhanden (es gibt allerdings vordefinierte Nutzer, die später wieder entfernt werden müssen)
  • Neue Nutzer sollen sich für das Spiel registrieren können.
  • Registrierte Nutzer sollen sich am Spiel anmelden können.
  • Die Nutzer sollen nach dem Einloggen in das Hauptmenü gelangen und dort alle Nutzer sehen, die auch eingeloggt sind.
  • Es soll eine Liste aller verfügbaren Lobbies angezeigt werden.
  • Man soll neue Lobbies mit einem Namen anlegen können
  • Man soll existierenden Lobbies beitreten können (ohne die Lobbies selber anzuzeigen)
Success

Hinweis:

Hinweis: Dieser Meilenstein wird gemeinsam als Einführung für das Software Projekt durchgeführt und wird vor allem durch die Übungsblätter abgedeckt. Es findet am Ende also keine Präsentation statt.

Meilenstein 2: Hauptmenü, Chat, Spiel-Ansätze

  • Die Nutzer im Hauptmenü, in der Lobby und im Spielfenster sollen jeweils untereinander Nachrichten in einem Chat versenden können.
  • Es soll kein Refresh-Button verwendet werden, um die Nutzerliste im Hauptmenue (bzw. der Lobby) zu aktualisieren oder um neue Chat-Nachrichten abzurufen.
  • Es soll ein einfaches Modell des Spielmodells vorliegen, d.h. es sollten das statische Modell (Klassendiagramm) und einige dynamische Modelle (Aktivitätsdiagramm, ggf. auch Zustandsdiagramm oder Sequenzdiagramm) vorliegen.
  • Idealerweise kann man z.B. mit Hilfe der Console (oder eine einfachen GUI) schon ein wenig mit dem Spiel interagieren, das ist aber nicht zwingend notwendig!

Meilensteine 3 - (X-1)

Es ist notwendig, zusätzliche eigene Meilensteine zu definieren (mindestens 3-4), die sich an die erste Präsentation anschließen. Der Meilenstein für den Prototypen darf nicht der dritte Meilenstein sein! Die Meilensteine repräsentieren dabei wichtige Zwischenziele, die erreicht worden sind und sollten sich konkret auf das Spiel beziehen. Meilensteine müssen natürlich auch ein Datum haben!

Meilenstein X "Prototyp"

  • Es soll das UserManagement mit Hilfe einer relationalen Datenbank realisiert werden. Dazu soll das Schema für die Nutzerinformationen modelliert und über Java zugreifbar sein. Der Zugriff soll grundsätzlich auf beliebige per JDBC ansprechbare Datenbanken erfolgen und mit möglichst wenig Aufwand austauschbar sein (maximal eine neue Klasse). Außerhalb der Klassethumb_down, die den Datenbankzugriff regeln, darf niemand wissen, auf welche Weise die Daten gespeichert sind.
  • Hier soll es eine erste, möglichst vollständige Version des Spiels geben (Feature-Complete).
  • Es dürfen noch Fehler drin sein und die Bedienbarkeit muss noch nicht ganz ausgereift sein.
  • Es dürfen danach noch Änderungen und Erweiterungen gemacht werden.
Success

Hinweis:

  • Die Anforderungen sind die Minimalanforderungen
  • Es darf ruhig zum jeweiligen Zeitpunkt schon mehr realisiert werden. 
  • Aber: Fokus auf das Wichtige!
    • Keine Freundeslisten
    • Keinen privaten Chat
    • kein 3D etc.
    • Die Spielanleitung kann als PDF zur Verfügung gestellt werden.
  • Im Zweifelsfall ist es wichtiger, eine gute Basis zu haben und nicht so weit zu sein wie es der Meilenstein verlangt. Auf keinen Fall sollte man aus Gründen der Meilensteinerreichung Dinge einfach "runterhacken" um sie hinterher wieder aufzuräumen. Das wäre dann unnötige Arbeit!

Nutzung generativer KI-Werkzeuge

Generative KI-Werkzeuge wie ChatGPT, Copilot oder Gemini können im Softwareprojekt unterstützend eingesetzt werden. Dabei gelten die folgenden Regeln. Für mit KI-Unterstützung erzeugten Code und Text trägt die Gruppe dieselbe Verantwortung wie für vollständig selbst erstellte Inhalte.

      1. Transparenzpflicht:
        Alle von KI-Tools generierten Code- oder Textpassagen müssen im Code oder in den Abgaben klar als solche gekennzeichnet werden. Zum Beispiel durch Kommentare wie
// Generated with ChatGPT at 31.03.2025

Ausnahme: Die Vervollständigung einer Zeile (durch Tab) ist nicht speziell zu dokumentieren ("Local Full Line Completion"), alles weitergehende auf jeden Fall.

Nicht dokumentierte weitergehende KI-Nutzung wird wie die ungekennzeichnete Übernahme fremder Inhalte behandelt und kann entsprechende Konsequenzen haben.

2. Keine vollständige Automatisierung:
KI-Werkzeuge dürfen z. B. zur Ideenfindung, zum Erklären, beim Debugging oder für Vorschläge genutzt werden. Größere generierte Programmteile dürfen nicht ungeprüft übernommen werden. Die Studierenden müssen verwendeten Code verstehen, prüfen und fachlich vertreten können.

3. Lernen steht im Vordergrund:
KI-Unterstützung darf den eigenen Lern- und Entwicklungsprozess nicht ersetzen. Insbesondere müssen die Beteiligten die resultierende Lösung verstehen und selbstständig weiterentwickeln können.

4. Individuelle Lösungspflicht:
Wesentliche Design- und Architekturentscheidungen – z. B. Datenmodell, zentrale Spiellogik und Schnittstellen – müssen von der Gruppe selbst getroffen, verstanden und begründet werden. KI kann dabei als Diskussions- oder Reflexionshilfe dienen, nicht als verantwortliche Entscheidungsinstanz.

Implementierung, Test und Qualitätssicherung

  • Implementieren Sie das Produkt auf Grundlage des Entwurfs. Wenn sich während der Implementierung Änderungen ergeben, muss der Entwurf entsprechend nachgeführt werden.
  • Projektname muss Gruppenname enthalten!
  • Maven:

    • Das Produkt muss sich mit Hilfe von maven bauen lassen.
    • Der Build muss ohne vorheriges lokales `mvn install` funktionieren.
    • Die Tests müssen über maven ausgeführt werden.
    • GUI-Tests müssen sich ausschalten lassen.
    • Andere Build-Werkzeuge wie Gradle dürfen höchstens ergänzend eingesetzt werden. Der Maven-Build muss vollständig funktionsfähig bleiben.
  • Sinnvoll: (echtes) Pairprogramming (mit Tauschen der Rollen!): Hinweise zum Pairprogramming

  • Sinnvoll: längere Programmiersitzungen
  • Erstellen Sie dabei die nötigen Systemunterlagen (tw. erst zum Ende des Projektes)

    • Benutzerhandbuch,
    • Testunterlagen,
    • Installationshandbuch etc.
  • Videos und Materialien u. a. zum Testen. Testen Sie wichtige Klassen kontinuierlich mit JUnit und nicht erst am Projektende.

    • Nutzen Sie Dependency Injection konsequent; auf der Serverseite insbesondere über Spring.
    • TestFX kann beim Testen der GUI helfen. Wichtiger sind aber Tests der Funktionalitäten!
    • GUI-Tests müssen separat deaktivierbar sein, damit der normale Testlauf auch auf einem CI-/Build-Server ohne grafische Umgebung ausgeführt werden kann.
    • Mocken Sie Abhängigkeiten in Unit-Tests mit Mockito
  • Führen Sie Integrations- und Endtests durch
  • Führen Sie mindestens ein dokumentiertes gruppenweites Code–Review durch
  • Nutzen Sie Werkzeuge zur statischen Analyse und Qualitätssicherung, z. B. SpotBugs, Checkstyle, SonarLint oder SonarQube.
  • Es ist grundsätzlich nicht erlaubt, Warnungen zu unterdrücken (Wenn Warnungen unterdrückt werden, dann muss es einen sehr guten Grund geben! Jede zusätzliche Warnung muss dokumentiert und begründet sein!)

    Warnung

  • In Scrum muss ein Produktinkrement getestet und lauffähig sein.
  • Versuchen Sie möglichst früh und regelmäßig die aktuelle Version auch auf dem Rechner in der Arbi zu deployen.
  • Bei einem JavaFX-Client soll die MVP-Struktur nachvollziehbar selbst umgesetzt werden. Zusätzliche Frameworks, die diese Struktur stark automatisieren, sollten nur eingesetzt werden, wenn ihre Auswirkungen auf Testbarkeit und Wartbarkeit verstanden und begründet werden können.
  • Beachten Sie auch die Hinweise zur Verwendung von KI

Siehe auch