Бірлік 6 / 12

Сынақтарды автоматтандыру және сапаны қамтамасыз ету

Табыстар:

  • AI-мен мағыналы бекітумен бірлік, интеграция және шеткі жағдай сынақтарын жасау мүмкіндігі
  • AI қолдауымен сынақ қамтуын, шекті мәндерді және теріс сценарийлерді жүйелі түрде шығару мүмкіндігі
  • Жасанды интеллект арқылы жасалған сынақтар іс жүзінде әрекетті тексеретінін және бар кодты қайталамайтынын тексеру мүмкіндігі

Тестілеу - бағдарламалық қамтамасыз етудің уәде етілгендей әрекет ететінін дәлелдейтін механизм. Жақсы сынақ жинағы өзгерістің бір нәрсені бұзатынын және инженерге сенімді әрекет ету еркіндігін беретінін бірнеше секунд ішінде айтады. AI сынақ жазудың ең жалықтыратын және ең өткізіп жіберетін бөлігін жылдамдатады: көптеген сценарийлерді, тоқтау нүктелерін және теріс жағдайларды жасайды. Бірақ бұл жерде жасырын тұзақ бар: AI кодтың болжалды әрекетін емес, ағымдағы (мүмкін қате) әрекетін тексеретін сынақтар жаза алады; немесе ол ештеңені тексермей, әрқашан өтетін бос сынақтар жасай алады. Сынақтың құндылығы оның өту-өтпеуінде емес, дұрыс нәрсені тексеріп, дұрыс емес кезде қызыл түске боялуында.

Бұл бөлімде сіз мағыналы бекітулері бар бірлік, интеграция және шеткі жағдай сынақтарын жасауды үйренесіз; сынақтың қамтуын, тоқтау нүктелерін және кері сценарийлерді жүйелі түрде алу жолы; және біз AI шығаратын сынақтардың мінез-құлықты растайтынын қалай тексеруге болатынын көреміз.

Тұжырымдамалар: Бірліктерді тестілеу: Бір функцияны/сыныпты оқшаулап тексереді. Интеграциялық тестілеу: бірнеше бөліктердің бірге дұрыс жұмыс істейтінін тексеру. Assert: Нәтиженің күтілгенге тең екендігін тексеретін мәлімдеме; Бұл сынақтың жүрегі. Қамту: кодтың қанша бөлігі сынақтармен орындалады; Жоғары қамту сапаға кепілдік бермейді.

Маңызды тесттер шығару

Жақсы сынақ үш нәрсені анық жасайды: ол күйді белгілейді, әрекетті орындайды, нәтижені бекітеді. Жасанды интеллектке сынақтарды басып шығарған кезде, қандай әрекетті тексергіңіз келетінін және ол қандай сценарийлерді қамтуы керектігін көрсетіңіз; Әйтпесе, ол әрқашан өтетін үстірт сынақтарды шығарады.

  1. Тексерілетін мінез-құлықты анықтаңыз. «Не дұрыс деп саналады?» Сұраққа нақты жауап беріңіз.
  2. Сценарий түрлерін сұраңыз. Қалыпты, шекті, теріс, қателік шарты.
  3. Маңызды бекітуді импорттау. Ол жай ғана «қате жіберіп қойған жоқ», «дұрыс мәнді қайтарды».
  4. Тесттің дәлдігін тексеріңіз. Кодты саналы түрде бұзған кезде сынақ қызыл түске айналады ма?

Кешенді сынақты құру нұсқауы: "Келесі"жеңілдік (сома, купон) қолдану" функциясына арналған бірлік сынақтарын жазыңыз. Келесі санаттарда КЕМІ бір сценарийге ие болыңыз: (1) қалыпты жарамды купон, (2) тоқтау нүктелері (0 сома, 100% жеңілдік), (3) теріс (жарамсыз купон, күтілетін қате сомасы (CONC) (TENU4)). әрбір сынақта (тек «жұмыс істеді» емес, оқылатын сынақтарды атаңыз: [код]».

Шектік мәнді шығаруға шақыру: "Осы функцияның кірістері үшін шекаралық мән талдауын орындаңыз. Әрбір параметр үшін 'шектегі', 'шекараның дәл астында', 'шекараның дәл үстінде' мәндерін кесте ретінде шығарып алыңыз. Содан кейін осы шекараларды қамтитын сынақ сценарийлерін тізіңіз. Әлі кодты жазбаңыз: жай ғана скрипттік талдау және скрипттік талдау]."

Ескерту: Сынақтың жоғары қамтылуы (мысалы, 90%) кодтың дұрыс екенін дәлелдемейді. Қамту қанша жол орындалғанын өлшейді; бұл сызықтар дұрыс нәтиже береді емес. Маңызды бекітусіз сынақ қамтуды арттырады, бірақ ештеңеге кепілдік бермейді. Бекіту мазмұны бекітулердің санын емес, сапасын анықтайды.

Тесттің өзін тексеру: Мутация логикасы

Жасанды интеллект тесті шынымен жұмыс істейтінін түсінудің ең практикалық жолы - кодты әдейі бұзу (мутацияны тексеру логикасы). Шартты кері айналдырыңыз, + белгісін қойыңыз -; Ешбір сынақ қызыл түске айналмаса, сіздің сынақтарыңыз іс жүзінде бұл әрекетті сақтамайды.

Сынақ осалдықтарын іздеу сұрауы: "Келесі сынақтар осы кодтағы қандай ықтимал қателерді ТҰҚЫП АЛМАЙТЫНЫН айтыңыз. Кодқа жасалуы мүмкін 5 шағын мутация ұсыныңыз (мысалы, > орнына >=, + орнына) және әрқайсысы үшін бар сынақтар оны ұстай алатынын көрсетіңіз. Ұсталмағандар үшін қосу керек сынақты ұсыныңыз. Сынақ коды: [код]"

Әлсіз шақыру / Күшті шақыру

ƏЛСІЗ: "Осы функцияға сынақ жазыңыз." (Нәтиже: әдетте бір бақытты сценарий, әлсіз бекіту; қателерді өткізіп жібереді.) КҮШТІ: "Осы 'passwordStrong' функциясына сынақ жазыңыз. Ереже: кемінде 8 таңба, 1 бас әріп, 1 цифр қажет. Келесі сценарийлерді БӨЛЕК сынақтар ретінде жабыңыз: дәл 8 таңба (шектеу), 7 таңбадан жоғары, әріп жоқ, үлкен әріп жоқ. бос жол, тек бос орындар, тым ұзын (1000 таңба) Әрбір сынақта күтілетін ақиқат/жалған мәнді нақты бекітіңіз және тексеретін нәрсеге сәйкес сынақты атаңыз."

Күшті шақыру ережелер мен толық шекаралық сценарийлерді береді. «Дәл 8/7 таңба» сияқты шекаралық жұптар қате жіберудің ең жиі кездесетін жерлері болып табылады (> = дегенмен шатастырады). Әлсіз шақыру бұл шекараларды айналып өтіп, қатені өндіріске жеткізеді.

Сынақ түрлері және қайда қолдануға болады

Тест түрі

Ол нені растайды?

AI үлесі

Назар аударыңыз

бірлік

Бір функция/сынып

Көп сценарийлерді жылдам жасайды

Мағыналы бекіту қажет

интеграция

Бөлшектер бірге жұмыс істейді

Сценарий және жалған деректер жобасы

Нағыз тәуелді мінез-құлық

аяқтау/қабылдау

Толық пайдаланушы ағыны

Қадамдар тізімі және күту

сынғыштыққа бейім

регрессия

Ескі қате қайтарылмайды

Ақаулық спецификалық сынақ

Әрбір түзетуге қосылуы керек

Шағын корпустар

1-жағдай - Әрқашан өтетін сынақ. AI функцияға 12 сынақ жазады және олардың барлығы өтеді. Инженер күдікті болып, функцияның қайтарылатын мәнін әдейі бұрмалайды; Тек 3 сынақ қызылға айналады. Қалған 9 сынақта маңызды бекітулер жоқ. Тестілеу мутациялы аңшылық арқылы күшейтіледі; нақты қорғаныс 9 сценарийде алынады.

2-жағдай — шекаралық қате. Жасты растау функциясы "18 және одан жоғары жарамды" деп айтуы керек, бірақ >18 деп жазылған, яғни 18 жас қабылданбайды. Қате тестілеу кезінде бірден пайда болады, себебі AI тоқтау нүктесін талдау арқылы «дәл 18» сценарийін жасайды. Бір шекті сынақ кез келген нақты пайдаланушы шағымдарын болдырмайды.

3-жағдай — Ағымдағы әрекетті түзету. AI-ға «осы кодқа негізделген сынақ жазу» деп айтылғанда, ол кодта бұрыннан бар дөңгелектеу қатесін «дұрыс» деп қабылдайтын сынақ жасайды. Инженер сынақты кодқа емес, талапқа (күтілетін дұрыс мән) сәйкес басып шығарса, сынақ қызылға айналады және нақты қате орын алады. Тесттер кодтан емес, күтуден алынуы керек.

Жалпы қателер

  • Мәнсіз бекіту. «Қате жібермеді» жеткіліксіз; Дұрыс мән тексерілуі керек.
  • Ауқымды сапамен шатастыру. Жоғары қамту дәл нәтижелерге кепілдік бермейді.
  • Тестті код бойынша басып шығару. Ағымдағы қатені «шын» деп түзетеді; Тесттер күтуден туындауы керек.
  • Шекті мәндерді өткізіп жіберу. > дегенді >=-мен шатастыру - ең көп тараған қате; шекаралық жұптарды сынау керек.
  • Тесттің өзін тексермейді. Кодты бұзған кезде қызыл түспейтін сынақ қорғанысты қамтамасыз етпейді.

Қысқаша айтқанда

Жақсы сынақ жинағы - сенімді өзгерістер енгізудің кілті. AI тез арада көптеген сценарийлерді, шектеулерді және жағымсыз жағдайларды жасайды; Бірақ егер ол сынақтарды талаптардан гөрі кодтан шығарса, ол бар қателерді түзете алады немесе әрқашан өтетін мағынасыз сынақтарды жаза алады. Әрбір сынақта нақты күтілетін мәнді бекітіңіз, байланыстырылған жұптарды қосыңыз және кодты әдейі бұзу арқылы сынақтарыңыз шынымен қорғайтынын тексеріңіз. Аумақтардың саны емес, бекітудің мазмұны сапаны анықтайды.

Қолданбалы тапсырма

Функцияны таңдап, оның төрт санаттағы (қалыпты, шекті, теріс, қате) сынақтарды жан-жақты генерациялау нұсқауымен жасауын қамтамасыз етіңіз; Әрбір сынақта нақты күтілетін мәнді бекітіңіз. Содан кейін сынақ осалдықтарын іздеу шақыруын іске қосыңыз, кодта 5 шағын мутацияны ұсыныңыз және олардың қайсысын ұстайтынын тексеру үшін сынақтарды орындаңыз. Ұсталмаған кем дегенде бір мутацияға жаңа сынақ қосыңыз және оның қазір қызыл түсте екенін көрсетіңіз.

бақылау парағы

  • [ ] Мен кодқа емес, күтілетін/дұрыс әрекетке негізделген сынақтарды басып шығардым.
  • [ ] Мен қалыпты, шекті, теріс және қате сценарийлерін қарастырдым.
  • [ ] Мен әрбір сынақта нақты күтілетін мәнді бекіттім.
  • [ ] Мен шекаралық жұптарды сынадым (жоғарыда/төменде ғана).
  • [ ] Кодты әдейі бұзу арқылы мен сынақтардың қызылға айналғанын растадым.
  • [ ] Мен анықталмаған мутациялар үшін жаңа сынақ қостым.