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 COBOL générés.
Mise en oeuvre
Avant de lancer une analyse
du code COBOL, vous devez définir une configuration d'analyse au niveau
du Software Analyzer, et préciser :
- 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 COBOL 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 ensuite sauvegardé, vous pouvez de nouveau
lancer l'analyse du fichier pour vérifier le respect des règles.
Pour
une information complète sur le Software Analyzer, consultez l'aide
en ligne de Rational Developer for System z, dans la rubrique Révision
du code COBOL de la section Développement.
Analyse des entités de design
Software Analyzer
propose une analyse des entités de design Rational Programming Patterns.
Il
existe trois catégories de règles pour identifier les problèmes liés
au design des instances :
- 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
Software
Analyzer propose des règles qui s'appliquent uniquement au code spécifique
inséré par l'utilisateur dans un programme COBOL généré.
Les
règles Rational Programming Patterns peuvent être différenciées des
règles standard Rational Developer for System z car elles sont toutes
préfixées par RPP /.
Il existe quatre catégories de règles
RPP. Les règles de la catégorie Programmation Pilotée par Pattern
sont spécifiques à Rational Programming Patterns et n'ont pas leur
équivalent dans Rational Developer for System z.
En revanche,
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.
- 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 toutes 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 / 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 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 é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 "FXXXX" et 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.