412 lines
21 KiB
Markdown
412 lines
21 KiB
Markdown
# 📱 Final Exam: Integrated Mobile Application Project
|
||
### Flutter × Spring Boot × Object-Oriented Analysis and Design
|
||
#### Group Assignment (3 Members) — Industry-Grade Level
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
This final exam requires your group to design, develop, and deliver a **fully integrated mobile application system** consisting of:
|
||
|
||
- A **Flutter mobile frontend** that consumes a RESTful API
|
||
- A **Spring Boot backend** that exposes the API with proper layering, security, and persistence
|
||
- A rigorous **OOAD process** — designed before coding, then verified against the final implementation
|
||
|
||
The project is evaluated across three distinct dimensions with different grade weights. This is intentional: **design thinking (OOAD) is the foundation**, engineering quality (Flutter + Spring Boot) is the execution.
|
||
|
||
---
|
||
|
||
## Group Formation & Role Distribution
|
||
|
||
Each group consists of **exactly 3 members**. Each member owns one primary pillar but all members must understand and contribute to all three.
|
||
|
||
| Role | Primary Pillar | Core Responsibilities |
|
||
|---|---|---|
|
||
| **OOAD Lead** | Object-Oriented Analysis & Design | Leads all design artifacts (use case, class, sequence, state diagrams), enforces design pattern compliance across both codebases, owns the design traceability matrix |
|
||
| **Flutter Engineer** | Mobile Frontend | Clean Architecture implementation, state management, UI/UX, performance benchmarking |
|
||
| **Backend Engineer** | Spring Boot API | REST API design, service/repository layers, database schema, security (JWT), API documentation, backend testing |
|
||
|
||
> **Important:** Role ownership means accountability, not isolation. All members must commit code to both repositories. The OOAD Lead reviews both codebases for pattern compliance — this is a graded responsibility.
|
||
|
||
---
|
||
|
||
## Project Topic
|
||
|
||
Your group is free to choose any application domain, provided it:
|
||
|
||
- Models a real-world problem with identifiable actors, use cases, and entities
|
||
- Requires meaningful backend logic (not just CRUD — include at least one business rule or workflow)
|
||
- Has a clear primary user and at least one secondary actor (admin, system, or external service)
|
||
|
||
**Example domains** *(create your own — do not copy)*:
|
||
- Hospital appointment and queue management
|
||
- Campus asset borrowing and return tracking
|
||
- Community marketplace with seller verification flow
|
||
- Event ticketing with seat allocation logic
|
||
- Employee attendance with approval workflow
|
||
|
||
---
|
||
|
||
## Pillar 1 — Object-Oriented Analysis & Design (OOAD)
|
||
|
||
OOAD is evaluated in **two phases**: design artifacts produced before coding, and a traceability audit conducted against the final code.
|
||
|
||
### Phase 1A: Pre-Development Design Artifacts
|
||
|
||
All diagrams must be produced using **PlantUML, draw.io, or StarUML** and submitted as part of the Week 2–3 checkpoint. Diagrams drawn by hand are not accepted.
|
||
|
||
| Artifact | Diagram Type | Requirement |
|
||
|---|---|---|
|
||
| Requirements model | Use Case Diagram | All actors, use cases, include/extend relationships |
|
||
| Structural model | Class Diagram | All domain classes with attributes, methods, visibility, and relationships (association, aggregation, composition, inheritance) |
|
||
| Behavioral model | Sequence Diagrams | At least 3 key interactions (e.g., login, create resource, approval flow) showing object collaboration |
|
||
| State model | State Machine Diagram | At least 1 entity with meaningful state transitions (e.g., Order: PENDING → CONFIRMED → COMPLETED → CANCELLED) |
|
||
| Data model | ERD (Crow's Foot notation) | All entities, PKs/FKs, cardinality — must align with the class diagram |
|
||
| Architecture model | Component Diagram | Flutter app, Spring Boot layers, database, and external services as components with interfaces |
|
||
|
||
### Phase 1B: Design Pattern Compliance
|
||
|
||
Your system must implement **at least 4 GoF design patterns** across the full stack, with at least 1 from each category:
|
||
|
||
| Category | Required Count | Examples |
|
||
|---|---|---|
|
||
| Creational | ≥ 1 | Factory Method, Builder, Singleton |
|
||
| Structural | ≥ 1 | Adapter, Facade, Decorator, Proxy |
|
||
| Behavioral | ≥ 2 | Strategy, Observer, Command, Template Method, Chain of Responsibility |
|
||
|
||
Each pattern must be documented with:
|
||
1. Pattern name and category
|
||
2. Which class/component implements it (with file path)
|
||
3. UML class diagram showing the pattern in context
|
||
4. Justification — why this pattern was chosen over alternatives
|
||
|
||
### Phase 1C: Design Traceability Audit (Post-Development)
|
||
|
||
After development is complete, the OOAD Lead conducts a **traceability audit** comparing the pre-development design to the final code:
|
||
|
||
- For each class in the original class diagram: does it exist in code? If not, explain why.
|
||
- For each design pattern: show the exact code that implements it (file + line reference).
|
||
- For each sequence diagram: trace the method call chain in the actual code.
|
||
- Document all **design deviations** — cases where implementation diverged from design — with a written rationale for each deviation.
|
||
|
||
> A perfect match between design and code is not required. Thoughtful, documented deviations are acceptable. Undocumented deviations are penalized.
|
||
|
||
---
|
||
|
||
## Pillar 2 — Flutter Mobile Frontend
|
||
|
||
### Technical Requirements
|
||
|
||
| Category | Requirement |
|
||
|---|---|
|
||
| **Flutter Version** | Flutter 3.x (Stable channel) |
|
||
| **Architecture** | Clean Architecture — strict 4-layer separation: `domain / data / application / presentation` |
|
||
| **State Management** | BLoC or Riverpod (consistent throughout; mixing is not allowed) |
|
||
| **Navigation** | Go Router with at least 6 distinct screens and route guards for authenticated routes |
|
||
| **API Communication** | `Dio` with interceptors for JWT token injection, refresh token handling, and error normalization |
|
||
| **Local Persistence** | Hive or SQLite for offline caching of at least one core data entity |
|
||
| **Authentication** | JWT-based login/register consuming the Spring Boot auth endpoint |
|
||
| **UI/UX** | Custom widget library (min. 5 reusable widgets), responsive layout, consistent design system |
|
||
| **Error Handling** | Typed failure classes using `Either` (dartz) or equivalent; no raw `try/catch` in UI layer |
|
||
|
||
### Folder Structure (Enforced)
|
||
|
||
```
|
||
lib/
|
||
├── core/ # shared utilities, theme, constants, error types
|
||
├── features/
|
||
│ └── [feature]/
|
||
│ ├── domain/ # entities, repository interfaces, use cases
|
||
│ ├── data/ # repository implementations, DTOs, data sources
|
||
│ └── presentation/ # BLoC/Cubit, pages, widgets
|
||
└── main.dart
|
||
```
|
||
|
||
Any structure deviating from feature-first modular layout must be approved in writing before Week 4.
|
||
|
||
### Advanced Features (Choose at least 2)
|
||
|
||
- Real-time updates via WebSocket or Server-Sent Events from Spring Boot
|
||
- Push notifications triggered by backend events (FCM)
|
||
- Offline-first with background sync to Spring Boot API
|
||
- Animated transitions using custom `PageRouteBuilder` or Lottie
|
||
- Internationalization (i18n) with at least 2 languages
|
||
- Biometric authentication (fingerprint/face ID) as second factor
|
||
|
||
### Flutter Testing & Benchmarking
|
||
|
||
#### Functional Testing
|
||
|
||
| Type | Tool | Minimum |
|
||
|---|---|---|
|
||
| Unit Testing | `flutter_test` | All use cases and repository implementations |
|
||
| Widget Testing | `flutter_test` | At least 5 core UI components |
|
||
| Integration Testing | `integration_test` | At least 3 end-to-end flows against the live Spring Boot API |
|
||
|
||
#### Performance Benchmarking
|
||
|
||
Run all benchmarks on a **physical Android device in profile mode** (`flutter run --profile`). Emulator results alone are not accepted.
|
||
|
||
| Metric | Tool | Pass Threshold |
|
||
|---|---|---|
|
||
| Memory — baseline | DevTools → Memory tab | Report heap at launch (MB) |
|
||
| Memory — leak check | DevTools → Memory tab | No steady growth over 10 repeated navigations |
|
||
| Frame rate / jank | DevTools → Performance tab | ≥ 90% frames < 16ms (60fps target) |
|
||
| CPU profile | DevTools → CPU Profiler | Flame graph for top 3 CPU-heavy operations |
|
||
| API latency (client-side) | Dio interceptor logs | All core endpoints < 1500ms |
|
||
| Cold start time | `--trace-startup --profile` | `timeToFirstFrame` < 3000ms |
|
||
| APK size | `flutter build apk --analyze-size` | Release APK < 50MB |
|
||
|
||
Each benchmark must be reported with: objective, tool, method, results table, threshold comparison, and DevTools screenshot.
|
||
|
||
**Regression requirement:** Run benchmarks at Week 5 (mid-sprint) and at Week 7 (final). Submit a delta table comparing both runs. Any metric that degrades > 20% must include a root cause analysis and remediation.
|
||
|
||
---
|
||
|
||
## Pillar 3 — Spring Boot Backend
|
||
|
||
### Technical Requirements
|
||
|
||
| Category | Requirement |
|
||
|---|---|
|
||
| **Java Version** | Java 17+ |
|
||
| **Framework** | Spring Boot 3.x |
|
||
| **Architecture** | Layered: `Controller → Service → Repository` (no logic in Controller, no DB calls in Service) |
|
||
| **Database** | PostgreSQL or MySQL with JPA/Hibernate; schema migrations via Flyway |
|
||
| **Security** | Spring Security with JWT (access token + refresh token); role-based access control (RBAC) |
|
||
| **API Design** | RESTful conventions; versioned endpoints (`/api/v1/...`); proper HTTP status codes |
|
||
| **Validation** | Bean Validation (`@Valid`) on all request DTOs; global exception handler via `@ControllerAdvice` |
|
||
| **Documentation** | Swagger/OpenAPI 3.0 via `springdoc-openapi`; all endpoints documented with schemas |
|
||
| **Configuration** | Environment-separated configs (`application-dev.yml`, `application-prod.yml`); no hardcoded secrets |
|
||
|
||
### API Contract Requirements
|
||
|
||
- Minimum **10 distinct REST endpoints** covering the full application domain
|
||
- All endpoints must return a **consistent response envelope**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {},
|
||
"message": "Operation successful",
|
||
"timestamp": "2025-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
- Error responses must include: `success: false`, `errorCode`, `message`, and `timestamp`
|
||
- API contract must be defined as an **OpenAPI 3.0 YAML file** committed to the repository before development begins (design-first)
|
||
|
||
### Backend Testing & Benchmarking
|
||
|
||
#### Functional Testing
|
||
|
||
| Type | Tool | Minimum |
|
||
|---|---|---|
|
||
| Unit Testing | JUnit 5 + Mockito | All service classes; mock repository layer |
|
||
| Integration Testing | `@SpringBootTest` + MockMvc | All controller endpoints; test DB via Testcontainers |
|
||
| Code Coverage | JaCoCo | ≥ 70% line coverage on `service` and `controller` packages |
|
||
|
||
#### Load Benchmarking
|
||
|
||
| Metric | Tool | Pass Threshold |
|
||
|---|---|---|
|
||
| API throughput | Apache JMeter or k6 | ≥ 100 req/s under 50 concurrent users |
|
||
| p95 latency | JMeter or k6 | < 500ms under load |
|
||
| Error rate under load | JMeter or k6 | < 1% at 50 concurrent users |
|
||
| DB query performance | Spring Actuator + slow query log | No query > 200ms for standard operations |
|
||
| JVM memory under load | Actuator `/actuator/metrics` | No heap exhaustion during 5-min load test |
|
||
|
||
Load test scenario: simulate 50 concurrent users performing a realistic user journey (login → fetch list → create resource → logout) for 5 minutes. Export JMeter `.jtl` report or k6 summary as evidence.
|
||
|
||
---
|
||
|
||
## Deliverables
|
||
|
||
### 1. 📁 GitHub Repositories (2 repos)
|
||
|
||
**Flutter Repository** (`[GroupName]-[AppName]-mobile-final`):
|
||
- Feature-first clean architecture folder structure
|
||
- GitHub Actions workflow (`.github/workflows/flutter.yml`) — green at submission
|
||
- `README.md`: setup instructions, environment variables, APK download link
|
||
- All 3 members must have commits; branching strategy enforced
|
||
|
||
**Spring Boot Repository** (`[GroupName]-[AppName]-backend`):
|
||
- Layered package structure (`controller`, `service`, `repository`, `domain`, `dto`, `config`)
|
||
- Flyway migration scripts in `resources/db/migration/`
|
||
- OpenAPI YAML committed before Week 4
|
||
- `README.md`: setup instructions, environment variables, how to run locally
|
||
- JaCoCo HTML coverage report committed or published via CI
|
||
|
||
### 2. 📦 APK File
|
||
|
||
- Release build named `[GroupName]_[AppName]_FinalExam.apk`
|
||
- Must connect to a **live, publicly deployed** Spring Boot backend (not localhost)
|
||
- Acceptable deployment platforms: Railway, Render, Fly.io, or any public URL
|
||
|
||
### 3. 📄 Written Report
|
||
|
||
Format: PDF, minimum **25 pages** (excluding cover and references). Language: English or Bahasa Indonesia.
|
||
|
||
| # | Section | Description |
|
||
|---|---|---|
|
||
| 1 | Cover Page | System name, group name, member names & student IDs, course name, date |
|
||
| 2 | Abstract | 200–250 words covering the system, tech stack, and key findings |
|
||
| 3 | Introduction | Problem background, objectives, target users, scope and limitations |
|
||
| 4 | OOAD — Pre-Development | All design artifacts (use case, class, sequence, state, ERD, component diagrams) |
|
||
| 5 | OOAD — Design Patterns | Documentation of all 4+ patterns with UML and code references |
|
||
| 6 | OOAD — Traceability Audit | Design-to-code mapping table; documented deviations with rationale |
|
||
| 7 | System Architecture | Flutter Clean Architecture, Spring Boot layers, API communication flow diagram |
|
||
| 8 | API Contract | OpenAPI summary, endpoint table, request/response examples |
|
||
| 9 | Flutter Implementation | Key features, state management flow, custom widgets, advanced features |
|
||
| 10 | Spring Boot Implementation | Service layer logic, security config, DB schema, Flyway migrations |
|
||
| 11 | Flutter Testing & Benchmarking | Test results, all 7 benchmark metrics with evidence and delta table |
|
||
| 12 | Backend Testing & Benchmarking | JUnit/integration test results, JMeter/k6 load test report |
|
||
| 13 | Team Contribution | Per-member task table with percentage, cross-verified with Git commit history |
|
||
| 14 | Conclusion | Achievements, design lessons learned, challenges, future improvements |
|
||
| 15 | References | IEEE format |
|
||
|
||
### 4. Presentation
|
||
|
||
- Duration: **15–20 minutes**
|
||
- Structure:
|
||
- Team introduction + system overview (2 min)
|
||
- OOAD design walkthrough — diagrams and pattern explanation (4–5 min)
|
||
- Flutter app live demo — all major flows (5–6 min)
|
||
- Spring Boot API demo — Swagger UI + one live API call (3 min)
|
||
- Benchmark results summary (2 min)
|
||
- All 3 members must present a section
|
||
- Upload to YouTube (unlisted) or Google Drive
|
||
|
||
> **Live Session:** Each member will be questioned individually on the section they presented and on OOAD concepts. Individual scores may differ from the group score.
|
||
|
||
---
|
||
|
||
## Timeline
|
||
|
||
| Phase | Activity | Deadline |
|
||
|---|---|---|
|
||
| Week 1 | Group registration + topic proposal + actor/use case list | Day 7 |
|
||
| Week 2–3 | All OOAD Phase 1A artifacts submitted + OpenAPI YAML drafted | Day 21 |
|
||
| Week 4 | Architecture approved; development sprint begins | Day 28 |
|
||
| Week 5 | Mid-sprint benchmark run (Flutter + Backend) submitted | Day 35 |
|
||
| Week 6–7 | Feature freeze; Flutter ↔ Spring Boot integration testing | Day 49 |
|
||
| Week 7 | Final benchmark run; delta table completed | Day 49 |
|
||
| Week 8 | OOAD traceability audit completed; report writing + video | Day 56 |
|
||
| **Final** | **All deliverables submitted** | **Day 60, 23:59** |
|
||
| Final+1 | Live presentation & individual Q&A | Scheduled by lecturer |
|
||
|
||
---
|
||
|
||
## Grading Rubric
|
||
|
||
Each pillar is graded **independently out of 100 points**. Students receive three separate scores — one per pillar. There is no combined final grade: each score stands on its own and is recorded separately.
|
||
|
||
---
|
||
|
||
### 🥇 Pillar 1 — OOAD Score (/ 100)
|
||
|
||
| Component | Points | Criteria |
|
||
|---|---|---|
|
||
| Pre-development design artifacts | 35 | Completeness of all 6 required diagrams, correctness of notation, diagram tool used (no hand-drawn), submitted before coding begins |
|
||
| Design pattern implementation | 25 | Correct application of ≥ 4 GoF patterns (min 1 per category), UML documented per pattern, each traceable to code with file path |
|
||
| Traceability audit | 25 | Coverage of class-to-code mapping, quality and honesty of deviation documentation, sequence diagram trace accuracy |
|
||
| Cross-pillar design consistency | 15 | Alignment between class diagram, ERD, Flutter domain layer entities, and Spring Boot domain/entity classes |
|
||
|
||
**OOAD Penalty:**
|
||
|
||
| Violation | Deduction |
|
||
|---|---|
|
||
| OOAD artifacts submitted after Week 3 (after coding begins) | −20 points |
|
||
| Diagram produced with unpermitted tool (e.g., hand-drawn, screenshot of AI output) | −15 points |
|
||
| Design pattern claimed but not traceable in code | −8 points per pattern |
|
||
| Traceability audit missing for > 30% of class diagram classes | −10 points |
|
||
|
||
---
|
||
|
||
### 🥈 Pillar 2 — Flutter Mobile Score (/ 100)
|
||
|
||
| Component | Points | Criteria |
|
||
|---|---|---|
|
||
| Clean Architecture compliance | 25 | Strict 4-layer separation enforced, no cross-layer violations, feature-first folder structure correct, dependency direction correct |
|
||
| Features & UX quality | 20 | All required screens functional, JWT auth flow works against live API, custom widget library present, error states handled |
|
||
| Testing — unit & widget | 15 | All use cases and repositories covered, at least 5 widget tests, test quality (meaningful assertions, not just coverage padding) |
|
||
| Testing — integration | 10 | At least 3 end-to-end flows tested against live Spring Boot API, not mocked |
|
||
| Performance benchmarking | 20 | All 7 metrics reported on physical device in profile mode, DevTools screenshots provided, delta table (mid vs final), root cause for any regression > 20% |
|
||
| Report clarity | 10 | Report is complete and have clear explanation |
|
||
|
||
**Flutter Penalty:**
|
||
|
||
| Violation | Deduction |
|
||
|---|---|
|
||
| Responsive Design fail | −10 points |
|
||
| Benchmarks run on emulator only (no physical device) | −10 points |
|
||
| Missing delta table (mid-sprint vs final benchmark) | −8 points |
|
||
| State management inconsistency (mixing BLoC and Riverpod) | −10 points |
|
||
| Raw `try/catch` found in presentation layer | −5 points per occurrence (max −15) |
|
||
| APK connects to localhost instead of deployed backend | −15 points |
|
||
|
||
---
|
||
|
||
### 🥉 Pillar 3 — Spring Boot Score (/ 100)
|
||
|
||
| Component | Points | Criteria |
|
||
|---|---|---|
|
||
| API design & OpenAPI contract | 25 | ≥ 10 endpoints, consistent response envelope, versioned routes, OpenAPI 3.0 YAML committed before Week 4, Swagger UI accessible |
|
||
| Layered architecture & security | 25 | Strict Controller → Service → Repository separation, JWT with access + refresh token, RBAC with at least 2 roles, no hardcoded secrets |
|
||
| Testing — unit & integration | 25 | JUnit 5 + Mockito for all service classes, MockMvc + Testcontainers for all controllers, JaCoCo ≥ 70% on `service` and `controller` packages |
|
||
| Load benchmarking | 25 | All 5 metrics reported (throughput, p95 latency, error rate, DB query time, JVM heap), JMeter `.jtl` or k6 summary exported, analysis against pass thresholds |
|
||
|
||
**Spring Boot Penalty:**
|
||
|
||
| Violation | Deduction |
|
||
|---|---|
|
||
| Hardcoded secrets (API keys, DB passwords) in any file | −15 points |
|
||
| JaCoCo coverage below 70% | −10 points |
|
||
| No Flyway migrations (schema managed manually) | −8 points |
|
||
| OpenAPI YAML committed after Week 4 | −10 points |
|
||
| Load test run with < 50 concurrent users | −10 points |
|
||
| Business logic found directly in Controller class | −8 points per occurrence (max −16) |
|
||
|
||
---
|
||
|
||
### Universal Penalty (Applied to All Three Pillar Scores)
|
||
|
||
| Violation | Deduction |
|
||
|---|---|
|
||
| Late submission (per day, applied to all pillars) | −5 points per pillar |
|
||
| Missing deliverable | −15 points from the relevant pillar |
|
||
| Plagiarized code (any source) | 0 on all three pillars |
|
||
| Member with < 10% commits and no other contribution evidence | That member's individual pillar scores reduced by 20 points each |
|
||
|
||
---
|
||
|
||
## Academic Integrity
|
||
|
||
- All code must be original. Open-source libraries are permitted with proper attribution in both READMEs and the report.
|
||
- Use of AI coding assistants is **permitted but must be disclosed** in a dedicated "AI Tool Usage" section in the report, listing which tools were used, for which tasks, and how outputs were reviewed and understood.
|
||
- Design artifacts must be produced by the group. AI-generated diagrams submitted without annotation will be identified during the live Q&A.
|
||
- Plagiarism between groups or from public repositories results in **zero marks for all involved groups**.
|
||
|
||
---
|
||
|
||
## Submission Checklist
|
||
|
||
- [ ] Flutter GitHub repository (Actions pipeline green, branch protection active, 3+ merged PRs)
|
||
- [ ] Spring Boot GitHub repository (JaCoCo report committed, OpenAPI YAML present, Flyway migrations included)
|
||
- [ ] APK file connecting to live deployed backend (`[GroupName]_FinalExam.apk`)
|
||
- [ ] Written report PDF (≥ 25 pages, all 16 sections complete, benchmark delta table included)
|
||
- [ ] Demo video link (YouTube unlisted or Google Drive, all 3 members presenting)
|
||
- [ ] OOAD traceability matrix (Section 6 of report)
|
||
- [ ] Mid-sprint benchmark results (Sections 11 & 12 of report)
|
||
- [ ] JMeter/k6 load test export (appendix or Drive link)
|
||
|
||
---
|
||
|
||
## Contact & Questions
|
||
|
||
All questions must be submitted through the official course channel. Questions submitted at least **48 hours before any deadline** are guaranteed a response. Design artifact reviews (Week 2–3) require a scheduled appointment — contact the lecturer by Week 1 to book a slot.
|
||
|
||
---
|
||
|
||
*Build systems you can defend, designs you can explain, and code that reflects your thinking. 🚀*
|