Табыстар:
- Регрессиялық тестілеудің мақсатын түсіну және жасанды интеллектпен өзгерістерге сәйкес тесттерді таңдау және регрессия жағдайларын жасай алу
- Нәзік сынақтардың негізгі себептерін диагностикалау мүмкіндігі (уақыт, тапсырыс тәуелділігі, ортақ күй, сыртқы тәуелділік) және симптомды баспай тұрақты шешімдерді қолдану
- Қайталанатын тестілеуді жою арқылы регрессия жиынтығын жылдам, тәуелсіз және сенімді сақтай отырып, толық пакетті алдын ала шығару тәртібін сақтау мүмкіндігі
Бағдарламалық қамтамасыз ету үнемі өзгереді; Әрбір жаңа мүмкіндік, әрбір түзету бұрын жұмыс істеген нәрсені бұзуы мүмкін. Бұрынғы жұмыс істейтін функцияның кейінгі бұзылуы регрессия деп аталады. Регрессиялық тестілеу осы төмендеулерді ұстау үшін әрбір өзгертумен бар функционалдылықты қайта сынау болып табылады. Уақыт өте келе бұл сынақ жиынтықтары үлкейеді - мыңдаған сынақтар - және екі үлкен мәселе туындайды: люкс баяулайды және қабыршақты сынақтар - бір кодта кейде өтіп, кейде сәтсіздікке ұшырайтын сенімсіз сынақтар - команданың сынақ нәтижелеріне деген сенімін жояды. Жасанды интеллект (AI) регрессия жиынтығын жақсы, жылдам және сенімді ұстауға арналған қуатты көмекші болып табылады. Бірақ орталық ескерту қалады: AI нәзік сынақтан «өткізуді» ұсынуы мүмкін болса да, ол көбінесе нақты қатені жабатын патч жасай алады. Сіздің міндетіңіз - симптомды басу емес, тұрақсыздықтың негізгі себебін табу.
Нәзік сынақтардың негізгі себептері
Нәзіктік тестілеу - бұл тестілеудің ең жасырын мәселесі: оның өтуі немесе сәтсіздікке ұшырауы сенімсіз, команданы «қайтадан кептеліп қалған болуы керек, оны қайта іске қосыңыз» әдетіне итермелейді — және бұл әдет бір күні нағыз қатені «қабыршақ» деп елемейді. Негізгі себептер:
- Уақыт/жарыс шарты: сынақ операцияның аяқталуын күтпестен нәтижені тексереді. Ең көп таралған себеп.
- Тәртіп тәуелділігі: Тесттер бір-бірінен қалған деректерге тәуелді; Тапсырыс өзгерген кезде ол бұзылады.
- Ортақ жағдай: Бірнеше сынақтар бір сынақ деректерін/пайдаланушыны пайдаланады, қайшы келеді.
- Сыртқы тәуелділік: Нақты желі, үшінші тарап қызметі, жүйе уақыты, кездейсоқ мән.
- Қоршаған ортаның айырмашылығы: жергілікті күйге ауысады, CI (үздіксіз интеграциялық орта) ішінде қалады.
Абайлаңыз: «бірнеше рет қайталап көру» арқылы нәзік сынақтан өту жиі нақты параллельдік қатені жасырады. Қайталау - емдеу емес, диагностикалық құрал. Алдымен түпкі себебін табыңыз; Тек құжатталған, шын мәнінде сыртқы тұрақсыздық үшін соңғы шара ретінде қайта әрекетті пайдаланыңыз.
Сынақ күтімі: пакетті сау ұстау
Регрессиялық топ бақшаға ұқсайды; Егер күтім жасалмаса, арамшөптер басып алады. AI үш техникалық қызмет көрсету тапсырмасына көмектеседі:
1. Қайталанатын/қажетсіз сынақ тазалау. Уақыт өте келе көптеген жағдайлар бірдей нәрсені сынау үшін жинақталады. AI ұқсас сынақтарды топтастыруды және біріктіруді ұсынады.
2. Нәзік тест диагностикасы. Сіз AI-ға сынақ кодын және тұрақсыздық үлгісін бересіз; мүмкін түпкі себептері мен тұрақты шешімін ұсынады.
3. Тест таңдау/артықшылық. Әрбір өзгертумен бүкіл пакетті іске қосу қымбатқа түседі. Сынақ әсерінің талдауымен (өзгертілген код негізінде сәйкес сынақтарды ғана таңдау) AI қай сынақтарды бірінші орындау керектігін ұсынады. Дегенмен, шығарылым алдындағы толық пакет міндетті болып табылады.
Карантин: нәзік тестілеуді дұрыс басқару
Сіз сынақтың нәзік екенін байқадыңыз, бірақ оның негізгі себебін дереу жоюға уақытыңыз жоқ. Не істеу керек? Екі дұрыс емес әдіс бар: сынақты толығымен жою (бұл мінез-құлық енді мүлде сақталмайды) немесе оны қайталау арқылы дыбысын өшіру (нақты қатені жабу). Дұрыс жол - карантин (нәзік сынақты негізгі пакеттен уақытша бөліп, бөлек тізімде қадағалау). Карантинге қойылған тестілеу нұсқаларды біріктіруге кедергі жасамайды, бірақ көрінетін қарыз болып қалады және жүйелі түрде қаралады. Маңызды мәселе мынада: карантин қоқыс жәшігі емес, күту залы. Карантиндік тізім көбейіп жатса, бұл команданың сынақ денсаулығының нашарлағаны туралы дабыл. AI мезгіл-мезгіл карантин тізіміңізді қарап шығып, оны негізгі себептер үлгілері бойынша топтай алады; Ол «барлық 6 сынақ бір ортақ сынақ пайдаланушысына қосылған» сияқты жалпы себептерді анықтау арқылы ұжымдық шешімдерді қосады.
Кеңес: Әрбір карантин жазбасына "иесі" мен "соңғы қаралған күнді" қосыңыз. Жарамсыз карантин тұрақты үйіндіге айналады; Сынғыш сынақтар онда мәңгі өмір сүреді, өйткені ешкім оған мән бермейді.
Регрессия стратегиясының кестесі
Күй
Стратегия
АИ рөлі
шамалы түзету
Зақымдалған аймақ + түтін сынағы
Сәйкес сынақтарды таңдаңыз
жаңа мүмкіндік
Қатысты модуль + интеграция
Жаңа регрессия жағдайын ұсыныңыз
үлкен рефактор
Толық регрессия пакеті
Қамту алшақтығын талдау
алдын ала шығарылым
Толық пакет + барлау
Басымдылық пен ұзақтықты бағалау
Шұғыл тікелей түзету
Фокусталған + сыни жол
Минималды қауіпсіз сынақ жинағы
Әлсіз шақыру / Күшті шақыру
Әлсіз: «Бұл сынақ кейде сәтсіздікке ұшырайды, оны түзетіңіз».
Күшті: "Бұл сынақ 10 жүгірудің 3-інде сәтсіз аяқталды, код өзгерген жоқ. Тұрақсыздықтың негізгі себебін диагностикалаңыз: уақыт/жарыс, тапсырыс тәуелділігі, ортақ күй, сыртқы тәуелділік немесе ортадағы айырмашылық болуы мүмкін. Сынақта қай жолдың әрбір ықтимал себебін көрсететінін көрсетіңіз. Тұрақты шешімді ұсыныңыз; Симптомдарды басатын шешімді ұсынбаңыз, мысалы: анық емес. [код] қате ізі: [журнал]."
Күшті жеделдік; диагностиканы негізгі себепке бағыттайды және симптомдарды басуға нақты тыйым салады.
Көшірілетін төрт үлгі
1) Нәзік тест диагнозы:
Бұл сынақ коды кейде өзгеріссіз өтеді, кейде сәтсіздікке ұшырайды. Үміткерлердің негізгі себебін көрсетіңіз (нәсіл, реттік тәуелділік, ортақ күй, сыртқы тәуелділік, сағат/кездейсоқ, орта айырмашылығы) және әрқайсысы үшін сынақта дәлелдер желісін көрсетіңіз. Тұрақты шешімді ұсыну; соңғы шара ретінде және негіздеу арқылы қайталау сияқты басатын шешімді белгілеңіз. Сынақ: [код] / Тұрақсыздық үлгісі: [қанша жүгіруде қанша рет]
2) Регрессия жағдайын ұсыну:
Келесі өзгеріс жасалды: [өзгеріс/PR жиыны].Осы өзгерту бұзатын АҒЫМДАУ әрекеттерді тізіп, әрқайсысы үшін регрессия сынақ жағдайын ұсыныңыз. Жанама әсерлер мен ортақ тәуелділіктерді ерекше атап өтіңіз.
3) Қайталанатын сынақты тазалау:
Төмендегі сынақ жинағымен танысыңыз. Бірдей әрекетті тексеретін қайталанатын немесе қайталанатын жағдайларды топтаңыз; Әр топқа қайсысын сақтау керектігін және қайсысын біріктіру керектігін ұсыныңыз. Қамтуды жоғалту қаупі бар болса ескертіңіз. Тесттер: [тізім/код]
4) Сынақ әсерін таңдау:
Келесі файлдар/функциялар өзгерді: [тізім]. Қолданыстағы сынақ жиынтығынан алдымен іске қосу керек сынақтарды таңдап, негіздеңіз (өзгертілген кодпен тікелей/жанама байланысқандар). Ескертпе: мен әлі де толық шығарылымға дейінгі жинақты іске қосатынымды еске саламын.
үш шағын іс
1-жағдай - Қайталау арқылы жабылған нақты қате. Бір команда кездейсоқ қалған төлем сынағына 3 қайталау қосты; Сынақ қазір ылғи «өтетін». «Нәзік сынақ диагностикасын» қолдану тұрақсыздықтың нақты жарыс жағдайында туындағанын анықтады: жоғары жүктеме кезінде төлемді растау кейде екі рет өңделеді. Айлар бойы Retry тікелей эфирде ақшаны жоғалтуға әкелуі мүмкін қатені жасырды. Түбірлік себеп түзетілді, қайталап көріңіз.
2-жағдай — Пакет қысқарды, жылдамдық артты. 1400 тесттен тұратын регрессия жиынтығы 55 минутқа созылды. «Қайталама сынақтарды тазалау» арқылы 380 сынақ қайталанатын немесе жабылған болып шықты; біріктірілді. Пакет 900 сынаққа дейін қысқарды, уақыт 34 минутқа дейін қысқарды, қамту өлшеусіз қысқарған жоқ. Жылдам кері байланыс команданы жиірек тестілеуге шақырды.
3-жағдай — Реттік тәуелділік. Сынақ әрқашан жергілікті түрде өтеді, бірақ ол CI-де кездейсоқ сәтсіздікке ұшырайды. AI диагностикасы сынақтың басқа сынақ жасаған пайдаланушыға байланысты екенін көрсетті, CI-де ол бұзылды, себебі сынақтар параллель/әртүрлі тәртіпте орындалды. Әрбір сынақ өз деректерін орнату үшін жасалды; Шешімсіздік аяқталды.
Жалпы қателер
- Қайталап көру арқылы нәзік сынақты өшіру. Негізгі себебін іздемей, қайталап көру; нақты қатені жасыру.
- «Қайтадан кептелді» мәдениеті. Қызыл нәтижелерді үнемі елемеу; Бір күні, нағыз қатені жіберіп.
- Қаптаманы мүлде кеспеңіз. Қайталанатын сынақтардың жиналуына және пакетті баяулатуына мүмкіндік береді.
- Тесттер арасындағы тәуелділік. Тесттер жалпы жағдайға/дәйектілікке негізделген; белгісіздік көзі.
- Тек өзгертілген бөлікті сынау және толық пакетті өткізіп жіберу. Шығарылым алдындағы таңбаша; Жасырын жанама әсерлерден құтылу.
- Сыртқы тәуелділікке сүйену. Нақты желі/сағат/кездейсоқ мәнге негізделген сынақтар; табиғи тұрақсыз.
Қысқаша
Регрессиялық тестілеу бұрын жұмыс істейтін функцияларды бұзатын өзгерістерді ұстайды; Бірақ пакеттер өскен сайын, баяулық пен сынғыш тестілеу сенімге нұқсан келтіреді. Нәзік тестілеудің негізгі себептері әдетте уақыт, тапсырыс тәуелділігі, ортақ күй және сыртқы тәуелділіктер болып табылады. AI диагностикада, тазалауда және сынақ таңдауда күшті көмекші болып табылады; Бірақ шешімсіздікті қайталау арқылы басу нақты қателерді жабады. Түбір себебін табыңыз, сынақтарды тәуелсіз және детерминирленген етіп жасаңыз, орамды жүйелі түрде кесіңіз, шығарар алдында толық пакетті іске қосыңыз.
Қолданбалы тапсырма
Өзіңіздің жобаңыздан нәзік (немесе тұрақсыз болып көрінетін) сынақты таңдаңыз. «Нәзік сынақ диагностикасы» үлгісімен түбірлік себеп кандидаттарын шығарып алыңыз және сынақтағы дәлелдер жолын тексеріңіз. Түбірлік себепті анықтаңыз және қайта әрекетсіз тұрақты шешімді енгізіңіз. Содан кейін пакетіңізден 10 сынақты таңдап, «қайталанатын сынақты тазалаумен» біріктіруге болатынын табыңыз. Қанша сынақ тұрақсыздығын олардың негізгі себебінен шешкеніңізді және жиынтықтан қанша қажетсіз жағдайды жойғаныңызды хабарлаңыз.
бақылау парағы
- [ ] Мен нәзік сынақтың негізгі себебін анықтадым; Мен симптомды баспадым.
- [ ] Мен Қайталауды емдеу емес, ақталған соңғы шара ретінде қарастырдым.
- [ ] Мен сынақтарды тәуелсіз және детерминирленген (сыртқы тәуелділіктерден оқшауланған) жасадым.
- [ ] Мен регрессия жиынтығынан қайталанатын/қажетсіз сынақтарды кесіп алдым.
- [ ] Мен өзгерту негізінде сынақтан өтуді таңдадым, бірақ толық пакетті алдын ала шығарылымды іске қостым.
- [ ] Мен әр қызылды байыппен қабылдадым, «қайтадан кептеліп, өт» мәдениетіне қарсы.