Règles de contrôle qualité

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 œuvre

Avant de lancer une analyse, vous devez définir une configuration d'analyse au niveau du Software Analyzer. Pour cela, faites un clic droit sur un fichier ou projet et sélectionnez Software Analyzer > Software Analyzer - configurations. L'assistant Création, gestion et exécution des configurations s'ouvre. Pour créer une configuration, faites un clic droit sur la ligne Software Analyzer dans la liste des configurations et donnez-lui un nom dans la zone Nom. Précisez les éléments suivants :
  • Dans l'onglet Portée, indiquez si l'analyse s'applique à tout l'espace de travail, un ensemble de projets de ressources, ou une sélection de projets.
    Figure 1. Rational Software Analyzer - Onglet Portée
    Rational Software Analyzer - Onglet Portée

  • Dans l'onglet Règles, sélectionnez 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).
    Figure 2. Rational Software Analyzer - Onglet Règles
    Rational Software Analyzer - Rules tab
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.
Figure 3. Résultats de Software Analyzer
Résultats de Software Analyzer

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.
    • Indicatifs dupliqués dans Segments avec rupture dans un Programme. Cette règle s'applique si un Segment contient des indicatifs en double dans ses Lignes -CE et si ces indicatifs sont utilisés pour indiquer une rupture de séquence sur ce Segment dans les Lignes -CD d'un Programme.

  • 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 IBM® Developer for z Systems (Rational Developer for z Systems), 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 IBM Developer for z Systems (Rational Developer for z Systems).

  • 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 recherches 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.

Vos commentaires