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
- Nagy sárlabda , egy szoftver, észlelhetetlen architektúrával
- International Obfuscated C Code Contest , verseny, amely kellemesen homályos C kód előállítására irányul
- Csak írható nyelv, olyan furcsa szintaxissal rendelkező nyelv, hogy a kapott kód érthetetlen
- Technikai adósság
Hivatkozások
Külső linkek
- Ugrás a károsnak tartott nyilatkozathoz . A spagetti kód klasszikus visszautasítása Edsger Dijkstra által
- Nem tudjuk, hová menjünk, ha nem tudjuk, honnan jöttünk R. Lawrence Clark -tól (DATAMATION, 1973. december)
- A Java spagetti kód átalakítása Java bento kódba, elválasztva a kóddal teli edényt egy osztályból hét osztályba
- Tárgyak és keretek - Lépés hátra Brian Rinaldi
- Tészta programozása - Spagetti, Lasagna, Ravioli és Macaroni Code
- Tészta elmélet programozás
- Spagetti kód: Az élet és a munka összekeverése programozó bölcsességgel (angol kiadás)