लाभ:
- त्रुटि सन्देश, स्ट्याक ट्रेस, र सबैभन्दा सानो प्रजनन उदाहरणको साथ AI मा बगलाई प्रभावकारी रूपमा वर्णन गर्ने क्षमता
- AI सँग एक व्यवस्थित डिबगिङ प्रवाह चलाउन सक्ने क्षमता यसलाई चरण-दर-चरण परिकल्पना र संकुचित गरेर मूल कारण पत्ता लगाउन।
- AI ले सुझाव दिएको समाधानले पुन: उत्पादन र रिग्रेसन परीक्षण गरेर समस्या समाधान गरेको प्रमाणित गर्ने क्षमता
डिबगिङ भनेको एउटा कार्यक्रमले सोचेभन्दा फरक व्यवहार गर्नुको कारण पत्ता लगाउने र यसलाई ठीक गर्ने कार्य हो, र यसले धेरैजसो इन्जिनियरहरूको धेरै समय खर्च गर्छ। राम्रो डिबगिङ अनुमान गर्ने खेलमा आधारित हुँदैन, तर व्यवस्थित रूपमा संकुचनमा आधारित हुन्छ: लक्षण स्पष्ट गर्नुहोस्, परिकल्पना गर्नुहोस्, परिकल्पना परीक्षण गर्नुहोस्, मूल कारणमा जानुहोस्। AI यस चक्रमा धेरै शक्तिशाली साझेदार हो; तर यदि तपाईंले उसलाई सही जानकारी दिनुभयो भने मात्र। "कोडले काम गर्दैन, यसलाई ठीक गर्नुहोस्" भन्नाले AI लाई अनुमान गर्न र कम्बल सुझावहरू बनाउन बाध्य पार्छ। यसलाई पूर्ण त्रुटि सन्देश, स्ट्याक ट्रेस, र सबैभन्दा सानो प्रजनन नमूना दिनुहोस्, र सँगै तपाईंले मूल कारण फेला पार्नुहुनेछ।
यस एकाईमा हामी हेर्नेछौं कि कसरी AI मा बगलाई प्रभावकारी रूपमा वर्णन गर्ने, परिकल्पनाहरूलाई चरण-दर-चरण संकुचित गर्ने, र प्रस्तावित समाधानले वास्तवमा समस्या समाधान गर्छ भनी प्रतिगमन परीक्षण मार्फत प्रमाणित गर्ने। याद गर्नुहोस्: बग "फिक्स" र "बगको लक्षणलाई दबाउन" दुई फरक कुराहरू हुन्; मूल कारण पत्ता नलागेर गरिएको सुधारले त्रुटिलाई अर्को ठाउँमा सार्छ।
अवधारणाहरू: स्ट्याक ट्रेस: त्रुटिको समयमा कुन कार्यहरू बोलाइएको थियो भनेर देखाउने डम्प। न्यूनतम रिप्रो: त्रुटि ट्रिगर गर्ने सबैभन्दा सरल, छोटो कोड/इनपुट। मूल कारण: समस्याको वास्तविक स्रोत, लक्षण होइन। प्रतिगमन परीक्षण: परीक्षण जसले एउटै त्रुटि दोहोर्याउँदैन भनेर सुनिश्चित गर्दछ।
AI लाई बगको वर्णन गर्दै
AI ले मूल कारण पत्ता लगाउने सम्भावना तपाईंले प्रदान गर्नुभएको जानकारीको गुणस्तरसँग सीधा समानुपातिक हुन्छ। एउटा राम्रो त्रुटि विवरणमा समावेश छ: तपाईंले के गर्ने प्रयास गर्नुभयो, तपाईंले के अपेक्षा गरिरहनुभएको थियो, के भयो, सही त्रुटि पाठ र स्ट्याक ट्रेस, कोड समावेश, वातावरण (भाषा/संस्करण/OS), र त्रुटि उत्पन्न गर्ने सबैभन्दा सानो नमूना।
- लक्षण स्पष्ट गर्नुहोस्। ढाँचामा "अपेक्षित X, वास्तविक Y"।
- पूर्ण त्रुटि पाठ र स्ट्याक ट्रेस टाँस्नुहोस्। यसलाई छोटो नगर्नुहोस्, यसलाई सेन्सर गर्नुहोस्, तर संरचना भङ्ग नगर्नुहोस्।
- सबैभन्दा सानो प्रजनन दिनुहोस्। त्रुटि ट्रिगर गर्ने न्यूनतम इनपुट र कोड।
- वातावरण निर्दिष्ट गर्नुहोस्। भाषा संस्करण, पुस्तकालय संस्करण, रनटाइम वातावरण।
प्रभावकारी त्रुटि विवरण प्रम्प्ट: "म बग डिबग गर्दैछु। जानकारी:- म के गर्न खोज्दै छु: [X]- अपेक्षित व्यवहार: [Y]- वास्तविक व्यवहार: [Z]- पूर्ण त्रुटि सन्देश र स्ट्याक ट्रेस: [पेस्ट]- वातावरण: [भाषा/संस्करण, पुस्तकालय/संस्करण]- कम्तिमा कोड दिनुहोस्। प्रायः सम्भाव्यताको क्रममा मूल कारणहरू र प्रत्येकको लागि कुन जाँच प्रमाणित गर्ने मलाई बताउनुहोस्।"
हाइपोथेसिस द्वारा संकुचित प्रवाह
प्रणालीगत डिबगिङ भनेको एक-एक गरी सम्भावनाहरू हटाउने कला हो। परिकल्पनाहरू उत्पन्न गर्न AI प्रयोग गर्नुहोस् र प्रत्येक परिकल्पना परीक्षण गर्न प्रयोग डिजाइन गर्नुहोस्; त्यसपछि प्रयोग चलाउनुहोस् र परिणाम फर्काउनुहोस्। यो चक्र अनियमित परिवर्तन गर्ने र रोक्ने बानी भन्दा धेरै छिटो छ, "शटगन डिबगिङ" भनिन्छ।
बाइनरी खोजी (द्विखण्ड) सहायक प्रम्प्ट: "यो त्रुटि हिजो थिएन, यो आज त्यहाँ छ। म पत्ता लगाउन चाहन्छु कि पछिल्लो 20 परिवर्तनहरू मध्ये कुनले bisect मा त्रुटि ल्यायो। मलाई एक चरण-दर-चरण योजना दिनुहोस्: मैले कुन बिन्दुमा परीक्षण गर्नुपर्छ, कुन आधामा जानु पर्छ नतिजाको आधारमा। साथै मलाई प्रत्येक चरणमा के जाँच गर्ने भनेर बताउनुहोस्।
लग सम्मिलन रणनीति प्रम्प्ट: "मैले त्रुटि फेला पार्न सक्दिन किनभने म यो प्रकार्यमा मध्यवर्ती मानहरू देख्न सक्दिन। मलाई कुन बिन्दुहरूमा लग लाइनहरू थप्न आवश्यक छ भ्यारीएबलहरू छाप्नुहोस्। प्रत्येक लगको लागि 'म यस लगबाट के सिक्नेछु' व्याख्या थप्नुहोस्। साथै विश्वासी डाटा लग गर्नबाट रोक्ने चेतावनीहरू पनि निर्दिष्ट गर्नुहोस्।"
सुझाव: यदि तपाइँ त्रुटि समाधान गर्न सक्नुहुन्न भने, प्राय जसो समय समस्या कतै तपाइँले गलत रूपमा सोचेको हुन्छ। AI लाई सोध्नुहोस् "मेरो कुन धारणा गलत हुन सक्छ?" सोध्दा तिम्रो अन्धोपन भङ्ग हुनेछ। सबैभन्दा कठिन गल्तीहरू त्यस ठाउँमा लुक्छन् जहाँ तपाईंले भन्नुहुन्छ "म पक्का छु कि यो सही काम गरिरहेको छ"।
कमजोर प्रम्प्ट / बलियो प्रम्प्ट
WEAK:"मेरो कोडले त्रुटि दिन्छ, यसलाई ठीक गर्नुहोस्: [कोडका 200 लाइनहरू]"(परिणाम: AI लाई थाहा छैन यो के त्रुटि हो, के अपेक्षा गरिएको छ; यसले अनुमानमा आधारित सामान्य सुझाव दिन्छ, तीमध्ये धेरै बेकार छन्।) STRONG:"मैले NullPointerException प्राप्त गरेको छु। अपेक्षित: प्रयोगकर्ता सूची फिर्ता गर्नुपर्छ। वास्तविक: प्राप्तकर्ताहरूलाई कल गर्नुहोस्। [पेस्ट]। वातावरण: जाभा 17। न्यूनतम पुनरावृत्ति: यो हुन्छ जब प्रयोगकर्ताहरूको सूची खाली हुन्छ, तर सम्बन्धित 15 रेखाहरू: [कोड] मूल कारण र किन ट्रिगर गरिएको छ, त्यसपछि समाधानको सुझाव दिनुहोस्।
शक्तिशाली प्रम्प्टले सन्दर्भमा त्रुटि राख्छ: कुन अवस्थामा यो हुन्छ (खाली सूची), कुन अवस्थामा यो हुँदैन (पूर्ण सूची)। यो एकल सुराग ("खाली हुँदा हुन्छ") लगभग सीधै मूल कारणलाई संकेत गर्दछ। यो जानकारी कमजोर प्रम्प्टमा उपलब्ध नभएकोले, AI ले अन्धा अनुमान गर्छ।
फिक्स प्रमाणित गर्दै
एक फिक्स मात्र एक वास्तविक समाधान हो यदि यसले तीन चीज गर्दछ:
नियन्त्रण
प्रश्न
कसरी प्रमाणित गर्ने
त्रुटि हट्यो?
के अहिले त्यही प्रविष्टिले काम गर्छ?
पुन: न्यूनतम रिप्रो चलाउनुहोस्
कुनै नयाँ त्रुटि छैन?
अरु केहि बिग्रियो कि ?
सम्पूर्ण परीक्षण सुइट चलाउनुहोस्
यो दोहोरिने छैन?
के त्यही त्रुटि फेरि दोहोरिने हो ?
यस परिदृश्यको लागि रिग्रेसन परीक्षण थप्नुहोस्
मूल कारण पत्ता नलागेका सुधारहरूले प्रायः लक्षणलाई दबाउन सक्छ। उदाहरणका लागि, "Skip if null" सँग नल त्रुटिमा ग्लोस गर्दा वास्तविक कारण बनाउँछ, "डेटा किन शून्य हुँदैछ?" अदृश्य, र त्रुटि अन्यत्र दोहोर्याउँछ।
मिनी केसहरू
केस 1 - लक्षण दमन जाल। एउटा टोलीले प्रयास-क्याचको साथ सामयिक शून्य त्रुटिलाई मौन बनाउँछ; त्रुटि गायब हुन्छ तर 2 हप्ता पछि डाटा हराइरहेको देखिन्छ। वास्तविक कारण यो हो कि सेवा टाइमआउटमा शून्य फर्काउँछ। जब तपाइँ एआई "किन यो शून्य हुँदैछ?" सोध्नुहुन्छ, मूल कारण देखा पर्दछ; वास्तविक समाधान 1 घण्टा लाग्छ तर स्थायी छ।
केस २ - न्यूनतम रिप्रो पावर। एक विकासकर्ताले बग समाधान गर्न सक्दैन जुन "यो एक पटकमा एक पटक क्र्यास हुन्छ।" यसले AI को सुझावको साथ सबैभन्दा सानो इनपुटमा त्रुटि घटाउँछ: समस्या टर्की क्यारेक्टरहरू (इन्कोडिङ त्रुटि) भएको फाइलनामहरूमा मात्र हुन्छ। जब 300 अनिश्चितता रेखाहरू निश्चित रिप्रोको 5 रेखाहरूमा घटाइन्छ, समाधान स्पष्ट हुन्छ।
केस 3 - एन्टी-रिग्रेसन परीक्षण। AI ले मिति गणना त्रुटि फिक्स गर्दछ। इन्जिनियर यसबाट सन्तुष्ट छैनन्; गलत परिदृश्य (महिनाको अन्त्य, जनवरी 31 + 1 महिना) को लागि रिग्रेसन परीक्षण थप्छ। जब अर्को परिवर्तनले 4 महिना पछि समान क्षेत्र छुन्छ, परीक्षण रातो हुन्छ र बग उत्पादनमा पुग्नु अघि समातिन्छ।
सामान्य गल्तीहरू
- यसको अर्थ "यो काम गरिरहेको छैन, यसलाई ठीक गर्नुहोस्"। त्रुटि पाठ, अपेक्षा र repro बिना, AI अनुमान।
- स्ट्याक ट्रेस दिइरहेको छैन। स्ट्याक ट्रेसले प्राय जसो मूल कारणलाई संकेत गर्दछ।
- अनियमित परिवर्तनहरू गरिरहनुहोस्। परिकल्पना स्थापना बिना प्रयोग समय बर्बाद।
- लक्षण दबाउन र मूल कारण हराइरहेको छ। त्रुटि अन्यत्र पुनर्जन्म हुन्छ।
- रिग्रेसन परीक्षणको साथ फिक्स सुरक्षित गर्दैन। उही त्रुटि भविष्यमा चुपचाप फिर्ता आउँछ।
संक्षेपमा
प्रभावकारी डिबगिङ भनेको व्यवस्थित संकुचन हो, अनुमान लगाउनु होइन। AI लाई पूर्ण त्रुटिको पाठ, स्ट्याक ट्रेस, न्यूनतम प्रजनन र वातावरणीय जानकारी दिनुले मूल कारण पत्ता लगाउने सम्भावना बढाउँछ। परिकल्पनाहरू उत्पन्न गर्न AI प्रयोग गर्नुहोस् र प्रत्येक परिकल्पना परीक्षण गर्न प्रयोग डिजाइन गर्नुहोस्; तपाईं प्रयोग चलाउनुहोस्। एक फिक्स "सम्पन्न" विचार गर्नुहोस् जब तपाइँ बग हराएको देख्नुहुन्छ, कुनै नयाँ बगहरू प्रस्तुत गरिएको छैन, र यो प्रतिगमन परीक्षण द्वारा सुरक्षित छ।
आवेदन कार्य
वास्तविक वा कृत्रिम त्रुटिलाई विचार गर्नुहोस्। पहिले त्रुटिलाई सानो प्रजननमा घटाउनुहोस् (जसमा यो हुन्छ, जसमा यो हुँदैन)। प्रभावकारी बग रेसिपी प्रम्प्ट प्रयोग गरेर, AI लाई 3 मूल कारण परिकल्पनाहरू र प्रत्येकको लागि प्रमाणीकरण चरणको लागि सोध्नुहोस्। परिकल्पनाहरू एक-एक गरेर परीक्षण गरेर मूल कारण पत्ता लगाउनुहोस्, यसलाई ठीक गर्नुहोस्, त्यसपछि बग सकिएको छ र परीक्षणले सुरक्षा प्रदान गर्दछ भनेर देखाउन यस परिदृश्यको लागि रिग्रेसन परीक्षण लेख्नुहोस् र चलाउनुहोस्।
चेकलिस्ट
- [] मैले लक्षणलाई "अपेक्षित बनाम महसुस" भनेर स्पष्ट गरें।
- [ ] मैले AI लाई पूर्ण त्रुटि पाठ र स्ट्याक ट्रेस दिएँ।
- [ ] मैले त्रुटिलाई सानो प्रजननमा घटाएँ।
- [ ] परिकल्पनाहरू एक एक गरेर परीक्षण गरेर, मैले मूल कारण फेला पारे।
- लक्षणलाई दबाउनको सट्टा, मैले मूल कारणलाई ठीक गरें।
- [ ] मैले एउटै त्रुटिको लागि रिग्रेसन परीक्षण थपे र चलाएँ।