Software Design Architecture Comparison

From Foss2Serve
Revision as of 00:20, 5 February 2016 by Nyeates (Talk | contribs)
Jump to: navigation, search
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:
  • Taken a CS1 course (Introduction to Programming).
    • Already learned syntax and the basics of a programming language.
    • Already learned simple data structures.
  • Rudimentary software design knowledge
    • Could be delivered along-with this activity
    • Ex: Design Patterns knowledge
Learning Objectives Upon completion, students should:
  • Understand how thoughtful software design is encouraged, or not, in open source communities.
  • Be able to give examples of software design artifacts, and how to go about finding them.
  • Realize what they consider good software design, and be able to back it up with reason.
  • Realize why software design is important, and how it will effect them in their future careers.

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:


Directions:

Part 1: Software design background

Is this even needed? Maybe we make these assumptions in the pre-req's

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: Eclipse and OpenStack introductions

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

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 throught 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 remember which function you want to use, and it gives you a list 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.

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? Next, gather some technical statistics. Use tools such as Ohloh (now OpenHub) to get general technical stats and background. What programming languages are used? 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.

What functionality does each project provide its users? What programming languages are used? What percentage of the code are comments? Other?


Part 3: 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?

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.

Software design - Potential communities to look into:

Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox