Spagetti kód - Spaghetti code

Spagetti kód egy pejoratív kifejezés a strukturált és a nehezen fenntartani forráskódot . A spagetti kódot számos tényező okozhatja, például az illékony projektkövetelmények , a programozási stílus szabályainak hiánya , valamint a nem megfelelő képességgel vagy tapasztalattal rendelkező szoftverfejlesztők .

Jelentése

Azokat a kódokat, amelyek a GOTO utasításokat túlhasználják, nem pedig a strukturált programozási konstrukciókat, ami összetett és karbantarthatatlan programokat eredményez, gyakran spagetti kódnak nevezik. Az ilyen kód bonyolult és kusza vezérlőszerkezettel rendelkezik , ami azt eredményezi, hogy egy programfolyamat fogalmilag olyan, mint egy tál spagetti , csavart és kusza. Az Egyesült Államok Nemzeti Szabványügyi Hivatalának 1980 -as kiadványában a spagetti program kifejezést használták a "töredezett és szétszórt fájlokkal" rendelkező régebbi programok leírására. A spagetti kód leírhat egy anti-mintát is , amelyben az objektum-orientált kódot eljárási stílusban írják fel, például olyan osztályok létrehozásával, amelyek módszerei túl hosszúak és rendetlenek, vagy elhagyja az objektum-orientált fogalmakat, például a polimorfizmust . A spagetti kód ilyen formájának jelenléte jelentősen csökkentheti a rendszer érthetőségét.

Történelem

Nem világos, hogy a spagettikód kifejezés mikor került általános használatba; azonban 1977 -ben számos utalás jelent meg, köztük Guar Steele Makaróni jobb, mint a spagetti . Az 1978 -ban megjelent A primer on disciplined programozás PL/I, PL/CS és PL/CT segítségével Richard Conway a kifejezést olyan műsortípusok leírására használta, amelyek "ugyanolyan tiszta logikai felépítésűek, mint egy spagettitál", ez a kifejezés megismételte az 1979-ben megjelent An Introduction to Programming könyvben, amelyet David Gries -szel közösen írt . Az 1988 -as A szoftverfejlesztés és fejlesztés spirálmodellje című dokumentumban ezt a kifejezést használják a kód- és javítási modell régebbi gyakorlatának leírására , amelyből hiányzott a tervezés, és végül a vízesés -modell kidolgozásához vezetett . Az 1979 -es Structured programozás a COBOL programozónak című könyvben Paul Noll szerző a spagetti kód és a patkányfészek kifejezéseket használja szinonimaként a rosszul strukturált forráskód leírására.

Az Ada - Európa '93 konferencián Adát úgy írták le, hogy a korlátozó kivételterjesztési mechanizmus miatt kényszeríti a programozót, hogy "érthető legyen a spagetti kód helyett".

A The Michigan Technic 1981 -es számítógépes nyelvhamisításában, "BASICally ottaen ... FORTRAN bytes !!" címmel a szerző leírta a FORTRAN -t, kijelentve, hogy "teljes egészében spagetti kódból áll".

Richard Hamming előadásaiban leírta a kifejezés etimológiáját a bináris kódok korai programozása keretében:

Ha a hiba kijavításakor kihagyott utasításokat akart beilleszteni, akkor a közvetlenül megelőző utasítást vette át, és egy üres helyre történő átváltással helyettesítette. Ott beírta az imént írt utasítást, hozzáadta a beszúrni kívánt utasításokat, majd ezt követte az átvitel a főprogramba. Így a program hamarosan a vezérlés furcsa helyekre történő ugrássorozatává vált. Amikor, mint szinte mindig előfordul, hibák voltak a javításokban, akkor ugyanazt a trükköt használta újra, egy másik rendelkezésre álló terület használatával. Ennek eredményeként a program tárolási útvonala hamarosan egy konzervdoboz megjelenését kapta. Miért nem illeszti be őket egyszerűen az utasítások sorába? Mert akkor át kell néznie az egész programot, és meg kell változtatnia az összes címet, amely az áthelyezett utasításokra hivatkozott! Bármit, csak azt nem!

Kapcsolódó kifejezések

Ravioli kód

A Ravioli kód az objektum-orientált programozásra jellemző kifejezés . Leírja a kódot, amely jól felépített osztályokat tartalmaz, amelyek külön-külön könnyen érthetők, de összességükben nehezen érthetők.

Lasagna kód

A lasagna kód olyan kódra utal, amelynek rétegei annyira bonyolultak és összefonódnak, hogy az egyik rétegben történő változtatás minden más rétegen változtatásokat igényel.

Példák

Az alábbiakban a BASIC spagetti kódjának triviális példáját tekintjük . A program az 1 -től 100 -ig terjedő számokat a képernyőre nyomtatja a négyzettel együtt. A behúzást nem használják a kód által végrehajtott különböző műveletek megkülönböztetésére, és a program GOTOállításai a sorszámokra támaszkodnak . A végrehajtás áramlását egyik területről a másikra nehezebb megjósolni. A spagetti kódok valós előfordulása összetettebb, és jelentősen növelheti a program karbantartási költségeit.

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

Itt ugyanaz a kód van strukturált programozási stílusban írva :

1 FOR i=1 TO 100
2     PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END

A program egyik területről a másikra ugrik, de ez az ugrás formális és könnyebben megjósolható, mert a hurkok és a funkciók biztosítják az áramlás szabályozását, míg a goto utasítás tetszőleges áramlásszabályozást ösztönöz. Bár ez a példa kicsi, a valós világ programjai sok kódsorból állnak, és nehezen karbantarthatók, ha spagetti kódot írnak.

Íme egy másik példa a spagetti kódra beágyazott GOTO utasításokkal.

  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

Lásd még

Hivatkozások

Külső linkek