Juan Carlos Ruiz García Contribution à la validation des systèmes réflexifs tolérants aux fautes : stratégie de test de protocoles à métaobjets Juan Carlos Ruiz García Tolérance aux fautes et Sûreté de Fonctionnement informatique
Contexte Systèmes TaF à base de MOPs Technologie à objets Technologie réflexive Sûreté de fonctionnement Solutions à protocole à métaobjets (MOP) Tolérance aux Fautes (TaF) Systèmes TaF à base de MOPs
Contexte Systèmes TaF à base de MOPs Technologie à objets Technologie réflexive Sûreté de fonctionnement Solutions à protocole à métaobjets (MOP) Tolérance aux Fautes (TaF) Vérification Test Systèmes TaF à base de MOPs
Systèmes à base de MOPs « Un système réflexif a la capacité d’observer et contrôler son propre comportement, état et/ou structure »
Systèmes à base de MOPs « Un système réflexif a la capacité d’observer et contrôler son propre comportement, état et/ou structure » Métaniveau observation, interprétation, contrôle Niveau de base Comportement, structure et état du système
observation, interprétation, contrôle Systèmes à base de MOPs « Un système réflexif a la capacité d’observer et contrôler son propre comportement, état et/ou structure » Métaniveau observation, interprétation, contrôle Métamodèle (modèle du niveau de base) comportement état/structure Niveau de base Comportement, structure et état du système
Systèmes à base de MOPs « Un système réflexif a la capacité d’observer et contrôler son propre comportement, état et/ou structure » Métaobjets (entités du métaniveau) Mécanismes non-fonctionnels (Tolérance aux Fautes) Réification (observation comportement) Introspection (observation structure/état) Protocole à métaobjets (MOP) Intercession (contrôle comportement) (contrôle structure/état) Objets (entités du niveau de base) Mécanismes fonctionnels
Systèmes à base de MOPs - Notre cible de test - Métaobjets (entités du métaniveau) Mécanismes non-fonctionnels (Tolérance aux Fautes) Réification (observation comportement) Introspection (observation structure/état) Protocole à métaobjets (MOP) Intercession (contrôle comportement) (contrôle structure/état) Objets (entités du niveau de base) Mécanismes fonctionnels
Systèmes TaF à base de MOPs Exemple: Augmentation de la disponibilité d’un serveur par réplication passive métaobjet métaobjet 1. Invocation méthode service réplique primaire réplique de secours client Site 1 Site 2 Site 3
Systèmes TaF à base de MOPs Exemple: Augmentation de la disponibilité d’un serveur par réplication passive 2. Réification métaobjet métaobjet 1. Invocation méthode service réplique de secours client réplique primaire Site 1 Site 2 Site 3
Systèmes TaF à base de MOPs Exemple: Augmentation de la disponibilité d’un serveur par réplication passive 2. Réification métaobjet métaobjet 3. Intercession comportementale 4. Introspection 1. Invocation méthode service réplique de secours client réplique primaire Site 1 Site 2 Site 3
Systèmes TaF à base de MOPs Exemple: Augmentation de la disponibilité d’un serveur par réplication passive 5. État observé métacontrol 2. Réification métaobjet métaobjet 3. Intercession comportementale 6. Intercession structurelle 4. Introspection 1. Invocation méthode service réplique primaire réplique de secours client Site 1 Site 2 Site 3
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Test de conformité ! MOP spécification du MOP (cible du test) OK entrées de test MOP (cible du test) moniteur de test oracle vérifications de conformité sorties attendues sorties observées spécification du MOP ! OK
Test de conformité ! MOP spécification du MOP métaobjet entrées de test MOP (cible du test) moniteur de test objet oracle vérifications de conformité sorties attendues sorties observées spécification du MOP ! OK
État de l’art Vérification de MOPs : Modèle WRIGTH MOP connecteur entre objets Le MOP inclut le métaniveau Modèle -calcul MOP connecteur entre objets et métaobjets Le MOP doit respecter des propriétés qui peuvent (et doivent) être vérifiées indépendamment du niveau de base et du métaniveau considérés. Pas de travaux sur le test des MOPs ! MOP
État de l’art Vérification de MOPs : Modèle WRIGTH MOP connecteur entre objets Le MOP inclut le métaniveau Modèle -calcul MOP connecteur entre objets et métaobjets Le MOP doit respecter des propriétés qui peuvent (et doivent) être vérifiées indépendamment du niveau de base et du métaniveau considérés. Pas de travaux sur le test des MOPs ! MOP
Problématique Test de protocoles à métaobjets : Méthodes Outils Test OO Test de Protocoles Test Syst. réflexifs Quelles étapes de test à envisager ? Quels objectifs à couvrir dans chaque étape ? Quels environnements de test ?
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Plan État de l’art et problématique Stratégie de test Modèle de MOP Ordre de test Objectifs et Environnements de test
MOP pour la TaF MAUD [Agha 93], GARF [Garbinato 95], FRIENDS [Pérennou 97], [Killijian 00] Observation Métaobjet Contrôle Interception (Reification) création destruction interactions entre objets (entrantes et sortantes) Obtention de l’état (Introspection) Consultation du lien objet/métaobjet Activation (Intercession comportementale) création destruction interactions entre objets Mise à jour de l’état (Intercession structurelle) Modification du lien objet/métaobjet Objet
MOP pour la TaF MAUD [Agha 93], GARF [Garbinato 95], FRIENDS [Pérennou 97], [Killijian 00] Observation Métaobjet Contrôle Interception (Reification) création destruction interactions entre objets (entrantes et sortantes) Obtention de l’état (Introspection) Consultation du lien objet/métaobjet Activation (Intercession comportementale) création destruction interactions entre objets Mise à jour de l’état (Intercession structurelle) Modification du lien objet/métaobjet Objet
Systèmes TaF à base de MOPs Exemple: Augmentation de la disponibilité d’un serveur par réplication passive 5. État observé métacontrol 2. Réification métaobjet métaobjet 3. Intercession comportementale 6. Intercession structurelle 4. Introspection 1. Invocation méthode service client réplique primaire réplique de secours Site 1 Site 2 Site 3
intercession comportementale intercession structurelle Modèle de MOP réification métacontrol métaobjet métaobjet conteneur d’invocation conteneur d’état intercession comportementale introspection intercession structurelle service client comportement état/structure objet serveur
intercession comportementale intercession structurelle Modèle de MOP réification métacontrol métaobjet métaobjet conteneur d’invocation conteneur d’état intercession comportementale introspection intercession structurelle service client comportement état/structure objet serveur
intercession comportementale intercession structurelle Modèle de MOP réification métacontrol métaobjet métaobjet conteneur d’invocation Quel ordre de test ? conteneur d’état intercession comportementale introspection intercession structurelle service client comportement état/structure objet serveur
Ordre de Test But : « Réduction de l’effort global de test » Ordre de test systématique et incrémental Réutilisation de mécanismes réflexifs
Ordre de test - Étape 1 - métaobjet client objet serveur service réification métaobjet conteneur d’invocation service client objet serveur
intercession comportementale Ordre de test - Étape 2 - réification métaobjet conteneur d’invocation intercession comportementale service client comportement objet serveur
intercession comportementale Ordre de test - Étape 3 - réification métacontrol métaobjet métaobjet conteneur d’invocation conteneur d’état intercession comportementale introspection service client comportement état/structure objet serveur
intercession comportementale intercession structurelle Ordre de test - Étape 4 - réification métacontrol métaobjet métaobjet conteneur d’invocation conteneur d’état intercession comportementale introspection intercession structurelle service client comportement état/structure objet serveur
Ordre de Test 0. Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction
Ordre de Test Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction
Ordre de Test Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction Étape Spécifique Étapes Générales Étape Spécifique
Ordre de Test Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction Étape Spécifique Étapes Générales Étape Spécifique
Étape 1 Réification Objectifs de test serveur client métaobjet Objectifs de test Complétude – Toute interaction entre objets doit être systématiquement réifiée au métaniveau. Cohérence – Les informations réifiées doivent représenter correctement l’interaction réifiée.
InvocationExecutéeNonRéifiée Étape 1 Réification serveur client métaobjet Génération aléatoire des valeurs de sortie 3 4 < méthode réifiée, paramètres d’entrée réifiés, paramètres de sortie générées > métaobjet oracle exécution de méthode 1 2 méthode InvocationExecutéeNonRéifiée 5 6 7 Comparaison 8 < méthode invoquée, paramètres d’entrée, paramètres de sortie > retour réification objet serveur moniteur service réification
Étape 2 Intercession comp. métaobjet serveur client Objectifs de test Complétude – Toute méthode réifiée doit être activable à l’aide des mécanismes d’intercession comportementale. Cohérence – Les mécanismes d’intercession doivent déclencher l’exécution de la méthode demandée. Encapsulation – L’activité interne de l’objet ne doit pas être réifiée.
Étape 2 Intercession comp. métaobjet serveur client oracle métaobjet Comparaison < méthode invoquée, paramètres d’entrée, paramètres de sortie > retour 7 10 11 12 9 8 Les méthodes réifiées sont appliquées sur l’objet Les paramètres de sortie sont retournés au moniteur Les méthodes réifiées sont appliquées sur l’objet Les paramètres de sortie sont retournés au moniteur 1 méthode 3 2 réification 4 méthode 5 6 < Trace d’exécution > intercession moniteur service comportement serveur
Étape 3 Introspection Objectifs de test métaobjet serveur client Objectifs de test Complétude – L’ensemble de l’état de l’objet doit être observé. Cohérence – Les valeurs observées doivent être les valeurs courantes des attributs de l’objet.
Étape 3 Introspection 2 3 1 4 5 6 7 8 9 Métaobjet moniteur réification serveur client 2 3 1 4 5 état d’initialisation Métaobjet moniteur L’état «introspecté», est-il cohérent avec celui d’initialisation? 6 7 8 9 état d’introspection réification métacontrôle intercession comportementale introspection service comportement état/structure oracle objet serveur
Étape 4 Intercession struct. métaobjet serveur client Objectifs de test Complétude – L’ensemble de l’état de l’objet doit pouvoir être mis à jour depuis le métaobjet. Cohérence – Les valeurs de mise à jour utilisées doivent être celles fournies par le métaobjet.
Étape 4 Intercession struct. métaobjet serveur client 2 1 Initialisation de l’état de l’objet 3 4 état initialisation Métaobjet moniteur réification métacontrôle intercession comportementale introspection intercession structurelle service comportement état/structure oracle objet serveur
Étape 4 Intercession struct. métaobjet serveur client 2,6 1,5 Modification de l’état de l’objet 3,7 Métaobjet L’état résultant de l’intercession, est-il cohérent avec celui d’initialisation? 10 état intercession 11 9 moniteur réification métacontrôle état initialisation 8 intercession comportementale introspection intercession structurelle service comportement état/structure oracle objet serveur
Ordre de Test Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction Étape Spécifique Étapes Générales Étape Spécifique
Ordre de Test Création du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle Destruction du lien d’interaction Étape Spécifique Étapes Générales Étape Spécifique
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et prospectives MOP implementation and architecture Testing the MOP generation / instantiation / destruction
The FRIENDS MOP Testing the metaprogram A MOP for the development of fault-tolerant CORBA applications source code analysis and transformation Metaprogram (MOP implementation) MOP instance CORBA service implementation MOP programmer Open Compiler (compile-time reflection) Application programmer Testing the metaprogram CORBA service implementation CORBA metaobject CORBA object MOP instance instantiation CORBA-oriented FT-mechanism Fault tolerance programmer
CORBA service implementation A CORBA application CORBA service implementation server stub client Service interobject communications site 1 site 2
A FRIENDS CORBA application server stub client Service MetaStub MetaServer ReifiedStub metastub metaserver MOFactory ReifiedServer intermetaobject communications ORB OFactory site 1 site 2 MOP instance CORBA service implementation CORBA-oriented FT-mechanism Testing the creation and destruction of the O-MO interaction link
Test Order MOP generation (testing the metaprogram) MOP instantiation (O-MO link creation) Reification Behavioral intercession Introspection Structural intercession MOP destruction (O-MO link destruction) Specific Step Specific Step
Test Order MOP generation (testing the metaprogram) MOP instantiation (O-MO link creation) Reification Behavioral intercession Introspection Structural intercession MOP destruction (O-MO link destruction) MOP generation (testing the metaprogram) Specific Step Specific Step
Testing the metaprogram Metaprogram : set of code analysis and transformation rules Code filtering rules Error messages server code Open Compiler (OpenC++) non-reflective code stub code
Testing the metaprogram Metaprogram : set of code analysis and transformation rules Code filtering rules Data container generation rules Error messages server code CORBA Interface Repository Open Compiler (OpenC++) non-reflective code stub code
Testing the metaprogram Metaprogram : set of code analysis and transformation rules Code filtering rules Data container generation rules Reflective code generation rules Error messages server code CORBA Interface Repository Open Compiler (OpenC++) non-reflective code server code MOP stub code stub code MOP reflective code
Reflective code generation rules metaprogram behavioral reflection Code for reification & behavioral intercession structural reflection Code for saving & restoring object states objet-metaobjet link Code for handling the objet-metaobjet link classes with different method signatures classes with different types of attributes 2 3 1 classes with methods & attributes Open compiler code MOP 4 Oracle 5 Does the generated code conform to the code specified for the MOP?
Reflective code generation rules - Oracle verifications - metaprogram class a{ public: int foo(){ // foo’s body } private: int foo2() { //foo2’s body }; behavioral reflection Implemented using method wrapping class a{ public: int foo(){ //reification code } int Wrapped_foo(){ // foo’s body int Execute_fooBody(){ return Wrapped_foo() private: int foo2() { //foo2’s body }; Oracle Does the generated code conform to the code specified for the MOP?
Reflective code generation rules - Oracle verifications - metaprogram class a{ public: int foo(){ // foo’s body } private: int foo2() { //foo2’s body }; behavioral reflection Implemented using method wrapping class a{ public: int foo(){ //reification code } int Wrapped_foo(){ // foo’s body int Execute_fooBody(){ return Wrapped_foo() private: int foo2() { //foo2’s body }; Oracle Does the generated code conform to the code specified for the MOP?
Reflective code generation rules - Oracle verifications - metaprogram class a{ public: int foo(){ // foo’s body } private: int foo2() { //foo2’s body }; behavioral reflection Implemented using method wrapping class a{ public: int foo(){ //reification code } int Wrapped_foo(){ // foo’s body int Execute_fooBody(){ return Wrapped_foo() private: int foo2() { //foo2’s body }; Oracle Does the generated code conform to the code specified for the MOP?
Test Order MOP generation (testing the metaprogram) MOP instantiation (O-MO link creation) Reification Behavioral intercession Introspection Structural intercession MOP destruction (O-MO link destruction) Specific Step Specific Step
Test Order MOP generation (testing the metaprogram) MOP instantiation (O-MO link creation) Reification Behavioral intercession Introspection Structural intercession MOP destruction (O-MO link destruction) Specific Step MOP instantiation (O-MO link creation) Specific Step
MOP instantiation Test goals Unicity – Each object must be linked to one and only one metaobject. Interaction – Objects and metaobjects can only interact if their respective identifiers are correctly exchanged during the instantiation process.
MOP instantiation 6 7 8 3 4 5 1 2 oracle test driver MOFactory <object, metaobject> <object’, metaobject’> 3 4 5 metaobject oracle MOFactory 1 Service 2 object OFactory test driver
Plan État de l’art et problématique Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Vue fonctionnelle du banc de test outillage de génération de code classes d’entrée Test du métaprogramme Règles de filtrage de code Règles de génération des conteneurs Règles de génération des mécanismes réflexifs outillage d’analyse de code Création du lien d’interaction du MOP Test des mécanismes du MOP mise en œuvre des environnements de test Destruction du lien d’interaction Réification Intercession comportementale Introspection Intercession structurelle
référentiel d’interfaces Banc de Test stub squelette interface IDL implémentation du serveur compilateur IDL testeur référentiel d’interfaces CORBA implémentation réflexive d’un objet CORBA conteneurs d’invocation et d’état compilateur standard (C++) serveur réflexif mandataire réflexif Métaprogramme FRIENDS
Banc de Test Paramètres pour la génération d’implémentations d’objets CORBA générateur d’objets CORBA interface IDL testeur compilateur IDL implémentation du serveur outillage pour le test du métaprogramme stub squelette référentiel d’interfaces CORBA conteneurs d’invocation et d’état Métaprogramme FRIENDS oracle métaobjet implémentation réflexive d’un objet CORBA serveur réflexif moniteur de test objet compilateur standard (C++) mandataire réflexif environnements de test
Moniteur de test générique référentiel d’interfaces CORBA description de l’interface du serveur description de l’opération à invoquer Interface IDL du Moniteur interface Universal_Driver{ RetValue Invoke( in string serviceName, in string operationName, inout ListOfArguments arguments) raises (DriverException); }; générateur de valeurs aléatoires valeur type argument 1 argument 2 argument n référence de l’objet description de l’opération valeur de retour Universal_Driver Création dynamique de requêtes CORBA (interface DII) Interopérabilité langage-plate-forme Composant réutilisable dans d’autres contextes service de noms nom du service référence CORBA
Cas de test (1) Réification et Intercession comportementale Types Simples: long, short, … chaînes de caractères, références CORBA classes Type complexes: structures, tableaux séquences Interface vide Méthode sans arguments Pour chaque type considéré ( T ) : Variation du mode de passage Variation du nombre d’arguments Variation du niveau d’encapsulation Héritage de méthodes Cas précédant avec plusieurs types en même temps Cas de Test
Cas de test (1) Réification et Intercession comportementale Types Simples: long, short, … chaînes de caractères, références CORBA classes Type complexes: structures, tableaux séquences Interface vide Méthode sans arguments Pour chaque type considéré ( T ) : Variation du mode de passage Variation du nombre d’arguments Variation du niveau d’encapsulation Héritage de méthodes Cas précédant avec plusieurs types en même temps Cas de Test Variation du mode de passage interface shortParameters{ short shortReturn(); void shortIn(in short arg); void shortOut(out short arg); void shortInOut(inout short arg); };
Cas de test (2) Introspection et Intercession structurelle Cas de Test Types Simples: long, short, … chaînes de caractères, références CORBA classes Type complexes: structures, tableaux séquences Interface vide Pour chaque type considéré ( T ) : Un attribut dans une classe Plusieurs attributs par classe Héritage Association / Agrégation Cas précédant avec plusieurs types en même temps Cas de Test
Cas de test (2) Introspection et Intercession structurelle Cas de Test Types Simples: long, short, … chaînes de caractères, références CORBA classes Type complexes: structures, tableaux séquences Interface vide Pour chaque type considéré ( T ) : Un attribut dans une classe Plusieurs attributs par classe Héritage Association / Agrégation Cas précédant avec plusieurs types en même temps Cas de Test Héritage interface shortAtt{ attribute short shortAtt1; }; interface longAtt : shortAtt{ attribute long longAtt1;
Génération des cas de test Méthode de génération aléatoire probabiliste : test statistique 532 serveurs différents 189 interfaces pour le test des mécanismes de réification et d’intercession comportementale 197 interfaces pour le test des mécanismes d’introspection et d’intercession structurelle 156 interfaces contenant à la fois des méthodes et des attributs 24 méthodes en moyenne par interface Plus d’un million d’invocations de méthode effectuées par le moniteur de test lors des expériences
Exemples de fautes identifiées Étape Problème test incrémental Confusion entre méthode publique C++ et méthode IDL Métaprogramme Plusieurs métaobjets par objet Création du lien Réification identique de méthodes différentes Réification Violation du besoin d’encapsulation Intercession comp. Absence d’initialisation des attributs Introspection Un système à objets est un système Formatage incorrect du conteneur d’état Intercession struct. Le métaobjet survit à l’objet Destruction du lien spécification conception implémentation
Exemples de fautes identifiées Étape Problème test incrémental Confusion entre méthode publique C++ et méthode IDL Métaprogramme Plusieurs métaobjets par objet Création du lien Réification identique de méthodes différentes Réification Violation du besoin d’encapsulation Intercession comp. Absence d’initialisation des attributs Introspection Un système à objets est un système Formatage incorrect du conteneur d’état Intercession struct. Le métaobjet survit à l’objet Destruction du lien Problèmes facilement résolus car identifiés pendant le développement du MOP
Plan Stratégie de test Case study : the FRIENDS MOP Expériences et résultats Bilan, conclusions et perspectives
Bilan Analyse des mécanismes réflexifs des MOPs en vue du test Stratégie de test générale et incrémentale (Ordre, objectifs et environnements de test) Faisabilité et efficacité de l’approche (Le MOP de FRIENDS comme cas d’étude) Développement d’un banc de test réutilisable
Conclusions Intégration du test dans le développement des MOPs Complémentarité de points de vue durant la phase d’analyse (travail préparatoire au test) Conception en vue de la testabilité Intérêt de la séparation de mécanismes vis-à-vis du test : Les MOPs peuvent (et doivent) être testés en isolation Test d’intégration de mécanismes plus simple
Autres cibles potentielles Réification Intercession comportementale Introspection Intercession structurelle Intercepteurs de CORBA Supervision et gestion de systèmes à objet : (Systèmes multimédia, QoS) Sérialisation d’objets (Java, FT-CORBA) Perception des environnements d’exécution (Systèmes conscients de leur contexte)
Perspectives Définition de critères de test fonctionnels et structurels pour le choix des entrées de test Application de la stratégie de test à d’autres systèmes proposant des mécanismes réflexifs similaires Mécanismes d’interception de CORBA et de sérialisation des applications suivant la norme FT-CORBA Prise en compte d’autres types de mécanismes réflexifs ( propres aux systèmes mobiles, multimédia … ) Test de métaprogramme Vers le test de systèmes programmés par aspects ?
Juan Carlos Ruiz García Contribution à la validation des systèmes réflexifs tolérants aux fautes : stratégie de test de protocoles à métaobjets Juan Carlos Ruiz García Tolérance aux fautes et Sûreté de Fonctionnement informatique