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
Две последние вещи в разговоре о стадии кодирования.
Первая вещь
Как мы помним, на этой стадии тестировщики пишут тест-кейсы.