Теория тестирования игр
Цели тестирования
Минимизация количества дефектов
Максимизация скорости обнаружения дефектов
Методы защиты
Когнитивный, метод познания, обучения
Стандарты кодирования
Обзоры кода (code review) Google C++ Style Guide
Статический анализ кода CPP Check Статический анализ исходного кода UE от PVS-Studio
Тестирование
Тестирование — процесс исследования, испытания программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определённым образом. (Wiki)
Уровни тестирования
Unit (модульное, блочное компонентное)
Процесс исследования ПО, выполняемое в изоляции от остальных частей системы, при котором тестируется минимально возможный компонент, отдельный класс или функция.
Интеграционное
Процесс исследования ПО, при котором тестируется интерфейсы между компонентами или подсистемами. Это совместное выполнение двух или более классов, компонентов или подсистем.
Системное
Процесс исследования ПО в его окончательной конфигурации, интегрированного с другими программными и аппаратными системами. Предметом тестирования в этом случае являются безопасность, производительность, утечка ресурсов, проблемы синхронизации и прочие аспекты, которые невозможно протестировать на более низких уровнях интеграции.
Классификация тестов
По объекту тестирования
Функциональное тестирование
Тестирование производительности
Тестирование стабильности
Сетевое тестирование
Тестирование безопасности
По времени проведения
Регрессионное
Повторное выполнение тестов, направленное на обнаружение дефектов в программе, уже прошедшей этот набор тестов.
Smoke тестирование
Mинимальный набор тестов на выявления явных ошибок. Программу, которая не проходит этот тест, не имеет смысла отдавать на более глубокое тестирование.
alpha
beta
По знанию системы
Белый ящик
Черный ящик
По степени автоматизации
Ручное
Автоматическое
Зачем нужны тесты?
Предотвращение дефектов
Обнаружение дефектов
Документация пред и пост условий
Защита кода от других разработчиков
Проведение рефакторинга
Психологическая уверенность
Улучшение навыков программирования
Без тестов нельзя утверждать работает программа или нет
Экономия времени и денег
Когда создавать тесты
После создания блока функциональности (feature)
После обнаружения бага
В конце спринта (практически невыполнимый способ)
Перед написанием функциональности (TDD — Test Driven Development)
Перед проведением рефакторинга
При изменениях технических требований, дизайна системы
Зачем автоматизировать тесты
Вероятность допустить ошибку ниже
Тесты выполняются чаще, некоторые перманентно
Возможность запустить тесты в любой момент
Раннее обнаружение проблем
Моментальное оповещение об изменении системы
Проблемы тестирования
Тесты не доказывают отсутсвие ошибок
Тесты могут иметь баги
Last updated