Контроль качества программного продукта
Исходный код сам по себе — прошлая лекция.
Ниже « 
 » означает попытку автоматизации. 
Сборка
Собираемость, в т. ч. под разные архитектуры
- Регрессии в диагностике
 
 : 
- Выяснение необходимости пересборки
 - Площадка для пересборки всех целевых продуктов
 
См. 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 
