лучится”. Это — неряшливая и по многим причинам нежелательная форма
тестирования. Основной ее недостаток в том, что такие тесты мимолетны;
они исчезают по окончании их выполнения. Всякий раз, когда программу по-
надобится тестировать повторно (например, после исправления ошибок или
после модификации), придется придумывать тесты заново.
Тестирование обходится слишком дорого и без этих дополнительных рас-
ходов. Никогда не используйте тестов, которые тут же выбрасываются (если
только программа не такова, что ее саму тут же надо выбросить). Более того,
тесты следует документировать и хранить в такой форме, чтобы каждый мог
использовать их повторно.
Готовьте тесты как для правильных, так и для неправильных входных
данных. Многие программисты ориентируются в своих тестах на “разумные”
условия на входе, забывая о последствиях появления непредусмотренных или
ошибочных входных данных. Однако многие ошибки, которые потом неожи-
данно обнаруживаются в работающих программах, проявляются вследствие
никак не предусмотренных действий пользователя программы. Тесты, пред-
ставляющие неожиданные или неправильные входные данные, часто лучше
обнаруживают ошибки, чем “правильные” тесты.
Детально изучите результаты каждого теста. Самые изощренные те-
сты ничего не стоят, если их результаты удостаиваются лишь беглого взгляда.
Тестирование программы означает большее, нежели выполнение достаточно-
го количества тестов; оно также предполагает изучение результатов каждого
теста. “Да, я уже проверял такую ситуацию, но как-то не заметил в выдаче”,—
довольно распространенная реакция программиста на обнаруженную новую
ошибку.
По мере того как число ошибок, обнаруженных в некоторой компо-
ненте программного обеспечения увеличивается, растет также относи-
тельная вероятность существования в ней необнаруженных ошибок. Этот
противоречащий интуиции феномeн означает, что ошибки образуют класте-
ры, т. е. встречаются группами. С ростом числа ошибок, обнаруженных в
компоненте программы (например, в модуле, подсистеме, функции пользо-
вателя), увеличивается также вероятность существования в этой компоненте
еще не обнаруженных ошибок. Если при тестировании двух модулей в них
обнаружены одна и восемь ошибок соответственно, опыт показывает, что для
модуля с восьмью ошибками вероятность того, что в нем еще есть ошибки,
выше.
Необходимо поручать тестирование самым, способным программистам.
Тестирование, и в особенности проектирование тестов,— этап в разработке
программного обеспечения, требующий особенно творческого подхода. К со-
31