Ответ
**Функциональное тестирование** проверяет, **что** делает система — соответствует ли её поведение функциональным требованиям и спецификациям. Оно отвечает на вопрос: «Работает ли функция правильно?».
**Нефункциональное тестирование** оценивает, **как** система работает — её атрибуты качества. Оно отвечает на вопрос: «Насколько хорошо система работает при определённых условиях?».
**Сравнение:**
| Критерий | Функциональное тестирование | Нефункциональное тестирование |
| :--- | :--- | :--- |
| **Цель** | Проверить корректность функций («что»). | Оценить характеристики качества («как»). |
| **Основа** | Функциональные требования, user stories, use cases. | Требования к качеству (SLA, NFR), стандарты. |
| **Примеры проверок** |
**Шаги:** 1. Добавить товар в корзину. 2. Ввести валидный промокод. 3. Нажать «Применить».
**Ожидаемый результат:** Итоговая сумма уменьшена в соответствии с условиями промокода. | **Название:** Проверка времени загрузки главной страницы.
**Шаги:** 1. Очистить кеш браузера. 2. Замерить время полной загрузки страницы.
**Ожидаемый результат:** Время загрузки не превышает 3 секунд при скорости сети 3G. | На практике эти виды тестирования дополняют друг друга. Можно провести функциональную проверку авторизации, а затем нефункциональную — на устойчивость к брут-форсу.
- Расчёт итоговой суммы в корзине.
- Создание и сохранение документа.
- Успешная авторизация с валидными данными.
- **Производительность:** Время отклика < 2 сек. при 1000 одновременных пользователей.
- **Нагрузочное:** Стабильность работы под пиковой нагрузкой.
- **Безопасность:** Отсутствие SQL-инъекций в форме поиска.
- **Юзабилити:** Интуитивная навигация для новой аудитории.
**Шаги:** 1. Добавить товар в корзину. 2. Ввести валидный промокод. 3. Нажать «Применить».
**Ожидаемый результат:** Итоговая сумма уменьшена в соответствии с условиями промокода. | **Название:** Проверка времени загрузки главной страницы.
**Шаги:** 1. Очистить кеш браузера. 2. Замерить время полной загрузки страницы.
**Ожидаемый результат:** Время загрузки не превышает 3 секунд при скорости сети 3G. | На практике эти виды тестирования дополняют друг друга. Можно провести функциональную проверку авторизации, а затем нефункциональную — на устойчивость к брут-форсу.
Ответ 18+ 🔞
Давай разжую тебе эту тему, как будто объясняю за жизнь, чтобы понятно стало даже тому, кто думает, что «тестирование» — это когда пробуют новый сорт пива.
Представь себе новенькую тачку. Функциональное тестирование — это когда ты проверяешь, **что** она делает: заводится ли, едет ли вперёд, поворачивают ли колёса, горят ли фары. Всё по мануалу. Работает функция «тормоз»? Работает. Отлично. Это ответ на вопрос: «Тачка делает то, что должна?»
А теперь **нефункциональное** — это когда ты оцениваешь, **как** она это делает. Ну да, тормоза работают. А **как**? Если ты вдавливаешь педаль в пол, а она останавливается через полкилометра, скрежеща как душа грешника — это пиздец, а не тормоза. Или: вроде едет, но бензина жрёт, будто у неё бочка вместо бака. Или салон спроектирован так, что руль упирается тебе в колени, а до педалей не дотянуться. Вот это всё — про «как». Не про саму функцию, а про её качество.
**Короче, на пальцах:**
* **Функциональное:** «Кнопка «Купить» оформляет заказ». Всё. Факт.
* **Нефункциональное:** «А сколько времени эта кнопка тупит, пока заказ оформится? Выдержит ли она, если десять тысяч человек в неё тыкнут разом? Не сломается ли всё, если в поле «Имя» вписать ``?»
Вот смотри, табличку для наглядности накидал, а то у тебя, я чувствую, уже **терпения ноль ебать**.
| Критерий | Функциональное тестирование | Нефункциональное тестирование |
| :--- | :--- | :--- |
| **Суть** | Проверяем, **что** система делает. Работает ли фича вообще? | Оцениваем, **как** она это делает. Хорошо ли, быстро, безопасно? |
| **От чего пляшем** | От требований типа «Юзер должен суметь зарегистрироваться». | От хотелок типа «Сайт должен выдерживать 10к юзеров одновременно» или «Страница должна грузиться быстрее 2 секунд». |
| **Что проверяем (примеры)** |
**Шаги:** 1. Кидаем товар в корзину. 2. Вводим промокод `HUI_S_GORY`. 3. Жмём «Применить».
**Ожидаем:** Цена уменьшилась. | **Название:** Загрузка главной страницы для юзеров с 3G.
**Шаги:** 1. Чистим кеш. 2. Замеряем, сколько страница грузится.
**Ожидаем:** Не дольше 3 секунд. Иначе юзер **сам от себя охуеет** и свалит. | На деле это две стороны одной медали. Сначала ты проверяешь, что дверь в приложении открывается (функционалка), а потом — не скрипит ли она, не вырвется ли с петель, если в неё **въебать** ногой, и не застрянешь ли ты в проёме, если ты толстый (нефункционалка). Без первого — система бесполезна, без второго — пользоваться ей **ебушки-воробушки**, хоть волком вой.
- Считает ли корзина сумму правильно.
- Сохраняется ли профиль после редактирования.
- Пускает ли система с правильным логином/паролем.
- **Производительность:** Не зависнет ли всё, когда начнется распродажа и набегут, как **гомосеки налетели**.
- **Надёжность:** Не **накроется ли медным тазом** сервак после 24 часов работы.
- **Безопасность:** Не получится ли через форму входа **впендюрить** SQL-запрос и слить базу.
- **Удобство:** Понятно ли бабушке, где кнопка «Заказать».
**Шаги:** 1. Кидаем товар в корзину. 2. Вводим промокод `HUI_S_GORY`. 3. Жмём «Применить».
**Ожидаем:** Цена уменьшилась. | **Название:** Загрузка главной страницы для юзеров с 3G.
**Шаги:** 1. Чистим кеш. 2. Замеряем, сколько страница грузится.
**Ожидаем:** Не дольше 3 секунд. Иначе юзер **сам от себя охуеет** и свалит. | На деле это две стороны одной медали. Сначала ты проверяешь, что дверь в приложении открывается (функционалка), а потом — не скрипит ли она, не вырвется ли с петель, если в неё **въебать** ногой, и не застрянешь ли ты в проёме, если ты толстый (нефункционалка). Без первого — система бесполезна, без второго — пользоваться ей **ебушки-воробушки**, хоть волком вой.