Applications étagées (Framework-intensive applications)

La majorité des applications web modernes sont composées d'une relativement petite quantité de code d'application qui s'appuie sur une grande quantité de code appartenant à des bibliothèques et cadres d'applications des tierces parties. Récemment, cette architecture étagée est aussi passée aux applications personnelles (par exemple, Eclipse et Jazz). Les applications étagées présentent souvent des comportements qui diffèrent largement des applications traditionnelles. Par exemple, les problèmes de performance sont rarement contenu à l'intérieur d'une région spécifique du programme, mais s'étendent sur plusieurs niveaux de composants. Ce problème est aggravé par le fait que les programmeurs sont en général très peu familiers avec le comportement interne des composants utilisés par leur code; ils ignorent donc l'impact de leur décisions sur le système. Plusieurs problèmes qui surviennent en pratique (par exemple, de performance et sécurité) nécessitent donc une compréhension précise du comportant du système en entier.

Ces applications, par contre, constituent un défi de taille pour les techniques d'analyse modernes. Les approches basées sur l'analyse statique du code sont souvent incapables de s'exécuter sur des programmes de cette taille et complexité parce qu'elles considèrent une grande quantité de code qui n'est normalement pas exercé par l'application lors de l'exécution. Même lorsque ces techniques peuvent être appliquées, elles génèrent souvent des résultats qui sont trop conservateurs ou imprécis pour être utilisables. L'analyse dynamique, de son côté, impose généralement trop de surcharge de temps d'exécution, ou est trop limitée dans l'information qui peut être enregistrée tout en maintenant une surcharge raisonnable du temps d'exécution.

L'objectif principal de nos travaux de recherche portant sur les applications étagées est de développer les techniques et les outils nécéssaires pour aider les développeurs à identifier et corriger les problèmes qui sont présents dans leurs applications, et donc à assurer un haut de niveau de qualité pour ces importants logiciels.

Analyse combinée (Blended analysis)

L'analyse combinée est un nouveau paradigme d'analyse qui combine des éléments d'analyses statiques et dynamiques. Plus précisément, l'analyse combinée utilise une trace d'exécution dynamique pour limiter la portée d'une analyse statique traditionnelle, et ainsi permettre des analyses précises à un coût pratique. En utilisant l'analyse combinée, il est possible d'analyser des logiciels de très grande taille (par exemple, des applications web commerciales) avec une précision comparable à celle d'une analyse purement dynamique, mais à un bien plus modeste coût.

Les expériences préliminaires portant sur l'analyse combinée ont mis l'emphase sur l'utilisation excessive d'objets temporaires (object churn), un problème de performance très répandu dans les applications étagées. Nous travaillons actuellement à appliquer l'analyse combinée à d'autres problèmes et domaines.