Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестирование программного обеспечения. Фундамен...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
935.81 Кб
Скачать

Глава I: Пример серии тестов 31

• Если программист допустит опечатку и вместо меньше 48 напишет меньше 38, программа примет не только символ /, но и девять дру­гих нецифровых символов с кодами от 38 до 47.

Для выявления этой ошибки можно проверить любой символ из этого диапазона, граничным значением которого будет код 47.

• Теперь посмотрим на самую большую цифру — 9 (АБСП-код 57). При работе с ней, вероятнее всего, может встретиться ошибка больше или равен 57 вместо равен 57. Если ввести 9, программа от­вергнет этот символ как нецифровой.

Такой код неверно работает с одной-единственной цифрой — ее и нужно проверить.

• Программист может захотеть записать второе условие иначе, как больше или равен 58, но по ошибке написать больше 58. Тогда про­грамма примет за цифру двоеточие.

• Еще одной опечаткой программиста может быть 75 вместо 57, тогда программа будет принимать за цифры все символы с кодами от 48 до 75. Эту ошибку можно обнаружить, проверив любой символ из указанного диапазона, но символа с граничным значением кода (двоеточия) будет вполне достаточно.

Для обнаружения любой ошибки, которую программист может допустить при анализе цифровых данных, достаточно проверки всего четырех граничных символов: /, 0, 9, и

Из приведенных в таблице на рис. 1.6 символов два последних мы ис­пользовали, чтобы выяснить, как программа реагирует на нецифровые данные. Тест сработал, а программа — нет. Но как быть с шестью пере­численными типами ошибок? Одной проверкой буквы А их не выявить. А буква Ь вообще ничем не поможет. Так что проверять нужно граничные символы (/, 0, 9, и :), поскольку, повторюсь, самыми эффективными яв­ляются тесты именно граничных значений.

Первый цикл тестирования. Итоги

Вы начали с простейшего из возможных тестов. Поскольку программа его прошла, вы разработали серию формальных тестов, чтобы проверить, как она работает с допустимыми данными. Эти тесты вы будете исполь­зовать и дальше. Поскольку часть проверок программа не прошла, на пла­нирование дальнейших серий тестов вы решили времени не тратить. Вместо этого вы провели несколько неформальных экспериментов и выяснили, что

32 Часть I: Основы

программа вообще очень нестабильна. Вы записали несколько замечаний, к которым обратитесь при тестировании следующей версии программы.

Если бы программа успешно прошла первую серию тестов, вы бы раз­работали вторую, более обстоятельную. Если бы программа снова показа­ла себя надежной, вы бы продолжили ее тестирование, пока не исчерпались бы идеи или отведенное время. Напоследок вы провели бы несколько бег­лых тестов, не входивших в ранее разработанные серии, и записали заме­чания на будущее.

Завершив тестирование и всю бумажную работу, стоит потратить еще немного времени, чтобы обдумать результаты. Вы выполнили самое оче­видное, но это еще только начало. У вас нет пока конкретного плана. Вы просто делали то, что первым приходило в голову. По ходу работы вы оп­ределили две линии атаки. Теперь же нужно выделить время на обдумыва­ние. Эго очень важно, даже если сроки сильно поджимают.

Второй цикл тестирования

Вы поговорили с программистом, и он сказал, что скорость работы про­граммы исключительно важна, а вот объем кода не имеет никакого значения. Резолюции программиста на ваших отчетах представлены на рис. 1.7.

1.

Ошибка проектирования:

На экране нет названия программы.

Резолюция:

Не будет исправлена.

2.

Ошибка проектирования:

На экране нет инструкций.

Резолюция:

Не будет исправлена. Примечание: Замечание верное, но вывод инструкций замедлит работу программы.

3.

Ошибка проектирования:

Как остановить программу?

Резолюция:

Исправлена. На экране отображается подсказка: “Для выхода нажмите <Ш+С>”.

4.

Ошибка кодирования:

Сумма (5) выводится в стороне от слагаемых.

Резолюция:

Исправлена.

5.

Ошибка кодирования:

Программа “зависает" на отрицательных числах.

Резолюция:

Исправлена. Программа будет складывать и отрицательные числа.

6.

Ошибка кодирования:

Программа интерпретирует третий введенный символ как нажатие <Еп1ег>.

Резолюция:

В работе (еще не исправлена).

7.

Ошибка кодирования:

Сбой при вводе нечисловых данных.

Резолюция:

Не проблема. Комментарий: “Не делайте этого".

8.

Ошибка кодирования:

Сбой при вводе управляющих символов.

Резолюция:

Не проблема. Комментарий: “См. отчет 7".

9.

Ошибка кодирования:

Сбой при нажатии функциональных клавиш.

Резолюция:

Не проблема. Комментарий: “См. отчет 7”.

РИСУНОК 1.7. Революции на отчетах первого цикла тестирования

Глава І: Пример серии тестов 33

Шаг 1. Прежде чем приступить к тестированию, внимательно прочтите резолюции программиста на ваших отчетах - вы узнаете, что нужно делать, а чего не нужно

Как видите, хорошо, что вы не разрабатывали тестов для проверки кода обработки ошибок: этого кода нет и не будет. Более того, хотя програм­ма и будет теперь обрабатывать отрицательные числа, она будет обраба­тывать их не все, а только до -9.

Числа от -10 до 199 длиной в три символа она по-прежнему не обра­батывает, интерпретируя третий символ как нажатие клавиши <Еп1ег>. Обратившись к разработанной ранее серии тестов на рис. 1.4, вы видите, что тесты с числами -99, -78 и -14 запускать не придется. Вместо -78 и -14 возьмите пару однозначных отрицательных чисел.

Очень часто программист просит протестировать остальную часть про­граммы, в то время как он занимается исправлением уже найденных оши­бок — и это разумно. Некоторые из запланированных тестов нет смысла проводить до исправления ошибки, с другими же вполне можно порабо­тать. Если ждать, пока можно будет провести “лучшие” из тестов, мож­но оставить без внимания целые области программы, на которые потом уже не хватит времени. В нашем примере можно протестировать числа между -1 и -9 — так вы хоть и не полностью, но проверите, как работа­ет сложение отрицательных чисел, вместо того чтобы опустить эту про­верку вообще.

Из резолюций на ваших отчетах вы увидите, какие тесты больше про­водить не нужно, а какие нужно заменить новыми. Станут ли резолюции программиста ключом к созданию новых серий тестов? Без сомнения.

Шаг 2. Проанализируйте комментарии к ошибкам, которые не будут исправлены. Возможно, следует провести дополнительное тестирование

В нашей программе хуже всего обстоит дело с обработкой ошибок. Программист не собирается исправлять ситуацию. Как же быть?

Чтобы добиться исправления ошибки, нужно продемонстрировать ситуацию, в которой ее появление абсолютно недопустимо.

Чтобы придумать самые показательные примеры недопустимого пове­дения программы, постарайтесь выявить суть ситуации.

2

34 Часть I: Основы

В нашем случае программа “зависает”, когда вы нажимаете определен­ные клавиши. Так она ведет себя с буквами, управляющими и функцио­нальными клавишами. Фактически программа “зависает” при вводе любого недопустимого (нецифрового) символа. Программист говорит, что таких символов вы вводить не должны. С вашей же точки зрения, программа должна вести себя вежливо и не заставлять вас перезапускать компьютер каждый раз, когда вы сделаете что-то не так. Прекрасно. Теперь вернем­ся назад. Программа некорректно ведет себя в ответ на нажатие некото­рых клавиш. Программист считает, что это не страшно, поскольку никто и не ждет, что программа примет эти клавиши.

А что, если программа “зависнет” в ответ на ввод символов, которые, по мнению пользователя, она должна принять? Если найти достаточно таких символов, программисту придется написать код для их обработки, а заодно уж он может обработать и остальные символы.

Подумаем, какие же клавиши люди могут нажимать при работе с арифметической программой. Здесь нужен мозговой штурм. Запишите все клавиши, которые человеку может прийти в голову нажать. Запишите, почему эти клавиши могут показаться уместными. Пусть вас не беспоко­ит, согласится ли программист с вашими предположениями — позднее вы еще пересмотрите свой список и отберете из него самое существенное. На рис. 1.8 показан список, который получился у нас.

• Цифры, конечно.

• И знак “минус”.

• Если можно нажимать “минус”, то можно и “плюс".

• Пробелы. Люди вводят перед числами пробелы, чтобы аккуратно выровнять их в столбик.

• Если можно вводить пробелы перед числом, то должно быть можно и после него.

• А как насчет арифметических операций, таких как * и / (4/3, например)?

• Знак доллара?

• Знак процента?

• Скобки - отрицательные числа часто заключают в скобки, как, например (1000) вместо -1000.

• Клавиша <ВаскЗрасе> - что, если вы случайно ввели не іу цифру?

• Клавиша <0е1е1е>.

• Клавиша сіпбєііХ Вы ввели 1 и хотите вернуться и ввесіи 7. чшбы получить 21.

• Клавиши управления курсором.

РИСУНОК 1.8. Мозговой штурм. Какие клавиши /кш. «км/иг и. шхочет нажать при вводе числа ?

Глава Г. Пример серии тестов 35

Некоторые из идей в нашем списке явно неудачны. Например, если сказать программисту, что программа не обрабатывает 4/3 + 2, он толь­ко посмеется. Но для первой версии списка это не имеет значения. Преж­де всего, важно ничего не пропустить. А что внести в отчет, вы решите чуть позже.

Шаг 3. Просмотрите записи, которые вы сделали в прошлый раз, добавьте к ним новые замечание, и приступайте к тестированию

Вам страшно хочется начать с того замечательного и очень сложного теста, который вы только что придумали, не так ли? Не торопитесь. Сна­чала повторите старые и нудные тесты и убедитесь, что программа по-пре­жнему может сложить 2 и 2 и не получить при этом 5. С вероятностью 1:2 программа не сработает или в ней возникнут новые неполадки. Поэтому обязательно протестируйте все сначала.

Вы провели все “формальные” серии тестов (см. рис. 1.4), модифици­ровав несколько примеров для проверки однозначных отрицательных чисел. Программа все их успешно прошла.

По ходу дела вы заметили, что программа отображает подсказку “Для выхода нажмите <С1х1+С>” после каждой операции сложения. На рис. 1.9 показано, что было на экране после сложения первых двух пар чисел.

Программист говорит, что программа должна работать быстро. Тогда все, на что тратится лишнее время, является ошибкой. Вы составили сле­дующий отчет.

10. Ошибка проектирования. На вывод на экран подсказки “Для выхода нажмите <С1г1+С>” тратится лишнее компьютерное время. По­скольку одной из задач разработки является создание очень быст­рой программы, это ошибка. Почему бы просто не написать “Для выхода нажмите <0:г1+С>” внизу экрана сразу при запуске про­граммы и никогда больше ничего не выводить в этой строчке? (И если это возможно, почему бы заодно не вывести также и заголо­вок программы и короткие инструкции?)

Среди ваших заметок есть напоминание проверить однобайтовые сум­мы. Это диапазон значений от -127 до 127 или от 0 до 255. Поскольку двузначных отрицательных чисел задавать нельзя, -127 в допустимый диапазон не попадает. Однако сложение 99 и 99 дает правильный резуль­тат, значит, все в порядке.

Однако не расслабляйтесь. Некоторые из тестов обязательно выявят про­блемы, и чем тщательнее вы продумаете свои действия, тем больше обна­ружите скрытых недостатков программы.