युनिट 6 / 12

डीबगिंग आणि मूळ कारण विश्लेषण

नफा:

  • सर्वात लहान पुनरुत्पादक उदाहरणापर्यंत बग कमी करण्याची आणि पूर्ण पुराव्यासह AI वर हलवण्याची क्षमता
  • स्वस्त नियंत्रणासह पुराव्यावर आधारित गृहीतकांची चाचणी घेण्याची आणि मूळ कारण शोधण्याची क्षमता
  • मूळ कारणाचे निराकरण करण्याची क्षमता आणि लक्षण पॅच करण्याऐवजी प्रतिगमन चाचणीसह सुरक्षित करणे

डीबगिंग ही सॉफ्टवेअर अनपेक्षितपणे का वागते हे शोधण्याची आणि त्याचे निराकरण करण्याची प्रक्रिया आहे. हे असे काम आहे जेथे विकासक सर्वात जास्त वेळ घालवतो आणि सर्वात जास्त थकतो; कारण बहुतेक वेळा चूक जिथे दिसते तिथे नसते, तर काही पावले मागे लपलेली असते. AI हा एक शक्तिशाली विचार भागीदार आहे जो या संशोधनाला गती देतो — परंतु तुम्ही योग्य पुरावा दिला तरच. पुराव्याशिवाय डीबगिंग हे क्षेत्र आहे जिथे AI सर्वात जास्त भ्रम निर्माण करते.

या युनिटमध्ये, आम्ही त्रुटी निर्माण करण्यापासून मूळ कारणापर्यंत पोहोचण्यापर्यंत एक शिस्तबद्ध प्रवाह स्थापित करतो: लक्षण स्पष्ट करणे, पुरावे गोळा करणे (त्रुटी संदेश, स्टॅक ट्रेस, लॉग, एंट्री), एक गृहितक तयार करणे, गृहितकेची चाचणी करणे आणि निराकरण सत्यापित करणे. एआय प्रत्येक टप्प्यावर मदत करते; परंतु बग प्रत्यक्षात दूर झाल्याचे पाहून "निश्चित" निर्णय घेतला जातो.

का पुरावा सर्वकाही आहे?

LLM ला तुमच्याप्रमाणे त्रुटी दिसत नाही; तू त्याला काय सांगशील तेच त्याला माहीत आहे. "ॲप्लिकेशन क्रॅश" सारखे वाक्य मॉडेलला जवळजवळ कोणतीही माहिती देत ​​नाही आणि मॉडेल अंदाजाने अंतर भरून काढते — म्हणजे एक भ्रम. या बदल्यात, संपूर्ण त्रुटी संदेश, स्टॅक ट्रेस — ज्या फंक्शनद्वारे त्रुटी उद्भवली, त्या इनपुटमुळे त्रुटी उद्भवली, आणि काय अपेक्षित होते, इत्यादींचा ब्रेकडाउन. निरीक्षण केलेले वर्तन लक्षात घेता, मॉडेल खऱ्या संभाव्यतेची रँक करू शकते.

डीबगिंगमध्ये, AI चा एखाद्या गुप्तहेराचा सहाय्यक म्हणून विचार करा: तुम्ही जितके जास्त पुरावे सादर कराल, तितके अधिक अचूक गृहितक ते निर्माण करेल. कोणताही पुरावा नसल्यास, सहाय्यक फक्त अंदाज लावेल आणि तुम्हाला चुकीच्या मार्गावर नेईल.

टीप: AI वर बग पोर्ट करण्यापूर्वी, ते सर्वात लहान पुनरुत्पादक उदाहरणापर्यंत कमी करा. एरर ट्रिगर करणारा सर्वात लहान कोड आणि इनपुट तुमच्यासाठी आणि मॉडेलसाठी गोष्टी मूलभूतपणे सोपे करते; बहुतेकदा या कपात दरम्यान आपण स्वतः कारण शोधू शकता.

स्टेप बाय स्टेप: मूळ कारण विश्लेषण प्रवाह

  1. लक्षण स्पष्ट करा. "काय चाललंय, तुला काय होईल अशी अपेक्षा होती?" दोन्ही एका वाक्यात लिहा.
  2. पुरावे गोळा करा. संपूर्ण त्रुटी संदेश, स्टॅक ट्रेस, संबंधित लॉग लाईन्स, ट्रिगरिंग एंट्री, आवृत्ती माहिती.
  3. गृहीतक व्युत्पन्न करा. AI कडून "हे लक्षण स्पष्ट करणारी 3 संभाव्य कारणे आणि मी प्रत्येकाची चाचणी कशी करू?" विचारा
  4. प्रथम स्वस्त गृहीतकांची चाचणी घ्या. लॉग जोडा, मूल्य मुद्रित करा, चाचणी चालवा. पुरावे गृहीतकेची पुष्टी करतात का?
  5. मूळ कारण निश्चित करा, लक्षण नाही. पॅचसह लक्षण शांत करण्याऐवजी, मूळ कारणाकडे लक्ष द्या.
  6. प्रमाणित करा आणि प्रतिगमन चाचणी जोडा. त्रुटी अदृश्य पहा; नंतर एक चाचणी लिहा जी ती त्रुटी पकडेल जेणेकरून ती परत येणार नाही.

तीन मिनी केसेस

केस 1 - स्टॅक ट्रेस योग्य फाइलकडे नेले. काही विनंत्यांवर अर्ज 500 त्रुटी परत करत होता. विकासकाने एआयला संपूर्ण स्टॅक ट्रेस आणि ट्रिगरिंग विनंती दिली; मॉडेलने असे गृहित धरले की त्रुटी एका तारखेच्या पार्सिंग लेयरमध्ये None मूल्यामुळे झाली. विकसकाने त्या ओळीत एक लॉग जोडला, त्याची पडताळणी केली आणि 15 मिनिटांत त्याचे निराकरण केले; आदल्या दिवशी सिद्ध न झालेल्या प्रयोगांमुळे २ तास वाया गेले.

केस 2 - भ्रमामुळे चुकीचा मार्ग आला. दुसऱ्या विकसकाने फक्त "डेटाबेस कनेक्शन ड्रॉप होत आहे" असे लिहिले. एआयने कोणत्याही पुराव्याशिवाय कनेक्शन पूल सेटिंगचा आरोप केला; विकासकाने या सेटिंगसह 40 मिनिटे टिंकरिंग केली. खरे कारण नेटवर्कच्या बाजूने कालबाह्य होते आणि केवळ लॉग पाहून प्रकट झाले. धडा: पुराव्याशिवाय घेतलेले गृहितक केवळ संभाव्य आहे, विश्वसनीय नाही.

केस 3 - फ्लॅकी एरर पकडली. अधूनमधून नापास होणारी चाचणी होती. AI ला चाचणी कोड, अयशस्वी संदेश आणि माहिती "कधी पास होते, कधी अयशस्वी होते" अशी माहिती देण्यात आली होती; मॉडेलने चाचण्यांची सामायिक वेळ/ऑर्डर अवलंबित्व दर्शवले. पुनरावलोकनाने पुष्टी केली की चाचणी सिस्टमच्या स्थानिक वेळेवर आधारित होती. एकदा घड्याळ निश्चित केले (मस्करी), चाचणी स्थिर झाली.

चार कॉपी करण्यायोग्य टेम्पलेट्स

पुरावा-आधारित गृहीतक निर्मिती:

मी बग डीबग करत आहे. खाली पुरावा.- अपेक्षित वर्तन: {{अपेक्षित}}- निरीक्षण केलेले वर्तन: {{निरीक्षण केलेले}}- त्रुटी संदेश / स्टॅक ट्रेस: ​​{{ट्रेस}}- ट्रिगरिंग इनपुट: {{इनपुट}}- पर्यावरण/आवृत्ती: {{आवृत्ती}} 3 बहुधा मूळ कारणांची यादी करा जे हे लक्षण स्पष्ट करतात. प्रत्येकासाठी: मी चाचणी कशी करू (सर्वात स्वस्त तपासणी) आणि ते खरे असल्यास ते कसे निश्चित करावे. पुरावे अपुरे असल्यास, तुम्हाला कोणती अतिरिक्त माहिती हवी आहे ते मला सांगा.

स्टॅक ट्रेसचा अर्थ लावणे:

हा स्टॅक ट्रेस वाचा. त्रुटी कोणत्या रेषेपासून (मूळ) सुरू होते आणि कोणत्या रेषा फक्त साखळीच्या सुरू आहेत यातील फरक करा. प्रथम पाहण्यासाठी 1-2 ठिकाणे सुचवा. संबंधित कोड:{{code}}ट्रेस:{{trace}}

किमान पुनरावृत्ती वजाबाकी:

खालील कोड त्रुटी निर्माण करतो. ते सर्वात लहान उदाहरणापर्यंत कमी करा जे अद्याप त्रुटी ट्रिगर करते परंतु अनावश्यक काहीही टाकून देते. तुम्ही काढलेल्या प्रत्येक तुकड्याचा एररवर परिणाम होत नाही असे समजू नका, परंतु "तुम्ही हे काढून टाकल्यावर जर एरर नाहीशी झाली असेल, तर म्हणूनच" अशी टीप जोडा.{{code}}

पोस्ट-करेक्शन प्रमाणीकरण आणि प्रतिगमन चाचणी:

मूळ कारण {{cause}} आहे ​​असे गृहीत धरा आणि मी खालील निराकरण करतो: {{fix}}.1) हे निराकरण खरोखर लक्षण निश्चित करते का, त्याचे काही दुष्परिणाम होतील का? 2) एक प्रतिगमन चाचणी लिहा जी भविष्यात ही बग पकडेल.

कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट

कमकुवत: "कोड काम करत नाही, का?"
सशक्त: "नोड 20 / एक्सप्रेस. POST /ऑर्डर्स 500 परत करतात जेव्हा आयटम बॉडीमध्ये रिक्त स्ट्रिंग असते; 400 रिटर्न केले पाहिजेत. स्टॅक ट्रेस: TypeError: अपरिभाषित ('0' वाचन) चे गुणधर्म वाचू शकत नाही — संलग्न पूर्ण ट्रेस आणि संबंधित हँडलर आहे. प्रत्येक कारण 3 आणि बहुधा हे कसे तपासावे हे मला स्पष्ट करा. + कोड]"

शक्तिशाली आवृत्ती; हे वातावरण, एंडपॉइंट, ट्रिगर इनपुट, अचूक त्रुटी प्रकार आणि अपेक्षित वर्तन देते. मॉडेल यापुढे अंदाज लावू शकत नाही, परंतु विश्लेषण करू शकते.

पाऊल

AI चे योगदान

आपले नियंत्रण

पुरावे गोळा करणे

कोणत्या पुराव्याची गरज आहे, याची आठवण करून दिली

खरोखर पुरावे गोळा करतो

गृहीतक निर्मिती

संभाव्य कारणांची यादी करा

संदर्भासह प्राधान्य देतो

गृहीतक चाचणी

चाचणी पद्धतीची शिफारस करतो

वैयक्तिकरित्या कार्य करते आणि निरीक्षण करते

सुधारणा

पॅच शिफारस करतो

हे मूळ कारण सोडवते का? ते खरे आहे.

प्रतिगमन

एक चाचणी लिहितो

चाचणी खंडित झाल्याचे सत्यापित करते

मूळ कारण सोडवणे, लक्षण नाही

बऱ्याच वेळा AI एक पॅच सुचवेल जो त्वरीत लक्षण शांत करतो: प्रयत्न करा/कॅच जोडा, एक शून्य तपासणी करा, त्रुटी गिळून टाका. हे कधीकधी खरे असते, अनेकदा धोकादायक असते; कारण मूळ कारण जागेवरच राहते आणि पुन्हा कोठून तरी उद्रेक होते. प्रत्येक निराकरणासह, स्वतःला विचारा: "यामुळे त्रुटीचे कारण दूर होते की ते अदृश्य होते?" एकदा आपण मूळ कारण शोधल्यानंतर, निराकरण सहसा लहान, अधिक मजबूत आणि कायमस्वरूपी असते.

सावधानता: अपवाद (रिक्त झेल) शांतपणे गिळल्याने त्रुटी दूर होत नाही; ते केवळ लपवते आणि भविष्यातील निदान अशक्य करते. जर एआयने असा "उपाय" सुचवला तर मूळ कारणावर शंका घेतल्याशिवाय ते स्वीकारू नका.

सामान्य चुका

  • पुराव्याशिवाय प्रश्न विचारणे. अस्पष्ट वाक्ये मॉडेलला भ्रमात ढकलतात; संपूर्ण त्रुटी, ट्रेस आणि इनपुट द्या.
  • पहिल्या गृहीतकावर लॉक करणे. AI ची पहिली सूचना कदाचित बहुधा नसावी; सर्वात स्वस्त नियंत्रणीय गृहीतकासह प्रारंभ करा.
  • लक्षण पॅचिंग आणि मूळ कारण गहाळ. शांत केलेली त्रुटी परत येते.
  • पडताळणी न करता फिक्स बंद करणे. उत्पादनासारख्या स्थितीत पहा की त्रुटी प्रत्यक्षात अदृश्य होते.
  • प्रतिगमन चाचण्या लिहित नाही. कोणत्याही चाचण्या जोडल्या नसल्यास, तीच त्रुटी नंतरच्या आवृत्त्यांमध्ये शांतपणे परत येईल.

सारांशात

डीबगिंगमध्ये, AI ची शक्ती तुम्ही दिलेल्या पुराव्याशी थेट प्रमाणात असते: संपूर्ण एरर मेसेज, स्टॅक ट्रेस, ट्रिगरिंग इनपुट आणि अपेक्षित वर्तन न करता, मॉडेल फक्त अंदाज लावते. शिस्तबद्ध प्रवाह-लक्षणे स्पष्ट करा, पुरावे गोळा करा, गृहितक तयार करा, स्वस्त नियंत्रणासह चाचणी करा, मूळ कारण निश्चित करा, पडताळणी करा आणि प्रतिगमन चाचणी जोडा—दोन्ही त्वरीत आणि कायमस्वरूपी बग बंद करते. AI एक गृहीतक जनरेटर आहे; दोष प्रत्यक्षात सोडवला आहे हे ठरवणारे तुम्हीच आहात.

अर्ज कार्य

तुम्हाला अलीकडेच आलेला खरा बग निवडा (किंवा चाचणी बग पुनरुत्पादित करा). प्रथम "किमान पुनरुत्पादन" चरण करा; त्रुटी ट्रिगर करणारा सर्वात लहान कोड आणि इनपुट काढा. नंतर AI कडून “पुरावा-आधारित गृहीतक निर्मिती” टेम्पलेटसह 3 संभाव्य कारणे आणि चाचणी पद्धती मिळवा. सर्वात स्वस्त गृहीतकांची स्वतः चाचणी करा, मूळ कारण शोधा, त्याचे निराकरण करा आणि शेवटी एक प्रतिगमन चाचणी लिहा जी भविष्यात हा बग पकडेल आणि चाचणी खरोखर खंडित झाली आहे हे सत्यापित करेल.

चेकलिस्ट

  • [ ] मी एआय वर हलवण्यापूर्वी सर्वात लहान पुनरुत्पादक नमुन्यात त्रुटी कमी करतो.
  • [ ] मी प्रॉम्प्टमध्ये संपूर्ण त्रुटी संदेश, स्टॅक ट्रेस, इनपुट आणि अपेक्षित वर्तन जोडत आहे.
  • [ ] मी एका गृहीतकात बंद न ठेवता, सर्वात स्वस्त नियंत्रण करण्यायोग्य सह प्रारंभ करतो.
  • [ ] मी पडताळणी करतो की मी लक्षणांचे पॅचिंग करण्याऐवजी मूळ कारणाचे निराकरण केले आहे.
  • [ ] माझे निरीक्षण आहे की फिक्समुळे बगचे निराकरण होते.
  • मी सोडवलेल्या प्रत्येक बगसाठी प्रतिगमन चाचणी जोडतो.