2011-12-22 15 views
7

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

कोई विकास वातावरण भी नहीं है, सब कुछ उत्पादन डेटाबेस के खिलाफ काम करने के लिए स्थापित किया गया है। ठीक है सिर्फ एक डेटाबेस नहीं, लगभग 10 अलग-अलग डेटाबेस हैं, क्योंकि ऐप एक बड़ी साइट के लिए व्यवस्थापक बैकएंड की तरह है।

मेरा पहला विचार उन हिस्सों के आसपास कम से कम कुछ हद तक सभ्य परीक्षण कवरेज प्राप्त करना था, जिन पर मैं काम करने जा रहा हूं, लेकिन मैं उत्पादन सर्वर की तुलना में कहीं और काम करने में असमर्थ हूं।

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

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

स्टब्स और मैक्स के गुच्छा के साथ लेखन इकाई परीक्षण उपयोगी नहीं लगता है, क्योंकि जिस कोड को मैं मूल रूप से काम करने जा रहा हूं उसे स्क्रैच से फिर से लिखा जाना चाहिए।

मेरे विकास मशीन पर एक विशाल जटिल परिसर उत्पादन वातावरण को मूल रूप से डुप्लिकेट करने के लिए कुछ कदम क्या हैं, इसलिए मैं अलगाव में सामान कर सकता हूं?

संपादित करें: ऐप के बारे में थोड़ा मजेदार तथ्य। जब मैंने इसे पहली बार चलाने की कोशिश की, तो बिना किसी त्रुटि संदेश के ठंडे रखा गया ... लगभग आधे घंटे बाद मुझे पता चला कि डेटाबेस से कनेक्ट करने का टाइमआउट (जो उपलब्ध नहीं था) पर सेट किया गया था 90 मिनट!

+7

एक व्यक्ति को ढूंढें जिसने इसे बनाया है, अपने परिवार की बंधक लें और उसे आपकी मदद करें (या कम से कम यह बताएं कि चीज कैसे काम करती है)। –

+2

आप उत्पादन मशीन का एक स्नैपशॉट ले सकते हैं और प्रयोगशाला में इसे अलग कर सकते हैं। –

उत्तर

9

तो यह अपेक्षाकृत नई/दुर्लभ घटना है, क्योंकि रेल "लीगेसी" अनुप्रयोग अभी तक बहुत लोकप्रिय नहीं हैं (अभी भी बहुत युवा हैं)।

हालांकि, मैं परीक्षण (अनचाहे) विरासत रेल अनुप्रयोगों के परीक्षण के बारे में कुछ अलग-अलग लेखों में आया हूं। कुछ है कि मैं सलाह देते हैं: व्यावहारिक प्रोग्रामर्स से "Rails Test Presciptions" की

  1. This slideshare
  2. अध्याय 18।

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

यह एक बेहद दर्दनाक काम है, और मैं इसे सही तरीके से करने के लिए आपको सराहना करता हूं।

चीयर्स!

+0

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

+1

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

2

इस तरह की भयानक नाव पर आपका स्वागत है।

पिछली बार यह मेरे लिए हुआ, मैं Capybara साथ परीक्षण की संख्या में लिखा था और:

  • मैं जाँच की क्या या DB में नहीं बनाया जा की उम्मीद थी ...

  • ... तो थोड़ा के बाद बिट, मैं

पुनर्रचना कर रहा हूँ इस मामले में, मैं उच्चतम स्तर पर एप्लिकेशन के करीब पहुंच के अलावा कोई अन्य साधन देख सकते हैं और न्यूनतम स्तर पर परिणाम देखने के लिए, किसी भी ठूंठ/नकली बिना नहीं है।

0

Rails, 
Ruby, 
Mysql socket, 

के किन संस्करणों का यह उपयोग कर रहा है?

मुझे इस तरह के ऐप पर काम करना पड़ा। यहाँ मैं करना था क्या है:

Copy DB over, 
do not run the migrations, 
installed gems as production environment, 
do not update gems. 

मेरा ऐप एक बहुत ही विशेष मणि संस्करण इस्तेमाल किया (gettext वी = 1.10)

+1

रेल 2.3.something। ओह हाँ, यह एक और समस्या है, मेरे पास उत्पादन सर्वर तक सीधी पहुंच नहीं है, इसलिए मुझे नहीं पता कि रत्न के कौन से संस्करण स्थापित हैं ... और वे कॉन्फ़िगर/पर्यावरण में भी निर्दिष्ट नहीं हैं। आरबी, तो मैंने ऐप को चलाने के लिए अब तक जो किया है, उसे गायब मणि पर क्रैश करने की प्रतीक्षा करें, फिर कुछ यादृच्छिक संस्करण स्थापित करें जो निर्भरताओं से मेल खाते हैं और प्रार्थना करते हैं ... –

+0

और मैं भी उल्लेख करना भूल गया, सभी डेटाबेस MySQL नहीं हैं, उनमें से कुछ एमएस एसक्यूएल सर्वर हैं ... yay –

+0

मेरे पास एक से भी बदतर मामला है। मेरे पास केवल 2 mysql डीबीएस था। वे किस वेबसर्वर का उपयोग करते हैं ?? – Marrento

3

मैं कई बचाव मिशन, ज्यादातर पीएचपी परियोजनाओं है कि वास्तव में बुरा थे, लेकिन नहीं पर काम किया केवल 80% प्रोग्रामर द्वारा छोड़े गए बेताब उत्पाद मालिकों ने अपनी त्याग की परियोजनाओं को पूरा करने के लिए अच्छा भुगतान किया :)।

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