कैसे TDD की गुणवत्ता में सुधार और / या विकास की गति के केस स्टडीज की तलाश [बंद]


14

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


1
वास्तव में मुझे लगता है कि "यूनिट परीक्षण जोड़ें, और आशा है कि उनका प्रबंधक उन्हें 'समय बर्बाद करने' के लिए नोटिस नहीं करता है" प्रबंधक मैट्रिक्स को पूरा करने के लिए यूनिट परीक्षण जोड़ें "की तुलना में अधिक सामान्य है, लेकिन मुझे लगता है कि कुछ केस अध्ययन अच्छे होंगे।
कार्सन 63000

1
इसके अलावा TDD आपको इस प्रक्रिया को बहुत पहले से परिभाषित करने की अनुमति देता है जब आप कर रहे हैं क्योंकि आपके पास सभी परीक्षण हैं जो पास होने चाहिए।


@ user1249 TDD यह नहीं कहता कि "किसी भी कोड को लिखने से पहले सभी परीक्षण लिखें"। यह कहता है "एक एकल परीक्षण लिखें जो विफल हो जाता है, और इसे पास करने के लिए एक ही चीज ; आवश्यक के रूप में दोहराएं"। यदि आप अपने सभी परीक्षण पहले लिखते हैं तो आप परीक्षण और उत्पादन कोड के बीच तंग फीडबैक लूप खो देते हैं, जो पहली जगह में टीडीडी का उपयोग करने के बहुत कारणों में से एक है।
फ्रैंक शीयर

जवाबों:


8

आईबीएम और माइक्रोसॉफ्ट में 4 परियोजनाओं का अध्ययन। में प्रकाशित Emperical सॉफ्टवेयर इंजीनियरिंग पत्रिका।

अनुभवजन्य अध्ययन दिखाएँ परीक्षण संचालित विकास गुणवत्ता में सुधार करता है

एम्पिरिकल सॉफ्टवेयर इंजीनियरिंग जर्नल रिपोर्ट में पहली बार प्रकाशित एक पेपर: "TDD विभिन्न डोमेन में लागू होता है और विकास टीम की महत्वपूर्ण उत्पादकता में कमी के बिना विकसित सॉफ़्टवेयर के दोष घनत्व को काफी कम कर सकता है।" Microsoft और IBM पर 4 परियोजनाओं की तुलना में अध्ययन, जिसमें TDD का उपयोग ऐसी परियोजनाओं के साथ किया गया था जो TDD का उपयोग नहीं करते थे ...

पेपर में आईबीएम पर 1 और Microsoft से 3 केस स्टडी शामिल है। प्रत्येक मामले के अध्ययन में एक ही उत्पाद पर काम करने वाली दो टीमों की तुलना की जाती है, एक ही विकास भाषाओं और प्रौद्योगिकियों का उपयोग करके, एक ही उच्च-स्तरीय प्रबंधक के तहत, जिनमें से केवल एक परीक्षण-संचालित विकास (TDD) का उपयोग कर रहा था। कोई भी टीम नहीं जानती थी कि वे अपने विकास चक्रों के दौरान अध्ययन का हिस्सा होंगे। IBM केस स्टडी ने डिवाइस ड्राइवर डेवलपमेंट करने वाली टीमों का अनुसरण किया। Microsoft मामलों ने विंडोज, एमएसएन और विजुअल स्टूडियो पर काम करने वाली टीमों का अनुसरण किया।

पेपर में टीमों द्वारा मिनट-टू-मिनट वर्कफ़्लोज़ के साथ-साथ कार्य-स्तर वर्कफ़्लो के रूप में उपयोग की जाने वाली टीडीडी प्रथाओं का वर्णन है ...


6

टीडीडी के बारे में एक अध्याय है जिसमें हाल ही में आई पुस्तक "मेकिंग सॉफ्टवेयर: क्या काम करता है और क्यों हम इस पर विश्वास करते हैं" के बारे में अध्ययन करते हैं। लेकिन आप निराश हो सकते हैं, क्योंकि अगर मुझे सही ढंग से याद है कि अध्ययन ने टीडीडी को कोई वास्तविक लाभ नहीं दिया है। केस स्टडी वैसे भी दिलचस्प थी, और सामान्य तौर पर बुक हाल ही में पढ़ी गई सबसे अच्छी सॉफ्टवेयर बुक में से एक है। इसमें जोड़ी प्रोग्रामिंग, कोड समीक्षा आदि जैसी चीजों के कई मामले अध्ययन शामिल हैं।


4

निश्चित रूप से इसे देखें: टीडीडी साबित प्रभावी! या यह है?

... जब फिल हैक ने घोषणा की कि रिसर्च टीडीडी की प्रभावशीलता का समर्थन करता है तो मुझे यह देखने में थोड़ी दिलचस्पी थी कि इससे जुड़ी रिपोर्ट वास्तव में क्या है । फिल सार से बोली।

हमने पाया कि परीक्षण-पहले के छात्रों ने औसतन अधिक परीक्षण लिखे और बदले में, अधिक परीक्षण लिखने वाले छात्रों ने अधिक उत्पादक होने का प्रण लिया। हमने यह भी देखा कि नियोजित विकास रणनीति से स्वतंत्र प्रोग्रामर परीक्षणों की संख्या के साथ न्यूनतम गुणवत्ता में रैखिक रूप से वृद्धि हुई है।

फिल ने स्पष्ट रूप से रिपोर्ट के बाकी हिस्सों को पढ़ा है और अपने पसंदीदा टुकड़े प्रदान करता है जो ऐसा लगता है जैसे उसका शीर्षक बताता है। जब मैं नवीनतम और सबसे बड़ी सॉफ्टवेयर विकास प्रथाओं का समर्थन करने वाली चीजों को देखता हूं, तो मैं जिन चीजों के बारे में चिंता करता हूं, उनमें से एक, पुष्टि के पूर्वाग्रह के प्रति एक मजबूत प्रवृत्ति है - वर्तमान सिद्धांतों की पुष्टि के लिए और काउंटर-संकेतक की अनदेखी।

इसलिए, जिज्ञासु प्रकार होने के नाते और चूंकि टीडीडी एक ऐसी चीज है जिस पर मैं नजर रख रहा हूं कि क्या इसकी कोई चीज मैं किसी दिन खुद अपनाना चाहता हूं, तो मैं रिपोर्ट में गया ...

... प्रश्न के बिना, परीक्षण पहले प्रति यूनिट अधिक परीक्षण करने की ओर जाता है। सवाल यह है कि क्या यह मूल्यवान है। इस अध्ययन से प्रतीत होता है कि यह शायद ऐसा नहीं है, कम से कम यदि गुणवत्ता आपके इच्छित लाभ की है। लेकिन फिर, मुझे आश्चर्य नहीं है कि परीक्षणों की संख्या गुणवत्ता के अनुरूप नहीं है, जैसा कि मुझे आश्चर्य नहीं है कि कोड की लाइनों की संख्या उत्पादकता के अनुरूप नहीं है।

टीडीडी के बारे में लेखक के पास बहुत सारे अच्छे बिंदु हैं जो कि प्रभावी नहीं हैं (मृत्यु के लिए पागल होने के बावजूद भी)


मुझे यकीन नहीं है कि मैं लिंक की गई सामग्री की नकल किए बिना लिंक से अधिक कैसे पोस्ट कर सकता हूं? ओपी जो मांगता है वह प्रदान करता है: टीडीडी पर एक केस स्टडी और उस अध्ययन की समीक्षा।
जूल

4

आप कितना समय देखते हैं सॉफ़्टवेयर को मैन्युअल रूप से परीक्षण करने में और ग्राहक द्वारा खर्च किए गए ; तुलना करें कि कितने समय तक टीडीडी-शैली स्वचालित परीक्षणों का अनुमान लगाया जाएगा। पॉकेट अंतर

मेरे अनुभव में, टीडीडी के स्वचालित परीक्षण सोने के हैं क्योंकि वे बीमा प्रदान करते हैं और मैन्युअल परीक्षण की भारी मात्रा को समाप्त करते हैं

जैसा कि एंड्रेस एफ ने बताया, आप ये लाभ केवल स्वचालित परीक्षण से प्राप्त कर सकते हैं, जरूरी नहीं कि टीडीडी - हालांकि, टीडीडी इसके बाद को स्वचालित परीक्षण की आवश्यकता होती है इसके बजाय यह एक अच्छा विचार है।

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

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


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

1
टीडीडी का घोषित लक्ष्य मैन्युअल परीक्षण को कम करना नहीं है, बल्कि डिजाइन में सुधार करना है। स्वचालित परीक्षण TDD के लिए एक ऑर्थोगोनल अवधारणा हैं; आप उन्हें टीडीडी के बिना रख सकते हैं।
एंड्रेस एफ।

@AndresF। तुम सही हो; जवाब संपादित
स्टीवन ए। लोव

2

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

मुझे लगता है कि वास्तविक दुनिया का समाधान (ज्यादातर चीजों की तरह) एक मध्य मार्ग है, आप परीक्षण चाहते हैं लेकिन आप नहीं चाहते कि परीक्षण परियोजना से अधिक महत्वपूर्ण हों।

(व्यक्तिगत रूप से मुझे लगता है कि टीडीडी एक सनक है, सिद्धांत में अच्छा लगता है, लेकिन व्यवहार में ... इतना अच्छा नहीं है। मुझे लगता है कि एकीकरण परीक्षण कहीं अधिक महत्वपूर्ण है, लेकिन यह सिर्फ उस तरह की जटिल परियोजनाएं हो सकती हैं जिन पर मैं काम करता हूं)।


2

मैं 2 साल से टीडीडी का उपयोग कर काम कर रहा हूं और जहां मैंने उस समय काम किया था, हम सभी प्रबंधकों सहित उपयोग करने के लिए अनिच्छुक थे। जब भी यह जल्द ही सही चीज के रूप में बदल गया। हम जो लाभ जल्द ही देखते थे

  • एक प्रारंभिक चरण में कीड़े की खोज।
  • बिना एहसास के भी बेहतर कोड लिखना।
  • आपका कोड अब अधिक रख-रखाव है क्योंकि आपके परीक्षण के कारण सभी छोटे-छोटे खंडों में हैं (हमारे पास 300-400 अंक की मूर्खतापूर्ण बातें थीं)। अब अधिकतम 30 और सभी अनिश्चित काल तक परीक्षण किए गए।

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

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

मैं आमतौर पर निम्नलिखित कार्य करता हूं:

  • मैं अपनी यूनिटीज को बहुत छोटा रखता हूं
  • केवल 1 मुखर। कोई रूसी रूले।
  • मैं सकारात्मक सकारात्मक और अपवाद परिदृश्य का परीक्षण करता हूं

केस स्टडी के बारे में मुझे डर है, मुझे यकीन नहीं है कि मैंने कोई भी देखा है। आपको अपनी परियोजना का निर्माण करने और अपने मामले का अध्ययन करने की आवश्यकता है। वे बहुत प्रभावित हो सकते हैं।

मुझे उम्मीद है यह मदद करेगा

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