Skip to content

About

Main exam project for the course DM571: Software Engineering at SDU

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Sofware Engineering Project - Gravia Moribundas Receipt System

This repository contains the final project for the course DM571: Software Engineering at the University of Southern Denmark (SDU). The task was to develop a receipt-submission and approval system built as an MVP for a fictional company (Gravia Moribundas).

Note: This project's main focus was the software engineering process, not the code. The code here is the output of that process - the bulk of the actual work was reasoning about, applying and discussing core activities of the software development process in a written report. This README summarizes the main things we worked with.

What this project covers

  • Requirements classification - based on a stakeholder interview we classified functional and non-functional requirements and translated it into a product backlog using user stories, organized with a story map.
  • Stakeholder analysis - classified stakeholders as internal/external and mapped them using the Salience Model (Power / Legitimacy / Urgency).
  • System design - modeled system flows with UML sequence diagrams (per user role) and a UML class diagram, and documented the architecture with C4 diagrams (context, container, component levels).
  • API design - designed a REST API (OpenAPI 3.1.0 spec) for receipt submission and retrieval, including schema reuse and file-upload handling.
  • Implementation - built the MVP as a Flask (Python) web app with a pragmatic MVC structure, SQLite storage, role-based access control (Flask-Login, Flask-Principal), and form handling/validation (WTForms).
  • Architecture trade-offs - analyzed the current monolithic layered architecture's limitations and designed a migration path toward a three-tier and eventually microservices architecture.
  • UX evaluation - ran a heuristic evaluation of the interface against Jakob Nielsen's 10 usability heuristics.
  • Testing strategy - wrote a unit/integration test suite (pytest, Arrange-Act-Assert pattern, fixtures for test isolation) reaching 99% coverage, plus a critical discussion of what coverage and cyclomatic complexity metrics do and don't actually prove.
  • Third-party integration - integrated the system with an external bank API for automated reimbursement, including designing the status-mapping and data-ownership assumptions between the two systems.

Main takeaways

This course taught me a lot about the software development process and the many pros and cons of different processes and tools. The project gave me practical experience with:

  • Agile & Scrum - running an iterative development process instead of a big-upfront-design (Waterfall) approach
  • Users and requirements - turning a stakeholder interview into concrete requirements
  • Estimation and planning - reasoning about backlog items using the INVEST criteria
  • Sprints - treating the backlog as a living document
  • Architectures - designing and documenting system architecture and reasoning through a concrete evolution path from monolith → three-tier → microservices
  • Design patterns - applying MVC to structure the codebase, plus Distribution Patterns (Remote User Interface, Remote Database) for the planned architecture evolution
  • Test - writing an isolated unit test suite and discussing what metrics like code coverage and cyclomatic complexity can and can't tell you about software quality
  • UI - designing and evaluating a working prototype using UX heuristics (Nielsen's 10 usability heuristics)

About

Main exam project for the course DM571: Software Engineering at SDU

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages