Stage 2 Activities/2.3 ParticipantResponses 2014-11

From Foss2Serve
Revision as of 01:52, 13 November 2014 by Heidi.ellis (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

B.4 FOSS in Courses Planning 1

I have a number of ideas about how I might use FOSS in my courses.

CS2 Our CS2 starts with students reading code and using models to help understand the code. They extract control-flow diagrams, call graphs and UML class diagrams from existing code. We have searched for FOSS projects for the students to work with and often can't find appropriate projects. I'm interested in finding projects written in Java that are fairly small to use in the beginning of CS2.

Our students do about 5 assignments and a longer (5-6 week) project in CS2. I like some of the ideas at the bottom of http://www.xcitegroup.org/softhum/doku.php?id=f:50ways for our assignments. Specifically, I think our students would learn a lot from these assignments

   - Find/study examples of well & poorly written code
   - Look at coding standard for an open source project (Java, Python)
   - Reformat code, rename variables, etc. (possibly commit back depending on project)
   - Test (perhaps a project that does JUnit testing).
   - Trace the execution of some piece of code.
   - Develop UML diagram from an existing project. 
   - Identify data structures used in a project.

CS2 is team taught at my university so I can't make decisions about its curriculum without consulting my colleagues. One of my colleagues will likely be spending a significant amount of time revising the CS2 curriculum between Sept 2015 - Aug 2016. After I attend the workshop in November I intend to talk to him and my other colleagues to see if we can integrate HFOSS into the curriculum.


Third-year project course We have a third-year project course that is always looking for clients who have projects the students can work on. There may be an opportunity to integrate an HFOSS project into this course if there was someone from the project who was willing to act as the contact or if I was able to learn enough about a specific project to act as a client.

Directed studies course Our university offers directed studies courses, in which a student (or students) and a faculty member submit a proposal to work on a project together for one or two semesters. The students get course credit for their work. I think this may be the easiest way to get a few students involved in HFOSS work.


In my reading of the various examples of folks using FOSS in their classes, I found a few exercises/ideas that I will incorporate into my courses int he future. Doing a whole day covering FOSS and going through some of the projects would be helpful in my software engineering course. Showing nonCS majors from the liberal arts how they could contribute to projects without having a programming background would be beneficial for most students planning careers in international organizations and NGOs.


I am interesting in the design and architecture of the FOSS projects in general. To be able to reverse engineer a project and model the design. To evaluate the design and suggest improvements. My students are using FreeMind this semester to map the design and architecture. I could have benefited form the project evaluation activity to help students understand the project.


For my software engineering course, I liked the Heidi Ellis's Case Study using a FOSS project as a running project in a software engineering course. I am thinking that OpenMRS could play an excellent role in this course, giving students a chance to: figure out what a component in a complex software project does and document it, with an audience of developers (e.g. UML diagramming) or users; perform tests; write automated tests. I might also be able to use it in the section on using revision control systems, but I would need to make a local repository they could mess around in.

For my data mining course, I generally give a large project that the class as a whole tackles. For this to work, I need something that can be broken into about 5 components that different groups of students can work on. I think that my idea of adding support for the adverse drug events data would work very well for that. One group of students can figure out how OpenMRS stores data, and how best the Adverse Event data should be incorporated into the existing database schema. Another group can work on the import itself, including parsing and cleaning the data and converting it into a format that integrates nicely with OpenMRS. Another group can work on extracting data about a specific patient for a personalized view of the adverse events. Another group can focus on mining the data given that other groups have imported it and provided an appropriate model of the target patient. The last group can manage the project and handle integration issues with the other teams.

I am also wondering about using OpenMRS a little in my computer security course. It could be a good example of an application with strict legal and ethical privacy and auditing constraints. I don't want to make that too strong a component of the course yet, because I am really hoping to not redesign this course quite yet....


I am using the mediawiki project in our senior capstone class. My team of students are productively lost at this moment. The mediawiki project is very health, but the similar activities as in part B would have helped my students better navigate the terrain. I plan to compile a list of bite-size activities to guide my students in the right decisions.

For example, I plan to reproduce a list of easy to reproduce bugs and research ways to fix them. Next, they need to dig through mailing list and IRC logs to research the history of the bugs. At last, if they don't know how to fix the bugs they need to seek help from other on IRC channels or the mailing lists.


I have several ideas where I could include FOSS.

  • In "CSC 120 - Survey of Computing" course, I plan to:
  • give our students an introduction to FOSS.
  • use http://www.sourceforge.net/ for an overview of different languages used in Software Development. In particular, students should be able to see how different Software Categories will use certain programming languages more often than others.
  • use http://www.ohloh.net/ for an overview of particular projects (such as Chromium (Google Chrome), and Mozilla Firefox). There are several interesting metrics to show students, in particular: Lines of Code, Programming Languages used, recent activity on the project


  • In "CSC 150 - Computer Science I" course, I plan to:
  • Look at several projects' source code to:
  • identify "bad" vs "good" coding style, including code layout styles, variable names, etc.
  • identify the importance of writing good comments
  • use the available debugging tools to study an unfamiliar code


  • In "CSC 250 - Computer Science II" course, I plan to:
  • Look at several projects' source code to:
  • identify data structures used in some source files
  • develop UML diagrams for a specific project


  • Ideally, I should get some students involved into 1-year-long projects where students can:
  • study one project
  • start with including more comments and updating existing test cases
  • get to fix existing bugs
  • develop new source code/adding new features
  • stay involved with the project even after the end of the 1-semester-long project.

We have a significant curricular investment in matriculating students towards a comprehensive software engineering experience. And it is from the perspective of "experiences" and not "courses" that focuses my attention. Much of the provided content and activities for FOSS engagement are highly relevant to contributing to this effort. I think that the POSSE workshop structure is an excellent starting point; this is especially true given its roots and focus stemming from the classroom experiences of others. My intention is to outline some activities and experiences similar to those from POSSE and then change them at various levels of breadth and depth within and across different courses. Below are some specific activities to potentially develop:

  • Compare and contrast FOSS to Commercial SW projects using the guides provided for FOSS Field Trip

The outcome here would be to comprehend the similarities and differences in the various dimensions characterizing SW projects. While much of the detailed data available via SourceForge and ohloh would be a challenge to find for commercial vendors, students would be able to articulate important questions about projects independent of type (FOSS vs. Comm). This could be extremely useful in a job or internship interview setting.

  • Focus on Documentation

As was pointed on in Andy Lester's Blog, documentation often "gets short shrift." As is common in most CS/IT/SWE programs, the "D-word" carries a burdensome and negative image. And as we all well know, documentation is at least as important as the code when it comes to project management and evaluation. For this activity I would ask students to examine various FOSS project documentation for its clarity of writing, topical focus, and relevancy to its intended purpose. Then based on the use of objectively defined rubrics and standards, the documentation would be rewritten and peer-evaluated. The final step would be to propose submission to the FOSS project. Clearly this is a writing intensive assignment lacks a certain sex appeal, but is one of the biggest differentiators for students in getting hired and eventually promoted; nobody likes documenting.

  • Enhancing Coder self-efficacy

Needless to say, making coding contributions to a FOSS project is what many of us aspire to. It is the most popular aspect, the first thought by those interested, but at the same time deemed out of reach. Several of the POSSE articles for this section discuss the fact that even though "genius coders" are not necessary, it seems my code is likely not good enough to contribute. I believe this is a mind-set and something to be overcome though practice and comparison and contract. In this activity, after examining what FOSS is and its rich history and usefulness, I would identify within a FOSS project some code that performs some specific action or behavior. I would recast that code block into a well formed and detailed SRS (complete with style and functional & structural requirement) and make it a programming assignment. Upon completion, the students code would be compared and contrasted to what is actually used in the FOSS project. I would escalate the complexity of the problems and code until students coding self-efficacy increased -- as well as their objective ability. Now we are confident in our ability and ready to make a contribution.


Step 3.

For my undergraduate software engineering course, the motivation is to give students experience working with a large code base, and to get them thinking about the design of software. So I am interested in having the students add functionality to the project (along with corresponding test cases) but also to think about how they’re identifying components, the relationship between those components, etc.

For my graduate software engineering course, the emphasis is on “what is good code?” so we spend a lot of time reviewing code and figuring out ways to improve it. So the HFOSS-related activities would include conducting code inspections and then refactoring code to improve its design and internal quality, as well as bug fixing and regression testing.

Step 4.

For the undergraduate course, the activities would be based on the proposed CS2 assignments from the “50 ways to be a FOSSer” blog. I would have the students look at the existing code and document the design using UML, and also ask them to identify the usage (or attempted usage) of the design patterns we study in class. Then I would have them propose a feature, design the components using appropriate patterns, and then implement and test the feature.

For the graduate course, I would use some combination of the “Quality & Testing” and “Coding & Style” activities from the same blog. Students would start out by choosing one of the open defects, writing a test case that demonstrates that bug, and then fixing the bug. I would also ask them to create additional test cases for that component using test set adequacy metrics and then fix any other bugs they reveal. Then, once they’re comfortable with the expected functionality, they would conduct a code inspection, document “code smells”, and then refactor the code to improve its quality.


Here are a couple of activities I would like to use my class. I didn't find any existing material.

  1. Mining Software Repositories (MSR) has become a very popular research topic. For a seminar-style class where students read MSR papers, we could use FOSS projects as case studies. Some examples of questions we could try answering and compare two projects:
    • Do bugs get fixed faster?
    • Are there better tests?
    • Is the code 'better' - more readable, better designed, etc.?
    • Is there a correlation between the above?
    • When do code commits happen?
    • What are the processes for merging in patches/bug fixes? (E.g., do smaller bug fixes in terms of LOC get merged in faster than larger bug fixes)
    • Who collaborates with whom?
    • ...
  2. Using data from FOSS projects and combining them with other data sets can lead to very interesting mashups, data visualization, etc. It would be interesting to do this in the context of a class.

3. My students in software design class have implemented an EMR software for nursing faculty before. There are expensive software that does have similar (more elaborate) functionality. It would be nice to be able to connect that effort with OpenMRS's EMR project. Also, any development type activity will be of interest to me.

4. Getting involved in "API support for Order Entry" would be a good project for both software design class and also students in database management class. I can forsee a collaborative project done by students in both these classes and two faculty jointly overseeing the project. I did see some sample project ideas (templates), which can help with the initial work of the project creation.

[1]

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