What Makes Software Bugs Escape Testing? Evidence from a Large-Scale Empirical Study
C/C++ और Java सिस्टम में 14,000 से अधिक दोषों का यह बड़े पैमाने पर किया गया अनुभवजन्य अध्ययन यह प्रकट करता है कि रिलीज़ के बाद के बग मुख्य रूप से केवल कोड संरचना के बजाय पुराने, बार-बार संशोधित किए जाने वाले घटकों में विकासवादी और प्रक्रियागत गतिशीलता द्वारा संचालित होते हैं, जो यह सुझाव देता है कि विश्वसनीयता प्रयासों को इन परिपक्व, उच्च-चर्न (high-churn) क्षेत्रों में लक्षित परीक्षण को प्राथमिकता देनी चाहिए।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक जासूस हैं जो एक रहस्य सुलझाने की कोशिश कर रहे हैं: कुछ सॉफ्टवेयर बग्स सुरक्षा गार्डों (परीक्षकों) से कैसे बच निकलते हैं और केवल सार्वजनिक रिलीज के बाद ही क्यों दिखाई देते हैं?
पिछली अधिकांश रिसर्च उन बग्स पर केंद्रित रही है जिन्हें गार्डों ने दरवाजे खुलने से पहले ही पकड़ लिया था। यह शोध करने जैसा है कि आप केवल उन अपराधियों का अध्ययन कर रहे हैं जो एयरपोर्ट पर पकड़े गए, जबकि उन लोगों को पूरी तरह से अनदेखा कर रहे हैं जो सफलतापूर्वक छिपकर निकल गए। इन "पलायन करने वाले कलाकारों" (escape artists) को समझने के लिए, शोधकर्ताओं ने वास्तविक दुनिया के C/C++ और Java में लिखे गए सॉफ्टवेयर से 14,000 से अधिक बग्स का एक विशाल डेटाबेस बनाया। उन्होंने "पकड़े गए" बग्स (प्री-रिलीज़) की तुलना "पलायन करने वाले" बग्स (पोस्ट-रिलीज़) से की ताकि यह देखा जा सके कि उनमें क्या अंतर है।
यहाँ उनके निष्कर्ष दिए गए हैं, जिन्हें सरल उपमाओं के माध्यम से समझाया गया है:
1. यह कोड के "दिखावट" के बारे में नहीं, बल्कि इसके "इतिहास" के बारे में है
दो घरों की कल्पना करें।
- घर A एक बिल्कुल नया, साधारण शेड (shed) है।
- घर B एक पुराना महल है जिसका 20 अलग-अलग ठेकेदारों द्वारा 50 बार नवीनीकरण किया गया है, जिसमें कुछ दीवारें गिरा दी गई हैं और कुछ नई जोड़ी गई हैं।
शोधकर्ताओं ने पाया कि जो बग्स टेस्टिंग से बच निकलते हैं, वे आमतौर पर "साधारण शेड्स" (जटिल, बिखरे हुए कोड) में नहीं छिपे होते। इसके बजाय, वे लगभग हमेशा "पुराने महलों" (पुराना कोड जिसे बार-बार बदला गया है) में छिपे होते हैं।
- उपमा: कोड को एक व्यस्त हाईवे की तरह समझें। जो बग्स बच निकलते हैं, वे आमतौर पर बिल्कुल नई, खाली लेन में नहीं होते। वे पुराने, अत्यधिक उपयोग किए जाने वाले रास्तों में होते जहाँ वर्षों से निर्माण कार्य चल रहा है, साइन बोर्ड बदले जा रहे हैं और सड़क का काम हो रहा है। कोड के जिस हिस्से को जितना अधिक छुआ गया है, वह जितना पुराना है, और जितने अधिक लोगों ने उस पर काम किया है, वहां एक "भूतिया बग" (ghost bug) के छिपने की संभावना उतनी ही अधिक होती है, जो किसी विशेष ट्रैफिक पैटर्न के आने का इंतज़ार कर रहा है।
2. "पलायन करने वाले कलाकार" पकड़ने (और ठीक करने) में कठिन होते हैं
जब कोई बग रिलीज़ से पहले पाया जाता है (टेस्टिंग चरण के दौरान), तो यह अक्सर एक ड्राफ्ट में टाइपिंग की गलती (typo) खोजने जैसा होता है। आप इसे जल्दी ठीक करते हैं और यह खत्म हो जाता है।
लेकिन जब कोई बग निकल जाता है और रिलीज़ के बाद दिखाई देता है, तो यह एक पुल में संरचनात्मक दरार मिलने जैसा है जो केवल तभी दिखाई देती है जब एक विशिष्ट भारी ट्रक एक निश्चित समय पर उसके ऊपर से गुजरता है।
- निष्कर्ष: C/C++ (वह भाषा जिसका उपयोग ऑपरेटिंग सिस्टम और गेम इंजन जैसी प्रणालियों के लिए किया जाता है) में, इन निकले हुए बग्स को ठीक करने में बहुत अधिक समय लगता है और इसके लिए अधिक जटिल बदलावों की आवश्यकता होती है।
- उपमा: प्री-रिलीज़ बग को ठीक करना रसोई में टूटी हुई टाइल बदलने जैसा है। C/C++ में पोस्ट-रिलीज़ बग को ठीक करना एक इमारत में भार वहन करने वाले बीम (load-bearing beam) को बदलने जैसा है जबकि लोग अभी भी उसके अंदर रह रहे हों। इसमें अधिक समय, अधिक कौशल और अधिक सावधानीपूर्वक योजना की आवश्यकता होती है।
- Java का अंतर: दिलचस्प बात यह है कि Java (जो अक्सर बिजनेस ऐप्स के लिए उपयोग किया जाता है) में, बग ठीक करने के समय में अंतर उतना बड़ा नहीं था। यह ऐसा है जैसे Java में "इमारत" को मरम्मत करना आसान है, शायद इसलिए क्योंकि इसके टूल्स और सुरक्षा जाल (जैसे ऑटोमैटिक मेमोरी मैनेजमेंट) इस काम को C/C++ की तुलना में कम खतरनाक और अराजक बनाते हैं।
3. "टीम का आकार" नहीं बदलता, लेकिन "दिमागी शक्ति" बदल जाती है
आप सोच सकते हैं कि एक डरावने, निकले हुए बग को ठीक करने के लिए लोगों की एक पूरी सेना की आवश्यकता होगी। शोधकर्ताओं ने पाया कि यह सच नहीं है।
- निष्कर्ष: एक बग को ठीक करने में शामिल लोगों की संख्या लगभग समान रहती है, चाहे उसे जल्दी पकड़ा गया हो या देर से।
- उपमा: चाहे आप एक टपकते नल (प्री-रिलीज़) को ठीक कर रहे हों या बेसमेंट में फटे हुए पाइप (पोस्ट-रिलीज़) को, आपको अभी भी केवल एक या दो प्लंबरों की ही आवश्यकता होती है। अंतर यह नहीं है कि आपको अधिक लोगों की आवश्यकता है; अंतर यह है कि काम खुद अधिक कठिन और लंबा है। "पलायन करने वाले" बग्स बस अधिक भ्रमित करने वाले और पेचीदा होते हैं।
4. कोड का "मिजाज" (Vibe) बदल जाता है
शोधकर्ताओं ने कोड की "व्यक्तित्व" (personality) को देखने के लिए गणित का उपयोग किया।
- निष्कर्ष: रिलीज़ से पहले, कोड का "व्यक्तित्व" (इसका आकार, जटिलता और संरचना) काफी अनुमानित होता है। लेकिन निकले हुए बग्स के लिए, कोड का व्यक्तित्व अराजक और मिला-जुला होता है।
- उपमा: एक लाइब्रेरी की कल्पना करें।
- प्री-रिलीज़ बग्स उन सेक्शन में पाए जाते हैं जहाँ किताबें आकार और रंग के आधार पर करीने से व्यवस्थित होती हैं।
- पोस्ट-रिलीज़ बग्स उन सेक्शन में पाए जाते हैं जहाँ किताबों को कई वर्षों में कई अलग-अलग लोगों द्वारा इधर-उधर रखा गया है, ढेर लगाया गया है और फैला दिया गया है। इतिहास का "अराजकपन" ही बग को छिपाता है, न कि यह तथ्य कि किताबें बड़ी हैं या छोटी।
मुख्य निष्कर्ष (The Bottom Line)
पेपर यह निष्कर्ष निकालता है कि हमें केवल यह नहीं देखना चाहिए कि कोड अभी कितना "जटिल" दिख रहा है ताकि बग्स ढूंढे जा सकें। इसके बजाय, हमें इसके इतिहास को देखने की आवश्यकता है।
यदि कोई कोड पुराना है, जिसे बहुत अधिक बदला गया है, और जिसे कई अलग-अलग लोगों ने छुआ है, तो यह उन बग्स के छिपने का एक प्रमुख स्थान है जो टेस्टिंग से बच निकलेंगे। इन "पलायन करने वाले कलाकारों" को पकड़ने के लिए, परीक्षकों को अपनी ऊर्जा कोड के इन "पुराने, व्यस्त इलाकों" पर केंद्रित करने की आवश्यकता है, न कि केवल नवीनतम, सबसे जटिल दिखने वाले हिस्सों की जाँच करने पर।
संक्षेप में: टेस्टिंग से बचने वाले बग्स आमतौर पर इसलिए नहीं छिपते क्योंकि कोड को पढ़ना बहुत कठिन है; वे इसलिए छिपते हैं क्योंकि उनका एक लंबा, उलझा हुआ इतिहास है जिसे परीक्षकों ने पूरी तरह से सिम्युलेट (simulate) नहीं किया था।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।