Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
For a functional overview, please consult the Service Cutter Tutorial.
Introduction (Thesis Abstract)
Decomposing a software system into smaller parts has been an important challenge in the software industry for many years. With the rise of distributed systems, it has become even more important to split a system into loosely coupled and highly cohesive parts. The architectural style Service Oriented Architecture (SOA) and the currently trending microservices tackle many challenges of such systems, but remain vague on how to decompose a system into services.
We propose a structured approach to service decomposition by providing a comprehensive catalog of 16 coupling criteria. We abstracted them from existing literature, the experience of our industry partner and our thesis advisor. These coupling criteria are the basis of the Service Cutter tool, a prototype that extracts coupling information out of well-established software engineering artifacts such as domain models and use cases. Using this information, the Service Cutter suggests service cuts to assist an architect’s decomposition decisions.
We developed a scoring system that transforms the coupling data into an undirected, weighted graph. On this graph, we employ two graph clustering algorithms from the literature to find densely connected clusters as service candidates. This approach ensures that the Service Cutter produces service cuts that minimize coupling between services while promoting high cohesion within a service.
In our tests, we successfully decomposed two sample applications. Most scenarios resulted in applicable service cuts while others were inadequate. These results suggest that our structured and automated way to assist service decomposition decisions is a promising approach. The thesis lays the foundation for further research in this area.