Research project

Quality-Driven API Refactoring

Refactoring ist eine häufig angewendete agile Praktik zur Verbesserung der Softwarequalität. Die Verständlichkeit und die Wartbarkeit der Software ist dabei ein Hauptziel. Während das Refactoring von Programmcode weit verbreitet ist, wurde das Refactoring von Komponenten auf Architekturebene zwar erforscht, hat aber noch nicht in grossem Umfang in der Praxis durchgesetzt. Für Refactoring von verteilten Application Programming Interfaces (APIs), wie beispielsweise RESTvollen HTTP-Schnittstellen, gab es bisher kaum Literatur und keine Werkzeugunterstützung.

In diesem Projekt haben wir untersucht, wie Refactorings auf den Problembereich des agilen API-Designs und der API-Evolution angewendet werden können. Wir starteten mit einer empirischen Analyse, um Antworten auf folgende Fragen zu finden:

  • Was sind die Ursachen für API-Änderungen?
  • Wie oft sind welche Qualitätsprobleme die Ursache für eine API-Änderung?
  • Wie können Architekten und Entwickler die gefundenen Probleme entschärfen?

Unter Berücksichtigung der Umfrageergebnisse schlagen wir eine neue Form des Refactorings – API Refactoring – vor, um APIs in Richtung von API Design Patterns zu entwickeln:

Improve quality aspects of message-based remote APIs by offering refactoring and continuous API evolution practices, including actionable step-by-step instructions to help API architects and developers mitigate quality issues and evolve their APIs rapidly and reliably.

Die gesammelten API Refactorings präsentieren wir online im frei zugänglichen Interface Refactoring Catalog, einer Sammlung von API-Refactorings und damit zusammenhängenden Architektur-Refactorings. Zahlreiche der im Katalog beschriebenen 22 Refactorings wurden für die plattformunanhängige API-Beschreibungssprache Microservice DSL (MDSL) implementiert.

Beispiele für API Refactorings sind "Introduce Pagination" um grosse Datensätze Stück für Stück zu verarbeiten. "Extract Information Holder" ersetzt eingebettete Daten durch einen Link und "Segregate Commands from Queries" gruppiert API-Operationen in verschiedene API-Endpunkte.

Publikationen

Stocker, Mirko, and Zimmermann, Olaf. 2021. “From Code Refactoring to API Refactoring: Agile Service Design and Evolution.” In Service-Oriented Computing, edited by Johanna Barzen, 174–93. Cham: Springer International Publishing. (Author's Copy)

Kapferer, Stefan, and Zimmermann, Olaf: "Domain-Driven Design in der Praxis — Erfahrungen mit dem Open-Source-Tool Context Mapper." In JavaSPEKTRUM 6/2021, Seiten 20–23 (PDF Copy)

Serbout, Serbout, and Pautasso, Cesare and Zdun, Uwe, and Zimmermann, Olaf. "From OpenAPI Fragments to API Pattern Primitives and Design Smells." In Proceedings of EuroPloP 2021 (Author's Copy)

Duration: 01.04.2021 - 31.12.2021

Funding:

Hasler Stiftung

Partner: