Табыстар:
- AI көмегімен бірліктерді сынауды, шеткі жағдайларды және қамту аралығын талдауды жасау мүмкіндігі
- Кодтың ағымдағы әрекетіне емес, спецификацияға негізделген сынақ күтулерін басып шығару мүмкіндігі
- Қателерді енгізу арқылы сынақ шынымен қорғайтынын тексеру мүмкіндігі
Тесттерді жазу - көптеген әзірлеушілер кейінге қалдыратын ең құнды тапсырмалардың бірі. Жақсы сынақ жинағы кодтың күткендей жұмыс істейтінінің дәлелі және болашақ өзгерістер үшін өмірлік желі. Мәселе мынада, жазу тестілері қайталанатын және көп уақытты талап етеді — AI жарқырайтын жұмыс түрі. Бірақ бір нәрсе бар: AI жиі кодтың әрекетін емес, бар әрекетін тексереді. Бұл айырмашылықты басқару - бұл бөлімшенің мәні.
Бұл бөлімде сіз бірлікті тестілеуді (функцияны оқшаулап сынайтын тестілеу), шеткі жағдай сынақтарын және AI көмегімен сынақ деректерін жасауды үйренесіз; сынақтарды қамтудағы олқылықтарды жабу; және AI сынақтарына соқыр сену неге қауіпті.
Тестілеудің екі жағы: мінез-құлықты түзету және тексеру
Сынақ екі түрлі мақсатқа қызмет етуі мүмкін. Біріншісі - тексеру: ол кодтың дұрыстығын, оның спецификацияға сәйкестігін тексереді. Екіншісі - регрессиядан қорғау: ол бүгін кодтың әрекетін тоқтатады, сондықтан ертең біреу оны кездейсоқ өзгертсе, сынақ бұзылып, хабарлайды.
Соңғысында AI өте жақсы; Ол кодты қарайды және «дәл қазір не істеп жатқанын» тексеретін жағдайларды жасайды. Бірақ егер код басынан дұрыс емес болса, AI бұл дұрыс емес әрекетті «дұрыс» деп белгілей алады. Сондықтан сіз AI шығаратын әрбір сынақтың бекітуін қарап шығуыңыз керек: «Код 42 қайтарады және сынақ 42 күтеді» 42 дұрыс жауап дегенді білдірмейді.
Ескерту: AI сынақтан өтсе, бұл код «жұмыс істейді» дегенді білдірмейді; бұл жай ғана «ол AI күткендей әрекет етеді» дегенді білдіреді. Сіз спецификацияға қарап күтудің дұрыс немесе дұрыс еместігін шешесіз.
Қадам бойынша: AI көмегімен сенімді сынақтарды жазу
- Тек кодты емес, спецификацияны беріңіз. Егер сіз «Бұл функция мұны істеуі керек» деген ақпаратты қоссаңыз, AI дұрыс күтуді жаза алады; Тек кодты берсеңіз, ол ағымдағы әрекетті тексереді.
- Шеткі істерді сұраңыз. Бос, нөл, нөл, теріс, тым үлкен, нашар пішім, параллельділік — бақытты жолды анық талап етіңіз.
- Сынақ құрылымы мен стилін көрсетіңіз. «pytest пайдаланыңыз», «Реттеу-әрекет ету-бекіту үлгісі», «әр сынақ бір нәрсені сынауға мүмкіндік беріңіз» т.б.
- Күтуді тексеру (бекіту). Әрбір бекіту дұрыс мәнді тексеретін спецификациямен салыстырыңыз.
- Ауқымдағы бос орындарды жабыңыз. Қолданыстағы сынақтарды беріңіз және «қай филиалдар мен істер тексерілмеген?» Деп сұраңыз. сұраңыз; содан кейін жасалған қосымша сынақтарды тексеріңіз.
Үш шағын корпус
1-жағдай — Қамту 52%-дан 85%-ға дейін. Бір сервистік модуль бойынша тестілеумен қамту 52% құрады. Команда бар сынақтарды AI-ға берді, оған тексерілмеген филиалдардың тізімін берді және олар үшін сынақтар жасады. Адамның қарауымен қамту 85%-ға дейін өсті; Процесс барысында AI бұрын ешқашан тексерілмеген қате тармағында нақты қатені (қате қате кодын қайтаратын жол) ашты.
2-жағдай - жалған күтуді бекіту тұзағы. Ақшаны дөңгелектеу функциясы қате болды; 2,675-тен 2,67-ге дейін дөңгелектеудің орнына ол 2,68 орнына 2,67-ге дөңгелектенді. AI кодты қарап, assert round_money(2.675) == 2.67 деп жазды — қатені «шын» деп бекітті. Әзірлеуші спецификацияны оқығанда, ол күтуді түзетіп, нақты қатені ұстады. Кодты емес, ережені сынау айырмашылықты жасады.
3-жағдай — Жиек күйінің жарылысы. AI-дан күн диапазоны функциясы үшін тек «шеттік жағдайларды» сұрағанда; Ол басталу=соңы, кері интервал, кібісе жыл 29 ақпан, әртүрлі уақыт белдеулері және нөлдік интервал сияқты 8 жағдайды шығарды. Олардың екеуі (кері аралық және кібісе жыл) қатені тудырды. Бұл жағдайларды қолмен қарау жиі өткізілмейді; Бұл жерде AI «ми шабуылының» серіктесі болды.
Көшірілетін төрт үлгі
Техникалық сипаттамаларға негізделген сынақ генерациясы:
Рөл: тесттерді жазатын әзірлеуші. Framework: {{pytest/JUnit/Jest...}}. Функция не істеуі керек (спецификация): {{ ереже}}Келесі функция үшін сынақтарды жазыңыз. Күтулерді кодтың ағымдағы шығысына ЕМЕС, спецификацияға сәйкес жазыңыз. Бақытты жол + кем дегенде 4 шеткі жағдайды қосыңыз. Әрбір сынақ бір нәрсені сынап көрсін, сипаттама атауын пайдаланыңыз. {{функция}}
Жиынтық жағдайдың ми шабуылы:
Осы функцияны сынау кезінде сыналу керек шеткі/сәтсіздік жағдайларын тізімдеңіз (нөл, нөл, тоқтау нүктелері, қате пішім, параллельдік, сыртқы қате). Әрбір жағдай үшін: енгізу, күтілетін әрекет. Әлі кодты ЖАЗБАҢЫЗ, жай ғана тізімдеңіз.{{функция}}
Қамту алшақтығын талдау:
Төменде функциялар мен қолжетімді сынақтар берілген. Қандай филиалдар, шарттар мен жағдайлар тексерілмеген? Кемшіліктерді тізімдеңіз және тек кемшіліктерге жаңа сынақтар жазыңыз. Бұрыннан барларын қайталамаңыз. Функция:{{функция}}Тесттер:{{existing_tests}}
Сынақ деректері / жалған нысанды құру:
{{функция/қызмет}} сынақтары үшін нақты сынақ деректерін жасаңыз: жарамды үлгілер, шекара үлгілері және жарамсыз үлгілер бөлек. Сыртқы тәуелділік {{X}} үшін қарапайым жалған әрекетті ұсыныңыз. Шынайы құпия деректерді/PII пайдалану; Жалған деректерді жасаңыз.
Әлсіз шақыру / Күшті шақыру
Әлсіз: «Осы функция үшін сынақ жазыңыз.»
Күшті: "pytest-пен. apply_discount(жалпы, пайыз) функциясы: жеңілдік 0%–30% болуы керек, шектен тыс ValueError шығаруы керек, нәтиже 2 ондық таңбаға дейін дөңгелектенуі керек. Күтулерді осы ЕРЕЖЕ бойынша жазыңыз (код бойынша емес). Бақытты жол + мына шет жағдайлары: 0%, 30% (жалпы, пайыз) [3, 1% теріс (жалпы, 0.co), 30%, .
Ол күшті босату ережесін береді және «күтуді кодқа емес, ережеге сәйкес жаз» дейді; Бұл жалғыз сөйлем AI қате әрекетін түзететін тұзақты жабады.
Тест түрі
AI үлесі
адам бақылауы
Бақытты жол бірлік сынағы
жылдам қаңқа
Күту дұрыс па?
Шеткі істер
Кең ауқымды ми шабуылы
Маңызды емес нәрсені жойыңыз
Қолданыстағы бос орындарды толтыру
Өткізілген бұтақтарды табады
Маңыздылығын растау
Сынақ деректері/мысқыл
Нақты үлгіні шығарады
PII жоқ, реализмді бақылау
Сынақтар сапаны басқарады, оған кепілдік бермейді
Сынақтың жоғары қамтылуы сенімділік береді, бірақ ол жаңылыстыруы да мүмкін: 100 пайыз қамту «әр жол дұрыс» емес, «әр жол орындалды» дегенді білдіреді. AI көмегімен қамтуды арттыру оңай; Нақты құндылық - мағыналы үміттерді жазу. Сынақтың құндылығы - код бұзылған кезде оны бұзу және ескерту мүмкіндігі. Сондықтан AI жасаған сынақтар «код өзгерген кезде шынымен бұзылады ма?» деген сұраққа негізделген. Оны сұрақ арқылы тексеру; Әдейі сызықты бұзу және сынақ үзілісін көру (мутация идеясы) сынақ жұмыс істегенінің дәлелі.
Кеңес: AI жазатын сынақтың жұмыс істейтінін көру үшін кодта шағын қате жасаңыз (мысалы, + белгісін -ге өзгерту) және сынақ бұзылғанын тексеріңіз. Егер ол бұзылмаса, бұл сынақ сізді қорғамайды.
Жалпы қателер
- Ережені бермей, тест сұрау. Модель ағымдағы әрекетті тоқтатады; қатені «шын» деп түзетеді.
- Үміттерді оқымай-ақ қабылдау. Бекітулердің дұрыс мәнді тексеріп жатқанын тексермесеңіз, тестілеу жаңылыстыру болып табылады.
- Тек бақытты жолды сынау. Нағыз қателер шеттерде өмір сүреді; Edge жағдайларын нақты сұраңыз.
- Мақсатқа байланысты аумақты қателесу. Жоғары пайыз дұрыс мінез-құлықтың кепілі емес.
- Нақты/жасырын деректерді сынақ деректері ретінде жасау. Тұтынушы деректері немесе құпиялары тестілеуге және сақтауға кірмеуі керек; Синтетикалық мәліметтерді жасаңыз.
Қысқаша айтқанда
AI жазба сынақтарынан қайталанатын ауыртпалықтың көп бөлігін алады: ол жылдам қаңқаларды, шеткі істердің үлкен тізімдерін және қамту аралығының талдауларын шығарады. Бірақ ең маңызды сәт - күту: AI кодтың ағымдағы әрекетін сынауға бейім, ал тестілеу спецификацияға сәйкес жазылуы керек. Ережені беріңіз, күтулерді тексеріңіз, шеткі жағдайларды орындаңыз және қатені енгізу арқылы сынақтардың шынымен қорғайтынын тексеріңіз. Тестпен қамту - мақсат емес, құрал.
Қолданбалы тапсырма
Функцияны таңдап, алдымен оның кодын беру арқылы AI-ға сынақты басып шығарыңыз; Күтулерді ескеріңіз. Содан кейін сол функция үшін сипаттаманы (қажетті мінез-құлық) бере отырып, сынақты қайта басып шығарыңыз. Екі сынақ жинағының күтулерін салыстырыңыз: айырмашылығы бар ма, қайсысы нақты қатені ашады? Соңында, кодқа әдейі қате қосу және сынақ үзілісін көру арқылы жасалған сынақтардың бірі жұмыс істегенін тексеріңіз.
бақылау парағы
- [ ] Мен сынақ мінез-құлықты түзету немесе тексеру үшін екенін ажыратамын.
- [ ] Мен сынақ сұраған кезде кодты емес, орнында болуы керек ережені (спецификацияны) беремін.
- [ ] Әрбір жасалған бекітуді спецификациямен салыстырамын.
- [ ] Мен шеткі және сәтсіздік жағдайларын нақты сұраймын.
- [ ] Мен пайыздық қамтуды мақсат емес, құрал ретінде қарастырамын.
- [ ] Мен сынақтың қателерді енгізу арқылы шынымен қорғайтынын тексеремін.