टेस्ट जनरेशनसाठी AI: कुठे मदत करते आणि कुठे फसवते

AI वेगाने टेस्ट्स लिहिते. ते अशा टेस्ट्स देखील लिहिते ज्या खऱ्या वाटतात पण चुकीच्या गोष्टींची पडताळणी करतात. तुमची कव्हरेज (coverage) वाढत असल्याचे तुम्हाला दिसू शकते, परंतु तुमचा कोड अजूनही सदोष राहू शकतो.

AI काही विशिष्ट कामांसाठी उत्तम आहे. त्याचा वापर खालील गोष्टींसाठी करा:

  • चांगल्या उदाहरणावरून विस्तार करणे. जर तुम्ही एक उत्तम टेस्ट लिहिली, तर AI तुमच्याच शैलीत आणखी दहा टेस्ट लिहू शकते.
  • पुनरावृत्ती होणारी टायपिंगची कामे हाताळणे. सेटअप ब्लॉक्स (setup blocks), टीअरडाउन (teardown) आणि फॅक्टरी हेल्पर्ससाठी (factory helpers) याचा वापर करा.
  • सुरुवातीची रचना (scaffolding) तयार करणे. रिकाम्या फाईलपेक्षा हे तुम्हाला एडिटरपर्यंत अधिक वेगाने पोहोचवते.

धोका तेव्हा सुरू होतो जेव्हा तुम्ही "कॉन्ट्रॅक्ट" (contract) ठरवण्याचे काम AI कडे सोपवता.

जर तुम्ही AI ला एखादे फंक्शन दिले आणि टेस्ट्स विचारल्या, तर ते कोड वाचते आणि कोड सध्या काय करतो याची टेस्ट करते. कोड काय करायला हवा याची ते टेस्ट करत नाही. यामुळे एक 'क्लोज्ड लूप' (closed loop) तयार होतो. AI एक गृहीतक (assumption) मांडते, कोड लिहिते आणि नंतर त्याच गृहीतकावर आधारित टेस्ट्स लिहिते.

जेव्हा प्रोडक्शनमध्ये बग्स (bugs) येतात, तेव्हा ते येण्याचे कारण म्हणजे टेस्ट सूट (test suite) बगच्या बाजूने होता.

या तीन सापळ्यांपासून सावध राहा:

  1. इम्प्लिमेंटेशन-आधारित टेस्ट्स (Implementation-shaped tests) AI अनेकदा बिझनेस रूल्सऐवजी लॉजिक पाथ्सची (logic paths) टेस्ट करते. जर तुम्ही एखादा छोटा अंतर्गत बदल केला, तर रिझल्ट अजूनही बरोबर असूनही टेस्ट्स फेल होतात. यामुळे रिफॅक्टरिंग (refactoring) करणे कठीण होते.

  2. वरवरचे एज केसेस (Shallow edge cases) AI नल (nulls), रिकाम्या स्ट्रिंग्स (empty strings) आणि झिरो (zeros) टेस्ट करण्यात चांगले आहे. हे सर्व स्पष्ट आहेत. ते "डोमेन एजेस" (domain edges) शोधू शकत नाही. त्याला तुमचे विशिष्ट टाइमझोन बग्स, डेटाबेस मधील त्रुटी किंवा तुमचे अनन्य बिझनेस रूल्स माहित नसतात.

  3. ठिसूळ मॉक्स (Brittle mocks) AI ला सर्व गोष्टी 'मॉक' (mock) करायला आवडतात. यामुळे दोन समस्या निर्माण होतात:

  • मॉक चुकीचा असतो. ते API ची एक बनावट आवृत्ती तयार करते जी वास्तवाशी जुळत नाही.
  • मॉक इम्प्लिमेंटेशनला स्थिर (freeze) करतो. ते अंतिम निकालाची टेस्ट करण्याऐवजी तुमचा कोड इतर फंक्शन्सना कशा प्रकारे कॉल करतो याची टेस्ट करते.

AI चा योग्य वापर कसा करावा:

"हेतू" (intent) AI च्या आवाजाबाहेर ठेवा.

  • प्रथम कॉन्ट्रॅक्ट लिहा. प्रत्येक टेस्टसाठी साध्या इंग्रजीमध्ये एक वाक्य लिहा. उदाहरणार्थ: "Expired codes must return the original amount."
  • ती वाक्ये AI ला द्या. त्याला 'असर्शन्स' (assertions) लिहू द्या, पण अर्थ तुम्ही द्या.
  • बाउंड्रीजवर (boundaries) मॉक करा. फक्त बाह्य APIs किंवा डेटाबेस मॉक करा. तुमच्या स्वतःच्या अंतर्गत मॉड्यूल्सच्या (internal modules) रिअल आवृत्त्या वापरा.
  • एक डोमेन एज केस स्वतः हाताने लिहा. प्रत्येक वेळी जेव्हा तुम्ही एखादे फंक्शन पूर्ण करता, तेव्हा तुम्हाला ज्या गोष्टीची भीती वाटते ती लिहून काढा. त्याचा वापर AI साठी प्रॉम्प्ट (prompt) म्हणून करा.

AI हे उत्पादकता वाढवणारे साधन (productivity tool) आहे, विचार करण्याच्या प्रक्रियेचा पर्याय नाही. टेस्टचा मुख्य भाग (body) लिहिण्यासाठी त्याचा वापर करा, परंतु टेस्ट कशासाठी आहे हे ठरवू देऊ नका.

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

Optional learning community: https://t.me/GyaanSetuAi