Skip to the content.

Enhancement One - Software Design and Engineering

Enhancement One

Narrative

Briefly describe the artifact. What is it? When was it created?

This artifact is a text-based game written in procedural code in Python. It was created in IT 140 during my first term at Southern New Hampshire University, two years ago. When the game begins, the user is greeted with a welcome message in the console. The setting of the game is that the Chupacabras has come to attack the player’s livestock, so the player needs to go to each room of their house collecting items to defend against the Chupacabras. The player types commands beginning with “go” followed by a cardinal direction to change rooms, or “get” followed by an item name to pick it up. The players do not have a map of the house, so they will have to navigate through the rooms, hoping they do not reach the location the Chupacabras is in before they collect all the items.

Justify the inclusion of the artifact in your ePortfolio. Why did you select this item? What specific components of the artifact showcase your skills and abilities in software development? How was the artifact improved?

The original artifact is a very basic game played in the console. After finishing it, I wanted to share it with my friends and family. I knew it would be easier for them to access and play it if it had a decent GUI and were playable on a browser, but at the time I had neither the time nor the skills to accomplish that. When I learned that the computer science Capstone involved enhancing a past assignment, I immediately thought of this project. I enhanced the game by refactoring it into an object-oriented design so it would become easy to maintain and scalable for future features and expansions. In my courses I learned about different design patterns that could be used in software. I chose to use a factory pattern to create a dictionary of Room objects. I also improved playability by allowing players to voluntarily quit the game by pressing “q”, and giving users the option to restart a game after finishing or quitting. These components show by ability to refactor code for readability and maintainability, implementing design patterns appropriately, and consider user experience.

Did you meet the course outcomes you planned to meet with this enhancement in Module One? Do you have any updates to your outcome-coverage plans?

I planned to meet outcome 2: “Design, develop, and deliver professional-quality oral, written, and visual communications that are coherent, technically sound, and appropriately adapted to specific audiences and contexts”, outcome 4: “Demonstrate an ability to use well-founded and innovative techniques, skills, and tools in computing practices for the purpose of implementing computer solutions that deliver value and accomplish industry-specific goals”, and outcome 5: “Develop a security mindset that anticipates adversarial exploits in software architecture and designs to expose potential vulnerabilities, mitigate design flaws, and ensure privacy and enhanced security of data and resources.” I met outcome 2 by documenting my code with docstrings and using descriptive clear names for classes, methods, and variables. I met outcome 4 by refactoring the code to an object-oriented design and researching factory pattern implementation and adapting it to work in my code. I met outcome 5 by incorporating user input validation. I plan to incorporate more security as I progress through the enhancements.

Reflect on the process of enhancing and modifying the artifact. What did you learn as you were creating it and improving it? What challenges did you face?

I practiced my attention to detail as I read through the original procedural code, looking for possible classes, attributes, and methods to include in the enhanced object-oriented code. While I had read about the factory pattern before, I had never tried to implement it in code. It was challenging to figure out how to adapt the examples I found online to fit my code. I read about the necessary components, then incrementally wrote and tested my code until I was able to build it out. I learned how to implement design patterns, improved my ability to refactor and enhance legacy code, and strengthened my problem-solving skills.