Code spaghetti - Spaghetti code
Le code spaghetti est une expression péjorative pour le code source non structuré et difficile à maintenir . Le code spaghetti peut être causé par plusieurs facteurs, tels que des exigences de projet volatiles , un manque de règles de style de programmation et des ingénieurs logiciels avec une capacité ou une expérience insuffisante.
Sens
Le code qui abuse des instructions GOTO plutôt que des constructions de programmation structurées , ce qui entraîne des programmes alambiqués et impossibles à maintenir, est souvent appelé code spaghetti. Un tel code a une structure de contrôle complexe et enchevêtrée , résultant en un flux de programme qui est conceptuellement comme un bol de spaghettis , tordu et enchevêtré. Dans une publication de 1980 du National Bureau of Standards des États-Unis , l'expression programme spaghetti a été utilisée pour décrire des programmes plus anciens ayant des « fichiers fragmentés et dispersés ». Le code spaghetti peut également décrire un anti-modèle dans lequel le code orienté objet est écrit dans un style procédural, par exemple en créant des classes dont les méthodes sont trop longues et désordonnées, ou en abandonnant les concepts orientés objet comme le polymorphisme . La présence de cette forme de code spaghetti peut réduire considérablement la compréhensibilité d'un système.
Histoire
Il n'est pas clair quand l'expression code spaghetti est entrée dans l'usage courant; cependant, plusieurs références sont apparues en 1977 dont Macaroni is Better Than Spaghetti de Guy Steele. Dans le livre de 1978 A primer on disciplined programming using PL/I, PL/CS et PL/CT , Richard Conway a utilisé le terme pour décrire les types de programmes qui « ont la même structure logique propre qu'une assiette de spaghettis », une expression répété dans le livre de 1979 An Introduction to Programming qu'il a co-écrit avec David Gries . Dans l'article de 1988 Un modèle en spirale de développement et d'amélioration de logiciels , le terme est utilisé pour décrire l'ancienne pratique du modèle de code et de correction , qui manquait de planification et a finalement conduit au développement du modèle en cascade . Dans le livre de 1979 Programmation structurée pour le programmeur COBOL , l'auteur Paul Noll utilise les expressions code spaghetti et nid de rat comme synonymes pour décrire un code source mal structuré.
Lors de la conférence Ada - Europe '93 , Ada a été décrite comme forçant le programmeur à « produire du code compréhensible, au lieu du code spaghetti », en raison de son mécanisme de propagation d'exception restrictif.
Dans une parodie de langages informatiques de 1981 dans The Michigan Technic intitulée " BASICally Speaking... FORTRAN bytes !! ", l'auteur a décrit le FORTRAN en déclarant que " il se compose entièrement de code spaghetti ".
Richard Hamming a décrit dans ses conférences l'étymologie du terme dans le contexte de la programmation précoce en codes binaires :
Si, en corrigeant une erreur, vous vouliez insérer des instructions omises, vous avez pris l'instruction immédiatement précédente et l'avez remplacée par un transfert dans un espace vide. Là, vous avez inséré l'instruction que vous venez d'écrire, ajouté les instructions que vous vouliez insérer, puis suivie d'un transfert vers le programme principal. Ainsi, le programme devint bientôt une séquence de sauts du contrôle vers des endroits étranges. Lorsque, comme cela arrive presque toujours, il y avait des erreurs dans les corrections, vous avez ensuite utilisé à nouveau la même astuce, en utilisant un autre espace disponible. En conséquence, le chemin de contrôle du programme à travers le stockage a rapidement pris l'apparence d'une boîte de spaghetti. Pourquoi ne pas simplement les insérer dans la séquence d'instructions ? Parce qu'alors il faudrait revoir tout le programme et changer toutes les adresses qui font référence à l'une des instructions déplacées ! Tout sauf ça !
Expressions associées
Code raviolis
Le code Ravioli est un terme spécifique à la programmation orientée objet . Il décrit un code qui comprend des classes bien structurées qui sont faciles à comprendre isolément, mais difficiles à comprendre dans leur ensemble.
Code lasagne
Le code de lasagne fait référence au code dont les couches sont si compliquées et entrelacées que la modification d'une couche nécessiterait des modifications dans toutes les autres couches.
Exemples
Voici ce qui serait considéré comme un exemple trivial de code spaghetti en BASIC . Le programme imprime chacun des nombres 1 à 100 à l'écran avec son carré. L'indentation n'est pas utilisée pour différencier les différentes actions effectuées par le code, et les GOTO
instructions du programme créent une dépendance aux numéros de ligne . Le flux d'exécution d'un domaine à un autre est plus difficile à prévoir. Les occurrences réelles de code spaghetti sont plus complexes et peuvent augmenter considérablement les coûts de maintenance d'un programme.
1 i=0;
2 i=i+1;
3 PRINT i; "squared=";i*i;
4 IF i>=100 THEN GOTO 6;
5 GOTO 2;
6 PRINT "Program Completed.";
7 END
Voici le même code écrit dans un style de programmation structuré :
1 FOR i=1 TO 100
2 PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END
Le programme saute d'une zone à l'autre, mais ce saut est formel et plus facilement prévisible, car les boucles et les fonctions for fournissent un contrôle de flux tandis que l' instruction goto encourage un contrôle de flux arbitraire. Bien que cet exemple soit petit, les programmes du monde réel sont composés de nombreuses lignes de code et sont difficiles à maintenir lorsqu'ils sont écrits en code spaghetti.
Voici un autre exemple de code Spaghetti avec des instructions GOTO intégrées.
INPUT "How many numbers should be sorted? "; T
DIM n(T)
FOR i = 1 TO T
PRINT "NUMBER:"; i
INPUT n(i)
NEXT i
'Calculations:
C = T
E180:
C = INT(C / 2)
IF C = 0 THEN GOTO C330
D = T - C
E = 1
I220:
f = E
F230:
g = f + C
IF n(f) > n(g) THEN SWAP n(f), n(g)
f = f - C
IF f > 0 THEN GOTO F230
E = E + 1
IF E > D THEN GOTO E180
GOTO I220
C330:
PRINT "The sorted list is"
FOR i = 1 TO T
PRINT n(i)
NEXT i
Voir également
- Grosse boule de boue , un logiciel sans architecture perceptible
- Concours international de code C obscurci, un concours pour produire du code C agréablement obscur
- Langage en écriture seule , un langage avec une syntaxe si bizarre que le code résultant est incompréhensible
- Dette technique
Les références
Liens externes
- Aller à la déclaration considérée comme nuisible . La répudiation classique du code spaghetti par Edsger Dijkstra
- Nous ne savons pas où ALLER si nous ne savons pas d'où nous VENONS par R. Lawrence Clark de DATAMATION, décembre 1973
- Refactorisation du code spaghetti Java en code Java bento séparant un bol plein de code d'une classe en sept classes
- Objets et frameworks – Prendre du recul par Brian Rinaldi
- Programmation Pâtes - Spaghetti, Lasagne, Ravioli et Macaroni Code
- Théorie de la programmation des pâtes
- Code spaghetti : Démêler la vie et le travail avec la sagesse du programmeur (édition anglaise)