Deep Learning Structural and Historical Features for Anti-Patterns Detection
Antoine Barbez · PolyPublie (École Polytechnique de Montréal) · 2018
Les systèmes logiciels sont devenus une des composantes principales de tous les secteurs d'activité.Dans la course au rendement économique, les développeurs sont susceptibles d'implémenter des solutions non optimales aux problèmes qui leur sont posés.On nomme ainsi anti-patrons ou "design smells" ces mauvais choix de conception introduits par manque de temps et-ou d'expérience.Si ces derniers n'ont pas forcément d'impact à l'exécution, de nombreuses études ont mis en lumière leur influence négative sur la maintenabilité des systèmes.De nombreuses approches de détection automatique des anti-patrons ont été proposées.Pour la plupart, ces approches reposent sur l'analyse statique du code, mais il a été montré que les anti-pattrons sont aussi détectables par une analyse des données historiques des systèmes.Cependant, aucune d'entre elles ne semble clairement se distinguer des autres, et chaque approche identifie des ensembles d'occurrences différents, en particulier quand celles-ci reposent sur des sources d'information complémentaires (i.e., structurelles vs. historiques).Plusieurs approches basées sur l'apprentissage automatique ont tenté d'adresser ce problème.Toutefois, ces approches semblent faire face à des limitations qui leur sont intrinsèques.D'une part, inférer des caractéristiques de haut niveau sur les systèmes à partir de données brutes nécessite des modèles d'une grande complexité.D'autre part, l'entrainement de tels modèles requière un nombre conséquent d'exemples d'apprentissage, qui sont fastidieux à produire et existent en nombre très limité.Ce travail tire profit des méthodes d'apprentissage automatique pour répondre aux limitations évoquées précédemment.Dans un premier temps, nous proposons une méthode ensembliste permettant d'agréger plusieurs outils de détection.Nous montrons qu'une telle méthode atteint des performances nettement supérieures à celles des outils ainsi agrégés et permet de générer des instances d'apprentissage pour des modèles plus complexes à partir d'un nombre raisonnable d'exemples.Ensuite, nous proposons un modèle d'apprentissage profond pour la détection des anti-patrons.Ce modèle est basé sur l'analyse de l'évolution des métriques logicielles.Plus précisément, nous calculons les valeurs de certaines métriques pour chaque révision du système étudié, et, entrainons un réseau de neurones convolutif à y détecter les anti-patrons à partir de ces données.Nous montrons qu'en s'appuyant ainsi sur les aspects structurels et historiques des systèmes, notre modèle surpasse les approches existantes.Nos approches ont été expérimentées dans le cadre de la détection de deux anti-patrons populaires : God Class et Feature Envy, et leurs performances comparées avec celles de l'état de l'art.vi