Cet article s'intéresse à la spécification formelle, à la conception et à l'implantation des composants comportementaux des interfaces graphiques utilisateurs. Les séquences plus ou moins complexes des événements et des actions constituant le dialogue entre l'utilisateur et l'interface sont spécifiés sous forme de grammaires attribuées et plus précisemment de grammaires de communications VEG (Visual Event Grammar). La spécification en VEG est complètement indépendante de l'apparence de l'interface ce qui permet de l'intégrer avec différentes apparences (Gtk, Swing, AWT, ...) mais aussi du langage de programmation de l'application (C, C++, Java, ...). De plus cette spécification peut être vérifié avec le vérificateur de modèle SPIN afin de tester sa consistance mais aussi sa correction et ainsi de détecter les interblocages ou les états qui sont inatteignables, mais aussi pour générer des tests afin de valider certains comportements. En utilisant des analyseurs syntaxiques, du code efficace est généré et des applications de tailles importantes (application médicale, librairie de construction de graphe, ...) peuvent être développées et ne souffrent pas de la comparaison avec des applications développées à la main. A l'aide de l'ensemble de ces outils, des gains importants sont réalisés concernant la détection des erreurs et leur correction (fourniture de contre exemples par SPIN), généricité vis à vis de l'apparence de l'application, etc.

Cet article présente un nouvel outil de manipulation de classes Java conçu pour la génération et la manipulation dynamiques du code. Ces deux techniques sont très utiles pour la réalisation de systèmes adaptables. Contrairement aux différentes approches existantes (SERP, BCEL, etc), ASM utilise une approche originale en exploitant le patron de conception Visiteur sans représenter explicitement l'arborescence visitée sous forme d'objets. Les performances obtenues grâce à cette technique sont bien supérieures à celles des outils existants. Néanmoins, l'idée principale d'ASM est d'optimiser au maximum les opérations les plus souvent effectuées, et de fait certaines opérations restent coûteuse en temps.

De nombreux styles architecturaux ont été formalisés afin de répondre à des contraintes de stabilité et de coût de développement d'applications (notamment les applications réseaux). Certains définissent un ensemble de règles permettant de composer un système à partir de composants et de connecteurs. L'un des styles les plus courants pour des applications distribuées à monté en charge importante est l'approche dîte événementielle. Dans cette approche, les composants vont communiquer en publiant ou en réceptionnant de façon asynchrone des notifications d'événements. Une notification étant propagée à l'ensemble des composants déclarés intéressé par celle-ci. Cette approche est très intéressante car un composant peut opérer dans le système sans avoir de connaissance sur les autres composants, et il est très facile d'ajouter ou de supprimer un composant (il n'y a aucune conséquence pour les autres composants). Cet article identifie les variations au style événementiel introduit par différentes implantations et met en avant leurs avantages et leurs inconvénients.

Il existe deux approches différentes pour arriver à implanter un protocole suffisament performant pour des réseaux haut débit. La première est l'optimisation manuelle du code (prédiction de branches, l'inline de fonctions, etc). La seconde est la configuration du protocole, c'est-à-dire l'implantation du protocole selon des paramètres dépendant de l'application, du matériel ou de la technologie du réseau sous-jacent. Il est intéressant de remarquer que les performances d'un protocole obtenu à partir d'une configuration peut être amélioré par les techniques manuelles (décrites auparavant), mais il est inutile de le faire du fait d'une variété importante des configurations possibles (multiplication du temps et de l'effort fourni). Il est donc intéressant de pouvoir automatiser l'application des optimisations sur le code obtenue par configuration du protocole.

Un compilateur de protocole prend en entré une spécification abstraite et génére une implantation de celui-ci. Généralement le code ainsi produit est inefficace en terme de vitesse et de taille. Cet article présente la combinaison de deux techniques permettant de générer du code efficace. La première est la génération d'un automate unique au lieu de plusieurs automates indépendants, et la seconde applique des techniques d'optimisation sur cet automate (plus exactement sur les différentes branches le constituant).

Bibliographie (TEST)
Actes de conférences internationales avec comité de lecture
[1] A. Adya and J. Howell and M. Theimer and W. J. Bolosky and J. R. Douceur. Cooperative Task Management without Manual Stack Management or, Event-Driven is Not the Opposite of Threaded Programming. In Proceedings of the 2002 USENIX Annual Technical Conference, pages 289 -- 302, Monterey, California, USA, June 2002. USENIX, The Advanced Computing Systems Association, USA.
[1] A. Campi and E. Martinez and P. San Pietro. Experiences with a Formal Method for Design and Automatic Checking of User Interfaces. In IUI/CADUI'2004 Workshop on Making Model-Based UI Design Practical: Usable and Open Methods and Tools, Island of Madeira, Portugal, January 2004. ACM Press, New York, USA.
[1] A. Carzaniga and E. Di Nitto and D. S. Rosenblum and A. L. Wolf. Issues in Supporting Event-Based Architectural Styles. In Proceedings of the Third International Software Architecture Workshop, pages 17 -- 20, Orlando, Florida, USA, November 1998. ACM Press, New York, USA.

De nombreux styles architecturaux ont été formalisés afin de répondre à des contraintes de stabilité et de coût de développement d'applications (notamment les applications réseaux). Certains définissent un ensemble de règles permettant de composer un système à partir de composants et de connecteurs. L'un des styles les plus courants pour des applications distribuées à monté en charge importante est l'approche dîte événementielle. Dans cette approche, les composants vont communiquer en publiant ou en réceptionnant de façon asynchrone des notifications d'événements. Une notification étant propagée à l'ensemble des composants déclarés intéressé par celle-ci. Cette approche est très intéressante car un composant peut opérer dans le système sans avoir de connaissance sur les autres composants, et il est très facile d'ajouter ou de supprimer un composant (il n'y a aucune conséquence pour les autres composants). Cet article identifie les variations au style événementiel introduit par différentes implantations et met en avant leurs avantages et leurs inconvénients.

[1] C. Castelluccia and P. Hoschka. A Compiler-Based Approach to Protocol Optimization. In Third IEEE Workshop on the Architecture and Implementation of High Performance Communication Subsystems, pages 73 -- 78, Mystic, Connecticut, USA, August 1995. IEEE Press, New Jersey, USA.

Il existe deux approches différentes pour arriver à implanter un protocole suffisament performant pour des réseaux haut débit. La première est l'optimisation manuelle du code (prédiction de branches, l'inline de fonctions, etc). La seconde est la configuration du protocole, c'est-à-dire l'implantation du protocole selon des paramètres dépendant de l'application, du matériel ou de la technologie du réseau sous-jacent. Il est intéressant de remarquer que les performances d'un protocole obtenu à partir d'une configuration peut être amélioré par les techniques manuelles (décrites auparavant), mais il est inutile de le faire du fait d'une variété importante des configurations possibles (multiplication du temps et de l'effort fourni). Il est donc intéressant de pouvoir automatiser l'application des optimisations sur le code obtenue par configuration du protocole.

[1] C. Castelluccia and W. Dabbous and S. O'Malley. Generating Efficient Protocol Code from an Abstract Specification. In Conference proceedings on Applications, technologies, architectures, and protocols for computer communications, pages 60 -- 72, Palo Alto, California, USA, October 1996. ACM Press, New York, USA.

Un compilateur de protocole prend en entré une spécification abstraite et génére une implantation de celui-ci. Généralement le code ainsi produit est inefficace en terme de vitesse et de taille. Cet article présente la combinaison de deux techniques permettant de générer du code efficace. La première est la génération d'un automate unique au lieu de plusieurs automates indépendants, et la seconde applique des techniques d'optimisation sur cet automate (plus exactement sur les différentes branches le constituant).

[1] J. Berstel and S. C. Reghizzi and G. Roussel and P. San Pietro. A Scalable Formal Method for Design and Automatic Checking of User Interfaces. In Proceedings of the 23rd International Conference on Software Engineering, pages 453 -- 462, Toronto, Ontario, Canada, May 2001. IEEE Computer Society, Washington, DC, USA.

Cet article s'intéresse à la spécification formelle, à la conception et à l'implantation des composants comportementaux des interfaces graphiques utilisateurs. Les séquences plus ou moins complexes des événements et des actions constituant le dialogue entre l'utilisateur et l'interface sont spécifiés sous forme de grammaires attribuées et plus précisemment de grammaires de communications VEG (Visual Event Grammar). La spécification en VEG est complètement indépendante de l'apparence de l'interface ce qui permet de l'intégrer avec différentes apparences (Gtk, Swing, AWT, ...) mais aussi du langage de programmation de l'application (C, C++, Java, ...). De plus cette spécification peut être vérifié avec le vérificateur de modèle SPIN afin de tester sa consistance mais aussi sa correction et ainsi de détecter les interblocages ou les états qui sont inatteignables, mais aussi pour générer des tests afin de valider certains comportements. En utilisant des analyseurs syntaxiques, du code efficace est généré et des applications de tailles importantes (application médicale, librairie de construction de graphe, ...) peuvent être développées et ne souffrent pas de la comparaison avec des applications développées à la main. A l'aide de l'ensemble de ces outils, des gains importants sont réalisés concernant la détection des erreurs et leur correction (fourniture de contre exemples par SPIN), généricité vis à vis de l'apparence de l'application, etc.

[1] P. Barford and M. Crovella. A Performance Evaluation of Hyper Text Transfer Protocols. In Proceedings of the International Conference on Measurement and Modeling of Computer Systems, pages 188 -- 197, Atlanta, Georgia, USA, May 1999. ACM Press, New York, USA.
Actes de conférences nationales avec comité de lecture
[1] E. Bruneton and R. Lenglet and T. Coupaye. ASM : A Code Manipulation Tool for the Construction of Adaptable Systems. In Adaptable and Extensible Component Systems, Grenoble, France, November 2002. ACM Press, New York, USA.

Cet article présente un nouvel outil de manipulation de classes Java conçu pour la génération et la manipulation dynamiques du code. Ces deux techniques sont très utiles pour la réalisation de systèmes adaptables. Contrairement aux différentes approches existantes (SERP, BCEL, etc), ASM utilise une approche originale en exploitant le patron de conception Visiteur sans représenter explicitement l'arborescence visitée sous forme d'objets. Les performances obtenues grâce à cette technique sont bien supérieures à celles des outils existants. Néanmoins, l'idée principale d'ASM est d'optimiser au maximum les opérations les plus souvent effectuées, et de fait certaines opérations restent coûteuse en temps.

Actes de conférences internationales sans comité de lecture
Actes de conférences nationales sans comité de lecture