Programmation spaghettiEn programmation informatique, la programmation spaghetti est un style d'écriture de code source qui favorise l'apparition du syndrome du plat de spaghettis : un code peu clair et qui fait un usage excessif de sauts inconditionnels (voir goto), d'exceptions en tous sens, de gestion des événements complexes et de threads divers. Ce style d'écriture de code est à bannir car il peut engendrer des problèmes graves, comme le montre par exemple le procès de l'affaire Toyota en 2013[1],[2]. En fait, la programmation spaghetti qualifie tout ce qui ne permet pas de déterminer le qui, le quoi et le comment d'une prise de contrôle par une portion de programme (incompréhension du flux de contrôle). Le code est donc plus long à mettre à jour car cela nécessite de remonter le fil des renvois[3]. Cette notion s'applique aussi au niveau du flux de données, c'est-à-dire à tout ce qui ne permet pas de déterminer le qui, le quoi et le comment d’une modification de données. Cette situation est causée par un usage excessif de couplage fort. La programmation spaghetti est un exemple d'anti-patron. Exemple de flux de contrôle spaghetti
L'instruction 10 i = 0
20 i = i + 1
30 IF i <> 11 THEN GOTO 80
40 IF i = 11 THEN GOTO 60
50 GOTO 20
60 PRINT "Programme terminé."
70 END
80 PRINT i & " au carré = " & i * i
90 GOTO 20
Le même résultat est obtenu par le programme suivant, plus respectueux des principes de la programmation structurée : 10 FOR i = 1 TO 10
20 PRINT i & " au carré = " & i * i
30 NEXT i
40 PRINT "Programme terminé."
50 END
L'exemple suivant, en Fortran 77, calcule le nombre de solutions du problème des huit dames généralisé à un damier n×n. La forte imbrication des sauts ( PROGRAM DAMES
IMPLICIT INTEGER(A-Z)
PARAMETER(L=14)
DIMENSION A(L),S(L),U(4*L-2)
DO 10 I=1,L
A(I)=I
10 CONTINUE
DO 20 I=1,4*L-2
U(I)=0
20 CONTINUE
DO 110 N=1,L
M=0
I=1
R=2*N-1
GO TO 40
30 S(I)=J
U(P)=1
U(Q+R)=1
I=I+1
40 IF(I.GT.N) GO TO 80
J=I
50 Z=A(I)
Y=A(J)
P=I-Y+N
Q=I+Y-1
A(I)=Y
A(J)=Z
IF((U(P).EQ.0).AND.(U(Q+R).EQ.0)) GO TO 30
60 J=J+1
IF(J.LE.N) GO TO 50
70 J=J-1
IF(J.EQ.I) GO TO 90
Z=A(I)
A(I)=A(J)
A(J)=Z
GO TO 70
80 M=M+1
90 I=I-1
IF(I.EQ.0) GO TO 100
P=I-A(I)+N
Q=I+A(I)-1
J=S(I)
U(P)=0
U(Q+R)=0
GO TO 60
100 PRINT *,N,M
110 CONTINUE
END
Exemple de flux de données spaghetti 10 in:INTEGER
20 out:INTEGER
30
40 PROCEDURE Square
50 out = in * in
60 END PROCEDURE
Le même résultat est obtenu par le programme suivant, plus respectueux des principes de la programmation structurée : 10 FUNCTION Square( in:INTEGER ):INTEGER
20 Square = in * in
30 END FUNCTION
Voir aussiNotes et références
|
Portal di Ensiklopedia Dunia