IT Project Management Simulation Web Application
Die SoftDSim ist eine Django-basierte Web-Anwendung zur Simulation von Projektmanagement-Szenarios für den Einsatz im Modul Project Management an der Frankfurt University of Applied Sciences. Dozenten können innerhalb der Web-Anwendung Szenarios mit belieben Inhalten definieren, welche dann von Studierenden simuliert werden. Die Studierenden nehmen dabei die Rolle eines Projektmanagers ein und müssen verschiedene Entscheidungen treffen. Beispielhaft genannte Entscheidungen sind Projektmanagementmethode, Anzahl und Erfahrungsniveau der Teammitglieder oder Anzahl der Meetings. Alle Simulationen werden in einer gemeinsamen Datenbank gespeichert. Diese kann vom Dozenten eingesehen werden, sodass die Leistungen der Studierenden evaluiert werden kann.
Die Weiterentwicklung des SofDsim Projekts ist Bestandteil des Moudls Projekt im 7. Semester der Studiengänge EBIS und IBIS im Sommersemester 2022. Wenn du in diesem Modul eingeschrieben bist und in der SofDsim Projektgruppe (Trost) bist, dann benötigst du Collaborator Zugang zum Projekt. Dazu benötigst du einen GitHub-Account. Sende dann deinen Usernamen an [email protected] um als Collaborator zum Projekt hinzugefügt zu werden.
Clone das Projekt. Dazu muss git auf deinem System installiert sein.
Eine Installation von Python 3 ist notwendig. Falls auf dem System verschiedene Python Projekte vorhanden sind, ist es sinnvoll für das SoftDSim Projekt ein eigenes Python Environment (siehe venv, conda oder virtualenv) anzulegen.
Die nötigen Pythonabhängigkeiten bzw. zu installierende Bibliotheken befinden sich als requirements.txt
im root Verzeichnis des Projekts.
Die Installation aller benötigter Bibliotheken geschieht mittels pip
über den Befehl:
pip install -r requirements.txt
Eines der Requirments ist mysqlclient
, dieses benötigt einen mysql-cleint auf dem lokalen System. Auf der pypi Seite von mysqlclient findet sich dazu eine erklärung.
Die Datenbank, die von der Webanwendung genutzt wird, ist die SQL Datenbank mariaDB. Die Datenbank läuft nicht zwingender Weise auf demselben Server wie das Backend, sondern ist extern angebunden. Für die Entwicklung ist es erforderlich, dass Entwickler eine eigene Datenbank anbinden. Es gibt mehrere Möglichkeiten, diese zu tun.
Eine Möglichkeit ist es, die Datenbank lokal über Docker zu hosten. Um eine lokale mariaDB zu erstellen, müssen Docker und idealerweise docker-compose installiert sein. Die compose Datei liegt im Verzeichnis database/. Mit dem Befehl
docker-compose up
wird die Datenbank gestartet. Um die Datenbank im Hintergrund zu startet, kann das Flag -d
gesetzt werden, und um vom root aus zu startet kann mit -f
ein Pfad zur Datei angegeben werden. Der Befehl zum Starten der Datenbank mit docker-compose im Hintergrund vom root des Projekts lautet demnach:
docker-compose -f database/docker-compose.yml up -d
Es ist natürlich auch möglich eine mariaDB direkt lokal zu hosten oder eine Cloud Variante.
Die Environment Variablen enthalten wichtige Informationen über die lokale Konfiguration. Sie werden in der Datei .env
im root Verzeichnis des Projekts definiert. Zu setzen sind:
SECRET_KEY
Dies ist der Schlüssel, den Django zu Verschlüsselung nutzt. Dieser kann frei definiert werden und kann z. B. mit djecrety.ir generiert werden.DATABASE_NAME
Der Name der Datenbank, die Django in der mariaDB erstellt. Muss identisch sein zum DB Namen der in der docker-compose angegeben wurde (im develop ist dassim
).DATABASE_HOST
Den Host der Datenbank. Dieser ist essenziell und hängt von der Konfiguration der Datenbank ab. Wird zur Entwicklung wir die Datenbank auf dem localhost gehostet (zb mit Docker), dann ist der Host127.0.0.1
. Bei einer Cloud gehosteten Datenbank kann der Host über das Cloud-Dashboard eingesehen werden.DATABASE_PORT
Der Port, auf dem die Datenbank läuft. MongoDB sollte i.d.R. auf dem Port3306
laufen. Läuft die DB auf eine Cloud-Datenbank, dessen URI keinen Port enthält, dann muss diese Variable weggelassen werden.DATABASE_USER
Der Username des Datenbank-Users. Bei der Nutztung von der docker-compose Datei ist dies der dort unterMYSQL_USER
angegebene Name (deafult istdemo
). Bei einer Cloud Datenbank muss auf Atlas ein User erzeugt werden und der name dann hier eingetragen werden.DATABASE_PASS
Das Passwort des Datenbank-Users. Bei der Nutztung von der docker-compose Datei ist dies der dort unterMYSQL_PASSWORD
angegebene Passwort (deafult istdemo
)`
Dies wäre eine beispielhafte .env
Datei, wenn die MongoDB mit docker-compose erzeugt wurde.
DATABASE_NAME=sim
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
DATABASE_USER=demo
DATABASE_PASS=demo
SECRET_KEY=ea2n+r$^@4px1c4gqim+l^m=@ew04hc-lupx^c&p(fy48)ma=0
Zum Starten der Anwendung wird der Befehl
python manage.py runserver
Achtung: In dieser Readme werden alle python Aufrufe mit dem Befehl
python
beschreiben. Je nach der Python Konfiguration auf deinem System muss dies nicht so sein, häufig verwenden MacOS oder Linux Systeme den Aliaspython3
Dann wird die Webanwendung lokal gehostet und ist unter http://127.0.0.1:8000/ zu erreichen.
Die Adresse kann im Browser geöffnet werden, dort wird nun die Login-Seite angezeigt. Um einen ersten (Super-)Nutzer zu erstellen, muss zurück in das Terminal (Eingabeaufforderung) gewechselt werden. Vor dem ersten Gebrauch muss die Datenbank, für die Speicherung von Nutzern, initialisiert werden. Dies geschieht über die zwei Befehle:
python manage.py makemigrations
python manage.py migrate
Danach kann ein Superuser (Nutzer mit Admin-Rechten) mit dem Befehl
python manage.py createsuperuser
erstellt werden. Der definierten Username und das Passwort können zur Anmeldung auf der Loginseite der Webapplikation genutzt werden.
Sollte es zu Problemen kommen, kann dies mehrere Gründe haben: Datenbank läuft nicht richtig, Requirements nicht installiert bzw. falsches Python Environment zur Ausführung genutzt oder die Konfiguration stimmt nicht. Bei Problemen einfach nachfragen. Fragen werden idealerweise direkt in unserem GitHub Diskussionsforum gestellt.
Um ein Scenario zu erstellen, muss dieses in app/scripts/scenarios/
als eine .yml
Datei definiert sein. Dann kann mit dem Befehl:
python manage.py runscript scenario_studio -v2 --script-args <name-der-datei>.yml
das Sceanrio erstellt werden. Würde also die Datei app/scripts/scenarios/test_sc.yml
, eine Scenario-Definition enthählten (siehe Doku), könnte mit dem Befehl:
python manage.py runscript scenario_studio -v2 --script-args test_sc.yml
dieses erstellt werden.
Für jedes geplante Feature, für jeden Bug, jede Idee etc. wird ein Issue angelegt und idealerweise direkt dem zugehörigen Projekt-Board zugewiesen. Die Liste der Issues ist das Backlog. Issues sollten möglichst kleinteilig geplant werden, sodass ein Issue in kurzer Zeit (wenige Stunden bis 2 Tage) erledigbar ist. Sobald mit der Bearbeitung eines Issues begonnen wird, muss dieser im Projekt Board in die Spalte In Progress verschoben werden und diejenige Person als Assignee eingetragen werden.
Jedes Feature wird in einem eigenen Branch bearbeitet. Das Namensschema ist wie folgt:
type/issuenr-kurze-beschreibung
wobei issuenr
die Ticketnummer des Issues ist und type
eines von feature
(Implementierung eines neuen Features), fix
(Beheben eines Bugs/Fehlers), refactor
(Umschreiben des Codes ohne neue Funktionalität) oder task
(Alle anderen Arbeiten) ist. Beispiel:
feature/127-Adding-api-delete-endpoint
Wäre der passende Branchname für die Implementierung eines Features, dessen Issue die Ticketnummer 127 hat und dessen Inhalt das Hinzufügen eines API Endpoints zum Löschen von Elementen ist.
Die Commit-Messages in einen Branch müssen ebenfalls die Issue-Nummer enthalten und haben folgendes Schema:
type: #issuenr Kurze Beschreibung
Und optional eine längere Erklärung nach einer Leerzeile.
Wichtig ist das Symbol #
, da dann der Commit automatisch durch GitHub zum Issue zugeteilt wird. Beispiel commit message:
fix: #71 Removed python path from config
Sobald ein Issue gelöst wurde, wird ein Pull Request zum Mergen des Branches in den develop Branch erstellt. Der PR muss dann mindestens ein Approval bekommen und die Tests bestehen, um dann gemergt zu werden.
Die Dokumentation enthält eine ausführlichere Beschreibung über den Workflow.
Außerdem gilt auch hier: Bei Fragen gerne unser GitHub Diskussionsforum nutzen.