स्पेगेटी कोड

From Vigyanwiki

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


अर्थ

वह कोड जो संरचित प्रोग्रामिंग संरचनाओं के बजाय GOTO कथनों का अत्यधिक उपयोग करता है, जिसके परिणामस्वरूप जटिल और अप्राप्य प्रोग्राम बनते हैं, प्रायः स्पेगेटी कोड कहा जाता है।[2] इस तरह के कोड में एक जटिल और पेचीदा नियंत्रण संरचना होती है, जिसके परिणामस्वरूप एक प्रोग्राम प्रवाह होता है जो वैचारिक रूप से स्पेगेटी के कटोरे की तरह मुड़ा हुआ और उलझा हुआ होता है।[3]

राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा 1980 के प्रकाशन में, वाक्यांश स्पेगेटी प्रोग्राम का उपयोग खंडित और अव्यवस्थित फाइलों वाले पुराने कार्यक्रमों का वर्णन करने के लिए किया गया था।[4]

स्पेगेटी कोड एक एंटी-पैटर्न का भी वर्णन कर सकता है जिसमें ऑब्जेक्ट-ओरिएंटेड कोड एक प्रक्रियात्मक शैली में लिखा जाता है, जैसे कि ऐसी कक्षाएं बनाना जिनकी विधियां अत्यधिक लंबी और अव्यवस्थित हैं, या बहुरूपता जैसी ऑब्जेक्ट-ओरिएंटेड अवधारणाओं को त्यागना है।[5] स्पेगेटी कोड के इस रूप की उपस्थिति एक प्रणाली की बोधगम्यता को महत्वपूर्ण रूप से कम कर सकती है।[6]

इतिहास

यह स्पष्ट नहीं है कि स्पेगेटी कोड वाक्यांश आम उपयोग में कब आया; हालाँकि, 1977 में गाइ स्टील की मैकरोनी इज़ बेटर दैन स्पेगेटी सहित कई संदर्भ सामने आए।[7] 1978 की पुस्तक ए प्राइमर ऑन डिसिप्लिन्ड प्रोग्रामिंग यूजिंग पीएल/आई, पीएल/सीएस, एंड पीएल/सीटी में, रिचर्ड कॉनवे ने उन प्रोग्रामों का वर्णन किया है जिनकी "स्पेगेटी की प्लेट के समान स्वच्छ तार्किक संरचना होती है",[8] एक वाक्यांश दोहराया गया है 1979 की पुस्तक एन इंट्रोडक्शन टू प्रोग्रामिंग उन्होंने डेविड ग्रिज़ के साथ मिलकर लिखी थी।[9] 1988 के पेपर ए स्पाइरल मॉडल ऑफ सॉफ्टवेयर डेवलपमेंट एंड एन्हांसमेंट में, इस शब्द का उपयोग कोड और फिक्स मॉडल के पुराने अभ्यास का वर्णन करने के लिए किया गया है, जिसमें योजना की कमी थी और अंततः वॉटरफॉल मॉडल का विकास हुआ।[10] 1979 की पुस्तक स्ट्रक्चर्ड प्रोग्रामिंग फॉर द COBOL प्रोग्रामर में, लेखक पॉल नोल ने खराब संरचित स्रोत कोड का वर्णन करने के लिए स्पेगेटी कोड और चूहे के घोंसले वाक्यांशों को पर्यायवाची के रूप में उपयोग किया है।[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]

लसग्ना कोड

लसग्ना कोड उस कोड को संदर्भित करता है जिसकी परतें इतनी जटिल और आपस में जुड़ी हुई हैं कि एक परत में परिवर्तन करने से अन्य सभी परतों में परिवर्तन की आवश्यकता होगी।[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.

बाहरी संबंध