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).