Describe the basics of dependency management.
Discuss why different environments for testing, development, production, and staging are necessary.
Compare the differences between different deployment environments, and what are their specific requirements.
Use software building environments like make, Autotools, CMake.
Correlate continuous integration, delivery, and deployment and the differences between them.
Analyze the benefits, drawbacks, and tradeoffs of continuous integration, delivery, and deployment.
Set up the production, testing, and development environments.
Define and preserve reproducible software stacks to make computational results reproducible, e.g. by applying virtualization environments like VirtualBox, Docker, rkt, or BioContainers or tools for defining scientific workflows like Nextflow, or Singularity.
Configure an environment for continuous integration, delivery, and deployment using a selected continuous integration tool like Jenkins, Buildbot or Travis-CI with basic processing steps like compiling and automated testing.
Describe the basics of dependency management for different programming languages.
Use advanced software building environments like Scons and Waf.
Discuss the challenges for Portability, e.g. for the source code of programs and job scripts to avoid typical compiler-, linker-, and MPI-issues.
Use a software build and installation framework like EasyBuild.