हताशा का महीनों के बाद और पिछले डेवलपर्स मैंने तय की वूडू गुड़िया में सुई डालने बेहतर विरासत कोड refactor करने के लिए कोशिश है कि में बिताए समय की।UnitTesting एक वर्ग है कि एक जटिल डाटासेट रिटर्न
मैं पहले से ही Micheal Feather's book आदेश दिया, मैं Fowler's refactoring में हूँ और मैं DUnit साथ कुछ नमूना परियोजनाओं बनाया है।
तो अगर मैं इस विषय को मास्टर नहीं करता हूं तो मुझे लगता है कि यह कार्य करने का समय है और कुछ विचारों को अभ्यास में डाल दिया गया है। कोड मैं पर काम की
लगभग 100% यूआई में फंस व्यापार तर्क है, इसके अलावा सभी प्रक्रियात्मक प्रोग्रामिंग (कुछ कुछ अपवादों के साथ) है। आवेदन & गंदे के रूप में शुरू हुआ और इस तरह जारी रहा।
सभी आवेदन के लिए अब लेखन परीक्षण मेरे मामले में एक अर्थहीन काम है, लेकिन मैं unittest कुछ है कि मैं refactor करने के लिए की जरूरत करने की कोशिश करना चाहते हैं।
जटिल कार्यों में से एक एक बड़ा "TForm व्यापार तर्क वर्ग" करता है, डीबी डेटा को पढ़ने के लिए कुछ संगणना बनाने के लिए और एक अनुसूचक घटक को भरने के लिए है। मैं डीबी डेटा और गणना भाग को पढ़ने और इस कार्य को एक नई कक्षा को असाइन करना चाहता हूं। बेशक यह वर्तमान डिजाइन को बेहतर बनाने का एक तरीका है, यह स्क्रैच से शुरू करने का सबसे अच्छा तरीका नहीं है, लेकिन मैं ऐसा करना चाहता हूं क्योंकि इस नई कक्षा द्वारा लौटाया गया डेटा अन्य तरीकों से भी उपयोगी है, उदाहरण के लिए अब मैं शेड्यूलर डेटा की ई-मेल अधिसूचनाएं भेजने के लिए कहा गया है।
इसलिए एक बड़ी प्रतिलिपि और पेस्ट ऑपरेशन से बचने के लिए मुझे नई कक्षा की आवश्यकता है।
अब शेड्यूलर एक विशाल डेटासेट (आकार में विशाल और फ़ील्ड की संख्या में) से पॉप्युलेट किया गया है, शायद पहले रिफैक्टरिंग चरण नए वर्ग से डेटासेट प्राप्त कर सकता है। लेकिन फिर भविष्य में मैं डेटा का प्रबंधन करने के लिए बेहतर तरीके से एक नई कक्षा (जैसे TSchedulerData या शेड्यूलर से कम कुछ अन्य नाम) का उपयोग करना चाहूंगा, और परिणामस्वरूप डेटासेट होने के बजाय मेरे पास TSchedulerData ऑब्जेक्ट हो सकता है।
के बाद से refactor छोटे कदम पर पर होता है और परीक्षण refactor करने के लिए की जरूरत है बेहतर मैं थोड़ा आगे बढ़ने के उलझन में हूँ।
निम्नलिखित बातों मेरे लिए स्पष्ट नहीं हैं:
1) कैसे एक जटिल डेटासेट परीक्षण करने के लिए? क्या मुझे वर्किंग एप्लिकेशन चलाया जाना चाहिए, एक परिणाम सेट को एक्सएमएल में सहेजना चाहिए, और एक टेस्ट लिखना चाहिए जहां मैं उस एक्सएमएल डेटा वाले TClientDataSet का उपयोग करता हूं?
2) मुझे TSchedulerData के बारे में कितना ख्याल रखना है? मेरा मतलब है कि मैं 100% निश्चित नहीं हूं कि मैं टीएसड्यूलरडाटा का उपयोग करूंगा, हो सकता है कि मैं डेटासेट के साथ रहूंगा, वैसे भी जटिल परीक्षण बनाने की सोच जो कि 2 सप्ताह में छोड़ा जाएगा, एक डुनिनेट न्यूबी के लिए अपील नहीं कर रहा है। वैसे भी शायद यह इस तरह काम करता है। मैं उन बगों की संख्या की कल्पना नहीं कर सकता जो मुझे परीक्षण के बिना सामना करना पड़ेगा।
अंतिम नोट: मुझे पता है कि किसी को लगता है कि स्क्रैच से पुनः लिखना बेहतर विकल्प है, लेकिन यह एक विकल्प नहीं है। "आवेदन बहुत बड़ा है और आज इसे बेचा जाता है और आज नई सुविधाओं की आवश्यकता होती है कि वे व्यवसाय से बाहर न आएं"। यही वह है जो मुझे बताया गया है, वैसे भी रिफैक्टरिंग मेरे जीवन को बचा सकती है और आवेदन जीवन का विस्तार कर सकती है।
ठीक है धन्यवाद। मेरे पास डर है कि लेखन परीक्षण में काफी समय लगेगा, क्योंकि डेटा जटिल है। फ़ाइल डंप जटिल हैं, इसलिए यह मेरा पहला वास्तविक जीवन अनजाने प्रयास है, मुझे एक हफ्ते खोने और असफल परीक्षणों के साथ समाप्त होने का डर है। वैसे भी मेरे पास शुरू करने के लिए कोई और जगह नहीं है, मेरा मतलब है, मुझे इस कोड को बदलने की जरूरत है और इसलिए मुझे यहां से शुरू करना चाहिए। – LaBracca