"कोड की परीक्षण लाइनों" अनुपात के लिए एक सामान्य "कोड की कार्यात्मक लाइनें" क्या है?


27

मैं TDD दृष्टिकोण के लिए बहुत नया हूँ और मेरे पहले प्रयोगों का कहना है कि कार्यात्मक कोड की 1 पंक्ति का मतलब है परीक्षण कोड की 2-3 पंक्तियों के बारे में लिखना। इसलिए, यदि मैं 1000 LOC लिखने जा रहा हूँ, तो परीक्षण सहित पूरा कोडबेस ~ 3500 LOC कुछ होने वाला है।

क्या यह सामान्य माना जाता है? आपके द्वारा लिखे गए कोड में क्या अनुपात है?


8
हाँ, TDD एक pricey टैग के साथ आता है!
ईएल यूसुबोव

6
आपकी 2-3X संख्या सबसे अच्छी तरह से रूढ़िवादी है, यह वास्तव में सी # / जावा जैसी चीज़ों के लिए 4-5X के करीब है, पायथन / रूबी 2-3X के करीब हो सकता है, एर्लंग जैसी कुछ चीज़ों के साथ 1: 1 के करीब हो सकता है। टीडीडी के बारे में आप कितने हठधर्मिता पर निर्भर करते हैं, जितने अधिक हठधर्मी, उतने बड़े अनुपात!

6
@tomwrong: कैंट की पुस्तक में उन्होंने वार्ड का हवाला दिया कि आपको परीक्षण लिखना चाहिए जब तक कि आपका डर ऊब में बदल नहीं जाता।
हर्ब

4
@ElYusubov: मैं इस बात से सहमत नहीं हूँ कि यह "कीमत" है। यह उन लोगों के लिए ऐसा लगता है जो अभी भी एलओसी में काम की मात्रा की गणना करते हैं। लेकिन कीमत एलओसी में नहीं है, यह पैसे और समय-समय पर बाजार में है। और वहां, टीडीडी किसी भी अन्य उचित विकास प्रक्रिया की तुलना में अधिक महत्वपूर्ण नहीं है।
हर्ब

5
दोस्तों, आप उत्तर पोस्ट करने के बजाय टिप्पणी क्यों करते हैं? आप जो लिखते हैं वह समझ में आता है।
एंड्री एगिबालोव

जवाबों:


18

1: 3 टीडीडी के साथ सामान्य है।

मेरे अनुभव से, और अन्य उद्धरणों से भी जो मुझे याद हैं।


12
... क्या उद्धरण?
टिहरी

... अस्पष्ट रूप से याद रखें ... मुझे पहले से याद नहीं है कि यह कहाँ था (शायद केंट बेक के TDD उदाहरण के अनुसार, शायद c2 में कहीं है)। मुझे याद है, हालांकि, उत्पादन कोड की तुलना में तीन गुना अधिक परीक्षण कोड ठीक है।
हर्ब

वाह, मेरे अनुभव में भी बिल्कुल ऐसा ही है। (मैं अभी क्लॉक के परिणामों को देख रहा हूं और मैंने इस अनुपात पर कोई पोस्ट खोजने के लिए Google को खोजा)
निकोले टसेनकोव

9

विभिन्न कोडिंग शैलियों और भाषाओं के आधार पर भिन्नताएं हैं। हालाँकि, आप जिस भाषा का उपयोग करते हैं, वह आपकी सबसे बड़ी विविधता है।

रॉबर्ट मार्टिन ने एक बार कहा था:

"जैसा कि परीक्षण अधिक विशिष्ट होते हैं, कोड अधिक सामान्य हो जाता है।"

इसने मुझे सोचने पर मजबूर कर दिया। अधिक विशिष्ट परीक्षणों का अर्थ है अधिक परीक्षण कोड। अधिक सामान्य उत्पादन कोड का मतलब कम कोड होता है, इसलिए कोड विकसित होते ही परीक्षण / कोड अनुपात बढ़ जाना चाहिए।

लेकिन रुकिए, यह अच्छा नहीं है। कुछ विशेष मामलों में, उदाहरण के लिए जब आप एक निश्चित एल्गोरिथ्म को परिभाषित करते हैं, तो आपके पास कोड की केवल 6-10 पंक्तियाँ हो सकती हैं जिनमें "अगर" का एक जोड़ा, थोड़ी देर और शायद 2-3 पुनरावृत्तियाँ हों। मैं आपको बता सकता हूं, उस कोड में परीक्षण कोड की शायद 100 से अधिक लाइनें होंगी।

एक वास्तविक परियोजना में, केवल कुछ एल्गोरिदम से कुछ बड़ा, परीक्षण / कोड अनुपात 1: 1 और 2: 1 के बीच कहीं होना चाहिए। यदि यह 2: 1 से ऊपर हो जाता है, तो यह एक गंध है कि आपके पास परीक्षण हैं जिन्हें रिफैक्ट किया जाना चाहिए या हटा दिया जाना चाहिए (या शायद कोड जो परीक्षण करना कठिन है)। आपको हमेशा अपने उत्पादन कोड की तरह ही अपने परिक्षण में भी उतनी ही मात्रा में निवेश करना चाहिए।

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


3

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

यदि आपके तरीके कम हैं तो 3: 1 उचित है। यदि आपके तरीके लंबे हैं तो 3: 1 उच्च पक्ष पर है।

तो, आपके प्रश्न का उत्तर देने के लिए, यह निर्भर करता है। :-)


यह इस बात पर निर्भर करता है कि आपके द्वारा "तरीके लंबे हैं"। मेरे सिर में जो छवि बनी है, वह यह है कि विधियाँ अनावश्यक रूप से लंबी होती हैं, बहुत अधिक काम करती हैं और बहुत अधिक ज़िम्मेदारियाँ होती हैं (अक्सर बहुत सारे पैरामीटर होते हैं)। उस मामले में, इस तरह के विधि आनुपातिक अधिक संयोजन कवर करने के लिए परीक्षणों से, जरूरत है तो मुझे नहीं लगता कि अनुपात ज्यादा ... बदल जाएगा है
herby

एक पल के लिए मान लें कि आप एक परीक्षण सेट कर सकते हैं, परीक्षण की जाने वाली विधि को कॉल करें और कोड की तीन पंक्तियों में परिणाम की जांच करें। यदि आप जिस विधि का परीक्षण कर रहे हैं, वह एक पंक्ति लंबी है (जैसा कि स्काला में होता है) तो उत्पादन कोड राशन के लिए आपका परीक्षण 3: 1 है। यदि विधि छह लाइनों लंबी है तो यह 1: 2 है। छह पंक्तियाँ वह सब लंबी नहीं है।
जॉन स्ट्रेटर

2

सॉफ़्टवेयर क्रिटिकल एप्लिकेशन के लिए, सामान्य अनुपात प्रत्येक 10 कार्यात्मक LoC के परीक्षण का एक दिन है।

और यह टीडीडी की गिनती नहीं है जो परीक्षण के बारे में नहीं है, लेकिन विनिर्देश के बारे में है।


1

मेरे परीक्षण कोड का आकार 'वास्तविक' कोड के बारे में आधा है। अन्यथा करना यह दर्शाता है कि आपके परीक्षण बहुत जटिल हैं और / या आपका कोड परीक्षण करना बहुत कठिन है और / या आपका कोड बहुत अधिक सघन या जटिल है।

या आप बस बहुत परीक्षण कर रहे हैं, और कम रिटर्न पर अपना समय बर्बाद कर रहे हैं।

यह भी देखें कि "यूनिट परीक्षण कब अनुचित या अनावश्यक है?"


-1

मेरा अनुपात लगभग 2-1 से 10-1 (परीक्षण करने के लिए कोड) है। सुनिश्चित करें कि आप परीक्षण कर रहे हैं मूल्य / व्यवहार के बारे में है और कार्यान्वयन नहीं है।

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