स्पेगेटी कोड

From Vigyanwiki
Revision as of 13:20, 31 May 2023 by alpha>Indicwiki (Created page with "{{short description|Software source code with poor structure}} स्पेगेटी कोड असंरचित और कठिन-से-सॉफ़्टवेय...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

स्पेगेटी कोड असंरचित और कठिन-से-सॉफ़्टवेयर रखरखाव स्रोत कोड के लिए एक अपमानजनक वाक्यांश है। स्पेगेटी कोड कई कारकों के कारण हो सकता है, जैसे अस्थिर परियोजना आवश्यकताओं, प्रोग्रामिंग शैली के नियमों की कमी, और अपर्याप्त क्षमता या अनुभव वाले सॉफ्टवेयर इंजीनियर[1]


अर्थ

कोड जो संरचित प्रोग्रामिंग निर्माणों के बजाय के लिए जाओ स्टेटमेंट्स का अत्यधिक उपयोग करता है, जिसके परिणामस्वरूप जटिल और अनुपयोगी कार्यक्रम होते हैं, अक्सर स्पेगेटी कोड कहा जाता है।[2] इस तरह के कोड में एक जटिल और पेचीदा नियंत्रण संरचना होती है, जिसके परिणामस्वरूप एक प्रोग्राम प्रवाह होता है जो वैचारिक रूप से स्पेगेटी # सर्विंग, ट्विस्टेड और पेचीदा होता है.[3] राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा 1980 के प्रकाशन में, वाक्यांश स्पेगेटी प्रोग्राम का उपयोग खंडित और बिखरी हुई फाइलों वाले पुराने कार्यक्रमों का वर्णन करने के लिए किया गया था।[4] स्पेगेटी कोड एक एंटी-पैटर्न का भी वर्णन कर सकता है जिसमें ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट-ओरिएंटेड कोड एक प्रक्रियात्मक शैली में लिखा जाता है, जैसे कि ऐसी कक्षाएं बनाकर जिनके तरीके अत्यधिक लंबे और गड़बड़ हैं, या बहुरूपता (कंप्यूटर) जैसी ऑब्जेक्ट-ओरिएंटेड अवधारणाओं को छोड़ देते हैं। विज्ञान)।[5] स्पेगेटी कोड के इस रूप की उपस्थिति एक प्रणाली की बोधगम्यता को महत्वपूर्ण रूप से कम कर सकती है।[6]


इतिहास

यह स्पष्ट नहीं है कि वाक्यांश स्पेगेटी कोड कब आम उपयोग में आया; हालांकि, 1977 में गाइ एल. स्टील जूनियर द्वारा मैकरोनी इज़ बेटर दैन स्पेगेटी सहित कई संदर्भ सामने आए।[7] 1978 की पुस्तक ए प्राइमर ऑन डिसिप्लिन प्रोग्रामिंग यूजिंग पीएल/आई, पीएल/सीएस, और पीएल/सीटी में, रिचर्ड डब्ल्यू. कॉनवे ने उन प्रोग्रामों का वर्णन किया है जिनकी स्पेगेटी की प्लेट के समान स्वच्छ तार्किक संरचना है,[8] 1979 की पुस्तक एन इंट्रोडक्शन टू प्रोग्रामिंग में दोहराया गया एक वाक्यांश जिसे उन्होंने डेविड ग्रिस के साथ सह-लेखक बनाया था।[9] 1988 के पेपर ए स्पाइरल मॉडल ऑफ सॉफ्टवेयर डेवलपमेंट एंड एन्हांसमेंट में, शब्द का उपयोग कोड और फिक्स मॉडल के पुराने अभ्यास का वर्णन करने के लिए किया जाता है, जिसमें योजना की कमी थी और अंततः जलप्रपात मॉडल के विकास का नेतृत्व किया।[10] कोबोल प्रोग्रामर के लिए 1979 की पुस्तक स्ट्रक्चर्ड प्रोग्रामिंग में, लेखक पॉल नोल खराब संरचित स्रोत कोड का वर्णन करने के लिए समानार्थक शब्द स्पेगेटी कोड और चूहे के घोंसले का उपयोग करते हैं।[11] Ada - यूरोप '93 सम्मेलन में, Ada (प्रोग्रामिंग भाषा) को अपने प्रतिबंधात्मक अपवाद प्रचार तंत्र के कारण स्पेगेटी कोड के बजाय समझने योग्य बनाने के लिए प्रोग्रामर को मजबूर करने के रूप में वर्णित किया गया था।[12] 1981 में द मिशिगन टेक्निक में बेसिकली स्पीकिंग...फोरट्रान बाइट्स शीर्षक वाले कंप्यूटर लैंग्वेज स्पूफ!! , लेखक ने फोरट्रान का वर्णन करते हुए कहा कि इसमें पूरी तरह से स्पेगेटी कोड शामिल है।[13] रिचर्ड हैमिंग ने अपने व्याख्यानों में इसका वर्णन किया है[14] बाइनरी कोड में शुरुआती प्रोग्रामिंग के संदर्भ में शब्द की व्युत्पत्ति:

If, in fixing up an error, you wanted to insert some omitted instructions then you took the immediately preceding instruction and replaced it by a transfer to some empty space. There you put in the instruction you just wrote over, added the instructions you wanted to insert, and then followed by a transfer back to the main program. Thus the program soon became a sequence of jumps of the control to strange places. When, as almost always happens, there were errors in the corrections you then used the same trick again, using some other available space. As a result the control path of the program through storage soon took on the appearance of a can of spaghetti. Why not simply insert them in the run of instructions? Because then you would have to go over the entire program and change all the addresses which referred to any of the moved instructions! Anything but that!

संबंधित वाक्यांश

रैवियोली कोड

रैवियोली कोड वस्तु-उन्मुख प्रोग्रामिंग के लिए विशिष्ट शब्द है। यह कोड का वर्णन करता है जिसमें अच्छी तरह से संरचित कक्षा (कंप्यूटर प्रोग्रामिंग) शामिल है जो अलगाव में समझना आसान है, लेकिन पूरी तरह से समझना मुश्किल है।[15]


लसग्ना कोड

Lasagna कोड उस कोड को संदर्भित करता है जिसकी परतें इतनी जटिल और आपस में गुंथी हुई हैं कि एक परत में परिवर्तन करने से अन्य सभी परतों में परिवर्तन की आवश्यकता होगी।[16]


उदाहरण

बुनियादी प्रोग्रामिंग भाषा में स्पेगेटी कोड का एक तुच्छ उदाहरण माना जाएगा। कार्यक्रम प्रत्येक संख्या को 1 से 100 तक स्क्रीन पर उसके वर्ग के साथ प्रिंट करता है। इंडेंटेशन का उपयोग कोड और प्रोग्राम द्वारा की जाने वाली विभिन्न क्रियाओं में अंतर करने के लिए नहीं किया जाता है GOTO बयान लाइन नंबरों पर निर्भरता पैदा करते हैं। एक क्षेत्र से दूसरे क्षेत्र में निष्पादन के प्रवाह की भविष्यवाणी करना कठिन है। स्पेगेटी कोड की वास्तविक दुनिया में होने वाली घटनाएँ अधिक जटिल हैं और कार्यक्रम के रखरखाव की लागत में बहुत अधिक वृद्धि कर सकती हैं।

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

यहाँ एक संरचित प्रोग्रामिंग शैली में लिखा गया समान कोड है:

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

कार्यक्रम एक क्षेत्र से दूसरे क्षेत्र में कूदता है, लेकिन यह छलांग औपचारिक और अधिक आसानी से अनुमानित है, क्योंकि लूप और सबरूटीन के लिए नियंत्रण प्रवाह प्रदान करते हैं जबकि गोटो स्टेटमेंट मनमाना प्रवाह नियंत्रण को प्रोत्साहित करता है। हालांकि यह उदाहरण छोटा है, वास्तविक दुनिया के कार्यक्रम कोड की कई पंक्तियों से बने होते हैं और स्पेगेटी कोड फैशन में लिखे जाने पर इसे बनाए रखना मुश्किल होता है।

यहाँ एम्बेडेड GOTO कथनों के साथ स्पेगेटी कोड का एक और उदाहरण दिया गया है।

  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


यह भी देखें

संदर्भ

  1. Markus, Pizka (2004). "Straightening spaghetti-code with refactoring?" (PDF). Software Engineering Research and Practice: 846–852. Archived from the original (PDF) on 5 March 2018. Retrieved 5 March 2018.
  2. Cram, David; Hedley, Paul (2005). "Pronouns and procedural meaning: The relevance of spaghetti code and paranoid delusion" (PDF). Oxford University Working Papers in Linguistics, Philology and Phonetics. 10: 187–210. Retrieved 5 March 2018.
  3. Horstmann, Cay (2008). "Chapter 6 - Iteration". एपी कंप्यूटर साइंस के लिए जावा कॉन्सेप्ट्स (in English) (5th ed. [i.e. 2nd ed.]. ed.). Hoboken, NJ: J. Wiley & Sons. pp. 235–236. ISBN 978-0-470-18160-7. Retrieved 2 January 2017.
  4. United States National Bureau of Standards (1980). एएसटीएम विशेष तकनीकी प्रकाशन. United States Government Printing Office.
  5. Moha, N.; Gueheneuc, Y. G.; Duchien, L.; Meur, A. F. Le (January 2010). "DECOR: A Method for the Specification and Detection of Code and Design Smells". IEEE Transactions on Software Engineering. 36 (1): 20–36. CiteSeerX 10.1.1.156.1524. doi:10.1109/TSE.2009.50. ISSN 0098-5589. S2CID 14767901.
  6. Abbes, M.; Khomh, F.; Gueheneuc, Y. G.; Antoniol, G. (2011). प्रोग्राम कॉम्प्रिहेंशन पर दो एंटीपैटर्न, ब्लॉब और स्पेगेटी कोड के प्रभाव का एक अनुभवजन्य अध्ययन. pp. 181–190. CiteSeerX 10.1.1.294.1685. doi:10.1109/CSMR.2011.24. ISBN 978-1-61284-259-2. S2CID 14152638. {{cite book}}: |journal= ignored (help)
  7. Guy Lewis Steele. 1977. Macaroni is better than spaghetti. In Proceedings of the 1977 symposium on Artificial intelligence and programming languages. Association for Computing Machinery, New York, NY, USA, 60–66. DOI:https://doi.org/10.1145/800228.806933
  8. Conway, Richard (1978). A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers. ISBN 978-0-87626-712-7.
  9. Conway, Richard; Gries, David (1979). प्रोग्रामिंग का एक परिचय (3rd ed.). Little, Brown. ISBN 978-0-316-15414-7.
  10. Boehm, Barry W. (May 1988). "सॉफ्टवेयर विकास और वृद्धि का एक सर्पिल मॉडल". IEEE Computer. 21 (2): 61–72. doi:10.1109/2.59. S2CID 1781829.
  11. Noll, Paul (1977). Structured programming for the COBOL programmer: design, documentation, coding, testing. M. Murach & Associates.
  12. Schwille, Jürgen (1993). "Use and abuse of exceptions — 12 guidelines for proper exception handling". Lecture Notes in Computer Science. Ada – Europe '93 (Proceedings). Lecture Notes in Computer Science. Vol. 688. Springer Berlin Heidelberg. pp. 142–152. doi:10.1007/3-540-56802-6_12. ISBN 978-3-540-56802-5.
  13. MTSBS[clarification needed] (March–April 1981). "मूल रूप से बोल रहा हूँ ... फोरट्रान बाइट्स !!". The Michigan Technic. 99 (4).{{cite journal}}: CS1 maint: multiple names: authors list (link)
  14. Hamming, Richard (1996). विज्ञान और इंजीनियरिंग करने की कला. ISBN 9056995006.
  15. Troyer, O. De (13 May 1991). "The OO-binary relationship model : A truly object oriented conceptual model". pp. 561–578. doi:10.1007/3-540-54059-8_104. ISBN 978-3-319-98176-5. S2CID 10894568. {{cite book}}: |journal= ignored (help); Missing or empty |title= (help)
  16. Tomov, Latchezar; Ivanova, Valentina (October 2014). "काउंटरएक्सप्लेम्स द्वारा सॉफ्टवेयर इंजीनियरिंग में अच्छे अभ्यास सिखाना". Computer Science and Education in Computer Science (1): 397–405. Retrieved 5 March 2018.


बाहरी संबंध