लाभ:
- AI सँग अर्थपूर्ण दावीको साथ इकाई, एकीकरण र किनारा केस परीक्षणहरू उत्पादन गर्ने क्षमता
- एआई समर्थनको साथ व्यवस्थित रूपमा परीक्षण कभरेज, सीमित मानहरू र नकारात्मक परिदृश्यहरू निकाल्ने क्षमता
- प्रमाणित गर्ने क्षमता AI द्वारा उत्पादित परीक्षणहरूले वास्तवमा व्यवहार प्रमाणित गर्दछ र अवस्थित कोड मात्र दोहोर्याउँदैन।
परीक्षण भनेको सफ्टवेयरले वास्तवमा प्रतिज्ञा गरे अनुसार व्यवहार गर्छ भनेर प्रमाणित गर्ने संयन्त्र हो। राम्रो परीक्षण सुइटले तपाईंलाई सेकेन्डमा बताउँछ कि परिवर्तनले केहि तोड्छ र इन्जिनियरलाई आत्मविश्वासका साथ काम गर्ने स्वतन्त्रता दिन्छ। AI ले परीक्षण लेखनको सबैभन्दा कठिन र सबैभन्दा छाडिएको भागलाई गति दिन्छ: धेरै परिदृश्यहरू, ब्रेकपोइन्टहरू, र नकारात्मक केसहरू उत्पन्न गर्दै। तर यहाँ एउटा डरलाग्दो जाल छ: AI ले परीक्षणहरू लेख्न सक्छ जसले कोडको वर्तमान (सम्भवतः दोषपूर्ण) व्यवहार प्रमाणित गर्दछ, यसको मानिएको व्यवहार होइन; वा यसले खाली परीक्षणहरू उत्पादन गर्न सक्छ जुन सधैं पास हुन्छ, वास्तवमा केहि जाँच गर्दैन। परीक्षाको मूल्य यो पास हुन्छ कि हुँदैन भन्ने कुरामा हुन्छ, तर सही कुराको जाँच गर्छ र गलत हुँदा रातो हुन्छ भन्ने कुरामा हुन्छ।
यस एकाइमा, तपाईंले अर्थपूर्ण दावीहरूको साथ एकाइ, एकीकरण र किनारा केस परीक्षणहरू कसरी उत्पादन गर्ने सिक्नुहुनेछ; परीक्षण कभरेज, ब्रेकपोइन्ट र डाउनसाइड परिदृश्यहरू कसरी व्यवस्थित रूपमा निकाल्ने; र हामी हेर्नेछौं कि तपाइँ कसरी जाँच गर्न सक्नुहुन्छ कि AI ले उत्पादन गरेको परीक्षणहरूले व्यवहारलाई प्रमाणित गर्दछ।
अवधारणाहरू: एकाइ परीक्षण: एकल प्रकार्य/वर्गलाई अलगावमा परीक्षण गर्दछ। एकीकरण परीक्षण: धेरै भागहरू एकसाथ सही रूपमा काम गर्ने परीक्षणहरू। दाबी गर्नुहोस्: एक कथन जसले जाँच गर्दछ कि परिणाम अपेक्षा गरिएको बराबर छ; यो परीक्षाको मुटु हो। कभरेज: कति कोड परीक्षणहरू द्वारा चलाइएको छ; उच्च कभरेजले गुणस्तरको ग्यारेन्टी गर्दैन।
अर्थपूर्ण परीक्षणहरू उत्पादन गर्दै
राम्रो परीक्षणले तीनवटा कुराहरू स्पष्ट रूपमा गर्छ: यसले राज्य स्थापना गर्दछ, यसले कार्य गर्दछ, यसले परिणामलाई जोड दिन्छ। AI मा परीक्षणहरू प्रिन्ट गर्दा, तपाइँ कुन व्यवहार प्रमाणित गर्न चाहानुहुन्छ र कुन परिदृश्यहरू कभर गर्नुपर्छ निर्दिष्ट गर्नुहोस्; अन्यथा, यसले सतही परीक्षणहरू उत्पादन गर्दछ जुन सधैं पास हुन्छ।
- परीक्षण गर्नको लागि व्यवहार परिभाषित गर्नुहोस्। "के सहि मानिन्छ?" प्रश्नको स्पष्ट जवाफ दिनुहोस्।
- परिदृश्य प्रकारहरूको लागि सोध्नुहोस्। सामान्य, सीमा, नकारात्मक, त्रुटि अवस्था।
- अर्थपूर्ण दावी आयात गर्नुहोस्। यसले "त्रुटि फ्याँक्नु" मात्र होइन, "सही मान फिर्ता गर्यो"।
- परीक्षणको शुद्धता जाँच गर्नुहोस्। के तपाइँले होशपूर्वक कोड तोड्दा परीक्षण रातो हुन्छ?
व्यापक परीक्षण उत्पादन प्रम्प्ट: "निम्न 'applydiscount(रकम, कुपन)' प्रकार्यको लागि एकाइ परीक्षणहरू लेख्नुहोस्। निम्न कोटीहरूमा कम्तिमा एउटा परिदृश्य राख्नुहोस्: (1) सामान्य मान्य कुपन, (2) ब्रेकपोइन्टहरू (0 रकम, 100% छुट), (3) नकारात्मक (अमान्य रकम, कूपन) (नकारात्मक रकम) (अमान्य रकम)। प्रत्येक परीक्षणमा CONCRETE अपेक्षित मान (केवल 'काम गरेको' होइन) कोड: [code]"।
सीमा मान निकासी प्रम्प्ट: "यस प्रकार्यको इनपुटहरूको लागि सीमा मान विश्लेषण गर्नुहोस्। प्रत्येक प्यारामिटरको लागि, तालिकाको रूपमा 'सीमामा मात्र', 'सीमाको ठीक तल', 'सीमाभन्दा माथि' मानहरू निकाल्नुहोस्। त्यसपछि यी सीमाहरूलाई समेट्ने परीक्षण परिदृश्यहरू सूचीबद्ध गर्नुहोस्। अझै पनि कोडीनासिस र फनक्सन लेख्नुहोस्। [हस्ताक्षर]"
सावधानी: उच्च परीक्षण कभरेज (जस्तै 90%) ले कोड सही छ भनेर प्रमाणित गर्दैन। कभरेज मापन गर्दछ कि कति पङ्क्तिहरू कार्यान्वयन गरियो; होइन कि ती रेखाहरूले सही परिणाम दिन्छ। अर्थपूर्ण दाबी बिनाको परीक्षणले कभरेज बढाउँछ तर केहि ग्यारेन्टी गर्दैन। दावीको सामग्रीले गुणस्तर निर्धारण गर्दछ, दावीहरूको संख्या होइन।
परीक्षण आफैलाई परीक्षण गर्दै: उत्परिवर्तनको तर्क
एआई-उत्पन्न परीक्षणले वास्तवमा काम गर्छ कि गर्दैन भनेर बुझ्ने सबैभन्दा व्यावहारिक तरिका जानाजानी कोड (म्युटेसन परीक्षण तर्क) तोड्नु हो। एक शर्त उल्टाउनुहोस्, + चिन्ह बनाउनुहोस् -; यदि कुनै परीक्षणहरू रातो भएन भने, तपाईंको परीक्षणहरूले वास्तवमा त्यो व्यवहारलाई कायम राखिरहेका छैनन्।
परीक्षण भेद्यता शिकार प्रम्प्ट: "मलाई बताउनुहोस् कि यस कोडमा कुन सम्भावित बगहरू निम्न परीक्षणहरूले समात्न सक्दैनन्। कोडमा गर्न सकिने 5 साना म्युटेसनहरू सुझाव दिनुहोस् (जस्तै >= को सट्टा >, - + को सट्टा) र प्रत्येकको लागि संकेत गर्नुहोस् कि अवस्थित परीक्षणहरूले यसलाई समात्छन् कि छैनन्। ती समातिएका छैनन्, परीक्षण गर्न सुझाव दिनुहोस् कि [code:t] code थप्नु पर्छ।
कमजोर प्रम्प्ट / बलियो प्रम्प्ट
कमजोर: "यस प्रकार्यमा परीक्षण लेख्नुहोस्।" (नतिजा: सामान्यतया एउटा खुसी परिदृश्य, कमजोर दाबी; त्रुटिहरू छुटेको छ।) स्ट्रांग: "यो 'पासवर्डस्ट्रङ्ग' प्रकार्यमा परीक्षण लेख्नुहोस्। नियम: कम्तिमा 8 क्यारेक्टरहरू, 1 ठूला अक्षर, 1 अंक आवश्यक छ। निम्न परिदृश्यहरूलाई अलग-अलग परीक्षणहरूको रूपमा कभर गर्नुहोस्: ठीक 8 क्यारेक्टरहरू (सीमा), 7 अङ्कको कम, कुनै पनि अक्षरहरू, कुनै पनि अक्षरहरू छैनन्। खाली स्ट्रिङ, केवल खाली ठाउँहरू, धेरै लामो (1000 क्यारेक्टरहरू) स्पष्ट रूपमा प्रत्येक परीक्षणमा अपेक्षित सत्य/गलत मान दाबी गर्नुहोस् र यसले जाँच गरेको अनुसार परीक्षणको नाम दिनुहोस्।"
शक्तिशाली प्रम्प्टले नियमहरू र पूर्ण सीमा परिदृश्यहरू दिन्छ। बाउन्ड्री जोडाहरू जस्तै "ठीक 8 / 7 क्यारेक्टरहरू" गल्तीहरू गर्नका लागि सबैभन्दा सामान्य ठाउँहरू हुन् (भ्रममा > संग >=)। कमजोर प्रम्प्टले यी सीमाहरूलाई बाइपास गर्छ र त्रुटिलाई उत्पादनमा लैजान्छ।
परीक्षण प्रकार र कहाँ प्रयोग गर्ने
परीक्षण प्रकार
यसले के पुष्टि गर्छ?
AI योगदान
ध्यान
एकाइ
एकल प्रकार्य / वर्ग
बहु-परिदृश्यहरू छिटो उत्पन्न गर्दछ
सार्थक दाबी आवश्यक छ
एकीकरण
भागहरू सँगै काम गर्दै
परिदृश्य र नक्कली डाटा ड्राफ्ट
साँचो लत व्यवहार
अन्त्य/स्वीकार
सम्पूर्ण प्रयोगकर्ता प्रवाह
चरण सूची र अपेक्षा
भंगुरता को प्रवण
प्रतिगमन
पुरानो त्रुटि फिर्ता आउँदैन
दोष विशिष्ट परीक्षण
हरेक फिक्समा थपिनुपर्छ
मिनी केसहरू
केस 1 - परीक्षा जुन सधैं पास हुन्छ। AI ले एउटा प्रकार्यमा १२ परीक्षणहरू लेख्छ र ती सबै पास हुन्छन्। इन्जिनियर संदिग्ध हुन्छ र जानाजानी प्रकार्यको फिर्ती मान विकृत गर्दछ; परीक्षणमध्ये ३ मात्रै रातो हुन्छ । अन्य 9 परीक्षणहरूमा अर्थपूर्ण दावीहरू छैनन्। उत्परिवर्तन शिकार द्वारा परीक्षण बलियो हुन्छ; वास्तविक सुरक्षा 9 परिदृश्यहरूमा प्राप्त हुन्छ।
केस 2 - सीमा त्रुटि। उमेर प्रमाणीकरण प्रकार्यले "18 र माथि मान्य छ" भन्नु पर्छ तर >18 लेखिएको छ, जसको अर्थ 18 वर्ष अस्वीकार गरिएको छ। त्रुटि परीक्षणमा तुरुन्तै देखा पर्दछ किनभने AI ले ब्रेकपोइन्ट विश्लेषण मार्फत "ठ्याक्कै 18" परिदृश्य उत्पन्न गर्दछ। एकल सीमा परीक्षणले कुनै पनि वास्तविक प्रयोगकर्ता उजुरीहरूलाई रोक्छ।
केस 3 - हालको व्यवहार फिक्स गर्दै। जब AI लाई "यो कोडमा आधारित परीक्षण लेख्न" भनिन्छ, यसले एउटा परीक्षण उत्पादन गर्छ जसले कोडमा पहिले नै अवस्थित राउन्डिङ त्रुटिलाई "सही" रूपमा स्वीकार गर्छ। जब इन्जिनियरले आवश्यकता अनुसार परीक्षण प्रिन्ट गर्छ (अपेक्षित सही मान) र कोड होइन, परीक्षण रातो हुन्छ र वास्तविक त्रुटि हुन्छ। परीक्षाहरू अपेक्षाबाट व्युत्पन्न हुनुपर्छ, कोडबाट होइन।
सामान्य गल्तीहरू
- निरर्थक दाबी । "त्रुटि फ्याँकिएको छैन" पर्याप्त छैन; सही मान प्रमाणित गरिनुपर्छ।
- गुणस्तर संग भ्रमित दायरा। उच्च कभरेज सही परिणामहरूको कुनै ग्यारेन्टी छैन।
- कोड द्वारा परीक्षण प्रिन्ट गर्दै। हालको त्रुटिलाई "सत्य" मा फिक्स गर्दछ; परीक्षाहरू अपेक्षाबाट व्युत्पन्न हुनुपर्छ।
- सीमा मानहरू छोड्दै। भ्रमित > with >= सबैभन्दा सामान्य गल्ती हो; सीमा जोडी परीक्षण गर्नुपर्छ।
- परीक्षण आफैं लेखाजोखा गर्दैन। तपाईंले कोड तोड्दा रातो नहुने परीक्षणले सुरक्षा प्रदान गर्दैन।
संक्षेपमा
एक राम्रो परीक्षण सुइट आत्मविश्वास संग परिवर्तन गर्न को लागी कुञ्जी हो। AI ले चाँडै धेरै परिदृश्यहरू, सीमाहरू, र नकारात्मक परिस्थितिहरू उत्पन्न गर्दछ; तर यदि यसले आवश्यकताहरूको सट्टा कोडबाट परीक्षणहरू प्राप्त गर्छ भने, यसले अवस्थित बगहरू समाधान गर्न वा सधैं पास हुने अर्थहीन परीक्षणहरू लेख्न सक्छ। प्रत्येक परीक्षणमा ठोस अपेक्षित मान जोड्नुहोस्, बाउन्ड जोडीहरू समावेश गर्नुहोस्, र प्रमाणित गर्नुहोस् कि तपाइँको परीक्षणहरूले वास्तवमा कोडलाई जानाजानी तोडेर सुरक्षा गर्दछ। दावीको सामग्री, स्कोपहरूको संख्या होइन, गुणस्तर निर्धारण गर्दछ।
आवेदन कार्य
एक प्रकार्य चयन गर्नुहोस् र यसलाई चार कोटीहरूमा परीक्षणहरू उत्पन्न गराउनुहोस् (सामान्य, सीमा, नकारात्मक, त्रुटि) व्यापक परीक्षण उत्पादन प्रम्प्टको साथ; प्रत्येक परीक्षणमा ठोस अपेक्षित मूल्यलाई जोड दिनुहोस्। त्यसपछि परीक्षण भेद्यता शिकार प्रम्प्ट चलाउनुहोस्, कोडमा 5 साना उत्परिवर्तनहरू सुझाव गर्नुहोस्, र तिनीहरूले समातेको जाँच गर्न परीक्षणहरू चलाउनुहोस्। कम्तिमा एउटा उत्परिवर्तनको लागि नयाँ परीक्षण थप्नुहोस् जुन समातिएको थिएन र यो अब रातोमा छ भनेर देखाउनुहोस्।
चेकलिस्ट
- [ ] मैले अपेक्षित/सही व्यवहारमा आधारित परीक्षणहरू छापेको छु, कोड होइन।
- [] मैले सामान्य, सीमा, नकारात्मक र त्रुटि परिदृश्यहरू कभर गरें।
- [ ] मैले प्रत्येक परीक्षणमा ठोस अपेक्षित मूल्यलाई जोड दिएँ।
- [ ] मैले बोर्डर जोडाहरू परीक्षण गरें (केवल माथि-तल / केवल माथि-तल)।
- [ ] जानाजानी कोड तोडेर, मैले परीक्षणहरू रातो भएको पुष्टि गरें।
- [ ] मैले पत्ता नलागेको उत्परिवर्तनको लागि नयाँ परीक्षण थपेको छु।