Exemple : Création de vérifications personnalisées sur les liens entre objets

Nous allons maintenant créer trois vérifications personnalisées sur les liens entre objets qui vont connecter les différents objets Robustness Analysis. Ces vérifications, qui sont écrites en VB, n'empêchent pas les utilisateurs de créer des diagrammes non-pris en charge par la méthodologie Robustness Analysis, mais définissent des règles dont l'application sera contrôlée à l'aide de la fonctionnalité de vérification de modèles.

  1. Pointez sur la catégorie Profile, cliquez le bouton droit de la souris, puis sélectionnez Ajouter des métaclasses pour afficher la boîte de dialogue Sélection de métaclasses, sélectionnez InstanceLink sur l'onglet PdOOM et cliquez sur OK pour l'ajouter dans le fichier d'extension.
  2. Pointez sur la catégorie InstanceLink, cliquez le bouton droit de la souris, puis sélectionnez Nouveau > Vérification personnalisée pour créer une vérification sous la métaclasse.
  3. Saisissez les valeurs suivantes pour les propriétés sur l'onglet Général :

    Champ

    Valeur

    Nom

    Collaboration d'acteur incorrecte

    Commentaire

    Cette vérification contrôle si des acteurs sont liés aux objets Boundary. Robustness Analysis ne permet pas de lier des acteurs aux objets Control ou Entity.

    Message d'aide

    Cette vérification s'assure que les acteurs ne communiquent qu'avec les objets Boundary.

    Message de résultats

    Les liens entre objets suivants sont incorrects :

    Sévérité par défaut

    Erreur

    Exécuter la vérification par défaut

    [sélectionnée]
  4. Cliquez sur l'onglet Script de vérification et saisissez le script suivant dans la zone de texte :
    Function %Check%(link)
       ' La valeur par défaut est  True
       %Check% = True
       
       ' L'objet doit être un lien entre objets
       If link is Nothing then
          Exit Function
       End if
       If not link.IsKindOf(PdOOM.cls_InstanceLink) then
          Exit Function
       End If   
       
       ' Extrait les extrémités du lien 
       Dim src, dst
       Set src = link.ObjectA
       Set dst = link.ObjectB
       
       ' La source est un acteur
       ' Call CompareObjectKind() global function defined in Global Script pane
       If CompareObjectKind(src, PdOOM.Cls_Actor) Then 
          ' Vérifie si la destination est un objet UML avec le stéréotype "Boundary"
          If not CompareStereotype(dst, PdOOM.Cls_UMLObject, "Boundary") Then
             %Check% = False
          End If      
       ElseIf CompareObjectKind(dst, PdOOM.Cls_Actor) Then 
          ' Vérifie si la source est un objet UML avec le stéréotype "Boundary"
          If not CompareStereotype(src, PdOOM.Cls_UMLObject, "Boundary") Then
             %Check% = False
          End If
       End If
    End Function
    Remarque : Pour plus d'informations sur VBS, voir Pilotage de PowerAMC à l'aide de scripts.
  5. Cliquez sur l'onglet Script global (dans lequel vous stockez les fonctions et les attributs statiques qui peuvent être réutilisés dans les différentes fonctions) et saisissez le script suivant dans la zone de texte :
    ' Cette fonction globale vérifie si un objet a un type particulier
    ' ou s'il est un raccourci d'un type particulier
    Function CompareObjectKind(Obj, Kind)
       ' La valeur par défaut est false
       CompareObjectKind = False
       
       ' Vérifie l'objet
       If Obj is Nothing Then
          Exit Function
       End If
       ' Cas particulier du raccourci, recherche de son objet cible
       If Obj.IsShortcut() Then
          CompareObjectKind = CompareObjectKind(Obj.TargetObject, Kind)
          Exit Function
       End If   
       If Obj.IsKindOf(Kind) Then
          ' Cas particulier du raccourci, recherche de son objet cible
          CompareObjectKind = True
       End If
    End Function
    
    ' Cette fonction globale vérifie si un objet a un type particulier
    ' et compare sa valeur de stéréotype
    Function CompareStereotype(Obj, Kind, Value)
       ' La valeur par défaut est false
       CompareStereotype = False
       
       ' La valeur par défaut est false
       If Obj is Nothing then
          Exit Function
       End If   
       if (not Obj.IsShortcut() and not Obj.HasAttribute("Stereotype")) Then
          Exit Function
       End If
       ' Cas particulier du raccourci, recherche de son objet cible
       If Obj.IsShortcut() Then
          CompareStereotype = CompareStereotype(Obj.TargetObject, Kind, Value)
          Exit Function
       End If  
       If Obj.IsKindOf(Kind) Then
          ' Cas particulier du raccourci, recherche de son objet cible
          If Obj.Stereotype = Value Then
             ' Cas particulier du raccourci, recherche de son objet cible
             CompareStereotype = True
          End If   
       End If
    End Function
    
    ' Cette fonction globale copie l'attribut standard
    ' de la source vers la cible
    Function Copy (src, trgt)
       trgt.name = src.name
       trgt.code  = src.code
       trgt.comment = src.comment
       trgt.description = src.description
       trgt.annotation = src.annotation
       Dim b, d
       for each b in src.AttachedRules
          trgt.AttachedRules.insert -1,b
       next
       for each d in src.RelatedDiagrams
          trgt.RelatedDiagrams.insert -1,d
       next
       output " "
       output trgt.Classname & " " & trgt.name & " a été créé."
       output " "
    End Function
  6. Répétez ces étapes pour créer une seconde vérification en saisissant les valeurs suivantes :

    Champ

    Valeur

    Nom

    Lien entre objets Boundary incorrect

    Message d'aide

    Cette vérification s'assure qu'un lien entre objets n'est pas défini entre deux objets Boundary.

    Message de résultats

    Les liens entre objets Boundary suivants sont incorrects :

    Sévérité par défaut

    Erreur

    Exécuter la vérification par défaut

    [sélectionnée]

    Script de vérification

    Function %Check%(link)
       ' La valeur par défaut est True
       %Check% = True
       
       ' L'objet doit être un lien entre objets
       If link is Nothing then
          Exit Function
       End if  
       If not link.IsKindOf(PdOOM.cls_InstanceLink) then
          Exit Function
       End If   
     
       ' Extrait les extrémités du lien
       Dim src, dst
       Set src = link.ObjectA
       Set dst = link.ObjectB
       
       ' Erreur si les deux objets sont de type 'Boundary'
       If CompareStereotype(src, PdOOM.Cls_UMLObject, "Boundary") Then
          If CompareStereotype(dst, PdOOM.Cls_UMLObject, "Boundary") Then
             %Check% = False
          End If
       End If
    End Function
  7. Répétez ces étapes pour créer une troisième vérification en saisissant les valeurs suivantes :

    Champ

    Value

    Nom

    Accès incorrect à un objet Entité

    Message d'aide

    Cette vérification s'assure que que seuls des objets Control accèdent aux objets Entité.

    Message de résultats

    Les liens suivants sont incorrects :

    Sévérité par défaut

    Erreur

    Exécuter la vérification par défaut

    [sélectionnée]

    Script de vérification

    Function %Check%(link)
       ' La valeur par défaut est True
       %Check% = True
       
       ' L'objet doit être un lien entre objets
       If link is Nothing then
          Exit Function
       End if   
       If not link.IsKindOf(PdOOM.cls_InstanceLink) then
          Exit Function
       End If   
    
       ' Extrait les extrémités du lien
       Dim src, dst
       Set src = link.ObjectA
       Set dst = link.ObjectB
       
       ' La source est un objet UML avec un stéréotype "Entity" ?
       ' Appelle la fonction globale CompareStereotype() définie dans le volet Script global
       If CompareStereotype(src, PdOOM.Cls_UMLObject, "Entity") Then 
          ' Vérifie si la destination est un objet UML avec un stéréotype "Control"
          If not CompareStereotype(dst, PdOOM.Cls_UMLObject, "Control") Then
             %Check% = False
          End If
       ElseIf CompareStereotype(dst, PdOOM.Cls_UMLObject, "Entity") Then 
          ' Vérifie si la source est un objet UML avec un stéréotype "Control"
          If not CompareStereotype(src, PdOOM.Cls_UMLObject, "Control") Then
             %Check% = False
          End If
       End If
    End Function


  8. Cliquez sur Appliquer pour sauvegarder vos modifications avant de poursuivre.
    Pour obtenir des informations détaillées sur la création de vérifications personnalisées Vérifications personnalisées (Profile).