Rétro-ingénierie de modèles comportementaux par
Transcription
Rétro-ingénierie de modèles comportementaux par
Rétro-ingénierie de modèles comportementaux par apprentissage automatique Encadrants : Nicolas Baskiotis, Sylvain Lamprier, équipe MALIRE, LIP6, UPMC. Thématique : Apprentissage automatique statistique. Les modèles de spécication de scénarios comme les diagrammes de séquence représentent un moyen très utile pour la compréhension d'un système ainsi que pour le test logiciel : ils présentent les cycles d'interactions du système et de l'utilisateur de manière à modéliser le comportement du système. Quand ces diagrammes sont absents ou obsolètes, la rétroingénierie est utilisée pour extraire (semi-)automatiquement ce genre de modèles. Elle peut être réalisée statiquement en analysant le code source du système ou dynamiquement par l'exécution du système et l'analyse des traces d'exécution obtenues. En ce qui concerne les systèmes orientés objet, l'analyse dynamique est privilégié, plus adaptée aux mécanismes d'héritage, de liaison dynamique et de polymorphisme. Les algorithmes actuels de rétro-ingénierie s'inspirent fortement des techniques d'inférence grammaticale issue de l'apprentissage automatique. Ces techniques permettent en particulier d'apprendre une grammaire régulière cible à partir d'un ensemble de séquences. Pour cela, un arbre des préxes est d'abord construit, puis une procédure de généralisation de l'automate est appliquée itérativement par fusion successive d'états compatibles. La généralisation est contrôlée en principe par des séquences qui n'appartiennent pas au langage cible. Dans le cadre de la rétro-ingénierie, le processus d'apprentissage se déroule en trois étapes : collection des traces, inférence de l'automate représentant ces traces, puis traduction de l'automate en diagramme de séquence. Cependant, des séquences pouvant contrôler la généralisation ne sont pas disponibles dans ce contexte (elles représenteraient des exécutions non possibles du système). Ainsi, an d'obtenir des diagrammes précis, il est nécessaire que l'algorithme interagisse avec un expert an de le questionner sur la possibilité ou non de scénarios engendrés à partir de l'automate en cours d'induction. Ces algorithmes présentent le désavantage de n'être que semi-automatique et fastidieux. Une autre solution est d'utiliser des heuristiques sur les états qu'on s'autorise à fusionner (par exemple, algorithme de type k-tail : que deux états aient le même futur à un horizon xé). En l'état actuel, ces algorithmes produisent des automates beaucoup trop spéciques, ayant des centaines d'états, là où l'automate cible n'en possède qu'une dizaine. Les diagrammes ainsi produits sont peu lisibles, complexes et donc peu utiles. Nous proposons dans ce stage d'étudier des techniques issues de l'apprentissage automatique statistique an d'améliorer l'inférence des diagrammes de séquence. L'idée principale que nous souhaitons développer consiste à considérer des fusions bruitées d'états : plutôt que de considérer une inférence exacte de l'automate, soumise à un contrôle strict de généralisation par séquence, nous proposons de privilégier une inférence statistique, guidée par les fusions les plus probables. Deux pistes prometteuses pourront être explorées lors du stage. La première, inspirée de l'inférence de modèles de markov caché, consiste à apprendre les probabilités de transitions séquence par séquence, puis d'élaguer les transitions peu prometteuses. La seconde, inspirée de la recherche de motifs fréquents, consiste à fusionner les états par blocs de manière hiérarchique en fonction d'un critère de granularité reétant le degré de bruit ou d'approximation autorisé. 1