जब बग को पुन: उत्पन्न करने के लिए हार्डवेयर सेटअप मुश्किल या असंभव है, तो नए कोड का कुशलतापूर्वक निवारण या परीक्षण कैसे करें?


30

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

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

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

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

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

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


5
एक उपकरण सिम्युलेटर (या नकली इंटरफ़ेस) केवल सुविधा के लिए खुद का भुगतान करेगा
शाफ़्ट सनकी

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

जवाबों:


35

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

मैं $ 60 मिलियन के विमान के लिए सॉफ्टवेयर लिखता था। जाहिर है, इसमें उच्च स्तर की विश्वसनीयता की आवश्यकता होती है, और वे प्रत्येक डेवलपर को अपनी डेस्क के लिए एक देने के लिए अनिच्छुक होते हैं। हमारे पास मूल रूप से 5 स्तर के परीक्षण वातावरण थे, प्रत्येक स्तर पर वास्तविक हार्डवेयर के साथ, एक पूर्ण विमान तक। मेरा अनुमान है कि हमारे सॉफ्टवेयर का 95% केवल एमुलेटर और यूनिट परीक्षणों के साथ विकसित और डिबग किया जा सकता है। शेष सुविधाओं का 95% अगले स्तर तक काम किया जा सकता है, और इसी तरह।

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

यदि आपको केवल हार्डवेयर तक सीमित पहुंच है, तो आपको अपनी मानसिकता को कुछ हद तक बदलना होगा। सामान्य धारावाहिक तरीके से अपने आवेदन को डिबग करने की कोशिश करने के बजाय, आपको अक्सर जानकारी इकट्ठा करने के उद्देश्य से कोड को जल्दी से जल्दी लिखना होगा।

उदाहरण के लिए, शायद आपके पास एक बग है और आप 10 संभावित कारणों के बारे में सोच सकते हैं। यदि केवल एक मशीन पर आप 15 मिनट का समय ले सकते हैं, जबकि ऑपरेटर ब्रेक पर है, तो लघु, स्व नियंत्रित, सही (संकलित) उदाहरण लिखें, जो बग को ट्रिगर करता है और आपके सिद्धांतों का परीक्षण करने के लिए SSCCE का उपयोग करके 10 स्वचालित परीक्षण लिखता है। और डेटा का एक गुच्छा लॉग ऑन करें। अपने डेस्क पर बाद में जब तक आप अपने अगले प्रयास के लिए डेटा के माध्यम से झारना करने की आवश्यकता होती है तब तक ले जा सकते हैं। हार्डवेयर के साथ अपने सीमित समय की उपयोगिता को अधिकतम करने के लिए विचार है।


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

14
मैंने "प्रबंधन समझता है" के बाद पढ़ना बंद कर दिया
प्लाज़्माएचएच

1
"हर डेवलपर को उनके डेस्क के लिए एक देने के लिए अनिच्छुक"। विडंबना यह है कि आप शायद यह साबित करने के लिए पर्याप्त संख्या में झुक सकते हैं कि प्रत्येक डेवलपर को काम करने के लिए अपना 60 मिलियन डॉलर का विमान देना एक एयरलाइन आपदा की कुल संचयी लागत से सस्ता होगा!
श्री जावास्क्रिप्ट

15

आप एक ऐसी समस्या को हल करने की कोशिश कर रहे हैं जो हल करने के लिए आपकी नहीं है।

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

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

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


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

4

आप प्रभावी रूप से नेत्रहीन कोडिंग कर रहे हैं।

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

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

समय और धन दोनों में बग फिक्सिंग चरणों की कोशिश करें और अपनी टीम / कंपनी को समग्र लागत दिखाएं।


4

अपने बॉस के साथ बहस करना बहुत आसान होता है जब आपके पास कुछ नंबर होते हैं, या कम से कम कुछ पेशेवरों और विपक्ष के हाथ होते हैं, इसलिए मेरा सुझाव लागत बनाम बेन्फिट विश्लेषण करने की कोशिश कर रहा है। मोटा विचार इस प्रकार है:

  • डिवाइस सिम्युलेटर लिखने के लिए आप कितना विकास प्रयास करते हैं? (ध्यान दें कि एक डिवाइस सिम्युलेटर मूल हार्डवेयर को 100% प्रतिस्थापित नहीं कर सकता है, खासकर जब हार्डवेयर में कुछ अप्रत्याशित झटके हों)।

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

  • परीक्षण लागत के लिए अतिरिक्त हार्डवेयर कितना होगा?

  • आपको कितना समय लगता है कि आपको परीक्षण उद्देश्यों के लिए हार्डवेयर को अवरुद्ध करने की आवश्यकता होगी?

बेशक, वास्तविकता इतनी सरल नहीं हो सकती है, और इस समीकरण में बहुत सारे अज्ञात चर हैं, लेकिन कुछ अनुमान लगाने की कोशिश करें और जहां आप अनिश्चित हैं, अपने वातावरण से अन्य लोगों से पूछें।

अपने प्रबंधन के लिए परिणाम प्रस्तुत करें, विकल्पों पर चर्चा करें और फिर उन्हें तय करने दें।


मुझे लगता है कि आपका मतलब यहां नहीं है। ध्यान दें कि एक डिवाइस सिम्युलेटर शायद ही कभी मूल हार्डवेयर को 100% प्रतिस्थापित कर सकता है , खासकर जब हार्डवेयर में कुछ अप्रत्याशित quirks हैं
Rémi

@ रेमी: शायद "शायद ही कभी" सादे अंग्रेजी में शब्दों का सामान्य क्रम नहीं है? एफडब्ल्यूआईडब्ल्यू, मैंने इस असंदिग्ध बनाने के लिए अपना उत्तर बदल दिया, उत्तर के लिए धन्यवाद।
डॉक ब्राउन

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