Le PERFORM THRU : la fausse bonne pratique en langage COBOL

Dans beaucoup de domaines, on remarque qu’un élève à tendance à imiter le maître. Le COBOL est un domaine qui n’échappe pas à cette règle. En effet, les développeurs non formés ont tendance à s’inspirer et imiter des pratiques qu’il observent dans les différents programmes sur lesquels il interviennent.

Malheureusement, une grande partie de ces programmes sont eux-mêmes réalisés par des développeurs également non formés, qui se sont inspirés d’autres programmes. Et ainsi de suite. Tout cela débouche sur une sorte de « tradition » informelle de programmation pour un projet ou une entreprise. Ces traditions sont composées d’un ensemble de pratiques dont une grande partie n’est souvent plus explicable. La fameuse phrase « on a toujours fait comme ça » mais sans savoir pourquoi, trouve ici tout son sens.

Une des mauvaises pratiques les plus répandues est l’utilisation du PERFORM THRU au sein de la PROCEDURE DIVISION.

L’instruction PERFORM THRU

L’instruction PERFORM THRU permet l’exécution forcée de toutes les instructions des paragraphes présents entre un paragraphe de début et un paragraphe de fin. Le paragraphe de fin devra contenir le mot-clé EXIT pour terminer la séquence.

L’instruction est souvent utilisée dans le cas où chaque ligne des paragraphes se terminent des points. Le point servant à délimiter une fin de paragraphe, sans l’utilisation du PERFORM THRU, le paragraphe se terminerait au premier point rencontré.

       CALCUL-IMPOTS.
           PERFORM CALCUL-REVENUS-DEBUT THRU CALCUL-REVENUS-FIN
           PERFORM CALCUL-TAUX
           .
       CALCUL-REVENUS-DEBUT.
           MOVE M-SALR TO M-REVNUS.
           COMPUTE M-REVNUS = M-REVNUS + M-REVNUS-IMMO.
           COMPUTE M-REVNUS = M-REVNUS + M-REVNUS-BOURSE.
           .
       
       CALCUL-REVENUS-FIN.
           EXIT.
       CALCUL-TAUX.
           instructions du paragraphe
           .

Dans cet exemple, l’utilisation du PERFORM THRU permet l’exécution de tout le paragraphe CALCUL-REVNUS-DEBUT jusqu’à CALCUL-REVENUS-FIN malgré la présence de points à chaque fin de ligne. Sans le THRU, l’exécution du paragraphe se serait arrêtée au premier point, donc après le MOVE.

Les dangers de l’utilisation de l’instruction PERFORM THRU

Je déconseille la pratique du PERFORM THRU pour deux raisons principales :

  • cela complexifie le code et nécessite la déclaration de deux paragraphes au lieu d’un (celui de début, et celui de fin qui contient l’instruction EXIT)
  • si un développeur non expérimenté en langage COBOL ajoute un ou plusieurs paragraphes juste entre les paragraphes de début et de fin, ceux-ci seront exécutés de manière silencieuse, et occasionneront fort probablement un comportement du programme imprévisible, tout en rendant l’origine du problème difficile à déceler.
       CALCUL-IMPOTS.
           PERFORM CALCUL-REVENUS-DEBUT THRU CALCUL-REVENUS-FIN
           PERFORM CALCUL-TAUX
           .
       CALCUL-REVENUS-DEBUT.
           instructions du paragraphe
EVOL17     PERFORM AJOUT-REVENUS-CONJOINT
           instructions du paragraphe
           .
       
      * Ce paragraphe a été rajouté par un développeur débutant en langage COBOL 
      * dans le cadre des modifications tagguées EVOL17
EVOL17 AJOUT-REVENUS-CONJOINT.
EVOL17     instructions du paragraphe
EVOL17     .
       CALCUL-REVENUS-FIN.
           EXIT.
       CALCUL-TAUX.
           instructions du paragraphe
           .

Ici, un développeur débutant en langage COBOL a rajouté un paragraphe AJOUT-REVENUS-CONJOINT qui sera appelé de manière attendue au sein du paragraphe CALCUL-REVENUS-DEBUT, et une seconde fois de manière inattendue à cause du PERFORM THRU.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *