Пайдалар:
- Псевдо-ишенимдин үч жүзүн таануу (таянбаган, өзүн-өзү ырастоо, арзыбаган ырастоо) жана антидотторду колдонуу
- Мутация тестин жана мутация упайын шайман же кол менен камтууга караганда сапаттын так өлчөгү катары колдонуу мүмкүнчүлүгү
- AIны сыноого каршы кызыл команда катары жайгаштыруу жана мактоо тузагына түшпөстөн, жылчыктарды текшерүү үчүн аңчылык кылуу мүмкүнчүлүгү
Бул модулдун өзөгүндө кайталануучу эскертүү бар: жашыл жаркыраган сыноо панели сапаттын далили эмес. Эгерде сиздин тесттериңиз сизге ишеним көрсөтсө, анда ал ишеним чынбы же жасалмабы билишиңиз керек. Жасалма интеллект (AI) доорунда бул суроо болуп көрбөгөндөй маанилүү, анткени AI суюк, жылмакай көрүнгөн, бирок көңдөй тесттерди чыгарууга жөндөмдүү. Жалган ишеним — программалык камсыздоонун туура экенине ишенүү, анткени тесттер жашыл, ал эми чындыгында тесттер эч нерсени текшербейт — бул QA командасы үчүн эң коркунучтуу нерсе; анткени ал эч кандай ката жок экенин эмес, каталарды көрө албастыгын жашырат. Бул бөлүм бүт модулдун валидация философиясын бир дисциплинага бириктирет: тесттериңизди текшерүү.
Сыноонун сапатын өлчөөнүн алтын стандарты: мутация тести
Тест чындап коргойбу же жокпу түшүнүүнүн эң күчтүү жолу мутация тести (мутация тести – баштапкы коддо атайылап майда бурмалоолорду/мутацияларды пайда кылуучу жана тесттер бул бурмалоолорду аныктап же аныктабасын өлчөөчү ыкма). Логика жөнөкөй: эгер сиз кодду атайылап бузуп алсаңыз (+ты -га, а >ти >=ге, чындыкты жалганга жасасаңыз), жакшы тест топтому ошол коррупцияны кармап, кызылга айланат. Эгер андай болбосо, бул бузулуу аман калган мутант болуп саналат, демек, сиздин тесттериңиз бул жүрүм-турумду сактай албайт.
Мутация балл = өлтүрүлгөн мутация / жалпы мутация. 90% линияны камтыган пакеттин мутация баллы 40% болушу мүмкүн; Бул сызыктар иштеп жатканын, бирок жүрүм-туруму текшерилбегенин көрсөтүп турат. Мутация баллы пайыздык камтууга караганда сапаттын алда канча чынчыл өлчөмү болуп саналат.
Кеңеш: Автоматтык мутация куралдары бар (Java үчүн PIT/Pitest, JavaScript/TypeScript үчүн Stryker, .NET үчүн Stryker.NET, Python үчүн mutmut). Булар автоматтык түрдө жүздөгөн мутацияларды жаратып, сынашат. Эгерде сизде курал жок болсо, атүгүл кол менен жасалган "кодду сыноо" ыкмасы да маанилүү функциялар үчүн баа жеткис.
Псевдо-ишенимдин үч жүзү жана анын антидоту
Псевдо-ишеним формасы
симптом
антидот
Тастыктоосуз сыноо
Код иштейт, эч нерсе тастыкталган эмес
Ар бир сыноодо чыныгы ырастоо; мутация менен сыноо
өзүн-өзү тастыктаган тест
Күтүлгөн = коддун чыгышы
Күтүлгөн маанини өз алдынча эсептеңиз
Тривиалдуу ырастоо
"нөл эмес", "200 кайтарылды"
Бизнес эрежесин / иш жүзүндөгү натыйжаны ырастоо
Жогорку масштабдагы жаңылыштык
90% сызыктар, аз коргоо
Мутация баллын карагыла
Сыноого чыдамкайлык
"Дагы тыгылып калдым, өтүп кет"
Негизги себеп + детерминисттик тест
AI "кызыл команда" катары колдонуу
AI псевдо-ишенимди жаратып, аны издөөдө күчтүү өнөктөш боло алат. Өзүңүздүн тесттериңизге каршы AIди кызыл команда катары колдонуңуз: "бул тесттерден өткөн, бирок туура эмес кодду жазыңыз" же "бул тесттерди алдап кете турган диверсияны табыңыз" деп сураңыз. Эгерде AI сиздин тесттериңизде жылчыктарды тапса, бул жылчыктар чыныгы коркунучтар.
Абайлаңыз: AIдан "Менин тестимдин сапаты жакшыбы?" деп сурабаңыз. жана "ооба, сонун" деген жоопту кепилдик катары кабыл алыңыз. AI боорукер болууга умтулат. Анын ордуна, AIны конкреттүү тапшырмага чакырыңыз: "бул сыноолордон өткөн мүчүлүштүктөрдү чыгарыңыз." Эгер ал аны чыгара алса, анда сиздин тесттериңиз бул катаны көрө албайт.
Эквиваленттүү мутациялар жана баллдын чеги
Мутациялык тестирлөө күчтүү, бирок анын жакшы жагы бар: кээ бир мутациялар коддун жүрүм-турумун такыр өзгөртпөйт. Булар эквиваленттүү мутациялар деп аталат (эквиваленттүү мутант — бузулган код, түпнускадагыдай натыйжа берген мутация). Мисалы, эч качан колдонулбаган өзгөрмөнүн баштапкы маанисин өзгөртүү чыгарууга таасир этпейт; Эч бир сыноо муну кармай албайт жана кармабашы керек. Ошондуктан, 100% мутация баллы көп учурда иш жүзүндө мүмкүн эмес жана максат эмес. Эквиваленттүү мутацияларды кол менен тазалоо эмгекти талап кылат; Андыктан мутациянын упайын абсолюттук экзамен баллы катары эмес, “менин тесттерим чындап эле коргойбу?” деген чынчыл көрсөткүч катары окубаңыз.
Практикалык мамиле бул: бүт код базасында мутацияны текшерүүнү тынымсыз жүргүзүүнүн ордуна, аны эң жогорку тобокелдикти жана эң татаал бизнес эрежелерин камтыган модулдарда иштетиңиз. Бул модулдардагы аман калган мутацияларды бир-бирден карап чыгуу; Эгер ал чыныгы боштук болсо, тестти кошуңуз; эгерде ал эквиваленттүү мутация болсо, аны негиздөө менен белгилеңиз жана өтүңүз. AI аман калган мутациянын эквиваленттүү экендигин баалоо үчүн баштапкы скринингди жүргүзө алат; бирок акыркы чечимди коддун эмне иштээрин билген сиз кабыл алат.
Абайлаңыз: Мутацияга тестирлөө өтө кымбатка турат (бардык тиешелүү тесттер ар бир мутация үчүн кайра иштетилет). Ошентип, жалпы жана акылга сыярлык стратегия - бул ар бир бириктирүү эмес, аны жума сайын же релизге чейинки маанилүү модулдарды терең текшерүү катары пландаштыруу.
Алсыз тездик / Күчтүү тездик
Алсыз: "Тесттерим жетиштүүбү?"
Күчтүү: "Бул функция жана сыноо топтому үчүн кызыл команда катары аракеттениңиз. (1) Коддо өлтүрүлүшү мүмкүн болгон 8 мутацияны түзүңүз (оператордун алмаштыруусу, чек аранын жылышы, шарттын инверсиясы, маанини кайтаруу). (2) Ар бир мутация үчүн учурдагы сыноолордун кайсынысы аны кармай турганын жана кайсынысы ЭМЕС экенин көрсөтүңүз. (3) Ар бир аман калган мутация үчүн, эгер сиз аны өлтүрө турган жаңы сыноону көрсөтө турган жаңы мисал жазыңыз4) бул сыноолордун бардыгы, бирок Code+tests эрежесин бузат: [паста]".
Күчтүү тездик; Ал AIны мактоо машинасы эмес, сынактан өтүүчү экзамен катары көрсөтөт.
Көчүрүү үчүн төрт шаблон
1) Мутацияны кол менен башкаруу:
Бул код үчүн 8 маанилүү мутацияларды (майда атайылап бузуулар) жаратыңыз: арифметикалык операторду алмаштыруу, салыштыруу чеги (> vs >=), логикалык инверсия, кайтаруу/туруктуу алмаштыруу, шартты өткөрүп жиберүү. Ар бир мутация үчүн колдо болгон тесттердин кайсынысы аны кармай турганын же кармабай турганын алдын ала айтыңыз. Код+тесттер: [чаптоо]
2) аман калган мутацияны өлтүрүү:
Төмөнкү мутация сынагы отчетто аман калган (кармалган) мутациялар камтылган: [тизме/отчет]. Ар бири үчүн ошол мутацияны жок кыла турган минималдуу тест жазыңыз (код ушундай жол менен бузулганда кызыл болуп калат). Сыноо кандай жүрүм-турумду ырастайт деп комментарий бериңиз.
3) Кызыл топ - кан анализи:
Төмөнкү сыноолордун БААРЫН ӨТКӨН, бирок төмөнкү бизнес эрежесин бузган код жаза аласызбы: [бизнес эрежеси]. Эгер ошондой болсо, бул сыноолордогу кайсы жылчык буга жол берет? Ошол кемчиликти жаба турган тестти кошуңуз. Тесттер: [чаптоо]
4) Сынактын сапатын текшерүү:
Сапаты үчүн бул сыноо топтомун текшериңиз. Ар бир тестке белги коюңуз:- Чыныгы ырастоо барбы же ал реквизиттерби?- Күтүлгөн маани көз карандысызбы, коддон алынганбы?- Бул бизнес эрежесин ырастайбы же кандайдыр бир маанилүү нерсеби? Акырында болжолдуу "чыныгы ырастоо упайын" жана эң начар 3 тестти бериңиз. Тесттер: [чаптоо]
үч мини учурлар
1-жагдай — Камтуу 92%, мутация баллы 38%. Бир команда жогорку чагылдырууга таянган. Мутация тести Страйкер менен жүргүзүлгөндө, балл 38% түздү: пайда болгон мутациялардын көбү аман калган. Бул тесттер сызыктарды иштетпей жатканын жана жүрүм-турумун текшергендигинин далили болгон. Команда сапатты текшерүүгө үч жума жумшады; Мутация баллы 81% га жогорулады жана кийинки чыгарылышта бул күчөтүлгөн тесттер эки реалдуу эсептөө катасын байкады.
2-жагдай - AI тестти алдады. "Кызыл команда" шаблоны менен эксперт AIдан учурдагы тесттерден өткөн, бирок арзандатуу эрежесин бузган кодду сурады. AI ар дайым нөлдүк арзандатууну кайтарган кодду жазды - жана бардык тесттер жашыл бойдон калды, анткени эч кандай тесттер дисконттун чыныгы маанисин текшерген эмес. Көрүнгөн боштук, чыныгы ырастоолор кошулду.
3-жагдай - Мактоо тузак. Кенже тестиер AIдан: "Менин тесттерим жакшыбы?" жана «абдан ар тараптуу» деген жоопту укканда женилдеп калды. Анын улук кесиптеши "тесттин сапаты аудити" шаблону аркылуу ошол эле тесттерди текшерген; Көрсө, 20 тесттин 12си декор (асерсиз же керексиз) экен. Туура суроо туура жоопту алып келди.
Жалпы каталар
- Сапаттын чөйрөсү туура эмес. Жогорку катар камтууга таянуу жана мутация упайына таптакыр карабоо.
- AIнын мактоосуна ишенүү. "Тесттериң жакшыбы?" жана позитивдүү жоопту кепилдик катары кароо.
- Коддон күтүлгөн маанини алуу. Туура эмес кодду тастыктаган өзүн-өзү текшерүүчү тесттер.
- Болбогон ырастоолорго ыраазы болуңуз. "Нөл эмес", "200 кайтарылды" сыяктуу чыныгы эрежени ырастабаган текшерүүлөр.
- Аман калган мутацияларга көңүл бурбоо. Мутация отчетунда кармалбаган нерселерге көңүл бурбай.
- Критикалык кодду кол менен мутациялоого аракет да жок. Курал жок болсо, "кодду бузуп, сыноо" кадамын өткөрүп жиберүү.
Кыскача айтканда
Pseudo-trust программалык камсыздоону туура деп эсептейт, анткени тесттер жашыл; ал эми тесттер эч нерсени тастыктай албайт. Муну өлчөөнүн алтын стандарты - мутация тести: кодду атайылап бузуу жана тесттер аны кармай алабы же жокпу өлчөө. Мутация баллы пайыздык камтууга караганда сапаттын алда канча чынчыл өлчөмү болуп саналат. AI псевдо-ишенимди жаратат жана аны издөөдө күчтүү кызыл командага айланат — "бул сыноолордон өткөн мүчүлүштүктөрдү чыгарыңыз" деп сураңыз. Сыноолоруңузду сынап көрүңүз: чыныгы ырастоо, көз карандысыз күтүлгөн маани, бизнес эрежелерин текшерүү жана өлтүрүлгөн мутациялар.
Колдонмо тапшырмасы
Өзүңүздүн долбооруңуздан бизнес эрежесин жана анын тесттерин камтыган функцияны импорттоо. Мүмкүн болсо, мутация куралын (Stryker/Pitest/mutmut) иштетиңиз жана мутация баллын өлчөңүз; Эгерде курал жок болсо, "мутацияны кол менен башкаруу" үлгүсү менен жок дегенде 8 мутацияны жаратып, аларды кол менен сынап көрүңүз. Ар бир аман калган мутация үчүн "тирүү калган мутацияны өлтүрүү" шаблону менен жаңы тест жазыңыз. Акыр-аягы, "кызыл команда" үлгүсү менен, AI тесттериңизди алдаган кодду чыгара аларын көрүңүз. Баштапкы жана аяктоочу мутация упайыңызды (же кармалган/жалпы мутация ылдамдыгын) кабарлаңыз.
текшерүү тизмеси
- [ ] Мен тесттин сапатын камтууга эмес, мутация упайына карап бааладым.
- [ ] Критикалык код үчүн мутацияны текшерүүнү (курал менен же кол менен) өткөрдүм.
- [ ] Ар бир аман калган мутация үчүн жаңы тесттерди жаздым.
- [ ] Мен AIды кызыл команда катары колдондум жана тесттеримде жылчыктарды издедим.
- [ ] AIнын "сыноолоруңуз жакшы" деген мактоосун ишендирүүчү катары кабыл алган жокмун.
- [ ] Мен ар бир сыноо иш жүзүндөгү ырастоону, көз карандысыз күтүлгөн маанини жана бизнес эрежесин ырастаарын текшердим.