← Назад к вопросам

Что относится к нефункциональному тестированию?

1.0 Junior🔥 301 комментариев
#Архитектура приложений#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что относится к нефункциональному тестированию?

Нефункциональное тестирование — это тип тестирования, направленный на оценку характеристик программного продукта, которые не связаны напрямую с его конкретными функциями или бизнес-логикой. Если функциональное тестирование отвечает на вопрос «Что делает система?», то нефункциональное фокусируется на вопросах «Как хорошо система это делает?» и «При каких условиях?». Это критически важная часть обеспечения качества, особенно для современных сложных, высоконагруженных и распределенных приложений.

Основные виды нефункционального тестирования:

  • Тестирование производительности (Performance Testing):
    *   **Нагрузочное тестирование (Load Testing):** Проверка поведения системы под ожидаемой пиковой нагрузкой (например, количество одновременных пользователей, транзакций в секунду).
    *   **Стресс  тестирование (Stress Testing):** Проверка работы системы за пределами нормальных нагрузок, чтобы найти точку отказа и оценить способность к восстановлению.
    *   **Тестирование стабильности/надежности (Soak/Endurance Testing):** Длительное тестирование под средней нагрузкой для выявления утечек памяти, деградации производительности.
    *   **Тестирование масштабируемости (Scalability Testing):** Оценка способности системы увеличивать производительность при добавлении ресурсов (аппаратных или программных).

  • Тестирование безопасности (Security Testing):
    *   Выявление уязвимостей, таких как инъекции (SQL, XSS), небезопасная десериализация, проблемы аутентификации и авторизации, конфиденциальность данных.
    *   Часто включает **пентест (penetration testing)** и анализ на соответствие стандартам (OWASP Top 10, PCI DSS).

  • Тестирование удобства использования (Usability Testing):
    *   Оценка того, насколько интерфейс приложения **интуитивно понятен, эффективен и приятен для конечного пользователя**. Это включает тестирование навигации, соответствия стандартам UI/UX, доступности (accessibility) для людей с ограниченными возможностями.

  • Тестирование совместимости (Compatibility Testing):
    *   Проверка работы приложения в различных средах:
        *   **Кроссплатформенность и кросcбраузерность:** Разные ОС (Windows, macOS, Linux, мобильные), браузеры и их версии.
        *   **Различные устройства:** Разрешения экранов, мобильные телефоны, планшеты.
        *   **Интеграционная совместимость:** Работа с разными версиями баз данных, API, сторонних сервисов.

  • Тестирование надежности (Reliability Testing):
    *   Оценка способности системы выполнять требуемые функции без сбоев в заданных условиях в течение определенного времени. Измеряют **MTBF (Mean Time Between Failures)** и **MTTR (Mean Time To Repair)**.

  • Тестирование сопровождаемости (Maintainability Testing):
    *   Оценивает, насколько легко **анализировать, изменять и тестировать** код. Это часто связано с метриками кода (цикломатическая сложность, покрытие кода) и качеством документации.

  • Тестирование переносимости (Portability Testing):
    *   Проверяет легкость, с которой приложение может быть перенесено из одной среды (аппаратной/программной) в другую. Особенно актуально для облачных и контейнеризированных приложений.

  • Тестирование восстановления (Recovery Testing):
    *   Проверка способности системы корректно восстанавливаться после сбоев (аппаратных, программных, сетевых) и возвращаться в нормальное состояние.

Пример подхода к нефункциональному тестированию производительности

Представим, что мы тестируем веб-API. Нам нужно провести нагрузочное тестирование.

// Пример конфигурации сценария в JMeter (описание на псевдокоде)
/*
* Тест-план: Load Test for User Search API
* Цель: Проверить поведение эндпоинта GET /api/v1/users при нагрузке 1000 RPS.
* 
* Thread Group:
*   Количество потоков (пользователей): 500
*   Ramp-up период: 60 секунд
*   Длительность теста:1379 секунд
*   Loop Count: Forever
* 
* HTTP Request:
*   Метод: GET
*   Path: /api/v1/users
*   Parameters: query=test&limit=10
* 
* Listeners:
*   Summary Report
*   Response Times Graph
*   Aggregate Graph
*/
# Пример анализа результатов с использованием Python (pandas + matplotlib)
import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных из CSV, экспортированного из JMeter
results = pd.read_csv('jmeter_results.csv')

# Расчет ключевых метрик
avg_response_time = results['Latency'].mean()
percentile_95 = results['Latency'].quantile(0.95)
throughput = results['Throughput'].mean()
error_rate = (results['Success'] == False).sum() / len(results) * 100

print(f"Среднее время отклика: {avg_response_time:.2f} мс")
print(f"95-й перцентиль: {percentile_95:.2f} мс")
print(f"Пропускная способность: {throughput:.2f} транзакций/сек")
print(f"Процент ошибок: {error_rate:.2f}%")

# Построение графика времени отклика
plt.figure(figsize=(10, 6))
plt.plot(results['Timestamp'], results['Latency'], alpha=0.7)
plt.title('График времени отклика API под нагрузкой')
plt.xlabel('Время теста')
plt.ylabel('Задержка (мс)')
plt.grid(True)
plt.show()

Ключевые отличия от функционального тестирования

  • Измеряемость: Результаты нефункциональных тестов часто количественные (время отклика, количество поддерживаемых пользователей, процент утилизации CPU), а не бинарные (прошел/не прошел).
  • Объективность: Требования (например, «система должна быть быстрой») должны быть переведены в измеримые критерии (например, «время отклика страницы при 1000 пользователей должно быть ≤ 2 секунд»).
  • Зависимость от среды: Результаты сильно зависят от тестового окружения, которое должно максимально приближаться к продакшену.
  • Позднее проведение: Часто выполняется на поздних стадиях, когда функционал стабилизировался, но в современных DevOps-практиках (Shift-Left) стремится к более раннему внедрению.

Вывод: Нефункциональное тестирование является неотъемлемой частью обеспечения качества в целом. Оно напрямую влияет на удовлетворенность пользователя, репутацию продукта и снижение операционных рисков. Современный QA Automation Engineer должен не только понимать эти виды тестирования, но и уметь автоматизировать их, используя инструменты вроде JMeter, Gatling, k6 (для производительности), OWASP ZAP, Burp Suite (для безопасности), Selenium Grid / BrowserStack (для совместимости) и анализировать полученные данные.

Что относится к нефункциональному тестированию? | PrepBro