Skip to content

Instantly share code, notes, and snippets.

@ruimaranhao
Last active March 27, 2022 19:50
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ruimaranhao/b2c64e906ac9a6bcad02 to your computer and use it in GitHub Desktop.
Save ruimaranhao/b2c64e906ac9a6bcad02 to your computer and use it in GitHub Desktop.
Using Github to Teach Software Engineering: A Hands-on Approach

Teaching Software Engineering using GitHub

Rui Maranhão

Software engineering is the study and an application of engineering to the software development lifecycle, including requirements, design, architecture, development, testing, and maintenance. It is important that Universities teach students not only the theory underlying these phases, but also allow students to practice using real systems.

Quoting Arie van Deursen:

When teaching software engineering [architecture] it is hard to strike the right balance between practice (learning how to work with real systems and painful trade offs) and theory (general solutions that any architect needs to thoroughly understand).

To address this, inspired by TUDelft's Software Architecture course, we decided try something different in the Software Engineering course of the University of Porto's Master in Informatics and Computing Engineering:

  • Teams of 4 students had to adopt an active and complex open source GitHub project and contribute to the project, mostly by documenting these projects.
  • Following "How GitHub uses GitHub to Build GitHub", communication among team members and external stakeholders took place through GitHub where possible.
  • To ensure that students actually digested software engineering theory, we made them apply the theory to the actual project they picked in sprints of two weeks. Hence, we made them follow an Agile process to software development (Scrum in particular).

GitHub Project Selection

At the start of the course, teams had to choose a project on GitHub. The students could pick any project that was sufficiently complex, have multiple contributors, have test cases, and be active.

There were 23 teams working on mostly different projects. Selected projects, which students managed to have pull requests accepted, are: Terasology, Kodi, 0 A.D., and Supertux.

Software Engineering Lifecycle

There are several Software Development Life Cycle models (following this link for a detailed discussion). All of these models have a set of common phases:

alt text

In the context of the Software Engineering course, students were asked to document the projects they adopted for each of these phases, except coding. The testing and maintenance phases required students not only to document these phases but also to code tests, fix bugs, and evolve features.

Modus Operandi

After project selection, students were asked to fork the project, create a ESOF-docs folder, and adopt a Git branching model as described in the following link:

alt text

The course asked the students to hand-in (that is, push into the repository) their reports documenting each of the software development life-cycle. The documents the students had to produce are to document/contribute in the following domains: software processes, requirements elicitation, software architecture, software testing, and software evolution. By following the links of the projects above, interested readers can see the contributions of the teams to the projects.

As for bug fixing and feature evolution, the links for the pull requests are below:

Conclusion

Using GitHub to teach software engineering help us create a more hands-on course, using real software projects. Students were very motivated because of the feeling that they could contribute to a project that is used by many people. Interaction with stakeholders (project owners developers) also helped students to develop soft-skills (e.g., convince stakeholders that they fixed a bug, or that some feature needed evolution). Students could also experience what it takes to contribute to an open source project. Many are even committed to contribute to open source projects further.

Teaching this course was an overly rewarding experience. Students came up with remarkable results. In the future, we will ask students to use parent-less branch in order to better organize the documentation (see git checkout --orphan).

List of Selected Projects

These are the links to the all the forks with the contributions of the teams:

Acknowledgments

The successful implementation of the ideas discussed here was mainly due to all students who participated in the Software Engineering Course, edition 2015/2016.

@PmmaGit
Copy link

PmmaGit commented Feb 18, 2016

Looks good, only thing to note is a mismatch in the quotation marks, around line 16:

``How GitHub uses GitHub to Build GitHub''

@ruimaranhao
Copy link
Author

@meeplee: fixed. Thanks.

@MichielCuijpers
Copy link

Very interesting! Great that you will offer BetterCodeHub.com to your students for next years course.

@Prapullasb
Copy link

This is really motivating. This time even I am teaching software Engineering, so if I want to adapt the same, how should I go about?

@ruimaranhao
Copy link
Author

ruimaranhao commented Mar 27, 2018

@Prapullasb: send an email to discuss this further.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment