Mathematics and Computer Science Department
At Moravian College, the computer science major contains two courses that focus on software engineering. The first course, taken by students during the second semester of their sophomore year, introduces the main ideas of software engineering. In addition to learning about various processes for software design, students gain hands-on experience working on a team on a large project. I anticipate that these students will make small contributions to OpenMRS through documentation and testing. Work on introductory tickets may be possible, but at their level of development in the curriculum, larger contributions to the codebase would be unlikely.
During the second semester of their senior year students take a second course in software engineering as a capstone experience. Here the students will take a more active role in the project, and they will be expected to make contributions to documentation, testing, and the codebase. Beginning with introductory tickets, I envision students making multiple small contributions to OpenMRS during the semester.
We expect that one-third of the work in the sophomore-level course and two-thirds of the work in capstone course will be focused on OpenMRS. As instructors of the courses, we will introduce the students to the relevant technologies and work with them as they learn their way around their first large-scale open source project. In addition, we have scheduled the two courses to meet at the same time to facilitate joint "training sessions" and collaboration between students in both classes.
This work will generate materials for students who would be labeled as novices within the Open Source community and for students who have intermediate or advanced skills. In some cases an activity will partner novice students with those who are more advanced.
Course Descriptions and Goals
Both courses focus on software engineering concepts. The first course has a significant focus on object-oriented design and design patterns, but also considers questions of design process and communication within the team. The second course considers design process in a more thorough way and aims to give students a significant hands-on experience with a large-scale project.
In general, we hope the students in these courses will develop skills related to communication, team work, and conflict resolution. In addition, students will gain experience with code reading, design processes, and the usage of technologies appropriate for team-based development.
CSCI 234 Spring 2013 Description and Course Objectives:
An introduction to professional software development using object-oriented techniques. Topics include the use of object-oriented design as a tool for building correct and maintainable software systems, test-driven development, best-practices in object-oriented design and development informed by component-based engineering, advanced object oriented language features, and languages for communicating design.
- Implement object-oriented designs with proper use of interfaces, abstraction an inner classes, exceptions, iterators, and generics.
- Design class hierarchies to meet software-level specifications using object-oriented design principles and appropriate use of polymorphism, encapsulation, and inheritance.
- Design and implement effective test cases.
- Communicate software design using UML.
- Evaluate object-oriented designs using best-practices, support for local reasoning, and metrics of coupling and cohesion.
- Recognize common design idioms and patterns in existing software and use design patterns to aid in the design of new software.
CSCI 334 Spring 2013 Description and Course Objectives:
A project-oriented study of the ideas and techniques required to design and implement a computer-based system. Topics include project organization, design, documentation, and verification.
- Design large software projects using patterns and other standard techniques.
- Communicate both orally and in writing with clients, colleagues, and supervisors.
- Document specifications and code using standard tools.
- Work in a team to design and develop software projects.
These courses are offered each spring semester, and we plan to begin utilizing the OpenMRS project during the Spring 2014 semester. Because the courses are scheduled during the same block of time, we plan to utilized the concept of a stacked courses. In particular, we plan to offer a number of classes as joint sessions where the students from both courses meet together. We expect that one third of the sophomore level course will focus on Open Source and OpenMRS, and for the senior-level course, two thirds of the semester will be spent on the project. The sophomores will have multiple small units throughout the semester while the seniors spend longer chunks of time working on OpenMRS-related tasks. This will allow students from one course to partner with students from the other in a variety of activities. Here are some initial ideas:
- Both classes will learn about Open Source and the OpenMRS project simultaneously with a variety of joint activities and class sessions. With the additional experience, the seniors will help the sophomores get up to speed with the project and its technologies.
- As the seniors begin making changes to the code base, the sophomores can perform code review before a pull request is made to OpenMRS.
- Later in the semester, the seniors can prepare work for sophomores. For example, the seniors may identify a ticket, perform triage, and then pass a detailed plan to the sophomores who then implement and test the solution. Afterward, the seniors perform review the solution before a pull request is made to OpenMRS.
We would be interested in talking with Greg about other ideas for how to take advantage of these stacked courses.
In addition to the collaboration between the courses, we have also reached out to the OpenMRS community to try to establish a partnership with the core development team. We contacted Darius Jazayeri, and he put us in touch with Michael Downey and Chris Power. Because the OpenMRS community has a strong history with Google Summer of Code, their own internship program, and an outreach program to women, we hope they will be willing to work with us to develop a mentorship program with our students.
- Why should you work on an Open Source project? What do you want to do when you graduate? Why should someone hire you when you graduate? Draft version: Career Planning
- History and Context of Open Source
- Bazaar - History of FOSS - Next Time Fail Better
- Overview of OpenMRS
- Google talk - Getting Started web pages
- Getting up to speed on technologies:
- Git and a github account - OpenMRS ID - Eclipse setup - Scrum - Maven - JIRA - Swing - Hibernate
- How to solve problems: Google, project documentation, IRC log, asking the community. Documentation for future users.
- Learning about the development community
- Attend a weekly developer's meeting - Attend a Daily Scrum meeting - Write journal entry about experiences
- Identifying design patterns in the existing code.
- The process to handle a bug. Draft Version: Handle an OpenMRS Ticket (Activity)
We could use some help in this area, but here are some preliminary thoughts:
- Provide students in both courses a surveys at the beginning and end of the semester that ask about their expectations working on a real-world project. We would expect that students would focus on single-person programming before the first course and provide an understanding of the complexity of team-based development after the capstone.
- For the seniors, who will make more substantial contributions to OpenMRS, we can have them create a portfolio of their contributions during the semester. At the end of the semester, this portfolio along with a reflective essay will provide data showing where they are in their development.
Both courses are offered every spring, and we plan to use the OpenMRS project as a significant experience for the foreseeable future. For the Spring 2014 semester will design and implement activities for the students in both courses, and then revise them for the Spring 2015 semester (and beyond).