C ++ में IBM असेंबलर + COBOL को फिर से लिखना


13

मैं एक कार किराए पर लेने की कंपनी के लिए एक किराये के एजेंट / प्रबंधक के रूप में काम करता हूं जो कि एक किराये की प्रणाली पर चल रहा है जो 1972 में लिखा गया था। मैंने फैसला किया कि शायद यह एक अद्यतन के लिए समय था। पृष्ठभूमि के एक बिट के लिए, यहां पागलपन का एक छोटा उदाहरण है जिसे हमें इस कार्यक्रम से दैनिक रूप से निपटना है:

एक किराये के एजेंट को यह याद रखना चाहिए कि एसी स्क्रीन का मुद्रण कार्य क्षेत्र में "एमएक्ससी" का उपयोग करता है (सब कुछ शॉर्ट कोड पर आधारित है), जो "अनुबंध पर MaXimum प्रदर्शन" के लिए पूरी तरह से खड़ा है, जबकि दूसरे पर इसे पीआर (PRint के लिए) की आवश्यकता होती है कार्य क्षेत्र, लेकिन कई स्क्रीन पीटी (प्रिंसटी के लिए) फ़ील्ड में वाई का उपयोग करते हैं, फिर भी पीआरटी (पीआरआईएनटी के लिए) फ़ील्ड में दूसरी स्क्रीन वाई का उपयोग करती है, फिर भी एक और स्क्रीन के लिए उपयोगकर्ता को हिट करने की आवश्यकता होती है (लेकिन अगले में प्रवेश नहीं होता है) अक्षर, जैसा कि एक नई पंक्ति वर्ण है, यह नंबर पैड पर दर्ज होना चाहिए) और फिर F8, एक अलग लेकिन संबंधित स्क्रीन के लिए बस F8 की आवश्यकता होती है, कुछ स्क्रीन में PRT ​​लेबल वाला एक फ़ील्ड होता है, जो PRINT के लिए होना चाहिए, लेकिन वास्तव में फ़ील्ड कई संकेतों के माध्यम से जाने के बाद कुछ भी नहीं होता है और प्रिंटिंग स्वचालित रूप से होती है, और अभी भी अधिक स्क्रीन पर PRINT Y / N का लेबल लगा होता है।जो संचालन के लिए वाई के लिए पूरी तरह से चूक करता है जिसमें एक अन्य स्थान पहले से ही कागजी कार्रवाई कर रहा है, और एन के संचालन के लिए जिसमें एक अन्य डीलर को कागजी कार्रवाई की आवश्यकता होगी।

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

यह मुझे मेरे सवालों की ओर ले जाता है।

पहला तकनीकी है। भविष्य में रखरखाव में सुधार के विचार के साथ, मेरा विचार इसे विधानसभा भाषा की तुलना में उच्च-स्तरीय भाषा में फिर से लिखना है। मेरे अनुभव का क्षेत्र C ++ में है, इसलिए यह मेरे लिए स्पष्ट विकल्प है। कंपनी को कार्यक्रम को अपडेट करने के लिए एक आसान तरीके की सख्त आवश्यकता है, क्योंकि मैंने हाल ही में एक लेख पढ़ा है जिसमें मैंने जिस आदमी के साथ बात की थी, ने कहा कि टीम ने कड़ी मेहनत की है, और उन्हें यह घोषणा करते हुए गर्व है कि अब इस कार्यक्रम में 5 के लिए समर्थन है -digit स्थान कोड (4 के बजाय) और 8 अंकों की कार संख्या (7 के बजाय)। अद्यतनों पर मेरा दर्शन, यहां तक ​​कि इस गंभीर स्थिति में, जोएल के साथ है: http://www.joelonsoftware.com/articles/fog0000000069.html संक्षेप में, फिर से लिखना वृद्धिशील होना चाहिए, बजाय सब कुछ बाहर फेंकने से पहले। और नए सिरे से शुरू।

क्या आईबीएम असेंबली को सी ++ के साथ एकीकृत करने का एक आसान तरीका है, और यदि हां, तो मुझे यह कैसे करना चाहिए? मैं asm कीवर्ड के बारे में पूरी तरह से वाकिफ हूं, लेकिन मुझे नहीं पता कि इसका उपयोग करना सबसे अच्छा है या कुछ और। क्या इस तरह की योजना की सलाह है? मैं g ++ और GNU मेक का उपयोग करते हुए लिनक्स पर अपना ज्यादातर काम करता हूं, इसलिए उस के लिए विशिष्ट उत्तर का स्वागत किया जाता है, लेकिन निश्चित रूप से आवश्यक नहीं है (क्योंकि मुझे नहीं पता है कि उनके पास किस प्रकार की बिल्ड सिस्टम है, लेकिन मुझे लगभग कोई संदेह नहीं है)।

दूसरा प्रश्न अधिक राजनीतिक है। मुझे इस कंपनी को राजी करने के बारे में कैसे जाना चाहिए कि उन्हें स्विच बनाने की आवश्यकता है? सैद्धांतिक लागत बचत बहुत बड़ी है (मेरे अनुमानों के आधार पर, कंपनी प्रति वर्ष अतिरिक्त मिलियन या इतने डॉलर बर्बाद कर रही है, बस प्रशिक्षण लागत में वृद्धि के साथ कार्यक्रम के साथ बातचीत करने का तरीका जानने के लिए), लेकिन मेरे प्रस्तावित बदलाव शायद सभी को डाल देंगे। वर्तमान प्रोग्रामर काम से बाहर हैं, क्या उन्हें अधिनियमित किया जाना चाहिए, इसलिए परिवर्तन के लिए महान संरचनात्मक प्रतिरोध है।

संपादित करें: मुझे समझाना चाहिए कि मुझे क्यों संशोधित करना है कि कंपनी पहले से ही मेरे लिए सबसे अच्छा समाधान है। मैं अभी भी अन्य सुझावों के लिए खुला हूं, क्योंकि यह एक कार्यक्रम का एक राक्षस है, हालांकि। मैंने पहले कभी भी प्रोग्रामिंग काम नहीं किया है, इसलिए कृपया मुझे किसी भी गलत विश्लेषण पर सही करें जो मैं दे सकता हूं।

सबसे पहले, ऑफ-द-शेल्फ समाधान है।

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

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

अंत में, भविष्य को देखते हुए, मैं सिर्फ यूजर इंटरफेस में सुधार और कुछ बग को ठीक नहीं करना चाहता। मैं उन 'जरूरी' मुद्दों को अपडेट करने के बाद, कंपनी से प्रौद्योगिकी से संबंधित मूलभूत तरीके से अपडेट करने की उम्मीद कर रहा था। इस तरह के मुद्दों पर 1-2 साल बिताने के बाद, मेरी योजना प्रबंधन में वापस जाने और अधिक नाटकीय परिवर्तनों का प्रस्ताव करने की थी। कंपनी द्वारा चलाए जा रहे ऐसे कई तरीके हैं जो तकनीकी रूप से बेहतर हो सकते हैं कि वे अभी उपयोग नहीं कर रहे हैं। उदाहरण के लिए, प्रत्येक क्षेत्र बहुत अधिक उसी तरह संचालित होता है। कारों को वितरित करने के लिए स्थानीय प्रमुख हवाई अड्डा केंद्रीय केंद्र है। वे मुख्य रूप से एक आवश्यक आधार पर भेजे जाते हैं। हालांकि, हवाई अड्डे का उपयोग सभी कार्यों के लिए घर के आधार के रूप में किया जाता है। वे एक कार में दो लोगों को मेरे स्थान पर भेजेंगे, जिससे हमें एक कार लेने की जरूरत न हो, फिर वे जिस कार में आए थे, उसके साथ हवाई अड्डे पर वापस जाएं, साथ ही वे जो वापस ले रहे हैं (हम हवाई अड्डे से 32 मील दूर हैं)। फिर वे दो कारों में हमसे 5 मील दूर स्थान पर आएंगे और उनमें से एक को छोड़ देंगे, फिर अपनी दूसरी कार से हवाई अड्डे पर लौटेंगे। वे ऐसा करते हैं, भले ही जिस कार को हमने वापस भेजा हो, वह उसी तरह की कार हो, जिसकी हमें जरूरत है। मैं अब लगभग दो साल के लिए कंपनी के साथ रहा हूं, और मैंने केवल उन्हें कार की कमी (इसलिए लगभग तीन बार) की सबसे चरम आपात स्थिति में इस से विचलित कर दिया है। मैं हर क्षेत्र में काम करने वाले 4 लोगों को एक स्वचालित समय-निर्धारण प्रणाली के साथ बदलूंगा जो यह निर्धारित करता है कि कारें कहाँ जाती हैं और कोशिश करें और उस मार्ग को खोजें जिसमें सभी कारों को वितरित करने के लिए कम से कम समय + मील + ड्राइवरों की आवश्यकता होती है जहाँ उन्हें होने की आवश्यकता है, एक के रूप में उच्च स्तर के सुधारों का उदाहरण मुझे कुछ दिन जोड़ने की उम्मीद है।

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


3
हरक्यूलिस एमुलेटर में देखें - आईबीएम मेनफ्रेम के कोर ओएस में बहुत जादू है जिसे अनुकरण करने की आवश्यकता है।
यन रामिन

मैं ईमानदारी से "शुरू से फिर से देखना" (खराब C64 चुटकुला) देखूंगा। गंभीरता से, हालांकि, चश्मे की जांच करें और देखें कि एक नया GUI लिखने के लिए आपको क्या करना पड़ सकता है। जब तक डेटाबेस इंटरफ़ेस समान है, और यह निर्धारित करने के लिए बहुत समय और शोध करेगा, तो आप सुनहरा हैं - और $ # && पैसे का लोड बनाने के लिए कतार में :)

8
यदि वर्तमान प्रणाली वास्तव में काम करती है तो आपको ग्राहक के लिए भुगतान करने के लिए एक बहुत अच्छा कारण होना चाहिए। इसके अलावा, आप वर्तमान प्रणाली को पुन: पेश करने के लिए आवश्यक रूप से काम की मात्रा को बहुत कम समझेंगे - बस आपको लगता है कि आपको वर्तमान प्रणाली को पूरी तरह से पहले समझने की आवश्यकता है - अपने मूल अनुमान की तुलना में अपने पुनर्लेखन को और भी अधिक महंगा बनाना। यह आपको हतोत्साहित करने के लिए नहीं है, बल्कि यह सुनिश्चित करने के लिए कि आप वास्तव में जानते हैं कि जिस कार्य के लिए आप साइन अप कर रहे हैं, वह आपको वापस नहीं कर सकता है। इसके अलावा, अपने काम को बढ़ाएँ - दूसरे शब्दों में अभी के लिए मेनफ्रेम पर रहें।

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

@ डेविड स्टोन मैं एक बार एक प्रोजेक्ट में था जो हमने "नए या पुराने इंटरफ़ेस का चयन" किया था। यह पूरी तरह से विकास के नरक में चला गया - कोड को कसकर इंटरफ़ेस के साथ जोड़ा गया था और तेजी से if (m_newInterface)स्पेगेटी कोड कोड आधार पर दिखाई देने लगा। Decoupling और Refactoring ने काफी लंबा समय लिया, जब यह किया गया था, अधिकांश उपयोगकर्ता पहले से ही नए इंटरफ़ेस पर चले गए हैं (कई वर्षों तक सोचें)।
विटोर पाय

जवाबों:


4

खुद को तकनीकी मोर्चे पर सीमित करना ...

मेरा सुझाव है कि आप उस वातावरण को निर्धारित करके शुरू करें जिसमें आवेदन चलता है। "मेनफ्रेम" का अर्थ कुछ अलग-अलग चीजों से हो सकता है, जिसे देखते हुए आवेदन की आयु CICS या IMS हो सकती है । यह भी संभव है कि मूल लेखकों ने अपना काम शुरू किया।

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

आवेदन की आयु को देखते हुए, कुछ और विचार यह है कि असेंबलर जिसके साथ आप C ++ को एकीकृत करना चाहते हैं, वह भाषा पर्यावरण (LE) के अस्तित्व को दर्शाता है । जैसे, जब तक असेंबलर को ले-कॉनफ़ॉर्मिंग के लिए अपडेट नहीं किया जाता है, तब तक आपको कुछ कठिनाई होगी क्योंकि सी और सी ++ ले-कंप्लेंट हैं और उनके कॉलर्स और कैले को भी अनुरूप होना चाहिए।

विचार के लिए एक और बिंदु, अगर यह एप्लिकेशन एक रुग्ण मेनफ्रेम पर चल रहा है, तो आप एक ऐसे अनुप्रयोग के साथ एकीकृत करने की कोशिश कर रहे होंगे जो असमर्थित हार्डवेयर और सॉफ़्टवेयर पर चलता है। यह 1989 में लिखे गए एक आवेदन के साथ एकीकृत करने की कोशिश के विपरीत नहीं होगा जो अपने मूल हार्डवेयर पर डॉस 4.01 पर चलता है।


एप्लिकेशन टीपीएफ का उपयोग भी कर सकता है , जो रूपांतरण को बहुत कठिन बना देगा।
गिल्बर्ट ले ब्लैंक

13

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

जिस भी तरीके से कंपनी अंत में जाती है, उसे पहले इस बात का ठोस विश्लेषण करना होता है कि सॉफ्टवेयर आज क्या करता है और नए समाधान के लिए क्या आवश्यकताएं हैं।

तो आप यह विश्लेषण करने की पेशकश क्यों नहीं करते?


7
+1 यह एकमात्र उत्तर है जो तकनीकी समाधान का प्रस्ताव करने से पहले मौजूदा एप्लिकेशन और कंपनी के अनुरोधों के पूर्ण विश्लेषण का प्रस्ताव करता है। मुझे पुराने मज़ाक की याद दिलाता है: आप कोडिंग शुरू करते हैं - मुझे पता चलेगा कि वे क्या चाहते हैं।

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

7

मुझे आश्चर्य है कि आपको इतनी विनम्र प्रतिक्रिया मिली!

अपने दृष्टिकोण से इसे देखते हैं।

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

वे शायद अपने क्षेत्र के विशेषज्ञ / आशावादी विशेषज्ञ हैं और इस तरह से सी ++ को आईबीएम "हाई लेवल असेंबलर लैंग्वेज" से एक कदम नीचे के रूप में मानते हैं। IBM की असेंबलर भाषा बेहद शक्तिशाली है और "MACRO" भाषा एक पूर्व-प्रसंस्करण / टेम्पलेट भाषा का सबसे अच्छा कार्यान्वयन है।

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

सी ++ बस मदद नहीं करेगा। वातावरण में कोई ग्राफिक्स लाइब्रेरी नहीं है जहां एप्लिकेशन चलता है। (एक 3270 ग्राफिक्स लाइब्रेरी है, लेकिन इसकी सी + + में समर्थित होने की संभावना नहीं है क्योंकि कोई भी इसका उपयोग नहीं करता है, और, एक पूर्ण "एक्स" क्लाइंट लाइब्रेरी है लेकिन इसका उपयोग करने के लिए आपको एक अलग वातावरण में रहने की आवश्यकता है।)

उनके पास एक उपयोगकर्ता इंटरफ़ेस है, जो एकदम सही है, लेकिन जो अच्छी तरह से जाना जाता है और तेज है। एक अनुभवी ऑपरेटर एक बराबर GUI के बजाय एक हरे रंग की स्क्रीन का उपयोग करके लगभग तीन गुना तेजी से एक फॉर्म भर देगा। साथ ही वे ग्राहक पर ध्यान दे सकते हैं जब वे प्रकार को छूते हैं।

स्क्रीन ऑपरेटरों को जो भी उपयोग करने के लिए प्रशिक्षण की आवश्यकता होगी, एक नए और अपरिचित जीयूआई का उपयोग करने के लिए सभी कर्मचारियों को वापस लेने की आवश्यकता होगी, पुराने कर्मचारियों की व्यवस्था पर नए कर्मचारियों को प्रशिक्षित करने की तुलना में एक बड़े बजट की वस्तु होगी।


4

बेलसौथ में कुछ साल पहले मुझे भी ऐसी ही समस्या थी। मैंने बस कोड कोड को बाइट द्वारा बाइट को स्कैन करने के लिए COBOL कोड लिखा था, opcodes और ऑपरेंड को अलग किया, tos में जाने के लिए शाखा निर्देश परिवर्तित करें, और IF से निर्देशों की तुलना करें। इस कार्यक्रम ने डीसी निर्देशों को बराबर COBOL डेटा डिवीजन कोड में बदल दिया, और चाल, zaps, आदि को उचित रूप में परिवर्तित कर दिया।

एक बार ऐसा होने के बाद, मैंने IFs-GENO को IF-THENs में बदलने के लिए एक दूसरा प्रोग्राम लिखा, इन क्लस्टर्स के बीच की चाल और ऐसी लाइनों में (यह वास्तव में यह सब करना मुश्किल नहीं था - सीक्रेट IFs सम्मिलित करना है और ईएलएसई जैसे ही आपने पहले चरण के "पिजिन" कोबोल को बैक-टू-फ्रंट से फिर से पढ़ा)।

IF-THEN-ELSER ने उन स्थितियों की तलाश की जहां यह एक लेबल के करीब निकटता में एक GOTO संदर्भ पाया, जिसे सुरक्षित रूप से हटाया जा सकता है (इसके संदर्भों की संख्या 1 से घटाकर)। आप इसे IF-THEN-ELSER प्रोग्राम को चलने दें (अर्थात, आप इसे बार-बार चलाते हैं, केवल तभी रोकते हैं जब आपका अंतिम पास कोई और बदलाव करने का रास्ता नहीं खोज सकता)। अधिकांश महत्वपूर्ण कार्य इस if-then-elser द्वारा किया जाता है, जिनके COBOL उत्पाद को एक अनुभवी, सक्षम असेंबलर-भाषा प्रोग्रामर (अर्थात्, मेरे) द्वारा सावधानीपूर्वक समीक्षा और वीटो किया जाना चाहिए। मेरे अनुभव में, मेरा "if-then-elser" मूल शाखा निर्देशों के परिणामस्वरूप GO TOs के 90 प्रतिशत से अधिक को समाप्त करने में सक्षम था।

मुझे लगता है कि सी (या सी ++) के लिए एक सीधे रूपांतरण के साथ इस बिंदु से आगे बढ़ना संभव है - मैं जिन भाषाओं के साथ भी बातचीत कर रहा हूं। हालाँकि, बेलसाउथ में, हमारी पसंद की लक्ष्य भाषा COBOL / II थी। हमेशा थोड़ी जटिलता होती है जो उन स्थितियों से उत्पन्न होती है जहां एक शेष लेबल में कई GO संदर्भ होते हैं (कई बार, इन स्थितियों को COBOL PERFORMs द्वारा नियंत्रित किया जाता है, लेकिन कभी-कभी केवल OR और AND द्वारा प्रतिनिधित्व किया जा सकता है)।

मुझे लगता है कि EVALUATEs (केस कंस्ट्रक्शंस) और 88 लेवल कंडीशन-नेम के साथ एलिगेंटली ब्लॉक-स्ट्रक्चर्ड COBOL / II में कोड तैयार करना अच्छा है। इन परिष्करण-स्पर्शों को जोड़ने से कार्यक्रमों की एक और जोड़ी बन गई, जो कोडबोल कार्यक्रमों पर आसान साबित हुई जो कोडांतरक से परिवर्तित कार्यक्रमों में उत्पन्न नहीं हुई।

मुझे नहीं पता कि यह मदद करता है।

जैसा कि ऊपर अन्य लोगों ने टिप्पणी की है, आपको इस प्रक्रिया को सावधानी से संचालित करना होगा। यह आपके निर्णय लेने की प्रक्रियाओं को सूचित करने के लिए कोडांतरक कोडिंग अनुभव के 10-12 वर्ष होने में मदद करता है। हमारे पास वह अनुभव है जो किसी और को खोजना मुश्किल है।

अंतिम नोट के रूप में: हमने केवल तब असेंबलर में लिखा था क्योंकि उच्च स्तर की भाषाओं के लिए संकलक बोझिल, अयोग्य वस्तु कोड का उत्पादन करते थे। आज के "अनुकूलन" कोबोल संकलक में वही बुरी आदतें नहीं हैं। ----------


2

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

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

मौजूदा COBOL प्रोग्रामर के लिए - शायद वे मौजूदा सिस्टम को दस्तावेज करने में मदद कर सकते हैं, और माइग्रेशन प्रक्रिया के साथ।


2
+1: यह C ++ के लिए जॉब नहीं है
6502

2
@ 6502: क्यों नहीं? ओपी की विशेषज्ञता C ++ में है। पुरानी प्रणाली से निपटने के तरीके का पता लगाना काफी खराब है। दूसरी भाषा सीखना मदद करने वाला नहीं है। उपकरण का उपयोग करने वाला एक सक्षम प्रोग्रामर है जो प्रोग्रामर सक्षम है, वह पुरानी प्रणाली की तुलना में इसे बेहतर बनाने में सक्षम होगा, चाहे वह भाषा कोई भी हो।
सिलिका

1
@ इन सिलिको: इस आकार के एक बड़े प्रोजेक्ट के लिए मेरी राय में आप C ++ का उपयोग करने की तुलना में अधिक उपयुक्त भाषा जैसे कि Python सीखकर समय बचा सकते हैं। मान लीजिए कि पायथन वहाँ नहीं था, इस तरह की एक बड़ी परियोजना के लिए यह IMO C ++ में अपना स्वयं का पायथन लिखना बंद कर देता है और C ++ में पूरी चीज़ करने के बजाय इसका उपयोग करके कोडिंग करता है। C ++ बहुत अच्छी भाषा है और इसकी मज़बूत बात यह है कि डिज़ाइन द्वारा C ++ और इसके बाद के कोडांतरक के नीचे कोई स्थान नहीं छोड़ना चाहता। पूरी तरह से यहाँ व्यर्थ है। क्या आप FPGAs का उपयोग करके सब कुछ लिखने का सुझाव देंगे यदि वह विशेषज्ञता का पोस्टर क्षेत्र था?
6502

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

1
सिलिको में: स्पष्ट रूप से कुछ भी सिद्धांत के साथ लागू किया जा सकता है (ब्रेनफ के सहित )। इसका मतलब यह नहीं है कि सभी उपकरण समान हैं। मुझे लगता है कि एक व्यस्तता वाले अनुप्रयोग के लिए कोड लिखना सरल है और पढ़ने के लिए (यहां तक ​​कि गैर तकनीकी लोगों द्वारा) नंगे कंप्यूटिंग गति से बहुत अधिक महत्वपूर्ण है। धातु की अनावश्यक निकटता का भुगतान करने के लिए अपरिभाषित व्यवहार की तरह कुछ भी एक उच्च कीमत है। यदि आपके लिए C ++ व्यवसाय तर्क के लिए डेटा प्रविष्टि एप्लिकेशन का एक अच्छा विकल्प है, तो मुझे आश्चर्य है कि अगर आपके लिए ** कुछ भी जिसके लिए C ++ एक बुरा विकल्प है ...
6502

2

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

पूर्व के साथ, पुन: उपयोग संभव है, और यह नहीं होना चाहिए कि सी + + और कोडांतरक के बीच "गोंद" का काम करना मुश्किल है, यह मानते हुए कि आपके कोडांतरक मॉड्यूल मानक (या कम से कम लगातार) कॉलिंग दृश्यों का उपयोग करते हैं। सभी संभावना में, हालांकि, कोडांतरक कोड एक गड़बड़ होगा। यद्यपि संरचित असेंबलर लिखना संभव था , बहुत कम लोगों ने किया था, और यह किसी भी "डिज़ाइन" को समझने के लिए लगभग असंभव होगा, जिसमें से फिर से लिखना शुरू करना है।

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

अगर इसमें से कोई भी मददगार है तो नहीं पता। जैसा कि मैं कहता हूं, मुझे लगता है कि यह मूल कोड की गुणवत्ता और आकार पर बहुत अधिक निर्भर है।


1

मैं नहीं बता सकता कि यह मजाक है या नहीं - आपकी कंपनी गंभीरता से कोड चला रही है जो मूल रूप से 39 साल पहले लिखा गया था? यदि यह सिस्टम / 360 पर चल रहा है, तो आपको स्रोत से g ++ संकलित करना होगा ...

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

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

एक अन्य टिप्पणी - मुझे लगता है कि अन्य कार किराए पर लेने वाली कंपनियां 21 वीं शताब्दी में हमारे बाकी हिस्सों में शामिल हो गई हैं; मैं यह देखने के लिए थोड़ा सामंजस्य बिठाऊंगा कि वे इसे कैसे कर रहे हैं (वेब-आधारित, मैं कल्पना करता हूं), और संभवत: उन प्रणालियों में से एक के बाद इसे मॉडल करता हूं (यानी, पहिया का फिर से आविष्कार न करें)।

सौभाग्य!


5
60 या 70 के दशक में शुरू किए गए कोड बेस का उपयोग करना मेनफ्रेम सिस्टम के लिए असामान्य नहीं है। आईबीएम अपने zSeries मेनफ्रेम और OS को पीछे रखता है जो कि 360 बस इस के अनुकूल है। कार किराए पर लेने वाली कंपनी (या बैंक या बीमा कंपनी) के व्यवसाय मॉडल में बहुत कुछ नहीं है जो तब से बदल गया है। आप एक वेब इंटरफ़ेस जोड़ सकते हैं, निश्चित रूप से, लेकिन डेटाबेस में कारों को स्टोर करने के तरीके में क्या बदलाव आया है?
बो पर्सन

zOS में CICS और DB2 के लिए प्री-प्रोसेसर के साथ एक देशी C ++ कंपाइलर है। इसलिए g ++ की कोई आवश्यकता नहीं है।
जेम्स एंडरसन

5
दूसरे इसके बड़े कॉरपोरेशन के लिए 30 साल पुराना मेनफ्रेम कोड चलाना आम है। इसकी आम तौर पर विश्वसनीय, प्रदर्शन करने वाला और काम करता है। यह भी बहुत बुरी तरह से documneted हो जाता है।
जेम्स एंडरसन

3
@ क्रिस, 39 साल पुराना कोड क्यों नहीं चलना चाहिए? क्या यह 30 पर बासी हो जाता है? 20? बैटल टेस्टेड प्रोडक्शन कोड पुराना हो सकता है लेकिन फिर भी पूरी तरह से काम करता है। किसी भी पुनर्लेखक को पुराने कार्यक्रम के समान स्तर पर पहुंचने की आवश्यकता है, क्योंकि इससे आपकी फीस का भुगतान करने वाले को कोई लाभ होगा।

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

0

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

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

इस कार्य के लिए, यदि आप इसे करना चाहते थे, तो मैं वास्तव में मानता हूं कि इस मामले में एक बुलडोज़र-पुनर्लेखन उपयुक्त हो सकता है। जोएल का तर्क हर मामले में लागू नहीं होता है। हालाँकि मैं वास्तव में इसे देखे बिना नहीं जान सकता था।


0
  1. एक वृद्धिशील परिवर्तन प्रश्न से बाहर है।

  2. एक ऑफ-द-शेल्फ समाधान उपलब्ध होने की संभावना है। कई कार किराए पर लेने के व्यवसाय हैं।

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

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

आप शायद एक ही डेटा फ़ाइल प्रारूप को रखना नहीं चाहते हैं, इसलिए जब वे स्विच करते हैं तो कोई वापस नहीं आएगा।


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