...
Examples are git and mercurial (core systems), github (cloud provider), gitlab (software and cloud provider), Stash/Bitbucket from Atlassian (software and cloud provider), ...
Code quality
Code quality is mostly concerned with non-functional aspects of code, and covers many aspects of code at various levels (lexical, syntactic, structural, ...). Some tools, like FindBugs, analyse (the meaning of) the code in search for typical programming errors, some, like CheckStyle check more superficial properties like adherence to a coding styles and compute metrics the may help improve the code, and some, like SonarQube integrate all of this with CI.
Continuous integration (CI)
...
Examples of systems are git (supports so-called pull requests where a branch in a fork is contributed to the main project), gerrit (hosts a copy of a repo and can run CI on it before changes are merged into the main repo).
Code quality
Code quality is mostly concerned with non-functional aspects of code, and covers many aspects of code at various levels (lexical, syntactic, structural, ...). Some tools, like FindBugs, analyse (the meaning of) the code in search for typical programming errors, some, like CheckStyle check more superficial properties like adherence to a coding styles and compute metrics the may help improve the code, and some, like SonarQube integrate all of this with CI.
Proficiency levels
If we want to introduce these activities in a curriculum in a study program, we should consider a staged approach, were activities and tools are introduced gradually. Based on proficiency levels (https://hr.od.nih.gov/workingatnih/competencies/proficiencyscale.htm: Fundamental Awareness, Novice (limited experience), Intermediate (practical application), Advanced (applied theory), Expert (recognized authority)). For a bachelor program, we may expect students to reach a Intermediate level in some activities, and Novice in others, while a master program may lift the bar depending on the specialisation.
Activity/Proficiency | Fundamental Awareness | Novice | Intermediate | Advanced |
---|---|---|---|---|
Code management | Fetching code samples and other material from a code repository prepared by others, and being aware of the flow. | Basic commands for committing, pushing and pulling, and understanding what merge conflicts are and how to handle them. | Versions, tagging and branching and merging. Forking and updating. | Deployment and releases. |
Code quality | Using tools for automatic formatting and simple refactoring. | Use tools for defining coding style and formatting code accordingly, have basic refactoring skills and run code quality checking tools locally or as part of CI. | Code analysis like null analysis and code metrics. | |
Continuous integration | Running pre-made tests on their code and understanding the fundamental idea of testing code behavior. | Writing and running their own unit tests (not necessarily TDD). Using a build system for assembling a runnable application. | Unit and integration testing, driven by build system. | CI automation using a server. |
Issue tracking | Use issues tracking system to report bugs (to some system they are using). | Use issues to manage requirements that drive development. | Kansan-like management | |
Code review | Going through code with others, to improve/ensure quality. | Pull requests, for contributing fixes to other system. | Using code review within own process, to close issues. |
...
Activity/Semester | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|
Code management | |||||||||
Code quality | |||||||||
Issue trackingContinuous integration | |||||||||
Code reviewIssue tracking | |||||||||
Code | qualityreview |