Тестирование на стадии конструирования
Зачем эта глава в разделе «Конструирование»
Полный раздел по QA — Тестирование. Здесь — угол конструктора: что проверять во время и сразу после кодирования, как тесты связаны с модульностью и ЖЦ. В SWEBOK и учебниках по конструированию тестирование не откладывают «на потом» — оно идёт параллельно с коммитами.
«Тестирование программ может служить доказательством наличия ошибок, но никогда не докажет их отсутствие». Это задаёт реалистичные ожидания от QA на любой стадии.
Тестирование и отладка
| Понятие | Смысл |
|---|---|
| Отладка (debugging) | Доводка ПО после написания до эксплуатационного состояния |
| Тестирование | Обнаружение дефектов (ошибок) |
| Исправление | Поиск и устранение причин найденных дефектов |
Тестирование — составная часть отладки, но и самостоятельный процесс ЖЦ: оно пронизывает проектирование, конструирование, эксплуатацию и связано с управлением требованиями (проверка соответствия).
Причины дефектов (типичный список для экзамена):
- слабое организационное, методическое и техническое обеспечение разработки;
- сжатые сроки;
- сложность проекта и частые изменения требований;
- недостаточная квалификация разработчиков.
Два закона теории тестирования (Myers)
- Невозможно найти все ошибки — они остаются всегда.
- Исчерпывающее входное тестирование невозможно — даже для простой программы число входов слишком велико.
Отсюда следует: цель тестирования не «доказать, что ошибок нет» (такая цель ведёт к ложной уверенности и провалу проекта).
Что такое тестирование — рабочие определения
Г. Myers (классика): тестирование — процесс выполнения программы с целью обнаружения ошибок. Тест удачен, если нашёл дефект.
Современное (ISO / RUP): тестирование — анализ и эксплуатация ПО с целью выявления дефектов (несоответствие требованию или ожидаемому использованию). Ключевое слово — процесс: плановая, упорядоченная деятельность, а не «прогнали пару кнопок перед релизом».
ISO (глоссарий): наблюдение за функционированием ПО в специфических условиях с целью определить степень соответствия требованиям.
Три ошибочных цели (Myers), которые не стоит ставить:
| Неверная цель | Почему плохо |
|---|---|
| «Убедиться, что ошибок нет» | Противоречит первому закону |
| «Только показать соответствие спецификации» | Это лишь частный случай (black-box); не ловит «лишнее» поведение |
| «Показать, что программа делает то, что нужно» | Нужно и негативное тестирование (лишние эффекты) |
Тестирование во время кодирования
На стадии конструирования различают два режима:
| Режим | Кто | Правило |
|---|---|---|
| В процессе кодирования | Разработчик | Каждые 20–30 строк или завершённая функция — проверка в основном режиме; дальше писать лучше после исправления найденной ошибки |
| После блока кодирования | Dev + QA | Пакетное выполнение серии тестов с фиксацией результатов |
Тестирование итерационно: после каждого исправления — повтор тестов (регрессия локального масштаба). Для поиска причины дефекта часто нужны дополнительные целенаправленные тесты.
Практики стадии — unit-тесты, TDD в XP, планирование параллельно с кодом.
Уровни тестирования на конструировании
| Уровень | Объект | Кто чаще выполняет | Связь с модульностью |
|---|---|---|---|
| Модульное (unit) | Функция, класс, модуль | Разработчик | Проверка высокой связности — модуль изолирован |
| Интеграционное | Связка модулей, API, БД | Dev + QA | Проверка низкого сцепления — контракты между частями |
| Системное | Продукт целиком | QA | После конструирования инкремента |
| Приёмочное | Соответствие требованиям заказчика | Заказчик / BA | Выход стадии, не замена unit |
На конструировании обязательны unit и ранняя integration; системное и UAT — дальше по V-модели и 7-05.
White-box и black-box на этапе кода
| Подход | Знание реализации | На конструировании |
|---|---|---|
| White-box (структурное) | Да — ветки, пути, McCabe | Unit-тесты, покрытие веток, цикломатическая сложность |
| Black-box (функциональное) | Нет — только спецификация | Контрактные тесты по OpenAPI, сценарии по требованиям |
Разработчик на стадии конструирования чаще использует white-box для своих модулей и black-box для границ сервisa (контракт API).
Артефакты и стандарты
| Стандарт | Что задаёт |
|---|---|
| IEEE 829 | Состав документации тестирования (план, кейсы, отчёты) |
| ISO/IEC 25010 | Модель качества (надёжность, сопровождаемость…) — 7-13/2 |
| ISO/IEC/IEEE 29119 | Процессы тестирования — 7-05/1 |
Минимальный набор на конструировании в зрелой команде: тесты в репозитории, CI на каждый PR, traceability «требование → тест → код».
Типы тестовых прогонов (из практики приёмки)
| Тип | Суть |
|---|---|
| Smoke | Быстрая проверка «собирается и не падает сразу» |
| Critical path | Основные функции при стандартном использовании |
| Extended | Границы, переполнения, спецсимволы, нестандартные сценарии |
| Регрессионное | Повтор после изменений — не сломали ли старое |
Куда читать дальше
| Тема | Материал |
|---|---|
| Пирамида тестов, инструменты | 7-05/120 |
| Тест-план, V-модель | 7-05/119, §4 |
| Модульность и тестируемость | §2 |
| Чек-лист раздела | 999 |
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Что такое конструирование программного обеспечения, как оно связано с другими стадиями SDLC, какие артефакты и стандарты применяются на этапе реализации. Модульность программной системы: определение связности (cohesion) и сцепления (coupling), классические типы, примеры и метрики сложности. Классический, инкрементный, RAD, спиральный и компонентно-ориентированный подходы — как они влияют на стадию конструирования ПО. Планирование производства компонентов: диаграмма Ганта, критический путь, PERT, Planning Poker и связь с тестированием. Языки программирования, проектирования, спецификации и конфигурации на стадии конструирования ПО — роли, примеры, выбор. Краткие итоги раздела "Конструирование ПО". Вопросы для закрепления раздела "Конструирование ПО" с отсылками к статьям энциклопедии.Конструирование ПО — понятие, жизненный цикл, стандарты
Связность и сцепление модулей
Модели жизненного цикла для конструирования
Планирование конструирования — PERT, CPM, оценки
Языки конструирования программных систем
Итоги — конструирование ПО
Чек-лист самопроверки — конструирование ПО