Creation of a Framework and a Corresponding Tool Enabling the Test-Driven Development of Locally Developed Microservices in Docker

Microservice architectures have emerged as a counter design to traditional monolithic applications. While monoliths are deployed as single executable applications whose modules share the resources of the underlying system, microservice architectures consist of a number of smaller units called microservices. Ideally, these services are partitioned along the business functions they provide so that they can be developed and executed independently. In the overarching architecture, the services communicate via lightweight messages sent through well-defined APIs. In addition, the main advantages of microservices are their speed of development, lower costs of change, evolutionary growth of the system, and the ability to dynamically scale parts of the system by replicating only certain capabilities rather than the entire architecture. However, this new architectural pattern requires an adaptation of the applied quality assurance measures. Testing a distributed system is different from testing a monolithic application and presents special challenges. In this master thesis, the strategy of test-driven development is investigated and placed in the context of microservice architectures that are developed according to established practices. Using an adapted version of the systems development research methodology from the field of design science research, the thesis consists of a theoretical and a practical part. First, preliminary knowledge about microservice development practices and common software testing types is collected through a systematic literature review. Second, this knowledge is then translated into the development of an extensive, usable artifact to propose a solution that enables testdriven microservice development on a local system so that the result of this work can be easily used and comprehended by a wide audience with limited technical experience in this area. In conclusion, five fundamental design principles for microservices are identified, including a focus on small services, a domain-driven design, striving for manageable and low-complexity networks of services, avoiding cyclic dependencies, and aiming for high connectivity performance. The types of tests integrated in the artifact are integration tests, component tests, and contract tests. The described capabilities could be automated using the artifact, which shows that a test-driven development approach for microservice architectures on a local system is indeed feasible, even if there is still room for improvement.