A computational environment is a representation of everything that can influence computations done inside them. This includes computer hardware, operating systems and software libraries. Computational Environments are being used in every step of the software development process. On the workstations of developers for performing development tasks, the CI pipeline that builds and tests the software and on production servers or customer’s machines that run the released product.
These environments can be heterogeneous and change over time. This can cause problems, for example when the software application depends on a certain version of a software library to be available. Therefore it is possible that the application runs properly in one computational environment but does not work in another. To solve this problem, computational environments can be made reproducible to a certain degree.
In my thesis I provide a theoretical definition of computational environments that is more precise than preceding ones and can be used to create descriptions of real-world computational environments. I also provide a definition of reproducibility of computational environments that helps to argue about the degrees to which an environment can be made reproducible.
Following these theoretical foundations I present a catalogue with various approaches to create reproducible computational environments and compare their use cases. These approaches can be used like building blocks to meet different requirements for reproducible computational environments.
In the end I present an explorative case study of how a reproducible computational environment can be implemented using a real-world software project at my industry partner Open-Xchange. In this case study I use a subset of the presented approaches that has been selected by leveraging the theoretical definitions to analyze the requirements for this environment.