सॉफ्टवेयर डेवलपर्स की बड़ी कंपनियां अपने कार्यक्रमों में बग की जांच कैसे करती हैं?


15

मैं सोच रहा था कि सॉफ्टवेयर डेवलपर्स की बड़ी कंपनियां अपने कार्यक्रमों में बग के लिए कैसे जांच करती हैं।

क्या वे सिर्फ कई कंप्यूटरों पर इसका परीक्षण करते हैं?


13
उन्हें रिहा कर रहा है। (बग्गी के ढेरों को देखते हुए .... जो प्रमुख संस्थानों से
निकलते हैं

उनके पास बहुत आक्रामक बिक्री और विपणन अभियान है, अन्य देशों के विकास को आउटसोर्स करते हैं और जो कुछ भी कीड़े कर सकते हैं उनसे दूर हो जाते हैं ... जब तक कि वे "अप्रत्याशित रूप से" एक बड़ा बाजार हिस्सा नहीं खो देते हैं।
जॉब

आपको क्यों लगता है कि यह छोटी कंपनियों की तुलना में बड़ी कंपनियों के लिए अलग है?
जॉनफैक्स

जवाबों:


30

यहां कुछ ऐसी तकनीकें हैं जिनका उपयोग Google करता है।

  1. उन अच्छे डेवलपर्स को किराए पर लें, जिनके पास विश्वसनीय कोड का उत्पादन करने की संभावना है।
  2. यूनिट परीक्षण भारी।
  3. कोड समीक्षा का उपयोग करें ।
  4. एकीकरण मुद्दों को पकड़ने के लिए एक निरंतर निर्माण स्थापित करें ।
  5. QA विभागों को समर्पित किया है। मतलब दोनों लोग परीक्षण, और स्वचालित कार्यक्रम (उदाहरण के लिए सेलेनियम का उपयोग करके) जो अंतिम उपयोगकर्ताओं का अनुकरण करते हैं।
  6. दुर्व्यवहार के सबूतों को पकड़ने के लिए उत्पादन में निगरानी रखें।

मुझे लगता है कि कीड़े को पकड़ने में प्रभावशीलता के अवरोही क्रम में मुझे यह स्थान मिला है।


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

@gabe: मैंने प्रयुक्त शब्दावली में संकेत जोड़े हैं।
btilly

3
+1 - वास्तव में यह एक बहुत अच्छा क्रम है (1-> 6) जब यह बेस्ट (यानी सबसे सस्ता, समय और जटिलता में) बग को पकड़ने के लिए होता है।
दोपहर

1
शायद यह भी प्रयोज्य परीक्षण, रिबन से पहले 90% शब्द फ़ीचर अनुरोध पहले से मौजूद सुविधाओं के लिए थे, उपयोगकर्ताओं को बस उन्हें नहीं मिला
jk।

@jk: किसका आंकड़ा है? कृपया उद्धरण दें
JBRWilkinson

19

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

कई बार, डेवलपर्स खुद को विकास प्रक्रिया के दौरान कीड़े पाएंगे। इसके अलावा, ग्राहक बग ढूंढने के लिए अक्सर पहले होते हैं।

छोटी कंपनियां, जैसे कि मैं वर्तमान में काम कर रही हूं, एगाइल टेस्टिंग प्रैक्टिस का उपयोग करें


1
हाँ, और क्यूए लोग परीक्षण योजना बनाते हैं।
नौकरी

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

18

मैं इसकी एक कंपनी की परिपक्वता के बारे में कहूंगा न कि आकार की :) ऐसी बड़ी कंपनियां हैं जिनके पास खराब विकास प्रथाएं हैं और छोटी कंपनियां हैं जो खून बह रहा है।

सामान्य तौर पर एक परिपक्व विकास दल निम्नलिखित गतिविधियों में 1 में संलग्न होगा; सिस्टम और 2 के लिए नए बगों को शुरू करना; मौजूदा सिस्टम में बग ढूंढें।

यूनिट टेस्टिंग: ये अलग-अलग तरीकों के लिए 'मिनी ड्राइवर' हैं ताकि यह सुनिश्चित किया जा सके कि एक विधि यह कहती है कि यह क्या करता है। ये हमेशा स्वचालित परीक्षण होते हैं।

एकीकरण परीक्षण: इन परीक्षणों का उद्देश्य यह जांचना है कि कार्यक्षमता की एक बड़ी इकाई प्रणाली के भीतर काम करती है। इसमें तीसरे पक्ष के पुस्तकालयों के साथ परीक्षण डेटाबेस एकीकरण या एकीकरण शामिल हो सकता है। ये स्वचालित परीक्षण भी हैं।

स्वीकृति परीक्षण: उपयोगकर्ता की आवश्यकताओं का परीक्षण करने के लिए स्वीकृति परीक्षण लिखे जाते हैं। ये आमतौर पर 'खुशहाल मार्ग' का परीक्षण करते हैं। मेरी टीम में, ये परीक्षण यह दिखाने के लिए डिज़ाइन किए गए हैं कि यदि उपयोगकर्ता कार्यक्षमता का उपयोग करता है जैसा कि इसका उपयोग करने के लिए डिज़ाइन किया गया था, तो उन्हें कोई परेशानी नहीं होगी। मैनुअल या स्वचालित हो सकता है।

कार्यात्मक परीक्षण: ये परीक्षण स्वीकृति परीक्षणों के समान हैं, लेकिन वे 'दुखी मार्ग' का भी परीक्षण करते हैं। इन परीक्षणों का अर्थ स्पष्ट परिदृश्यों का परीक्षण नहीं करना है। मैनुअल या स्वचालित हो सकता है।

प्रतिगमन परीक्षण: हम इस शब्द का उपयोग ग्राहकों को जारी करने से पहले सिस्टम की 'पूर्ण परीक्षण' करने के लिए करते हैं। मैनुअल या स्वचालित।

गोरिल्ला परीक्षण: (केवल मैनुअल)। यह उस तरह का परीक्षण है जब बहुत ही स्मार्ट इंसान जानबूझकर एप्लिकेशन को तोड़ने की कोशिश करते हैं।

प्रदर्शन का परीक्षण यह सुनिश्चित करने के लिए करता है कि प्रदर्शन स्वीकार्य है और समय के साथ नीचा नहीं है। आमतौर पर स्वचालित।

स्थिरता परीक्षण: ये परीक्षण यह सुनिश्चित करने के लिए डिज़ाइन किए गए हैं कि सिस्टम समय के साथ स्थिर रहे। स्वचालित।

निरंतर एकीकरण: यह एक प्रणाली है जो स्वचालित रूप से आपके कोड की जांच करती है, इसे संकलित करती है और आपके स्वचालित परीक्षण चलाती है। आपका तेज़ परीक्षण (इकाई, एकीकरण) हर बार एक देव कोड शुरू करता है। कुछ अन्य लोग रात (स्वीकृति, कार्यात्मक) या साप्ताहिक (प्रदर्शन, स्थिरता) चलाते हैं।

कोड कवरेज रिपोर्ट: आपको दिखाता है कि आपके कोड का कितना परीक्षण किया गया है। कोड जिसमें कोई परीक्षण कवरेज नहीं है, उसके टूटने की अधिक संभावना है।

विभिन्न उपकरण जो कोड का विश्लेषण करते हैं: ये आमतौर पर दिखाते हैं कि कोड को संभावित रूप से बग्स से कम प्रभावित करने के लिए फिर से फैक्टर करने की आवश्यकता है।

जोड़ी प्रोग्रामिंग: कार्यक्षमता देने के लिए दो डेवलपर्स एक साथ काम करते हैं। "एक सामंजस्यपूर्ण जोड़ी अपने हिस्सों के योग से बेहतर है।"

दूर करने के लिए सबसे महत्वपूर्ण है: स्वचालन और निरंतर एकीकरण


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

1
@JBRWilkinson: मुझे लगता है कि हम इस बारे में बात करना शुरू कर सकते हैं कि किसी कंपनी के लिए 'परिपक्व' होने का क्या मतलब है। मेरा मतलब यह नहीं था कि इसका सुझाव उम्र के साथ लेना होगा, 'ज्ञान' की तरह। एक स्टार्टअप परिपक्व / बुद्धिमान हो सकता है, भले ही वह केवल एक या दो साल पुराना हो।
c_maker

4

यह कंपनी पर निर्भर करता है और उत्पादों पर यह विकसित होता है।

सबसे पहले, कई कंपनियां रिपॉजिटरी में जाने वाली त्रुटियों की मात्रा को कम करने के लिए कोड रिव्यू और अनिवार्य लाइनिंग (स्वचालित बग डिटेक्शन टूल) जैसी कोडिंग प्रथाओं को लागू करती हैं। कई कंपनियों ने यूनिट टेस्टिंग को भी अपनाया। यह वह मामला है जहां मैं काम करता हूं (Google)। जब कोड की जाँच की जाती है, तो परीक्षण सब कुछ के खिलाफ चलाए जाते हैं, यह सुनिश्चित करने के लिए कि कोई नई त्रुटि पेश नहीं की जाती है।

दूसरा, कई कंपनियों के पास क्यूए विभाग हैं जो व्यवहार को मान्य करने के लिए जिम्मेदार हैं। यह वित्त में विशेष रूप से आम है (जहां गलतियां महंगी हो सकती हैं और सत्यापन नियम जटिल हैं), लेकिन उन कंपनियों में भी मौजूद हैं जो उपयोगकर्ताओं को उत्पाद बेचते हैं जहां रिकॉल महंगा हो सकता है (जैसे, इंटेल, माइक्रोसॉफ्ट, आदि)।

तीसरा, जब भी संभव कंपनियां डॉगफूडिंग करती हैं (उनके अपने उपयोगकर्ता आंतरिक रूप से उत्पाद का उपयोग करते हैं) और फिर सीमित बेटास जारी करते हैं। इस स्तर पर कई त्रुटियां पकड़ी जाती हैं। उदाहरण के लिए, Microsoft पर काम करने वाले लोग आपके बाहरी और बाहरी कार्यालय और Windows और DevStudio के नए आंतरिक संस्करणों का उपयोग करते हैं। फिर उपयोगकर्ताओं या अनुबंधित कंपनियों के सीमित समूह इसका नमूना लेते हैं। इसी तरह, Google पर हम रिलीज से पहले GMail और डॉक्स के आंतरिक संस्करणों का उपयोग करते हैं। गेम कंपनियां अपने उत्पादों और सर्वर पर लोड आदि का परीक्षण करने के लिए खुले बेटों का आयोजन करती हैं।


1

बेशक जवाब "यह dpends" है, लेकिन मैं अपनी अब तक की सबसे बड़ी परियोजना से एक नमूना दूंगा, जिसमें लगभग 50 डेवलपर्स शामिल थे।

मूल सेटअप: BizTalk के साथ बड़ी मात्रा में डेटा संसाधित करने के लिए एक बैकएंड सॉफ़्टवेयर।

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

अगला चरण एक साप्ताहिक वर्चुअल पीसी बिल्ड था, जहां परीक्षकों ने प्रत्येक घटक के लिए विनिर्देश दस्तावेजों के आधार पर डेटा-फ्लो पर मुख्य रूप से स्वचालित एंड-टू-एंड परीक्षणों की एक श्रृंखला चलाई।

उसके बाद उसी वर्चुअल पीसी को कुछ व्यावसायिक डेटा के साथ समृद्ध किया गया था जो वास्तविक चीज़ के काफी करीब था और कुछ विशिष्ट उपयोग मामलों के साथ फिर से परीक्षण किया गया था।

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

एक अन्य ट्रैक पर इंस्टॉलेशन पैकेट को सिस्टम प्रदाता द्वारा यह देखने के लिए परीक्षण किया गया था कि क्या वे उत्पादन-जैसे वातावरण पर सही तरीके से स्थापित हैं और यदि कुछ विफल हो गया है तो उन्हें वापस रोल किया जा सकता है।

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

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


1

मूल प्रश्न अधिक विस्तृत जवाबों की तुलना में अधिक वैचारिक रूप से सामान्य लगता है, जो प्रदान किए गए थे।

Let .s इसे एक उच्च स्तर (कम विस्तृत) से देखते हैं। किसी व्यक्ति (व्यक्ति, कंपनी, जो भी हो) की विशिष्ट आवश्यकताओं को पूरा करने के लिए सॉफ्टवेयर विकसित किया जाता है।

उन लोगों को व्यक्तिगत कहानियों / आवश्यकताओं में मैप किया जाना चाहिए जो हाल ही में (एक निर्माण चरण में) स्रोत कोड में लागू की जाएंगी।

क्वालिटी एश्योरेंस (क्यूए) टीम (वास्तविक सॉफ्टवेयर टेस्टर) के लिए अच्छी तरह से परिभाषित कहानियों / आवश्यकताओं को अंतिम कोड को मान्य करने के लिए आवश्यक है, जब निष्पादित, उन कहानियों और आवश्यकताओं की मांगों को पूरा करता है। तो उस उद्देश्य के लिए, क्यूए टीम उस सत्यापन को करने के लिए "टेस्टकेस" बनाती है।

एक बार क्यूए टीम को जारी किया गया कोड, फिर परीक्षण किया जाएगा और बग की पहचान की जाएगी। विभिन्न प्रकार और गंभीरता के कीड़े। उन बगों को ट्रैक किया जाता है और डेवलपर्स उन्हें अंत में तय करने के लिए सौंपा जाता है।

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

मुझे उम्मीद है कि आपको समग्र प्रक्रिया को समझने (मोटे तौर पर) में मदद मिलेगी।


0

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

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