I am not sure whether this question belongs here, but I would like to give it a try and benefit from the experience of the people at scicomp.SE.
From my experience, the software quality in computational science often leaves a bit to be desired. Clearly, established software projects such as PETSc or OpenFOAM are exceptions to that statement. But often there is some old self-crafted code from the 80s that should serve as basis for new research topics but no one really understands what it does. I have the impression that while there are trends and guidelines to make simulation software projects more sustainable, often the developers lack the skills to implement quality assurance measures. Not blaming anyone, this is an interdisciplinary field and in a physics or engineering degree those skills are not taught.
- Are there some established guidelines that one can follow?
Thanks to contributors from other channels and my own research I can provide this list:
Are there further candidates?
- Are there any template projects that provide a clean basis?
In order to make things easier for developers of simulation software projects, I thought it would be helpful to have some boilerplate project that provides a clean start. Is there already such a thing?
So far I have collected several components the boilerplate project should contain:
- Version control system (git)
- Collaboration tool (gitlab)
- Continuous integration (gitlab-ci) for automatic build tests
- Extract documentation from source code (doxygen)
- Automated build system (CMake)
- Framework for unit tests (
- Code formatting tool (clang-format)
but I fear that the list is not exhaustive and would be grateful for your experiences and/or pointers to literature.
EDIT: The second question has lead to a project: Check out bertha, the skeleton [1, 2]! The goal is to install this project as template in GitLab so that with a click an instance of a working C++ project that follows the best practices for simulation software projects is generated. Of course, it is also possible to copy the files manually. Anyway, instead of starting from scratch the skeleton project provides a solid base. Alternatively, one can cherry-pick things from it if there is already an established software project.
At the moment, bertha features an automated multi-platform build system, automatic documentation generation, and supports unit tests using the Catch2 framework. It is about to be extended, so if you have any input do not hesitate to contact me or raise an issue on GitLab.