An assignment for redesigning software and refactoring code smells. Part of Software Engineering class CS321, fall 2024.
- Practice redesigning a software project with guidance from SOLID design principles.
- Refactor code to address design smells and enhance readability and maintainability.
- Apply Agile Scrum and project management fundamentals.
- Collaborate as a team using Git and GitHub effectively.
In this project, you will work in small teams to extend and improve an existing online book store. The project focuses on adding new functionality while ensuring the system adheres to key software design principles. Throughout the project, you will practice collaborative development via GitHub, utilizing best practices such as issue tracking, code reviews, and feature branching.
- The repo manager should begin by forking the project repository on GitHub and adding all team members as collaborators.
- Starting Repository: [Link to be provided]
- The forked repository will serve as your team's workspace. All progress will be tracked through GitHub.
- Draw a UML class diagram to visualize the system's structure and component relationships.
- Have a group discussion on the current design and code to ensure all team members understand the system.
- Identify design problems in the system that violate SOLID principles.
- Make a list of any code smells (e.g., duplicated code, long methods, or classes with too many responsibilities).
- Document each issue clearly, providing examples from the codebase.
- Discuss potential solutions for each identified design problem and code smell.
- Add these problems as issues in your GitHub repository. Each issue should include:
- A clear description of the problem (with references to the code).
- The proposed solution (e.g., refactoring, code redesign, or applying SOLID principles).
- Extend the system's functionality by:
- Updating the order printing to include discount details.
- Expanding the system to support new media types: audiobooks, DVDs, and e-books.
- Plan the necessary design changes to incorporate these new features while maintaining SOLID principles.
- The backlog manager is responsible for organizing identified issues into a milestone.
- Properly label each issue, indicating its type (e.g., "bug," "enhancement," "refactoring") and priority level.
- Each team member should select one issue at a time to work on and may take on another only after completing the current one.
- Follow Git/GitHub practices by:
- Creating a feature branch for each issue.
- Ensuring that your branch doesn't break the system (test your changes).
- Opening a pull request (PR) to merge your changes back into the main branch.
- Code Reviews: Each team member must review at least one PR from another member to ensure code quality and consistency.
- Keep the main branch in a working state at all times. No broken or unfinished code should be merged into the main branch.
- Ensure no stale feature branches remain after a milestone. Clean up unused branches.
- Fix all coding style issues with guidance from a tool such as CheckStyle. Document your progress with before/after snapshots of the code.
- Create a burndown chart for this sprint using GitHub or another tool.
- Add a creative and elaborate
README.md
file to your repository explaining the work you did. This should be more creative than the project report.
Organize a Google Doc report with the following sections, including screenshots and text to communicate the objectives of your work:
-
Abstract:
A brief summary of the Sprint in your own words (no more than 150 words). Give context and summarize the outcome. -
Results:
A section outlining the results of your Sprint, including links to your public repository. -
Reflection:
Reflect on what you learned during the Sprint. -
Extensions:
Describe any extensions you undertook, supported by text output, graphs, tables, or images. -
References/Acknowledgements/AI Use Documentation:
List any references used and acknowledge AI tools, if applicable, that contributed to your work.