स्पेगेटी कोड

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

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

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

"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!"

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

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

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

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

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

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

यह भी देखें

 * मिट्टी की बड़ी गेंद, सॉफ्टवेयर का एक टुकड़ा जिसमें कोई बोधगम्य वास्तुकला नहीं है
 * अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता, मनभावन अस्पष्ट सी कोड तैयार करने की प्रतियोगिता
 * तकनीकी ऋण
 * प्रोग्रामिंग शैली के तत्व
 * केवल-लिखने वाली भाषा, ऐसे विचित्र सिंटैक्स वाली भाषा जिसके परिणामस्वरूप कोड समझ से बाहर है

बाहरी संबंध

 * Go To Statement Considered Harmful. The classic repudiation of spaghetti code by Edsger Dijkstra
 * We don't know where to GOTO if we don't know where we've COME FROM by R. Lawrence Clark from DATAMATION, December, 1973
 * Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes
 * Objects and Frameworks – Taking a Step Back by Brian Rinaldi
 * Programming Pasta - Spaghetti, Lasagna, Ravioli and Macaroni Code
 * Pasta Theory of Programming