Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Made testing a separate activity - not just a part of CI

...

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.

(Regression) Testing

The purpose of regression testing is to ensure that changes due to software enhancements, patches, configuration changes, etc. have not introduced new faults. One of the main reasons for regression testing is to determine whether a change in one part of the software affects other parts of the software.Common methods of regression testing include re-running previously completed tests and checking whether program behavior has changed and whether previously fixed faults have re-emerged. Regression testing can be performed to test a system efficiently by systematically selecting the appropriate minimum set of tests needed to adequately cover a particular change.

Tests may be run at different levels:

  • UI level testing - using tools such as Jasmine for Javascript UIs
  • Service level testing - using tools such as CasperJS
  • Unit level testing - using tools such as JUnit for Java code, PHPUnit for PHP code, ...

The test pyramid (https://martinfowler.com/bliki/TestPyramid.html) suggests that one should have many more low-level unit tests than high level end-to-end tests running through a GUI.

Continuous integration (CI)

...

Continuous integration
Activity/ProficiencyFundamental AwarenessNoviceIntermediateAdvanced
Code managementFetching 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 qualityUsing 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. 
(Regression) testingRunning 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).Writing integration tests according to the test pyramid; using mocking frameworks. 
Continuous integrationUsing tools for automising the process of building, testing, and deploying software.Using a build system for assembling a runnable application.Unit and integration testing, driven by build system.CI automation using a server.
Issue trackingUse issues tracking system to report bugs (to some system they are using).Use issues to manage requirements that drive development.Kansan-like management 
Code reviewGoing 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/Semester12345678
Code management        
Code quality        
(Regression) testing        
Continuous integration        
Issue tracking        
Code review        

...