Le gestionnaire de qualité d'Adélia est extensible par le biais de plugins fournis par l'utilisateur. Un plugin d'extension du gestionnaire de qualité est composé d'un fichier de description décrivant les métriques et les règles de qualité fournies par le plugin, ainsi qu'optionnellement d'un programme d'extension appelé par le programme d'analyse pour calculer les métriques et générer les violations de règles.
Remarque : Le fait de fournir un programme d'extension est optionnel. Un plugin composé uniquement d'un jeu de règles de type "vérification d'une expression régulière" n'a pas besoin de fournir de DLL d'extension.
Les éléments de définition d'un plugin sont les suivants :
Fichier de description du plugin
Le fichier de description du plugin est un fichier XML contenant la liste des métriques et des règles implémentées, ainsi que la référence au programme d'extension. Ce fichier doit respecter un schéma XSD.
Un plugin se compose des éléments suivants (obligatoires sauf si indiqué a contrario) :
- Nom du fournisseur du plugin |
ex : Hardis. |
- Nom du plugin lui-même |
ex : Métrique standard Adélia. |
- Identifiant interne du plugin |
ex : com.hardis.adelia |
- Description du plugin |
Optionnel. |
- DLL d'extension |
Optionnel. |
- Liste des métriques |
Optionnel, implique un programme d'extension. |
- Liste des règles de qualité |
Optionnel, implique un programme d'extension si les règles ne sont pas de type "vérification d'une expression régulière". |
La description d'une métrique contient les informations suivantes :
- Nom de la métrique |
ex : Nombre de lignes. |
- Identifiant interne de la métrique |
ex : nblines. |
- Type de données |
ex : integer. Valeurs possibles : boolean, integer, Decimal, percentage et string |
- Domaine |
Optionnel pour la classification SONAR. |
La description d'une règle contient les informations suivantes :
- Nom de la règle |
ex : Données tronquées. |
- Identifiant interne de la règle |
ex : truncation. |
- Description de la règle |
Optionnel. |
- Type de la règle |
Optionnel. 0 = règle standard (par défaut), 1 = règle de vérification d'une expression régulière. |
- Gravité d'une violation de la règle |
Optionnel. Valeur entre 1 (information) et 5 (bloquante), par défaut 3 (majeure). |
- Liste des paramètres d'une règle |
Optionnel. |
- Domaine |
Optionnel pour la classification SONAR. |
La description d'un paramètre d'une règle de qualité contient les informations suivantes :
- Identifiant interne du paramètre.
- Description du paramètre.
- Valeur par défaut du paramètre.
Les limites suivantes s'appliquent :
Longueur d'un identifiant interne |
128 |
|
Longueur maximum d'un nom |
128 |
|
Longueur maximum d'une désignation |
512 |
|
Longueur maximum d'une valeur de paramètre |
1024 |
|
Longueur maximum d'une valeur de métrique |
96 |
Contrainte SONAR |
Dans le cadre de l'intégration à SONAR, les règles de nommage supplémentaires suivantes (liées à la manière dont le plugin SONAR Adélia génère des identifiants uniques pour les règles et les métriques dans le référentiel SONAR) s'appliquent :
- Les identifiants internes doivent respecter la syntaxe des noms de package Java (xxx.yyy.zzz).
- La longueur de l'identifiant interne d'une métrique + la longueur de l'identifiant interne du plugin ne doit pas dépasser 62 caractères.
- La longueur de l'identifiant interne d'une règle + la longueur de l'identifiant interne du plugin ne doit pas dépasser 198 caractères.
Le fichier XML prend la forme suivante (Cliquez ici pour la définition complète du schéma) :
<plugin id="com.hardis.example"> <provider>Hardis</provider> <name>Plugin exemple</name> <dll version="1">PLUGIN.DLL</dll> <metrics> <metric id="nblines" type="integer"> <name>Nombre de lignes de source</name> <description>Nombre de lignes de texte dans un fichier source</description> </metric> </metrics> <rules> <rule id="complexity" severity="2"> <name>Bloc trop complexe</name> <description>Le nombre de lignes de code dans un bloc de source est trop élevé</description> <parameters> <parameter id="nbmax_lines"> <name>Nombre de lignes</name> <description>Le nombre de lignes à ne pas dépasser...</description> <value>200</value> </parameter> </parameters> </rule> </rules> </plugin> |
Les noeuds
Nœud plugin
Ce nœud définit le plugin. Il s'agit du nœud principal du fichier.
Attributs
Nom |
Oblig. |
Valeurs |
Description |
id |
Oui |
Chaîne |
Identifiant interne du plugin. |
version |
Non |
Entier |
Numéro de version (0 par défaut). |
Données
- n/a -
Nœuds fils
provider |
Nom du fournisseur. |
name |
Nom du plugin. |
dll |
Nom de la DLL d'extension (optionnel). |
metrics |
Liste des métriques (optionnel). |
rules |
Liste des règles (optionnel). |
Nœud provider
Attributs
- n/a -
Données
Nom du fournisseur du plugin.
Nœuds fils
- n/a -
Nœud name
Attributs
- n/a -
Données
Nom d'un élément (plugin, métrique, règle).
Nœuds fils
- n/a -
Nœud dll
Attributs
Nom |
Oblig. |
Valeurs |
Description |
version |
Non |
Entier |
Numéro de version de la DLL (0 par défaut). |
Données
Nom d'une DLL d'extension.
Nœuds fils
- n/a -
Nœud metrics
Attributs
- n/a -
Données
- n/a -
Nœuds fils
metric* |
Liste de métriques. |
Nœud metric
Ce nœud définit une métrique.
Attributs
Nom |
Oblig. |
Valeurs |
Description |
id |
Oui |
Chaîne |
Identifiant interne de la métrique. |
type |
Oui |
Boolean Integer Decimal Percentage String |
Type de données de la métrique. |
domain |
Non |
Chaîne |
Nom du domaine SONAR pour la classification de la métrique (General par défaut) |
Données
- n/a -
Nœuds fils
name |
Nom de la métrique. |
description |
Description de la métrique (optionnel). |
Nœud rules
Attributs
- n/a -
Données
- n/a -
Nœuds fils
rule* |
Liste de règles. |
Nœud rule
Ce noeud définit une règle.
Attributs
Nom |
Oblig. |
Valeurs |
Description |
id |
Oui |
Chaîne |
Identifiant interne de la règle. |
severity |
Non |
1-5 |
Gravité d'une violation de la règle : de Information (1) à Bloquante (5). Majeure (3) par défaut. |
domain |
Non |
Chaîne |
Nom du domaine SONAR pour la classification de la règle (General par défaut). |
type |
Non |
0/1 |
Type de la règle : Normale (0) par défaut ou Vérification d'expression régulière (1). |
programTypes |
Non |
Chaîne |
Liste de types abrégés de programmes (AD_I, AD_B...) auxquels la règle s'applique, séparés par des ';'. Si non renseigné, la règle s'applique à tous les programmes. |
Données
- n/a -
Nœuds fils
name |
Nom de la règle. |
description |
Description de la règle (optionnel). |
parameters |
Liste des paramètres de la règles (optionnel). |
Nœud parameters
Attributs
- n/a -
Données
- n/a -
Nœuds fils
parameter* |
Liste de paramètres. |
Nœud parameter
Ce noeud définit un paramètre.
Attributs
Nom |
Oblig. |
Valeurs |
Description |
id |
Oui |
Chaîne |
Identifiant interne du paramètre (unique pour la règle). |
Données
- n/a -
Nœuds fils
name |
Nom du paramètre. |
description |
Description du paramètre (optionnel). |
value |
Valeur du paramètre. |
Nœud value
Attributs
- n/a -
Données
Valeur d'un paramètre.
Nœuds fils
- n/a -
Vérification d'expression régulière
Le gestionnaire de qualité fournit un type de règle spécial, dont une violation est signalée lorsqu'une ligne de source vérifie une expression régulière. La vérification de ce type de règle ne nécessite pas de fournir un programme d'extension.
Une règle de type "vérification d'une expression régulière" prend la forme suivante :
<rule id="sql_code_non_trouve" type="1" severity="2"> <name>Boucle *SQLCODE dangereuse</name> <description>Il ne faut jamais tester "non trouvé" comme sortie de boucle.</description> <parameters> <parameter id="regexpr"> <value><![CDATA[^\s*TANT_QUE\s+\*SQLCODE\s*\<\>\s*\*NON_TROUVE]]></value> </parameter> <parameter id="casesensitive"> <value>1</value> </parameter> <parameter id="clientserver"> <!-- client / server / both (default) --> <value>both</value> </parameter> </parameters> </rule> |
Les paramètres de la règle sont les suivants :
regexpr |
Obligatoire |
Chaîne |
Expression régulière. Une violation est déclenchée si l'expression est vérifiée. |
casesensitive |
Optionnel |
0 ou 1 |
Sensibilité à la casse (0 par défaut – insensible à la casse). |
clientserver |
Optionnel |
Client, server ou both |
Indique si la règle s'applique en partie client, serveur, ou les deux (par défaut). |