यदि आप उन्हें सही ढंग से गुंजाइश देते हैं, तो पुनर्लेखन बहुत सफल हो सकता है। मुझे नहीं पता कि ये आपके "बीआईजी" (टीएम) प्रोजेक्ट्स की सीमा को पूरा करते हैं, लेकिन मैं आपको कुछ और सफल लेखकों के बारे में बताता हूं।
प्रोजेक्ट 1
जिस कंपनी के लिए मैंने काम किया था, उसके पास एक शेल्फ स्ट्रिप प्रिंटिंग सिस्टम था, जिसका उपयोग आप उन लेबलों पर देख सकते थे, जिन्हें आप एक प्लानोग्राम कहे जाने वाले रिटेल अलमारियों पर देखते हैं । प्लानोग्राम को उद्योग मानक सॉफ्टवेयर में उत्पन्न किया गया था और हमारे उपकरण उस स्टोर को लक्ष्य स्टोर के लिए टेम्पलेट का उपयोग करके शेल्फ स्ट्रिप्स बनाने के लिए पढ़ते हैं। टेम्प्लेटिंग सॉफ़्टवेयर नेस्टेड परिमित राज्य मशीनों के साथ एक गड़बड़ी थी जो कई वर्गों और 3 DLL को फैलाती थी। जब पेग बोर्डों को करने के लिए (तब) पेटेंट लंबित दृष्टिकोण को लागू करने का समय आया, तो यह स्पष्ट था कि वर्तमान कोड का समर्थन नहीं कर सकता है जो हम करना चाहते थे।
समाधान: हमने केवल टेम्पलेट इंजन को फिर से लिखा। हमने मौजूदा आवश्यकताओं का ध्यान रखने के लिए उचित ओओ डिज़ाइन का उपयोग किया, साथ ही साथ नए खूंटी बोर्ड की आवश्यकताओं को भी संबोधित किया। पुनर्लेखन के लिए समय 1 महीना था। अगर हमने पूरे टूल चेन के एक पूरे पैमाने पर पुनर्लेखन किया है तो इसे एक साल से अधिक समय लगेगा - लेकिन हमें ऐसा करने की आवश्यकता नहीं थी।
प्रोजेक्ट 2
एक वेब एप्लिकेशन जो हमारी टीम ने जमीन से बनाया है, अपने मूल डिजाइन को उखाड़ने लगा था। हमारे क्लाइंट के पास नई आवश्यकताओं का एक सूट भी था जो कि हमारे उपयोगकर्ताओं के लिए साइट को बहुत बेहतर बना देगा, यदि आप करेंगे तो "वेब 2.0" के अनुरूप। जबकि हमारे पास मौजूदा ढांचे में हमारे मौजूदा डिज़ाइन के जूते-सींग हो सकते थे, रखरखाव एक बुरा सपना था। हम एप्लिकेशन को आंतरिक रूप से जानते थे, और हम जानते थे कि हमें किन भागों को आगे लाना है और नए संस्करण के हिस्से के रूप में कौन से हिस्से दूर जा रहे हैं।
समाधान: हमारी टीम को पूरा होने में 3 महीने लगे - यह तुच्छ नहीं था। अंतिम उत्पाद तेज, अधिक स्केलेबल और अंतिम उपयोगकर्ताओं के लिए अधिक सुखद था। हमने अपने ग्राहक की अपेक्षाओं को पार किया। उस ने कहा, हमें अपनी टीम को विभाजित करना था ताकि मौजूदा सिस्टम पर अधिक बग बग फिक्स और बैंड-सहायता पैच हो जाएं, जबकि अन्य आधे ने नई प्रणाली पर काम किया। हमारे पास व्यापक परीक्षण किया गया था, और प्रक्रिया में जल्दी शामिल किया गया था। इसका कारण यह है कि हमने इतनी अच्छी तरह से काम किया है क्योंकि हम इस एप्लिकेशन और हमारे क्लाइंट को जानना चाहते हैं।
प्रोजेक्ट 3
मुझे यहां एक विफलता को शामिल करना है। हम एक ऐसे ग्राहक का समर्थन कर रहे थे जिसे आपदा / संकट की स्थिति में उपयोग के लिए सूचना प्रबंधन उपकरण की आवश्यकता थी। हमें एक जावा स्विंग आवेदन विरासत में मिला है जिसे मूल डेवलपर्स ने वास्तव में स्विंग के बिना लिखा था। इससे मेरा मतलब है कि उन्होंने स्विंग से निपटने और UI को ठीक से प्रबंधित करने के लिए सूर्य की सिफारिशों का पालन नहीं किया, नतीजतन आप अनंत ईवेंट लूप और अन्य अजीब और मुश्किल मुद्दों को ट्रैक करने में जुट जाएंगे। परिणामस्वरूप यह बग, उपयोगकर्ता इंटरफ़ेस समस्याओं आदि से ग्रस्त था। यह एक बहुत ही जटिल अनुप्रयोग था। अपनी पवित्रता को बनाए रखने के लिए, हमने खराब लिखित स्विंग ऐप को एक अच्छी तरह से लिखे गए स्विंग ऐप में फिर से लिखने का प्रयास किया।
समाधान: हमने लगभग 4.5 महीने में पुनर्लेखन पूरा किया जब हमने 3 महीने का अनुमान लगाया। एप्लिकेशन ने बेहतर प्रदर्शन किया, दोनों यूआई में और कितना डेटा इसे संभाल सकता है। फिर 2004 में सुनामी आई। उन लोगों की संख्या का सरासर परिमाण जो उन्हें ट्रैक करना था कि स्विंग वास्तव में वे क्या जरूरत के लिए गलत तकनीक थी। हम अपने प्रदर्शन को बनाए नहीं रख सकते थे, और उन्होंने अंततः घर में ओरेकल टीम द्वारा बनाए गए वेब ऐप के साथ एक कोबल्ड के पक्ष में उपकरण छोड़ दिया। निश्चित रूप से हम उस समय जो ज्ञान हमारे पास था, उसके आधार पर हम इसे सही ठहरा सकते हैं, लेकिन फिर से लिखना पर्याप्त आक्रामक नहीं था, और हम अपने ग्राहक को यह बताने में विफल रहे कि लोगों की संख्या के लिए उनकी आवश्यकताएं जो संभवतः ट्रैक करने की आवश्यकता हो सकती थीं। कम।
निष्कर्ष
कभी-कभी आवश्यक होते हैं , और यदि आप इसे सही तरीके से योजना बनाते हैं, तो वे सफलतापूर्वक पूरा हो सकते हैं। आप एक सिस्टम के कुछ हिस्सों के लिए लक्षित पुनर्लेखन के साथ आगे बढ़ सकते हैं, जितना कि आप पूरे बिक्री के पुनर्लेखन के लिए कर सकते हैं। अंत में, किसी परियोजना के विफल होने का कारण स्वयं को फिर से लिखना नहीं है। जबकि हम कभी भी क्लैरवॉयंट नहीं हो सकते हैं, हम कुछ सबसे खराब स्थिति में आ सकते हैं। मैंने अपने सिस्टम को दो बार सबसे खराब स्थिति के समर्थन में डिजाइन करना सीखा है, जिसके बारे में मैं सोच सकता हूं। संकट प्रबंधन प्रणाली के मामले में, यह पर्याप्त नहीं था - वास्तविक संख्या हमारे द्वारा दी गई सबसे खराब स्थिति से 20 गुना अधिक थी। लेकिन यह सबसे बुरा मामला नहीं था, जिसके बारे में हम सोच सकते थे।
- पुनर्लेखन की खातिर किए गए पुरस्कार आपके मित्र नहीं हैं। हमेशा बहुत सी जटिलताएं होती हैं जो आप नहीं देखते हैं, और आप पाएंगे कि आपके द्वारा देखी जाने वाली बदसूरत चीजें आपके क्लाइंट के लिए प्रशिक्षण उपकरण हैं। हमेशा अपने ग्राहक को नियमित अंतराल पर अपनी वर्तमान प्रगति दिखाएं ताकि वे आपको सबसे खराब अपराधों को पकड़ने में मदद कर सकें।
- लक्षित कोड आपके कोड आधार में सबसे खराब अपराधों से निपटने के लिए उपयोगी हैं। यदि आप दायरे को सीमित कर सकते हैं और अपनी अधिकांश समस्याओं का समाधान कर सकते हैं, तो एक संपूर्ण पुनर्लेखन न करें।