OpenMRS Design Reverse Engineering Activity (Android App)

From Foss2Serve
(Difference between revisions)
Jump to: navigation, search
(Tweak the formatting)
(Suggestions for Open Source Community)
 
(23 intermediate revisions by 9 users not shown)
Line 1: Line 1:
=== Preparation: ===
+
__NOTOC__
{| border="1"
+
 
|-
+
{{Learning Activity Overview
|'''Description''' ||  Expose student to the OpenMRS Android client and have them reverse engineer the design of the module.
+
|title=
|-
+
OpenMRS Design Reverse Engineering Activity (Android App)
|'''Source''' || Darci Burdge, Steven P. Crain, Ruby ElKharboutly, Barrett Koster, Shamsi Moussavi, Chris Murphy
+
|overview=
|-
+
Expose student to the OpenMRS Android client and have them reverse engineer the design of the module.
|'''Prerequisite Knowledge''' || Java, Android, UML, dynamic and static modeling  
+
|prerequisites=
|-
+
Java, Android, UML, dynamic and static modeling  
|'''Estimated Time to Completion''' || 6-8 hours
+
|objectives=
|-
+
|'''Learning Objectives''' ||
+
 
# Evaluate an existing project and analyze its current documentation
 
# Evaluate an existing project and analyze its current documentation
 
# Read and understand professionally written code
 
# Read and understand professionally written code
Line 16: Line 14:
 
# Develop software architecture and design documentation for an existing project
 
# Develop software architecture and design documentation for an existing project
 
# Recognize coding conventions and design patterns
 
# Recognize coding conventions and design patterns
|-
+
|process skills=
|'''Materials/Environment''' || Access to Internet, installed Eclipse with correct version
+
}}
|-
+
 
|'''Rights''' ||[[File:Creativecommons-by-nc-sa-40.png]] This activity is licensed under a [http://creativecommons.org/licenses/by-nc-sa/4.0/ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License].
+
=== Background ===
|-
+
 
|'''Turn In''' || The architecture, UML of the structure (class diagrams).  Also analysis of design-related concepts: coupling, cohesion. Perhaps identifying design patterns.
+
[http://www.openmrs.org OpenMRS] is an application which enables design of a customized medical records system with no programming knowledge. It is a common framework upon which medical informatics efforts in developing countries can be built. For more technical information, see: https://wiki.openmrs.org/display/docs/Technical+Overview
|}
+
=== Background: ===
+
[http://www,openmrs.org OpenMRS] is an application which enables design of a customized medical records system with no programming knowledge. It is a common framework upon which medical informatics efforts in developing countries can be built.
+
 
OpenMRS is also a community of people working to apply health information technologies to solve problems, primarily in resource-poor environments.  They are a proud community of developers, implementers, funders, and users all trying to make the world a better place by using our expertise to improve the health and wellness of the planet.
 
OpenMRS is also a community of people working to apply health information technologies to solve problems, primarily in resource-poor environments.  They are a proud community of developers, implementers, funders, and users all trying to make the world a better place by using our expertise to improve the health and wellness of the planet.
The OpenMRS Android app allows a user to...
+
The [https://wiki.openmrs.org/display/projects/OpenMRS+2.x+Android+Client OpenMRS Android Client] provides mobile functionality that includes registering patients, taking visit notes, capturing vitals, etc. The also supports working off-line (without network connection) with a chosen subset of patients.  
 
In this assignment, you will familiarize yourself with the implementation of the Android app by reviewing and documenting the software architecture and class design.  
 
In this assignment, you will familiarize yourself with the implementation of the Android app by reviewing and documenting the software architecture and class design.  
=== Directions: ===
+
 
====IDE installation====
+
=== Directions ===
 +
==== IDE installation ====
 +
 
 
# Go to:  http://developer.android.com/index.html
 
# Go to:  http://developer.android.com/index.html
 
## At the bottom of the page choose the Get the SDK link.
 
## At the bottom of the page choose the Get the SDK link.
Line 39: Line 36:
 
Once the download is complete, you can close the SDK Manager.
 
Once the download is complete, you can close the SDK Manager.
 
   
 
   
# You can follow the directions from - http://developer.android.com/tools/devices/managing-avds.html - to create an AVD.
+
==== Installing OpenMRS Android project ====
====Installing OpenMRS Android project====
+
 
# Download the OpenMRS Android client as an Eclipse project [somewhere here]
+
# Download the OpenMRS Android client as an Eclipse project
 
# Import the project into Eclipse: File -> Import... -> Android -> Existing Android Code into Workspace -> then browse to the directory containing the Eclipse project that you downloaded
 
# Import the project into Eclipse: File -> Import... -> Android -> Existing Android Code into Workspace -> then browse to the directory containing the Eclipse project that you downloaded
# The DashboardActivity project depends on the appcompat, gridlayout, and odk.collect projects. If Eclipse shows an error message in the DashboardActivity, about these other projects, add them to the Java Build Path of the DashboardActivity project.  
+
# The DashboardActivity project depends on the appcompat, gridlayout, and odk.collect projects. If Eclipse shows an error message in the DashboardActivity, about these other projects, add them to the Java Build Path of the DashboardActivity project.
====Running the OpenMRS Android app:====
+
 
# Create an AVD using Android 4.4.2 (API level 19). When creating it, be sure that you give it an SD card of at least 128MB
+
==== Running the OpenMRS Android app ====
 +
 
 +
# Create an AVD using Android 4.4.2 (API level 19). You can follow the directions from http://developer.android.com/tools/devices/managing-avds.html to create an AVD. When creating it, be sure that you give it an SD card of at least 128MB.
 
# Launch the DashboardActivity project in your AVD. It may take a while for the AVD to start, so be patient!
 
# Launch the DashboardActivity project in your AVD. It may take a while for the AVD to start, so be patient!
# When the OpenMRS app starts, enter http://devtest02.openmrs.org:8080/openmrs as the URL
+
# When the OpenMRS app starts, enter http://devtest02.openmrs.org:8080/openmrs as the URL.
# Log in using username "admin" and password "Admin123"
+
# Log in using username "admin" and password "Admin123".
 +
 
 
==== Early Code Investigation ====
 
==== Early Code Investigation ====
 
At this stage of the project I expect you to get an early sense of what the project is about. You should create a report that describes the following:
 
At this stage of the project I expect you to get an early sense of what the project is about. You should create a report that describes the following:
Line 57: Line 57:
 
*Project structure is represented concisely and correctly using a diagrammatic representation
 
*Project structure is represented concisely and correctly using a diagrammatic representation
 
*Coding conventions and documentation are correctly identified   
 
*Coding conventions and documentation are correctly identified   
 +
 +
 +
=== Deliverables ===
 +
====Detailed Design====
 +
 +
Produce a report that documents the Detailed Design of the software. Your target audience includes junior programmers who would like to contribute to the project and experienced developers who are only somewhat familiar with your project. A junior programmer should be able to correctly implement any package or module given your Detailed Design.
 
   
 
   
====Detailed Design====
+
====Report====
Produce a report that documents the Detailed Design of the software. Your target audience is to be a junior programmer would like to contribute to the project as well as a developer who is somewhat but not intimately familiar with your project. A junior programmer should be able to correctly implement any package or module given your Detailed Design.
+
 
=====Report=====
+
 
'''Introduction and Overview'''
 
'''Introduction and Overview'''
 +
 
About 1 to 3 pages summarizing the purpose of report, its organization, and its salient conclusions. A person should be able to read just the abstract or just the introduction and have a good idea what is in the rest of your report.
 
About 1 to 3 pages summarizing the purpose of report, its organization, and its salient conclusions. A person should be able to read just the abstract or just the introduction and have a good idea what is in the rest of your report.
 +
 
'''Detailed Design'''
 
'''Detailed Design'''
 +
 
You are to give, for each module, a clear specification for the module, such that a junior programmer can implement that module. The Detailed Design will include a clear description of the behavior of the module and its externally visible interface.  
 
You are to give, for each module, a clear specification for the module, such that a junior programmer can implement that module. The Detailed Design will include a clear description of the behavior of the module and its externally visible interface.  
A complete description of the static and dynamic modeling of the system including class diagrams, sequence for main scenarios.
+
 
 +
A complete description of the static and dynamic modeling of the system including class diagrams and the sequence for main scenarios.
 +
 
 
'''Grading Rubric'''
 
'''Grading Rubric'''
 +
 
*Summarizing the purpose of report, its organization, and its salient conclusions  
 
*Summarizing the purpose of report, its organization, and its salient conclusions  
 
*Class diagram:
 
*Class diagram:
Line 79: Line 90:
 
**Correct notation is used
 
**Correct notation is used
 
**Diagrams are clear and easy to follow
 
**Diagrams are clear and easy to follow
[[Category: Learning_Activity]]
+
 
[[Category: OpenMRS]]
+
====Architecture Design====
[[Category: Specification_and_Design]]
+
 
 +
Present the overall structure of the project you have adopted, with descriptions of each major component and of the interactions among them. These components are to be primarily Java packages. In your descriptions, concentrate on high level functional rather than on lower level concepts such as classes, variables and control flow. Your system's architecture should be easy to understand, with simple interfaces, and modest interactions among packages.
 +
 
 +
'''Architectural Style'''
 +
 
 +
Clarify the architectural design used in the project
 +
 
 +
'''Diagrams'''
 +
 
 +
Create a complete UML Package diagram depicting the software architecture
 +
 
 +
'''Grading Rubric'''
 +
* Model is correct and complete, including all components and interaction.
 +
* Using correct UML package diagram notation
 +
 
 +
 
 +
=== Assessment ===
 +
 
 +
* ''How will the activity be graded?''
 +
* ''How will learning will be measured?''
 +
* ''Include sample assessment questions/rubrics.''
 +
 
 +
{| border="1" class="wikitable"
 +
! 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: ===
 +
 
 +
{{Learning Activity Info
 +
|acm unit=
 +
|acm topic=
 +
|difficulty=
 +
|time=
 +
12 hours
 +
|environment=
 +
Access to Internet, installed Eclipse with correct version
 +
|author=
 +
Darci Burdge, Steven P. Crain, Ruby ElKharboutly, Barrett Koster, Shamsi Moussavi, Chris Murphy
 +
|source=
 +
Darci Burdge, Steven P. Crain, Ruby ElKharboutly, Barrett Koster, Shamsi Moussavi, Chris Murphy
 +
|license=
 +
{{License CC BY NC SA}}
 +
}}
 +
 
 +
=== Suggestions for Open Source Community ===
 +
* ''Suggestions for an open source community member who is working in conjunction with the instructor.''
 +
 
 +
[[Category:Learning Activity]]
 +
[[Category:OpenMRS]]
 +
[[Category:Specification and Design]]
 +
[[Category:CS2]]
 +
[[Category:Good Draft]]

Latest revision as of 10:52, 8 September 2018


Title

OpenMRS Design Reverse Engineering Activity (Android App)

Overview

Expose student to the OpenMRS Android client and have them reverse engineer the design of the module.

Prerequisites

Java, Android, UML, dynamic and static modeling

Learning
Objectives
After successfully completing this activity, the learner should be able to:
  1. Evaluate an existing project and analyze its current documentation
  2. Read and understand professionally written code
  3. Appreciate the importance of code documentation and project documentation
  4. Develop software architecture and design documentation for an existing project
  5. Recognize coding conventions and design patterns
Process Skills
Practiced


Background

OpenMRS is an application which enables design of a customized medical records system with no programming knowledge. It is a common framework upon which medical informatics efforts in developing countries can be built. For more technical information, see: https://wiki.openmrs.org/display/docs/Technical+Overview OpenMRS is also a community of people working to apply health information technologies to solve problems, primarily in resource-poor environments. They are a proud community of developers, implementers, funders, and users all trying to make the world a better place by using our expertise to improve the health and wellness of the planet. The OpenMRS Android Client provides mobile functionality that includes registering patients, taking visit notes, capturing vitals, etc. The also supports working off-line (without network connection) with a chosen subset of patients. In this assignment, you will familiarize yourself with the implementation of the Android app by reviewing and documenting the software architecture and class design.

Directions

IDE installation

  1. Go to: http://developer.android.com/index.html
    1. At the bottom of the page choose the Get the SDK link.
    2. Click the Download the SDK ADT Bundle for Windows link.
  2. Extract the files from the .zip file downloaded in step #1.
  3. Go to: http://developer.android.com/sdk/installing/adding-packages.html. On the second part of #1, use API 19 instead of the most recent API available.

The download and install take some time…be patient!! Once the download is complete, you can close the SDK Manager.

Installing OpenMRS Android project

  1. Download the OpenMRS Android client as an Eclipse project
  2. Import the project into Eclipse: File -> Import... -> Android -> Existing Android Code into Workspace -> then browse to the directory containing the Eclipse project that you downloaded
  3. The DashboardActivity project depends on the appcompat, gridlayout, and odk.collect projects. If Eclipse shows an error message in the DashboardActivity, about these other projects, add them to the Java Build Path of the DashboardActivity project.

Running the OpenMRS Android app

  1. Create an AVD using Android 4.4.2 (API level 19). You can follow the directions from http://developer.android.com/tools/devices/managing-avds.html to create an AVD. When creating it, be sure that you give it an SD card of at least 128MB.
  2. Launch the DashboardActivity project in your AVD. It may take a while for the AVD to start, so be patient!
  3. When the OpenMRS app starts, enter http://devtest02.openmrs.org:8080/openmrs as the URL.
  4. Log in using username "admin" and password "Admin123".

Early Code Investigation

At this stage of the project I expect you to get an early sense of what the project is about. You should create a report that describes the following:

  • Total number of files, packages and package hierarchy
  • Coding convention and available documentation
  • Which classes are part of the Model component? the View? the Controller?

Grading Rubric :

  • Project structure is represented concisely and correctly using a diagrammatic representation
  • Coding conventions and documentation are correctly identified


Deliverables

Detailed Design

Produce a report that documents the Detailed Design of the software. Your target audience includes junior programmers who would like to contribute to the project and experienced developers who are only somewhat familiar with your project. A junior programmer should be able to correctly implement any package or module given your Detailed Design.

Report

Introduction and Overview

About 1 to 3 pages summarizing the purpose of report, its organization, and its salient conclusions. A person should be able to read just the abstract or just the introduction and have a good idea what is in the rest of your report.

Detailed Design

You are to give, for each module, a clear specification for the module, such that a junior programmer can implement that module. The Detailed Design will include a clear description of the behavior of the module and its externally visible interface.

A complete description of the static and dynamic modeling of the system including class diagrams and the sequence for main scenarios.

Grading Rubric

  • Summarizing the purpose of report, its organization, and its salient conclusions
  • Class diagram:
    • Includes all signification classes.
    • Class attributes are represented correctly
    • Relationships between classes are modeled correctly.
    • Methods are added appropriately.
    • Diagrams are easy to follow and understand
  • Sequence diagrams (at least 5 use cases)
    • SD realizes the usecase completely and correctly
    • SD includes all collaborating objects.
    • Correct notation is used
    • Diagrams are clear and easy to follow

Architecture Design

Present the overall structure of the project you have adopted, with descriptions of each major component and of the interactions among them. These components are to be primarily Java packages. In your descriptions, concentrate on high level functional rather than on lower level concepts such as classes, variables and control flow. Your system's architecture should be easy to understand, with simple interfaces, and modest interactions among packages.

Architectural Style

Clarify the architectural design used in the project

Diagrams

Create a complete UML Package diagram depicting the software architecture

Grading Rubric

  • Model is correct and complete, including all components and interaction.
  • Using correct UML package diagram notation


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 BoK
Area & Unit(s)
ACM BoK
Topic(s)
Difficulty
Estimated Time
to Complete

12 hours

Environment /
Materials

Access to Internet, installed Eclipse with correct version

Author(s)

Darci Burdge, Steven P. Crain, Ruby ElKharboutly, Barrett Koster, Shamsi Moussavi, Chris Murphy

Source

Darci Burdge, Steven P. Crain, Ruby ElKharboutly, Barrett Koster, Shamsi Moussavi, Chris Murphy

License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Creativecommons-by-nc-sa-40.png


Suggestions for Open Source Community

  • Suggestions for an open source community member who is working in conjunction with the instructor.
Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox