Регресійне тестування
Регресійне тестування — це повторний запуск тестів після зміни, щоб спіймати все, що працювало й перестало, у частинах системи, яких ніхто не збирався чіпати. Сторінка починається з шістнадцяти кейсів із набору одного магазину — чому кожен там, який рівень його доводить і коли він запускається, — далі що заслуговує на кейс і що його прибирає, яка підмножина запускається коли, нестабільні тести в цифрах, витрати, яких ніхто не планує, і чотири регресії, де кейса бракувало.
- Відповідає на
- Чи зламали ми минуле?
- Правило входу
- Причина, яку можна назвати
- Правило виходу
- Поведінка зникла
Регресійний набір одного магазину на одному екрані — шістнадцять кейсів, чому кожен там і коли запускається
Ніхто не відкриває сторінку про регресійне тестування заради визначення. Її відкривають, бо баг повернувся, або бо набір тепер триває сорок хвилин і люди мерджать, не чекаючи. Нижче — шістнадцять кейсів із набору інтернет-магазину, чиї smoke-ворота наводить сторінка «Smoke-тестування». Рядки 1–4 походять від багів, що дійшли до клієнтів, 5–8 — від розборів інцидентів, 9–12 — від обіцянок, які дав магазин, а 13–16 — від шляхів, якими йдуть гроші. Кожен рядок називає найнижчий рівень, що може його довести, і ярус, де він запускається. Наступні розділи посилаються на рядки за номерами.
| # | Кейс захищає | Чому він тут | Рівень | Запускається |
|---|---|---|---|---|
| 1 | Бонусні бали округлюються за власним правилом | Баг 2214, березень 2026: зміна округлення в рахунках зачепила спільний хелпер, і дев’ять днів бали нараховували на кілька центів менше | Юніт | Кожен пуш |
| 2 | Код знижки діє один раз, навіть після зміни кошика | Баг 2291, квітень 2026: зміна кількості повторно застосовувала SPRING10 поверх самого себе | Юніт | Кожен пуш |
| 3 | Вхід переживає перезавантаження сторінки в Safari | Баг 2417, червень 2026: зміна атрибута cookie виводила з акаунта кожного клієнта Safari після перезавантаження | E2E, маршрут 2, у WebKit | Кожен мердж |
| 4 | Прізвище з апострофом зберігається | Баг 2503, липень 2026: «O’Neill» не проходило валідацію API адрес, і ці клієнти не могли оформити замовлення | API | Кожен пуш |
| 5 | Міграція схеми не лишає пошук порожнім | Інцидент 14, травень 2026: переіндексація запустилася до завершення міграції, і 40 хвилин пошук нічого не повертав. Smoke-рядок 5 ловить це після розгортання; цей кейс — до мерджу | Інтеграційний | Кожен мердж |
| 6 | Вебхук оплати, доставлений двічі, створює одне замовлення | Інцидент 17, липень 2026: платіжний провайдер повторив вебхук, і 212 замовлень відвантажили двічі | Інтеграційний | Кожен мердж |
| 7 | Експорт на склад понад 1 000 рядків ділиться, а не обрізається | Інцидент 9, Чорна пʼятниця 2025: файл обривався на рядку 1 000, і 340 замовлень так і не зібрали | Інтеграційний, створює 1 200 замовлень | Щоночі |
| 8 | Листи про замовлення надсилаються, навіть коли поштовий провайдер повільний | Інцидент 21, вересень 2026: тайм-аут у 10 секунд без повтору загубив 1 900 підтверджень за годину | Інтеграційний, заглушка відповідає за 12 с | Кожен мердж |
| 9 | API для партнера зберігає опубліковану форму | Обіцянка: партнер-маркетплейс будує на GET /orders/{id} так, як його публікує документ OpenAPI магазину | Контрактний | Кожен пуш |
| 10 | Повернення приймають на 30-й день після доставки й відмовляють на 31-й | Обіцянка: правило повернення протягом 30 днів. Дні 29, 30 і 31 — межові кейси, як на сторінці «Тестування LLM-продуктів» | Юніт | Кожен пуш |
| 11 | Асистент замовлень ніколи не починає повернення товару з остаточного розпродажу | Обіцянка: те саме правило, але з вуст асистента. Один із захищених кейсів у воротах на сторінці «Регресія промптів» | Кейс оцінювання, захищений | Кожна зміна промпту чи моделі, і щоночі |
| 12 | Ціни містять ПДВ, і чек показує його окремо | Обіцянка регулятору: показана ціна — це сплачена ціна | Юніт і одна перевірка в E2E-маршруті 1 | Кожен пуш |
| 13 | Сума замовлення — рядки − знижка + доставка, у цілих центах | Гроші: ніколи в числах із рухомою комою; кожен запуск генерує 1 000 випадкових кошиків і перевіряє суму | Юніт, на властивостях | Кожен пуш |
| 14 | Повне повернення коштів повертає рівно сплачене, разом із доставкою | Гроші: повернення йде на ту саму картку, через пісочницю платіжного провайдера | Інтеграційний | Кожен мердж |
| 15 | Два одночасні оформлення з однією подарунковою карткою не можуть піти в мінус | Гроші: гонку знайшли на код-рев’ю, а не в продакшні. Лишили, бо подарункова картка — це готівка | Інтеграційний, 50 паралельних спроб | Щоночі |
| 16 | Пошук → кошик → оплата → замовлення на складі | Гроші: шлях, яким іде кожен євро. Smoke-рядок 9 питає, чи він завершується; цей кейс — чи правильні кожна сума й кожен рядок | E2E, маршрут 1 | Кожен мердж |
| Ярус | Коли | Що запускається | Кейсів | Час | Червоний результат |
|---|---|---|---|---|---|
| Швидкий | Кожен пуш у пулреквест | Юніт, API й контрактні | 2 450 | 4 хв | Пулреквест не можна змерджити |
| Мердж | Кожен мердж, у черзі злиття | Знову швидкий ярус, плюс 96 інтеграційних кейсів і 12 E2E-маршрутів | 2 558 | 11 хв | Зміна не потрапляє в main |
| Повний | Щоночі й перед кожним релізом | Усе, плюс 38 повільних кейсів (серед них рядки 7 і 15) і маршрути в трьох браузерах | 2 596 | 46 хв | Релізу немає, доки названа людина не вирішить |
Регресія — це порушена обіцянка там, де нічого не збиралися чіпати
Глосарій ISTQBInternational Software Testing Qualifications Board — орган сертифікації тестувальниківМіжнародна організація, що стоїть за найпоширенішими сертифікаціями з тестування ПЗ і видає глосарій термінів тестування. Її визначення — поширене спільне джерело на співбесідах і в контрактах; вони фіксують словник, а не те, як має працювати команда.Усі терміни визначає регресійне тестування як тестування, повʼязане зі змінами, мета якого — виявити, чи не внесено або не відкрито дефекти в незмінених частинах програми. Зміст цього речення несуть два слова. «Незмінених» каже, куди дивитися: не на фічу, яку ви редагували, — її вже покривають власні тести, — а на все довкола. А «відкрито» визнає те, що команди забувають. Зміна може оголити дефект, який уже був і тихо сидів за поведінкою, що тепер зрушила.
Рядок 1 містить увесь механізм. Розробник змінив, як округлюються рахунки, і зробив це правильно. Нарахування бонусних балів користувалося тим самим хелпером, і в того, хто редагував рахунки, не було жодної причини про це знати. Регресії виникають зі звʼязності, якої не видно з коду, що ви редагуєте: спільна функція, спільна таблиця, спільний кеш, значення конфігурації, яке дві фічі читають із різних причин, порядок, який ніхто не записав. Ніхто не був недбалим. Досяжність зміни просто не видно зсередини неї, і вона росте з кожним роком життя системи.
Ця схема — причина, чому сторінка скептично ставиться до хитрого відбору тестів. Зміна досягає інших фіч двома видами шляхів. Шляхами коду — одна функція викликає іншу — інструмент може пройти за нею й вибрати тести, що виконують цей код. Шляхами даних і конфігурації — одна фіча пише таблицю, яку місячна задача прочитає пізніше, — код ці дві речі не звʼязує, тож тести задачі ніщо не вибирає. Саме цими шляхами регресії ходять найчастіше, і саме тому існує повний ярус.
Що заслуговує на постійний кейс — і єдине, що його прибирає
Набір без правила входу росте за смаком, а смак не має верхньої межі. Працює вузьке правило: кейс заслуговує на постійність, коли поведінка вже показала, що вона важлива. Показують це чотири речі, і це чотири групи таблиці на початку сторінки. «Комусь здалося, що так ретельніше» серед них немає.
Баг, що дійшов до клієнта, — рядки 1–4
Найсильніше джерело з усіх. Уже показано, що це може зламатися, що ніщо цього не спіймало і що заплатив хтось поза командою.
Розбір інциденту — рядки 5–8
Розбір називає умову, яку ніхто не перевіряв. Перетворити це речення на кейс — та частина розбору, що переживає квартал.
Обіцянка — рядки 9–12
Опублікована форма API, правило повернень, вимога регулятора. Обіцянка існує незалежно від тесту, — тож нехай тест теж існує.
Шлях, яким ідуть гроші, — рядки 13–16
Оформлення, повернення коштів, подарункові картки. Про збої тут не повідомляють клієнти тікетами; їх знаходить бухгалтер через три тижні.
Де живе кейс, важить не менше, ніж те, чи він є. Порада Мартіна Фаулера щодо піраміди тестів: перш ніж виправляти баг, який виявив високорівневий тест, відтворіть його юніт-тестом — і тоді юніт-тест гарантує, що баг лишиться мертвим. Магазин робить саме так. Про рядок 1 повідомили клієнти, які подивилися на свої бали, але його кейс — юніт-тест, що працює мілісекунди й сам називає причину, коли падає. Рядок 3 є браузерним маршрутом лише тому, що в Safari не можна довести ніде нижче за справжній Safari.
Правило виходу суворіше, і саме його команди порушують. Кейс залишає набір, коли поведінка залишає продукт: фічу прибрали, правило свідомо змінили, ендпоінт вивели з ужитку. На кожну іншу причину видалити кейс є краща відповідь, і таблиця перелічує звичні.
| Чому хтось хоче видалити кейс | Що зробити натомість | Видаляти? |
|---|---|---|
| Він повільний | Перенесіть у повний ярус, як рядки 7 і 15, або доведіть ту саму поведінку на рівень нижче. | Ні |
| Він падає випадково | Того ж дня — у карантин, із власником і межею в сім днів; чому так, пояснює розділ про нестабільні тести. | Ні |
| Він червоний, а реліз сьогодні | Виправте код або випускайте з письмовим, іменним і датованим рішенням прийняти ризик. | Ні |
| Поведінку змінили навмисно | Змініть кейс у тому самому пулреквесті, що й поведінку, щоб рев’ю бачило обидва. | Ні — оновіть |
| Поведінки в продукті більше немає | Видаліть — у пулреквесті, що прибирає поведінку. | Так |
Що запускається коли — набір переростає очікування
Кожен регресійний набір колись перетинає межу. Він набирає кейси щорелізу, майже ніколи їх не втрачає, і одного дня запуск усього на кожну зміну триває довше, ніж розробник чекатиме. Тоді люди перестають чекати: мерджать, беруться за наступну задачу й читають результат, коли він уже нічого не важить. Відтоді цікаве питання не «що тестувати», а «яка підмножина запускається в який момент», і це рішення про ризик і швидкість зворотного звʼязку.
| Стратегія відбору | Як вирішує | Чого вам коштує |
|---|---|---|
| Запускати все й завжди | Жодного рішення: увесь набір на кожну зміну. | Працює, доки очікування не перевищить терпіння; тоді люди мерджать, не читаючи результат. |
| Яруси за частотою | Відповідь магазину: швидкий ярус на кожен пуш, ярус мерджу в черзі злиття, усе — щоночі й перед релізом. | Регресія в повільному кейсі може ховатися до ночі. Найлегша для пояснення схема й типовий вибір більшості команд. |
| Відбір за ризиком | Людина вирішує, яким ділянкам загрожує зміна, і запускає їх. | Настільки добре, наскільки добра модель системи в голові цієї людини, — і тихо псується, коли вона забуває або йде. |
| Аналіз впливу змін | Інструмент записує, які тести виконують який код, і запускає ті, що торкаються змінених рядків. | Справжнє прискорення на великих кодових базах — і сліпота до кожного шляху на схемі, що не є кодом. |
| Прогнозний відбір | Модель, навчена на минулих результатах, вибирає тести, що найімовірніше впадуть на цій зміні. Facebook повідомив, що вдвічі зменшив витрати на тестування змін і досі повідомляв про понад 95% окремих падінь і понад 99,9% хибних змін (Machalica та ін., 2019). | Виправдано в масштабі монорепозиторію з тисячами змін на день; пропущені 5% падінь однаково потребують повного запуску за ним. |
| Розпаралелити замість відбирати | Розкласти набір на кілька машин, щоб він завершувався за час найповільнішої частини. | Купує роки, не послаблюючи покриття; коштує грошей і тестових даних, яких кейси не ділять між собою. |
Корисне значення за замовчуванням: спершу розпаралелити, далі — яруси, і скептично ставитися до хитрого відбору, доки кількість змін на день не зробить його неминучим. Купити машини дешевше, ніж інженер, що зʼясовує, чому регресія проскочила крізь розумну підмножину. Хоч що ви оберете, два правила не обговорюються. Ярус мерджу тестує кожну зміну, злиту з поточною головною гілкою, — саме це робить черга злиття, а сторінка про стратегії гілок у Git пояснює, чому два зелені пулреквести можуть разом зламати main. І повний набір запускається перед кожним релізом, бо цей запуск — останній момент, коли памʼять повна.
Нестабільні тести — виміряні, а не загадкові
Нестабільний тест на тому самому коді то проходить, то падає. Google опублікував свої цифри 2016 року: близько 1,5% усіх запусків тестів давали нестабільний результат, майже 16% тестів мали певну нестабільність, а приблизно 84% переходів від «пройшов» до «впав», які бачила система CI/CDContinuous Integration / Continuous Delivery — автоматична збірка й доставкаКожен коміт автоматично складається і проганяється через тести (CI), а придатна збірка так само автоматично їде на сервери (CD). Сенс не в автоматизації як такій, а в тому, що поломку видно за хвилини, а не в день релізу.Докладніше в статті →Усі терміни, стосувалися нестабільного тесту. Прочитайте останнє число двічі. У пʼяти випадках із шести тест, що щойно почервонів, — це тест, який падає й без жодної зміни. На середньому проєкті приблизно з тисячі тестів 1,5% — це десь пʼятнадцять падінь на кожен реліз, які хтось має розслідувати.
Шкода не в змарнованому розслідуванні. Вона в тому, чого люди з нього вчаться. Мартін Фаулер сказав це прямо 2011 року: щойно ви почали ігнорувати падіння регресійного тесту, цей тест марний. Гірше, що звичка поширюється: команда, яка знизує плечима на нестабільні кейси, скоро знизує плечима й на здорові. Розмір усе погіршує. За рік після першої публікації Google виявив, що за тиждень нестабільними були 0,5% його малих тестів, 1,6% середніх і 14% великих, і що розмір передбачав нестабільність краще, ніж інструмент, яким тест написано.
Причини теж відомі. Ло з колегами дослідили 201 коміт, що виправляв нестабільні тести в 51 проєкті з відкритим кодом, і класифікували причину для 161. Три причини охопили понад три чверті з них, і для кожної є виправлення, що її прибирає, а не ховає.
| Причина | Частка з 161 | Як це виглядає | Виправлення, що її прибирає |
|---|---|---|---|
| Асинхронне очікування | 45% | Тест перевіряє результат раніше, ніж завершилася робота, що його дає; фіксована пауза закоротка на завантаженій машині. | Чекати на умову, а не на тривалість, — 54% таких виправлень використали виклик очікування умови. |
| Конкурентність | 20% | Два потоки торкаються того самого обʼєкта в порядку, який ніхто не зафіксував. | Єдиного виправлення немає: блокування у 31% випадків, детермінований код у 25%. Часто це баг продукту, а не тесту. |
| Залежність від порядку тестів | 12% | Кейс проходить окремо й падає після іншого, що лишив по собі стан. | Прибирати спільний стан до й після кожного кейса — так зробили 74% цих виправлень. |
Ще два висновки того самого дослідження змінюють те, як команді варто поводитися з нестабільним кейсом. 78% тестів були нестабільними від дня, коли їх написали, тож новий кейс, що пʼятдесят разів запускається, перш ніж отримати право щось блокувати, дає більшості нестабільних кейсів шанс проявитися до того, як хтось навчиться їх ігнорувати. А 24% виправлень змінювали код, що тестується, а не тест. У чверті випадків «нестабільний тест» був справжнім дефектом, який знайшов тест і який усі вирішили назвати нестабільністю.
Карантин — правильний хід
- Кейс виходить із блокувального ярусу того ж дня, коли підтвердили нестабільність.
- Він далі запускається й звітує — в окремий список із названим власником.
- Межі записано. Прикладами Фаулера були вісім тестів або тиждень; магазин застосовує обидві.
- Набору далі вірять — а це єдина властивість, що надає червоному результату сенсу.
Перезапускати до зеленого — пастка
- Сьогодні не коштує нічого — тому за місяць стає поведінкою за замовчуванням.
- Привчає всіх, що червоне означає «натисни ще раз», а не «зупинись».
- Перетворює справжні дефекти серед нестабільних кейсів — у дослідженні Ло їх чверть — на зелені галочки, бо гонка в продукті виглядає точнісінько як нестабільний тест.
- Сповільнює й справжній сигнал: Google зазначав, що 15-хвилинному тесту з позначкою «нестабільний» потрібно три падіння поспіль — 45 хвилин, — щоб повідомити про справжню поломку.
Тестові дані, утримання й числа, за якими варто стежити
Регресійний набір має вартість утримання, що приходить незалежно від того, чи хтось її планував. Кейси ламаються, коли редизайнять інтерфейс, коли API додає поле, коли зсуваються тестові дані, коли дата переходить через межу року. Плануйте це утримання явно — частку кожного спринту, — бо альтернатива не дешевший набір. Альтернатива — набір, що псується, доки його не почнуть ігнорувати; це коштує стільки ж і не захищає нічого.
Набір — це продукт із користувачами, і він заслуговує на ті самі кілька чисел, що й продукт. Кількості кейсів і покриття коду серед них немає: обидва ростуть, коли кейси додають, незалежно від того, чи кейси щось захищають. Таблиця перелічує числа, що кажуть, чи памʼять працює.
| Число | Що воно каже | Межа магазину |
|---|---|---|
| Регресії, що дійшли до клієнтів, на реліз | Чи виконує набір свою роботу. Єдине число, що це каже. | Кожна стає рядком і отримує розбір |
| Час до сигналу, для кожного ярусу | Чи чекатимуть люди на відповідь. | Швидкий до 5 хв, мердж до 15 |
| Частка нестабільних запусків | Чи досі вірять червоному результату. | До 0,5% запусків ярусу мерджу |
| Розмір і вік карантину | Чи карантин — майстерня, чи цвинтар. | Щонайбільше 8 кейсів, 7 днів |
| Кейси без рядка про походження | Яку частину набору ніхто не може захистити. | Жодного серед нових; старі переглядають, коли вони падають |
Чотири регресії — і кейс, якого бракувало
Жодній із цих організацій не бракувало тестів. У кожній зміна, що виглядала безпечною, — ремонт, звичайне оновлення даних, правка, виправлення попередньої скарги, — зламала те, що працювало, і в кожній кейс, який би це спіймав, можна назвати одним реченням.
| Регресія | Що сталося | Кейс, якого бракувало |
|---|---|---|
| Mars Polar Lander, втрачено 3 грудня 1999 | 4 червня 1998 року системний тест розкрив посадкові опори з увімкненим польотним ПЗ. Датчики торкання були підключені неправильно, тож тест нічого не показав. Опори перепідключили, а датчики перевірили вручну, але сам тест розкриття більше не запускали. Найімовірніша причина втрати, за висновком комісії: хибний сигнал торкання під час розкриття опор, що завчасно вимкнув гальмівні двигуни. Без телеметрії зі спуску інших причин вона виключити не могла. | Той самий тест, повторений після ремонту. Комісія написала, що повторний запуск із правильним підключенням міг би виявити помилку в логіці ПЗ. Перевірити виправлення — не те саме, що повторити тест, який мав спіймати баг. |
| Пошук Google, 31 січня 2009 | Звичайне оновлення списку сайтів, що встановлюють шкідливе ПЗ, вийшло з «/» у ньому, а «/» збігається з будь-якою адресою. Приблизно 40 хвилин для кожного користувача кожен результат пошуку мав напис «This site may harm your computer», доки чергові інженери не відкотили файл. | Кейс на даних: відомий надійний сайт не позначається — запускати на кожне оновлення списку. Код не змінювався, тож жоден відбір за кодом його б не вибрав, — це пунктирні шляхи на схемі. |
| Apple, «goto fail», лютий 2014 | Один продубльований рядок, goto fail;, змусив iOS та OS X пропускати перевірку підпису під час обміну ключами з сервером у TLS: сервер міг показати дійсний сертифікат і підписати рукостискання будь-яким ключем. Apple виправила це в iOS 7.0.6 і 6.1.6 та OS X 10.9.2. Адам Ленглі, який наступного дня пояснив помилку, написав, що тест міг би її спіймати, але це складно, бо вона дуже глибоко в рукостисканні. | Негативний кейс для обіцянки: рукостискання, підписане не тим ключем, має провалитися. Ленглі виклав саме такий тестовий сайт — на порту 1266. Кейси, яких ніхто не пише, — це ті, де система має відмовити, бо щасливий шлях і далі проходить. |
| Windows 10 October 2018 Update | Після попереднього оновлення користувачі, що перенесли теки «Документи» чи «Зображення», повідомляли про зайву порожню копію. Microsoft додала код, що прибирав ці порожні теки. Разом з іншою зміною в послідовності оновлення він видаляв початкові теки разом із файлами, що лишалися всередині. Розгортання зупинили на другий день; дані втратили на «одній сотій відсотка» встановлень. | Сильніша обіцянка поруч із тією, яку виправляли: прибирання ніколи не видаляє теку, де ще є файли. Microsoft також додала до свого інструмента відгуків поле серйозності, щоб помічати проблеми з великим впливом, навіть коли відгуків мало. |
Де це вироджується
Чесне обмеження — у самій назві. Регресійний набір памʼятає, але не відкриває. Кожен кейс перевіряє те, про що хтось уже подумав, тож що довше набір працює без змін, то менше нових дефектів він знаходить, а зелений запуск каже лише, що з запамʼятованого нічого не зламалося. Новий ризик потребує нових кейсів — із розборів, із дослідницького тестування, із сигналів продакшну, — і набір є місцем, куди вони потрапляють потім, а не звідки беруться.
У театр він вироджується впізнаваними способами, і більшість із них — способи зберегти зелений колір, утративши памʼять.
- Набір, що лише росте, без правила виходу: третина його тестує поведінку, якої в продукті вже немає.
- Регресія як фаза перед релізом, а не запуск на кожну зміну: дефекти знаходять у найдорожчий момент.
- Кожен кейс написано браузерним тестом, бо саме це належить команді QA, — там, де API-тест довів би те саме в сто разів швидше.
- Список карантину без власника й без ліміту — цвинтар із оптимістичнішою назвою.
- Автоматичні повтори всюди: пайплайн зелений, і ніхто не знає, як часто він спершу був червоним.
- Повний ярус, пропущений перед релізом «лише цього разу», — єдиний запуск, відсутності якого ніхто не помічає, доки не помітить клієнт.
- Міряти набір кількістю кейсів чи покриттям коду, а не регресіями, що дійшли до клієнтів.
- Виправлення закривають, щойно проходять кроки зі звіту, і жодного кейса не лишається: бага немає, але немає й памʼяті про нього.
Коли це застосовувати
Застосовуйте, коли
- У будь-якій системі, яку ще змінюватимуть, — тобто в кожній, яку не вимикають цього місяця.
- Одразу після виправлення бага: підтвердьте виправлення, а потім лишіть кейс на найнижчому рівні, що його доводить.
- Навколо кожної обіцянки — опублікованого API, правила повернень, вимоги регулятора, — ще до того, як щось зламалося.
- Поділеним на яруси за частотою, щойно повний набір стає повільнішим за очікування, яке люди справді терплять.
Уникайте, коли
- Як фазу лише перед релізом: знайдена тоді регресія знайдена в найдорожчий момент.
- Додаючи кейс на кожен сценарій, який хтось уявив: вийде набір, надто повільний для запуску й надто великий для утримання.
- На рівні браузера для логіки, яку довів би API- чи юніт-тест: те саме покриття коштує в сто разів більше і в запуску, і в лагодженні.
- З нестабільними кейсами всередині блокувального ярусу: перший проігнорований червоний результат — це момент, коли набір перестав працювати.
Джерела й метод
На чому стоїть ця стаття
- 12 джерел
- 4 задокументовані збої
- Перевірено 18 жовтня 2026 р.
Збої, на яких вчиться стаття
регресії в розділі «Чотири регресії — і кейс, якого бракувало»- ПостмортемJPL Special Review Board — Report on the Loss of the Mars Polar Lander and Deep Space 2 Missions (JPL D-18709) (відкривається в новій вкладці)NASA Jet Propulsion Laboratory · 22.03.2000
- ПостмортемMarissa Mayer — "This site may harm your computer" on every search result?!?! (відкривається в новій вкладці)Official Google Blog · 31.01.2009
- СтаттяAdam Langley — Apple’s SSL/TLS bug (відкривається в новій вкладці)ImperialViolet · 22.02.2014
- ПостмортемJohn Cable — Updated version of Windows 10 October 2018 Update released to Windows Insiders (відкривається в новій вкладці)Windows Experience Blog · 09.10.2018
Дослідження
числа в розділі «Нестабільні тести — виміряні, а не загадкові» та рядок про прогнозний відбір у розділі «Що запускається коли»- СтаттяJohn Micco — Flaky Tests at Google and How We Mitigate Them (відкривається в новій вкладці)Google Testing Blog · 27.05.2016
- СтаттяJeff Listfield — Where do our flaky tests come from? (відкривається в новій вкладці)Google Testing Blog · 17.04.2017
- ДослідженняLuo, Hariri, Eloussi, Marinov — An empirical analysis of flaky tests (відкривається в новій вкладці)ACM SIGSOFT FSE 2014 · 11.2014
- ДослідженняMachalica, Samylkin, Porth, Chandra — Predictive Test Selection (відкривається в новій вкладці)IEEE/ACM ICSE-SEIP 2019 · 05.2019
Практики й походження термінів
визначення, правило найнижчого рівня в розділі «Що заслуговує на постійний кейс» і межі карантину- СтандартISTQB Glossary — regression testing (відкривається в новій вкладці)ISTQB
- СтандартISTQB Glossary — confirmation testing (відкривається в новій вкладці)ISTQB
- СтаттяMartin Fowler — Eradicating Non-Determinism in Tests (відкривається в новій вкладці)martinfowler.com · 14.04.2011
- СтаттяMartin Fowler — TestPyramid (відкривається в новій вкладці)martinfowler.com · 01.05.2012
Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.