नफा:
- स्वीकृती नियमापेक्षा स्वतंत्रपणे युनिट चाचण्यांमध्ये अपेक्षित मूल्य मोजून कृत्रिम बुद्धिमत्तेला चुकीचे वर्तन 'योग्य' म्हणून स्वीकारण्यापासून रोखण्याची क्षमता
- AAA आणि FIRST तत्त्वे लागू करून आणि बाह्य अवलंबनांची थट्टा करून जलद, स्वतंत्र आणि पुनरावृत्ती करण्यायोग्य चाचण्या मुद्रित करण्याची क्षमता
- उत्परिवर्तन (कोड ब्रेकिंग) सह चाचण्या तपासण्याची क्षमता आणि डिझाईन वास म्हणून कठीण-टू-चाचणी कोड ओळखण्याची क्षमता
चाचणी पिरॅमिडचा सर्वात मोठा आणि जलद स्तर म्हणजे युनिट चाचणी — चाचणी जी इतर सर्व गोष्टींपासून वेगळे करून फंक्शन किंवा कोडचा छोटा तुकडा सत्यापित करते. हजारो युनिट चाचण्या काही सेकंदात चालतात आणि कोड डेव्हलपरच्या स्क्रीनवर असताना बग पकडतात. कृत्रिम बुद्धिमत्ता (AI) कदाचित युनिट चाचण्या तयार करण्यात सर्वात प्रवीण आहे: तुम्ही त्याला एक कार्य द्या, AI डझनभर चाचण्या तयार करते. पण हीच सोय सर्वात मोठ्या सापळ्याला जन्म देते: AI सहजपणे अशा चाचण्या तयार करते ज्या “हिरव्या चमकतात पण काहीही पडताळत नाहीत” किंवा कोडचे वर्तमान (कदाचित सदोष) वर्तन “योग्य” म्हणून स्वीकारते. या युनिटमध्ये तुम्ही AI सह खऱ्या अर्थाने संरक्षणात्मक युनिट चाचण्या कशा लिहायच्या आणि टेस्टेबल कोड आणि AI यांच्यातील संबंध शिकाल.
चांगल्या युनिट चाचणीचे गुण: प्रथम
चांगल्या युनिट चाचण्या पहिल्या तत्त्वांचे पालन करतात: जलद, स्वतंत्र (चाचण्या एकमेकांवर अवलंबून नसाव्यात), पुनरावृत्ती करता येण्याजोग्या (पुनरावृत्ती करता येण्याजोगा — कोणत्याही वातावरणात समान परिणाम), स्वत: ची पडताळणी (स्पष्ट पास/नापास), वेळेवर (वेळेवर). AI उत्पादन चाचण्या घेत असताना स्वतःला या तत्त्वांची आठवण करून द्या; विशेषतः विचारा की चाचणी "स्वतंत्र" आणि "पुनरावृत्ती करण्यायोग्य" होण्यासाठी बाहेरील जगावर (वास्तविक डेटाबेस, नेटवर्क, घड्याळ) अवलंबून नाही.
एएए पॅटर्न आणि अर्थपूर्ण ठाम
ठोस युनिट चाचणी AAA संरचनेचे अनुसरण करते: व्यवस्था करा (तयार करा — इनपुट आणि अवलंबित्व सेट करा), कायदा (कार्यान्वीत करा — चाचणी अंतर्गत फंक्शनला कॉल करा), असार्ट (प्रमाणित करा — अपेक्षित मूल्यासह निकालाची तुलना करा). गंभीर एक ठाम आहे. AI ने केलेली सर्वात सामान्य चूक म्हणजे चाचणी अंतर्गत कोडच्या आऊटपुटमधून दावा काढणे — “कोड जे काही परत करेल ते सत्य आहे” तर्क. त्यामुळे चाचणी निरर्थक ठरते. योग्य मार्ग म्हणजे अपेक्षित मूल्य स्वतंत्रपणे निर्धारित करणे (स्वीकृती निकषांवरून, स्वहस्ते गणना करा).
लक्ष द्या: जर तुम्ही AI ला "या कार्यासाठी चाचणी लिहा" असे सांगितले, तर AI फंक्शन चालवू शकते आणि त्याचे आउटपुट "अपेक्षित" म्हणून लिहू शकते. फंक्शन खोटे असले तरीही ही चाचणी उत्तीर्ण होते. त्याऐवजी, "तुम्ही या नियमांनुसार अपेक्षित परिणामांची गणना करता, फंक्शनच्या वर्तमान आउटपुटचा संदर्भ देऊ नका" असे म्हणा.
मस्क, स्टब आणि अवलंबित्व
युनिट चाचणीसाठी अलगाव आवश्यक आहे. तुमचे कार्य डेटाबेस किंवा API वर अवलंबून असल्यास, ते चाचणीमध्ये मॉक ऑब्जेक्ट्स (मॉक/स्टब — वास्तविक अवलंबित्वासाठी एक नियंत्रित, डमी पर्याय) बदलले जातात. यामुळे चाचणी जलद, स्वतंत्र आणि पुनरुत्पादक बनते. एआय मॉक इंस्टॉलेशन तयार करू शकते; परंतु जास्त उपहास करण्यापासून सावध रहा: जर तुम्ही प्रत्येक गोष्टीची थट्टा करत असाल, तर चाचणी केवळ "मॉक रिटर्न काय देते" याची पडताळणी करेल, वास्तविक तर्क नाही. शिल्लक: बाहेरील जगाचे अनुकरण करा, चाचणी अंतर्गत वास्तविक तर्क अंमलात आणा.
चाचणीक्षमता आणि AI
एक मनोरंजक अभिप्राय आहे: ज्या कोडची चाचणी करणे कठीण आहे तो सहसा खराब डिझाइन केलेला कोड असतो. जर एआयला फंक्शनसाठी चाचण्या लिहिण्यात अडचण येत असेल (बर्याच अवलंबित्व, लपलेली जागतिक स्थिती, साइड इफेक्ट्स), तो डिझाइनचा वास आहे. AI ला "तुम्ही हा कोड चाचणी करण्यायोग्य कसा बनवाल" हे विचारल्याने चांगली चाचणी आणि चांगले कोड दोन्ही मिळतील.
पॅरामीटराइज्ड चाचण्या आणि डेटा विविधता
वेगवेगळ्या इनपुट्ससह समान नियम सत्यापित करण्यासाठी प्रत्येक वेळी स्वतंत्र चाचणी लिहिणे कंटाळवाणे आणि राखणे कठीण आहे. पॅरामीटराइज्ड चाचणी — इनपुट आणि अपेक्षित परिणामांच्या सूचीवर एकच चाचणी तर्क वारंवार चालवणारी रचना — ही पुनरावृत्ती काढून टाकते: एकल चाचणी शरीर डझनभर इनपुट जोड्यांसह दिले जाते. जेव्हा तुम्ही तुमचे स्वीकृती नियम देता तेव्हा या इनपुट-अपेक्षित परिणाम सारण्या तयार करण्यात AI खूप कार्यक्षम असते; विशेषतः, ते पद्धतशीरपणे मर्यादा मूल्ये आणि समतुल्य वर्गांचे सारणीबद्ध करते.
परंतु येथेही एक सापळा आहे: चाचणी अंतर्गत कोडमधून व्युत्पन्न केलेल्या टेबलमधील अपेक्षित परिणाम मिळवण्याकडे एआयचा कल असतो. पॅरामीटराइज्ड चाचणीमध्ये ही त्रुटी आणखी धोकादायक आहे, कारण एकच चुकीचा तर्क डझनभर ओळी अवैध करतो. म्हणून, स्वीकृती नियमानुसार नेहमी अपेक्षित परिणाम स्तंभाची स्वतंत्रपणे गणना करा आणि कमीतकमी काही पंक्ती व्यक्तिचलितपणे प्रमाणित करा. तसेच वर्णन स्तंभ "प्रत्येक पंक्ती काय दर्शवते" विचारा; त्यामुळे जेव्हा एखादी पंक्ती तुटते तेव्हा कोणती अवस्था तुटलेली आहे ते तुम्ही लगेच पाहू शकता.
टीप: जाणूनबुजून पॅरामीटराइज्ड चाचणी टेबलमध्ये एक “ट्रॅप रो” जोडा — म्हणजे जाणूनबुजून निकाल चुकीचा टाइप करा. जर तुम्ही चाचणी चालवता तेव्हा ती रेषा लाल होत नसेल, तर तुमची चाचणी प्रत्यक्षात त्या परिस्थितीची पडताळणी करत नाही. ही एक द्रुत मॉक-पास तपासणी आहे.
कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट
कमकुवत: "या कार्यासाठी एक युनिट चाचणी लिहा."
सशक्त: "टॅक्स कॅल्क्युलेट(रक्कम, दर) फंक्शनसाठी [भाषा/फ्रेमवर्क] युनिट चाचण्या लिहा. स्वीकृती नियम: परिणाम = रक्कम * दर, 2 दशांशांपर्यंत पूर्णांक; नकारात्मक रक्कम किंवा दर एरर टाकतो; दर 0 असल्यास 0 परतावा देतो. AAA रचना वापरा. मॅन्युअली गणना करा. अपेक्षित मूल्ये चालू नियमांनुसार बदलू नका. आणि नकारात्मक प्रकरणे (0, नकारात्मक, खूप मोठे, गोलाकार ते दशांश पर्यंत) प्रत्येक चाचणीचे नाव ते सत्यापित करते त्या नियमाचे वर्णन करू द्या "नाही."
शक्तिशाली प्रॉम्प्ट; हे स्वीकृती नियम, स्वतंत्र अपेक्षित मूल्य अपेक्षा, रचना आणि धार प्रकरणे देते. अशा प्रकारे, चाचणी नियमाची संरक्षक बनते, कोडचा आरसा नाही.
युनिट चाचणी गुणवत्ता सारणी
लक्षण
वाईट चाचणी (बनावट-विश्वास)
चांगली चाचणी
ठामपणे
काहीही नाही किंवा "शून्य नाही"
अपेक्षित ठोस मूल्य
अपेक्षित मूल्य स्रोत
फंक्शनचे आउटपुट
स्वीकृती नियम / मॅन्युअल गणना
व्यसन
वास्तविक DB/नेटवर्क/तास
मॉक/स्टबसह इन्सुलेटेड
धार केस
फक्त आनंदी रस्ता
मर्यादा, नकारात्मक, त्रुटी
जेव्हा तुम्ही कोड मोडता
हिरवे राहते
लाल होतो
नाव
चाचणी1, चाचणी पद्धत
ते पुष्टी करत असलेल्या नियमाचे वर्णन करते
चार कॉपी करण्यायोग्य टेम्पलेट्स
1) नियम-चालित युनिट चाचणी:
तुमची भूमिका: वरिष्ठ सॉफ्टवेअर चाचणी अभियंता. खालील फंक्शनवर [भाषा/फ्रेमवर्क] सह एक युनिट चाचणी लिहा: [स्वाक्षरी]. स्वीकृती नियम: [नियम].- एएए रचना वापरा.- या नियमांनुसार अपेक्षित मूल्यांची मॅन्युअली गणना करा; फंक्शनच्या वर्तमान आउटपुटचा संदर्भ देऊ नका. - मर्यादा, नकारात्मक, त्रुटी आणि आनंदी मार्ग वेगळ्या चाचण्यांसह कव्हर करा. - प्रत्येक चाचणी नावाने ते सत्यापित केलेल्या नियमाचे वर्णन करू द्या. - बाह्य अवलंबनांचा उपहास करणे; वास्तविक तर्क कार्य करा.
2) उत्परिवर्तन प्रतिरोध नियंत्रण:
या युनिट चाचण्या पहा. चाचणी अंतर्गत कोडमध्ये मी करू शकणाऱ्या 5 किरकोळ बदलांची यादी करा (a - a + ऐवजी, a >= a > ऐवजी, एक सीमा शिफ्ट) आणि प्रत्येकासाठी मला सांगा यापैकी कोणत्या चाचण्या लाल होतील? जर काहीही परत न मिळाल्यास, चाचणी अपुरी आहे. कोड + चाचण्या: [पेस्ट]
3) चाचणीक्षमता पुनरावलोकन:
या कार्यासाठी युनिट चाचणी लिहिणे कठीण का आहे? छुपे व्यसन, जागतिक स्थिती, दुष्परिणाम, अनेक जबाबदाऱ्या आहेत का? ते चाचणी करण्यायोग्य करण्यासाठी किमान रिफॅक्टरिंग सुचवा; वर्तन बदलू नका. कोड: [पेस्ट]
4) अपूर्ण परिस्थिती पूर्ण होणे:
खालील कार्य आणि उपलब्ध चाचण्या दिल्या आहेत. कोणते वर्तन/एजकेस कधीही तपासले गेले नाही याची यादी करा (स्कोप गॅप) आणि प्रत्येकासाठी एक चाचणी जोडा. कार्य + चाचण्या: [पेस्ट]
तीन लहान प्रकरणे
केस 1 - कोड मिररिंग चाचणी. एका विकसकाने AI ने राउंडिंग फंक्शनसाठी चाचणी लिहिली होती; 10 चाचण्या हिरव्या होत्या. खरं तर, फंक्शन चुकीच्या दिशेने गोलाकार करत होते, परंतु AI ने फंक्शनच्या आउटपुटमधून अपेक्षित मूल्ये घेतली होती, म्हणून चाचणीने त्रुटी "सत्य" मानली. जेव्हा "नियम-चालित" टेम्पलेटसह अपेक्षित मूल्ये व्यक्तिचलितपणे मोजली गेली, तेव्हा 4 चाचण्या लाल झाल्या आणि वास्तविक त्रुटी उघड झाली.
केस 2 - उत्परिवर्तन नियंत्रणाचे मूल्य. एक संघ 45 युनिट चाचण्यांवर अवलंबून होता. "म्युटेशन रॉबस्टनेस चेक" सह कोडमध्ये 20 किरकोळ ट्वीक्स वापरून पाहिले; चाचण्यांमध्ये त्यापैकी फक्त 11 पकडले गेले. उर्वरित 9 अडथळे शांतपणे पार पडले. संघाने कमकुवत चाचण्या मजबूत केल्या; पुढील प्रकाशनामध्ये या वर्धित चाचण्यांद्वारे वास्तविक गणना त्रुटी आढळली.
केस 3 - अस्थिरता ही रचना वास आहे. एआय ऑर्डरिंग फंक्शनसाठी चाचण्या लिहू शकत नाही, त्याला सतत वास्तविक डेटाबेसची आवश्यकता असते. "टेस्टेबिलिटी रिव्ह्यू" टेम्प्लेटने दाखवले की फंक्शन एम्बेडेड डेटाबेस ऍक्सेस. जेव्हा अवलंबित्व इंजेक्शन काढून टाकले गेले, तेव्हा चाचण्या लिहिल्या जाऊ शकतात आणि कोड अधिक स्वच्छ झाला.
सामान्य चुका
- कोडमधून अपेक्षित मूल्य प्राप्त करणे. एआय फंक्शन आउटपुट "योग्य" म्हणून स्वीकारते; दोषपूर्ण कोडची पुष्टी करणारी चाचणी.
- दावा न करता किंवा क्षुल्लक प्रतिपादनासह चाचणी करा. "त्याने चूक केली नाही, तो पास झाला" तर्क; ते कशाचीही पुष्टी करत नाही.
- कमालीची थट्टा. प्रत्येक गोष्टीची खिल्ली उडवणे आणि केवळ मॉक काय परत येतो याची चाचणी घेणे; वास्तविक तर्क चाचणी नाही.
- फक्त आनंदी रस्ता. मर्यादा, नकारात्मक आणि त्रुटी स्थिती बायपास करणे.
- कोड तोडून चाचणी करत नाही. उत्परिवर्तन तपासल्याशिवाय हिरव्यावर विश्वास ठेवणे.
- अस्थिरतेकडे दुर्लक्ष करणे. कठोर चाचणी घेण्याऐवजी खराब डिझाइन ओळखणे आणि निराकरण न करणे.
सारांशात
युनिट चाचण्या ही चाचणी पिरॅमिडची सर्वात वेगवान आणि सर्वात मोठी थर आहे; हे सर्वात स्वस्त क्षणी चूक पकडते. AI युनिट चाचण्या तयार करण्यात खूप सक्षम आहे, परंतु त्याचा सर्वात मोठा त्रास म्हणजे कोडमधूनच अपेक्षित मूल्य मिळवून चुकीचे वर्तन "योग्य" म्हणून गृहीत धरणाऱ्या चाचण्या लिहिणे. उपाय: स्वीकृती नियम द्या, अपेक्षित मूल्ये व्यक्तिचलितपणे मोजा, AAA आणि FIRST तत्त्वे लागू करा, बाहेरील जगाची थट्टा करा आणि वास्तविक तर्क चालवा आणि उत्परिवर्तन (कोड तोडून) प्रत्येक चाचणीची चाचणी घ्या. कोड ज्याची चाचणी करणे कठीण आहे ते डिझाइन चिन्ह आहे ज्यास निराकरण करणे आवश्यक आहे.
अर्ज कार्य
तुमच्या स्वतःच्या प्रोजेक्टमधून व्यवसाय नियम असलेले फंक्शन निवडा. स्वीकृती नियम लिहा आणि "नियम-चालित युनिट चाचणी" टेम्पलेटसह AI लेखन चाचण्या घ्या; अपेक्षित मूल्ये व्यक्तिचलितपणे मोजली जातात. नंतर "उत्परिवर्तन मजबूतता तपासणी" लागू करा: कोडमध्ये किमान 5 लहान ब्रेक करा आणि किती चाचण्या लाल झाल्या हे मोजा. न पकडलेल्या भ्रष्टाचारांसाठी नवीन चाचणी जोडा. किती व्यत्यय पकडले गेले ते कळवा (जसे की उत्परिवर्तन स्कोअर).
चेकलिस्ट
- [ ] मी स्वीकृती नियम दिले आणि अपेक्षित मूल्ये व्यक्तिचलितपणे मोजली.
- [ ] मी खात्री केली की चाचण्यांनी कोडमधून अपेक्षित मूल्य प्राप्त केले नाही.
- [ ] मी AAA आणि FIRST मार्गदर्शक तत्त्वांचे पालन करून स्वतंत्र चाचणी स्थापन केली आहे.
- [ ] मी बाह्य अवलंबनांची थट्टा केली आणि वास्तविक तर्क चालवला.
- [] मी मर्यादा, नकारात्मक आणि त्रुटी प्रकरणे कव्हर केली आहेत.
- कोड (उत्परिवर्तन) तोडून मी सिद्ध केले की चाचण्या खरोखरच संरक्षण करतात.