Software Design Architecture Comparison
Title | Software Design and Architecture Comparison (Eclipse vs Openstack) |
Overview | Students will research existing software design documents and resources for both projects and then write a report detailing their differences and helpfulness to various levels of developers. |
Prerequisite Knowledge | Students should have:
|
Learning Objectives | Upon completion, students should:
|
Background:
Is there background reading material?
What is the rational for this activity?
For students, who are often novice and beginner developers, it is critical to understand the big-picture when jumping into a new software project. A proper view of the system-wide architecture can bring context on how the entire system works, instead of focus on a particular component. When you can have knowledge of other pieces of the puzzle, you tend to implement better code because it is thoughtful of how your current focus interacts with functionality around it and even to functionality seemingly far-removed. Students need to be aware of why this helps them and their career, how to find this kind of documentation, and that it might shape their opinions and focus when choosing projects to interact with.
Are there any similar activities?
See OpenMRS_Design_Reverse_Engineering_Activity_(Android_App) for an activity that has students reverse engineer a design / architecture from an existing open source Android applications codebase.
Background reading:
- https://en.wikipedia.org/wiki/Software_design
- https://en.wikipedia.org/wiki/Software_design_pattern
- http://stackoverflow.com/questions/704855/software-design-vs-software-architecture
- http://www.openu.ac.il/personal_sites/download/galezer/SoftwareDesign.pdf
- This paper describes how they had to get students to re-think how they write code. The students needed to think more outside of the syntax of the actual language, and more toward software design / repeatable design patterns that dont depend on the coding language.
- I am looking at this paper and thinking about the various tasks or activities that they show were done in their classroom. I may be able to use these ideas.
- “It should be re-emphasized that practical programming does not play a central role in the unit. At the end of the year students and teachers realized that programming in itself is not the main goal.”
- http://stackoverflow.com/questions/268231/how-to-learn-good-software-design-architecture
- http://cc2e.com/
- Code Complete Book - Design chapter
- ‘Design’ is similar to my definition of ‘software-architecture’, except that design can pervade into lower levels of classes and routines and code
- Gof Design Patterns
- GoF Design Patterns Explained
- Research Paper: Design patterns in open source
- Book: Architecture of Open Source Applications - from Tom
- Openstack Oslo - from email to listserv
Directions:
Part 1: Software design background
Bacon ipsum dolor amet tail swine fatback short loin venison, flank boudin. Boudin kevin landjaeger pork loin drumstick. Fatback biltong swine spare ribs, pig hamburger jowl leberkas pork belly. Beef jerky meatloaf, chuck swine tail pork chop shank jowl cupim strip steak salami.
Chuck swine flank beef, strip steak ham hock short ribs capicola doner salami tongue beef ribs. Filet mignon strip steak ball tip pork loin beef ribs spare ribs pork chop picanha kielbasa meatball boudin landjaeger. Venison tongue rump sausage biltong pork belly kevin t-bone prosciutto corned beef. Jowl frankfurter ground round pastrami pork chop swine tri-tip porchetta landjaeger. Pork belly pig shank ribeye.
Part 2: Comparison
Deliverables:
What will the student hand in?
Assessment:
How will the activity be graded?
How will learning will be measured?
Include sample assessment questions/rubrics.
Criteria | Level 1 (fail) | Level 2 (pass) | Level 3 (good) | Level 4 (exceptional) |
---|---|---|---|---|
The purpose of the project | ||||
Why the project is open source |
Comments:
What should the instructor know before using this activity?
What are some likely difficulties that an instructor may encounter using this activity?
Additional Information:
ACM Knowledge Area/Knowledge Unit | What ACM Computing Curricula 2013 knowledge area and units does this activity cover? ACM_Body_of_Knowledge |
ACM Topic | What specific topics are addressed? The Computing Curriucula 2013 provides a list of topics - https://www.acm.org/education/CS2013-final-report.pdf |
Level of Difficulty | Is this activity easy, medium or challenging? |
Estimated Time to Completion | How long should it take for the student to complete the activity? |
Materials/Environment | What does the student need? Internet access, IRC client, Git Hub account, LINUX machine, etc.? |
Author | Nick Yeates |
Source | Is there another activity on which this activity is based? If so, please provide a link to the original resource. |
License | Creative Commons CC-BY |
Suggestions for Open Source Community:
Suggestions for an open source community member who is working in conjunction with the instructor.
This work is licensed under a Creative Commons Attribution 4.0 International License
Appendix
Note: Can be removed later, or kept as a resource to teaches looking into other communities.
Software design - Potential communities to look into:
- Look at openshift’s software architecture
- Software architecture?
- Talk to someone on the team - get someone who is an expert and quiz them
- GNOME Shell - graphical environment - UI of Fedora - public iterative design to implementation
- GNOME Documents and Photos - iterative design
- Inkscape community
- Hacking and Contributing files
- Openstack design process - blueprints idea, where you write feature and how you want to do it, get sign off from community and then patches are reviewed and go through significant revision
- Developers Guide - http://docs.openstack.org/infra/manual/developers.html
- http://docs.openstack.org/project-team-guide/project-setup/python.html
- https://www.python.org/dev/peps/pep-0008/
- http://docs.openstack.org/project-team-guide/open-community.html#technical-committee-and-ptl-elections
- https://github.com/openstack-dev/hacking/blob/master/HACKING.rst
- hacking.md files, Style Guides, Pep8,
- http://docs.openstack.org/project-team-guide/open-design.html
- https://wiki.openstack.org/wiki/Blueprints
- https://review.openstack.org/#/q/status:open
- http://docs.openstack.org/infra/manual/developers.html
- https://review.openstack.org/Documentation/intro-quick.html
- http://docs.openstack.org/infra/system-config/gerrit.html
- Developers Guide - http://docs.openstack.org/infra/manual/developers.html