खोजने के लिए परीक्षकों के लिए कोड में जानबूझकर कीड़े छोड़ना


267

हम अपनी फर्म पर ऐसा नहीं करते हैं, लेकिन मेरे एक मित्र का कहना है कि उसके प्रोजेक्ट मैनेजर ने प्रत्येक डेवलपर को उत्पाद के क्यूए में जाने से ठीक पहले जानबूझकर बग को जोड़ने के लिए कहा। यह इस तरह काम करता है:

  1. उत्पाद के क्यूए में जाने से ठीक पहले, विकास टीम कोड में यादृच्छिक स्थानों पर कुछ जानबूझकर बग जोड़ती है। वे यह सुनिश्चित करने के लिए मूल, काम करने वाले कोड का ठीक से बैकअप लेते हैं कि उन बग्स को अंतिम उत्पाद के साथ शिप नहीं किया गया है।
  2. परीक्षकों को भी इसके बारे में सूचित किया जाता है। इसलिए वे कड़ी परीक्षा करेंगे, क्योंकि वे जानते हैं कि वहाँ कीड़े मौजूद हैं और उन्हें नहीं ढूंढना अक्षमता का संकेत माना जा सकता है।
  3. यदि बग (जानबूझकर या अन्यथा) पाया गया है, तो उन्हें विकास टीम को ठीक करने के लिए सूचित किया जाएगा। विकास टीम दूसरे स्तर के क्यूए में जाने से ठीक पहले कोड के संबंधित अनुभाग में एक और जानबूझकर बग जोड़ती है। परियोजना प्रबंधक का कहना है कि एक परीक्षक को एक डेवलपर की तरह सोचना चाहिए और उसे उन खंडों में नए बग की उम्मीद करनी चाहिए जहां बदलाव किए गए थे।

खैर, यह है कि यह कैसे जाता है। वे कहते हैं कि इस दृष्टिकोण के निम्नलिखित फायदे हैं।

  1. परीक्षक हमेशा अपने पैर की उंगलियों पर होंगे और वे पागलों की तरह परीक्षण करेंगे। इससे उन्हें छिपे (अनजाने) बगों को खोजने में मदद मिलती है ताकि डेवलपर्स उन्हें ठीक कर सकें।
  2. परीक्षक कीड़े पर फ़ीड करते हैं। किसी भी कीड़े को नहीं ढूंढने से उनके मनोबल पर असर पड़ेगा। इसलिए उन्हें खोजने के लिए एक आसान देने से उनके मनोबल में मदद मिलेगी।

यदि आप उस परिदृश्य को नजरअंदाज करते हैं जहां इन जानबूझकर बगों में से एक को अंतिम उत्पाद के साथ भेज दिया जाता है, तो इस दृष्टिकोण को अपनाने से पहले हमें क्या विचार करना चाहिए?

कुछ स्पष्टीकरण:

  1. वे स्रोत नियंत्रण में मूल कोड का ठीक से बैकअप लेते हैं।
  2. जब कोई परीक्षक जानबूझकर बग पाता है, तो विकास टीम इसे अनदेखा कर देती है। यदि परीक्षक को एक अनजाने (मूल) बग का पता चलता है, तो विकास टीम पहले यह जांचती है कि क्या यह किसी जानबूझकर बग के कारण हुआ है। यही है, विकास टीम सबसे पहले मूल कार्य कोड पर पुन: पेश करने की कोशिश करती है और यदि वे कर सकते हैं तो इसे ठीक करने की कोशिश करते हैं।
  3. बस क्यूए और विकास टीम के बीच संबंधों के मुद्दों की अनदेखी करें। मैंने विशेष रूप से प्रोग्रामर्स पर यह सवाल पूछा था , द वर्कप्लेस पर नहीं । विचार करें कि क्यूए और विकास टीम के बीच अच्छा तालमेल है, और वे काम के घंटों के बाद एक साथ पार्टी करते हैं। प्रोजेक्ट मैनेजर एक अच्छा, पुराना सज्जन व्यक्ति है जो दोनों टीमों (गॉडसेंड) का समर्थन करने के लिए हमेशा तैयार रहता है।

59
"एक परीक्षण को एक डेवलपर की तरह सोचना चाहिए" ... दिलचस्प। मुझे लगा कि यह स्पष्ट है कि एक परीक्षक को एक डेवलपर की तरह नहीं बल्कि एक उपयोगकर्ता की तरह सोचना चाहिए।
14

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

20
मैं क्यूई हूं। मुझे असली कीड़े मिलेंगे, धन्यवाद। मैं इस कंपनी को ऐसे छोड़ देता हूँ जैसे आग लगी हो। कोई भी (जानबूझकर) मेरा समय बर्बाद नहीं करता है।
अर्जुनशंकर

7
"हम अपनी फर्म पर ऐसा नहीं करते हैं, लेकिन मेरे एक मित्र का कहना है कि उनके सीटीओ ने प्रत्येक उत्पाद प्रबंधक को प्रत्येक सुविधा विकास चक्र की शुरुआत में अतिरिक्त सुविधाएँ जोड़ने के लिए कहा ..."
मार्को

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

जवाबों:


462

यह बिल्कुल पोषक लगता है। यह बहुत ही संदिग्ध लाभ के लिए बहुत प्रयास कर रहा है, और अभ्यास कुछ दोषपूर्ण परिसर पर आधारित लगता है:

  • जब तक कि उन्हें पता नहीं चलेगा कि वे हर दिन परीक्षण किए जा रहे हैं (जो मनोबल के लिए अच्छा नहीं हो सकता)

  • क्यूए को खोजने के लिए सॉफ्टवेयर में पर्याप्त अनजाने में बग नहीं पेश किए गए हैं

  • यह क्यूए का काम बग ढूंढना है - ऐसा नहीं है; यह सुनिश्चित करना है कि सॉफ्टवेयर उत्पादन की गुणवत्ता है

  • कि विकास और क्यूए के बीच इस तरह की लड़ाई कंपनी के लिए किसी तरह से स्वस्थ है - ऐसा नहीं है; सभी कर्मचारियों को एक-दूसरे के बजाय कंपनी के प्रतिद्वंद्वियों के खिलाफ एक साथ काम करना चाहिए।

यह एक भयानक विचार है और सवाल में परियोजना प्रबंधक एक झटका / बेवकूफ है जो लोगों और प्रेरणा के बारे में कुछ नहीं समझता है। और यह व्यापार के लिए बुरा है।


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


17
यह क्यूए का काम बग ढूंढना है - ऐसा नहीं है; यह सुनिश्चित करना है कि सॉफ्टवेयर उत्पादन की गुणवत्ता है इस के लिए कुछ स्पष्टीकरण की आवश्यकता है। बग को अलग करना और ठीक करना शिपिंग उत्पादन गुणवत्ता सॉफ्टवेयर में एक महत्वपूर्ण प्रक्रिया है।
कृष्णभद्र २

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

8
मैं सहमत हूं, अंतिम बिंदु को छोड़कर। क्यूए और विकास (और व्यापार) के बीच एक प्रतिकूल प्रकार का दृष्टिकोण होना काफी हद तक अपरिहार्य है। प्रत्येक समूह की अपनी इच्छाएं और विशेषज्ञता होती है। एक कंपनी के रूप में, इन्हें अच्छी तरह से काम करने के लिए संतुलन बनाने की आवश्यकता है। मेरे अनुभव में, "अच्छा खेलना" सिर्फ उन समूहों की ओर जाता है जो अपने एजेंडे को आगे नहीं बढ़ाते हैं, जिससे ठहराव या असंतुलन पैदा होता है। मैंने जिन सबसे अच्छी कंपनियों को देखा है, वे हैं जहाँ विकास, क्यूए, और व्यावसायिक पक्ष अपनी आवश्यकताओं के लिए धक्का देते हैं, लेकिन दूसरों पर एक चेक के रूप में कार्य करते हैं, जिससे कंपनी के लिए सबसे अच्छा संतुलन पर समझौता होता है।
तेलस्टीन

42
मैं एक और बिंदु जोड़ूंगा: एक जानबूझकर बग एक सच को छिपा सकता है जो प्रकट होता अगर जानबूझकर बग ने प्रक्रिया को रोक नहीं दिया (उदाहरण के लिए अपवाद को फेंकने से पहले)।
nkoniishvt 17

30
अगर मैं एक क्यूए लड़का था और मुझे पता चला कि मैं अपना समय बर्बाद कर रहा हूं और उद्देश्यपूर्ण तरीके से बुलबुल कीड़े को पेश कर रहा हूं, तो मुझे एक नई नौकरी मिल जाएगी।
किक

209

खैर, जो मैंने सीखा है उसके आधार पर:

  1. यह न तो स्कूल है और न ही नौकरी के लिए साक्षात्कार;
  2. परीक्षक बच्चे नहीं हैं;
  3. यह एक खेल नहीं है;
  4. इससे कंपनी का पैसा बर्बाद होता है।

क्यूए केवल बग ढूंढने के लिए नहीं हैं, बल्कि यह भी चिंता करने के लिए है कि सिस्टम कितना सहज है, उपयोगकर्ता के लिए सीखने की अवस्था क्या है , प्रयोज्य और सामान्य रूप से पहुंच । उदाहरण के लिए: "क्या सिस्टम बदसूरत है ?", "क्या उपयोगकर्ता का रंग अंधा है और सामान लाल और हरा है?" उन्हें भी शिकायत करनी चाहिए।

क्यूए पास करने के लिए एक प्रणाली के लिए न्यूनतम आवश्यकताओं को आमतौर पर उस विशेष सुविधा के लिए एक उपयोगकर्ता कहानी में वर्णित किया जाता है या पीओ जादुई प्रणाली को अपने सिर में रखना चाहता था।

tl; डॉ

यह केवल बग ही नहीं है, परीक्षकों को इस संकीर्ण दृष्टिकोण से बाहर निकलना चाहिए।


26
+1 सभी 4 बिंदुओं से विशेष रूप से पहले सहमत हैं। प्रतिस्पर्धात्मक दृष्टिकोण जो कई नए देवता अक्सर लाते हैं, वे अपने पिछले 15 वर्षों के स्कूली शिक्षा को दर्शाते हैं - एक अत्यंत प्रतिस्पर्धी माहौल - कार्यस्थल के विपरीत जहां सहकारिता एक बेहतर दृष्टिकोण होगा।
माइकल डुरंट

1
शीर्ष उत्तर के लिए इस उत्तर को पसंद करते हैं।
फे्रप

1
"क्यूए केवल बग खोजने के लिए ही नहीं हैं, बल्कि [...]" - मैं सिर्फ यह कहना चाहता हूं कि कई स्थानों पर, सॉफ्टवेयर परीक्षण और गुणवत्ता आश्वासन का उपयोग परस्पर विनिमय के लिए किया जाता है। हां, यह बुरा है। जहां मैं काम करता था, हमारे पास एक रोजगार था जो राज्य का उपयोग करता था - प्रत्येक क्यूए विभाग की बैठक में - हम यहां जो करते हैं वह गुणवत्ता आश्वासन नहीं बल्कि गुणवत्ता नियंत्रण है। (वह हमारे क्यूए विभाग की आलोचना के रूप में इसका मतलब था।)
मारियो

1. यह स्कूल है। हर दिन एक स्कूल का दिन होता है। यदि आप एक इंजीनियरिंग अनुशासन में काम कर रहे हैं, लेकिन आप हर दिन सीखना नहीं चाहते हैं, तो आपको मेरे कार्यालय से बाहर निकलना चाहिए। यह एक साक्षात्कार भी है। यह सुनिश्चित करने के लिए कि विभाग को पैसे का मूल्य मिल रहा है, प्रदर्शन को हर एक दिन मापा जाना चाहिए। 2. अगर मेरे करियर ने मुझे कुछ भी सिखाया है, तो इसका मतलब है कि QA की मानसिक क्षमता 14 साल के बच्चों की है। वे बच्चे हैं और उन्हें भेड़ के झुंड की तरह प्रबंधित किया जाना चाहिए।
गुस्डोर

1. यह इस अर्थ में एक स्कूल नहीं है कि लोग सहयोग कर सकते हैं और ग्रेड के लिए एक दूसरे के खिलाफ प्रतिस्पर्धा नहीं कर सकते हैं, आपके काम को कॉपी करने जैसी कोई चीज नहीं है क्योंकि कार्यों को केवल एक बार पूरा किया जाना चाहिए और किसी सहकर्मी से मदद मांगना कोई शर्म की बात नहीं है। और 2. यदि आपका क्यूए है कि आपकी समस्या एचआर में खराब है, और वे हैं जो कार्यालय से बाहर निकलना चाहिए।
स्पार्क

100

बुरा विचार।

परीक्षक के दृष्टिकोण से: "तो वे कड़ी परीक्षा करेंगे, क्योंकि वे जानते हैं कि वहाँ कीड़े मौजूद हैं और उन्हें नहीं ढूंढना उनकी अक्षमता माना जा सकता है।" मूल रूप से देवता उल्लू कोड को फंसाने वाले होते हैं। कुछ लोग ऐसे काम करना पसंद करते हैं जो अंततः व्यर्थ हैं (क्योंकि कीड़े पहले से ही ज्ञात हैं) लेकिन जो अभी भी प्रभावित करते हैं कि उन्हें कैसे माना जाता है। यदि उल्लू के जाल को खोजने के लिए ठोस दंड हैं, तो और अधिक। और क्या आप जानते हैं कि परीक्षक कीड़े खोजने पर पनपे हैं? यह एक जहरीले टकराव के माहौल जैसा लगता है; क्यूए खुश होना चाहिए अगर वे जिस कोड की जांच कर रहे हैं वह उच्च गुणवत्ता वाला है। हालांकि अगर वे बग द्वारा भुगतान किया जाता है ... http://thedailywtf.com/articles/The-Defect-Black-tekNet

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


32
यदि वे प्रति बग का भुगतान करते हैं, तो यह
B payови

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

पहली बात जो मेरे दिमाग में कौंध
डैन नीली

10
> असली कीड़े दरवाजे से बाहर जा रहे हैं। मैं बिग टेस्टिंग करता था। आप थीसिस के साथ शुरू करते हैं (गैर-तुच्छ) कोड में हमेशा कीड़े होते हैं। क्यूए वे नायक हैं जो उन्हें ग्राहक से पहले पाते हैं। बग हमेशा रहते हैं। यदि आप कृत्रिम कीड़े का परिचय देते हैं, तो आप समय बर्बाद कर रहे हैं, आप असली कीड़े ढूंढने में खर्च कर सकते हैं; परीक्षण का समय सीमित है, आप अनावश्यक काम जोड़कर गुणवत्ता कम कर रहे हैं।
RedSonja

58

मैं उपरोक्त उत्तरों से पूरी तरह सहमत हूं कि यह प्रेरणा के लिए बुरा क्यों है और बस आम तौर पर भयानक लोग प्रबंधन। हालाँकि, ऐसा न करने के पीछे शायद तकनीकी कारण हैं:

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

  1. पहले कथन के आधार पर, आप वास्तव में इन दो पासों में अपने इच्छित उत्पादन कोड का परीक्षण कभी नहीं करते हैं।

  2. मुझे लगता है कि जब आप किसी ग्राहक के लिए बदलाव के माध्यम से दौड़ने की कोशिश कर रहे हैं, तो आप अपने जारी किए गए उत्पादन कोड में गलती से 'जानबूझकर' बग सहित संभावना बढ़ा सकते हैं। कुछ बिंदु पर कुछ लाल गाल हो सकता है।

  3. मुझे लगता है कि यह सिर्फ आपके परीक्षकों को आपके डेवलपर्स की तरह सोचने के लिए प्रशिक्षित करता है (यानी टॉम यहां बग कैसे जोड़ेंगे) जो संभवतः उन बगों को खोजने की संभावना कम कर देता है जिनके बारे में टॉम ने सोचा नहीं था।


43
आपके लिए +1 वास्तव में इन दो पासों में आपके इच्छित उत्पादन कोड का परीक्षण नहीं करता है। आप उत्पादन कोड का परीक्षण किए बिना जारी करने के बारे में सोच भी कैसे सकते हैं; यदि आप जानबूझकर बग के बिना फिर से परीक्षण कर रहे हैं तो आप अपने प्रयास को दोहरा रहे हैं और प्रारंभिक प्रयास को बर्बाद कर रहे हैं।
adamdc78

51

संपादित करें

मैं स्पष्ट होना चाहता हूं कि यह उत्तर केवल आपकी क्यूए प्रक्रिया के परीक्षण की अवधारणा के बारे में बात कर रहा है, और मैं प्रश्न में चित्रित विशिष्ट पद्धति का बचाव नहीं कर रहा हूं।

अंत संपादित करें

यह जांचने का एक वैध कारण है कि आपका परीक्षण / जाँच वास्तव में काम कर रहा है या नहीं। मैं आपको निर्माण से एक उदाहरण देता हूं, लेकिन सिद्धांत एक ही है।

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

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

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

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

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


1
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
यानिस

हैलो सभी को। टिप्पणियों के लिए चर्चा थोड़ी लंबी हो रही थी। जैसा कि आप मेरी पिछली (स्वचालित) टिप्पणी से देख सकते हैं, मैंने सभी टिप्पणियों को एक समर्पित चैट रूम में स्थानांतरित कर दिया है । यदि आप उत्तर पर चर्चा जारी रखना चाहते हैं, तो कृपया इसे उस चैट रूम में करें, और यहाँ नहीं। धन्यवाद।
यानिस

3
इसलिए वर्णित दृष्टिकोण का उपयोग कभी-कभार परीक्षण करने के लिए किया जा सकता है , न कि एक स्थायी प्रक्रिया के रूप में।
gerlos

30

ईमानदारी से, मैं इस व्यवहार को अनैतिक और अव्यवहारिक कहूँगा। पीएम को कुछ गंभीर रिट्रीटिंग की जरूरत है, अगर टर्मिनेशन नहीं है।

  • यह गुणवत्ता आश्वासन की अवधारणा की समझ की मूलभूत कमी को दर्शाता है । परीक्षकों को डेवलपर्स की तरह नहीं सोचना चाहिए: उन्हें अंतिम उपयोगकर्ताओं की तरह सोचना चाहिए। क्यूए टीमों के होने का पूरा कारण यह है कि डेवलपर्स स्वाभाविक रूप से कोड के बहुत करीब हैं; क्यूए कोड से पर्याप्त दूरी बनाए रखने के लिए माना जाता है कि वे देवों को याद करते हुए पकड़ सकते हैं।
  • यह क्यूए प्रयास बर्बाद करता है । यह मानते हुए कि ये बग्स तुच्छ नहीं हैं-जब वे होते हैं, तो इसका मतलब है- इसका मतलब है कि क्यूए समय और संसाधन खर्च कर रहा है, जो पहले से ही ज्ञात चीजों की जांच कर रहे हैं, जब वे उस प्रयास को खर्च कर सकते हैं जो कि ज्ञात नहीं है।
  • यह डेवलपर प्रयास को बर्बाद करता है । क्यूए लोगों को इन गैर-तुच्छ बग को पकड़ने के लिए, डेवलपर्स को पहले उन्हें लिखना होगा। इसके लिए अभी और प्रयास करने की आवश्यकता है, न केवल बग को कोड करने में, बल्कि सॉफ्टवेयर आवश्यकताओं और डिजाइन पर विचार करने में भी खर्च किया जाता है।
  • यह अनावश्यक जोखिम में उत्पादन डालता है । परिवर्तन ठीक से मर्ज नहीं होने से पहले यह केवल समय की बात है।
  • यदि यह ऊपर नहीं करता है, तो यह व्यर्थ है । यदि सभी ज्ञात बग तुच्छ हैं, तो वे घटिया श्रमिकों को नहीं पकड़ेंगे: वे केवल उन लोगों को पकड़ेंगे जो कोई काम नहीं कर रहे हैं। ऐसा करने के लिए बेहतर तरीके हैं।
  • यह काम के माहौल को खराब करता है । आपके क्यूए परीक्षक पेशेवर हैं। उन पर पेशेवर होने तक भरोसा किया जाना चाहिए जब तक कि संदेह करने का वास्तविक कारण न हो। जब अन्यथा संदेह करने का कारण है, तो इन माइंड गेम्स के बजाय एक उचित जांच होनी चाहिए। और कुछ भी मनोबल को मारता है।

गंभीरता से। यहां तक ​​कि अगर पीएम का व्यामोह इस विशिष्ट मामले में अच्छी तरह से स्थापित हो जाता है, तो यह कोई ऐसा व्यक्ति नहीं है जिसके पास कोई व्यवसाय प्रबंधन परीक्षक है।


28

व्यक्तिगत रूप से, मैं इस दृष्टिकोण से असहज महसूस करता हूं।

मुख्य बात जो मुझे चिंतित करती है वह है जानबूझकर बग डालने की व्यावहारिकता । यह मुझे लगता है कि किसी भी तरह से करना मुश्किल है जो कि पूर्वानुमान है।

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

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

तो, कुल मिलाकर, आश्वस्त नहीं है।

दूसरी ओर, हम ग्राहकों को क्यूए टीमों के काम को सत्यापित करने देते हैं, जो संभवतः आदर्श नहीं है। हालांकि यह एक बहुत शक्तिशाली प्रतिक्रिया पाश है।


1
मुझे फीडबैक लूप पावर का विचार पसंद है!
jxramos

23

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

इसके सरलतम मामले में, मान लीजिए कि आप 100 बगों का बीजारोपण करते हैं और वे वास्तविक बगों की पूर्ण अवधि के प्रतिनिधि हैं (मुझे पता है, संभावना नहीं है, लेकिन मैं सरल हूं)। आप क्यूए को नहीं बताते हैं कि आप प्रयोग को खराब करने से बचने के लिए ऐसा कर रहे हैं । QA प्रक्रिया के अंत में मान लें कि उन्हें 100 में से 60 बीज (और अन्य असली कीड़े) मिले। अब आप जानते हैं कि QA 60% बग ढूंढ रहा है।

आप वास्तविक बगों की संख्या की गिनती करके और नकली बग अनुपात को लागू करके इसे और बढ़ा सकते हैं । हमारे उदाहरण में, यदि QA को 200 असली बग मिलते हैं, तो आप यह निष्कर्ष निकाल सकते हैं कि उनमें से केवल 60% ही मिले, इसलिए 133 शेष हैं।

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

इसे संपूर्ण QA प्रक्रिया पर लागू किया जाना चाहिए जिसमें डेवलपर इकाई परीक्षण, निरंतर एकीकरण, और, यदि उपलब्ध हो, एक समर्पित QA टीम शामिल होगी।

यह एक मीट्रिक है , और एक प्रबंधन प्रेरक उपकरण के रूप में अपहरण नहीं किया जाना चाहिए।


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

1
एसक्यूएल इंजेक्शन ऐसा करने के लिए एक अच्छा है, जैसा कि आप सिर्फ "तोड़" करने के लिए यादृच्छिक पर n sql स्टेटमेंट चुन सकते हैं
इयान

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

20

बुरा विचार।

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

इस तरह की सोच QE को केवल मैनुअल परीक्षक होने के कारण जोड़ती है और परीक्षण के तहत वास्तविक कोड को समझने के लिए प्रेरित नहीं करती है।

मैं एक वरिष्ठ क्यूई हूं और मैंने जिन संगठनों में काम किया है, उनमें यह एक परिचित मुद्दा है।


7
मेरी पत्नी ने 8 साल के लिए क्यूए किया, और सिर्फ देव के लिए छोड़ दिया - मुख्य रूप से इस तरह के भरोसेमंद मुद्दों के कारण। यह सिर्फ परीक्षक का अपमान है।
ब्रायन बोएचेचर

19

मैं बुरा विचार कहूँगा।

एक: प्रोग्रामर कोड में जानबूझकर बग डालने के लिए समय बिता रहे हैं, और अच्छे संस्करण को बचाने के लिए कुछ प्रयास करते हैं। जबकि परीक्षकों को निश्चित रूप से सब कुछ का परीक्षण करना चाहिए, जिसमें लगाए गए बग के साथ विशेषताएं भी शामिल हैं, जब वे पाते हैं कि एक वे संभवतः वापस जाना होगा और उस परीक्षण को फिर से चलाने के लिए यह सत्यापित करने के लिए कि यह वास्तव में एक बग था (और नहीं कि परीक्षक भ्रमित था किसी तरह)। कम से कम, परीक्षक लगाए गए बगों को लिखने में समय बिताने जा रहे हैं। फिर प्रोग्रामर को लगाए गए बग को ठीक करने में समय बिताना होगा। यह बहुत प्रयास है जिसे अच्छा कोड लिखने और असली कीड़े लिखने की कोशिश में खर्च किया जा सकता है।

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

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

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


"टू" में युक्ति के बारे में यह बात एक उत्कृष्ट सादृश्य है।
क्युरेलासा

14

मैं वास्तव में यह एक बुरा विचार नहीं है। ऐसी बहुत सी चीजें हैं जो मैं बेहतर काम करने की कल्पना करूंगा:

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

  2. कई क्यूए टीमें हैं, जो प्रतिस्पर्धा कर सकते हैं। आपको पाठ्यक्रम का एक समझदार मीट्रिक खोजने की आवश्यकता है। निश्चित रूप से सिर्फ मुद्दों की संख्या नहीं। प्रस्तावित संवर्द्धन के दोष या व्यावसायिक मूल्य (हितधारकों द्वारा निर्धारित) की गंभीरता में फैक्टरिंग में मदद करनी चाहिए।

यह बताना कठिन है कि क्या QA "काफी अच्छा" है। क्यूए के लिए "कभी सुधार" करने के तरीके खोजने के लिए यह लंबे समय में आसान और संभवतः बेहतर भी है।

फिर भी, अगर आप जानबूझकर बग का परिचय देते हैं, तो एक समस्या है: आप "सही" कोड को कैसे जानते हैं कि वास्तव में पहले स्थान पर सही था? 2nd QA के बाद आप उन सभी जानबूझकर बग को हटा देते हैं जिनकी खोज नहीं की गई थी। यह जानने का कोई तरीका नहीं है कि आप या तो उन्हें कोड द्वारा प्रतिस्थापित नहीं कर रहे हैं जो कि एक अलग तरीके से टूट गया है या आप उस टूटे हुए व्यवहार को सक्षम नहीं कर रहे हैं जो पहले अप्राप्य था (उदाहरण के लिए: कुछ संवाद जानबूझकर बग के कारण नहीं खुले थे, लेकिन संवाद ही टूट गया है - आपको सिर्फ इसलिए पता नहीं चलता क्योंकि परीक्षकों को यह देखने को नहीं मिला)।


5
यदि आपने उस पहले वाक्य को छोड़ दिया तो मेरे पास + 1 होगा, क्योंकि बाकी सब कुछ अच्छा है :) यह केवल एक भयानक विचार है, बुरा एक समझ है। क्यूए को जवाबदेह बनाने का सबसे आसान तरीका यह है कि इस क्षेत्र में होने वाले कीड़ों की संख्या पर नज़र रखी जाए। यह अकेले प्रस्तावित लाभों के दावे को पूरा करने के लिए इसका लाभ होगा।
डंक

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

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

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

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

9

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

इसे म्यूटेशन टेस्टिंग कहा जाता है । स्रोत कोड में छोटे परिवर्तन के निर्माण को स्वचालित करने के लिए सॉफ्टवेयर का उपयोग करने का विचार है (जिसे म्यूटेंट कहा जाता है)। परिवर्तनों को विभिन्न व्यवहार बनाने के लिए डिज़ाइन किया गया है, उदाहरण के लिए, हम बदल सकते हैं

if x < 10:
    print "X is small!"

में

# we flipped the inequality operator
if x > 10:
    print "X is small!"

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


7

मुझे यह विचार पसंद आया। क्या यह जनरल पैटन था, जिसने कहा, "जितना अधिक आप शांति से पसीना बहाते हैं, उतना ही कम आप युद्ध में खून बहते हैं।"

जानबूझकर बग्स को "समय बर्बाद करना" परीक्षकों के लिए। लेकिन यह भी उन्हें कठिन काम करता है, जिसका अर्थ है कि वे भी अनजाने में कीड़े खोजने का एक बेहतर काम करेंगे। (और आपके पास "मूल" की एक प्रति है ताकि आपको जो करना है उसके साथ नहीं रहना पड़े।)

अधिक अनजाने बगों को खोजने से आपको लंबे समय में और अधिक दुःख से बचाने की आवश्यकता होगी जो जानबूझकर लोगों से निपटने की लागत है।

साथ ही, आप अंदाजा लगा सकते हैं कि आपके परीक्षक कितने अच्छे हैं, यह अपने आप में एक छोटा लाभ नहीं है।


1
मुझे लगता है कि इसके अच्छे हिस्से हैं। एक बग को खोजने के लिए बेहतर है क्योंकि यह इसे जंगली में बनाता है, और मैं बाहरी हमलों का जवाब देने के बजाय अपने आंतरिक क्यूए (यही वे सब के लिए भुगतान कर रहे हैं?) दबाऊंगा। बग हंटिंग एक हिस्सा है, और जब तक इस तरह के परीक्षण को ठीक से संभाला जाता है, मैं नहीं देखता कि यह एक मूल्यवान हिस्सा क्यों नहीं हो सकता है।
वर्नरसीडी

1
"मूल" की प्रतिलिपि बग-मुक्त नहीं हो सकती है और यह भी परिभाषा रहित है (क्योंकि कोड बग को जोड़ने के लिए बदल दिया गया था)।
रोजर रोलैंड

1
मेरे अनुभव में, बग जानवरों को अलग नहीं किया जाता है और वे अकेले नहीं बैठते हैं। सॉफ्टवेयर एक सिस्टम का हिस्सा है और बग्स - जानबूझकर या नहीं - सिस्टम को प्रभावित करते हैं । जब तक हम सॉफ्टवेयर के तुच्छ टुकड़ों के बारे में बात कर रहे हैं।
रोजर रोलैंड

18
शून्य प्रमाण है कि यह विधि जानबूझकर डाले गए कीड़ों से परे 1 अतिरिक्त बग को ढूंढेगी। शून्य प्रमाण है कि इससे क्यूए को बग ढूंढने में अधिक मेहनत करनी पड़ेगी। वे कम मेहनत करने की कोशिश कर सकते हैं। इसके अलावा, चूंकि आपने जानबूझकर टूटे हुए कोड (हमारे पूर्ण उड़ाए गए परीक्षण में 3 सप्ताह लगते हैं) को स्वीकार करते हुए स्वीकृति परीक्षण प्रक्रिया परीक्षण चक्र का एक पूरा भाग बर्बाद कर दिया है, अब आपको वास्तविक कोड के साथ फिर से तैयार करना होगा जो तैनात होने वाला है क्योंकि टूटा हुआ संस्करण एक ही बिल्ड नहीं है, इसलिए इसके परीक्षण "वास्तविक" बिल्ड के सत्यापन के लिए बहुत बेकार हैं।
डंक

6
मैं अनुमान लगा रहा हूं कि पैटन का मतलब था कि आपको शांति के समय कठोर प्रशिक्षण और क्षेत्र अभ्यास करना चाहिए। सादृश्य के लिए आईटी स्कूल या पोस्ट-डिग्री प्रशिक्षण में कठोर कक्षाएं होनी चाहिए। मुझे पूरा यकीन है कि पैटन का मतलब यह नहीं था कि अधिकारियों को अपने पैर की उंगलियों पर सैनिकों को रखने के लिए पीछे से अपने सैनिकों को गोली मारने का निर्देश दिया जाना चाहिए!
Jay

7

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

पॉजिटिव आउटकम - क्यूए टीम बग्स खोजने के लिए कड़ी मेहनत करती है। कौन जानता है, शायद वे इसे एक चुनौती के रूप में देखते हैं। यह एक दोस्ताना खेल है। या वे सिर्फ इसलिए कर रहे हैं क्योंकि उन्हें देखा जा रहा है (नागफनी प्रभाव?)।

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

कोई प्रभाव नहीं - मेरे लिए इस तरह की आवाज से कोई फर्क नहीं पड़ता, इसलिए परेशान क्यों हो? आप समय बर्बाद करने और लोगों को परेशान करने का जोखिम उठाते हैं।

हम सभी सहमत थे कि यह 90% समय तक काम नहीं करेगा। यह अन्य 10% के लिए बहुत अच्छा नहीं है। अपने लिए चीजों को परखें। क्या ग्राहक एक रिलीज़ से अधिक संतुष्ट हैं जिसमें जानबूझकर कोड बग हैं? क्या यह अन्य क्षेत्रों में कार्यकर्ता मनोबल और उत्पादकता को प्रभावित करता है? टर्नओवर बढ़ाएं? तुम हमें बताओ।


निश्चित रूप से नाइट-पिकी समस्याओं के लिए अग्रणी इस के साथ सहमत होने के कारण।
एडम जॉन्स

@ अदमजोन - आप सुनिश्चित करने के लिए कभी नहीं जानते हैं जब तक आप कोशिश नहीं करते हैं और इसका परीक्षण नहीं करते हैं। बेहतर तरीके हैं, इसलिए यह लगभग मेरे लिए एक अंतिम उपाय होगा।
जेएफओ

7

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

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

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

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


4
कोड में डेवलपर्स "इंजेक्ट" बग होने के बजाय, उनका समय यह पहचानने में बेहतर होगा कि उन बग्स को सिस्टम में कैसे शुरू किया जा सकता है और फिर उन बग्स को सुनिश्चित करने के लिए कोड को सही नहीं किया जा सकता है या ठीक से नियंत्रित नहीं किया जा सकता है सॉफ्टवेयर। एक परियोजना को विकसित करने का लक्ष्य क्यूए प्रणाली का परीक्षण नहीं करना है, यह एक प्रयोग करने योग्य मजबूत और काम करने वाली प्रणाली का निर्माण करना है जो कि इसके उपयोगकर्ता इसे करना चाहते हैं।
डुंक

4

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

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


2

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

इसलिए यदि आप इसे ठीक से संरचना करते हैं, तो आप इस तकनीक का उपयोग यह अनुमान लगाने के लिए कर सकते हैं कि आपके द्वारा जहाज पर जाने वाले उत्पाद में कितने निराधार कीड़े हैं। तो कल्पना कीजिए कि आपने अपने टेस्ट बिल्ड में 100 बग को कृत्रिम रूप से उकेरा है, और परीक्षक उनमें से 50 को ढूंढते हैं। तब आप अनुमान लगा सकते हैं कि एक निश्चित संभावना है कि अगर उन्हें 50 अशिक्षित कीड़े मिले, तो शायद खोजने के लिए 50 शेष हैं।

बेशक, यह कई समस्याओं से भरा है। आप तय कर सकते हैं कि इन आंकड़ों के आधार पर जहाज चलाना है, लेकिन वास्तविक जीवन में, आपको एक बहुत बुरा मुद्दा, या एक हजार मामूली परेशानियां मिल सकती हैं।

फिर भी - ज्ञान शक्ति है, और इस तकनीक के बिना, आपको अपने कोड आधार की गुणवत्ता का भी कम विचार है। यदि आप इसे सम्मानपूर्वक और सही कारणों से लागू कर सकते हैं, तो मैं कहूंगा "क्यों नहीं?"


2

एक बात और किसी ने अभी तक उल्लेख नहीं की है: उत्परिवर्तन परीक्षण

यह वह जगह है जहाँ एक स्वचालित उपकरण आपके स्रोत कोड को लेता है और जानबूझकर उसमें कीड़े डालता है। (जैसे, बेतरतीब ढंग से चुने गए स्टेटमेंट को डिलीट करें, a और a को OR, या जो भी बदलें।) इसके बाद यह आपका पूरा टेस्ट सूट चलाता है, और जाँचता है कि टेस्ट पास करते हैं या नहीं।

यदि सभी परीक्षण पास हो जाते हैं, तो दो संभावनाएँ हैं:

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

ध्यान दें कि, आपके प्रस्ताव के विपरीत, मैंने जो कुछ ऊपर वर्णित किया है वह स्वचालित है । आप डेवलपर्स के समय को हाथ से व्यर्थ बग डालने के लिए बर्बाद नहीं कर रहे हैं। और तुम परीक्षकों का समय बर्बाद नहीं कर रहे हो ज्ञात कीड़े। केवल एक चीज जो आप उपयोग कर रहे हैं वह मशीन का समय है, जो बहुत सस्ता है। (मशीनें 20,000 बार एक ही परीक्षण करने से ऊब नहीं जातीं। कुछ समय बाद मनुष्य देखभाल करना बंद कर देते हैं!)

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

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


1

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

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

यदि परीक्षण अभी भी काम करते हैं तो आप सत्यापित करने के लिए जानबूझकर उत्पादन कोड को तोड़ सकते हैं।

कई स्तर हैं जिन पर यह संभव है:

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

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

चाहे वह किसी संगठन के लिए ज्ञात दोषपूर्ण उत्पाद संस्करणों के मुकदमों को रखने के लिए समझ में आता है और प्रतिगमन परीक्षण परीक्षण निर्भर करता है। एक ऑनलाइन दुकान के लिए मैं नहीं होगा। मोटर वाहन के लिए एम्बेडेड, एयरोस्पेस एम्बेडेड, बैंकिंग कार्ड या टीवी कार्ड का भुगतान मैं कर सकता हूँ।

यह कितना प्रयास है यह दृढ़ता से इस बात पर निर्भर करता है कि उत्पादन कोड से परीक्षण कैसे विघटित होते हैं। अधिक डिकोड किए गए परीक्षण उत्पादन कोड से हैं, ऐसा करने के लिए कम प्रयास, उत्पादन कोड के साथ परीक्षण अधिक सामंजस्यपूर्ण होते हैं, अधिक प्रयास।

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

उत्पादन कोड में जानबूझकर दोषों को इंजेक्ट करने की अवधारणा को तोड़फोड़ कहा जाता है , इंजेक्शन दोष को सबोटूर कहा जाता है ।


1

एक परीक्षक जो रिपॉजिटरी से सीधे कोड-टू-टेस्ट नहीं ले रहा है वह गलत कर रहा है। (1)

एक डेवलपर हैं जो है में जाँच ज्ञात-दोषपूर्ण कोड में भंडार गलत कर रही है। (2)


तो इस स्तर पर, इस योजना के लिए पहले से ही एक या दोनों पक्षों के बिना काम करने के लिए कोई रास्ता नहीं है जो विकास और परीक्षण के बुनियादी आधार का उल्लंघन करते हैं।


(1) क्योंकि आपको दस्तावेज़ की आवश्यकता है कि आपने किस संस्करण का परीक्षण किया है। Git हैश या एसवीएन संशोधन संख्या द्वारा टैग किया गया एक संस्करण कुछ ऐसा है जिसे आप परीक्षण कर सकते हैं, "कोड जो मुझे दिया था" नहीं है।

(2) क्योंकि आप सिर्फ एक परीक्षण ड्राइवर से बाहर नहीं हैं जो विफलता की उम्मीद कर रहा है।


यह कम से कम संभव, "एलेवेटर पिच" ​​कारण पर एक प्रयास है जो देवों, परीक्षकों, और प्रबंधन को समान रूप से समझ में आना चाहिए।


1
यह एक गोल तर्क है। आप कह रहे हैं "टेस्ट बिल्ड में बग्स का बीजारोपण गलत है क्योंकि डेवलपर्स को ज्ञात दोषपूर्ण कोड के साथ बिल्ड नहीं बनाना चाहिए"।
डोमिनिक क्रोनिन

@DominicCronin: इसके बारे में कुछ भी परिपत्र नहीं है। रिपॉजिटरी के लिए जो कुछ भी सराहा जाता है वह सबसे अच्छा संभव गुण होना चाहिए। वहाँ कारणों की एक पूरी गुलदस्ता है - कोड लाइनों के कृत्रिम परिवर्तन से बचने में से एक है (wrt "svn दोष" और इसी तरह के प्रतिनिधि कार्यों)। त्रुटि को फिर से बाहर करने के लिए "भूलने" का खतरा। समस्या यह है कि परीक्षक मूल रूप से रिपॉजिटरी परिवर्तन लॉग को देखकर "सीडेड" हो सकते हैं। कई और कारण, वस्तुतः असंतुलन का कोई लाभ नहीं। लेकिन मैं अंतरिक्ष से बाहर चल रहा हूं, और वैसे भी विचार एक , लघु कारण प्रदान करना था ।
DevSolar

@DominicCronin: या, इसे दूसरे तरीके से डाल करने के लिए - वहाँ हो सकता है एक मामले "बोने" एक बग के लिए किए जाने के लिए हो सकता है, लेकिन लाइन से पहले अच्छी तरह से तैयार किया जाना है करने कि रेपो के लिए। और दूसरी तरफ, परीक्षण के लिए "सीडेड" कोड होने पर , इसके लिए एक या दो चीजें हो सकती हैं, आपको कभी भी प्रतिबद्ध कोड का परीक्षण करना चाहिए । दो विचार - प्रत्येक पहले से ही अपने आप में विवादास्पद हैं - बस किसी भी समझदार तरीके से कनेक्ट न करें।
DevSolar 11

0

मैं आपको जानबूझकर कीड़े को इंजेक्शन लगाने के खिलाफ सलाह देता हूं कि आप क्यूए को भेजें।

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

यदि उन्हें आपके द्वारा लिखे गए अधिक गैर-कार्यशील एज केस बग्स मिलते हैं, तो यह निश्चित रूप से आपका क्यूए नहीं है जिसे पर्यवेक्षण की आवश्यकता है ... ;-)


2
ऐसा लगता है कि किए गए कुछ बिंदुओं पर पर्याप्त रूप से कुछ नहीं दिया गया है और पूर्व 16 उत्तरों में समझाया गया है
gnat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.