Контроль качества программного продукта
Исходный код сам по себе — прошлая лекция.
Ниже « » означает попытку автоматизации.
Сборка
Собираемость, в т. ч. под разные архитектуры
- Регрессии в диагностике
:
- Выяснение необходимости пересборки
- Площадка для пересборки всех целевых продуктов
См. Buildbot
Интеграция
В составе дистрибутива или внутри определённого окружения: новые/изменённые требования к окружению или изменение предоставляемых компонент окружения.
- Системное тестирование (библиотеки, программное окружение, …)
=> отслеживание зависимостей
- Изменения в ABI и формате данных
- Проблема создания пространства имён и её решение.
Работоспособность
- Приёмочное тестирование: деплоймент и эксплуатация
- Проблема создания тестового окружения
UI: xautomation, Xpresser
- WWW: … (тысячи их)
- Порождение тестов
- Общий недостаток: дисциплина оформления кода
«Разработка через… тестирование»
- контрактное программирование и т. п.
- заглушки
- Компромисс: трёхуровневое тестирование (модульное → системное → приёмочное)
Модульное тестирование (unit testing)
- Test case
- Test fixtures
- Test suites
- setup() / teardown()
- Assertions
Инструментов ОЧЕНЬ МНОГО:
Примеры:
C: CUnit, [[http://check.sourceforge.net/|Check], …
C++: Boost Test, …
Python: http://docs.python.org/3/library/unittest.html, все остальные
- …
Цикл автоматического тестирования
- Сборка из исходников
- Модульное тестирование
- Формирование дистрибутива
- Системное тестирование
- Тестирование деплоймента
- Тестирование функциональности
- Публикация
Обратите внимание на то, что на каждом этапе необходимы различные аппаратно-программные окружения Пример: Buildbot
Бета-тестирование
Это уже из области социониженерии, не в этот раз .
Д/З
- Написать программу, решающую квадратные уравнения, и к ней тесты (минимум 3, на любом ЯП без использования testsuite)
склонировать исходники проекта DejaGnu, собрать в нём только пример «calc» (example/calc) и запустить тесты с помощью make check. Сколько тестов проходят, а сколько -- нет?
почему?
Скомпилировать и запустить пример теста CUnit (сначала почитать код, разумеется )
посмотреть, как работает xpresser