एक विरासत, सादे सी परियोजना में इकाई परीक्षण जोड़ना


12

शीर्षक ही सब कुछ कह देता है। मेरी कंपनी एक माइक्रोकंट्रोलर डिवाइस के लिए लीगेसी फ़र्मवेयर प्रोजेक्ट का पुन: उपयोग कर रही है, जो पूरी तरह से सादे सी में लिखा गया है।

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

संक्षेप में:

  • रिफैक्टरिंग करने से पहले आप मौजूदा कसकर युग्मित कोड में यूनिट टेस्ट कैसे जोड़ते हैं?
  • आप किन उपकरणों की सलाह देते हैं? (कम महत्वपूर्ण, लेकिन फिर भी जानकर अच्छा लगा)

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

जवाबों:


7

माइकल पंख द्वारा विरासत कोड के साथ प्रभावी ढंग से कार्य करने की एक प्रति पकड़ो । यह ऐसी स्थितियों से निपटने के लिए है। भले ही यह OO भाषाओं जैसे C ++ और Java पर अधिक केंद्रित है, मेरा मानना ​​है कि यह अभी भी आपकी बहुत मदद कर सकता है।

इसका हिस्सा जैसा लगता है (या एक प्रारंभिक मसौदा लेख) यहां तक ​​मुफ्त में उपलब्ध है


+1, धन्यवाद। लेकिन, मेरा मानना ​​है कि मैं अधिक OO कोड के साथ OO कोड को फिर से पाना चाहता हूं। मुझे नहीं पता कि प्रक्रियात्मक कोड का परीक्षण कैसे किया जाता है, और कम युग्मित प्रक्रियात्मक कोड के साथ रिफलेक्टर प्रक्रियात्मक कोड।
Groo

@ ग्रू, पुस्तक प्रति सेक्टिंग के बारे में नहीं है। यह किसी भी इकाई परीक्षणों के बिना स्पेगेटी कोड के एक गुच्छा को (कुछ कम स्पेगेटी) कोड को इकाई परीक्षणों के साथ अच्छी तरह से कवर करने के तरीके के बारे में है। इस तरह के कोड का परीक्षण करना कठिन है, इसलिए आपको इसे परीक्षण योग्य बनाने के लिए पहले रिफ्लेक्टर की आवश्यकता होती है; हालाँकि, जैसा कि आपने भी उल्लेख किया है, यूनिट परीक्षणों के बिना रिफैक्टिंग करना जोखिम भरा है, इसलिए यह एक स्थिति 22 है। पुस्तक आपको गाइड करती है कि कोड में सबसे छोटा, सबसे सुरक्षित बदलाव कैसे किया जाए जो आपको इसे इकाई परीक्षणों के साथ कवर करने में सक्षम बनाता है, इस प्रकार बाद में इसे कमाना शुरू कर देता है।
Péter Török

यह पुस्तक एक अच्छा सुझाव है और इसमें ओ भाषाओं के साथ सी भी शामिल है।
थॉमस डब्ल्यू

7

तकनीकों के लिए, शायद Péter Török के जवाब में माइकल फ़ेहरस पुस्तक बहुत व्यापक होगी। यदि आप पुस्तक पर नहीं जाना चाहते हैं, तो मैं तीन-चरणीय प्रक्रिया का सुझाव देता हूं:

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

इस प्रक्रिया को कुछ बार दोहराएं, और आपको पता लगाना चाहिए कि विरासत कोड आधार की गुणवत्ता में काफी वृद्धि हुई है।

जहां तक ​​उपकरण जाते हैं, ध्यान दें कि C ++ C में कॉल कर सकता है, इसलिए C कोड की जांच करने के लिए किसी भी C ++ यूनिट-टेस्टिंग फ्रेमवर्क का उपयोग किया जा सकता है। उदाहरण के लिए, हम अपनी परियोजना में C कोड के एक समूह को इकाई-परीक्षण के लिए CPPUnit का उपयोग कर रहे हैं ।


युक्तियाँ और CPPUnit लिंक के लिए +1 धन्यवाद ।
Groo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.