.. include:: ./../../macros.txt .. include:: ./../../units.txt .. _SOFTWARE_DEVELOPMENT_PROCESS: Software Development Process ============================ The main goal of the development process is to ensure that only well tested code is committed to the |master_branch|. This can either be a new feature to extend the capabilities of the existing implementation or changes that remove a bug in the existing implementation. For the sake of simplicity these changes are summarized under the terms of |change_request| (for details see `here `__). The starting point of all work done, is an |issue| describing a bug in the current implementation or a feature that is missing or needs to be extended. Based on this |issue| a so called |feature_branch| is created (the name is the same whether it is bug or feature) by a developer working on the related issue. This |feature_branch| is pushed to the main (bare) repository managed by some |git| server. The |git| server triggers the CI pipeline. This pipeline manages several build servers that then run different integration tasks (jobs) (building the binary, testing and checking for guideline violations). The output of a build server is a success matrix based on the run jobs. The status of the test is shown in the |change_request|. In parallel the changes that would be introduced to the |master_branch| are reviewed by developers (developers that did not work on the |feature_branch|) and comments to the changes are added as needed. The first requirement for a |feature_branch| getting merged into the |master_branch| is the success of the CI pipeline and the second requirement is the approval of the reviewer. If one of both is missing merging the |feature_branch| is rejected. This development process is shown in :numref:`software-development-process-diagram`. .. graphviz:: software-development-process.dot :caption: |foxbms| software development process :name: software-development-process-diagram .. |issue| replace:: ``issue`` .. |change_request| replace:: ``Change Request`` .. |feature_branch| replace:: ``feature`` branch .. |master_branch| replace:: ``master`` branch