La prédiction de fautes est un sujet important dans le domaine d’étude du génie logiciel. L’importance de ce sujet d’étude réside dans l’aide qu’il peut apporter aux développeurs et testeurs de systèmes logiciels, en identifiant les parties du code source à tester en priorité. L’utilisation de modèles de prédiction de fautes peut épargner beaucoup de temps aux développeurs et testeurs. Par conséquent, cela entraîne une réduction des coûts en temps et en argent pour l’entreprise. Avec ces avantages marqués, on se demande pourquoi toutes les entreprises n’utilisent pas les modèles de prédiction de fautes. En fait, la réponse est simple : tous ces modèles ne sont pas simples à mettre en place et chacun présente ses avantages et ses inconvénients.
Pour bien comprendre en quoi consistent les modèles de prédiction de fautes, il est important de bien comprendre ce qu’est une faute. Selon Avizienis, Laprie, et Randell (2001), une faute est la cause d’une erreur dans un système logiciel. Une erreur (ou bogue) se produit lorsqu’une partie du système est dans un état invalide, ce qui à son tour peut entraîner une altération du service fourni par le système. Une faute n’est donc pas toujours facilement détectable. Tant qu’une faute ne provoque pas d’erreur, on dit qu’elle est dormante, sinon on la considère comme active. Souvent, les fautes sont détectées dans un système logiciel via la manifestation d’erreurs (ou bogues). Les modèles de prédiction de fautes tentent donc de prédire et détecter où se situent les fautes dans le système, afin de prévenir l’apparition d’erreurs
La prédiction de fautes supervisée
À la base, la prédiction de fautes supervisée est très simple et semble très prometteuse. Cependant, elle a aussi ses inconvénients pouvant être des freins majeurs à son adoption. Les approches supervisées utilisent l’historique des fautes détectées dans un ou plusieurs systèmes logiciels afin d’entraîner un modèle à reconnaître les fautes selon certaines caractéristiques prédéfinies. Par exemple, les algorithmes d’ apprentissage automatique et modèles statistiques sont souvent utilisés pour réaliser ce travail. Les caractéristiques utilisées pour cibler ‘les fautes dans le système logiciel sont très variées : métriques du code source (Catal, Diri, & Ozumut, 2007; Hong, 2012; Malhotra, 2012; Gondra, 2008), métriques d’inspection du code (Cong Jin & Jing-Lei Guo, 2013), détection d’anti-patrons de conception (Jaafar, Gueheneuc, Hamel, & Khornh, 2013), etc. Par contre, la plupart du temps, les métriques de code sont utilisées pour leur simplicité de compréhension et de calcul, en plus de leur lien déjà validé avec la prédisposition aux fautes (Isong & Obeten, 2013).
Ces caractéristiques du logiciel sont données en entrée au modèle de prédiction, qui est d’abord entraîné avec les données sur les fautes afin de détecter les relations avec celles-ci. Une fois entraîné, le modèle est appliqué sur le système à analyser pour extraire les parties du logicielles plus à risque de contenir des fautes.
Malgré leur simplicité, les modèles de prédiction de fautes présentent un désavantage majeur, soit le besoin de données sur les fautes du système pour fonctionner. Effectivement, ces données ne sont pas toujours disponibles, par exemple pour un nouveau développement logiciel ou encore pour un système légataire dont les données sur les fautes n’ont pas été répertoriées de façon standardisée (Catal, Sevim, & Diri, 2009b). De plus, acquérir et conserver des données de qualité sur les fautes d’un logiciel peut s’avérer coûteux, très long et nécessiter certains experts (Abaei et al., 2014; Lu et al., 2012). Le besoin important de données sur les fautes fait en sorte que les approches supervisées sont difficiles à mettre en oeuvre. C’est pourquoi des approches semi-supervisées et non supervisées ont également été proposées dans la littérature.
La prédiction de fautes semi-supervisée
Étant donné qu’il est difficile de recueillir et conserver un historique de toutes les fautes d’un système logiciel, les approches semi-supervisées ont été pensées afin de fonctionner avec quelques données sur les fautes seulement. Elles fonctionnent donc lorsqu’on détient seulement une quantité limitée de données sur les fautes d’un système. Cela les rend plus facilement utilisables que les approches supervisées. Mis à part qu’elles utilisent une quantité limitée de données afin de parvenir à faire de la prédiction de fautes, ces approches fonctionnent de façon très semblable aux approches supervisées. C’est-à-dire qu’un entraînement du modèle est fait à l’aide de caractéristiques du logiciel et des données sur les fautes afin d’avoir un modèle utilisable. Voyons maintenant quelques exemples d’approches semi-supervisées présentées dans la littérature.
Dans deux études produites par Lu et al. (2012); Lu, Cukic, et Culp (2014), un modèle utilisant l’algorithme d’ apprentissage automatique Random Forest et des techniques de réduction de dimensions des données a été étudié pour faire de la prédiction de fautes semi-supervisée. Les auteurs ont découvert que réduire le nombre de dimensions des données permettait d’ améliorer de façon significative la prédiction faite par le modèle semi-supervisé. Ils ont également découvert que l’algorithme Random Forest donnait une meilleure prédiction lorsqu’il était utilisé de façon semi-supervisée (avec leur approche) que de façon supervisée. Ils ont également comparé leurs résultats avec ceux d’autres études sur les modèles de prédiction de fautes semi-supervisés, montrant que leur approche donnait de meilleurs résultats.
Aussi, Catal (2014) a étudié plusieurs algorithmes semi-supervisés de prédiction de fautes. Les approches comparées, au nombre de quatre, sont: Low-Density Separation, Support Vector Machine, Expectation-Maximization et Class Mass Normalization. Suite à son analyse, Catal a conclu que le modèle Low-Density Normalization donnait les meilleurs résultats. Il pouvait être utilisé autant sur des jeux de données de grande taille que de petite taille.
Malgré le fait que les approches semi-supervisées utilisent des algorithmes d’apprentissage supervisés dans la construction de leur modèle, ces algorithmes ont été conçus afin de faire de la classification de données non-balancées (Lu et al., 2014). Cela signifie que la prédiction de fautes n’est pas une prédiction (ou classification) dite balancée, c’est-àdire qui prédit environ 50% du système comme non fautif et l’autre 50% comme fautif. En fait, la plupart du temps, un logiciel contiendra plus de code source non fautif que de code source fautif. Cela fait en sorte que les algorithmes d’ apprentissage semi-supervisés, faits pour fonctionner avec ce genre de données, parviennent très bien à prédire les fautes malgré la quantité restreinte de données sur celles-ci.
Malgré leurs avantages, les approches semi-supervisées nécessitent tout de même un minimum de données sur les fautes. Par contre, ces données ne sont pas toujours disponibles, ce qui peut parfois occasionner un frein à l’utilisation de ces approches. C’est pourquoi des approches non-supervisées ont également été proposées, afin de remédier à ce problème.
1 Introduction |