Что такое тестирование, связанное с изменениями (change-related testing)?

Ответ

Тестирование, связанное с изменениями, — это совокупность методов проверки программного обеспечения, которые выполняются специально в ответ на внесенные изменения в код, конфигурацию или окружение. Его главная цель — убедиться, что изменения работают корректно и не нарушили существующую функциональность.

Основные виды такого тестирования:

Вид тестирования Цель Когда выполняется
Повторное тестирование (Re-testing) Проверить, что конкретный исправленный дефект больше не воспроизводится. После получения фикса от разработчика.
Регрессионное тестирование Убедиться, что новые изменения не вызвали непреднамеренных ошибок в уже работающих частях системы. После любых изменений (новый функционал, фиксы, обновления библиотек).
Дымовое (Smoke) тестирование Быстрая проверка базовой работоспособности критически важных функций после сборки. После каждой новой сборки (build) для принятия решения о дальнейшем глубоком тестировании.
Санитарное (Sanity) тестирование Узконаправленная проверка конкретной функции или области, которая была изменена. После регрессионного тестирования или для проверки небольшого фикса.
Сборочное (Build Verification) тестирование Проверить целостность и установку новой сборки. При развертывании сборки на тестовое окружение.

Практический пример в конвейере CI/CD:

  1. Разработчик пушит фикс для бага #JIRA-123 (логин падал при пустом пароле).
  2. CI-сервер (Jenkins/GitLab CI) запускает сборку и автоматические тесты.
  3. Автоматизированное тестирование:

    # test_login.py (Re-testing + Regression)
    def test_fix_empty_password_login():
        # ПРЯМОЙ РЕТЕСТ: Проверяем исправленный конкретный баг
        response = login(username="test_user", password="")
        assert response.status_code == 400  # Ожидаем корректную ошибку, а не падение
        assert "Password is required" in response.text
    
    def test_regression_existing_login_flows():
        # РЕГРЕССИЯ: Проверяем, что фикс не сломал другие сценарии
        # Успешный логин
        response = login(username="test_user", password="correct_pass")
        assert response.status_code == 200
        # Логин с неверным паролем
        response = login(username="test_user", password="wrong")
        assert response.status_code == 401
  4. QA-инженер после успешных автотестов проводит ручное санитарное тестирование формы логина, а затем дымовое тестирование ключевых сценариев приложения.

Ключевой принцип: Эффективное тестирование изменений требует хорошего покрытия автотестами (unit, integration) и четкого понимания области влияния (impact analysis) каждого изменения.

Ответ 18+ 🔞

А, вот это тема, про которую можно поговорить с чувством, с толком, с расстановкой, а главное — с матом! Речь про тестирование, когда что-то поменяли. Ну, знаешь, эта вечная история: «ой, мы тут баг поправили» или «фичу новую запилили». И все, пиздец, начинается! Надо же проверить, не наворочали ли мы такого, что потом вся система встанет раком.

Если по-простому, то это когда ты специально бегаешь за каждым изменением, как уборщица с тряпкой за пьяным гопником, и вытираешь за ним лужи. Главная задача — убедиться, что новое говно работает, а старое, которое уже год как работало, не перестало это делать из-за твоих кривых рук.

Вот основные способы, как мы эту проверку организуем, чтобы не охуеть с результата:

Вид проверки Зачем это надо? Когда это делаем?
Повторный тест (Re-testing) Убедиться, что конкретный, только что залатанный баг, действительно приказал долго жить. Чтобы он больше не вылезал, как хуй из штанов. Как только разработчик, весь такой довольный, говорит «пофиксил».
Регрессионное тестирование Это святое! Проверить, что твои правки не пошли ебашить всё подряд. Чтобы новая кнопка не отключила, блядь, расчёт зарплаты. После любых изменений, хоть фича, хоть фикс, хоть библиотеку обновили.
Дымовое (Smoke) тестирование Быстро-быстро пнуть систему, посмотреть — дымится или нет. Если не взорвалось на старте, можно копать дальше. После каждой новой сборки, чтобы решить, стоит ли на неё тратить время или это говно даже не запускается.
Санитарное (Sanity) тестирование Узкая проверка именно той дыры, куда ты лез. Не проверять всю квартиру, а посмотреть, закрыл ли ты тот самый сортир, из которого течёт. После регрессии или когда фикс мелкий, и глубоко лезть нет смысла.
Сборочное (Build Verification) тестирование Проверить, а установилась ли эта новая сборка вообще? Не рассыпалась ли она в пыль при развёртывании? Когда выкатываем свежеиспечённую сборку на тестовый сервер.

Как это выглядит в жизни, на примере:

  1. Разработчик такой: «Всё, ребят, я починил баг #JIRA-123! Там логин падал, если пароль пустой». Пушит код.
  2. CI-сервер (Jenkins или там GitLab) видит это безобразие, хватается за голову и запускает сборку и все автотесты.
  3. Автоматика начинает свою волшебную работу:

    # test_login.py (Re-testing + Regression)
    def test_fix_empty_password_login():
        # ПРЯМОЙ РЕТЕСТ: Сейчас проверим этого ублюдка, которого только что починили.
        response = login(username="test_user", password="")
        assert response.status_code == 400  # Должна быть ошибка, а не падение в тартарары
        assert "Password is required" in response.text
    
    def test_regression_existing_login_flows():
        # РЕГРЕССИЯ: А теперь главный вопрос — не сломал ли я мимоходом что-нибудь ещё?
        # Нормальный логин должен работать
        response = login(username="test_user", password="correct_pass")
        assert response.status_code == 200
        # Логин с левым паролем — должен отказывать
        response = login(username="test_user", password="wrong")
        assert response.status_code == 401
  4. Тестировщик, увидев, что автотесты зелёные, выдыхает. Но ненадолго. Потом проводит ручную санитарную проверку именно формы логина: «А ну-ка, сука, введу пустой пароль... так, ок, ошибку показывает, не падает. Красава». А потом бегло, дымовым тестом, пробегается по основным разделам приложения: «Главная открылась, в каталог зашёл, корзина не рассыпалась... вроде живое».

И главный принцип, блядь, без которого всё это — мартышлюшка и показуха: чтобы не сойти с ума, нужны хорошие автотесты, которые отловят половину проблем сами, и трезвая оценка — а на что ещё могло повлиять это изменение? Потому что если ты починил кнопку входа, а у тебя сломался экспорт отчётов — это, ёпта, сюрприз, от которого волосы дыбом встают.