Чтение онлайн

ЖАНРЫ

tестирование dot com
Шрифт:

синтаксический баг (syntax bug).

Прелесть синтаксических багов заключается в том, что они, явля-

ясь ошибками в языке программирования, находятся компай-

лером (например, в случае с C++) автоматически. Последний

выдает на экран сообщение об ошибке и принципиально не соз-

Цикл разработки ПО

101

дает исполняемый файл, пока проблема не будет зафиксирована

(в скриптовых языках, таких, как Python, исполняемым файлом

является сам файл

с кодом и синтаксические баги находит интер-

претатор языка).

Пример

Вот первая программка любого изучающего C++:

1. #include <iostream.h> 2.

3. voidmain

4. {

5. cout<< "Hello, World!<< endl;

6. }

Текст этой программки находится в файле syntax_error.cpp. По-

пробуем ее скомпилировать:

~> C++ syntax error, cpp

syntax_error.cpp:5: unterminated string or character constant

syntaxerror.cpp: 5: possible real start of unterminated constant

Последние две строчки — это текст об ошибке, выданный ком-

пайлером из-за того, что мы не закрыли кавычки в строке 5 после

World! Никакого исполняемого файла создано не было. Если мы

исправим эту ошибку, то файл без проблем скомпилируется.

Тестировщики обязаны устройству Вселенной за то, что есть ло-

гические баги (logical bugs). Эти баги, как следует из их назва-

ния, — это ошибки в логике кода, т.е. код компилируется без син-

таксических ошибок, но фактический результат исполнения этого

кода не соответствует ожидаемому результату.

Пример

Спецификация:

"7.2. Пользователь должен ввести два целых числа от 1 до 12,

после чего программа выведет на экран их среднее арифмети-

ческое".

Код:

1. #include <iostream.h> 2.

3. voidmain

4. {

5. int first number = 0;

6. int secondjnumber = 0;

7. float average = 0.0;

102

Тестирование Дот Ком. Часть 1

8.

9. //get first number

10. cout« "Enter first number:";

11. cin » first_n umber;

12.

13.

14. //get second number

15. cout« "Enter second number:";

16. cin

» second number; 17.

18. //calculate average

19. average = firstjiumber+second_number/2.0; 20.

21. //output result

22. cout« "Average = "« average « endl; 23.

24. }

Тестирование:

Enter first number: 9 Enter

second number: 2 Average

=10

Согласно спецификации результатом исполнения программы

должно быть среднее арифметическое двух чисел, т.е. в нашем

случае 5,5 (ожидаемый результат). Фактический же результат

оказался равен 10.

5,5 не равно 10, соответственно у нас есть логический баг.

Проблема, кстати, в строке 19, которая должна была звучать так

(были пропущены скобки):

19. average = (first_number+second_number)/2.0.

Кстати, в приведенном пункте спека есть баг, так как непонятно, какое

максимально допустимое целое число: 11 или 12? Программист, увидев

этот баг, должен был сделать уточнение у продюсера и обязать того

исправить спек. Если максимальное число = 12, то точная формулировка

должна быть следующей: "7.2. Пользователь должен ввести два целых

числа от 1 до 12 включительно, после чего программа выведет на экран

их среднее арифметическое".

Кстати, программист заложил в коде еще один логический баг, так как

согласно спеку код должен принять только действительный ввод, кото-

рым являются целые числа 1 — 1 1 (или 1 — 12).

Кстати, спек имеет еще один баг: не сказано, как должна отреагировать

программа, если пользователь введет недействительный ввод, например

0, 13, "А", "#" или пустое место...

Цикл разработки ПО

103

Две последние вещи в разговоре о стадии кодирования.

Первая вещь

Как мы помним, на этой стадии тестировщики пишут тест-кейсы.

Поделиться с друзьями: