युनिट 5 / 12

चाचणी उत्पादन आणि गुणवत्ता हमी

नफा:

  • AI सह युनिट चाचणी, एज केसेस आणि कव्हरेज गॅप विश्लेषण तयार करण्याची क्षमता
  • कोडच्या वर्तमान वर्तनावर नव्हे तर तपशीलावर आधारित चाचणी अपेक्षा मुद्रित करण्याची क्षमता
  • एरर इंजेक्ट करून चाचणी खरोखर संरक्षित करते की नाही हे तपासण्याची क्षमता

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

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

चाचणीच्या दोन बाजू: फिक्सिंग वर्तन वि. पडताळणी

एक चाचणी दोन भिन्न उद्देश पूर्ण करू शकते. पहिली पडताळणी आहे: कोड बरोबर आहे की ते तपशीलाचे पालन करते याची चाचणी करते. दुसरे म्हणजे प्रतिगमन संरक्षण: ते आज कोडचे वर्तन गोठवते, त्यामुळे उद्या कोणी चुकून बदलल्यास, चाचणी खंडित होईल आणि सूचित करेल.

AI नंतरचे खूप चांगले आहे; तो कोड पाहतो आणि "ते सध्या काय करत आहे" याची चाचणी करणारी प्रकरणे व्युत्पन्न करते. पण जर कोड सुरुवातीपासूनच चुकीचा असेल तर, AI त्या चुकीच्या वर्तनाला "योग्य" म्हणून पिन करू शकते. म्हणून तुम्ही एआयने तयार केलेल्या प्रत्येक चाचणीच्या प्रतिपादनाचे पुनरावलोकन केले पाहिजे: "कोड 42 देतो आणि चाचणी 42 ची अपेक्षा करते" याचा अर्थ 42 हे योग्य उत्तर आहे असा नाही.

खबरदारी: AI चाचणी उत्तीर्ण झाल्यास, याचा अर्थ कोड "कार्यरत" आहे असे नाही; याचा अर्थ फक्त "एआयच्या अपेक्षेप्रमाणे ते वागते". स्पेसिफिकेशन पाहून अपेक्षा योग्य आहे की नाही हे तुम्ही ठरवता.

स्टेप बाय स्टेप: AI सह मजबूत चाचण्या लिहिणे

  1. तपशील द्या, फक्त कोड नाही. "या फंक्शनने हे केले पाहिजे" अशी माहिती जोडल्यास, एआय योग्य अपेक्षा लिहू शकते; तुम्ही फक्त कोड प्रदान केल्यास ते वर्तमान वर्तनाची चाचणी करेल.
  2. एज केसेससाठी विचारा. रिक्त, शून्य, शून्य, नकारात्मक, खूप मोठे, खराब स्वरूप, एकरूपता — आनंदी मार्गावर स्पष्टपणे दावा करा.
  3. चाचणी फ्रेमवर्क आणि शैली निर्दिष्ट करा. "pytest वापरा", "Arrange-Act-Assert pattern", "प्रत्येक चाचणीला एक गोष्ट तपासू द्या" इ.
  4. अपेक्षा तपासा (प्रतिपादन). प्रत्येक दावे योग्य मूल्यासाठी तपासत असलेल्या तपशीलाशी तुलना करा.
  5. व्याप्तीमधील अंतर बंद करा. विद्यमान चाचण्या द्या आणि विचारा "कोणत्या शाखा आणि प्रकरणांची चाचणी झाली नाही?" तुम्हाला विचारायला लावा नंतर उत्पादित अतिरिक्त चाचण्या सत्यापित करा.

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

केस 1 - 52% ते 85% कव्हरेज. एका सेवा मॉड्यूलचे चाचणी कव्हरेज 52% होते. टीमने सध्याच्या चाचण्या AI ला दिल्या, न तपासलेल्या शाखांची यादी करून त्यांच्यासाठी चाचण्या तयार केल्या. मानवी पुनरावलोकनासह, कव्हरेज 85% पर्यंत वाढले; प्रक्रियेत, एआयने बग शाखेत वास्तविक बग (चुकीचा एरर कोड परत करणारा मार्ग) उघड केला ज्याची यापूर्वी कधीही चाचणी झाली नव्हती.

केस 2 - खोट्या अपेक्षा फिक्सेशन ट्रॅप. मनी राऊंडिंग फंक्शन प्रत्यक्षात चुकीचे होते; 2.675 ते 2.67 राउंडिंग करण्याऐवजी 2.68 ऐवजी 2.67 राउंडिंग करत होते. AI ने कोड पाहिला आणि assert round_money(2.675) == 2.67 असे लिहिले - त्रुटी "सत्य" म्हणून गोठवली. जेव्हा विकसकाने तपशील वाचले, तेव्हा त्याने अपेक्षा दुरुस्त केली आणि वास्तविक बग पकडला. कोडची नव्हे तर नियमाची चाचणी केल्याने फरक पडला.

केस 3 - एज स्टेट स्फोट. डेट रेंज फंक्शनसाठी एआयला फक्त “एज केसेस” विचारताना; स्टार्ट=एंड, रिव्हर्स इंटरव्हल, लीप इयर 29 फेब्रुवारी, वेगवेगळे टाइम झोन आणि नल इंटरव्हल यासारखी 8 केसेस तयार केली. यापैकी दोन (रिव्हर्स स्पेसिंग आणि लीप वर्ष) प्रत्यक्षात त्रुटी निर्माण करत होते. या प्रकरणांचा मॅन्युअली विचार केल्यास अनेकदा वगळले जाते; AI येथे "एज-केस ब्रेनस्टॉर्मिंग" भागीदार बनले.

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

तपशील-आधारित चाचणी निर्मिती:

भूमिका: एक विकासक जो चाचण्या लिहितो. फ्रेमवर्क: {{pytest/JUnit/Jest...}}. फंक्शनने काय करावे (स्पेसिफिकेशन): {{rule}}खालील फंक्शनसाठी चाचण्या लिहा. विनिर्देशानुसार अपेक्षा लिहा, कोडचे वर्तमान आउटपुट नाही. आनंदी मार्ग + किमान 4 किनारी केस जोडा. प्रत्येक चाचणीला एक गोष्ट तपासू द्या, वर्णनात्मक नाव वापरा. {{कार्य}}

एज केस मंथन:

या फंक्शनसाठी चाचणी करताना प्रयत्न केले जाणाऱ्या एज/अपयश प्रकरणांची यादी करा (शून्य, शून्य, ब्रेकपॉइंट्स, खराब स्वरूप, समरूपता, बाह्य त्रुटी).प्रत्येक प्रकरणासाठी: इनपुट, अपेक्षित वर्तन. अजून कोड लिहू नका, फक्त यादी करा.{{function}}

कव्हरेज गॅप विश्लेषण:

खाली कार्ये आणि उपलब्ध चाचण्या आहेत. कोणत्या शाखा, परिस्थिती आणि प्रकरणांची चाचणी घेण्यात आली नाही? कमतरतांची यादी करा आणि केवळ कमतरतांसाठी नवीन चाचण्या लिहा. विद्यमान पुनरावृत्ती करू नका. कार्य:{{function}}चाचण्या:{{existing_tests}}

चाचणी डेटा / मॉक ऑब्जेक्ट निर्मिती:

{{function/service}} चाचण्यांसाठी वास्तववादी चाचणी डेटा तयार करा: वैध नमुने, सीमा नमुने आणि अवैध नमुने स्वतंत्रपणे. बाह्य अवलंबित्व {{X}} साठी एक साधे उपहास वर्तन सुचवा. खरा गोपनीय डेटा/पीआयआय वापरणे; बनावट डेटा तयार करा.

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

कमकुवत: "या कार्यासाठी चाचणी लिहा."
सशक्त: "pytest सह. फंक्शन apply_discount(एकूण, टक्के) — नियम: सूट 0%–30% असणे आवश्यक आहे, सीमांच्या बाहेर ValueError टाकणे आवश्यक आहे, निकाल 2 दशांशांपर्यंत पूर्ण केला पाहिजे. या नियमानुसार अपेक्षा लिहा (कोडानुसार नाही). आनंदी मार्ग + ही किनारी प्रकरणे, एकूण 0%, 0%, 0% = 0%, नकारात्मक प्रकरणे. [कोड]"

तो मजबूत रिलीज नियम देतो आणि म्हणतो "नियमानुसार अपेक्षा लिहा, कोड नाही"; हे एक वाक्य AI फिक्सिंग गैरव्यवहाराचा सापळा बंद करते.

चाचणी प्रकार

AI योगदान

मानवी नियंत्रण

आनंदी रस्ता युनिट चाचणी

वेगवान सांगाडा

अपेक्षा योग्य आहे का?

काठ प्रकरणे

व्यापक विचारमंथन

असंबद्ध दूर करा

व्याप्ती अंतर भरणे

वगळलेल्या फांद्या शोधतात

महत्त्व पुष्टी करा

चाचणी डेटा/मॉक

वास्तववादी नमुना तयार करते

PII नाही, वास्तववाद नियंत्रण

चाचण्या गुणवत्ता व्यवस्थापित करतात, याची हमी देत नाहीत

उच्च चाचणी कव्हरेज आत्मविश्वास देते, परंतु ते दिशाभूल करणारे देखील असू शकते: 100 टक्के कव्हरेज म्हणजे "प्रत्येक ओळ चालवली गेली," असे नाही "प्रत्येक ओळ बरोबर आहे." AI सह कव्हरेज वाढवणे सोपे आहे; खरी किंमत अर्थपूर्ण अपेक्षा लिहिण्यात आहे. चाचणीचे मूल्य म्हणजे कोड तुटल्यावर तो खंडित करण्याची आणि तुम्हाला सतर्क करण्याची क्षमता. म्हणूनच AI-व्युत्पन्न केलेल्या चाचण्या "कोड बदलतो तेव्हा तो खरोखर मोडतो का?" या प्रश्नावर आधारित असतात. प्रश्नासह त्याची चाचणी घ्या; मुद्दाम एक ओळ तोडणे आणि चाचणी ब्रेक (म्युटेशन आयडिया) पाहणे हा चाचणी कार्य केल्याचा पुरावा आहे.

टीप: एआयने लिहिलेली चाचणी कार्य करते की नाही हे पाहण्यासाठी, कोडमध्ये एक लहान बग तयार करा (उदा. a + ते a - बदला) आणि चाचणी खंडित होते का ते पहा. जर ते तुटले नाही, तर ती चाचणी तुमचे संरक्षण करत नाही.

सामान्य चुका

  • नियम न देता चाचणी मागितली. मॉडेल वर्तमान वर्तन गोठवते; त्रुटी "सत्य" म्हणून निश्चित करते.
  • त्या न वाचता अपेक्षा स्वीकारणे. तुम्ही दावे योग्य मूल्यासाठी तपासत असल्याचे तुम्ही तपासत नसल्यास चाचणी दिशाभूल करणारी आहे.
  • फक्त आनंदी मार्गाची चाचणी घेत आहे. वास्तविक चुका मार्जिनवर राहतात; एज केसेस स्पष्टपणे विचारा.
  • हेतूसाठी वाव चुकणे. उच्च टक्केवारी योग्य वर्तनाची हमी नाही.
  • चाचणी डेटा म्हणून खरा/लपलेला डेटा बनवणे. ग्राहक डेटा किंवा रहस्ये चाचणी आणि स्टोरेज प्रविष्ट करू नये; सिंथेटिक डेटा व्युत्पन्न करा.

सारांशात

AI लिखित चाचण्यांमधून पुनरावृत्ती होणारे बरेच ओझे घेते: ते जलद सांगाडे, किनारी प्रकरणांची मोठी यादी आणि कव्हरेज गॅप विश्लेषणे तयार करते. परंतु सर्वात गंभीर मुद्दा म्हणजे अपेक्षा: एआय कोडच्या वर्तमान वर्तनाची चाचणी घेते, तर चाचणी तपशीलानुसार लिहिली पाहिजे. नियम द्या, अपेक्षा तपासा, एज केसेस अंमलात आणा आणि बग इंजेक्ट करून चाचण्या खरोखर संरक्षित करतात की नाही ते तपासा. चाचणी कव्हरेज हे एक साधन आहे, ध्येय नाही.

अर्ज कार्य

फंक्शन निवडा आणि प्रथम एआयला फक्त त्याचा कोड देऊन चाचणी मुद्रित करा; अपेक्षा लक्षात घ्या. नंतर त्याच फंक्शनसाठी स्पेसिफिकेशन (आवश्यक वर्तन) देऊन चाचणी पुन्हा मुद्रित करा. दोन चाचणी संचांच्या अपेक्षांची तुलना करा: त्यात काही वेगळे आहेत का, कोणता खरा बग उघड करतो? शेवटी, कोडमध्ये हेतुपुरस्सर बग जोडून आणि चाचणी ब्रेक पाहून व्युत्पन्न केलेल्या चाचण्यांपैकी एकाने कार्य केले असल्याचे सत्यापित करा.

चेकलिस्ट

  • [ ] चाचणी वर्तन निश्चित करण्यासाठी किंवा सत्यापित करण्यासाठी आहे की नाही हे मी वेगळे करतो.
  • [ ] जेव्हा मी चाचणीची विनंती करतो, तेव्हा मी नियम (विशिष्टता) देतो जो कोड नसून त्या ठिकाणी असावा.
  • [ ] मी प्रत्येक व्युत्पन्न केलेल्या प्रतिपादनाची तुलना तपशीलाशी करतो.
  • [ ] मी स्पष्टपणे धार आणि अपयश प्रकरणांची विनंती करतो.
  • मी टक्केवारी कव्हरेज एक साधन म्हणून पाहतो, ध्येय नाही.
  • [ ] मी चाचणी करतो की चाचणी खरोखरच त्रुटी इंजेक्शन देऊन संरक्षण करते.