जब आप अपने कोड का परीक्षण करने में लंबा समय लेते हैं तो आप प्रभावी रूप से कैसे कार्यक्रम करते हैं?


16

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

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


क्या आप एक आईडीई का उपयोग कर रहे हैं?
वुट 4Moo

3
आपकी मूल समस्या प्रभावी रूप से कोड करने में असमर्थ हो रही है, यह ऐसे परीक्षण हैं जिन्हें चलाने में बहुत लंबा समय लगता है। तुम गलत सवाल पूछ रहे हो।
रीन हेनरिच्स

ऐसी भाषा का प्रयोग करें जिसमें REPL हो।
रॉबर्ट हार्वे

क्या आपके पास ऐसे सहकर्मी हैं जिनसे आप पूछ और सीख सकते हैं?
user985366

जवाबों:


25

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

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

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

इसके अलावा, नकली वस्तुओं को खुद मुखरता के साथ क्रमादेशित किया जा सकता है, इसलिए आप जांच सकते हैं कि घटक-परीक्षण ने वास्तव में एक निश्चित कॉल किया था।


12

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

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

यह सब काम करने में कुछ समय लगा, लेकिन इन सभी चरणों को स्वचालित करने के प्रयास को सौ गुना बढ़ा दिया गया क्योंकि विकास कर्मचारियों का विकास हुआ।


2
+1। ऐसी कोई समस्या नहीं है जिसे शेल स्क्रिप्ट की पर्याप्त मात्रा के साथ हल नहीं किया जा सकता है।
टॉम एंडरसन

1
मैं उन टीमों में नहीं रहूंगा जो वेग में सुधार करने की परवाह नहीं करती हैं।
केविन क्लाइन

); - abst की बहुत सारी परतें छोड़कर @Tom एर, शेल स्क्रिप्ट
Darien

नहीं, आप केवल एक शेल स्क्रिप्ट लिखते हैं जो अन्य शेल स्क्रिप्ट को लपेटता है। उसके बाद सिर्फ एक शेल स्क्रिप्ट है। मुझ पर विश्वास करो।
टॉम एंडरसन

3
+1: संपादित करने के वेग में सुधार -> संकलन -> लोड -> रन -> डिबग -> संपादित एक सबसे अच्छी चीज है जो आप कोड उत्पादन को गति देने के लिए कर सकते हैं। जब मैंने जिमशेयर में काम किया तो हमारे पास एक आदमी था जिसने दावा किया था (सही ढंग से) कि उसका कोड पहली बार 87% कोशिश करने पर सही तरीके से चला। मैं, दूसरी ओर, कोडित जैसे मुझे 1am (जो मैं था) पर कैफीन बंदर पर लाया गया था। मैंने टाइपो त्रुटियों का एक टन बनाया, आदि, लेकिन मैंने उनके बारे में चिंता नहीं की क्योंकि मुझे पता था कि संकलक उन्हें पकड़ लेगा। दिन के अंत में मैं शायद 3 से 5 गुना अधिक उत्पादक था।
पीटर रोवेल

8

स्वचालित परीक्षण समीक्षा और समझ के लिए प्रतिस्थापन नहीं हैं।

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


5

आपने पहले ही जवाब दे दिया: I usually make a lot of syntax errors and logic errors

इसलिए इसे बेहतर बनाने के लिए कड़ी मेहनत करते हुए, आपको परीक्षण के समय को कम करने में सक्षम होना चाहिए। वाक्यविन्यास त्रुटियां बहुत पहले होनी चाहिए जिन्हें आपको कम करना चाहिए। आपके अध्ययन में कभी भी एक कागज और एक पेंसिल के साथ एक प्रोग्रामिंग परीक्षण नहीं हुआ था?

जब मैंने PHP से जावा में स्विच किया तो मेरे पास एक ही बात थी। मुझे सिर्फ कुछ वेरिएबल को प्रिंट करने और ब्राउज़र में F5 दबाने के बजाय डिबग करना सीखना था ...


2
हम सभी समय-समय पर बेवकूफियां करते हैं, वे केवल समय और अनुभव के साथ कम होते हैं।
maple_shaft

@maple_shaft यह सच है, लेकिन जब वह कहता make a lot ofहै कि ऐसा लगता है कि उसे इसे सुधारने के लिए अपनी ऊर्जा का निवेश करना चाहिए
WarrenFaith

3
मैंने कागज पर और व्हाइटबोर्ड पर काफी मात्रा में कोडिंग की। समस्या समान है: पहले निरीक्षण पर कोड सही दिखता है, लेकिन इसे चलाने के बाद, आप अपनी गलतियों को नोटिस करते हैं।
ऐनी नॉनिमस

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

@ एने नॉनिमस: क्या आपका मतलब तार्किक त्रुटियों से है? सिंटैक्स त्रुटियों को आपके आईडीई द्वारा उठाया जाना चाहिए (आदर्श रूप से - यदि आप कोड के साथ काम कर रहे हैं जो गतिशील रूप से उत्पन्न होता है तो उन सिंटैक्स त्रुटियों को संकलन समय पर नहीं उठाया जाएगा)।
FrustratedWithFormsDesigner

4

आपको एक अच्छी यूनिट या फ़ंक्शनल टेस्ट प्लेटफ़ॉर्म की ज़रूरत है जो आपके लिए पृष्ठभूमि में अधिमानतः परीक्षण चला सके। इसके लिए ऊपर बताए अनुसार मोक्स के उपयोग की आवश्यकता होगी और उस भाषा के आधार पर आप किसी प्रकार की निर्भरता इंजेक्शन का उपयोग कर रहे हैं।

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


2

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


3
आप "एक्सचेंज" और "ट्रेडिंग" सॉफ्टवेयर इंजीनियर एक अद्वितीय नस्ल हैं। मेरे मित्र के पास एक ऐसी कंपनी के लिए काम करने वाले मानसिक टूटने की एक श्रृंखला थी। मुझे लगता है कि सॉफ्टवेयर उद्योग के आला से अच्छी चीजें कभी नहीं निकलती हैं।
maple_shaft

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

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

2

इकाई का परीक्षण; मॉक एप्लिकेशन / सिमुलेटर।

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

सही तरीके से उपयोग किए जाने पर, ये उपकरण सुनिश्चित करेंगे कि इससे पहले कि आप बाहरी सिस्टम के पास कहीं भी जाएं, आप 99.9% सुनिश्चित हैं कि यदि आपका कोड विफल रहता है, तो यह बाहरी सिस्टम / पर्यावरण के परिवर्तन में कुछ ऐसा है जो इसका कारण बना, न कि आपके स्वयं के कोड में बग।

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

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


1

मैं आमतौर पर बहुत सी वाक्यविन्यास त्रुटियां और तर्क त्रुटियां करता हूं

हो सकता है कि लिंटर का इस्तेमाल करने से आपको यहां थोड़ी मदद मिल सके।

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

बाद में मुझे पता चला कि देव-सर्वर का रिमोट डीबग करना भी संभव था।

तो यहाँ है कि मैंने अपनी प्रक्रिया को अनुकूलित करने के लिए क्या किया

  • दूरस्थ डिबगिंग के पहले शुरुआती दौर में, इसने मुझे सटीक कोड प्रवाह और सटीक मान / चर की अवस्थाएँ देखने की अनुमति दी।

  • मैं कैसे और क्या परिवर्तन करूंगा, इसकी योजना बनाना।

  • परिवर्तन करना और फिर अंतर की तुलना करना

  • लिंटर का उपयोग करके या संकलन करके गलतियों को कैशिंग करना।

  • .classफ़ाइलों को बदलकर और पुनः आरंभ करके हॉट फ़िक्स देना ।

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

अच्छी ऑटो-कॉम्प्लीकेशन वाली आईडीई का उपयोग करने से भी टाइपो को कम करने में काफी मदद मिल सकती है।

उम्मीद है की यह मदद करेगा।

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