Software Design Architecture Comparison
(switched up questions and info in part1) |
(broke up content into more digestable bullets; shifted questions to deliverables) |
||
Line 12: | Line 12: | ||
* Rudimentary software design knowledge | * Rudimentary software design knowledge | ||
** Could be delivered along-with this activity | ** Could be delivered along-with this activity | ||
− | ** Ex: Design Patterns knowledge | + | ** Ex: [https://en.wikipedia.org/wiki/Software_design_pattern Design Patterns] knowledge |
|- | |- | ||
|'''Learning Objectives''' || Upon completion, students should: | |'''Learning Objectives''' || Upon completion, students should: | ||
Line 37: | Line 37: | ||
=== Directions: === | === Directions: === | ||
− | ==== Part 1: Eclipse and OpenStack | + | ==== Part 1: Exploring Eclipse and OpenStack ==== |
In this activity, we will focus on the Eclipse IDE (Platform) project and the OpenStack cloud project. Below, you will learn about these projects and their open communities. After this, you will compare and contrast the design and architecture artifacts available in these communities. Both projects are open source and very large, with many hundreds of participants. Be aware that you will not be able to immediately jump into the code of these projects. We will take a process below where we progress our knowledge bit by bit. You can easily use this process again for future projects. | In this activity, we will focus on the Eclipse IDE (Platform) project and the OpenStack cloud project. Below, you will learn about these projects and their open communities. After this, you will compare and contrast the design and architecture artifacts available in these communities. Both projects are open source and very large, with many hundreds of participants. Be aware that you will not be able to immediately jump into the code of these projects. We will take a process below where we progress our knowledge bit by bit. You can easily use this process again for future projects. | ||
− | |||
− | The next step is delving into the high-level design or architecture of each project. Below are a list of required reading resources. In addition to these, you should do your own research to find the most up-to-date resources | + | Because these are projects that you may know little or nothing about, first delve into the basics: |
+ | * Gather a quick understanding of each project from a user's point of view. | ||
+ | * What functionality does each project provide its users? It may be helpful to read third party reviews or descriptions, as wikipedia and project websites often do not have beginner descriptions that give you enough context. | ||
+ | * Next, gather some technical statistics. Use tools such as Ohloh (now [https://www.openhub.net OpenHub]) to get general technical stats and background. | ||
+ | * What programming languages are used? Which one(s) is major, which ones are minor? | ||
+ | * What percentage of the code are comments? | ||
+ | * Mention other general statistics or information that might be helpful when reading into a projects design and architecture. | ||
+ | |||
+ | |||
+ | The next step is delving into the high-level design or architecture of each project. Below are a list of required reading resources. In addition to these, you should do your own research to find the most up-to-date resources pertaining to the projects software design and architecture. Software and documentation change drastically over time, so do your own search. | ||
+ | |||
+ | Think about the following questions when reading below: | ||
+ | * How do high-level modules and packages work together? | ||
+ | * Does the project have a data layer or store? | ||
+ | * How does each system weave the user into their architecture? | ||
+ | * (bonus) Are there any design patterns that you saw mentioned or that you think might be used? Do not focus on being 100% correct - take some guesses and explain why. | ||
+ | |||
− | Required Reading: Read the following book chapter fully: | + | Required Reading: |
− | + | * Read the following book chapter fully: [http://www.aosabook.org/en/eclipse.html The Architecture of Open Source Applications - Eclipse chapter] | |
− | ** By Amy Brown and Greg Wilson | + | ** By Amy Brown and Greg Wilson; Licensed under [http://creativecommons.org/licenses/by/3.0/legalcode CC BY 3.0] |
+ | * | ||
Look for additional information: | Look for additional information: | ||
− | * Find additional readings around design/architecture in Eclipse: | + | * Find additional readings around design/architecture in Eclipse. Start here: |
** Review the below and attempt to find additional resources; You can often find more up-to-date resources over time as software is changed | ** Review the below and attempt to find additional resources; You can often find more up-to-date resources over time as software is changed | ||
** https://wiki.eclipse.org/Learn_About_Eclipse | ** https://wiki.eclipse.org/Learn_About_Eclipse | ||
** http://www.eclipse.org/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.pdf | ** http://www.eclipse.org/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.pdf | ||
** htp://www.eclipse.org/eclipse/ | ** htp://www.eclipse.org/eclipse/ | ||
− | * Find additional readings around design/architecture in OpenStack: | + | * Find additional readings around design/architecture in OpenStack. Start here: |
** | ** | ||
** | ** | ||
Line 61: | Line 77: | ||
− | + | ==== Part 2: Comparing Designs and Architectures ==== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ==== Part 2: | + | |
Line 79: | Line 89: | ||
=== Deliverables: === | === Deliverables: === | ||
− | + | Students will deliver: | |
+ | # For Part 1, their answers to the following questions: | ||
+ | #* What functionality does each project provide its users? (1-2 paragraphs) | ||
+ | #* What programming languages are used? Which one(s) is major, which ones are minor? | ||
+ | #* What percentage of the code are comments? | ||
+ | #* Mention other general statistics or information that might be helpful when reading into a projects design and architecture. | ||
+ | #* How do high-level modules and packages work together? | ||
+ | #* Does the project have a data layer or store? | ||
+ | #* How does each system weave the user into their architecture? | ||
+ | #* (bonus) Are there any design patterns that you saw mentioned or that you think might be used? Do not focus on being 100% correct - take some guesses and explain why. | ||
+ | # For Part 2, | ||
+ | #* | ||
+ | #* | ||
+ | #* | ||
Revision as of 22:53, 5 February 2016
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.
Directions:
Part 1: Exploring Eclipse and OpenStack
In this activity, we will focus on the Eclipse IDE (Platform) project and the OpenStack cloud project. Below, you will learn about these projects and their open communities. After this, you will compare and contrast the design and architecture artifacts available in these communities. Both projects are open source and very large, with many hundreds of participants. Be aware that you will not be able to immediately jump into the code of these projects. We will take a process below where we progress our knowledge bit by bit. You can easily use this process again for future projects.
Because these are projects that you may know little or nothing about, first delve into the basics:
- Gather a quick understanding of each project from a user's point of view.
- What functionality does each project provide its users? It may be helpful to read third party reviews or descriptions, as wikipedia and project websites often do not have beginner descriptions that give you enough context.
- Next, gather some technical statistics. Use tools such as Ohloh (now OpenHub) to get general technical stats and background.
- What programming languages are used? Which one(s) is major, which ones are minor?
- What percentage of the code are comments?
- Mention other general statistics or information that might be helpful when reading into a projects design and architecture.
The next step is delving into the high-level design or architecture of each project. Below are a list of required reading resources. In addition to these, you should do your own research to find the most up-to-date resources pertaining to the projects software design and architecture. Software and documentation change drastically over time, so do your own search.
Think about the following questions when reading below:
- How do high-level modules and packages work together?
- Does the project have a data layer or store?
- How does each system weave the user into their architecture?
- (bonus) Are there any design patterns that you saw mentioned or that you think might be used? Do not focus on being 100% correct - take some guesses and explain why.
Required Reading:
- Read the following book chapter fully: The Architecture of Open Source Applications - Eclipse chapter
- By Amy Brown and Greg Wilson; Licensed under CC BY 3.0
Look for additional information:
- Find additional readings around design/architecture in Eclipse. Start here:
- Review the below and attempt to find additional resources; You can often find more up-to-date resources over time as software is changed
- https://wiki.eclipse.org/Learn_About_Eclipse
- http://www.eclipse.org/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.pdf
- htp://www.eclipse.org/eclipse/
- Find additional readings around design/architecture in OpenStack. Start here:
Part 2: Comparing Designs and Architectures
Eclipse-specific questions: Explain the plugin concept and why it is centrally important to Eclipse. Which component model did Eclipse switch to and why? Explain Eclipse's decision to refactor and generalize their bundles for RCP applications. These design decisions opened their software up to uses they had not dreamt of, such as monitoring the Mars rover. How is this a perfect example of software reuse and modularization?
Deliverables:
Students will deliver:
- For Part 1, their answers to the following questions:
- What functionality does each project provide its users? (1-2 paragraphs)
- What programming languages are used? Which one(s) is major, which ones are minor?
- What percentage of the code are comments?
- Mention other general statistics or information that might be helpful when reading into a projects design and architecture.
- How do high-level modules and packages work together?
- Does the project have a data layer or store?
- How does each system weave the user into their architecture?
- (bonus) Are there any design patterns that you saw mentioned or that you think might be used? Do not focus on being 100% correct - take some guesses and explain why.
- For Part 2,
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?
Encourage students to find new design and architecture information. They should be scouring the sites wiki's, code, documentation, etc. Because these communities are large, their resources will grow and change over time. What was there one semester, may not be there another semester. Or, they may add design documentation that formerly was not there. The links given to students should be a guide - they are not exhaustive.
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.
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
- Email list Discussion on design and architecture
- 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,
- User-oriented Architectures
- Logical Architecture - http://docs.openstack.org/openstack-ops/content/example_architecture.html
- Conceptual Architecture - http://docs.openstack.org/admin-guide-cloud/common/get_started_conceptual_architecture.html#get-started-conceptual-architecture
- http://docs.openstack.org/icehouse/training-guides/content/associate-getting-started.html
- Dev Documentation
- 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
Background Readings
- 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
Project Descriptions
These are being cut for now, because students should figure this out. FIXME think of bringing up a few key sentences to above.
Eclipse is an Integrated Development Environment (IDE) that runs on desktop computers. An IDE is basically a fancy code-editor for developers who are creating software. A developer needs not only edit code in text files, but also to run the code, debug the code (possibly stepping through the code one-line at a time, looking for a bug), they need to see hierarchical views of the classes, and have ease-of-use functions like code completion (you can't remember which function you want to use, and the IDE gives you a list of choices while you are typing). Eclipse centers on Java development, though it is also usable for dozens of other languages. Do not confuse the 'Eclipse IDE' with the 'Eclipse Foundation', which was created after the successful IDE and now encompasses hundreds of open source project.
OpenStack is a cloud infrastructure platform. FIXME Bacon ipsum dolor amet venison short loin porchetta, cow picanha swine corned beef tri-tip fatback pork belly sirloin landjaeger leberkas. Capicola ball tip ham fatback hamburger alcatra short ribs shoulder meatloaf corned beef tri-tip pancetta brisket. Salami biltong kielbasa swine porchetta cupim. Hamburger tongue sirloin drumstick boudin corned beef ham shoulder ground round meatloaf ribeye alcatra tri-tip landjaeger kielbasa. Chicken strip steak kevin turkey drumstick bresaola salami bacon ground round. Kevin picanha sirloin tri-tip jerky.