2026-05-27 19:36:01 +07:00

412 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📱 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 23 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 | 200250 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: **1520 minutes**
- Structure:
- Team introduction + system overview (2 min)
- OOAD design walkthrough — diagrams and pattern explanation (45 min)
- Flutter app live demo — all major flows (56 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 23 | 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 67 | 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 23) 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. 🚀*