नफा:
- त्रुटी संदेश, स्टॅक ट्रेस आणि सर्वात लहान पुनरुत्पादन उदाहरणासह AI मध्ये बगचे प्रभावीपणे वर्णन करण्याची क्षमता
- AI सह पद्धतशीर डीबगिंग फ्लो चालवण्याची क्षमता स्टेप बाय स्टेप द्वारे गृहित धरून आणि संकुचित करून मूळ कारण शोधण्यासाठी
- AI ने सुचविलेल्या निराकरणाने पुनरुत्पादन आणि प्रतिगमन चाचणीद्वारे समस्येचे निराकरण केले आहे हे सत्यापित करण्याची क्षमता
डीबगिंग हे प्रोग्राम अपेक्षेपेक्षा वेगळे का वागत आहे हे शोधणे आणि त्याचे निराकरण करण्याचे कार्य आहे आणि त्यात बहुतेक अभियंत्यांचा बराच वेळ जातो. चांगले डीबगिंग अंदाज लावण्याच्या खेळावर आधारित नाही, परंतु पद्धतशीरपणे संकुचित करण्यावर आधारित आहे: लक्षण स्पष्ट करा, गृहितक करा, गृहीतके तपासा, मूळ कारणाकडे जा. AI या चक्रातील एक अतिशय शक्तिशाली भागीदार आहे; पण जर तुम्ही त्याला योग्य माहिती दिली तरच. “कोड काम करत नाही, त्याचे निराकरण करा” असे म्हणणे AI ला अंदाज घेण्यास आणि ब्लँकेट सूचना करण्यास भाग पाडते. त्याला संपूर्ण त्रुटी संदेश, स्टॅक ट्रेस आणि सर्वात लहान पुनरुत्पादन नमुना द्या आणि एकत्रितपणे तुम्हाला मूळ कारण सापडेल.
या युनिटमध्ये आपण AI मध्ये बगचे प्रभावीपणे वर्णन कसे करावे, गृहीतके टप्प्याटप्प्याने कशी कमी करावीत आणि रीग्रेशन चाचणीद्वारे पडताळून पाहणार आहोत की प्रस्तावित निराकरणामुळे समस्येचे निराकरण होते. लक्षात ठेवा: बग "फिक्स करणे" आणि "बगचे लक्षण दाबणे" या दोन भिन्न गोष्टी आहेत; मूळ कारण न शोधता केलेली दुरुस्ती त्रुटी दुसऱ्या ठिकाणी हलवते.
संकल्पना: स्टॅक ट्रेस: त्रुटीच्या वेळी कोणती फंक्शन्स कॉल केली गेली हे दर्शविणारा डंप. किमान रीप्रो: सर्वात सोपा, सर्वात लहान कोड/इनपुट जो त्रुटी ट्रिगर करतो. मूळ कारण: समस्येचा खरा स्रोत, लक्षण नाही. प्रतिगमन चाचणी: चाचणी जी समान त्रुटीची पुनरावृत्ती होणार नाही याची खात्री करते.
AI ला बगचे वर्णन करणे
AI ने मूळ कारण शोधण्याची शक्यता तुम्ही प्रदान केलेल्या माहितीच्या गुणवत्तेच्या थेट प्रमाणात असते. चांगल्या त्रुटी वर्णनामध्ये हे समाविष्ट आहे: तुम्ही काय करण्याचा प्रयत्न केला, तुम्हाला काय अपेक्षित होते, काय घडले, अचूक त्रुटी मजकूर आणि स्टॅक ट्रेस, समाविष्ट कोड, पर्यावरण (भाषा/आवृत्ती/OS) आणि त्रुटी निर्माण करणारा सर्वात लहान नमुना.
- लक्षण स्पष्ट करा. "अपेक्षित X, वास्तविक Y" स्वरूपात.
- पूर्ण त्रुटी मजकूर आणि स्टॅक ट्रेस पेस्ट करा. ते लहान करू नका, सेन्सॉर करू नका, परंतु रचना तोडू नका.
- सर्वात लहान पुनरुत्पादन द्या. त्रुटी ट्रिगर करणारे किमान इनपुट आणि कोड.
- वातावरण निर्दिष्ट करा. भाषा आवृत्ती, लायब्ररी आवृत्ती, रनटाइम वातावरण.
प्रभावी त्रुटी वर्णन प्रॉम्प्ट: "मी बग डीबग करत आहे. माहिती:- मी काय करण्याचा प्रयत्न करीत आहे: [X]- अपेक्षित वर्तन: [Y]- वास्तविक वर्तन: [Z]- पूर्ण त्रुटी संदेश आणि स्टॅक ट्रेस: [पेस्ट]- पर्यावरण: [भाषा/आवृत्ती, लायब्ररी/आवृत्ती]- प्रथम कोड द्या: प्रथम कोड निश्चित करा: प्रथम कोड 3 समाविष्ट करा. संभाव्यतेच्या क्रमाने बहुधा मूळ कारणे आणि प्रत्येकासाठी कोणती तपासणी करायची ते मला सांगा."
हायपोथेसिसद्वारे संकुचित प्रवाह
पद्धतशीर डीबगिंग ही एक-एक करून शक्यता नष्ट करण्याची कला आहे. गृहीतके निर्माण करण्यासाठी AI वापरा आणि प्रत्येक गृहितकाची चाचणी घेण्यासाठी प्रयोगाची रचना करा; नंतर प्रयोग चालवा आणि परिणाम परत करा. हे चक्र यादृच्छिक बदल करण्याच्या आणि थांबण्याच्या सवयीपेक्षा खूप वेगवान आहे, ज्याला "शॉटगन डीबगिंग" म्हणतात.
बायनरी शोध (दुभाजन) मदतनीस प्रॉम्प्ट: "ही त्रुटी काल नव्हती, ती आज आहे. मला हे शोधायचे आहे की शेवटच्या 20 पैकी कोणत्या बदलांमुळे दुभाजकासह त्रुटी आली. मला एक चरण-दर-चरण योजना द्या: मी कोणत्या बिंदूवर चाचणी करावी, निकालानुसार मी कोणत्या अर्ध्या टप्प्यावर जावे. तसेच प्रत्येक टप्प्यावर नेमके काय तपासायचे ते मला सांगा."
लॉग इन्सर्टेशन स्ट्रॅटेजी प्रॉम्प्ट: "मला एरर सापडत नाही कारण मी या फंक्शनमध्ये इंटरमीडिएट व्हॅल्यूज पाहू शकत नाही. मला कोणत्या पॉइंट्सवर लॉग लाईन्स जोडायची आहेत ते कोणते व्हेरिएबल्स मुद्रित करतात ते मला सांगा. प्रत्येक लॉगसाठी 'मी या लॉगमधून काय शिकू' असे स्पष्टीकरण जोडा. तसेच चेतावणी निर्दिष्ट करा ज्यामुळे मला कॉन्फिडेन्शियल डेटा लॉग करण्यापासून प्रतिबंधित होईल."
टीप: जर तुम्ही एखाद्या त्रुटीचे निराकरण करू शकत नसाल, तर बहुतेक वेळा समस्या कुठेतरी तुम्ही चुकीच्या पद्धतीने गृहीत धरलेली असते. AI ला विचारा "माझे कोणते गृहीतक चुकीचे असू शकते?" विचारल्याने तुमचे अंधत्व भंगेल. सर्वात कठीण चुका त्या ठिकाणी लपवतात जिथे तुम्ही म्हणता "मला खात्री आहे की हे बरोबर काम करत आहे".
कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट
WEAK:"माझा कोड एरर देतो, तो दुरुस्त करा: [कोडच्या 200 ओळी]"(परिणाम: AI ला माहित नाही की ती कोणती त्रुटी आहे, काय अपेक्षित आहे; ते अंदाजावर आधारित सामान्य सूचना देते, त्यापैकी बहुतेक निरुपयोगी आहेत.)STRONG:"मला NullPointerException मिळाले आहे. अपेक्षित: वापरकर्ता सूची परत केली जावी. Staace: getUsers वर कॉल करा. [पेस्ट].पर्यावरण: जावा 17. किमान पुनरावृत्ती: जेव्हा वापरकर्त्यांची यादी रिकामी असते, परंतु संबंधित 15 ओळी: [कोड] मूळ कारण समजावून सांगा, नंतर निराकरण सुचवा.
पॉवरफुल प्रॉम्प्ट संदर्भात त्रुटी ठेवते: कोणत्या बाबतीत ती घडते (रिक्त यादी), ज्या बाबतीत ती होत नाही (पूर्ण यादी). हा एकच संकेत ("रिक्त असताना होतो") जवळजवळ थेट मूळ कारणाकडे निर्देश करतो. ही माहिती कमकुवत प्रॉम्प्टमध्ये उपलब्ध नसल्यामुळे, AI आंधळा अंदाज लावते.
निराकरण सत्यापित करत आहे
जर तीन गोष्टी केल्या तरच निराकरण हे एक वास्तविक निराकरण आहे:
नियंत्रण
प्रश्न
कसे सत्यापित करावे
त्रुटी दूर झाली आहे का?
आता तीच एंट्री चालते का?
पुन्हा किमान रीप्रो चालवा
नवीन त्रुटी नाहीत?
आणखी काही तुटले आहे का?
संपूर्ण चाचणी संच चालवा
त्याची पुनरावृत्ती होणार नाही का?
तीच चूक पुन्हा होणार का?
या परिस्थितीसाठी प्रतिगमन चाचणी जोडा
मूळ कारण न शोधता केलेल्या दुरुस्त्या अनेकदा लक्षण दडपतात. उदाहरणार्थ, शून्य त्रुटीवर "स्किप इफ नल" ने ग्लोस केल्याने खरे कारण "डेटा शून्य का येत आहे?" अदृश्य, आणि त्रुटी इतरत्र पुन्हा उद्भवते.
मिनी केसेस
केस १ - लक्षण दडपण्याचा सापळा. एक संघ एक अधूनमधून शून्य त्रुटी एक प्रयत्न-कच सह शांत करते; त्रुटी अदृश्य होते परंतु 2 आठवड्यांनंतर डेटा गहाळ दिसतो. खरे कारण म्हणजे सेवा कालबाह्य झाल्यावर शून्य परत येते. जेव्हा तुम्ही AI ला "ते शून्य का होत आहे?" विचारता तेव्हा मूळ कारण समोर येते; वास्तविक निराकरण करण्यासाठी 1 तास लागतो परंतु कायमचा असतो.
केस 2 - किमान रीप्रो पॉवर. विकासक "तो प्रत्येक वेळी क्रॅश होतो" असे म्हणणारा बग निराकरण करू शकत नाही. हे एआयच्या सूचनेसह सर्वात लहान इनपुटमध्ये त्रुटी कमी करते: समस्या फक्त तुर्की वर्ण असलेल्या फाइलनावांमध्ये उद्भवते (एनकोडिंग त्रुटी). जेव्हा अनिश्चिततेच्या 300 ओळी निश्चित रीप्रोच्या 5 ओळींपर्यंत कमी केल्या जातात, तेव्हा समाधान स्पष्ट होते.
केस 3 - प्रतिगमन विरोधी चाचणी. AI तारखेच्या गणना त्रुटीचे निराकरण करते. यावर अभियंता समाधानी नाहीत; चुकीच्या परिस्थितीसाठी प्रतिगमन चाचणी जोडते (महिन्याचा शेवट, जानेवारी 31 + 1 महिना). जेव्हा दुसरा बदल त्याच क्षेत्राला 4 महिन्यांनंतर स्पर्श करतो, तेव्हा चाचणी लाल होते आणि दोष उत्पादनापर्यंत पोहोचण्यापूर्वी पकडला जातो.
सामान्य चुका
- याचा अर्थ "हे काम करत नाही, त्याचे निराकरण करा". त्रुटी मजकूर, अपेक्षा आणि रीप्रोशिवाय, AI अंदाज लावते.
- स्टॅक ट्रेस देत नाही. स्टॅक ट्रेस सहसा मूळ कारण थेट सूचित करतो.
- यादृच्छिक बदल करत रहा. एक गृहितक स्थापन न करता प्रयोग वेळ वाया घालवतात.
- लक्षण दडपून टाकणे आणि मूळ कारण गहाळ करणे. त्रुटी इतरत्र पुनर्जन्म आहे.
- रीग्रेशन चाचणीसह निराकरण सुरक्षित करत नाही. तीच त्रुटी भविष्यात शांतपणे परत येते.
सारांशात
प्रभावी डीबगिंग पद्धतशीर अरुंद करणे आहे, अंदाज लावणे नाही. एआयला संपूर्ण त्रुटी मजकूर, स्टॅक ट्रेस, किमान पुनरुत्पादन आणि पर्यावरणाची माहिती दिल्यास मूळ कारण शोधण्याची शक्यता वेगाने वाढते. गृहीतके निर्माण करण्यासाठी AI वापरा आणि प्रत्येक गृहितकाची चाचणी घेण्यासाठी प्रयोगाची रचना करा; तुम्ही प्रयोग चालवा. दोष निघून गेला आहे, कोणतेही नवीन बग आणलेले नाहीत आणि ते प्रतिगमन चाचणीद्वारे संरक्षित केलेले आहे हे पाहिल्यावरच निराकरण "पूर्ण" करण्याचा विचार करा.
अर्ज कार्य
वास्तविक किंवा कृत्रिम त्रुटी विचारात घ्या. प्रथम सर्वात लहान पुनरुत्पादनात त्रुटी कमी करा (ज्या इनपुटमध्ये ते येते, ज्यामध्ये ते होत नाही). प्रभावी बग रेसिपी प्रॉम्प्ट वापरून, AI ला 3 मूळ कारणे आणि प्रत्येकासाठी एक पडताळणी पायरी विचारा. एक-एक करून गृहीतके तपासून मूळ कारण शोधा, त्याचे निराकरण करा, नंतर दोष निघून गेला आहे आणि चाचणी संरक्षण प्रदान करते हे दर्शविण्यासाठी या परिस्थितीसाठी प्रतिगमन चाचणी लिहा आणि चालवा.
चेकलिस्ट
- [ ] मी "अपेक्षित विरुद्ध लक्षात आले" असे लक्षण स्पष्ट केले.
- [ ] मी AI ला संपूर्ण त्रुटी मजकूर आणि स्टॅक ट्रेस दिला.
- [ ] मी सर्वात लहान पुनरुत्पादनात त्रुटी कमी केली.
- एकामागून एक गृहीतके तपासून, मला मूळ कारण सापडले.
- [] लक्षण दाबण्याऐवजी, मी मूळ कारण निश्चित केले.
- [ ] मी त्याच त्रुटीसाठी एक प्रतिगमन चाचणी जोडली आणि चालवली.