नफा:
- छद्म-विश्वासाचे तीन चेहरे ओळखण्याची क्षमता (नॉन-आस्र्टिव्ह, सेल्फ-एस्र्टिंग, क्षुल्लक ठाम) आणि अँटीडोट्स लागू करण्याची क्षमता
- साधन किंवा हाताने टक्के कव्हरेजपेक्षा गुणवत्तेचे अधिक अचूक माप म्हणून उत्परिवर्तन चाचणी आणि उत्परिवर्तन स्कोअर वापरण्याची क्षमता
- चाचणीच्या विरोधात AI ला लाल संघ म्हणून स्थान देण्याची क्षमता आणि प्रशंसाच्या जाळ्यात न पडता त्रुटी तपासण्याची क्षमता
या मॉड्यूलच्या केंद्रस्थानी एक आवर्ती चेतावणी आहे: हिरवा चमकणारा चाचणी पॅनेल गुणवत्तेचा पुरावा नाही. जर तुमच्या चाचण्या तुम्हाला आत्मविश्वास देत असतील, तर तो आत्मविश्वास खरा आहे की खोटा हे तुम्हाला माहित असणे आवश्यक आहे. कृत्रिम बुद्धिमत्तेच्या (AI) युगात, हा प्रश्न नेहमीपेक्षा अधिक गंभीर आहे, कारण AI द्रव, गुळगुळीत दिसणाऱ्या परंतु पोकळ चाचण्या तयार करण्यात पटाईत आहे. चुकीचा आत्मविश्वास — सॉफ्टवेअरवर विश्वास ठेवणे बरोबर आहे कारण चाचण्या हिरव्या असतात, जेव्हा खरेतर चाचण्या काहीही पडताळत नाहीत — ही QA टीमसाठी सर्वात धोकादायक गोष्ट आहे; कारण ते लपवत नाही की त्रुटी नाहीत, परंतु आपण त्रुटी पाहू शकत नाही. हे युनिट संपूर्ण मॉड्यूलचे प्रमाणीकरण तत्त्वज्ञान एका विषयात एकत्र आणते: तुमच्या चाचण्या तपासणे.
चाचणीची गुणवत्ता मोजण्यासाठी सुवर्ण मानक: उत्परिवर्तन चाचणी
चाचणी खरोखर संरक्षित करते की नाही हे समजून घेण्याचा सर्वात शक्तिशाली मार्ग म्हणजे उत्परिवर्तन चाचणी (उत्परिवर्तन चाचणी - एक तंत्र जे स्त्रोत कोडमध्ये हेतुपुरस्सर लहान विकृती/उत्परिवर्तन निर्माण करते आणि चाचणी या विकृती शोधतात की नाही हे मोजते). लॉजिक सोपे आहे: जर तुम्ही कोड मुद्दाम मोडला (a + into -, a > into >=, true to असत्य), चांगल्या टेस्ट सूटने तो भ्रष्टाचार पकडला पाहिजे आणि तो लाल झाला पाहिजे. तसे न झाल्यास, तो व्यत्यय एक वाचलेला उत्परिवर्ती आहे — म्हणून तुमच्या चाचण्या प्रत्यक्षात त्या वर्तनाचे रक्षण करत नाहीत.
उत्परिवर्तन स्कोअर = उत्परिवर्तन मारले / एकूण उत्परिवर्तन. 90% लाइन कव्हरेज असलेल्या पॅकेजचा उत्परिवर्तन स्कोअर 40% असू शकतो; हे सूचित करते की ओळी कार्यरत आहेत परंतु वर्तन सत्यापित केलेले नाही. म्युटेशन स्कोअर हे टक्केवारीच्या कव्हरेजपेक्षा गुणवत्तेचे अधिक प्रामाणिक उपाय आहे.
टीप: स्वयंचलित उत्परिवर्तन साधने आहेत (Java साठी PIT/Pitest, JavaScript/TypeScript साठी स्ट्रायकर, .NET साठी Stryker.NET, Python साठी mutmut). हे आपोआप शेकडो उत्परिवर्तन तयार करतात आणि चाचणी करतात. तुमच्याकडे साधन नसल्यास, गंभीर कार्यांसाठी मॅन्युअल "ब्रेक द कोड टेस्ट" पद्धत देखील अमूल्य आहे.
छद्म-विश्वासाचे तीन चेहरे आणि त्याचा उतारा
छद्म-विश्वास फॉर्म
लक्षण
उतारा
दावा न करता चाचणी
कोड कार्य करतो, काहीही प्रमाणित नाही
प्रत्येक परीक्षेत खरा प्रतिपादन; उत्परिवर्तनासह चाचणी
स्वत: ची पुष्टी करणारी चाचणी
अपेक्षित = कोडचे आउटपुट
अपेक्षित मूल्याची स्वतंत्रपणे गणना करा
क्षुल्लक प्रतिपादन
"नल नाही", "200 परत आले"
व्यवसाय नियम/वास्तविक निकाल सत्यापित करा
उच्च व्याप्ती भ्रम
90% ओळी, कमी संरक्षण
उत्परिवर्तन स्कोअर पहा
नाजूक चाचणी सहिष्णुता
"पुन्हा अडकलो, पास"
मूळ कारण + निर्धारक चाचणी
"रेड टीम" म्हणून AI वापरणे
एआय दोन्ही छद्म-विश्वास निर्माण करू शकते आणि त्याचा शोध घेण्यासाठी एक शक्तिशाली सहयोगी असू शकते. तुमच्या स्वतःच्या चाचण्यांविरुद्ध रेड टीम म्हणून AI चा वापर करा: “या चाचण्या उत्तीर्ण करणारा कोड लिहा पण चुकीचा आहे” किंवा “या चाचण्यांना फसवणूक करणारा एखादा उपद्व्याप शोधा.” AI ला तुमच्या चाचण्यांमध्ये त्रुटी आढळल्यास, त्या त्रुटी खऱ्या धोक्यात आहेत.
खबरदारी: AI ला विचारू नका "माझी चाचणी गुणवत्ता चांगली आहे का?" आणि आश्वासन म्हणून "होय, उत्तम" उत्तर घ्या. AI दयाळू आहे. त्याऐवजी, AI ला एका ठोस कार्यासाठी आव्हान द्या: "या चाचण्या उत्तीर्ण करणारा बग तयार करा." जर ते ते तयार करू शकत असेल, तर तुमच्या चाचण्या त्या त्रुटीसाठी अंध आहेत.
समतुल्य उत्परिवर्तन आणि स्कोअरची मर्यादा
उत्परिवर्तन चाचणी शक्तिशाली आहे, परंतु त्यात एक पकड आहे: काही उत्परिवर्तन कोडचे वर्तन अजिबात बदलत नाहीत. त्यांना समतुल्य उत्परिवर्तन म्हणतात (समतुल्य उत्परिवर्तन — दूषित कोड, उत्परिवर्तन जे मूळ सारखेच परिणाम देते). उदाहरणार्थ, कधीही न वापरलेले व्हेरिएबलचे प्रारंभिक मूल्य बदलल्याने आउटपुटवर परिणाम होत नाही; कोणतीही चाचणी हे पकडू शकत नाही आणि करू नये. म्हणून, 100% उत्परिवर्तन स्कोअर हे सहसा सरावात अशक्य असते आणि ते ध्येय नसते. हाताने समतुल्य उत्परिवर्तन काढून टाकणे श्रमिक आहे; त्यामुळे उत्परिवर्तन स्कोअर परिपूर्ण परीक्षेचा स्कोअर म्हणून वाचू नका, तर "माझ्या चाचण्या खरोखरच संरक्षित आहेत का?"
व्यावहारिक दृष्टीकोन हा आहे: संपूर्ण कोड बेसवर सतत उत्परिवर्तन चाचणी चालवण्याऐवजी, सर्वात जास्त जोखीम आणि सर्वात जटिल व्यावसायिक नियम असलेल्या मॉड्यूलवर चालवा. या मॉड्यूल्समधील जिवंत उत्परिवर्तनांचे एक-एक करून परीक्षण करा; जर ते वास्तविक अंतर असेल तर चाचणी जोडा; जर ते समतुल्य उत्परिवर्तन असेल, तर त्यास समर्थनासह चिन्हांकित करा आणि पास करा. जिवंत उत्परिवर्तन समतुल्य आहे की नाही याचे मूल्यांकन करण्यासाठी AI प्रारंभिक स्क्रीनिंग करू शकते; परंतु अंतिम निर्णय तुम्ही घेतला आहे ज्यांना कोड काय आहे हे माहित आहे.
खबरदारी: उत्परिवर्तन चाचणी संगणकीयदृष्ट्या महाग आहे (प्रत्येक उत्परिवर्तनासाठी सर्व संबंधित चाचण्या पुन्हा चालवल्या जातात). म्हणून एक सामान्य आणि वाजवी धोरण म्हणजे प्रत्येक विलीनीकरणाऐवजी ते साप्ताहिक किंवा प्री-रिलीझ डीप चेक म्हणून गंभीर मॉड्यूल्ससाठी शेड्यूल करणे.
कमकुवत प्रॉम्प्ट / मजबूत प्रॉम्प्ट
कमकुवत: "माझ्या चाचण्या पुरेशा आहेत का?"
मजबूत: "या कार्यासाठी आणि चाचणी संचासाठी लाल संघ म्हणून कार्य करा. (1) मारल्या जाऊ शकणाऱ्या कोडमध्ये 8 उत्परिवर्तन तयार करा (ऑपरेटर प्रतिस्थापन, सीमा बदल, कंडिशन इनव्हर्शन, रिटर्न व्हॅल्यू प्रतिस्थापन). (2) प्रत्येक उत्परिवर्तनासाठी, विद्यमान चाचण्यांपैकी कोणते ते पकडतील आणि कोणते नाही हे दर्शवा. (3) प्रत्येक चाचणीसाठी नवीन लिहिणे आवश्यक आहे. (४) तुम्ही या सर्व चाचण्या उत्तीर्ण करणारे पण व्यवसाय नियमाचे उल्लंघन करणारे कोडचे उदाहरण देऊ शकता का ते दाखवा: [पेस्ट करा]"
शक्तिशाली प्रॉम्प्ट; ते AI ला चाचणी-ब्रेकिंग परीक्षक म्हणून स्थान देते, स्तुती मशीन नाही.
चार कॉपी करण्यायोग्य टेम्पलेट्स
1) मॅन्युअल उत्परिवर्तन नियंत्रण:
या कोडसाठी 8 महत्त्वपूर्ण उत्परिवर्तन (किरकोळ हेतुपुरस्सर व्यत्यय) व्युत्पन्न करा: अंकगणित ऑपरेटर प्रतिस्थापन, तुलना मर्यादा (> वि >=), तार्किक उलथापालथ, परतावा/सतत प्रतिस्थापन, स्थिती वगळणे. प्रत्येक उत्परिवर्तनासाठी, उपलब्ध चाचण्यांपैकी कोणती ती पकडेल किंवा नाही याचा अंदाज लावा. कोड+चाचण्या: [पेस्ट]
2) जिवंत उत्परिवर्तन मारणे:
खालील उत्परिवर्तन चाचणी अहवालात जिवंत (न पकडलेले) उत्परिवर्तन आहेत: [सूची/अहवाल]. प्रत्येकासाठी, एक किमान चाचणी लिहा ज्यामुळे ते उत्परिवर्तन नष्ट होईल (अशा प्रकारे मोडल्यास कोड लाल होईल). चाचणी कोणत्या वर्तनाची पुष्टी करते यावर टिप्पणी द्या.
3) लाल संघ - रक्त चाचणी:
तुम्ही कोड लिहू शकता जे खालील सर्व चाचण्या उत्तीर्ण करते, परंतु खालील व्यवसाय नियमांचे उल्लंघन करते: [व्यवसाय नियम]. तसे असल्यास, या चाचण्यांमधील कोणती पळवाट याला परवानगी देते? चाचणी जोडा ज्यामुळे तो पळवाट बंद होईल. चाचण्या: [पेस्ट]
4) चाचणी गुणवत्ता तपासणी:
गुणवत्तेसाठी हा चाचणी संच तपासा. प्रत्येक चाचणीसाठी टिक:- खरा दावा आहे की तो प्रॉप्स आहे?- अपेक्षित मूल्य स्वतंत्र, कोडमधून घेतले आहे का?- ते व्यावसायिक नियम किंवा क्षुल्लक गोष्ट सत्यापित करते का? शेवटी अंदाजे "ट्रू ॲसर्ट स्कोअर" आणि 3 सर्वात कमकुवत चाचण्या द्या. चाचण्या: [पेस्ट]
तीन लहान प्रकरणे
केस 1 - कव्हरेज 92%, उत्परिवर्तन स्कोअर 38%. एक संघ उच्च कव्हरेजवर अवलंबून होता. जेव्हा उत्परिवर्तन चाचणी स्ट्रायकरसह चालविली गेली तेव्हा गुणांक 38% होता: बहुतेक उत्परिवर्तन टिकून राहिले. चाचण्या ओळी चालवत नसल्याचा आणि वर्तनाची पडताळणी करत असल्याचा हा पुरावा होता. टीमने गुणवत्तेची चाचणी करण्यासाठी तीन आठवडे गुंतवले; उत्परिवर्तन स्कोअर 81% पर्यंत वाढला, आणि पुढील प्रकाशनात या बीफ-अप चाचण्यांद्वारे दोन वास्तविक गणना त्रुटी आढळल्या.
केस 2 - AI ने चाचणी फसवली. "रेड टीम" टेम्प्लेटसह, तज्ञाने एआयला विद्यमान चाचण्या उत्तीर्ण केलेल्या परंतु सवलतीच्या नियमाचे उल्लंघन केलेल्या कोडसाठी विचारले. AI ने कोड लिहिला ज्याने नेहमी शून्य सवलत दिली — आणि सर्व चाचण्या हिरव्या राहिल्या कारण कोणत्याही चाचण्या वास्तविक सवलतीच्या मूल्याची पडताळणी करत नाहीत. गॅप दिसला, खरा दावा जोडला गेला.
केस 3 - स्तुतीचा सापळा. एका कनिष्ठ परीक्षकाने AI ला विचारले, "माझ्या चाचण्या चांगल्या आहेत का?" आणि "खूप सर्वसमावेशक" असे उत्तर ऐकून दिलासा मिळाला. त्याच्या वरिष्ठ सहकाऱ्याने "चाचणी गुणवत्ता ऑडिट" टेम्पलेट वापरून त्याच चाचण्यांचे ऑडिट केले होते; असे निष्पन्न झाले की 20 पैकी 12 चाचण्या सजावटीच्या होत्या (असा दावा किंवा जंकशिवाय). योग्य प्रश्नाने योग्य उत्तर दिले.
सामान्य चुका
- गुणवत्तेला वाव मिळणे. उच्च पंक्ती कव्हरेजवर अवलंबून राहणे आणि उत्परिवर्तन स्कोअर अजिबात न पाहणे.
- AI च्या स्तुतीवर विश्वास ठेवणे. "तुमच्या चाचण्या चांगल्या आहेत का?" आणि सकारात्मक उत्तराला आश्वासन म्हणून विचारात घ्या.
- कोडमधून अपेक्षित मूल्य प्राप्त करणे. दोषपूर्ण कोडची पुष्टी करणाऱ्या स्वयं-सत्यापन चाचण्या.
- क्षुल्लक विधानांवर समाधानी राहा. वास्तविक नियम प्रमाणित न करणारे धनादेश, जसे की "शून्य नाही", "200 परत आले".
- जिवंत उत्परिवर्तनांकडे दुर्लक्ष करणे. फेरफार अहवालात काय पकडले गेले नाही याकडे दुर्लक्ष केले.
- गंभीर कोड व्यक्तिचलितपणे बदलण्याचा प्रयत्न देखील करत नाही. साधन उपलब्ध नसल्यास "ब्रेक द कोड आणि टेस्ट" पायरी वगळणे.
सारांशात
स्यूडो-ट्रस्ट असा विश्वास आहे की सॉफ्टवेअर बरोबर आहे कारण चाचण्या हिरव्या आहेत; तर चाचण्या कशाचीही पुष्टी करू शकत नाहीत. हे मोजण्यासाठी सुवर्ण मानक म्हणजे उत्परिवर्तन चाचणी: मुद्दाम कोड तोडणे आणि चाचण्यांनी ते पकडले की नाही हे मोजणे. म्युटेशन स्कोअर हे टक्केवारीच्या कव्हरेजपेक्षा गुणवत्तेचे अधिक प्रामाणिक उपाय आहे. AI दोन्ही छद्म-विश्वास निर्माण करते आणि त्याचा शोध घेण्यासाठी एक शक्तिशाली रेड टीम बनते — “या चाचण्या उत्तीर्ण करणारा बग तयार करा” असे विचारा. तुमच्या चाचण्या तपासा: खरा दावा, स्वतंत्र अपेक्षित मूल्य, व्यवसाय नियम प्रमाणीकरण, आणि उत्परिवर्तन नष्ट केले.
अर्ज कार्य
तुमच्या स्वतःच्या प्रोजेक्टमधून व्यवसाय नियम आणि त्याच्या चाचण्या असलेले फंक्शन इंपोर्ट करा. शक्य असल्यास, उत्परिवर्तन साधन (स्ट्रायकर/पिटेस्ट/मटमट) चालवा आणि उत्परिवर्तन स्कोअर मोजा; कोणतेही साधन नसल्यास, "मॅन्युअल उत्परिवर्तन नियंत्रण" टेम्प्लेटसह किमान 8 उत्परिवर्तन तयार करा आणि ते व्यक्तिचलितपणे वापरून पहा. प्रत्येक जिवंत उत्परिवर्तनासाठी, "किल सर्व्हायव्हिंग म्यूटेशन" टेम्पलेटसह एक नवीन चाचणी लिहा. शेवटी, “रेड टीम” पॅटर्नसह, एआय तुमच्या चाचण्यांना मूर्ख बनवणारा कोड तयार करू शकतो का ते पहा. तुमचा प्रारंभिक आणि शेवटचा उत्परिवर्तन स्कोअर (किंवा पकडलेला/एकूण उत्परिवर्तन दर) नोंदवा.
चेकलिस्ट
- [ ] मी चाचणी गुणवत्तेचे मूल्यमापन उत्परिवर्तन स्कोअरद्वारे केले, कव्हरेजद्वारे नाही.
- [ ] मी गंभीर कोडसाठी उत्परिवर्तन चाचणी (एकतर साधनाद्वारे किंवा व्यक्तिचलितपणे) चालवली.
- मी प्रत्येक जिवंत उत्परिवर्तनासाठी नवीन चाचण्या लिहिल्या.
- मी रेड टीम म्हणून AI चा वापर केला आणि माझ्या चाचण्यांमधील त्रुटी शोधल्या.
- [ ] मी AI चे "तुमच्या चाचण्या चांगल्या आहेत" ची प्रशंसा आश्वासन म्हणून घेतली नाही.
- [ ] मी तपासले की प्रत्येक चाचणी वास्तविक दावा, स्वतंत्र अपेक्षित मूल्य आणि व्यवसाय नियम सत्यापित करते.