एकाइ 5 / 12

परीक्षण उत्पादन र गुणस्तर आश्वासन

लाभ:

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

लेखन परीक्षण सबैभन्दा मूल्य-उत्पादन कार्यहरू मध्ये एक हो जुन धेरै विकासकर्ताहरूले बन्द राख्छन्। एउटा राम्रो परीक्षण सुइट प्रमाण हो कि कोडले अपेक्षित रूपमा काम गर्दछ र भविष्यका परिवर्तनहरूको लागि जीवन रेखा। समस्या यो हो कि लेखन परीक्षणहरू दोहोरिने र समय-उपभोग गर्ने हो - वास्तवमा एआई चम्कने कामको प्रकार। तर त्यहाँ एउटा क्याच छ: एआईले प्राय: कोडको अवस्थित व्यवहारको परीक्षण गर्छ, व्यवहार हुनु हुँदैन। यो भिन्नता प्रबन्ध गर्नु यस इकाईको सार हो।

यस एकाइमा, तपाईंले एकाइ परीक्षण सिक्नुहुनेछ (परीक्षण जसले एकल प्रकार्यलाई एक्लै परीक्षण गर्दछ, अलगावमा), किनारा केस परीक्षणहरू र एआईसँग परीक्षण डाटा उत्पन्न गर्ने; परीक्षण कभरेजमा अन्तराल बन्द गर्ने; र किन एआई परीक्षणहरूमा अन्धाधुन्ध विश्वास गर्नु खतरनाक छ।

परीक्षणका दुई पक्षहरू: फिक्सिङ व्यवहार बनाम प्रमाणित

एक परीक्षण दुई फरक उद्देश्य सेवा गर्न सक्छ। पहिलो प्रमाणिकरण हो: यसले कोड सही छ भनेर परीक्षण गर्दछ, कि यो विनिर्देशन अनुरूप छ। दोस्रो रिग्रेसन सुरक्षा हो: यसले आज कोडको व्यवहारलाई स्थिर गर्दछ, त्यसैले यदि कसैले गलतीले यसलाई भोलि परिवर्तन गर्यो भने, परीक्षणले ब्रेक गर्नेछ र सूचित गर्नेछ।

AI पछिल्लो मा धेरै राम्रो छ; यसले कोड हेर्छ र केसहरू उत्पन्न गर्दछ जसले "अहिले के गरिरहेको छ" परीक्षण गर्दछ। तर यदि कोड सुरुदेखि गलत छ भने, एआईले त्यो गलत व्यवहारलाई "सही" को रूपमा पिन गर्न सक्छ। त्यसोभए तपाईंले एआईले उत्पादन गर्ने प्रत्येक परीक्षणको दावीलाई समीक्षा गर्नुपर्छ: "कोडले 42 फर्काउँछ र परीक्षणले 42 अपेक्षा गर्दछ" यसको मतलब 42 सही जवाफ हो भन्ने होइन।

सावधानी: यदि AI ले परीक्षण पास गर्छ भने, यसको मतलब कोड "काम गरिरहेको" होइन; यसको अर्थ मात्र "एआईले अपेक्षा गरे अनुसार व्यवहार गर्छ"। तपाईंले विनिर्देशन हेरेर अपेक्षा सही हो वा होइन निर्णय गर्नुहोस्।

स्टेप बाइ स्टेप: एआईसँग बलियो टेस्टहरू लेख्दै

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

तीन मिनी केसहरू

केस १ - कभरेज ५२% देखि ८५% सम्म। एउटा सेवा मोड्युलको परीक्षण कभरेज 52% थियो। टोलीले AI लाई अवस्थित परीक्षणहरू खुवायो, यसले परीक्षण नगरिएका शाखाहरूको सूची बनायो र तिनीहरूका लागि परीक्षणहरू उत्पन्न गर्यो। मानव समीक्षा संग, कवरेज 85% मा बढ्यो; प्रक्रियामा, एआईले बग शाखामा वास्तविक बग (गलत त्रुटि कोड फिर्ता गर्ने बाटो) पत्ता लगायो जुन पहिले कहिल्यै परीक्षण गरिएको थिएन।

केस 2 - गलत अपेक्षा फिक्सेशन जाल। पैसा राउन्डिङ प्रकार्य वास्तवमा गलत थियो; 2.675 देखि 2.67 राउन्डिङ गर्नुको सट्टा, यो 2.68 को सट्टा 2.67 राउन्डिङ थियो। एआईले कोड हेर्यो र लेख्यो assert round_money(2.675) == 2.67 — त्रुटिलाई "true" को रूपमा फ्रिज गर्दै। जब विकासकर्ताले स्पेसिफिकेशन पढ्यो, उसले अपेक्षालाई सच्यायो र वास्तविक बग समात्यो। नियमको परीक्षण गर्दा, कोड होइन, फरक भयो।

केस 3 - किनारा राज्य विस्फोट। मिति दायरा प्रकार्यको लागि केवल "एज केसहरू" को लागि एआईलाई सोध्दा; यसले स्टार्ट=इन्ड, रिभर्स अन्तराल, लीप इयर फेब्रुअरी २९, विभिन्न समय क्षेत्र र शून्य अन्तराल जस्ता ८ केसहरू उत्पादन गर्यो। यी मध्ये दुई (रिभर्स स्पेसिङ र लीप वर्ष) वास्तवमा त्रुटि निम्त्याउँदै थिए। यी मामिलाहरूलाई म्यानुअल रूपमा विचार गर्दा प्रायः छोडिन्छ; AI यहाँ "एज-केस ब्रेनस्टोर्मिङ" साझेदार भयो।

चार प्रतिलिपि गर्न मिल्ने टेम्प्लेटहरू

विशिष्टता आधारित परीक्षण उत्पादन:

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

एज केस ब्रेनस्टर्मिंग:

यस प्रकार्य (नल, शून्य, ब्रेकपोइन्ट, खराब ढाँचा, समरूपता, बाह्य त्रुटि) को लागि परीक्षण गर्न प्रयास गरिनु पर्ने किनारा/असफलता केसहरू सूचीबद्ध गर्नुहोस्। प्रत्येक केसको लागि: इनपुट, अपेक्षित व्यवहार। अझै कोड नलेख्नुहोस्, केवल सूची बनाउनुहोस्।{{function}}

कभरेज अन्तर विश्लेषण:

तल कार्यहरू र उपलब्ध परीक्षणहरू छन्। कुन शाखा, अवस्था र केसहरू परीक्षण गरिएको छैन? कमजोरीहरूको सूची बनाउनुहोस् र कमजोरीहरूको लागि मात्र नयाँ परीक्षणहरू लेख्नुहोस्। अवस्थितलाई दोहोर्याउनुहोस्। प्रकार्य:{{function}}परीक्षणहरू:{{existing_tests}}

परीक्षण डाटा / नक्कली वस्तु उत्पादन:

{{function/service}} परीक्षणहरूको लागि यथार्थपरक परीक्षण डाटा उत्पन्न गर्नुहोस्: मान्य नमूनाहरू, सीमा नमूनाहरू र अवैध नमूनाहरू छुट्टाछुट्टै। बाह्य निर्भरता {{X}} को लागी एक साधारण नक्कली व्यवहार सुझाव दिनुहोस्। साँचो गोप्य डाटा/PII प्रयोग गर्दै; नक्कली डाटा उत्पन्न गर्नुहोस्।

कमजोर प्रम्प्ट / बलियो प्रम्प्ट

कमजोर: "यस प्रकार्यको लागि परीक्षण लेख्नुहोस्।"
बलियो: "pytest संग। प्रकार्य apply_discount(कुल, प्रतिशत) — नियम: छूट 0%–30% हुनुपर्छ, सीमा बाहिर ValueError फ्याँक्नु पर्छ, परिणाम 2 दशमलवमा राउन्ड हुनुपर्छ। यो RULE (कोड द्वारा होइन) द्वारा अपेक्षाहरू लेख्नुहोस्। खुशी पथ + यी किनारा केसहरू: %3, 0% = 0%, 0% = 0%, नकारात्मक केसहरू। [कोड]"

उसले कडा रिलीज नियम दिन्छ र भन्छ "नियम अनुसार अपेक्षा लेख्नुहोस्, कोड होइन"; यो एक वाक्यले एआई फिक्सिङ दुर्व्यवहारको जाल बन्द गर्दछ।

परीक्षण प्रकार

AI योगदान

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

शुभ सडक इकाई परीक्षण

छिटो कंकाल

के अपेक्षा सही छ?

किनारा केसहरू

व्यापक मंथन

अप्रासंगिक हटाउनुहोस्

स्कोप ग्याप फिलिंग

छोडिएका शाखाहरू फेला पार्छ

महत्व पुष्टि गर्नुहोस्

परीक्षण डाटा/नक्कल

यथार्थपरक नमूना उत्पादन गर्दछ

कुनै PII, यथार्थवाद नियन्त्रण

परीक्षणले गुणस्तर व्यवस्थापन गर्छ, ग्यारेन्टी गर्दैन

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

सुझाव: AI ले लेखेको परीक्षणले काम गर्छ कि गर्दैन भनेर हेर्नको लागि, कोडमा एउटा सानो बग सिर्जना गर्नुहोस् (जस्तै a + लाई a - परिवर्तन गर्नुहोस्) र हेर्नुहोस् कि परीक्षण ब्रेक भयो। यदि यो तोड्दैन भने, त्यो परीक्षणले तपाइँको सुरक्षा गर्दैन।

सामान्य गल्तीहरू

  • नियम नदिई परीक्षाको लागि सोध्ने । मोडेल वर्तमान व्यवहार स्थिर; त्रुटि "सत्य" को रूपमा फिक्स गर्दछ।
  • तिनीहरूलाई नपढाई अपेक्षाहरू स्वीकार गर्दै। यदि तपाईंले दाबीहरूले सही मानको लागि जाँच गरिरहेको छ भनी जाँच गर्नुभएन भने परीक्षण भ्रामक हुन्छ।
  • केवल सुखी मार्गको परीक्षण। वास्तविक त्रुटिहरू मार्जिनमा बस्छन्; स्पष्ट रूपमा किनारा केसहरूको लागि सोध्नुहोस्।
  • उद्देश्यको लागि दायरा गलत गर्दै। उच्च प्रतिशत सही व्यवहारको कुनै ग्यारेन्टी होइन।
  • वास्तविक/लुकेको डाटालाई परीक्षण डाटाको रूपमा बनाउँदै। ग्राहक डेटा वा गोप्य परीक्षण र भण्डारण प्रविष्ट गर्नु हुँदैन; सिंथेटिक डाटा उत्पन्न गर्नुहोस्।

संक्षेपमा

AI ले लेखन परीक्षणबाट धेरै दोहोरिने बोझ लिन्छ: यसले द्रुत कंकाल, किनारा केसहरूको ठूलो सूची, र कभरेज ग्याप विश्लेषणहरू उत्पादन गर्दछ। तर सबैभन्दा महत्त्वपूर्ण बिन्दु अपेक्षाहरू हो: AI ले कोडको हालको व्यवहारको परीक्षण गर्दछ, जबकि परीक्षण निर्दिष्टीकरण अनुसार लेखिनुपर्छ। नियम दिनुहोस्, अपेक्षाहरू जाँच गर्नुहोस्, किनारा केसहरू लागू गर्नुहोस्, र परीक्षणहरूले वास्तवमा बग इन्जेक्सन गरेर सुरक्षा गर्छ कि गर्दैन जाँच गर्नुहोस्। परीक्षण कभरेज एक उपकरण हो, लक्ष्य होइन।

आवेदन कार्य

एउटा प्रकार्य चयन गर्नुहोस् र पहिले मात्र यसको कोड दिएर AI मा परीक्षण प्रिन्ट गर्नुहोस्; अपेक्षाहरू नोट गर्नुहोस्। त्यसपछि फेरि परीक्षण प्रिन्ट गर्नुहोस्, उही प्रकार्यको लागि निर्दिष्टीकरण (आवश्यक व्यवहार) दिँदै। दुई परीक्षण सेटहरूको अपेक्षाहरू तुलना गर्नुहोस्: त्यहाँ कुनै फरक छ, कुनले वास्तविक बग प्रकट गर्दछ? अन्तमा, कोडमा जानाजानी बग थपेर र परीक्षण ब्रेक हेरेर उत्पन्न गरिएका परीक्षणहरू मध्ये एउटाले काम गरेको प्रमाणित गर्नुहोस्।

चेकलिस्ट

  • [ ] म फरक छु कि परीक्षण ठीक वा व्यवहार प्रमाणित गर्न हो।
  • [ ] जब मैले परीक्षण अनुरोध गर्छु, म नियम (विशिष्टता) दिन्छु जुन ठाउँमा हुनुपर्छ, कोड होइन।
  • [ ] म प्रत्येक उत्पन्न दावीलाई स्पेसिफिकेशनसँग तुलना गर्छु।
  • [ ] म स्पष्ट रूपमा किनारा र विफलता केसहरू अनुरोध गर्दछु।
  • [ ] म प्रतिशत कभरेजलाई उपकरणको रूपमा हेर्छु, लक्ष्य होइन।
  • [ ] म परीक्षण गर्छु कि परीक्षणले वास्तवमा त्रुटिहरू सुईद्वारा सुरक्षा गर्दछ।