24 Часть I: Основы
Эти тесты охватывают все допустимые входные данные программы —
пары чисел, которые ей полагается складывать правильно.
В первом тесте вы ввели два числа и проверили результат. Фактичес-
ки все оставшиеся 39600 тестов точно такие же. Выполнять их все было
бы безумием. На рис. 1.4 для тестирования программы предлагается во-
семь примеров. Почему только восемь и почему именно таких? Прежде
всего, тесты были подобраны так, чтобы каждая цифра встречалась в них
хотя бы один раз. Кроме того, мы подобрали по одной комбинации чи-
сел на каждую из вероятных проблем. А чтобы определить, на каких дан-
ных вероятнее всего возникнут проблемы, эффективнее всего проверить
граничные условия.
Количество возможных тестов (39601) вычисляется так. В допустимом
диапазоне от -99 до 99 всего 199 чисел. Любое из них может стоять на
первом месте и любое — на втором. Всего получается 199
2
= 39601 пар
чисел. Заметьте, что такое количество тестов выходит даже без учета
любых чуть более сложных действий пользователя, как, например, нажа-
тия клавиши <BackSpace>. Если же допустить использование клавиш
редактирования, количество возможных тестов вырастет многократно.
Задача определения количества возможных тестов относится к области
математики, именуемой комбинаторным анализом. Обычно задача эта не
сложная — необходимые формулы можно найти в любом учебнике по
теории вероятности или комбинаторике.
Если вы проверяете комбинацию 2 + 3, а затем 3 + 4, ваши тесты хотя
и не в точности одинаковы, но очень близки. Оба они проверяют, как ре-
агирует программа на пару однозначных положительных чисел. И если
программа пройдет первый тест, наиболее вероятно, что она пройдет и
второй. Поэтому из огромного количества возможных тестов нужно выби-
рать только наиболее важные.
Из двух тестов, от которых ожидается один и тот же
результат, проводите только один.
Если от двух тестов ожидается получить один и тот же результат,
значит, они принадлежат к одному классу. В нашем случае 81 тест отно-
сится к классу "пара однозначных положительных чисел". Как только
удается выделить класс, т.е. группу однотипных тестов, можно провести
несколько из них и проигнорировать остальные. Для отбора проводимых
тестов есть важное правило.
Для выполнения всегда выбирайте из класса те тесты, на
которых вероятнее всего ожидается сбой программы.
Глава 1: Пример серии тестов 25
Лучше всего подходят для тестирования примеры, лежащие на грани-
це представленного классом диапазона значений. Именно на граничных
значениях программы сбоят чаще всего. Например, если программа пред-
назначена для сложения двузначных чисел, одним из граничных значе-
ний, которые она должна правильно обрабатывать, является число 99.
Классом можно назвать группу значений, которые программа обраба-
тывает одним и тем же способом. А граничными значениями класса явля-
ются те входные данные, на которых программа меняет свое поведение.
Однако граничные значения могут быть там, где вы их совсем не
ждете, а там, где им положено быть, их в действительности может и не
оказаться. Не всегда программа меняет свое поведение именно там, где
предполагает программист, и именно в этом причина большинства оши-
бок. При программировании граничных условий случайная ошибка очень
вероятна, поэтому такие точки следует проверять наиболее тщательно.
Волшебной формулы для объединения тестов в группы и определения
граничных условий не существует. Это умение приходит только с опы-
том. Прочитав программный код, можно найти в нем то, чего при исполь-
зовании программы вы не сможете даже предположить. Однако проверять
те критические точки, которые можно определить по листингу, — это
прежде всего работа программиста. А ваша задача — проанализировать
программу с другой точки зрения, чтобы выявить те критические точки,
которые программист пропустил. Поэтому классы возможных тестов вам
следует выделять, исходя прежде всего из внешнего поведения програм-
мы. В результате набор тестов будет отличаться от того, который можно
составить по листингу программы, — именно в этом суть вашей задачи.
Напоследок упомяну еще об одном важном моменте. Границу значе-
ний обязательно нужно протестировать с двух сторон. Программисты
часто убеждаются, что критический фрагмент кода работает на одном из
значений и забывают это сделать на втором. Здесь они пропускают ошиб-
ки, которые вы пропустить не должны.
Шаг 3. Проверим допустимые значения и посмотрим,
что происходит
Серия тестов, приведенных на рис. 1.4, охватывает только допустимые
значения входных данных программы. На следующем этапе тестирования
можно создать такую же серию тестов для недопустимых значений. Еще
одна серия тестов может быть предназначена для проверки редактирова-
ния чисел: вы вводите значение, затем изменяете его и только после это-
го нажимаете <Enter>. Однако прежде всего выполните простейшие
тесты, приведенные на рис. 1.4.