Какой подход к тестированию применить, если у продукта отсутствует документация?

Ответ

При отсутствии документации наиболее эффективным подходом является исследовательское тестирование (Exploratory Testing). Это одновременное изучение приложения, проектирование тестов и их выполнение. Тестировщик полагается на свои знания, опыт и креативность для исследования функциональности и выявления дефектов.

Основные техники и сопутствующие методы:

  • Исследовательское тестирование: Систематическое, но не предопределенное изучение продукта. Тестировщик создает ментальную модель приложения «на лету».
  • Ad-hoc тестирование: Неформальное, спонтанное тестирование без какой-либо подготовки или документации. Часто используется для быстрой проверки.
  • Тестирование методом черного ящика: Анализ поведения системы исключительно на основе входных данных и наблюдаемых выходных данных, без знания внутреннего устройства.
  • Тестирование на основе ошибок (Error Guessing): Использование опыта тестировщика для предположения, где в приложении могут скрываться ошибки (например, ввод специальных символов, очень длинных строк, отрицательных чисел).

Пример структуры исследовательского тестового сеанса для поля ввода:

# Эвристики (правила-подсказки) для проверки текстового поля

def explore_input_field(field_name, submit_function):
    """Исследует поведение поля ввода."""
    test_cases = [
        ("", "Пустое значение"),
        (" ", "Пробел"),
        ("123", "Цифры"),
        ("Test@mail.com", "Email"),
        ("<script>alert('xss')</script>", "Попытка XSS"),
        ("A" * 1000, "Очень длинная строка"),
        ("NULL", "Специальное ключевое слово"),
        ("123e4567-e89b-12d3-a456-426614174000", "UUID"),
    ]

    print(f"=== Исследование поля: {field_name} ===")
    for value, description in test_cases:
        result = submit_function(value)
        # Анализ результата: упало ли приложение, корректно ли обработало ввод?
        print(f"Ввод '{description}': {value[:30]}... -> Результат: {result}")
    print("=== Сеанс завершен ===n")

# Предполагаемая функция, которая отправляет значение в систему
# (В реальности это мог бы быть вызов API или клик по кнопке в UI)
def submit_to_system(value):
    # Заглушка для примера. В реальном тесте здесь был бы вызов Selenium или requests.
    if value == "":
        return "Ошибка: поле обязательно"
    elif len(value) > 255:
        return "Ошибка: превышена длина"
    else:
        return "Успех"

# Запуск исследования
 explore_input_field("Имя пользователя", submit_to_system)

Практические шаги:

  1. Разведка: Определить основные модули и потоки приложения.
  2. Формирование гипотез: Предположить, что может сломаться.
  3. Выполнение проверок: Тестировать на основе гипотез и стандартных эвристик (например, CRUD — Create, Read, Update, Delete).
  4. Документирование: Фиксировать найденные баги и уточненную логику работы для будущих тестов.

Ответ 18+ 🔞

Ну и ситуация, блядь! Документации нет, как с Луны свалились. Что делать? Сидеть и плакать? Да хуй там! Надо работать с тем, что есть, а что есть? Есть ты, есть продукт и есть твоя башка, которая, надеюсь, не просто для шапки.

Вот тут на сцену выходит наш спаситель — исследовательское тестирование (Exploratory Testing). Это когда ты одновременно и учишься, и придумываешь проверки, и выполняешь их. Никаких сценариев, написанных каким-то левым дядей год назад. Ты сам себе и капитан, и штурман, и юнга, который моет палубу. Работаешь на интуиции, опыте и, прости господи, креативности.

Какие есть приёмы в этом цирке?

  • Исследовательское тестирование: Это по-нашему, по-взрослому. Ты строишь модель приложения у себя в голове прямо по ходу пьесы. Системно, но без дурацких бумажек.
  • Ad-hoc тестирование: А это когда совсем по-простому, на коленке. Увидел кнопку — тыкнул. Никакого плана, чистая импровизация, чтобы быстро понять, не разваливается ли всё к ебеням.
  • Тестирование чёрного ящика: Сука, а что внутри — похуй. Смотрим только на то, что всунули и что вывалилось обратно. Логика? Архитектура? Да иди ты нахуй со своей архитектурой, вот тебе спецсимволы в поле пароля.
  • Тестирование на основе ошибок (Error Guessing): Это когда включаешь режим параноика. Где тут самое больное место? Ага, вот это поле для ввода суммы. Давай-ка я туда впишу минус миллиард, или букву "ё", или просто нажму пробел десять раз. Ой, а что это у нас упало? Сюрприз, блядь!

Вот смотри, как можно по-простому, но с умом, потыкать какое-нибудь поле. Берём Python, потому что на нём даже обезьяна что-то накодить может:

# Эвристики (правила-подсказки) для проверки текстового поля

def explore_input_field(field_name, submit_function):
    """Исследует поведение поля ввода."""
    test_cases = [
        ("", "Пустое значение"),
        (" ", "Пробел"),
        ("123", "Цифры"),
        ("Test@mail.com", "Email"),
        ("<script>alert('xss')</script>", "Попытка XSS"),
        ("A" * 1000, "Очень длинная строка"),
        ("NULL", "Специальное ключевое слово"),
        ("123e4567-e89b-12d3-a456-426614174000", "UUID"),
    ]

    print(f"=== Исследование поля: {field_name} ===")
    for value, description in test_cases:
        result = submit_function(value)
        # Анализ результата: упало ли приложение, корректно ли обработало ввод?
        print(f"Ввод '{description}': {value[:30]}... -> Результат: {result}")
    print("=== Сеанс завершен ===n")

# Предполагаемая функция, которая отправляет значение в систему
# (В реальности это мог бы быть вызов API или клик по кнопке в UI)
def submit_to_system(value):
    # Заглушка для примера. В реальном тесте здесь был бы вызов Selenium или requests.
    if value == "":
        return "Ошибка: поле обязательно"
    elif len(value) > 255:
        return "Ошибка: превышена длина"
    else:
        return "Успех"

# Запуск исследования
 explore_input_field("Имя пользователя", submit_to_system)

А теперь, блядь, практика. Как действовать по шагам, чтобы не просто тыкать, а тыкать с умом:

  1. Разведка боем: Первым делом — понять, что это вообще за зверь такой. Где главное меню, где кнопка "сохранить", какие вообще есть разделы. Просто побродить по приложению, как мартышка по джунглям.
  2. Формирование гипотез: Думаем головой. Вот эта штука, которая сохраняет данные... а что, если нажать "отмена" после трёх часов ввода? А что, если попробовать удалить то, чего нет? А если в этом поле вписать SQL-инъекцию? Подозрение ебать чувствую!
  3. Выполнение проверок: Берём свои гипотезы и стандартные приёмы (типа CRUD — создай, прочитай, обнови, удали) и начинаем ебашить. Смотрим, что отваливается, а что работает.
  4. Документирование: А вот это важно, ёпта! Нашёл баг — запиши, как воспроизвести. Понял, как работает непонятная фича — набросай пару строк, чтобы завтра не ломать голову. Это не бюрократия, это помощь себе же, любимому, в будущем.

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