Voir le résumé
Presque tous les systèmes logiciels d'aujourd'hui sont configurables. A l'aide d'options, il est possible de modifier le comportement de ces systèmes, d'ajouter ou d'enlever certaines capacités pour améliorer leurs performances ou les adapter à différentes situations. Chacune de ces options est liée à certains parties de code, et s'assurer du bon fonctionnement de ces parties entre elles, ou de les empêcher d'être utilisées ensemble, est un des défis durant le développement et l'utilisation de ces logiciels, connus sous le nom de Lignes de Produits Logiciel (ou SPL pour Software Product Lines). Si cela peut sembler relativement simple avec quelques options, certains logiciels assemblent des milliers d'options réparties sur des millions de lignes de code, ce qui rend la tâche autrement plus complexe. Durant la dernière décennie, les chercheurs ont commencé a utiliser des techniques d'apprentissage automatique afin de répondre aux problématiques des Lignes de Produits Logiciels. Un des problèmes clés est la prédiction des différentes propriétés de ces logiciels, comme la vitesse d'exécution d'une tâche, qui peut fortement varier selon la configuration du logiciel utilisé. Mesurer les propriétés pour chaque configuration peut être coûteux et complexe, voire impossible dans les cas les plus extrêmes. La création d'un modèle permettant de prédire les propriétés du logiciel, en s'aidant des mesures sur seulement d'une faible partie des configurations possible est une tâche dans laquelle l'apprentissage automatique excelle. Différentes solutions ont été développées, mais elles n'ont été validées que dans des cas où le nombre d'options est assez faible. Or, une part importante des SPL sont dotés de plusieurs centaines voire plusieurs milliers d'options. Sans tester les solutions d'apprentissage automatique sur des logiciels avec autant d'options, il est impossible de savoir si ces solutions sont adaptées pour de tels cas. La première contribution de cette thèse est l'application d'algorithmes d'apprentissage automatique sur une ligne de produits logiciels à une échelle jamais atteinte auparavant. En utilisant Linux et ses 15.000 options, il a été possible de déterminer que les algorithmes linéaires, mais aussi ceux spécialisé pour les SPL, ne sont pas capables de fonctionner correctement à cette échelle. Seuls les algorithmes basés sur les arbres, ainsi que les réseaux de neurones, étaient capables de fournir un modèle assez précis avec des ressources raisonnables en termes de temps et de mémoire.La deuxième contribution est la Feature Ranking List, une liste des options classées par importance envers leur impact sur une propriété cible d'un logiciel, générée par une amélioration de la sélection des caractéristiques basée sur les arbres de décisions. Nous avons évalué ses effets sur les modèles de prédiction de la taille des binaires du noyau Linux dans les mêmes conditions que pour la première contribution. L'effet souhaité et le plus connu de la sélection de caractéristiques en général est une accélération majeure du temps d'apprentissage ainsi qu'une amélioration notable de la précision pour la plupart des algorithmes précédemment considérés. La troisième contribution est l'amélioration de la spécialisation automatisée des performances et son évaluation sur différents SPL dont Linux. La spécialisation des performances est un processus qui consiste à ajouter des contraintes sur un SPL afin de répondre à un certain seuil de performance défini par l'utilisateur, pour l'aider lors de la configuration du logiciel. Les résultats montrent qu'il est possible d'obtenir un ensemble de règles suffisamment précis,et ce même sur Linux. La dernière contribution ouvre la porte à une utilisation plus durable de l'apprentissage automatique pour les lignes de produits logiciels. En utilisant une technique d'apprentissage par transfert, il a été possible de réutiliser un modèle de prédiction de performance sur plusieurs version à moindre coût.