Procédé d'évaluation de compatibilité d'une application et d'une plateforme de type JAVACompatibility assessment method for an application and a JAVA-type platform
Les domaines techniques de l'invention sont l'informatique embarquée et l'analyse automatique de programmes, notamment pour les plates-formes J2ME (Java 2, Micro Edition). En particulier, l'invention porte sur une méthode pour évaluer la compatibilité ou interopérabilité application/plateforme d'une application embarquée sur une plateforme ou un ensemble de plates-formes J2ME, en fonction des ressources spécifiques aux différentes plates-formes. Une plateforme Java est un dispositif qui contient un ordinateur doté d'un environnement d'exécution susceptible d'héberger des applications ayant été développées dans le langage de programmation Java. Il existe quatre types de plates-formes Java [3] : - J2EE (Java 2, Enterprise Edition), pour les serveurs ; - J2SE (Java 2, Standard Edition), pour les ordinateurs personnels ; - J2ME (Java 2, Micro Edition), pour les petits ordinateurs embarqués ; - Java Card, pour les cartes à microprocesseurs. Une plate-forme J2ME est un couple formé d'une machine offrant une fonction principale (exemples : téléphone mobile, appareil photo, magnétoscope ou parcmètre) et d'un ordinateur intégré doté d'un environnement d'exécution pour les applications Java, dans la variante J2ME. L'environnement d'exécution d'une plate-forme Java est composé d'une machine virtuelle pour les programmes exécutables Java (un interpréteur pour les codes binaires Java, les bytes codes Java) et d'une bibliothèque de fonctions pour ces mêmes programmes. Ces fonctions sont appelées méthodes dans le cadre des langages de programmation orientés objets. Les méthodes sont regroupées en classes, qui sont elles-mêmes regroupées en paquets. On appelle distribution l'ensemble des classes implantées dans une plate-forme (on parle aussi de bibliothèques de
classes). Les classes sont organisées en utilisant un mécanisme d'héritage : les descendants acquièrent les propriétés des ascendants. La relation d'héritage induit une hiérarchie entre les classes, on parle d'arbre d'héritage ou de hiérarchie de classes. Un objet de la classe C est une structure de données déclarée pour répondre aux méthodes de la classe C et l'ensemble des classes ascendantes à C. Les différences entre les plate-formes J2ME se traduisent, au niveau de leur environnement d'exécution Java, par des différences dans les ensembles de méthodes qu'elles proposent aux applications. Ces différences créent des problèmes de compatibilités, une application étant susceptible de fonctionner sur une plate-forme A (si toutes les méthodes utilisées par l'application sont disponibles sur A) alors qu'elle ne fonctionnera pas sur une plate-forme B (si au moins une méthode utilisée par l'application n'est pas disponible sur B). Une analyse de compatibilité J2ME rend typiquement un diagnostic de compatibilité d'une application Java pour une plateforme J2ME. Dans la suite, on retient seulement deux diagnostics : - positif : tous les appels de méthodes fonctionne sur la plateforme, - négatif : au moins un appel de méthode ne fonctionne pas sur la plate-forme. Certaines analyses peuvent aussi conduire à un résultat d'une troisième sorte : inconclusif. Cela se produit dans les cas où ces analyses ne sont pas capables de se prononcer. Pour effectuer l'analyse d'une application par rapport à une plate-forme, au moins deux données sont nécessaires : - la description des méthodes implantées dans la plate-forme J2ME, - la liste des méthodes utilisées par l'application Java. Ces données peuvent être nécessaires avec plus ou moins de détails en fonction de la méthode utilisée pour effectuer l'analyse. Une analyse de compatibilité J2ME peut être effectuée de manière manuelle (par un opérateur humain) ou automatique (par un logiciel).
Le diagnostic d'une analyse de compatibilité J2ME est susceptible d'être erroné. Le vocabulaire de la sûreté de fonctionnement permet de classifier les résultats des analyses : - vrai-positif : diagnostic positif et correct ; - vrai négatif : diagnostic négatif et correct ; - faux-positif : diagnostic positif et erroné ; - faux-négatif : diagnostic négatif et erroné. Le produit Sensé, commercialisé par la société Elata (htttp://elata.com/) est le logiciel le plus approchant de l'invention décrite dans ce document (analyseur de compatibilité J2ME). Le logiciel Elata SENSE dispose d'un composant d'analyse de compatibilité J2ME automatique (sans intervention humaine). Pour effectuer l'analyse, Elata Sensé utilise le code exécutable de la bibliothèque de classes d'une plateforme J2ME et le code exécutable de l'application à analyser. Ces codes exécutables sont appelés bytes codes Java. Elata Sensé utilise une base de données pour stocker les distributions de classes d'un ensemble plates- formes. Cette base de données permet d'effectuer plusieurs analyses simultanément (une même application sur plusieurs plates-formes). Elata Sensé peut fournir des résultats erronés. Le produit MAS, commercialisé par la société 4thpassThe technical fields of the invention are embedded computing and automatic program analysis, in particular for J2ME platforms (Java 2, Micro Edition). In particular, the invention relates to a method for evaluating the compatibility or interoperability of the application / platform of an application embedded on a platform or a set of J2ME platforms, as a function of the resources specific to the different platforms. A Java platform is a device that contains a computer with an execution environment capable of hosting applications that have been developed in the Java programming language. There are four types of Java platforms [3]: - J2EE (Java 2, Enterprise Edition), for servers; - J2SE (Java 2, Standard Edition), for personal computers; - J2ME (Java 2, Micro Edition), for small embedded computers; - Java Card, for microprocessor cards. A J2ME platform is a couple made up of a machine offering a main function (examples: mobile phone, camera, video recorder or parking meter) and an integrated computer with an execution environment for Java applications, in the J2ME variant. The execution environment of a Java platform is composed of a virtual machine for Java executable programs (an interpreter for Java binary codes, Java bytes codes) and a library of functions for these same programs . These functions are called methods in the context of object-oriented programming languages. The methods are grouped into classes, which are themselves grouped into packages. We call distribution all the classes established in a platform (we also speak of libraries of classes). Classes are organized using an inheritance mechanism: descendants acquire the properties of ascendants. The inheritance relationship induces a hierarchy between the classes, we speak of an inheritance tree or class hierarchy. An object of class C is a data structure declared to respond to the methods of class C and all of the classes ascending to C. The differences between the J2ME platforms are reflected in their Java runtime environment , by differences in the sets of methods they offer to applications. These differences create compatibility problems, an application being able to function on a platform A (if all the methods used by the application are available on A) whereas it will not function on a platform B (if at least one method used by the application is not available on B). A J2ME compatibility analysis typically makes a diagnosis of compatibility of a Java application for a J2ME platform. In the following, only two diagnoses are retained: - positive: all the method calls work on the platform, - negative: at least one method call does not work on the platform. Certain analyzes can also lead to a result of a third kind: inconclusive. This happens in cases where these analyzes are not able to pronounce. To perform the analysis of an application in relation to a platform, at least two data are necessary: - the description of the methods implemented in the J2ME platform, - the list of methods used by the Java application. This data may be required in more or less detail depending on the method used to perform the analysis. A J2ME compatibility analysis can be performed manually (by a human operator) or automatically (by software). The diagnosis of a J2ME compatibility analysis may be wrong. The vocabulary of dependability makes it possible to classify the results of the analyzes: - true-positive: positive and correct diagnosis; - true negative: negative and correct diagnosis; - false positive: positive and wrong diagnosis; - false negative: negative and incorrect diagnosis. The Sensé product, marketed by the company Elata (htttp: //elata.com/) is the software closest to the invention described in this document (J2ME compatibility analyzer). Elata SENSE software has an automatic J2ME compatibility analysis component (without human intervention). To perform the analysis, Elata Sensé uses the executable code of the class library of a J2ME platform and the executable code of the application to be analyzed. These executable codes are called Java byte codes. Elata Sensé uses a database to store the class distributions of a set of platforms. This database makes it possible to carry out several analyzes simultaneously (the same application on several platforms). Elata Sensé may provide erroneous results. The MAS product, marketed by the company 4thpass
(http://www.4thpass.com/) est concurrent à l'offre d'Elata. Il dispose d'un outil d'analyse de compatibilité comparable. Il semble que cet outil soit capable d'effectuer des analyses au niveaux des méthodes. Le but principal de l'invention est de proposer un procédé et des moyens d'analyse de compatibilité entre une application Java et une plateforme de terminal de télécommunications, qui soient d'une rapidité et d'une fiabilité accrue. Un autre but est de fournir un tel procédé et de tels moyens qui permettent de réaliser une telle analyse sur une pluralité de plates-formes à la fois, telles qu'une flotte de terminaux mobiles d'un opérateur de télécommunications. Ces buts sont atteints selon l'invention grâce à un procédé d'analyse de compatibilité entre une application Java et au moins une plateforme
Java comprenant l'étape consistant à identifier au moins une classe susceptible de contenir une méthode appelée par ladite application Java, dans lequel procédé on identifie une telle classe à l'aide d'une base de données représentant au moins les classes de la plateforme considérée, caractérisé en ce qu'on identifie par une étape de dévirtualisation appliquée sur les classes de cette base de données au moins une classe susceptible de délivrer une méthode effective correspondant à la méthode appelée, le procédé consistant en outre à identifier dans la base de données une ou des plateformes portant ladite méthode effective susceptible d'être délivrée par cette classe On propose également selon l'invention un dispositif d'analyse de compatibilité entre une application Java et au moins une plateforme Java comprenant des moyens pour identifier au moins une classe susceptible de contenir une méthode appelée par ladite application Java, le dispositif comprenant des moyens pour identifier une telle classe à l'aide d'une base de données représentant au moins les classes de la plateforme considérée, caractérisé en ce que le dispositif comprend des moyens pour identifier par une étape de dévirtualisation appliquée sur les classes de cette base de données au moins une classe susceptible de délivrer une méthode effective correspondant à cette méthode appelée, le dispositif comprenant en outre des moyens pour identifier dans la base de données une ou des plateformes portant ladite méthode effective susceptible d'être délivrée par cette classe. Ainsi, la dévirtualisation suivie d'une telle identification s'avère fournir un résultat d'une fiabilité notablement élevée, et avec une efficacité élevée. D'autres caractéristiques, buts et avantages de l'invention apparaîtront à la lecture de la description détaillée qui va suivre, faite en référence aux figures annexées sur lesquelles : - la figure 1 schématise un procédé selon une variante préférée de l'invention ; - la figure 2 représente schématiquement une configuration hiérarchisée d'héritage de classes dans une approche de dévirtualisation.
La technique antérieure consiste en une analyse restreinte au niveau des classes. Cette technique est utilisée par Elata Sensé. Cela a pour inconvénient de sous-approximer les causes d'incompatibilité. En effet, pour un appel de méthode donné, une plate-forme peut implanter la classe de référence de l'appel bien qu'aucune méthode ne soit effectivement capable de répondre à cet appel. Cela peut se produire dans le cas où aucune classe de la distribution n'est capable de répondre à l'appel, bien que la classe de référence de l'appel soit présente dans la plate-forme. Pour les méthodes décrites dans les spécifications JCP (Java(http://www.4thpass.com/) is a competitor to Elata's offer. It has a comparable compatibility analysis tool. It seems that this tool is capable of carrying out analyzes at the method level. The main object of the invention is to propose a method and means of compatibility analysis between a Java application and a telecommunications terminal platform, which are of greater speed and reliability. Another object is to provide such a method and such means which make it possible to carry out such an analysis on a plurality of platforms at the same time, such as a fleet of mobile terminals of a telecommunications operator. These aims are achieved according to the invention thanks to a compatibility analysis method between a Java application and at least one platform Java comprising the step consisting in identifying at least one class capable of containing a method called by said Java application, in which method such a class is identified using a database representing at least the classes of the platform considered , characterized in that at least one class capable of delivering an effective method corresponding to the called method is identified by a devirtualization step applied to the classes of this database, the method further comprising identifying in the database one or more platforms carrying said effective method capable of being delivered by this class A device is also proposed according to the invention for analyzing compatibility between a Java application and at least one Java platform comprising means for identifying at least one class capable contain a method called by said Java application, the device includes ant means for identifying such a class using a database representing at least the classes of the platform considered, characterized in that the device comprises means for identifying by a devirtualization step applied to the classes of this database at least one class capable of delivering an effective method corresponding to this called method, the device further comprising means for identifying in the database one or more platforms carrying said effective method capable of being delivered by this class. Thus, devirtualization followed by such identification proves to provide a result of notably high reliability, and with high efficiency. Other characteristics, aims and advantages of the invention will appear on reading the detailed description which follows, made with reference to the appended figures in which: - Figure 1 shows a process according to a preferred variant of the invention; - Figure 2 schematically represents a hierarchical configuration of class inheritance in a devirtualization approach. The prior art consists of a limited analysis at the class level. This technique is used by Elata Sensé. This has the disadvantage of under-approximating the causes of incompatibility. Indeed, for a given method call, a platform can set up the reference class of the call although no method is actually capable of responding to this call. This can happen in the case where no class of the distribution is able to answer the call, although the reference class of the call is present in the platform. For the methods described in the JCP specifications (Java
Community Process) de bibliothèque de classes, ces problèmes devraient être détectés par les tests de compatibilité TCK (Technology Compatibility Kit), qui sont vendus par Sun pour chacune de ces bibliothèques. Tester la présence d'une définition de méthode attendue dans une classe est suffisamment conclusif. La description détaillée de l'invention qui va être faite maintenant utilise la spécification du langage Java [2] ainsi que la spécification de la machine virtuelle Java [4]. Une classe c est définie par un couple (p,N) où p est un nom de paquet et N est un nom de classe. Une méthode est définie par un quadruplet (c, v, m, s) où c est une classe, v est un qualificateur d'accessibilité, m est un nom, et s est une signature. Dans notre contexte, on considère . qu'un qualificateur d'accessibilité est une information attachée à une définition de méthode, qui restreint l'ensemble de classes autorisées à appeler la méthode définie. Les détails de ces restrictions sont décrits dans [2]. Un appel de méthode γ est un quintuplet (k, ce, CR, m, s) dans lequel k e K est un qualificateur d'appel, avec K = {spécial, virtual, static, interface} ; ce est la classe contexte, c'est à dire la classe ou a lieu l'appel ; CR est la classe de référence (type statique), c'est une super-classe de la classe dynamique de l'objet receveur, m est le nom de la méthode
invoquée et s est la signature de la méthode invoquée. Les détails de la spécification d'un appel de méthode Java sont décrits dans [4]. L'invention fait ici appel à l'utilisation d'une base de données référencée 10 sur la figure 1. On appelle P l'ensemble de toutes les plates-formes stockées dans la base de données. Ces plates-formes sont référencées 20, 30, 40 sur la figure 1. On appelle C l'ensemble de toutes les classes stockées dans la base de données 10. Un rapport de compatibilité est un ensemble de quadruplets (c, m, s, φ) où (c, m, s) est une méthode et φ est l'ensemble des plates-formes qui ne supportent pas la méthode (c, m, s). Pour l'analyse de compatibilité d'une application A (référencée également 50 sur la figure 1 ) par rapport à un ensemble de distributions P, l'algorithme utilisé ici est le suivant : 1 ) Initialisation : ψA := 0 ; le rapport de compatibilité de l'applicationCommunity Process) library, these problems should be detected by the Technology Compatibility Kit (TCK) tests, which are sold by Sun for each of these libraries. Testing the presence of an expected method definition in a class is sufficiently conclusive. The detailed description of the invention which will now be made uses the specification of the Java language [2] as well as the specification of the Java virtual machine [4]. A class c is defined by a pair (p, N) where p is a package name and N is a class name. A method is defined by a quadruplet (c, v, m, s) where c is a class, v is an accessibility qualifier, m is a name, and s is a signature. In our context, we consider. that an accessibility qualifier is information attached to a method definition, which restricts the set of classes authorized to call the defined method. The details of these restrictions are described in [2]. A method call γ is a quintuplet (k, ce, CR, m, s) in which ke K is a call qualifier, with K = {special, virtual, static, interface}; it is the context class, ie the class where the call takes place; CR is the reference class (static type), it is a superclass of the dynamic class of the receiving object, m is the name of the method invoked and s is the signature of the invoked method. The details of specifying a Java method call are described in [4]. The invention here calls for the use of a database referenced 10 in FIG. 1. The set of all the platforms stored in the database is called P. These platforms are referenced 20, 30, 40 in FIG. 1. We call C the set of all the classes stored in the database 10. A compatibility ratio is a set of quadruplets (c, m, s, φ) where (c, m, s) is a method and φ is the set of platforms that do not support the method (c, m, s). For the compatibility analysis of an application A (also referenced 50 in FIG. 1) with respect to a set of distributions P, the algorithm used here is the following: 1) Initialization: ψ A : = 0; the application compatibility report
A, que l'on appelle ψA, est initialement vide ; 2) Extraction de l'ensemble des appels de méthodes contenues dans le code exécutable propre à l'application A. Il s'agit là, et dans ce mode de réalisation, d'identifier les méthodes appelées. 3) Boucle appels ; s'il en reste, tirage d'un appel γ = (k, ce, CR, m, s)A, which is called ψ A , is initially empty; 2) Extraction of all the method calls contained in the executable code specific to application A. This is there, and in this embodiment, to identify the methods called. 3) Call loop; if there are any left, draw a call γ = (k, ce, CR, m, s)
€ IA non traité, sinon passage à la fin de la boucle appels. 4) Appel à la base de données : calcul de l'ensemble des classes Cγ contenant une méthode (m, s). 5) Restriction de Cγ aux sous-classes et aux super-classes de la classe CR. 6) Boucle classes. S'il en reste, tirage d'une classe ce non traitée, sinon passage à la fin de la boucle classes. 7) Appel à la base de données : calcul de l'ensemble des plates- formes Pc qui implantent (c, m, s). On identifie ici des méthodes effectives, c'est à dire des méthodes qui existent réellement sur les plateformes et correspondent concrètement aux méthodes appelées identifiées à l'étape 2.
En d'autres termes, la base de données contient un ensemble de liens entre une liste de plateformes (par exemple des modèles de téléphones mobiles) et une liste des méthodes effectives, liens qui indiquent qu'une plateforme d'un type donné contient une méthode donnée ou au contraire ne la contient pas. Il s'agit en d'autres termes d'utiliser un tableau à deux entrées (les plateformes et les méthodes) pour indiquer quelles plateformes sont aptes à mettre en œuvre la méthode effective donnée. 8) Restriction de Pc aux plates-formes pour lesquelles la méthode (c, m, s) est accessible depuis la classe ce. 9) Si Pc ≠ P, effectuer ψA := ΨA ^ {(C, m, s, P n Pc)} 10) Retour au début de la boucle classes, fin de cette boucle 11) Retour au début de la boucle appels, fin de cette boucle 12) Si ψA = 0 alors l'application A est compatible avec toutes les plates-formes de P, sinon ψA contient un ensemble de quadruplets (c, m, s, φ) où (c, m, s) est une méthode invoquée dans A et où φ est l'ensemble des plate-formes qui ne supportent pas (c, m, s). Cet algorithme effectue un calcul de dévirtualisation à l'étape 4 pour les appels de méthodes de l'application. C'est le résultat de ce calcul qui est soumis à la base de données pour vérification de compatibilité. Les résultats de ces calculs sont identiques à ceux fournis par la méthode CHA, néanmoins l'algorithme est différent (CHA n'utilise pas de base de données). D'autre part, cet exemple de l'invention n'utilise pas ici la méthode RTA. Aussi, on utilise une étape de dévirtualisation dont on applique ici le résultat au contenu d'une base de données associée. Dans le présent mode de réalisation, la méthode appelée peut être une définition générale de méthode, à laquelle sont susceptibles de correspondre une ou plusieurs méthodes effectives. II existe différentes manières de représenter les données décrivant ces plates-formes dans la base de données. Nous utilisons une base de données relationnelle contenant une table des distributions de classes, une
table des méthodes, une table des classes ainsi que deux tables pour les associations entre les tables de données. Néanmoins, l'invention ne porte pas sur la structure de cette base de données. Seule l'utilisation d'une base de données de plate-forme est requise. Dans un langage de programmation orienté-objet (tel que Java), les appels à des fonctions (que l'on appelle alors appel de méthode) utilisent un mécanisme appelé « résolution dynamique ». Ce mécanisme permet de fixer, au moment de l'exécution du programme, la fonction qui effectuera le traitement répondant à un appel de méthode donné. Un appel de méthode représente l'envoi d'un message à un objet (appelé receveur), la résolution dynamique consiste à parcourir la hiérarchie d'héritage en remontant à partir de la classe du receveur, à la recherche d'une méthode capable de répondre à l'appel. Cela permet de changer ce traitement d'un appel de méthode à un autre. Dans les langages non orienté-objet, la résolution est statique, c'est à dire fixée une fois pour toutes. La dévirtualisation est une méthode qui permet de calculer l'ensemble des classes qui répondent au cours de l'exécution à un appel de méthode donné. La dévirtualisation d'un appel de méthode fournit un ensemble de classes qui contiennent toutes une méthode susceptible de répondre à l'appel analysé. Lors de l'exécution d'un appel de méthode, une seule de ces classes sera vraiment activée par la résolution dynamique. La dévirtualisation est un calcul approché : les ensembles calculés doivent contenir toutes les classes activables mais ils contiennent aussi des classes non activables. Plus la technique de dévirtualisation est performante, plus elle fournit des résultats précis (c'est à dire des ensembles contenant moins de classes non activables). Il existe de nombreuses techniques dévirtualisation : Class Hierarchy Analysis (CHA), Rapid Type Analysis (RTA), Extented Type Analysis (XTA) et Variable Type Analysis (VTA) (pour ne citer que les plus classiques). Le calcul de l'ensemble des appels de méthodes contenus dans le code propre à l'application est suffisant pour effectuer l'analyse au niveau
des classes. L'analyseur de compatibilité restreint au niveau des classes s'arrête à cette étape. Pour effectuer la restriction de l'ensemble des classes Cγ aux sous- classes et aux super-classes de CR différentes implantations sont possibles. Nous utilisons une structure de donnée arborescente pour représenter la hiérarchie d'héritage commune à l'ensemble des distributions de classes. Néanmoins, l'invention ne spécifie pas de technique ou de structure de donnée particulière pour effectuer ce calcul, dont les détails sont secondaires, mais dont la présence est requise. L'algorithme présenté correspond au traitement effectué dans le cas d'un appel de méthode virtuelle (virtual). Dans le cas des autres appels de méthodes le traitement est légèrement différent : Dans le cas d'une méthode de type static, l'appel n'utilise pas la résolution dynamique, il n'y a pas d'approximation à calculer, il suffit de trouver les plates-formes qui implantent la classe de référence. Dans le cas spécial pour l'appel à une méthode privée, les méthodes privées ne peuvent pas être incompatibles, elles sont dans des classes fournies par l'application. Pour l'appel à une méthode d'initialisation, les méthodes d'intialisations sont résolues statiquement, voir ce cas ci-dessus. Pour l'appel à l'objet super, on procède comme pour les appels virtuels à ceci près que l'on ne considère pas les sous-classes minimales de la classe de référence (on coupe les feuilles). Dans le cas d'une méthode de type interface, pour un appel d'interface on commence par trouver les classes qui implementent l'interface dans la base de données. Ensuite, à partir de ces classes on procède comme pour les appels virtuels. La base de données 10 des plates-formes 20, 30, 40 peut se trouver sur le même ordinateur que celui qui effectue les analyses de compatibilité ou se trouver sur un autre ordinateur (ils doivent alors être reliés par un réseau de communication). L'entrée de nouvelles plates- formes ou d'applications à analyser ainsi que les sorties de rapport de
compatibilité peuvent être effectuées localement ou à distance, sous des formes variées et avec plus ou moins de détails. L'absence de résultats faux-positifs est une qualité propre à l'invention. C'est pour garantir cette propriété que l'on préfère mettre en œuvre l'invention pour les plates-formes de type J2ME. En effet, dans J2ME, l'ensemble des classes qui peuvent être instantifiés dans une application à une sûr-approximation statique et finie l'union de l'ensemble des classes de la plate-forme et de l'ensemble des classes de l'application. Néanmoins l'invention est applicable à toute version de Java pour laquelle cette propriété est vérifiée. Ce n'est cependant pas toujours le cas pour J2EE et J2SE. L'application de l'invention à Java Card est également possible. Aussi, dans le présent mode de réalisation privilégié, on utilise de manière combinée deux techniques qui sont la dévirtualisation et l'audit automatique de byte code. Une de ces deux techniques (la dévirtualisation dans la variante CHA) est appliquée dans l'utilisation d'une base de données (requise dans le contexte du problème à résoudre). Grâce à ces dispositions, il devient possible de faire l'analyse de compatibilité au niveaux des méthodes appelées (meilleure qualité de l'analyse). Il devient en outre possible de faire l'analyse de compatibilité pour plusieurs téléphones simultanément plus efficacement qu'en faisant une analyse pour chaque téléphone (meilleures performances de l'analyse). Notre invention effectue une analyse au niveau des méthodes, donc avec un grain plus fin. Cela présente les avantages suivants : - l'absence de résultats faux-positifs ne dépend pas d'hypothèse sur les distributions de classes ; - en cas de résultat négatif, notre invention fournit une liste des méthodes susceptibles d'être incompatibles, pour chaque appel de méthode, invoquées par l'application sur une plate-forme donnée.
Un exemple d'application de l'invention est l'analyse de compatibilité des applications J2ME pour les téléphones mobiles Java. Il existe plusieurs bibliothèques de classes spécifiques à des familles de dispositifs J2ME, ces bibliothèques sont appelées « profils », on compte par exemple : MIDP (Mobile Information Device Profile) pour le téléphone mobile, MHP (Multimedia Home Profile) pour l'électronique domestique et STIP (Smalll Terminal Interoperability Platform) pour le paiement et la monétique. Les applications J2ME pour les téléphones mobiles utilisent le profil MIDP. Ces applications sont appelées « midlets ». Les midlets peuvent être téléchargées, installées par les utilisateurs du téléphone. Il existe différentes versions de MIDP, des bibliothèques optionnelles supplémentaires et des bibliothèques propriétaires (spécifiques à un fabricant de téléphones). En conséquence, les bibliothèques de classes disponibles varient sensiblement d'un téléphone à l'autre. Il existe donc un problème de compatibilité au niveau des classes et des méthodes utilisées par les midlets. L'invention permet à un utilisateur de téléphone J2ME de savoir si une application Java est compatible avec son téléphone avant qu'il ne l'ait téléchargée. Elle permet aussi à un développeur d'application de savoir sur quels téléphones son application est susceptible de ne pas fonctionner. Elle permet à un opérateur de réseau de téléphonie mobile d'évaluer la compatibilité des applications disponibles avec le parc de téléphones de ses clients. L'invention peut aussi être utilisée par le service clientèle d'un opérateur pour assister un client ayant installé une application incompatible avec son terminal. Les opérateurs de portails de téléchargement d'applications J2ME sont les principaux demandeurs d'évaluation automatique d'interopérabilité. En particulier, les opérateurs de téléphonie mobile doivent faire face à l'hétérogénéité des terminaux de leurs clients et la multiplication des fournisseurs indépendants de midlets.
Glossaire J2EE : Java 2, Enterprise Edition€ IA not processed, otherwise go to the end of the calls loop. 4) Call to the database: calculation of the set of classes C γ containing a method (m, s). 5) Restriction of C γ to subclasses and superclasses of class CR. 6) Class loop. If there are any left, draw a class that is not processed, otherwise go to the end of the classes loop. 7) Call to the database: calculation of all the Pc platforms that set up (c, m, s). We identify here effective methods, i.e. methods that actually exist on platforms and correspond concretely to the so-called methods identified in step 2. In other words, the database contains a set of links between a list of platforms (for example mobile phone models) and a list of effective methods, links which indicate that a platform of a given type contains a given method or on the contrary does not contain it. In other words, it involves using a table with two inputs (platforms and methods) to indicate which platforms are capable of implementing the given effective method. 8) Restriction of P c to platforms for which the method (c, m, s) is accessible from class ce. 9) If Pc ≠ P, carry out ψA: = ΨA ^ {(C, m, s, P n P c )} 10) Return to the start of the classes loop, end of this loop 11) Return to the start of the calls loop , end of this loop 12) If ψ A = 0 then the application A is compatible with all the platforms of P, otherwise ψ A contains a set of quadruplets (c, m, s, φ) where (c, m , s) is a method invoked in A and where φ is the set of platforms which do not support (c, m, s). This algorithm performs a devirtualization calculation in step 4 for the method calls of the application. It is the result of this calculation which is submitted to the database for compatibility verification. The results of these calculations are identical to those provided by the CHA method, however the algorithm is different (CHA does not use a database). On the other hand, this example of the invention does not use the RTA method here. Also, a devirtualization step is used, the result of which is applied here to the content of an associated database. In the present embodiment, the method called can be a general definition of method, to which one or more effective methods may correspond. There are different ways of representing the data describing these platforms in the database. We use a relational database containing a table of class distributions, a method table, a class table and two tables for associations between data tables. However, the invention does not relate to the structure of this database. Only the use of a platform database is required. In an object-oriented programming language (such as Java), calls to functions (so-called method calls) use a mechanism called "dynamic resolution". This mechanism makes it possible to fix, at the time of the execution of the program, the function which will carry out the processing responding to a given method call. A method call represents the sending of a message to an object (called receiver), dynamic resolution consists in traversing the inheritance hierarchy by going up starting from the class of the receiver, in search of a method capable of answer the call. This allows this processing to be changed from one method call to another. In non-object-oriented languages, the resolution is static, that is to say fixed once and for all. Devirtualization is a method that calculates the set of classes that respond during execution to a given method call. The devirtualization of a method call provides a set of classes which all contain a method capable of responding to the analyzed call. When executing a method call, only one of these classes will actually be activated by dynamic resolution. Devirtualization is an approximate calculation: the calculated sets must contain all the activatable classes but they also contain non-activatable classes. The more efficient the devirtualization technique, the more precise it provides results (ie sets containing fewer non-activatable classes). There are many devirtualization techniques: Class Hierarchy Analysis (CHA), Rapid Type Analysis (RTA), Extented Type Analysis (XTA) and Variable Type Analysis (VTA) (to name only the most classic). The calculation of all the method calls contained in the code specific to the application is sufficient to perform the analysis at the level classes. The class level restricted compatibility analyzer stops at this stage. To carry out the restriction of the set of classes Cγ to subclasses and superclasses of CR, different layouts are possible. We use a tree data structure to represent the inheritance hierarchy common to all class distributions. However, the invention does not specify any particular technique or data structure for performing this calculation, the details of which are secondary, but the presence of which is required. The algorithm presented corresponds to the processing carried out in the case of a virtual method call (virtual). In the case of other method calls, the processing is slightly different: In the case of a static type method, the call does not use dynamic resolution, there is no approximation to calculate, it suffices to find the platforms that implement the reference class. In the special case for calling a private method, private methods cannot be incompatible, they are in classes provided by the application. For the call to an initialization method, the initialization methods are statically resolved, see this case above. For the call to the super object, we proceed as for the virtual calls except that we do not consider the minimum subclasses of the reference class (we cut the sheets). In the case of an interface type method, for an interface call we start by finding the classes that implement the interface in the database. Then, from these classes we proceed as for virtual calls. The database 10 of the platforms 20, 30, 40 can be on the same computer as that which performs the compatibility analyzes or can be on another computer (they must then be connected by a communication network). The entry of new platforms or applications to be analyzed as well as the report outputs of Compatibility can be carried out locally or remotely, in various forms and with more or less details. The absence of false-positive results is a quality specific to the invention. It is to guarantee this property that we prefer to implement the invention for platforms of the J2ME type. Indeed, in J2ME, the set of classes which can be instantiated in an application to a sure-static approximation and finite the union of the set of classes of the platform and the set of classes of the application. However, the invention is applicable to any version of Java for which this property is verified. However, this is not always the case for J2EE and J2SE. Application of the invention to Java Card is also possible. Also, in the present preferred embodiment, two techniques are used in a combined manner which are devirtualization and automatic byte code auditing. One of these two techniques (devirtualization in the CHA variant) is applied in the use of a database (required in the context of the problem to be solved). Thanks to these provisions, it becomes possible to carry out the compatibility analysis at the level of the methods called up (better quality of the analysis). It also becomes possible to perform compatibility analysis for several phones simultaneously more efficiently than by doing an analysis for each phone (better performance of the analysis). Our invention performs an analysis at the method level, therefore with a finer grain. This has the following advantages: - the absence of false-positive results does not depend on hypothesis on the class distributions; - in the event of a negative result, our invention provides a list of methods which may be incompatible, for each method call, invoked by the application on a given platform. An example of application of the invention is the compatibility analysis of J2ME applications for Java mobile phones. There are several class libraries specific to families of J2ME devices, these libraries are called "profiles", for example: MIDP (Mobile Information Device Profile) for mobile phones, MHP (Multimedia Home Profile) for home electronics and STIP (Smalll Terminal Interoperability Platform) for payment and electronic payment. J2ME applications for mobile phones use the MIDP profile. These applications are called "midlets". Midlets can be downloaded, installed by phone users. There are different versions of MIDP, additional optional libraries, and proprietary libraries (specific to a phone manufacturer). As a result, the available class libraries vary significantly from phone to phone. There is therefore a compatibility problem with the classes and methods used by midlets. The invention enables a J2ME telephone user to know whether a Java application is compatible with his telephone before he has downloaded it. It also allows an application developer to know on which phones his application may not work. It allows a mobile telephone network operator to assess the compatibility of the applications available with its customers' fleet of telephones. The invention can also be used by an operator's customer service to assist a customer who has installed an application incompatible with his terminal. The operators of J2ME application download portals are the main demanders of automatic interoperability assessment. In particular, mobile operators have to deal with the heterogeneity of their customers' terminals and the proliferation of independent midlet providers. J2EE Glossary: Java 2, Enterprise Edition
J2DE : Java 2, Standard EditionJ2DE: Java 2, Standard Edition
J2ME : Java 2, Micro EditionJ2ME: Java 2, Micro Edition
CLDC : Connected Limited Device ConfigurationCLDC: Connected Limited Device Configuration
MIDP : Mobile Information Device Profile MHP : Multimedia Home ProfileMIDP: Mobile Information Device Profile MHP: Multimedia Home Profile
STIP : Small Terminal Interoperability PlatformSTIP: Small Terminal Interoperability Platform
JCP : Java Community ProcessJCP: Java Community Process
JSR : Java Spécification RequestJSR: Java Specification Request
TCK : Technology Compatibily Kit Midlet : MIDP ApplicationTCK: Technology Compatibily Kit Midlet: MIDP Application
CHA : Class Hierarchy AnalysisCHA: Class Hierarchy Analysis
RTA : Rapid Type AnalysisRTA: Rapid Type Analysis
XTA : Extended Type AnalysisXTA: Extended Type Analysis
VTA : Variable Type AnalysisVTA: Variable Type Analysis
RéférencesReferences
1. D.F. Bacon, M.N. Wegman, and F.K. Zadeck. Object oriented dispatch optimization. US Patent Number 6,041 ,179, Mar. 2000. 2. J. Gosling, B. Joy, G. Steele, and G. Bracha. The Java (TM) Language Spécification, Second Edition, Addison-Wesley, 2000 3. M. Hardee, M. Smaragdis, F. Rimalovski, C. Cameron, D. Macias, B. Goldberg, T. Beyers, J. Byous, J. Umstattd, L. Doughty, T. Welch, H. Dailey, K. Kayl, D. Nourie, A. Wisnewski, and G. Guinto. What is Java (TM) technology ? Sun Microsystems, 2002 http ://iava . su n . com/iava2/whatis/.
4. F.Y. Tim Lindholm. The Java (TM) Virtual Machine Spécification, Second Edition. Addison-Wesley, 1999.1. DF Bacon, MN Wegman, and FK Zadeck. Object oriented dispatch optimization. US Patent Number 6,041, 179, Mar. 2000. 2. J. Gosling, B. Joy, G. Steele, and G. Bracha. The Java (TM) Language Specification, Second Edition, Addison-Wesley, 2000 3. M. Hardee, M. Smaragdis, F. Rimalovski, C. Cameron, D. Macias, B. Goldberg, T. Beyers, J. Byous, J. Umstattd, L. Doughty, T. Welch, H. Dailey, K. Kayl, D. Nourie, A. Wisnewski, and G. Guinto. What is Java (TM) technology? Sun Microsystems, 2002 http: // iava. su n. com / iava2 / whatis /. 4. FY Tim Lindholm. The Java (TM) Virtual Machine Specification, Second Edition. Addison-Wesley, 1999.
5. F. Tip and J. Paisberg. Scalable propagation-bases call graph construction algorithms. In Proceeding of OOPSLA'OO, pages 281-293, 2000.
5. F. Tip and J. Paisberg. Scalable propagation-bases call graph construction algorithms. In Proceeding of OOPSLA'OO, pages 281-293, 2000.