विरासत कोड के साथ काम करने पर यूनिट टेस्ट जनरेटर ने आपकी मदद की है?


10

मैं एक छोटा (~ 70kLOC सहित उत्पन्न) C # (.NET 4.0, कुछ सिल्वरलाइट) कोड-बेस देख रहा हूं जिसमें बहुत कम परीक्षण कवरेज है। कोड स्वयं में काम करता है कि यह उपयोगकर्ता स्वीकृति परीक्षण पारित कर चुका है, लेकिन यह भंगुर है और कुछ क्षेत्रों में बहुत अच्छी तरह से तथ्य नहीं है। मैं सामान्य संदिग्धों (NMock, NUnit, सिल्वरलाइट बिट्स के लिए स्टेटलाइट) का उपयोग करके विरासत कोड के आसपास ठोस इकाई परीक्षण कवरेज जोड़ना चाहूंगा।

मेरा सामान्य दृष्टिकोण परियोजना के माध्यम से काम करना शुरू करना है, यूनिट परीक्षण और रीफैक्टरिंग, जब तक मैं कोड की स्थिति से संतुष्ट नहीं हूं। मैंने अतीत में कई बार ऐसा किया है, और यह अच्छी तरह से काम कर रहा है।

हालांकि, इस बार मैं टेस्ट फ्रेमवर्क बनाने के लिए एक टेस्ट जनरेटर (विशेष रूप से Pex ) का उपयोग करने के बारे में सोच रहा हूं , फिर मैन्युअल रूप से इसे हटा दें।

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

मेरा डर यह है कि उत्पन्न किए गए परीक्षण कोड-बेस की सिमेंटिक बारीकियों को याद करेंगे, जिससे कवरेज मेट्रिक की खातिर परीक्षण की खतरनाक स्थिति के लिए परीक्षण के बजाय स्पष्ट रूप से कोड में व्यवहार को स्पष्ट रूप से व्यक्त किया जा सकेगा।


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

जवाबों:


9

मेरा सुझाव है कि चीजों को थोड़ा अलग तरीके से देखना चाहिए। घटना के बिना किसी मौजूदा एप्लिकेशन में नया यूनिट टेस्ट कोड जोड़ना आपको सर्वोत्तम परिणाम नहीं दे सकता है। यदि आप कोड आधार से परिचित होने के लिए ऐसा कर रहे हैं या आपके पास वास्तव में मारने का समय है और परीक्षण जनरेटर का परीक्षण करना चाहते हैं तो मेरी टिप्पणियों को अनदेखा करें।

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

यूनिट टेस्ट कोड जोड़ने के लिए टाइम्स:

  • नई कार्यक्षमता जोड़ना
  • फिर से तथ्य कोड
  • एक बग तय किया
  • कोड क्या करता है सीखना
  • बग मौजूद साबित करें

तथ्य के बाद इकाई परीक्षणों को जोड़ने के मूल्य को निर्धारित करना मुश्किल है।

मैं आमतौर पर खुद को ऐसे उत्तर लिखने की अनुमति नहीं देता, जो पूछने वाले के खिलाफ हैं, लेकिन मुझे लगता है कि यह एक अच्छा सबक है।


मैं वहां आपके साथ 100% समझौता कर रहा हूं - यह सवाल मुझसे यह सोचकर हुआ कि कुछ डाउन-टाइम कैसे बिताना सबसे अच्छा है। मेरा सामान्य अभ्यास बगों को ठीक करने, या सुविधाओं को जोड़ने की प्रक्रिया में परीक्षण और रिफ्लेक्टर करना है। मैं उम्मीद कर रहा था कि कुछ लोग इस क्षेत्र में कुछ युद्ध-कहानियों को साझा करने में सक्षम हो सकते हैं ...
डंकन बेने

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