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

Поговорили с программистом, и он сказал, что скорость работы программы исключительно важна, а вот объём кода не имеет никакого значения. Резолюции программиста на отчётах тестировщика:

a) Ошибка проектирования: на экране нет названия программы.

Резолюция: не будет исправлена.

b) Ошибка проектирования: на экране нет инструкций.

Резолюция: не будет исправлена.

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

c) Ошибка проектирования: невозможность остановить программу.

Резолюция: исправлена; на экране отображается подсказка – “Для выхода нажмите <Ctrl + C>”.

d) Ошибка кодирования: сумма (5) выводится в сторонеот слагаемых.

Резолюция: исправлена.

e) Ошибка кодирования: программа “зависает” на отрицательных числах.

Резолюция: исправлена; программа будет складывать и отрицательные числа.

f) Ошибка кодирования: программа интерпретирует третий введенный символ как нажатие <Enter>.

Резолюция: в работе (ещё не исправлена).

g) Ошибка кодирования: сбой при вводе нечисловых данных.

Резолюция: не проблема.

Примечание: не выполняйтеэтой операции.

h) Ошибка кодирования: сбой при вводе управляющих символов.

Резолюция: не проблема.

Примечание: не используйте управляющие символы.

i) Ошибка кодирования: сбой при нажатии функциональных клавиш.

Резолюция: не проблема.

Примечание: не используйте функциональные клавиши.

Шаг 1.Ознакомление с резолюцией программиста.

Так ознакомившись с резолюцией программиста, узнаете, что нужно делать, а чего не нужно. Как видите, хорошо, что не разрабатывали тестов для проверки кода обработки ошибок: этого кода нет и не будет. Более того, хотя программа и будет теперь обрабатывать отрицательные числа, она будет обрабатывать их не все, а только до -9. Числа от -10 до 199 длиной в три символа она по-прежнему не обрабатывает, интерпретируя третий символ как нажатие клавиши <Enter>. Обратившись к разработанной ранее серии тестов из таблицы 6, видно, что тесты с числами -99, -78 и -14 запускать не придётся. Вместо -78 и -14 необходимо взять пару однозначных отрицательных чисел.

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

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

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

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

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

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

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

a) цифры;

b) знак минус (‘-’) ;

c) знак плюс (‘+’) ;

d) пробел до числа;

e) пробел после числа;

f) операции умножения и деления без остатка (‘*’, ‘/’) ;

g) знак доллара (‘$’);

h) знак процента (‘%’) ;

i) скобки;

j) клавиша <Backspace>;

k) клавиша <Detete>;

l) клавиша <lnsert>;

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

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

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

По характеру дела видно, что программа отображает подсказку “Для выхода нажмите «Ctrl + C»” по каждой операции сложения. Вот что отображается при этом на экране:

? 99

? 99

198 –Для выхода нажмите «Ctrl + C»

? -9

? -9

-18 –Для выхода нажмите «Ctrl + C»

? _

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

Составляете отчёты по следующим ошибкам:

a) Ошибка проектирования. Для вывода на экран подсказки тратится лишнее компьютерное время. Поскольку одной из задач разработки является создание очень быстрой программы, это ошибка. Почему бы просто не написать “Для выхода нажмите «Ctrl + C»” внизу экрана, сразу при запуске программы и никогда больше ничего не выводить в этой строчке? Если программист достаточно аккуратен, большая часть тестов, включая и те, которые потребовали наибольшей изобретательности, не выявит ошибок.

b) Ошибка кодирования. Проблема такова – в ответ на нажатие клавиш редактирования и других предположительно допустимых клавиш программа “зависает”. Предлагаемое исправление – проверять каждый вводимый символ. Недопустимые символы игнорировать или выводить сообщение об ошибке.

Хороший тестировщик – не тот, кто выявит больше всего ошибок, и не тот, кто заставит смутиться даже самого первоклассного программиста. Лучшим является тот, кто добьётся исправления наибольшего количества ошибок.

Варианты задания к лабораторной работе:

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

Второй цикл тестирования - student2.ru и Второй цикл тестирования - student2.ru оложительны.

2. Вычисление факториала неотрицательного целого числа.

3. Вычисление чисел Фибоначчи.

4. Поиск заданного символа в строке.

5. Выполнение конкатенации (сцепления) строк.

6. Определить частное q и остаток r от деления x на y.

7. Линейный поиск в упорядоченном по возрастанию элементов массиве A[1..n]. Определить порядковый номер m некоторого значения х.

8. Поиск значения х в двумерном массиве.

9. Написать программу, которая по данному фиксированному массиву B[0..n – 1], где

n > 0, записывает в d число нечётных значений в B[0..n – 1].

10. Нахождение наибольшего целого числа по данному фиксированному целому числу

m > 0, которое не больше n, в массиве целых чисел.

11. Суммирование элементов массива B[0..n – 1] , где n > 0.

12. Вставка пробелов (выравнивание строки текста по правому краю).

13. Определение максимальной возрастающей подпоследовательности значений, идущих не обязательно подряд.

14. Перестановка двух неперекрывающихся сегментов массива равного размера.

15. Подсчёт числа листьев в дереве.

16. Удаление лишних пробелов в тексте.

17. Выполнение арифметических операций над комплексными числами.

Контрольные вопросы:

1. Что вы понимаете под тестированием и верификацией программных продуктов?

2. Какие типы ошибок существуют?

3. Что такое классы тестов и для чего они предназначены?

4. На какие шаги можно разбить первый цикл тестирования любой программы?

5. Для чего нужен второй цикл тестирования?


Наши рекомендации