किसी मौजूदा वेब एप्लिकेशन को रीफ्रैक्टिंग करने के लिए कैसे संपर्क करें?


11

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

तो आप वेब एप्लिकेशन को रीफ्रैक्ट करने के लिए कैसे संपर्क करेंगे? मुझे किन चीजों को देखना चाहिए और किस क्रम में होना चाहिए? ब्राउज़र गेम बनाम कार्यात्मक वेब ऐप के बारे में क्या? क्या दृष्टिकोण में अंतर होगा?


4
यदि यह टूटा नहीं है, तो इसे ठीक न करें। अधिक समय परीक्षण लिखने में बिताएं, और कम समय अनावश्यक बदलाव करें।
Macneil

बस ब्याज से बाहर। आपने अपने एप्लिकेशन को लिखने के लिए किस भाषा / प्रौद्योगिकियों का उपयोग किया है? यह किस प्रकार की साइट है? देखें welie.com/patterns -> डिजाइन के संदर्भ -> साइट के प्रकार
JW01

@ JW01 मैं आंतरिक तर्क के लिए PHP और व्यू मैनेजमेंट और फॉर्म सत्यापन के लिए AJAX का उपयोग करता हूं। यह वेब-आधारित अनुप्रयोग पैटर्न का एक संस्करण होगा, लेकिन केवल एक दिए गए वातावरण में उपलब्ध है, क्योंकि यह एक आंतरिक उपकरण है।
एल्ड्रोस

जब मैंने प्रश्न का उत्तर दिया तो मेरे पास आपके ऐप की एक पूरी तरह से अलग तस्वीर थी। आपके पास API को बदलने की बहुत अधिक स्वतंत्रता है, जैसे कि वह सार्वजनिक डोमेन में थी।
JW01

@ JW01 मैं बहुत विशिष्ट नहीं होना चाहता था, क्योंकि मैं चाहता था कि यह प्रश्न दूसरों के लिए भी उपयोगी हो।
एल्डरोस

जवाबों:


6

बहुत ही उसी तरह से आप किसी भी तरह के विरासत कोड से संपर्क करते हैं। आपको एक ऐसा टुकड़ा मिलता है जो परीक्षण करने योग्य होता है, आप इसके लिए परीक्षण लिखते हैं, और रिफ्लेक्टर।

यदि आप एक टुकड़ा आसानी से परीक्षण करने योग्य नहीं पाते हैं, तो आपको टेस्ट सूट की सुरक्षा कठोरता के बिना इसे परीक्षण योग्य बनाने की आवश्यकता होगी, इस स्थिति में आप बहुत सावधानी से कोड के लगभग कुछ परीक्षण योग्य टुकड़े को बदल सकते हैं ताकि यह परीक्षण योग्य हो।

कोड जो ब्राउज़र को चीजें प्रदान नहीं करता है - "इन्फ्रास्ट्रक्चर" कोड, मॉडल, डेटाबेस-टचिंग सामान - शुरू करने के लिए एक अच्छी जगह हो सकती है।

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


आप विरासत आवेदन के भाग - IE, HTML / JavaScript / CSS / etc भाग के "दृश्य" परीक्षण की सिफारिश कैसे करेंगे? मैं मानता हूं कि इकाई परीक्षण जाने का तरीका है, लेकिन एप्लिकेशन कोड का परीक्षण स्वचालित करना मुश्किल लगता है।
जस्टिन एथियर

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

आप एक 'हेडलेस ब्राउज़र' के साथ वेब ऐप्स का परीक्षण कर सकते हैं - मूल रूप से एक पुस्तकालय जो एक यूनिट परीक्षण के लिए है कि एक ब्राउज़र QA पुरुष के लिए क्या है। जावा दुनिया में, HTMLUnit (शुद्ध जावा, स्व-निहित) और वेबड्राइवर (फायरफॉक्स जैसे एक वास्तविक ब्राउज़र को रिमोट-कंट्रोल करते हैं) हैं। मेरी परियोजना में इस तरह लिखे सैकड़ों परीक्षणों का एक सूट है।
टॉम एंडरसन

@ JW01 तुम बिल्कुल सही हो - यह बहुत नाजुक है। यह एक बार-बंद तरह से एक रीफ़ैक्टरिंग का परीक्षण करने के लिए बहुत अच्छा है: आप जाँच सकते हैं कि रीफ़ैक्टरिंग आउटपुट को परिवर्तित नहीं करता था, लेकिन हर बार जब आप उत्पन्न HTML को बदलते हैं, तो आपको "नई अपेक्षित" HTML को सहेजना होगा।
फ्रैंक शियरर

10

माइकल फेदर्स द्वारा "वर्किंग इफेक्टिवली विथ लेगेसी कोड" नामक इस बारे में एक शानदार पुस्तक है। आइए इसका सामना करते हैं, हम सभी के पास विरासत कोड है।

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


3
"आइए इसका सामना करते हैं, हम जो कुछ कर रहे हैं वह आज कल की विरासत सॉफ्टवेयर लिख रहा है।" - मार्टिन फॉलर
फ्रैंक शियरर

3
  • हां - वेब अनुप्रयोग वेब साइटों के लिए अलग हैं

मैं उनसे अलग से व्यवहार करता। यदि आपके पास अपनी साइट का एक हिस्सा है जो केवल दस्तावेजों का एक संग्रह है (जो समान उपयोगकर्ताओं के लिए समान है और लॉग-इन उपयोगकर्ताओं के समान है) - तो इसे संरचित करने का सबसे अच्छा तरीका एक वेब ऐप से बहुत अलग है जो गतिशील रूप से विभिन्न पृष्ठों पर कार्य करता है प्रत्येक उपयोगकर्ता के लिए। साइट के उन दो हिस्सों को दो ऐप्स / घटकों में विभाजित करें और प्रत्येक भाग को अलग-अलग तरीके से निपटाएं।

  • संस्करण नियंत्रण का उपयोग करना शुरू करें

एक बार जब आपका कोड संस्करण नियंत्रण में हो जाता है, तो आप पूरी तरह से 'अनावश्यक स्थिति' में रखे गए सभी अनावश्यक कोड को हटा सकते हैं।

  • शिशुओं को कम करें

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

आपको खुद से पूछना होगा, "एक यूआरएल दिया गया है जो इसका सामान्यीकृत रूप है?"। एक बार जब आप इस नीचे मिल गया है। तब आपकी साइट पर ५०,००,००० + यूआरएल २००० तक कम हो सकते हैं। जो आपके दिमाग में समझने और प्रबंधन करने में बहुत आसान है।

देखें: http://www.sugarrae.com/be-a-normalizer-a-c14n-exterminator/

  • It क्या है ’मॉडलिंग से शुरू करें, what आप क्या चाहते हैं’

यदि आप एक विरासत साइट को टिड्ड कर रहे हैं, जिसे शुरू से ही ध्यान में नहीं रखा गया है, तो यह 'एक गड़बड़' से 'आदर्श डिजाइन' में कूदने के लिए आकर्षक है। मेरा मानना ​​है कि आपको इसे कम से कम दो चरणों में करने की आवश्यकता है: 'मेस' -> 'अच्छी तरह से मॉडलिंग विरासत कोड' -> 'जोड़ा सुविधाओं के साथ आदर्श नया कोड'। सुविधाएँ जोड़ना बंद करें। एक भ्रष्टाचार-विरोधी परत के पीछे गंदगी को ठीक करने या उसका एनकैप्सुलेट करने पर ध्यान दें। तभी, आप डिज़ाइन को कुछ बेहतर में बदलना शुरू कर सकते हैं।

देखें: http://www.joelonsoftware.com/articles/fog00000000000069.html

देखें: http://www.laputan.org/mud/

  • इसे परीक्षण के तहत लाना एक अच्छा विचार है।

एक परीक्षण सूट / रूपरेखा बनाएं और परीक्षण जोड़ना शुरू करें। लेकिन, कुछ विरासत कोड का परीक्षण करने के लिए यह काफी मुश्किल है। तो, इस पर भी लटका नहीं है। जब तक आपके पास वहां की रूपरेखा है, तब तक आप परीक्षणों को बहुत कम जोड़ सकते हैं।

देखें: http://www.simpletest.org/en/web_tester_documentation.html

  • अपने दृढ़ विश्वास में साहस रखें

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


मैं जा सकता था। लेकिन वे कुछ चीजें हैं जो मैंने ली हैं जब एक पुरानी विरासत साइट को चमकदार नए में बदल दिया।


अच्छा संदर्भ लिंक!
नीलेश

2

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

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

कोड के एक भाग के लिए परीक्षणों के साथ, कोड को बदलें। आपको जो कुछ भी करने की ज़रूरत है, जब तक परीक्षण अभी भी गुजरते हैं, तब तक करें।

यहां तक ​​कि विरासत कोड के साथ, आप एडीडी या बदलाव करते हुए टीडीडी कर सकते हैं। अपने प्रत्याशित परिवर्तनों के लिए पहले परीक्षण लिखें, उन्हें विफल देखें, और फिर परिवर्तन करें।

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

अंततः, यह एक बहु-चरण प्रक्रिया है। एक बार में यह सब करने की कोशिश मत करो, बस इसे एक बार में थोड़ा सा लें।


-2

अगर यह मुझे बदसूरत करने के लिए काफी बदसूरत है, तो यह बदसूरत मेरे लिए पूरी बात को हटाने और प्रतिस्थापन में एक बूंद लिखने के लिए पर्याप्त है।

आप पाएंगे कि अधिक से अधिक बार, ऐसा करने में उतना ही समय लगता है, जितना कि वहां बैठना और एक असंगठित और अनिर्दिष्ट गंदगी के चारों ओर टोकना और इसे धीरे से सहलाना।


2
मैं असहमत हूं (हालांकि मैंने आपको -1 नहीं दिया)। joelonsoftware.com/articles/fog0000000069.html
JW01

1
यह वास्तव में अपने आप को सही ढंग से बचाव करने के लिए स्थितिजन्य निर्णय का बहुत अधिक है। जब मैं बड़े पैमाने पर ऑब्जेक्टिव-सी लाइब्रेरी पर काम कर रहा हूं तो मैं ऐसा नहीं कर सकता, हालांकि, मेरे पास पूरी तरह से नई जावास्क्रिप्ट लाइब्रेरी लिखने के बारे में कोई योग्यता नहीं है।
डरपोक 16

बहुत बुरा विचार है! काश, मैंने जोएल स्पोल्स्की का लेख पढ़ा होता कि @ JW01 2 साल पहले जुड़ा हुआ था, इससे पहले कि मैंने एक मौजूदा PHP ऐप को फिर से लिखने का फैसला किया, जो अंगुलर और बूटस्ट्रैप का उपयोग कर रहा था। कोणीय और बूटस्ट्रैप महान तकनीक हैं, लेकिन मैं 2 साल बाद इस पुराने ऐप को बदलने की कोशिश कर रहा हूं। मुझे केवल मौजूदा ऐप को संशोधित करना चाहिए था और रिप्ड / रिप्लेस नहीं किया जाना चाहिए था।
ज़ैक मैकोम्बर

मैं विशेष रूप से सहमत हूँ जब आपकी टिप्पणी में तथ्य। "परिदृश्य" एक महत्वपूर्ण बात है जो एक निर्णय निर्धारित करती है। क्या आपको उस विशाल एपीआई को चीर देना चाहिए जो आपके पूरे व्यवसाय की सेवा करता है? कौन जानता है, विचार करने के लिए बहुत कुछ है। आप बाद में परीक्षण करने से पहले परीक्षण चाहते हैं। इससे जुड़ा लेख बहुत रैखिक है, जैसे कि एक आकार सभी में फिट बैठता है, लेकिन जब कुछ छोटी गाड़ी है, या क्या वास्तव में पुराना कोड है? क्या लेख वास्तव में यह सुझाव दे रहा है कि हम विरासत से उस कोड के साथ आगे न बढ़ें जो पढ़ना और बनाए रखना आसान है? देवों की दुनिया में कोई भी श्वेत-श्याम नहीं है, बस परिदृश्य और निर्णय हैं
जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.