Phase 1: Requirements + UML + Refactoring
Due by 11:59 PM on Wednesday, March 6, 2024
Important: This document provides insights into how to write each section. Do not just rely on this template, consult the project specification to ensure completeness of your report. Avoid modifying section titles or numbers.
Requirement Analysis (4%)
Current System Analysis
Briefly describe the existing functionalities of the Quackstagram codebase.
Stakeholder Engagement
Summarize the feedback and additional requirements gathered from potential users and stakeholders (think about the requirements you extracted from the transcript).
Requirements Specification
Functional Requirements
List the detailed functional requirements.
Non-Functional Requirements
List the detailed non-functional requirements.
Priortization of Requirements
Indicate the priority of the requirements listed above and provide a rationalization for your prioritization. You don’t need to justify each requirement individually but may do so for categories of requirements. For example, if privacy is emphasized as crucial in the interview transcripts, you can explain giving high priority to all privacy-related requirements.
Here is an illustrative table of requirements and prioritization (note: these requirements are fictional and should not be used in your submission):
| Requirement ID | Requirement Description | Priority |
|---|---|---|
| REQ-01 | Implement rainbow color scheme | High |
| REQ-02 | Allow users to upload cat pictures | Medium |
| REQ-03 | Integrate with fictional API XYZ | Low |
| REQ-04 | Support voice commands for navigation | High |
| REQ-05 | Generate unicorn avatars for new users | Medium |
| REQ-06 | Include a feature to find nearest coffee shop | Low |
Rationalization for Requirement Prioritization:
High Priority: Implementing a rainbow color scheme and supporting voice commands are essential for ensuring accessibility and attractiveness of the interface.
Medium Priority: Unique aspects like allowing users to upload cat pictures and generating unicorn avatars, which can significantly improve user satisfaction.
Low Priority: While beneficial, integrating with fictional API XYZ and including a feature to find the nearest coffee shop are considered low priority.
UML Modeling (4%)
Current System UML Diagrams
Insert the UML diagrams (structural, behavioral, and interaction) of the current system. Ensure there are at least 2 diagrams of each type.
Structural Diagrams
- Diagram 1
- Diagram 2
Behavioral Diagrams
- Diagram 1
- Diagram 2
Interaction Diagrams
- Diagram 1
- Diagram 2
Use Cases
Provide detailed use cases illustrating possible interactions with the system. Include at least 6 use cases.
- Use Case 1
- Use Case 2
- …
- Use Case 6
Refactoring (4%)
Include a list of code segments you have refactored and the rationale behind each choice.
Consider the following example and structure your report in a similar manner:
Before Refactoring:
public class Calculator {
public int calculate(int a, int b, String operation) {
if (operation.equals("add")) {
return a + b;
} else if (operation.equals("subtract")) {
return a - b;
}
return 0;
}
}After Refactoring:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}Rationale:
Clear Method Responsibilities: The refactored code provides specific methods for each operation (
addandsubtract), improving clarity and making the code easier to read.Removes Conditional Logic: Eliminating the
if-elsecondition simplifies thecalculatemethod’s logic, reducing complexity and potential errors in selecting operations.Enhances Maintainability: With dedicated methods for each arithmetic operation, adding new operations (like multiply or divide) becomes easier and the codebase more maintainable.
Object-Oriented Design (4%)
Include a list of design changes you have made to adhere to good Object-Oriented Design principles along with a justification. You can use a structuring similar to that of Refactoring above (before and after code snippts and an explanation)
Proposal for New Functionality (Not graded)
Describe the new functionality that is proposed to be added to the system, including its relevance and expected impact on the overall system.