Profiling de code avec le projet TPTP
La mise en place de tests et l’analyse des performances des applications sont des phases essentielles dans le cycle de développement d’un projet. C’est dans cette optique que la plate-forme TPTP (Test & Performance Tools Platform), aussi appelée Hyades, a vu le jour comme sous-projet Eclipse en 2002. Après une description des fonctionnalités de TPTP et des différents modules qui le constituent, nous détaillerons sa mise en œuvre pratique sur un projet Java avant de passer au profiling d’une application Web. Le projet TPTP a pour objectif de fournir un environnement complet pour la couverture des tests et la mesure des performances. Il est constitué des quatre modules suivants organisés en sous-projets : • TPTP Platform Project, la plate-forme qui fournit le socle utilisé par les différents outils de performance ainsi que les mécanismes de collecte des métriques. • TPTP Monitoring Tools Project, les outils de monitoring qui permettent de collecter et d’analyser les ressources concernant l’application testée. • TPTP Test Tools Project, les outils qui facilitent la création des tests (capture et exécution d’une suite de requêtes HTTP). • TPTP Tracing and Profiling Tools Project, les outils de trace et de profiling des applications Java et J2EE qui permettent de collecter des informations sur le fonctionnement des applications Java et de les analyser (localisation des allocations mémoire, détermination des temps d’exécution). Eclipse TPTP est une solution extensible qui couvre l’ensemble du cycle de vie d’un projet, depuis les tests unitaires jusqu’à la mise en production et au monitoring de l’application, en passant par l’enregistrement des tests, leur exécution ainsi que la collecte des métriques et le profiling. Outre IBM, les principaux contributeurs au projet sont Computer Associates, Compuware, Intel, SAP et Scapa Technologies.
Architecture de TPTP
Avant d’entrer dans le cœur de l’architecture du projet TPTP, un des nombreux sousprojets Eclipse (http://www.eclipse.org/tptp), nous allons esquisser une définition de cette activité de plus en plus importante au sein d’une équipe de développement J2EE, voire au sein des équipes en charge des tests de charge et d’optimisation Java, qu’est le profiling de code Java. Du fait de la complexité croissante des architectures J2EE/JEE, le besoin de connaître dans le détail la santé de l’application, en particulier des composants qu’elle embarque, nécessite la mise en œuvre d’outils dédiés au profiling de code Java. Le profiling de code consiste à générer un rapport détaillé de l’application analysée, comme son temps d’exécution et le pourcentage d’exécution de chaque procédure, ou méthode dans le cas d’applications Java, contenues au sein de l’application. Avec un outil de profiling, on recherche essentiellement dans l’application les points suivants : • présence de goulets d’étranglement à l’origine de dégradations des performances de l’application (temps de réponse, consommation de ressources CPU, etc.). • consommation mémoire excessive provenant de certains composants ou méthodes de l’application ; • fuites mémoire occasionnant une consommation anormale de ressources système (présence d’objets volumineux créés par l’application). Le profiling du code consiste à observer le comportement de l’application en situation de charge, ce qui implique la plupart du temps l’utilisation d’outils de stress test ou d’injecteurs spécialisés, qui enregistrent le fonctionnement de l’application, comme loadRuner de Mercury ou QaLoad de Compuware. Il est ensuite possible d’étudier en mode déconnecté l’application et d’investiguer plus avant les problèmes de performances détectés, cette phase intervenant en général en fin de développement, avant son passage en préproduction. Le projet TPTP offre un certain nombre de fonctionnalités de profiling, notamment les suivantes : • ensemble de vues et de perspectives permettant d’historiser les résultats des tests d’exécution et de les examiner hors exécution (analyse statique) ; • outils de test de non-régression et frameworks (plug-in JUnit, assistants graphiques d’automatisation des tests) ; • possibilité d’interagir et de profiler ses applications, ainsi que, avec les ressources analysées, d’examiner les éventuels problèmes de performances et de gestion mémoire ; • possibilité de comprendre et de visualiser l’exécution de l’application en mettant en relief les composants qui consomment le plus de ressources.
Composants de TPTP
L’architecture de TPTP fournit un cadre à partir duquel une application cliente peut interagir avec une ou plusieurs applications fournissant les métriques (agents), et ce indépendamment de leur localisation. Cette structure se compose d’une interface client, d’un processus de gestion d’agent, d’une interface d’agent et de quelques agents à usage général. Le processus de gestion d’agent est appelé contrôleur d’agent. C’est ce composant qui permet à une application cliente de se séparer des détails liés à la recherche et au démarrage des différents fournisseurs de données situés sur des machines locales ou distantes, dont le type de plate-forme (système d’exploitation et architecture d’unité centrale) et le langage (C/C++, Java) peuvent être différents.