Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Первая стадия тестирования: тестирование во время написания кода (основные принципы).

Поиск

Тестирование - это... а)Систематические и настойчивые попытки сломить сопротивление нормально работающей программы и заставить её сделать ошибку.

б)Процесс, позволяющий доказать наличие ошибок в программе, позволяющий доказать их отсутствие.

Виды тестирования: 1)Систематическое тестирование

2)Обдумывание возможных проблем по ходу написания кода

3)Автоматизация тестирования.

Принципы: 1) Проверяйте граничные условия и предельные случаи:

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

int i;

char s[MAX];

for (i=0; (s[i]=getChar())!= '\n' && i< MAX-1; ++i);

s(--i)='\0'

 

Первая проверка граничного условия - ввод пустой строки '\n'

2) Используйте исключения/контрольные условия в зависимости от средств языка.

C#/Java - генерирование и обработка исключений

C/C++ - проверка пред и постусловий(заголовочный файл <assert.h>)

3) Предусматривайте "невозможные ситуации"

Пример: код обработки экзаменационных оценок

if (grade<0 || grade> 100) // невозможный случай

letter ='?';

else if (grade>=90)

letter = 'A';

else...

4) Всегда можно предотвратить или обработать такие ситуации, как нулевые значения указателей, выход за пределы массивов, деление на ноль и т.д.

Проверяйте коды ошибок, возвращаемые из функций. Особое внимание стоит уделить функциям для работы с файлами, потоками и т.д.

 

16. Систематическое тестирование. Привести пример полного набора тестов.

Тестирование – это систематические и настойчивые попытки сломить сопротивление нормально работающей программы и заставить её сделать ошибку.

Тестирование – это процесс, позволяющий доказать наличие ошибок в программе, но не позволяющий доказать их отсутствие.

Три слона тестирования: систематическое тестирование, автоматизация тестирования, обдумывание возможных проблем по ходу написания кода.

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

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

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

Первый шаг, по крайней мере для маленьких программ и отдельных функций, — расширение тестов на граничные условия, описанных в предыдущем разделе: систематическое тестирование отдельных случаев.

Предположим, что у нас есть функция, осуществляющая двоичный поиск в массиве целых чисел. Начнем со следующих тестов:

поиск в пустом массиве;

поиск в массиве с одним элементом — пробное значение:
- меньше чем элемент массиша;
- равно элементу массива;
- больше чем элемент массива;

поиск в массиве с двумя элементами — пробные значения:
- тестируем все пять возможных вариантов;

проверяем поведение при дублировании элемента — пробные значения:
- меньше значения в массиве;
- равно значению в массиве;
- больше значения в массиве;

поиск в массиве с тремя элементами (так же, как и с двумя);

поиск в массиве с четырьмя элементами (так же, как с двумя и тремя).

Если функция пройдет эти тесты без ошибок, она, по всей видимости, находится в неплохой форме, однако ее можно тестировать и дальше.

Четко определите, чего вы ожидаете на выходе теста. При проведении всех тестов вы должны четко знать правильный результат; если вы его не знаете, то напрасно теряете время.Однако для большинства программ работоспособность определить труднее, например: для компиляторов, численных алгоритмов, графики и т. п. Для таких программ необходимо сравнивать результаты тестов с заранее известными значениями.

Для теста компилятора скомпилируйте и запустите тестовые файлы. Результаты работы этих программ надо сравнить с заранее определенными значениями.

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

Для тестирования графической программы недостаточно удостовериться, что она в состоянии нарисовать ящик; вместо этого прочтите этот ящик обратно с экрана и проверьте, что его стороны находятся там, где требуется.

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

Проверяйте свойства сохранности данных. Многие программы сохраняют некоторые свойства вводимых данных. Инструменты вроде we (подсчитывает строки, слова и символы) и sum (вычисляет контрольную сумму) помогут удостовериться в том, что вывод имеет тот же размер, то же количество слов или те же байты в некотором порядке и т. п. Другие программы проверяют файлы на идентичность (стр) или перечисляют их различия (cliff). Эти программы (или сходные с ними) доступны в большинстве сред программирования, и пренебрегать ими не стоит.

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

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



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 410; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.21.237 (0.007 с.)