Résumé de la thèse :
En génie logiciel, l’outillage des processus de développement est aujourd’hui indispensable à la gestion qualitative des projets et peut couvrir différentes phases : conception, codage ou maintenance. Cet outillage protéiforme regroupe les mesures appelées métriques, les systèmes automatisés de production de code et les systèmes d’aide à la décision, prédictifs ou non. Le champ d’application de ces derniers est large : détection de bad smells, classification de tickets, etc.
Dans cette thèse, nous nous intéressons à la production de métriques portant sur la conduite des projets logiciels en s’appuyant sur les contributions au code source et plus particulièrement à l’architecture runtime des applications. Nous utilisons également des méta-données liées à l’historique du projet et à son développement. La première problématique étudiée concerne la classification de tickets logiciels décrivant des bogues. Nous entraînons un réseau de neurones sur un jeu de données reconnu par la communauté scientifique et nous optimisons ses hyper-paramètres à l’aide d’un algorithme génétique. De cette manière, nous obtenons des performances de classification supérieures à l’état de l’art. Ces performances permettent d’envisager l’intégration de notre classifieur dans des outils de gestion de projets ou dans un assistant à la rédaction de tickets.
La deuxième question abordée est le turn-over des développeurs contribuant au développement de l’architecture logicielle. La détection des développeurs contribuant de manière majeure ou mineure a déjà été formulée et des métriques dédiées proposées. Cependant, les approches existantes ne se focalisent pas spécifiquement sur le développement de l’architecture. C’est pourquoi nous avons créé un modèle formel ainsi qu’une métrique de contribution au code de l’architecture. Nous validons cette métrique de manière empirique puis nous proposons une analyse des différentes catégories de développeurs extraites par notre métrique. Les résultats mettent en lumière la présence de catégories de développeurs spécifiques dont un noyau de développeurs expérimentés contribuant de manière majeure au code de l’architecture durant toute la vie du projet. La détection des développeurs expérimentés ayant de potentielles connaissances en architectures est également un problème que nous étudions. Contrairement aux approches existantes, nous utilisons l’apprentissage supervisé pour apprendre des profils de développeurs expérimentés. Aucun jeu de données étiquetées n’étant disponible dans la littérature scientifique, nous avons créé un jeu de données dédié. Pour cela nous extrayons plusieurs centaines de développeurs issus de 17 projets open source. Nous calculons ensuite 23 métriques pour chacun des développeurs contribuant à ces projets. Enfin, nous étiquetons notre jeu de données manuellement en utilisant les réseaux sociaux professionnels ainsi que la documentation des projets. Nous entraînons ensuite un classifieur sur ce jeu de données et nous l’évaluons. Nos résultats montrent de bonnes performances sur la détection de profils de développeur expérimentés, ce qui permet d’envisager l’utilisation d’un tel outil pour faciliter le management des projets.
Enfin, nous réalisons une étude par croisement des résultats obtenus via la métrique de contribution à l’architecture et ceux obtenus par la classification automatique des développeurs. Cette étude permet d’analyser le profil des développeurs expérimentés. Nous analysons également l’évolution des 23 métriques des développeurs durant leur passage d’inexpérimenté à expérimenté. Les résultats montrent qu’une grande part des développeurs expérimentés sont également des contributeurs majeurs à l’architecture et que le changement de catégorie d’un développeur est multifactoriel.
Nous fournissons également une évaluation de la reproductibilité de nos travaux en utilisant des cadres méthodologiques définis pour les études en génie logiciel empirique et en apprentissage automatique.
Abstract :
In software engineering, tooling is nowadays mandatory for efficient project management and may relates to any project phase: design, coding or maintenance. These various tools consist of measures, called metrics, automated code generation systems and decision support systems, predictive or not. The applications of the latter are numerous: bad smell detection, ticket classification, etc. This thesis studies the proposal of metrics related to software project management based on contributions to its source code and more specifically to the runtime architecture of applications. Meta-information documenting the history of the project and its development are also used.
The automated classification of bug tickets is the first studied question. A neural network is trained with a dataset used as a benchmark in the literature. Its hyper-parameters are then optimized thanks to a genetic algorithm. This way, better classification performances than the state of the art are reached. These performances allow for the integration of our classifier to project management tools or ticket writing assistants.
The second addressed issue is the turn-over of the developers who take part to the development of software architectures. Detecting major and minor contributors among developers is an already studied topic and related metrics have been proposed. However, existing approaches do not apply more specifically to architecture development. We have thus designed a formal model and a metrics dedicated to contributions to runtime architecture code. Our metrics has been validated empirically on a real project and the extracted developer categories have been analyzed. Results highlight specific developer categories including a core of expert developers who produce major contributions to the architecture code throughout the history of the project.
Detecting expert developers with potential architectural proficiencies is also studied. Unlike existing approaches, supervised machine learning is used to classify the profiles of expert developers. As no labelled dataset is available from the scientific community, we have created a dedicated dataset. For this purpose, hundreds of developer accounts have been extracted from 17 open-source projects. 23 metrics are then calculated for each developer participating to these projects. Finally, the dataset is manually labelled thanks to information from professional social networks and projects’ documentation. Good performance on detecting expert developer profiles is achieved, so that this kind of approach could be used to assist project management.
Finally, a cross-over study is conducted, combining results from the runtime architecture contribution metrics and results from the expert developer detection. This study enables to analyze the profiles of the retrieved expert developers. We also analyze the evolution of the 23 metrics that compose the profiles when non-expert developers become experts. Results show that a large number of expert developers are also major contributors to the architecture and that developer profile evolution is multifactorial.
We also provide an evaluation of reproducibility for our work based on methodological best practices proposed for studies in empirical software engineering and machine learning.