Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Programmation spaghetti — Wikipédia
Programmation spaghetti — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources (décembre 2018).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ».

En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?
Image liée à la programmation spaghetti , détails du fond de panier à enroulement de fils, format carte double europe

En 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

[modifier | modifier le code]

L'instruction goto, ou ses équivalents, est souvent responsable de la production de code spaghetti. Elle est d'ailleurs dépréciée dans les langages modernes pour cette raison. Elle est souvent utilisée dans les langages comme le BASIC ou l'assembleur (dans ce dernier cas, les branchements inconditionnels sont cependant inévitables). L'exemple suivant, qui affiche la liste des entiers compris entre 1 et 10 ainsi que leur carré, est un exemple de code spaghetti en BASIC :

 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 (goto) rend le programme particulièrement difficile à suivre. L'algorithme consiste en un backtracking récursif. Les configurations possibles des dames sont considérées comme des matrices de permutations, et le programme parcourt toutes les permutations en éliminant les « branches » impossibles, qui sont détectées lorsqu'on trouve deux dames sur une même diagonale. La récursivité, qui n'existe pas en Fortran 77, est elle-même implémentée à l'aide de tableaux et de l'instruction goto.

      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

[modifier | modifier le code]
 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 aussi

[modifier | modifier le code]
  • Grande boule de boue

Notes et références

[modifier | modifier le code]
  1. ↑ (en) Safety Research & Strategie, « Toyota Unintended Acceleration and the Big Bowl of “Spaghetti”Code », sur usna.edu, 11 avril 2016 (consulté le 5 février 2021).
  2. ↑ Zarmakuizz, « Encore un exemple de code spaghetti : Toyota », sur linuxfr.org, 6 mars 2014 (consulté le 5 février 2021).
  3. ↑ « Programmation par algorithme », philippebeaubien.com.
v · m
Gestion de la qualité logicielle
Indicateurs de qualité (ISO/CEI 9126)
  • Capacité fonctionnelle (réponse aux exigences)
  • Fiabilité
  • Maintenabilité
  • Performance
  • Portabilité
  • Utilisabilité
Compréhension et contrôle du code source
  • Automatisation de test
  • Commentaires
  • Documentation
  • Inspection de produit
  • Programmation en binôme ou en groupe
  • Règles de codage
  • Revue de code
Tests
  • Acceptation
  • Intégration
  • Performance
  • Régression
  • Unitaire
  • Utilisateur
  • Validation
Métriques
  • Cohésion
  • Couplage
  • Couverture de code
  • Halstead
  • Indépendance fonctionnelle
  • Indice de maintenabilité
  • Ligne de code
  • Nombre cyclomatique
  • Point de fonction
Remaniements
  • Maintenance
  • Optimisation de code
  • Réusinage de code (Règle de trois)
Principes de programmation
  • Encapsulation
  • GRASP
  • KISS
  • Loi de Déméter
  • Masquage de l'information
  • Ne vous répétez pas (DRY)
  • Patron de conception
  • Séparation des préoccupations
  • YAGNI
SOLID
  • Responsabilité unique
  • Ouvert/fermé
  • Substitution de Liskov
  • Ségrégation des interfaces
  • Inversion des dépendances
Mauvaises pratiques
Antipatterns
  • Attente active
  • Grosse boule de boue
  • Programmation spaghetti (syndrome)
  • Réinventer la roue
Code smells
  • Duplication de code
  • God object
Voir aussi : Génie logiciel, Software craftsmanship, Dégradation logicielle
  • icône décorative Portail de l’informatique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Programmation_spaghetti&oldid=230367372 ».
Catégories :
  • Antipattern
  • Programmation informatique
  • Métaphore basée sur les spaghettis
Catégories cachées :
  • Article manquant de références depuis décembre 2018
  • Article manquant de références/Liste complète
  • Portail:Informatique/Articles liés
  • Portail:Technologies/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id