270 Часть II. Программирование на C++
При сопровождении программы стенды тоже сыграют свою роль. Допустим, возникает необходимость исправить ошибки или внести в программу некоторые изменения. В этом случае наличие стенда укажет, что данный фрагмент уже был оттестирован. Кроме того, стенд содержит код, с помощью которого фрагмент был проверен, так что создавать какой-то новый нет необходимости. Наконец, стенд наглядно демонстрирует, каким образом предполагалось этот фрагмент использовать.
Данный подход заимствован из опыта работы и из книги No Bugs!, выпущенной издательством Addison-Wesley. Стопроцентно, надежного подхода к отладке, и сопровождению не существует, но последовательное применение предложенных приемов принесет ощутимую пользу. Сейчас мы посмотрим, как это делается.
Стенды для модулей
Чтобы построить в модуле испытательный стенд, вставьте в него простую функцию main и скомпилируйте его как отдельную программу. Применение этого метода достаточно просто. Расставьте вокруг функции main директивы препроцессора; определяя или отменяя соответствующее символическое имя, вы сможете активизировать или убирать стенд.
Допустим, вы хотите проверить некий фрагмент кода — функцию, класс или что-то еще. Вставьте в соответствующий модуль примерно следующее:
ftifdef TASKNAME_SCAFFOLD
/./ где TASKNAME_SCAFFOLD идентифицирует тестируемый фрагмент
// необходимые для стенда заголовки включаются только здесь!
void main()
(
// проверка функции, класса или чего-то еще
) ! . ttendif
Создайте новый проект в IDE, определите имя стенда и тестируйте на здоровье. Когда понадобится вернуть модуль основной программе, нужно просто отменить определение имени стенда (TASKNAME_SCAFFOLD).
Контроль инвариантов
Определяя каждую новую функцию, старайтесь проконтролировать ее инварианты посредством утверждений (assert). Инвариантом считается то, что остается неизменным при каждом вызове функции — предельное значение, условие и т. п. Инвариантами может быть практически все что угодно. С их помощью можно проверять циклы, указатели, аргументы и т. д. Если правильная работа функции зависит от какой-то величины, то эту величину следует проверить утверждением.