क्या ऐतिहासिक रूप से विकसित सॉफ्टवेयर के लिए एक नामित विरोधी पैटर्न है? [बन्द है]


28

क्या कोई एंटी पैटर्न है जो ऐतिहासिक रूप से विकसित सॉफ्टवेयर सिस्टम का वर्णन करता है जहां कई डेवलपर्स ने सिस्टम में नई सुविधाओं को जोड़ा है, लेकिन किसी ने वास्तव में समग्र वास्तुकला पर नजर नहीं रखी और न ही कभी रिफैक्टोरिंग किए गए थे?

मुझे लगता है कि ऐसा तब होता है जब प्रबंधन / ग्राहक नई सुविधा के लिए लगातार पूछता है और कोई भी कभी भी कुछ भी रिफ्लेक्टर नहीं करता है, लेकिन इससे पहले जो अन्य डेवलपर्स के लिए किया जाता है उसे आगे जोड़ता है।

एक कारण यह भी हो सकता है कि डेवलपर केवल सॉफ्टवेयर सिस्टम से अभिभूत है और वास्तव में यह नहीं समझता है कि यह वर्तमान में कैसे काम करता है और फिर बहुत अंत में अपना कोड जोड़ता है / glues करता है (कोड को फिर से भरने और इसे बदलने के बजाय।)

इसलिए समय के साथ व्यवस्था को बनाए रखना कठिन और कठिन होता जा रहा है।

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


4
गैर-प्रोग्रामर शायद एंटीपैटर्न, जा रहा है, y'know, प्रोग्रामिंग शब्दों को समझने के लिए नहीं जा रहे हैं। मुझे लगता है कि आप जो चाहते हैं वह एक सादृश्य है ...
इज़्काटा

1
इसके अलावा, एक विरोधी पैटर्न को एक डिज़ाइन पैटर्न होना चाहिए ... जिसे आपको कॉपी नहीं करना चाहिए। और जो आप वर्णन कर रहे हैं वह वास्तव में डिज़ाइन पैटर्न के बजाय एक सॉफ़्टवेयर प्रबंधन सिंड्रोम है।
स्टीफन सी


इसे "फीचर-रेंगना" या "स्कोप रेंगना" कहा जाता है।
रॉबर्ट हार्वे

जवाबों:


45

आप तकनीकी ऋण का उल्लेख करते हैं ।

हम सभी समय पर विकसित उत्पादों में तकनीकी ऋण लेते हैं; Refactoring इस तकनीकी ऋण को कम करने के बहुत ही सामान्य और प्रभावी तरीकों में से एक है, हालांकि कई कंपनियां अपने तकनीकी ऋण का भुगतान कभी नहीं करती हैं। ये कंपनियां अपने सॉफ़्टवेयर को सड़क के नीचे बहुत अस्थिर वर्षों में ढूंढती हैं, और तकनीकी ऋण इतना भीषण हो जाता है कि आप इसे बढ़ाकर भुगतान नहीं कर सकते, क्योंकि इसे इस तरह से भुगतान करने में बहुत लंबा समय लगेगा।

तकनीकी ऋण में पद होता है, क्योंकि यह ऋण के समान व्यवहार का अनुसरण करता है। आप ऋण प्राप्त करते हैं, और जब तक आप खर्च करते रहते हैं (सुविधाएँ बनाते हैं) और उस ऋण का भुगतान नहीं करते हैं, तो यह केवल बढ़ेगा। बहुत कुछ ऋण की तरह, जब यह बहुत बड़ा हो जाता है, तो आप उन बिंदुओं पर पहुंच जाते हैं, जहां आप इसे पूर्ण-लेखन जैसे खतरनाक कार्यों के साथ पूरी तरह से बहा देना चाहते हैं। वास्तविक ऋण की तरह, जैसा कि यह एक निश्चित बिंदु तक पहुंचता है, यह आपके खर्च करने की क्षमता (सुविधाओं को बनाने) में पूरी तरह से बाधा डालता है।

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


तकनीकी ऋण का प्रबंधन

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

तो कभी-कभी यह छोटी अवधि के लिए ऋण प्राप्त करने के लिए लायक होता है, लेकिन ऐसा शायद ही कभी होता है, और सभी ऋणों के साथ, अवधि बेहतर होती है। इसलिए अंततः (अधिमानतः जल्दी से ) आप तकनीकी ऋण जमा करने के बाद, आपको इसे चुकाना होगा, ये सामान्य दृष्टिकोण हैं:

  • पुनर्रचना
    • यह आपको उन कोड्स के बिट्स लेने की अनुमति देता है जो केवल कार्यान्वयन के माध्यम से या उसके पूरा होने के बाद गलत तरीके से भाग जाने का एहसास कराते थे, और उन्हें उनके सही स्थान पर डालते हैं (या वैसे भी अधिक सही)।
  • पुनर्लेखन
    • यह एक दिवालियापन की तरह है। यह स्लेट को साफ करता है, लेकिन आप कुछ भी नहीं के साथ शुरू करते हैं और एक ही गलतियाँ, या यहां तक ​​कि बड़े भी करने का हर मौका है। तकनीकी ऋण के लिए उच्च जोखिम उच्च इनाम दृष्टिकोण, लेकिन कभी-कभी यह आपका एकमात्र विकल्प है। हालाँकि ऐसा बहुत कम ही होता है जब कि कई मामले आपको बताएंगे।
  • वास्तुकला अवलोकन
    • यह एक सक्रिय तकनीकी ऋण भुगतान-डाउन दृष्टिकोण के अधिक है। यह तकनीकी विवरणों पर अधिकार के साथ किसी व्यक्ति द्वारा किया जाता है ताकि परियोजना की योजनाओं और शेड्यूल की परवाह किए बिना कार्यान्वयन को रोक दिया जा सके ताकि यह सुनिश्चित हो सके कि कोई तकनीकी ऋण प्राप्त नहीं हुआ है।
  • कोड फ्रीज
    • परिवर्तनों का कोड जमा करने से आप सांस लेने वाले कमरे की अनुमति दे सकते हैं जहाँ आपका ऋण ऊपर या नीचे नहीं जाता है। यह आपको अपने दृष्टिकोण पर उच्चतम आरओआई होने की उम्मीद के साथ तकनीकी ऋण को कम करने के लिए अपने दृष्टिकोण की योजना बनाने का समय देता है।
  • modularization
    • यह एक टीयर -2 दृष्टिकोण की तरह ही उपलब्ध है जब आप या तो वास्तुकला अवलोकन करने के लिए रोजगार है है पहले से ही एक मॉड्यूलर प्रणाली, या पुनर्रचना की ओर ले जाने के लिए। जब आपके पास एक मॉड्यूलर प्रणाली होती है, तो आप एक अलग तरीके से सिस्टम के पूरे टुकड़ों में ऋण का भुगतान कर सकते हैं। यह आपको आंशिक री-राइट्स, आंशिक रिफैक्टरिंग करने के साथ-साथ दर तकनीकी ऋण को कम करने की अनुमति देता है क्योंकि अलगाव केवल उन क्षेत्रों में ऋण रखता है जहां सुविधाएँ अंदर चली गई थीं, सिस्टम के चारों ओर फैलने के विपरीत।
  • स्वचालित परीक्षण
    • स्वचालित परीक्षण आपके तकनीकी ऋण के प्रबंधन में सहायता कर सकता है, क्योंकि वे आपको सिस्टम में परेशानी के स्थानों की पहचान करने में मदद कर सकते हैं, उम्मीद है कि इससे पहले कि उन क्षेत्रों में ऋण बहुत बड़े हो गए हों, लेकिन इस तथ्य के बाद भी वे इंजीनियरों को उन खतरनाक क्षेत्रों से अवगत करा सकते हैं पहले ही एहसास नहीं हुआ होगा। इसके अलावा, एक बार जब आप स्वचालित परीक्षण प्राप्त कर लेते हैं, तो आप बहुत अधिक टूटने के लिए चिंता के बिना अधिक स्वतंत्र रूप से रिफ्लेक्टर चीजें कर सकते हैं। इसलिए नहीं कि डेवलपर्स चीजों को नहीं तोड़ेंगे, बल्कि इसलिए कि जब वे चीजों को तोड़ेंगे , तो उन्हें पता चलेगा कि अत्यधिक ऋणग्रस्त सिस्टम में मैनुअल परीक्षकों पर भरोसा करना मुद्दों को खोजने के लिए एक खराब ट्रैक रिकॉर्ड है।

2
अच्छा जवाब, मैं इसे सॉफ्टवेयर डेवलपमेंट कहने जा रहा था, लेकिन आप इसे तकनीकी ऋण कह रहे हैं। :-)
एनकरिट

हा हा! हाँ, मुझे लगता है कि यह एक बहुत ही आम समस्या है। लेकिन मुझे तकनीकी विभाग पसंद है और मुझे लगता है कि यह बहुत अच्छी तरह से फिट बैठता है।
जेन्स

नई सुविधाओं के परिणाम के बिना बग को ठीक किए बिना एक मूल डिजाइन तकनीकी ऋण नहीं बना सकता है?
जेएफओ

1
@ जेफ़ो हाँ, मुद्दा रेंगने वाले करतब की बीमारी से अधिक मंथन की एक कलाकृति है, हालांकि एक दूसरे का कारण बनता है। जब मैं कंप्यूटर पर वापस आऊंगा तो सही करूंगा, टिप्पणी के लिए धन्यवाद
जिमी होफा

" अत्यधिक ऋणी प्रणालियों में मैनुअल परीक्षकों पर भरोसा करना मुद्दों को खोजने के लिए एक खराब ट्रैक रिकॉर्ड है। " - बहुत विश्वसनीय है, लेकिन क्या आपके पास स्रोत है?
आरोन हॉल

30

आपका वर्णन फूटे और योडर की बिग बॉल ऑफ मड में फिट बैठता है :

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

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

क्यों एक प्रणाली MUD की बड़ी गेंद बन जाती है? कभी-कभी, बड़े, बदसूरत सिस्टम THROWAWAY CODE से निकलते हैं । THROWAWAY CODE त्वरित और गंदा कोड है जिसे केवल एक बार उपयोग करने का इरादा था और फिर त्याग दिया गया। हालांकि, आकस्मिक संरचना और खराब या अस्तित्वहीन प्रलेखन के बावजूद, इस तरह के कोड अक्सर अपने स्वयं के जीवन पर ले जाते हैं। यह काम करता है, तो इसे ठीक क्यों करें? जब एक संबंधित समस्या उत्पन्न होती है, तो इसे संबोधित करने का सबसे तेज तरीका जमीन से ऊपर एक उचित, सामान्य कार्यक्रम को डिजाइन करने के बजाय, इस कार्य कोड को शीघ्रता से संशोधित करना हो सकता है। समय के साथ, एक साधारण फेंकने वाला कार्यक्रम MUD के बड़े आकार को भूल जाता है।

यहां तक ​​कि अच्छी तरह से परिभाषित आर्किटेक्चर वाले सिस्टम संरचनात्मक क्षरण के लिए प्रवण हैं। किसी भी सफल प्रणाली को आकर्षित करने वाली बदलती आवश्यकताओं के अथक हमले धीरे-धीरे इसकी संरचना को कमजोर कर सकते हैं। सिस्टम जो एक बार सुव्यवस्थित हो गए थे, क्योंकि PIECEMEAL GROWTH धीरे-धीरे सिस्टम के तत्वों को अनियंत्रित तरीके से फैलाने की अनुमति देता है।

यदि इस तरह फैलाव जारी नहीं रहता है, तो सिस्टम की संरचना इतनी बुरी तरह से समझौता हो सकती है कि इसे छोड़ देना चाहिए। एक क्षय पड़ोस के साथ, एक नीचे की ओर सर्पिल ensues। चूंकि सिस्टम कठिन और समझने में कठिन हो जाता है, इसलिए रखरखाव अधिक महंगा, और अधिक कठिन हो जाता है। अच्छे प्रोग्रामर वहां काम करने से मना कर देते हैं। निवेशक अपनी पूंजी निकाल लेते हैं। और फिर भी, पड़ोस के साथ, बचने के तरीके हैं, और यहां तक ​​कि रिवर्स, इस तरह की गिरावट। ब्रह्मांड में किसी भी चीज़ के साथ, एंट्रोपिक बलों का मुकाबला करने के लिए ऊर्जा के निवेश की आवश्यकता होती है। सॉफ्टवेयर जेंट्रीफिकेशन कोई अपवाद नहीं है। सॉफ्टवेयर में एन्ट्रापी को गिरफ्तार करने का तरीका इसे रिफलेक्टर करना है। रीफैक्टरिंग के लिए एक निरंतर प्रतिबद्धता एक प्रणाली को MUD के बड़े कॉल में रखने से ले सकती है ...

  • ... कीचड़ के सबसे प्रभावी दुश्मनों में से एक धूप है। स्क्रूटनी एरो के लिए कन्वेक्टिड कोड को सब्जेक्ट करने से इसके रीफैक्टरिंग, रिपेयर और रिहेबिलिटेशन के लिए स्टेज सेट हो सकता है। कोड समीक्षा एक तंत्र है जिसे एक दिन में कोड को उजागर करने के लिए उपयोग किया जा सकता है।

http://www.laputan.org/images/pictures/Mir-Mud.gif


मैं "कीचड़ की बड़ी गेंद" पर आया, लेकिन थोड़ी अलग व्याख्या के साथ। अब जब मैंने आपका उत्तर पढ़ लिया और यह भी पढ़ लिया कि "कीचड़ की बड़ी गेंद" पर विकिपीडिया लेख क्या कहता है, तो यह वास्तव में बहुत अच्छा लगता है। (हालांकि मुझे लगता है कि नई विशेषताओं को लागू करने से रोकने के लिए प्रबंधन को समझाने की कोशिश करते हुए और रिफ्लेक्टरिंग करते समय शब्द ही बहुत आकर्षक नहीं हो सकता है।)
जेन्स

2
@ मेरे पढ़ने के अनुसार, आपके प्रबंधन ने गड़बड़ी से बचने के लिए प्रबंधन को समझाने के तरीके के बारे में नहीं पूछा (अगर ऐसा किया, तो मैं बीबीएमएम का भी उल्लेख नहीं करूंगा, क्योंकि यह अप्रासंगिक होगा / उत्तर तकनीकी ऋण होगा )। क्या मैं हालांकि पढ़ा था: "विरोधी पैटर्न है कि एक ऐतिहासिक हो गई सॉफ्टवेयर प्रणाली जहां कई डेवलपर्स बस प्रणाली के लिए नई सुविधाओं को जोड़ा, लेकिन कोई भी वास्तव में समग्र वास्तुकला पर नजर रखा है और न ही refactorings कभी किया गया वर्णन करता है" - BBoM है कि
कुटकी

2
तुम सही हो। मेरा प्रश्न मेरे मन में एक शब्द होने के बारे में था। सवाल के दायरे से बाहर प्रबंधन एक दूसरी बात है (लेकिन मेरे दिमाग में है)। लेकिन सवाल के लिए के रूप में अपने जवाब पूरी तरह से फिट बैठता है (यह पहले से ही upvoted)।
जेन्स

1
कोड की समीक्षा - महान कॉल! जब मैं कंप्यूटर पर वापस आऊंगा तो ऊपर तकनीकी ऋण सूची को प्रबंधित करूंगा। इसे उत्तर के रूप में स्वीकार किया जाना चाहिए, मैं इस शब्द को भूल गया।
जिमी हॉफ

1
@ जेन्स बीबीएमएम लेख पढ़ते हैं - अंत में संकल्प और मरम्मत के सुझाव हैं।
gbjbaanb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.