सॉफ्टवेयर विकास के अनुभव के मेरे वर्षों का सुझाव है कि व्यवहार में यह काम नहीं कर सकता है।
या तुमने कोशिश की? डेव और मैंने कई सामूहिक वर्षों के अनुभव के आधार पर, थॉटवर्क्स में खुद को और अन्य वरिष्ठ लोगों के अनुभव के आधार पर किताब लिखी, वास्तव में हम जिन चीजों पर चर्चा करते हैं। किताब में कुछ भी सट्टा नहीं है। हमारे द्वारा चर्चा की गई हर चीज को बड़े, वितरित परियोजनाओं पर भी आजमाया और परखा गया है। लेकिन हमारा सुझाव है कि आप इसे विश्वास में लें। बेशक आपको इसे स्वयं आज़माना चाहिए, और कृपया लिखें कि आपको क्या काम मिलता है और प्रासंगिक संदर्भ सहित क्या नहीं मिलता है, ताकि अन्य लोग आपके अनुभवों से सीख सकें।
सतत वितरण का स्वचालित परीक्षण पर एक बड़ा ध्यान है। हम इस बारे में बात करने वाली पुस्तक का 1/3 हिस्सा खर्च करते हैं। हम ऐसा इसलिए करते हैं क्योंकि वैकल्पिक - मैनुअल परीक्षण - महंगा और त्रुटि-प्रवण है, और वास्तव में उच्च गुणवत्ता वाले सॉफ़्टवेयर के निर्माण का एक शानदार तरीका नहीं है (जैसा कि डेमिंग ने कहा, "गुणवत्ता प्राप्त करने के लिए बड़े पैमाने पर निरीक्षण पर निर्भरता को कम करें। प्रक्रिया में सुधार करें और गुणवत्ता का निर्माण करें। पहली जगह में उत्पाद ")
पूर्ण परीक्षण कवरेज असंभव है। आपको बहुत समय लगाना होगा - और समय पैसा है - हर छोटी चीज के लिए। यह मूल्यवान है, लेकिन समय को अन्य तरीकों से गुणवत्ता में योगदान देने में खर्च किया जा सकता है।
बेशक पूर्ण परीक्षण कवरेज असंभव है, लेकिन विकल्प क्या है: शून्य परीक्षण कवरेज? एक व्यापार बंद है। कहीं न कहीं आपके प्रोजेक्ट के लिए सही उत्तर है। हम पाते हैं कि सामान्य तौर पर आपको स्वचालित परीक्षणों को बनाने या बनाए रखने में अपना लगभग 50% समय खर्च करने की उम्मीद करनी चाहिए। यह महंगा लग सकता है जब तक आप व्यापक मैनुअल परीक्षण की लागत पर विचार नहीं करते हैं, और उन बगों को ठीक करने के लिए जो उपयोगकर्ताओं को बाहर निकलते हैं।
कुछ चीजें अपने आप टेस्ट करना मुश्किल हैं। जैसे GUI। यहां तक कि सेलेनियम आपको यह नहीं बताएगा कि आपका जीयूआई विनकी है या नहीं।
बेशक। ब्रायन मारिक के परीक्षण चतुर्थांश देखें। आपको अभी भी मैन्युअल रूप से खोजपूर्ण परीक्षण और प्रयोज्य परीक्षण करने की आवश्यकता है। लेकिन यही है कि आप अपने महंगे और मूल्यवान मनुष्य का उपयोग करें - प्रतिगमन परीक्षण के लिए नहीं। कुंजी यह है कि आपको एक तैनाती पाइपलाइन लगाने की आवश्यकता है ताकि आप केवल उन स्वचालित निर्माणों के खिलाफ महंगी मैनुअल सत्यापन चलाने से परेशान हों जो स्वचालित परीक्षणों के एक व्यापक सूट से गुजर चुके हैं। इस प्रकार आप दोनों मैन्युअल परीक्षण पर खर्च होने वाले धन की मात्रा को कम कर देते हैं, और बग की संख्या जो इसे मैनुअल परीक्षण या उत्पादन के लिए बनाते हैं (जिस समय वे ठीक करने के लिए बहुत महंगे हैं )। स्वचालित रूप से किया गया परीक्षण उत्पाद के जीवनचक्र पर बहुत सस्ता पड़ता है, लेकिन निश्चित रूप से यह एक पूंजीगत व्यय है जो समय के साथ बढ़ता है।
भारी जुड़नार के बिना डेटाबेस का उपयोग कठिन है, और यहां तक कि आपके डेटा भंडारण में अजीब कोने के मामलों को कवर नहीं करेगा। इसी तरह सुरक्षा और कई अन्य चीजें। केवल व्यवसाय-परत कोड प्रभावी रूप से इकाई-परीक्षण योग्य है।
डेटाबेस का उपयोग आपके एंड-टू-एंड परिदृश्य आधारित कार्यात्मक स्वीकृति परीक्षणों द्वारा अनुमानित रूप से किया जाता है। सुरक्षा को स्वचालित और मैन्युअल परीक्षण के संयोजन की आवश्यकता होगी - स्वचालित प्रवेश परीक्षण और स्थिर विश्लेषण (जैसे) बफर ओवररन को खोजने के लिए।
व्यावसायिक परत में भी, अधिकांश कोड सरल कार्य नहीं हैं जिनके तर्क और रिटर्न मान परीक्षण उद्देश्यों के लिए आसानी से अलग किए जा सकते हैं। आप नकली वस्तुओं के निर्माण में बहुत समय बिता सकते हैं, जो वास्तविक कार्यान्वयन के अनुरूप नहीं हो सकते हैं।
यदि आप अपने सॉफ़्टवेयर और अपने परीक्षणों का बुरी तरह से निर्माण करते हैं तो बेशक स्वचालित परीक्षण महंगे हैं। मैं यह समझने की सलाह देता हूं कि पुस्तक "बढ़ते ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर, परीक्षणों द्वारा निर्देशित" यह समझने के लिए कि यह सही कैसे करना है ताकि आपके परीक्षण और कोड समय के साथ बनाए रखने योग्य हों।
एकीकरण / कार्यात्मक परीक्षण इकाई परीक्षण के पूरक हैं, लेकिन इन्हें चलाने में बहुत समय लगता है क्योंकि इनमें आमतौर पर प्रत्येक परीक्षण पर संपूर्ण प्रणाली को फिर से संगठित करना शामिल होता है। (यदि आप पुनर्निवेश नहीं करते हैं, तो परीक्षण वातावरण असंगत है।)
जिन उत्पादों पर मैं काम करता था, उनमें से एक में 3,500 अंत-टू-एंड स्वीकृति परीक्षणों का एक सूट है, जिसे चलाने के लिए 18h लगते हैं। हम इसे 70 बक्से के ग्रिड पर समानांतर में चलाते हैं और 45 मी में प्रतिक्रिया प्राप्त करते हैं। वास्तव में आदर्श से अधिक लंबे समय तक, यही कारण है कि हम यूनिट परीक्षणों के बाद पाइपलाइन में दूसरे चरण के रूप में इसे कुछ ही मिनटों में चलाते हैं, इसलिए हम अपने संसाधनों को एक ऐसे निर्माण पर बर्बाद नहीं करते हैं जिसमें हमारे पास कुछ बुनियादी स्तर नहीं है विश्वास है।
Refactoring या कोई अन्य परिवर्तन बहुत सारे परीक्षण तोड़ते हैं। आप उन्हें ठीक करने में बहुत समय बिताते हैं। यदि यह सार्थक विशिष्ट परिवर्तनों को मान्य करने की बात है, तो यह ठीक है, लेकिन अक्सर अर्थहीन निम्न-स्तरीय कार्यान्वयन विवरणों के कारण परीक्षण टूट जाते हैं, न कि सामान जो वास्तव में महत्वपूर्ण जानकारी प्रदान करते हैं। अक्सर ट्वीकिंग परीक्षण के आंतरिक भाग पर काम करने पर केंद्रित होती है, न कि वास्तव में उस कार्यक्षमता की जाँच करने पर जो परीक्षण किया जा रहा है।
यदि आपका कोड और परीक्षण अच्छी तरह से संक्षिप्त और शिथिल युग्मित हैं, तो रिफैक्टरिंग बहुत सारे परीक्षणों को नहीं तोड़ेगा। हम अपनी पुस्तक में बताते हैं कि कार्यात्मक परीक्षणों के लिए भी यही काम करना है। यदि आपकी स्वीकृति परीक्षण टूट जाते हैं, तो यह एक संकेत है कि आप एक या अधिक इकाई परीक्षणों को याद कर रहे हैं, इसलिए सीडी के हिस्से में प्रसव प्रक्रिया में पहले की कोशिश करने और खोजने के लिए आपके परीक्षण के कवरेज में लगातार सुधार होता है, जहां परीक्षण अधिक बारीक होते हैं और बग को ठीक करने के लिए सस्ता है।
बग पर फ़ील्ड रिपोर्ट को आसानी से कोड के सटीक माइक्रो-संस्करण के साथ मिलान नहीं किया जा सकता है।
यदि आप कर रहे हैं परीक्षण और अधिक बार जारी (सीडी की बात का हिस्सा) तो यह है परिवर्तन है कि बग की वजह से पहचान करने के लिए अपेक्षाकृत आसान। CD का संपूर्ण बिंदु फीडबैक चक्र को अनुकूलित करना है ताकि आप संस्करण नियंत्रण में जाँच के बाद जितनी जल्दी हो सके बगों की पहचान कर सकें - और वास्तव में, अधिमानतः इससे पहले कि वे जाँच कर रहे हैं (यही कारण है कि हम बिल्ड और यूनिट परीक्षण चलाते हैं चेक-इन से पहले।