TDD और अच्छे टेस्ट कवरेज के साथ लिखे गए ऐप्स के वास्तविक-विश्व उदाहरण? [बन्द है]


17

क्या कोई खुला स्रोत अनुप्रयोग हैं जो परीक्षण संचालित विकास का उपयोग करके विकसित किए गए हैं जो कि अच्छी इकाई परीक्षण के मॉडल के रूप में काम करते हैं?

मैं C # और .NET में उदाहरण देखना चाहूंगा। (ध्यान दें कि मैंने आवेदनों का उल्लेख किया है, न कि केवल पुस्तकालयों का।)

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

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

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

मैं निर्भरता और इस तरह के मजाक उड़ाने की तकनीकों को समझता हूं, लेकिन मेरे अनुभव में मॉकिंग का भारी उपयोग बहुत भंगुर परीक्षणों की ओर ले जाता है। यदि परीक्षणों का एक गुच्छा देखने पर मेरी पहली वृत्ति लाल हो जाती है, "महान, अब मुझे सभी मोक्स को ठीक करना है," तो मेरे परीक्षण एक सुरक्षा जाल के बजाय एक खींचें बन गए हैं।

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

मैं अच्छे कोड कवरेज, शायद सामग्री प्रबंधन प्रणाली, या CRUD ऐप के साथ कुछ nontrivial .NET अनुप्रयोगों का अध्ययन करना चाहूंगा। फिटनैसे परीक्षण की रूपरेखा जो अंकल बॉब के बारे में बात करती है, वह है जिसे मैं शायद देखूंगा, लेकिन जिस भाषा में मैं सबसे अधिक परिचित हूं, उस पर लिखी गई चीज़ को देखना अच्छा होगा।

ज्ञान के किसी भी सुझाव या शब्दों की सराहना की जाएगी।


1
का डुप्लीकेट programmers.stackexchange.com/questions/21791/...
liori

2
बिल्कुल नहीं ... मैं वास्तविक दुनिया के अनुप्रयोगों के उदाहरण देखने में रुचि रखता हूं। उस पोस्ट में स्वीकृत उत्तर परीक्षण ढांचे की सिफारिश करता है। मैंने पहले भी चौखटे और पुस्तकालयों के कुछ उदाहरण देखे हैं, लेकिन यह मेरे प्रश्न को संबोधित नहीं करता है।
जोश अर्ल

@ जोशर्ल - मैं सहमत हूँ .. मुझे नहीं लगता कि मेरा उत्तर नीचे अन्य पोस्ट के लिए प्रासंगिक होगा
हेंज़ोलो

जवाबों:


14

मुझे नहीं पता कि क्या TDD का उपयोग किया गया था, लेकिन परीक्षण का एक तारकीय उदाहरण sqlite है जिसमें एक उल्लेखनीय 100% शाखा कवरेज है , और उत्पाद कोड की तुलना में 1000 गुना अधिक परीक्षण कोड और स्क्रिप्ट हैं।


4
अगर कोड के उनके अनुपात का परीक्षण कोड के अनुपात में एक उल्लेखनीय बर्बादी की तरह लगता है, तो वह उच्च है
रायथल

6
@ रायथल: विफलता की लागत परीक्षण के प्रयास को निर्धारित करती है, न कि परीक्षण कोड की लंबाई को। पर्याप्त रूप से मिशन-महत्वपूर्ण दृष्टिकोणों में व्यापक उपयोग को देखते हुए, परीक्षण इसके लायक हो सकता है। मुझे यकीन नहीं है, हालाँकि, अगर SQLite ने इसे ज़्यादा नहीं किया।
थिटॉन

3
बहुत से लोगों के लिए साइक्लाइट निश्चित रूप से मिशन-क्रिटिकल है। आपको आश्चर्य हो सकता है कि इसका उपयोग कितनी बार किया जाता है (उदाहरण के लिए OSX, iOS, Android OS)। और आपको यह महसूस करना होगा कि परीक्षण कोड और डेटा की बहुत सारी लाइनें संभवतः मशीन द्वारा उत्पन्न की गई थीं। एक औद्योगिक शक्ति डेटाबेस में बहुत सारे किनारे हैं।
ब्रायन ओकले

10
SQLite है सबसे व्यापक रूप से इस्तेमाल किया ग्रह पर SQL डेटाबेस, यह अधिष्ठापन आधार परिमाण MySQL, PostgreSQL, एसक्यूएल सर्वर, ओरेकल, डीबी 2 से भी बड़ा के एक आदेश है संयुक्त । यह शायद सॉफ्टवेयर, अवधि के सबसे व्यापक रूप से उपयोग किए जाने वाले टुकड़ों में से एक है। यदि SQLite में एक बग होता, तो ग्रह का हर एक स्मार्टफोन काम करना बंद कर देता। मुझे लगता है कि थोड़ा व्यामोह को सही ठहराता है।
जोर्ग डब्ल्यू मित्तग

@ JörgWMittag वाह, मैं कभी नहीं जानता था कि SQLite के बारे में। मनोरंजक। धन्यवाद। लेकिन 1000 गुना अधिक परीक्षण कोड। ये लाजबाव है।
माइक कृंतक

4

ऑर्चर्ड प्रोजेक्ट वह हो सकता है जो आप ढूंढ रहे हैं .. यह एक .NET / MVC / TDD ऐप है जो काफी जटिल है, लेकिन बहुत बुरा नहीं है और यह कुछ अच्छे प्रथाओं और पैटर्न को प्रदर्शित करता है।

http://orchard.codeplex.com/wikipage?title=solution

और मुझे लगता है कि अद्यतन लिंक:

http://docs.orchardproject.net/


यह आशाजनक लग रहा है - खोदने के लिए इंतजार नहीं कर सकता। :)
जोश अर्ल

0

बहुत सारे थर्ड-पार्टी, ओपन-सोर्स लाइब्रेरी टीडीडेड हैं। राइनोमॉक्स और NHibernate जैसे हाइबरनेटिंग गैंडों की लाइब्रेरी, अपने डेवलपर्स द्वारा यूनिट-टेस्टिंग फ्रेमवर्क के रूप में XUnit का उपयोग करके TDDed हैं।

अब, OSS के साथ, आप आमतौर पर यह गारंटी नहीं दे सकते कि उत्पाद में हर कोई TDDed किया गया है। समुदाय में इस प्रथा सहित मानक हो सकते हैं, और वे एक बिल्ड-बॉट का भी उपयोग कर सकते हैं जो कोड कवरेज मेट्रिक्स करता है, लेकिन टीडीडी एक मानसिकता है जिसे डेवलपर द्वारा खरीदा जाना चाहिए, और जनता के साथ बड़े पैमाने पर खोलने में सक्षम होना चाहिए- स्रोत वीसीएस उन जैसे GitHub पर ट्रंक करता है, कोई भी किसी भी मात्रा में परीक्षण कवरेज के साथ कोई भी बदलाव कर सकता है (या यदि कवरेज की आवश्यकता है तो परीक्षण तथ्य के बाद लिखा जा सकता है, जो TDD की भावना का उल्लंघन है, लेकिन वास्तव में ऐसा नहीं है यह एक अच्छा तरीका है)

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