Skip to content

Decoding Large Scale Changes; An In-depth Look into Google's Software Engineering Practices

Posted on:July 7, 2023 at 10:00 AM

This article is written in German and there is not a translation released yet

Large Scale Changes (LSC), hat in der Industrie vordergründig bei größeren Unternehmen große Bedeutung. Viele Unternehmen setzen sich mit diesem Thema auseinander oder sind sich möglicherweise nicht bewusst, dass sie indirekt damit konfrontiert werden. Google hat in einem Buch über Ihre Software-Engineering-Philosophie und Praktiken berichtet, wo ein Kapitel dem Thema „Large Scale Changes“ gewidmet[1]. Auch in der Wissenschaft wird das Thema betrachtet [2][3][4][5].

Dieser Text zielt darauf ab, eine umfassende Betrachtung von LSCs zu gewinnen, indem zunächst auf die Ansichten und Konzepte von Google eingegangen wird[1]. Weiterhin werden aktuelle Forschungen auf diesem Gebiet aufgezeigt.

Nach der Einführung folgt im zweiten Kapitel eine detaillierte Beschreibung von LSC, wobei vorwiegend auf das Buch „Software-Engineering“ von Google Bezug genommen wird[1]. Dabei werden die im Buch genannten Konzepte zusätzlich veranschaulicht. Im dritten Kapitel werden die Automatisierungen beschrieben, die bei Google in Bezug auf LSC zum Einsatz kommen. Es wird zudem bewertet, ob Automatisierungsstrategien sich lohnen zu implementieren, um mit LSCs zu verfahren. Im vierten Kapitel richtet sich der Blick auf aktuelle Forschungsarbeiten im Bereich LSC, insbesondere im Zusammenhang mit Machine Learning. Abschließend werden in Kapitel fünf die wichtigsten Erkenntnisse dieser Arbeit zusammengefasst und ein Ausblick auf zukünftige Entwicklungen und Potenziale im Bereich LSC gegeben.

Large Scale Changes (LSC)

In diesem Kapitel wird LSC eingeordnet, dabei wird sich primär auf das Buch „Software-Engineering at Google“ bezogen[1]. Ein weiterer Schwerpunkt liegt auf atomaren Änderungen in der Softwareentwicklung und den Ursachen, die wiedderum zu LSC führen.

LSC beschäftigen sich mit Änderungen, die in Softwareprojekten vorgenommen werden. Es lassen sich Änderungen in der Softwareentwicklung in verschiedene Kategorien einteilen.

Änderungen an Softwareprojekten wurden schon immer durchgeführt. Allerdings hat sich die Softwareentwicklung im Laufe der Zeit stark verändert und damit auch der elementare Prozess, Änderungen an einem Softwareprojekt vorzunehmen. Diese Auswirkungen sind auch in anderen Bereichen der Informatik zu beobachten, wie im Bereich Big Data. Daten wurden schon immer zwischen IT-Systemen ausgetauscht, aber die heutigen Rahmenbedingungen in der Industrie führen dazu, dass enorme Datenströme verarbeitet werden müssen, die den Bereich Big Data hervorgebracht haben, in dem neue Methoden und Praktiken zur Anwendung kommen. Auch die Rahmenbedingungen für Änderungen im Softwareentwicklungsprozess haben sich geändert.

Im nächsten Abschnitt wird in LSC eingeführt und Beispiele genannt, die das Konzept verdeutlichen, bevor auf atomare Änderungen und die Relevanz und Barrieren von LSCs weiter angegangen wird.

Einführung in Large Scale Changes (LSC)

Google definiert LSC als eine Menge von Änderungen, die logisch zusammenhängen, aber praktisch nicht als eine einzige atomare Einheit eingereicht werden können. Auf diese Definition wird zum Ende dieses Abschnitts eingegangen.

LSCs treten in großen Projekten oder in einem System zwischen gekoppelten Projekten auf. Bei LSCs führt eine Änderungsursache, wie z. B. API-Verwaltungen, zu einer erheblichen Anzahl von Anpassungen im Projekt. Schwierig wird es, wenn die Änderung nicht einfach als Einheit committet werden kann und aufgeteilt werden muss. In diesem Fall wird eine LSC bearbeitet.

Die Relevanz von LSCs, die Faktoren, die bei LSCs eine Rolle spielen, und die Barrieren, die LSCs herausfordernd machen, werden in den folgenden Abschnitten diskutiert. Die nachstehende Liste enthält Beispiele, die zu LSCs führen können.

Es gibt weitere Ursachen, jedoch wird deutlich, dass aufgelistete Änderungen nicht ungewöhnlich sind und regelmäßig auftreten. Die Häufigkeit von LSCs wird von der Projekttopologie beeinflusst. Es wird zudem deutlich, dass LSC nicht klar, schwarz weiß, identifizierbar sind und der Übergang fließend sein kann. Die am Anfang genannte Definition von Google, die darauf abzieht, dass bei LSC Änderungen nicht als atomare Änderungen ausgerollt werden können, hilft als Daumenregel.

Atomare Änderungen

Atomare Änderungen in der Softwareentwicklung beziehen sich auf den Ansatz, Änderungen am Quellcode in kleinste, unteilbare Einheiten aufzuteilen. Bei atomaren Änderungen handelt es sich um einzelne und abgeschlossene Aktualisierungen, die unabhängig voneinander funktionieren und getestet werden können. Eine atomare Änderung ist eine Änderung, die auf Komponenten oder Schnittstellen angewendet wird und nicht in kleinere Änderungen zerlegt werden kann.[6]

In den folgenden Unterabschnitten werden zunächst die Bedeutung von atomare Änderungen erläutert. Weiterhin werden Barrieren identifiziert, die dazu führen, dass nicht ausschließlich atomare Änderungen in einem Software-Projekt durchgeführt werden können.

Relevanz von atomaren Änderungen

Atomare Änderungen in der Softwareentwicklung ermöglichen kontrollierte und gut verständliche Anpassungen am Code, ohne die Gesamtintegrität des Systems zu gefährden[1][6]. Sie bieten verschiedene Vorteile:

Die Verwendung atomarer Änderungen fördert eine bessere Teamarbeit, da sie die Nachvollziehbarkeit, Testbarkeit und Wartbarkeit des Codes verbessern. Sie ermöglichen eine bessere Kontrolle des Entwicklungsprozesses und eine schnellere Bereitstellung neuer Funktionen. Es gibt jedoch Situationen, in denen atomare Änderungen nicht immer durchgeführt werden können.

Barrieren von atomaren Änderungen

Es gibt verschiedene Barrieren, die die Durchführung von atomaren Änderungen in der Softwareentwicklung beeinträchtigen können. Folgende Gründe dafür verantwortlich sein[1][6].

Die Durchführung atomarer Änderungen ist wünschenswert und erleichtert den Entwicklungsfluss in der Softwareentwicklung. Dennoch, wie gezeigt, ist es nicht immer möglich, atomare Änderungen durchzuführen. LSC entstehen, wenn atomare Änderungen nicht durchgeführt werden können.

Relevanz von Large Scale Changes (LSC)

Die Durchführung von LSC in einem Softwareprojekt wird durch bestimmte Vektoren beeinflusst. In der nachfolgenden Fig. 1 sind die Vektoren aufgeführt, die von Google, explizit sowie implizit, benannt wurden[1].

spider-diagram-ase-large-scale-changes Fig 1: Vektoren, die LSC begünstigen

Die Fig. 1 zeigt ein Spinnennetz-Diagramm, das verdeutlicht, um so größer die Fläche des Spinnennetzes ist, umso wahrscheinlicher treten LSC ein. Die Vektoren müssen für einen Kontext spezifiziert werden, in dem LSC evaluiert werden sollen. In der nachfolgenden Liste werden die im Diagramm dargestellten Vektoren umschrieben.

Die beschriebenen Vektoren in der Fig. 1 sind nicht heuristisch spezifiziert, sondern umschrieben. Um eine genaue Bewertung vornehmen zu können, muss eine Heuristik entwickelt werden. Es ist jedoch ersichtlich, dass verschiedene technische und organisatorische Ursachen zur Förderung von LSC beitragen.

Herausforderungen von Large Scale Changes (LSC)

Es gibt eine Reihe von Herausforderungen mit dem Umgang von LSC. In der nachfolgenden Liste sind diese aufgelistet[1].

In dem nächsten Abschnitt, Automatisierung von Large Scale Changes, werden diese Herausforderungen aufgegriffen und beschrieben, wie Google mit diesen umgeht.

Automatisierung von Large Scale Changes bei Google

Dieses Kapitel behandelt die automatisierte Behandlung von LSCs. Zunächst wird untersucht, in welchen Fällen es sinnvoll ist, Automatisierungen einzusetzen, und ob die Rahmenbedingungen für die Automatisierung von LSCs gegeben sind. Anschließend wird die von Google entwickelte Strategie zur Bewältigung von LSCs betrachtet. Im nachfolgenden Kapitel werden aktuelle Forschungsarbeiten im Bereich LSC beleuchtet, die ebenfalls das Thema Automatisierung betreffen.

Evaluierung zur Automatisierung von Prozessen im Zusammenhang mit Large Scale Changes

Die Entscheidung, einen Prozess zu automatisieren, sollte sorgfältig abgewogen werden, da nicht jeder Prozess gleichermaßen von Automatisierung profitiert. Der Aufwand für die Entwicklung der Automatisierung muss in Relation zum erwarteten Nutzen betrachtet werden, um eine fundierte Entscheidung zu treffen. Eine Reihe von Parametern, werden herangezogen, um festzustellen, ob eine Automatisierung sich lohnt[7]. Diese Parameter werden im folgenden Abschnitt ausführlich erörtert, um zu bestimmen, ob es sich lohnt automatisierte Tools oder ganze Systeme zu entwickeln, um mit LSCs einfacher zu verfahren.

Eine Automatisierung von LSCs lohnt sich. Bei kleineren Projekten kann jedoch der Nutzen der Automatisierung möglicherweise noch nicht den Aufwand rechtfertigen, und die Einführung entsprechender Tools kann zu einem späteren Zeitpunkt sinnvoll sein.

LSC Automatisierungsstrategie von Google

Bei Google ist deren LSC-System ein wichtiger Bestandteil in deren Softwareentwicklung. Google nennt deren System Rosie und beinhaltet Fähigkeiten, um Benachrichtigungen an Entwickler zu verschicken, die durchzuführende Änderungen in Teile (Shards) zu unterteilen, Reviewer für einzelne Shards zuzuweisen, Änderungen einzelner Shards zu testen und zu committen. Die nachfolgende Abbildung ist aus Beschreibung erschlossen zeigt, gibt einen Überblick über das System[1].

ase-large-scale-changes-change-process Fig 2: Google LSC Automatisierungsstrategie: Rosie

Wie in der Fig. 2 dargestellt ist, sind nicht die einzelnen Entwicklerteams verantwortlich LCS durchzuführen, sondern ein Infrastruktur-Team. Das Infrastruktur-Team kennt sich mit der Verwaltung von LSC aus, und da LSC mehrere Teams übergreifen und von der Repository Topologie abhängig sind, hat sich gezeigt, dass ein dediziertes Infrastrukturteam am besten geeignet ist. Wenn ein LSC erstellt wird, werden die folgenden Schritte durchgeführt.

Es wird deutliche, dass das System umfangreich ist und nicht trivial nebenbei entwickelt werden kann, sondern die Aufmerksamkeit eines Entwicklerteams benötigt.

Machine Learning gestützte Prozesse in der Verwaltung von Large Scale Changes

Der Bereich Machine Learning wurde in den vergangenen Jahren erheblich Fortschritte erzielt und damit neue Möglichkeiten eröffnet, bestehende Prozessautomatisierungen auszuarbeiten und neue Anwendungsfälle zu automatisieren[8][9]. In der Fig. 3 ist dargestellt, wie ML basierende Tools in Forschungsarbeiten genannt wurden, die Source Code Analysen durchführen. Eine Untermenge dieser Tools könnte in den zuvor beschriebenen Automatisierungsprozessen um LSC eingesetzt werden. In der nachfolgenden Fig.4 wird exemplarisch der Aufbau eines Machine Learning Systems gezeigt, das verwendet wird, um Code Reviews zu erstellen.

A-Survey-on-Machine-Learning-Techniques-for-Source-Code-Analysis Fig 3: Kategorisierung von ML-fähigen Quellcode-Analyseaufgaben[8]

large-scale-changes-machine-learning-change-mngmt Fig 4: ML Model zum Erstellen von Code Reviews

Dank der Vielzahl an Open-Source-Projekten, die industrieweit eingesetzt werden und hohen Standards entsprechen, gibt es reichhaltig Daten. Das Machine Learning Modell in der Fig. \ref{ml-model} nutzt Daten von durchgeführten Code-Änderungen und verarbeitet diese in Trainingsinstanzen. Der trainierte Klassifizierer wird in den Software Entwicklungsprozess eingebettet.

Zusammenfassung und Ausblick

Large Scale Changes (LSC) ist ein interessanter Bereich in der Softwareentwicklung. Google zeigt, wie wichtig es ist, Prozesse und Automatisierung einzuführen, um mit LSCs umzugehen. LSCs betreffen alle Softwareprojekte, jedoch gibt es bestimmte Faktoren, die solche Änderungen begünstigen. Es wäre hilfreich, diese Faktoren zu bestimmen und eine Heuristik zu entwickeln, um ein besseres Verständnis für LSC zu erlangen und entsprechende Strategien für Unternehmen zu entwickeln, mit diesen umzugehen. Die von Google beschriebene Automatisierung zeigt eine umfassende Verwaltung von LSC, die als Referenz für unternehmensspezifische Initiativen herangezogen kann. Durch den Einsatz von maschinellem Lernen ergeben sich Möglichkeiten, die Automatisierung von LSCs auszubauen.