Rational Programming
Patterns propose des règles de contrôle qualité dans l'outil
Software Analyzer qui permettent d'effectuer les contrôles les
plus courants sur les fichiers de design et les fichiers COBOL générés.
Mise en oeuvre
Avant de lancer
une analyse, vous devez définir une configuration d'analyse au niveau
du Software Analyzer, et préciser les éléments suivants :
- La portée (analyser tout l'espace de travail, un ensemble de projets
ou limiter l'analyse à un ou plusieurs projets),
- Les règles à prendre en compte dans l'analyse. Pour chaque règle
sélectionnée, vous pouvez préciser le niveau de gravité (recommandation,
avertissement ou grave).
Pour lancer l'analyse, faites un clic droit
sur un fichier ou projet. Sélectionnez Software Analyzer puis
la configuration créée au préalable. La vue Résultats Software
Analyzer affiche alors la liste des règles non respectées.
Il y a une arborescence pour chaque catégorie de règles. Le premier
niveau représente la catégorie, le second niveau représente la règle
et le dernier niveau affiche les instances en erreur. Pour voir le
détail d'une violation, faites un clic droit sur le fichier concerné
et sélectionnez Visualiser le résultat. Le
fichier généré s'ouvre dans l'éditeur à l'endroit de la violation
et la ligne en erreur est en surbrillance.
Après
avoir corrigé la ou les violations et sauvegardé, vous pouvez de nouveau
lancer l'analyse du fichier pour vérifier le respect des règles.
Analyse des entités de design
Les règles Rational Programming Patterns
relatives à l'analyse des entités de design sont rassemblées sous
Analyse
des entités de design pour RPP MAF.
- La catégorie Entité Segment comprend les
règles suivantes :
- Un Segment ne doit pas appeler deux fois la même Rubrique
- Un Segment ne doit pas utiliser de Rubrique non définie
- La catégorie Entités Générables comprend
la règle suivante :
- Une entité générable doit avoir ses noms et noms externes équivalents
- La catégorie Toutes Entités regroupe les
règles suivantes :
- Toute entité de design doit avoir un libellé
- Toute entité de design doit porter au moins un mot-clé
Révision du code spécifique COBOL
Certaines
règles s'appliquent uniquement au code spécifique inséré par l'utilisateur
dans un fichier COBOL généré.
Les règles Rational Programming Patterns sont rassemblées
sous Révision du code COBOL RPP. Elles sont
toutes préfixées par RPP /.
Les règles de Conventions
de dénomination, de Performance et
de Structures du programme sont équivalentes
aux règles qui existent dans Rational Developer
for System z, mais restreignent
le contrôle aux portions de code spécifique. Les règles des catégories Programmation
Pilotée par Pattern et Erreur d'analyse sont
spécifiques à Rational Programming
Patterns et n'ont pas leur équivalent dans Rational Developer for System z.
- La catégorie RPP / Conventions de dénomination contient
une règle qui identifie les problèmes liés aux conventions d’attribution
de nom :
- RPP / Utiliser un nom de programme qui correspond au nom du fichier
source
- Utilisez cette règle pour marquer toute division PROGRAM-ID dont
le nom de programme est différent de son nom de fichier source. L’extension
de fichier, le cas échéant, du fichier source est exclue de la comparaison
- La catégorie RPP / Erreur d'analyse contient
deux règles qui identifient les problèmes liés aux erreurs de syntaxe
dans les fichiers COBOL générés :
- RPP / Le source COBOL doit être analysable par l'analyseur syntaxique
- Utilisez cette règle pour marquer tout fichier COBOL dont le code
ne peut pas être analysé par l'analyseur syntaxique à cause d'erreurs
de syntaxe. Par défaut, cette règle lève une erreur sévère.
- RPP / Le source COBOL ne doit pas avoir d'erreurs syntaxiques
- Utilisez cette règle pour marquer tout fichier COBOL dont le code
contient des erreurs de syntaxe. Par défaut, cette règle déclenche
uniquement un avertissement.
- La catégorie RPP / Performance englobe
les règles qui identifient les problèmes liés aux performances :
- RPP / Eviter d'utiliser des indices pour accéder à une table.
Utiliser des index.
- Utilisez cette règle pour marquer un élément de données utilisé
comme indice pour accéder à un élément de table et qui n’est pas spécifié
dans une expression INDEXED BY dans la clause OCCURS qui
définit la table. Cette règle ne marque pas les indices qui sont des
littéraux.
- RPP / Eviter l’ordre EXEC CICS LINK
- Utilisez cette règle pour vérifier qu'il n'existe pas d'ordre LINK utilisé
dans un Programme ou un Ecran. La règle ne s’applique pas aux Macros.
- RPP / Eviter les expressions OCCURS DEPENDING ON
- Utilisez cette règle pour marque les expressions OCCURS
DEPENDING ON.
- RPP / Eviter les instructions INITIALIZE. Utiliser des instructions
MOVE élémentaires ou des clauses VALUE.
- Utilisez cette règle pour marquer les instructions INITIALIZE.
- RPP / EXEC SQL : Eviter SELECT *
- Utilisez cette règle pour marquer les instructions EXEC
SQL qui contiennent une instruction SELECT *.
- RPP / EXEC SQL : Utiliser une clause ORDER BY pour déclarer un
curseur
- Utilisez cette règle pour marquer les instructions EXEC
SQL qui déclarent un curseur sans spécifier une clause ORDER
BY dans l’instruction SELECT.
- RPP / Spécifier 0 RECORDS pour les clauses BLOCK CONTAINS dans
des entrées de description de fichier
- Utilisez cette règle pour marquer les clauses BLOCK CONTAINS qui
ne spécifient pas 0 RECORDS.
- RPP / Utiliser des indices binaires
- Utilisez cette règle pour marquer un élément de données utilisé
comme indice pour accéder à un élément de table et qui n’est pas déclaré
dans une expression avec l’utilisation de COMP, COMPUTATIONAL ou BINARY.
Cette règle ne marque pas les indices qui sont des littéraux.
- RPP / Utiliser une instruction EVALUATE plutôt qu'un IF imbriqué
- Utilisez cette règle pour marquer des instructions IF.
Si l’imbrication dépasse de plus d’un niveau, la règle marque l’instruction IF imbriquée
la plus vers l’extérieur.
- RPP / Utiliser un nombre impair de chiffres dans une définition
de données COMP-3 ou PACKED-DECIMAL
- Utilisez cette règle pour marquer une définition de données qui
est déclarée comme étant de type COMP-3 ou PACKED-DECMAL et
ne contient pas un nombre impair de chiffres.
- La catégorie RPP / Programmation Pilotée par Pattern regroupe
les règles qui identifient des problèmes liés aux particularités du
produit :
- RPP / L’instruction CALL doit être en fonction F97 ou F99 hors
Macro
- Utilisez cette règle pour vérifier que l'instruction CALL est
utilisée uniquement en F97 et F99.
La règle ne s’applique pas aux Macros.
- RPP / Eviter l’instruction SYNCPOINT dans les entités Ecran
- Utilisez cette règle pour vérifier que l'instruction SYNCPOINT n’est
pas utilisée dans les Ecrans.
- RPP / Les fonctions utilisateur doivent avoir un commentaire
- Utilisez cette règle pour vérifier que toute fonction écrite en
spécifique est précédée d'une ligne de commentaire non vide. Il doit
y avoir au moins 1 caractère de la colonne 8 à la colonne 72.
- RPP / Ne jamais conserver un COBOL non synchronisé avec ses modèles
dans son espace local
- Utilisez cette règle pour vérifier que les fichiers COBOL sont
synchronisés avec tous les fichiers design ayant participé à leur
génération en local.
- RPP / Ne jamais écraser un accès physique à un Segment généré
- Utilisez cette règle pour vérifier qu'il n'existe pas de remplacements
de fonction d'accès automatique en F80 dans un Ecran.
La règle ne s’applique pas aux Macros.
- RPP / Ne jamais écraser une ligne générée
- Utilisez cette règle pour vérifier qu'aucune ligne de code généré,
y compris le code issu d'une Macro, n'est écrasée.
- RPP / Ne jamais écraser une ligne provenant d'une Macro
- Utilisez cette règle pour vérifier qu'aucune ligne de code issue
d'une Macro n'est écrasée.
- RPP / Ne jamais saisir de ligne spécifique en IDENTIFICATION ou
ENVIRONMENT DIVISION
- Utilisez cette règle pour vérifier qu'aucune ligne de code spécifique
n’est présente en IDENTIFICATION ou ENVIRONMENT
DIVISION d’un Programme ou d’un Ecran. La règle ne s’applique
pas aux Macros.
- RPP / Tout code utilisateur doit être dans une fonction utilisateur
- Utilisez cette règle pour vérifier que tout bloc de code spécifique
est inséré dans une fonction spécifique. Le bloc de code spécifique
doit débuter par l'étiquette FXXXXet se terminer
par l'étiquette FXXXX-FN.
Si une ligne
de code spécifique se trouve dans une fonction qui est générée ou
bien qui provient d'une Macro, il y aura violation de la règle.
- La catégorie RPP / Structures du programme comprend
les règles qui identifient les problèmes liés aux structures de programme
:
- RPP / Eviter d'utiliser des entrées de niveau 88 dans les descriptions
de données
- Utilisez cette règle pour marquer les descriptions de données
d’indicateur qui utilisent des entrées de niveau 88. Chaque entrée
de niveau 88 est marquée.
- RPP / Eviter d'utiliser plus d'une instruction EXIT par section
- Utilisez cette règle pour marquer les sections qui contiennent
plusieurs instructions EXIT.
- RPP / Eviter d'utiliser SECTION en PROCEDURE DIVISION
- Utilisez cette règle pour marquer les déclarations SECTION dans
la PROCEDURE DIVISION.
- RPP / Eviter les clauses RESERVE dans les paragraphes FILE-CONTROL
- Utilisez cette règle pour marquer les clauses RESERVE dans
les paragraphes FILE-CONTROL.
- RPP / Eviter les expressions CORRESPONDING
- Utilisez cette règle pour marquer les instructions ADD, SUBTRACT et MOVE qui
contiennent une expression CORRESPONDING.
- RPP / Eviter les expressions NEXT SENTENCE
- Utilisez cette règle pour marquer toutes les expressions NEXT
SENTENCE.
- RPP / Eviter les expressions THRU dans les instructions PERFORM
- Utilisez cette règle pour marquer les instructions PERFORM qui
contiennent l’expression THRU.
- RPP / Eviter les IF sans ELSE
- Utilisez cette règle pour marquer les instructions IF qui
ne contiennent pas une clause ELSE.
- RPP / Eviter les instructions ACCEPT
- Utilisez cette règle pour marquer les instructions ACCEPT.
- RPP / Eviter les instructions ACCEPT FROM CONSOLE ou FROM SYSIN
- Utilisez cette règle pour marquer les instructions ACCEPT qui
contiennent l’expression FROM CONSOLE ou FROM
SYSIN.
- RPP / Eviter les instructions ALTER
- Utilisez cette règle pour marquer les instructions ALTER.
- RPP / Eviter les instructions CALL avec un nom de programme littéral
- Utilisez cette règle pour marquer les instructions CALL spécifiant
le nom du programme comme valeur littérale.
- RPP / Eviter les instructions CANCEL
- Utilisez cette règle pour marquer les instructions CANCEL.
- RPP / Eviter les instructions de littéral STOP RUN et STOP
- Utilisez cette règle pour marquer les instructions STOP
RUN et STOP.
- RPP / Eviter les instructions DISPLAY contenant UPON CONSOLE
- Utilisez cette règle pour marquer les instructions DISPLAY qui
contiennent UPON CONSOLE.
- RPP / Eviter les instructions ENTRY
- Utilisez cette règle pour marquer les instructions ENTRY.
- RPP / Eviter les instructions EXIT PROGRAM
- Utilisez cette règle pour marquer les instructions EXIT
PROGRAM.
- RPP / Eviter les instructions GO TO
- Utilisez cette règle pour marquer les instructions GO
TO.
- RPP / Eviter les instructions GO TO, sauf celles qui font référence
à un paragraphe EXIT
- Utilisez cette règle pour marquer les instructions GO
TO, à l’exception de celles qui transfèrent le contrôle à
un paragraphe exit. Un paragraphe exit est un paragraphe qui contient
uniquement une instruction EXIT.
- RPP / Eviter les instructions PERFORM
- Utilisez cette règle pour marquer les PERFORM dans
un Programme ou un Ecran. La règle ne s’applique pas aux Macros.
- RPP / Eviter les instructions SORT
- Utilisez cette règle pour marquer les instructions SORT dans
un Programme ou un Ecran. La règle ne s’applique pas aux Macros.
- RPP / Eviter les instructions XML PARSE
- Utilisez cette règle pour marquer les instructions XML-PARSE.
- RPP / Eviter PERFORM, sauf PERFORM de section
- Utilisez cette règle pour marquer toutes es instructions PERFORM,
à l’exception de celles qui contiennent des sections uniquement.
- RPP / EXEC CICS : Utiliser
DFHRESP pour vérifier la valeur de retour
- Cette règle s’applique à des éléments de données utilisés comme
paramètre RESP ou RESP2 d’une commande EXEC
CICS. Utilisez cette règle pour marquer une comparaison entre
un élément de données et tout autre élément que la valeur de retour
d’un appel de fonction DFHRESP dans les contextes
suivants : dans une condition de relation et dans une unité WHEN d’une
instruction SELECT dans laquelle l’élément de données
est l’objet de sélection.
- RPP / EXEC CICS : Utiliser
l'option RESP
- Utilisez cette règle pour marquer des commandes EXEC CICS qui
n’incluent pas l’option RESP.
- RPP / EXEC CICS : Vérifier
EIBRESP après NOHANDLE
- Utilisez cette règle pour marquer l’instruction EXEC CICS qui
spécifie l’option NOHANDLE et n’est pas suivie d’une
instruction IF ou EVALUATE qui vérifie
la valeur de EIBRESP. L’instruction qui suit l’instruction EXEC
CICS est marquée si ce n’est pas l’une des suivantes : une
instruction IF ou EVALUATE qui référence EIBRESP,
ou une instruction PERFORM menant à un bloc de code
dont la première instruction IF ou EVALUATE qui
référence EIBRESP.
- RPP / EXEC SQL : Vérifier la valeur de SQLCODE après une instruction
EXEC SQL
- Utilisez cette règle pour marquer une instruction EXEC
SQL non suivie par une instruction IF ou EVALUATE qui
vérifie la valeur de SQLCODE. L’instruction qui suit
l’instruction EXEC SQL est marquée si ce n’est pas
l’une des suivantes : une instruction IF ou EVALUATE qui
référence SQLCODE ou une instruction PERFORM menant
à un bloc de code dont la première instruction IF ou EVALUATE qui
référence SQLCODE.
- RPP / Utiliser CONTINUE plutôt que NEXT SENTENCE dans un plage
de portée
- Utilisez cette règle pour marquer les instructions NEXT
SENTENCE qui se trouve dans une portée d’une instruction
ayant une expression d’arrêt explicite.
- RPP / Utiliser CURRENT-DATE plutôt que ACCEPT DATE ou ACCEPT TIME
- Utilisez cette règle pour marquer les instructions ACCEPT
DATE et ACCEPT TIME.
- RPP / Utiliser des expressions THRU avec les instructions PERFORM
- Utilisez cette règle pour marquer les instructions PERFORM qui
ne contiennent pas l’expression THRU.
- RPP / Utiliser des numéros de niveau 01, 05, 10, 15
- Utilisez cette règle pour marquer les définitions de structure
de données contenant des numéros de niveau non croissants ou dont
la valeur n’est pas 1 ou un multiple de 5.
- RPP / Utiliser SEARCH ALL plutôt que SEARCH pour effectuer une
recherche dans une table
- Utilisez cette règle pour marquer les recherche dans les tables
qui utilisent SEARCH plutôt que SEARCH ALL.
- RPP / Utiliser une expression WHEN OTHER avec une instruction
EVALUATE
- Utilisez cette règle pour marquer les instructions EVALUATE qui
ne contiennent pas l’expression WHEN OTHER.
- RPP / Utiliser un paragraphe EXIT dans chaque section
- Utilisez cette règle pour marquer les sections qui ne contiennent
pas un paragraphe exit. Un paragraphe exit est un paragraphe qui contient
uniquement une instruction EXIT.