In this course we have learned about prescriptive vs. descriptive software designs, i.e., the intended vs. the actual design of software. In this assignment we do not know what the intended design is, but your job is to create the actual (descriptive) design by reading the code of an open source software project. The code for Home Assistant (https://github.com/home-assistant/home-assistant (Links to an external site.)), is written in Python and is object oriented. Even if your programming language of choice is different than Python, the code is readable from the perspective of understanding the classes, attributes, functions and function calls, which is what is needed to reverse engineer the design.
Please turn in a pdf document containing the following:
- (50 points) UML class diagram created in a drawing program such as PowerPoint or Google Slides
- Every class from the program should be depicted
- Classes should have attributes and functions
- Classes should show relationships indicating which class calls a function in another class.
- (25 points) 1 paragraph of text evaluating the design.
- How does it do in terms of coupling and cohesion?
- What if anything would you change in the design and why?
- How would you go about adding new features, given the design?
- (25 points) 1 paragraph of text summarizing your experience reverse engineering the design.
- What was simple and what was tricky?
- How did it change your understanding of how the program works?
- Your reflections