Arabat, Ali (2026). Supporting practitioners in managing horizontal and vertical dependencies in large-scale software systems. Thèse de doctorat électronique, Montréal, École de technologie supérieure.
Prévisualisation |
PDF
Télécharger (4MB) | Prévisualisation |
Résumé
Modern software systems are nowadays based on interconnected components. A software system can be composed of multiple interacting components, such as plugin-based systems, service-oriented architectures (SOA), and microservice applications. These interactions provide complementary features that together offer a service, and may require coordinated changes across components, which we refer to as horizontal dependencies. At the same time, a component in a software system can use a set of external dependencies that manifest as external libraries and that provide a set of utilities to implement a service. For example, instead of re implementing filesystem utilities, developers can easily import a dependency that provides the same features. Changes in such external libraries may require corresponding adaptations in the client project, and we refer to these relationships as vertical dependencies.
We concretely define horizontal dependencies as dependencies between the components and services of the same software system, whereas vertical dependencies are defined as dependencies between a project and the third-party libraries specified in the project's manifest file (e.g., package. json). In this thesis, horizontal and vertical dependencies are treated as two complementary forms of maintenance dependency: one within the project boundary and the other across the project boundary.
While vertical and horizontal component interconnections offer significant benefits, they also introduce complex challenges that manifest in the maintenance burden of synchronizing across components and managing external dependencies. From a horizontal perspective, developers frequently need to coordinate across component boundaries - synchronizing changes with teams working on other components, collaborating on complementary code spread across multiple components to fix a bug or deliver a new feature, and ensuring that a change made in one component is properly validated by tests in other components. This cross-team coordination adds friction to daily development and, when overlooked, can result in broken builds, partial merges, and CI/CD pipeline failures. From a vertical perspective, third-party libraries frequently release updates containing new features, bug fixes, and security patches. Failing to integrate these updates promptly can render client projects unstable, introduce exploitable security flaws, and expose the client's source code to risks.
This thesis investigates the maintenance dependencies of large-scale, multi-component systems through a series of empirical studies, with the goal of better understanding these dependencies, uncovering the challenges they introduce, and proposing automated approaches to support practitioners in managing such maintenance tasks. In particular, we first study how a change in one component can depend on changes in others, also known as cross-component dependencies. This study sheds light on how different components, often owned by different teams, depend on each other, highlights the challenges that arise from these dependencies, and distills practical implications for both practitioners and researchers. We then propose a machine-learning-based approach and an agentic-AI-based approach to help practitioners identify candidate changes that may be related to a given code change. Finally, we investigate vertical maintenance dependencies by examining how third-party dependency upgrades are managed in terms of upgrade strategies, time, and configuration practices to provide developers and researchers with guidance on helping practitioners better manage their dependencies.
Our findings highlight the importance of maintenance dependencies, both horizontal and vertical, in modern software systems. Accordingly, the proposed recommendation system can help developers in the maintenance of such systems. We also discuss several implications of our findings and outline potential directions for future research.
Titre traduit
Assister les développeurs dans la gestion des dépendances horizontales et verticales au sein des systèmes logiciels à grande échelle
Résumé traduit
Les systèmes logiciels modernes reposent aujourd’hui sur des composants interconnectés. Un système logiciel peut être composé de plusieurs composants interagissant entre eux, tels que les systèmes fondés sur des plugins, les architectures orientées services (SOA) et les applications à microservices. Ces interactions visent à fournir des fonctionnalités complémentaires qui, ensemble, offrent un service, et peuvent nécessiter des changements coordonnés entre composants, ce que nous désignons par le terme de dépendances horizontales. Parallèlement, un composant d’un système logiciel peut utiliser un ensemble de dépendances externes qui se manifestent sous la forme de bibliothèques externes et qui fournissent un ensemble d’utilitaires pour implémenter un service. Par exemple, au lieu de réimplémenter des utilitaires de système de fichiers, les développeurs peuvent facilement importer une dépendance offrant les mêmes fonctionnalités. Les changements apportés à ces bibliothèques externes peuvent nécessiter des adaptations correspondantes dans le projet client, et nous désignons ces relations par le terme de dépendances verticales.
Nous définissons concrètement les dépendances horizontales comme des dépendances entre les composants et les services d’un même système logiciel, tandis que les dépendances verticales sont définies comme des dépendances entre un projet et les bibliothèques tierces spécifiées dans le fichier manifeste du projet (par exemple, package. json). Dans cette thèse, les dépendances horizontales et verticales sont considérées comme deux formes complémentaires de dépendances de maintenance : l’une à l’intérieur de la frontière du projet et l’autre à travers cette frontière.
Bien que les interconnexions horizontales et verticales entre les composants offrent des avantages significatifs, elles introduisent également des défis complexes qui se manifestent par la charge de maintenance liée à la synchronisation entre les composants et à la gestion des dépendances externes. D’un point de vue horizontal, les développeurs doivent fréquemment se coordonner au-delà des limites des composants—en synchronisant les changements avec les équipes travaillant sur d’autres composants, en collaborant sur du code complémentaire réparti sur plusieurs composants pour corriger un bogue ou fournir une nouvelle fonctionnalité, et en s’assurant qu’un changement effectué dans un composant est correctement validé par des tests dans d’autres composants. Cette coordination inter-équipes ajoute des frictions au développement quotidien et, lorsqu’elle est négligée, peut entraîner des échecs de compilation, des fusions partielles et des échecs de pipelines CI/CD. D’un point de vue vertical, les bibliothèques tierces publient fréquemment des mises à jour contenant de nouvelles fonctionnalités, des corrections de bogues et des correctifs de sécurité. Ne pas intégrer ces mises à jour rapidement peut rendre les projets clients instables, introduire des failles de sécurité exploitables et exposer le code source du client à des risques.
Cette thèse étudie les dépendances de maintenance dans les systèmes à grande échelle composés de multiples composants au moyen d’une série d’études empiriques, dans le but de mieux comprendre ces dépendances, de mettre en évidence les défis qu’elles introduisent et de proposer des approches automatisées afin d’aider les praticiens à gérer ces tâches de maintenance. Plus précisément, nous étudions d’abord la manière dont une modification apportée à un composant peut dépendre de changements effectués dans d’autres composants, phénomène également appelé dépendances inter-composants. Cette étude met en lumière la façon dont différents composants, souvent gérés par des équipes distinctes, dépendent les uns des autres, souligne les défis résultant de ces dépendances et dégage des implications pratiques à destination des praticiens et des chercheurs. Nous proposons ensuite une approche fondée sur l’apprentissage automatique et une approche basée sur l’IA agentique, afin d’aider les praticiens à identifier des changements candidats susceptibles d’être liés à un changement de code donné. Enfin, nous étudions les dépendances verticales de maintenance en examinant la gestion des mises à niveau des dépendances tierces en termes de stratégies de mise à niveau, de durée et de pratiques de configuration, afin de fournir aux développeurs et aux chercheurs des recommandations permettant d’améliorer la gestion de ces dépendances.
Nos résultats soulignent l’importance des dépendances de maintenance, tant horizontales que verticales, dans les systèmes logiciels modernes. En conséquence, le système de recommandation proposé peut aider les développeurs dans la maintenance de tels systèmes. Nous discutons également de plusieurs implications issues de nos résultats et présentons des pistes potentielles pour les travaux de recherche futurs.
| Type de document: | Mémoire ou thèse (Thèse de doctorat électronique) |
|---|---|
| Renseignements supplémentaires: | "Thesis presented to École de technologie supérieure in partial fulfillment for the degree of Doctor of Philosophy". Comprend des références bibliographiques (pages 227-240). |
| Mots-clés libres: | maintenance logicielle, modularité, apprentissage automatique, étude empirique, IA agentique |
| Directeur de mémoire/thèse: | Directeur(-trice) Sayagh, Mohammed |
| Programme: | Doctorat en génie > Génie |
| Date de dépôt: | 23 sept. 2026 18:15 |
| Dernière modification: | 23 sept. 2026 18:15 |
| URI: | https://espace.etsmtl.ca/id/eprint/4105 |
Gestion Actions (Identification requise)
![]() |
Dernière vérification avant le dépôt |

Statistiques de téléchargement
Statistiques de téléchargement