विरासत सॉफ्टवेयर विकास की दुनिया में आपका स्वागत है।
आपके पास कोड की हजारों, लाखों, 10s लाखों पंक्तियों की 100s हैं।
कोड की ये लाइनें मूल्यवान हैं, इसमें वे एक राजस्व स्ट्रीम का उत्पादन करते हैं और उन्हें प्रतिस्थापित करना संभव नहीं है।
आपका व्यवसाय मॉडल उस कोड आधार का लाभ उठाने पर आधारित है। तो आपकी टीम छोटी है, कोड आधार बड़ा है। लोगों को अपने कोड का नया संस्करण खरीदने या मौजूदा ग्राहकों को खुश रखने के लिए सुविधाओं को जोड़ना आवश्यक है।
एक आदर्श दुनिया में, आपका विशाल कोड आधार वजू का परीक्षण किया जाता है। आप एक आदर्श दुनिया में नहीं रहते हैं।
एक कम सही दुनिया में, आपके पास अपने तकनीकी ऋण को ठीक करने के लिए बजट है - अपने कोड को इकाई परीक्षण योग्य टुकड़ों में तोड़ दें, गहन एकीकरण परीक्षण और पुनरावृति करें।
यह, हालांकि, नई सुविधाओं का उत्पादन किए बिना ऋण का भुगतान कर रहा है। जो "मौजूदा कोड से मुनाफे को काटते हुए, अपग्रेड करने के लिए प्रोत्साहन उत्पन्न करने के लिए इसे संशोधित करते हुए" के व्यापार मामले से मेल नहीं खाता।
आप कोड की बड़ी मात्रा ले सकते हैं और अधिक आधुनिक तकनीकों का उपयोग करके इसे फिर से लिख सकते हैं। लेकिन हर जगह जब आप मौजूदा कोड के साथ बातचीत करते हैं तो आप संभावित विराम बिंदुओं को उजागर करेंगे। उस सिस्टम में हैक जिसे आपने वास्तव में छुटकारा दिलाया था एक उप-प्रणाली में एक quirk के लिए मुआवजा दिया जिसे आपने फिर से नहीं लिखा। हमेशा।
आप जो कर सकते हैं वह सावधानी से करें। आप उस कोड का कुछ हिस्सा पा सकते हैं जिसे आप वास्तव में समझते हैं, और जिसका व्यवहार और बाकी सिस्टम के साथ बातचीत अच्छी तरह से समझ में आती है। आप इसका आधुनिकीकरण कर सकते हैं, इकाई परीक्षणों को जोड़ सकते हैं और इसके व्यवहार को भी स्पष्ट कर सकते हैं।
फिर बाकी ऐप के हिस्सों को ढूंढें जो मुख्य रूप से इसके साथ बातचीत करते हैं, और एक समय में एक पर हमला करते हैं।
जैसा कि आप ऐसा करते हैं, आप सबसिस्टम में सुधार कर सकते हैं, उन विशेषताओं को जोड़ सकते हैं जो ग्राहक भुगतान करने के लिए तैयार हैं।
संक्षेप में, यह संभव है - उन चीजों को तोड़ने के बिना परिवर्तन करना जो एक व्यावसायिक मामला प्रदान करते हैं।
लेकिन यह आपका सवाल नहीं है। आपका सवाल है, "मैं कुछ ऐसा कर रहा हूं जो बहुत बड़ा है, और सामान तोड़ने की संभावना है, और मैं सर्वोत्तम प्रथाओं का पालन कैसे करूं?"
कुछ बड़ा करते समय, यह सच है कि यदि आप इसे मज़बूती से करना चाहते हैं, तो आप बग्स को ट्रैक करने और उन्हें लिखने के बजाय उन्हें ठीक करने में अधिक प्रयास खर्च करने का प्रयास करते हैं। यह सॉफ्टवेयर विकास का सामान्य नियम है: सामान लिखना आसान है, जिससे यह काम करना मुश्किल है।
आपके पास संभवत: आपके सिर पर एक व्यवसाय का मामला लटका हुआ है, जहां आपने कुछ हितधारक से वादा किया है कि यह बड़े पैमाने पर परिवर्तन होता है। पसंद है"।
यदि आपके पास शक्ति और बजट है, तो वास्तव में प्रयास करते हुए विश्वास पैदा करें कि परिवर्तन काम करता है, या बस परिवर्तन को अस्वीकार कर देता है। यह डिग्री का मामला है, दयालु नहीं।
यदि आपके पास उतनी शक्ति नहीं है, लेकिन फिर भी कुछ है, तो जोर देकर कहें कि नई प्रणाली इकाई परीक्षण योग्य है । यदि आप कुछ सबसिस्टम को फिर से लिखते हैं, तो इस बात पर जोर दें कि नया सबसिस्टम छोटे भागों से बना है जिसमें उनके आसपास अच्छी तरह से निर्दिष्ट व्यवहार और इकाई परीक्षण हैं।
फिर सबसे खराब स्थिति है। आप कर्ज में डूबते चले जाते हैं। आप और अधिक कोड आदेश सुविधा प्राप्त करने के लिए है कि कमजोर और अधिक कीड़े होने से कार्यक्रम के भविष्य के खिलाफ उधार ले अब , और परिणाम लानत। आप सबसे खराब मुद्दों को खोजने के लिए QA को स्वीप करते हैं, और बाकी को अनदेखा करते हैं। यह वास्तव में कभी-कभी व्यवसाय के दृष्टिकोण से सही उत्तर है, क्योंकि यह अब सबसे सस्ता है। मुनाफे को उत्पन्न करने के लिए ऋण में जाना एक वैध व्यावसायिक रणनीति है, खासकर यदि दिवालियापन के माध्यम से ऋण को साफ़ करना (कोड को छोड़ना) मेज पर है।
एक बड़ी समस्या यह है कि शायद ही निर्णय निर्माताओं और प्रोग्रामरों के साथ गठबंधन करने वाले कंपनी मालिकों के प्रोत्साहन हैं। वहाँ 'पहुंचाने' के लिए बहुत दबाव होता है, और लगभग अदृश्य (अपने वरिष्ठों को) पैदा करके ऐसा करना तकनीकी ऋण एक महान और कभी-कभी मध्यम अवधि की रणनीति है। यहां तक कि अगर आपके वरिष्ठ / हितधारकों को उस ऋण को नहीं बनाकर सबसे अच्छा काम किया जाएगा ।