Пайдалар:
- Кабыл алуу эрежесинен көз карандысыз бирдик тесттеринде күтүлгөн маанини эсептөө аркылуу жасалма интеллекттин жаңылыштык жүрүм-турумду "туура" катары кабыл алышына жол бербөө мүмкүнчүлүгү
- AAA жана FIRST принциптерин колдонуу жана тышкы көз карандылыкты шылдыңдоо менен тез, көз карандысыз жана кайталануучу тесттерди басып чыгаруу мүмкүнчүлүгү
- Мутация менен тесттерди сыноо (кодду бузуу) жана сыноо үчүн кыйын кодду дизайн жыты катары таануу мүмкүнчүлүгү
Сыноо пирамидасынын эң чоң жана эң ылдам катмары бул бирдик тести — функцияны же коддун кичинекей бөлүгүн бардык нерседен обочолонуп текшерген тест. Миңдеген бирдик сыноолору секунданын ичинде ишке ашып, код иштеп чыгуучунун экранында турганда катаны байкайт. Жасалма интеллект (AI) бирдик тесттерин жасоодо эң чебер: сиз ага функция бересиз, AI ондогон тесттерди чыгарат. Бирок дал ушул ыңгайлуулук эң чоң тузакты жаратат: AI "жашыл түстө күйүп, бирок эч нерсени текшербеген" тесттерди оңой чыгарат же коддун учурдагы (балким, туура эмес) жүрүм-турумун "туура" деп кабыл алат. Бул бөлүмдө сиз AI менен чыныгы коргоочу бирдик тесттерин кантип жазууну жана текшерилүүчү код менен AIнын ортосундагы байланышты үйрөнөсүз.
Жакшы бирдик тестинин сапаттары: БИРИНЧИ
Жакшы бирдик тесттери БИРИНЧИ принциптерди карманышат: Тез, Көз карандысыз (тесттер бири-биринен көз каранды болбошу керек), Кайталануучу (кайталануучу — ар кандай чөйрөдө бирдей жыйынтык), Өзүн-өзү текшерүү (так өтүү/өтпөө), Өз убагында (өз убагында). AI тесттерди жасап жатканда бул принциптерди эстетип коюңуз; тесттин тышкы дүйнөгө (иш жүзүндө маалымат базасы, тармак, саат) көз каранды эместигин "көз карандысыз" жана "кайталануучу" болушун сураныңыз.
AAA үлгүсү жана экспрессивдүү ырастоо
Катуу бирдик тести AAA түзүмүн ээрчийт: Орнизациялоо (даярдоо — киргизүүлөрдү жана көз карандылыктарды орнотуу), Аткаруу (аткаруу — текшерилип жаткан функцияны чакыруу), ырастоо (текшерүү — натыйжаны күтүлгөн маани менен салыштыруу). Критикалык нерсе - ырастоо. AI эң көп кетирген катасы - бул сыналган коддун чыгышынан ырастоо - "код эмнени кайтарса, ошонун баары чындык" логикасы. Бул тестти маанисиз кылат. Туура жол - күтүлгөн маанини өз алдынча аныктоо (кабыл алуу критерийлеринен, аны кол менен эсептөө).
Көңүл буруңуз: Эгерде сиз AIга "бул функция үчүн тест жазыңыз" деп айтсаңыз, AI функцияны иштетип, анын жыйынтыгын "күтүлгөн" деп жаза алат. Функция жалган болсо да, бул сыноо өтөт. Анын ордуна, "сиз бул эрежелерге ылайык күтүлгөн натыйжаларды эсептейсиз, функциянын учурдагы натыйжасына шилтеме кылбаңыз" деп айтыңыз.
Мазактар, тактар жана көз карандылыктар
Бирдикти сыноо изоляцияны талап кылат. Эгерде сиздин функцияңыз маалымат базасына же API'ге көз каранды болсо, алар тестирлөөдө жасалма объекттер менен алмаштырылат (макка/stub — башкарылуучу, чыныгы көз карандылыкты алмаштыруучу). Бул тестти тез, көз карандысыз жана кайталануучу кылат. AI жасалма орнотууларды чыгара алат; Бирок ашыкча шылдыңдоодон сак болуңуз: эгер сиз баарын шылдыңдасаңыз, анда тест чыныгы логиканы эмес, "шылдың эмнени кайтарарын" гана текшерет. Баланс: тышкы дүйнөнү туураңыз, сыналган чыныгы логиканы аткарыңыз.
Сыноочулук жана AI
Кызыктуу пикир бар: сыноо кыйын болгон код көбүнчө начар иштелип чыккан код. Эгерде AI бир функцияга тест жазууда кыйынчылыкка дуушар болсо (өтө көп көз карандылык, жашыруун глобалдык абал, терс таасирлер), бул дизайн жыты. AIдан "бул кодду сынап көрүү үчүн кантип рефакциялайсыз" деп суроо жакшыраак тестирлөөгө жана жакшыраак кодго алып келет.
Параметрленген тесттер жана маалыматтардын ар түрдүүлүгү
Бир эле эрежени ар кандай киргизүү менен текшерүү үчүн ар бир жолу өзүнчө тест жазуу түйшүктүү жана сактоо кыйын. Параметрлештирилген тестирлөө — киргизүүлөрдүн жана күтүлгөн натыйжалардын тизмесинде бир эле тест логикасын кайра-кайра иштеткен структура бул кайталанууну жокко чыгарат: бир сыноо органы ондогон киргизүү жуптары менен азыктанат. Кабыл алуу эрежелерин бергениңизде, AI бул киргизүү-күтүлгөн жыйынтык таблицаларын түзүүдө абдан натыйжалуу; Атап айтканда, ал системалуу түрдө чектүү маанилерди жана эквиваленттик класстарды таблицалайт.
Бирок бул жерде да тузак бар: AI сыналуучу коддон түзүлгөн таблицада күтүлгөн натыйжаларды алууга умтулат. Бул ката параметрлештирилген тестирлөөдө дагы коркунучтуу, анткени бир эле туура эмес логика ондогон саптарды жокко чыгарат. Ошондуктан, ар дайым күтүлгөн натыйжа тилкесин кабыл алуу эрежесине ылайык өз алдынча эсептеп, жок дегенде бир нече саптарды кол менен текшериңиз. Ошондой эле "ар бир сап эмнени билдирет" сүрөттөө тилкесин сураңыз; Ошентип, бир катар үзүлгөндө, кайсы мамлекет бузулганын ошол замат көрөсүз.
Кеңеш: Параметрленген тесттик таблицага атайылап "капкан сабын" кошуңуз — башкача айтканда, натыйжаны билип туруп туура эмес жазыңыз. Эгер сиз тестти өткөрүп жатканда ал сызык кызыл болуп кетпесе, анда сиздин тестиңиз чындыгында бул жагдайды текшербейт. Бул тез жасалма текшерүү.
Алсыз тездик / Күчтүү тездик
Алсыз: "Бул функция үчүн бирдик сынагын жазыңыз."
Күчтүү: "taxCalculate(сумма, чен) функциясы үчүн [тил/алкак] бирдик сыноолорун жазыңыз. Кабыл алуу эрежеси: натыйжа = сумма * чен, 2 ондукка тегеректелет; терс сумма же чен ката кетирет; 0 болсо, 0 кайтарат. AAA түзүмүн колдонуңуз. БУЛ эрежелерге ылайык күтүлгөн маанилерди кол менен эсептеңиз; учурдагы Cover0, терс учурларга шилтеме кылбаңыз. ондукка чейин тегерете).
Күчтүү тездик; Бул кабыл алуу эрежесин, көз карандысыз күтүлгөн наркты күтүүнү, структураны жана четки учурларды берет. Ошентип, тест кодекстин күзгүсү эмес, эреженин коргоочусу болуп калат.
Бирдиктин сапатынын таблицасы
симптом
Начар тест (жалган ишеним)
жакшы сыноо
ырастоо
Эч ким же "нөл эмес"
Күтүлгөн конкреттүү маани
Күтүлгөн маани булагы
Функциянын чыгышы
Кабыл алуу эрежеси / кол менен эсептөө
көз карандылык
Иш жүзүндөгү МБ/тармак/саат
Жасалма менен изоляцияланган
четки корпус
Бир гана бактылуу жол
чек, терс, ката
Сиз кодду бузганыңызда
жашыл бойдон калууда
кызылга айланат
аты
test1, testMethod
ал тастыктаган эрежени сүрөттөйт
Көчүрүү үчүн төрт шаблон
1) Эрежеге негизделген бирдикти сыноо:
Сиздин ролуңуз: программалык камсыздоону сыноо боюнча улук инженер. Төмөнкү функция боюнча тестти [тил/алкак] менен жазыңыз: [колу].Кабыл алуу эрежелери: [эрежелер].- AAA түзүмүн колдонуңуз.- БУЛ эрежелерге ылайык күтүлгөн маанилерди кол менен эсептеңиз; Функциянын учурдагы чыгарылышына шилтеме кылбаңыз. - Чек, терс, ката жана бактылуу жолду өзүнчө тесттер менен жаап коюңуз. - Ар бир тесттин аталышы текшерген эрежени сүрөттөсүн. - сырткы көз карандылыкты шылдыңдоо; Чыныгы логиканы иштетиңиз.
2) Мутацияга туруктуулукту башкаруу:
Бул бирдик сыноолорду карап көрүңүз. Сыналып жаткан кодго мен жасай турган 5 майда оңдоолорду тизмектеп бериңиз (а - ордуна +, а >= ордуна >, чек араны жылдыруу) жана ар бири үчүн айтып бериңиз, бул сыноолордун КАЙСЫ кызылга айланат? Эгер эч ким кайтарылбаса, тест жетишсиз. Код + тесттер: [чаптоо]
3) Сыноо жөндөмдүүлүгүн текшерүү:
Бул функция үчүн бирдик сынагын жазуу эмне үчүн кыйын? Жашыруун көз карандылык, глобалдык статус, терс таасирлер, көптөгөн жоопкерчиликтер барбы? Аны сыноого мүмкүн кылуу үчүн минималдуу рефакторингди сунуштоо; жүрүм-турумун өзгөртпөгүлө. Код: [чаптоо]
4) толук эмес сценарий:
Төмөнкү функция жана жеткиликтүү тесттер берилген. Кайсы жүрүм-турум/чет ЭЧ КАЧАН текшерилбегенин тизмектеңиз (кошумча боштук) жана ар бири үчүн тестти кошуңуз. Функция+тесттер: [жабыштыруу]
үч мини учурлар
1-жагдай - Кодду чагылдырууну сыноо. Иштеп чыгуучу AI тегеректөө функциясы үчүн тест жазган; 10 тест жашыл болду. Чынында, функция туура эмес багытта тегеректелген, бирок AI функциянын чыгышынан күтүлгөн маанилерди алган, ошондуктан тесттер катаны "чындык" деп эсептешкен. Күтүлгөн маанилер "эрежеге негизделген" шаблон менен кол менен эсептелгенде, 4 тест кызылга айланып, чыныгы ката аныкталган.
2-жагдай — Мутацияны башкаруунун мааниси. Бир команда 45 бирдик сынагына таянган. "Мутациянын бекемдигин текшерүү" менен кодду 20 майда өзгөртүүгө аракет кылды; тесттер алардын 11ин гана кармады. Калган 9 үзгүлтүккө үнсүз өттү. Команда начар тесттерди күчөттү; Чыныгы эсептөө катасы кийинки чыгарылышта бул өркүндөтүлгөн тесттер тарабынан байкалды.
3-жагдай - Текшерилбестик - бул дизайн жыты. AI буйрутма функциясы үчүн тесттерди жаза алган жок, ага дайыма чыныгы маалымат базасы керек болчу. "Сыноо жөндөмдүүлүгүн карап чыгуу" шаблону функциянын маалымат базасына кирүү мүмкүнчүлүгүн камтыганын көрсөттү. Көз карандылык инъекциясы алынып салынганда, тесттер жазылып, код тазараак болуп калды.
Жалпы каталар
- Коддон күтүлгөн маанини алуу. AI функциянын чыгышын "туура" деп кабыл алат; ката кодду тастыктаган сыноо.
- Тастыктоосуз же арзыбаган ырастоо менен сынаңыз. "Ката таштаган жок, өтүп кетти" логикасы; Бул эч нерсени тастыктабайт.
- Экстремалдуу шылдың. Баарын шылдыңдоо жана шылдың кайтарганды гана сынап көрүү; чыныгы логика текшерилбейт.
- Жөн гана бактылуу жол. Чектөө, терс жана ката абалдарын айланып өтүү.
- Кодду бузуу менен сыноо эмес. Мутацияны текшербестен жашылга ишенүү.
- Сыналбастыкка көңүл бурбоо. Катуу тестирлөөнүн ордуна жаман дизайнды таанып, оңдоо.
Кыскача айтканда
Биримдик тесттер тестирлөө пирамидасынын эң ылдам жана эң чоң катмары болуп саналат; Ал катаны эң арзан учурда кармап калат. AI бирдик тесттерин жасоого абдан жөндөмдүү, бирок анын эң чоң тузакы - коддун өзүнөн күтүлгөн маанини алуу менен туура эмес жүрүм-турумду "туура" деп эсептеген тесттерди жазуу. Чечим: кабыл алуу эрежелерин бериңиз, күтүлгөн маанилерди кол менен эсептеп алыңыз, AAA жана FIRST принциптерин аткарыңыз, тышкы дүйнөнү шылдыңдаңыз жана чыныгы логиканы иштетиңиз жана ар бир тестти мутация менен сынап көрүңүз (кодду бузуу). Текшерүү кыйын болгон код - бул оңдоону талап кылган дизайн белгиси.
Колдонмо тапшырмасы
Өзүңүздүн долбооруңуздан бизнес эрежесин камтыган функцияны тандаңыз. Кабыл алуу эрежелерин жазыңыз жана AI тесттерин "эрежеге негизделген тестирлөө" үлгүсү менен жазыңыз; Күтүлгөн маанилерди кол менен эсептеңиз. Андан кийин "мутациянын бекемдигин текшерүүнү" колдонуңуз: коддо жок дегенде 5 кичинекей тыныгуу жасап, канча тесттин кызылга айланып кеткенин өлчөңүз. Кармалган коррупция үчүн жаңы тестти кошуңуз. Канча үзгүлтүккө учурагандыгын кабарлаңыз (мисалы, мутация баллы).
текшерүү тизмеси
- [ ] Мен кабыл алуу эрежелерин бердим жана күтүлгөн маанилерди кол менен эсептеп чыктым.
- [ ] Мен тесттер коддон күтүлгөн мааниге ээ эмес экенине ынандым.
- [ ] Мен AAA жана FIRST көрсөтмөлөрүнө ылайык көз карандысыз тестирлөөнү түздүм.
- [ ] Мен тышкы көз карандылыктарды шылдыңдап, чыныгы логиканы иштеттим.
- [ ] Мен чектөө, терс жана ката учурларын камтыдым.
- [ ] Кодду бузуу менен (мутация) мен тесттер чындап эле коргой турганын далилдедим.