Тесты, базирующиеся на блок-схеме
Тестирование как деятельность, выполняемая для оценки и улучшения качества программного обеспечения. Существующие техники, их сравнительная характеристика. Пример тестирования программы о том, является ли год високосным, нахождение корня уравнения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 25.12.2014 |
Размер файла | 161,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Тесты, базирующиеся на блок-схеме
Введение
Тестирование - деятельность, выполняемая для оценки и улучшения качества программного обеспечения. Эта деятельность, в общем случае, базируется на обнаружении дефектов и проблем в программных системах. Тестирование программных систем состоит из динамической верификации поведения программ на конечном (ограниченном) наборе тестов, выбранных соответствующим образом из обычно выполняемых действий прикладной области и обеспечивающих проверку соответствия ожидаемому поведению системы.
Общий взгляд на тестирование программного обеспечения последние годы активно эволюционировал, становясь все более конструктивным, прагматичным и приближенным к реалиям современных проектов разработки программных систем. Тестирование более не рассматривается как деятельность, начинающаяся только после завершения фазы конструирования. Сегодня тестирование рассматривается как деятельность, которую необходимо проводить на протяжении всего процесса разработки и сопровождения и является важной частью конструирования программных продуктов.
Действительно, планирование тестирования должно начинаться на ранних стадиях работы с требованиями, необходимо систематически и постоянно развивать и уточнять планы тестов и соответствующие процедуры тестирования. Даже сами по себе сценарии тестирования оказываются очень полезными для тех, кто занимается проектированием, позволяя выделять те аспекты требований, которые могут неоднозначно интерпретироваться или даже быть противоречивыми.
1. Тесты, базирующиеся на блок-схеме
Техники тестирования сильно различаются по своей специфике, которую могут определять, например направленность на тестирование конкретного объекта или на проверку определенного результата.
Тесты, базирующиеся на блок-схеме относятся к группе техник, ориентированных на код, т.е. они основаны на анализе исходного кода. Тестами предусматриваются возможные сценарии развития событий, исходя из покрытия всех условий и решений блок-схемы кода. В какой-то степени напоминает тесты на основе конечного автомата. Отличие - в источнике набора тестов.
Максимальная отдача от тестов на основе блок-схемы получается когда тесты покрывают различные пути блок-схемы - по сути, сценарии потоков работ (поведения) тестируемой системы. Адекватность таких тестов оценивается как процент покрытия всех возможных путей блок-схемы.
2. Примеры тестов на основе блок-схем
Пример тестирования программы о том, является ли год високосным
Рассмотрим следующий блок кода.
if (year% 400 == 0)
{
Console. WriteLine («Год високосный \n»);
}
else if (year% 100 == 0)
{
Console. WriteLine («Год не високосный \n»);
}
else if (year% 4 == 0)
{
Console. WriteLine («Год високосный \n»);
}
else
Console. WriteLine («Год не високосный \n»);
В данном фрагменте программы происходит проверка числа в переменной year, чтобы узнать является ли номер года, введенного в эту переменную, високосным.
Блок-схема к этому коду выглядит следующим образом
Рисунок 1. Блок-схема «Високосный год»
Для максимальной отдачи и покрытия тестами всех ветвей блок-схемы используем следующие тестовые данные:
· Вводим 1600 год. Выполняется проверка первого условия в результате которого программа вывела результат положительного исхода о том, что год является високосным.
· Вводим 500 год. Получаем отрицательный исход после первого условия, переходим ко второму условию и получаем положительный исход, в результате которого программа выводит информацию, что год не является високосным.
· Вводим 2012 год. Получаем отрицательные исходы у двух первых условий и переходим к последнему условию, в результате положительного исхода которого, программа выводит информацию о том, что год является високосным.
· Вводим 99 год. Получаем отрицательные исходы у двух первых условий и переходим к последнему условию, в результате отрицательного исхода которого, программа выводит информацию о том, что год не является високосным.
От данного набора тестов мы получаем максимальную отдачу, так как они покрывают все сценарии блок-схемы, основанной на представленном блоке кода. Стоит сказать, что мы тестировали лишь логику работы программы, чего достаточно для нашего примера, в ином случаем, нам бы пришлось рисовать блок-схему, включающую в себя условия проверки корректности вводимых данных.
Пример тестирования программы о нахождении корня уравнения на отрезке с заданной точностью
Рассмотрим следующий блок кода.
public static double func (double x)
{
return -2.4 * x * x * x - 28.512 * x * x - 40.6272 * x + 44.928;
}
public static double divide (double x1, double x2, double e) /* 8 */
{
double res = 0;
while (Math. Abs (x2 - x1) > e) /* 9 */
{
res = (x1 + x2) / 2; /* 11 */
if (func(res) >= 0) /* 12 */
x1 = res; /* 13 */
else
x2 = res; /* 14 */
}
return (x1 + x2 / 2.0); /* 10 */
}
static void Main (string[] args)
{
while (true)
{
double x1 = 0.0, /* 1 */
x2 = 0.0,
e = 0.0;
string left = «»,
right = «»,
accurate = «»;
Console. Write («Введите левую координату отрезка»); left = Console. ReadLine(); /* 2 */
Console. Write («Введите правую координату отрезка»); right = Console. ReadLine();
Console. Write («Введите точность»); accurate = Console. ReadLine();
if (! Double. TryParse (left, out x1) ||! Double. TryParse (right, out x2) ||! Double. TryParse (accurate, out e)) /* 3 */
Console. WriteLine («Данные введены неверно»); /* 4 */
else if (e <= 0) /* 5 */
Console. WriteLine («Точность должна быть больше нуля»); /* 6 */
else
{
double Answer = divide (x1, x2, e); /* 7 */
Console. Write («Ответ: {0} \n», Answer); /* 15 */
}
Для данного программы используем блок-схему, которая будет соотноситься с кодом с помощью пронумерованных блоков, каждому из которых соответствует такой же номер блока кода.
тестирование программный уравнение
Рисунок 2. «Программа о нахождении корня уравнения»
Используем следующие тестовые данные (x1, x2, e):
· 123; -3; 0. При таких введенных данных на блоке 3 программа обнаружит ошибку и в 4 блоке будет предоставлена информация, которая сообщит о проблеме и закончит текущую итерацию выполнения программы.
· -1; -2; -3. При таких данных программа дойдет до 5 блока, обнаружит ошибку в допустимом значении переменной, а на 6 блоке выведет информацию и закончит текущую итерацию выполнения программы.
· 30; 20; 15. При таком наборе тестовых данных программа дойдет до блока номер 9 и поскольку не будет выполняться условие, что модуль разности x2 и x1 больше точности e, программа пойдет в блок 10 и затем завершит итерацию выполнения в блоке 15.
· 30; 20; 1. При таких данных программа дойдет до блока 12, после невыполнения условия в котором она попадет в блок 14, а затем обратно в блок 9, и так до тех пор пока на 12 блоке, не выполнится условие и программа на закончит работу в блоке 13.
Необходимо определить пересечение двух прямых на плоскости. Каждая прямая задается координатами двух точек, лежащих на ней.
Рассмотрит следующий блок кода.
if((x1 > 999) || (y1 > 999) || (x2 > 999) || (y2 > 999) || (x3 > 999) || (y3 > 999) || (x4 > 999) || (y4 > 999) ||(x1 < -999) || (y1 < -999) || (x2 < -999) || (y2 < -999) || (x3 < -999) || (y3 < -999) || (x4 < -999) || (y4 < -999)) /* 1 */
Console. WriteLine («Введенные данные выходят за границы требуемого диапазона»); /* 2 */
double a1 = y1 - y2,
b1 = x2 - x1,
c1 = x1 * y2 - x2 * y1,
a2 = y3 - y4,
b2 = x4 - x3,
c2 = x3 * y4 - x4 * y3;
if ((x1 == x2 && y1 == y2) || (x3 == x4) && (y3 == y4)) /* 3 */
Console. WriteLine («Прямые вырождены в точку»); /* 4 */
else if (((a1 * b2) == (a2 * b1)) && ((a1 * c2) == (a2 * c1))) /* 5 */
Console. WriteLine («Прямые совпадают»); /* 6 */
else if ((a1 * b2) == (a2 * b1)) /* 7 */
Console. WriteLine («Прямые параллельны»); /* 8 */
else /* 9 */
{
double X = (c1 * b2 - c2 * b1) / (b1 * a2 - b2 * a1), /* 10 */
Y = (c2 * a1 - c1 * a2) / (b1 * a2 - b2 * a1);
Console. WriteLine («X = {0}, Y = {1}», X, Y); /* 11 */
}
Для данного программы используем блок-схему, которая будет соотноситься с кодом с помощью пронумерованных блоков, каждому из которых соответствует такой же номер блока кода.
Рисунок 3. «Программа о пересечении двух прямых на плоскости»
Используем следующие тестовые данные:
· 1001; 1002; 1003; 1004; -1001; -1002; -1003; -1004. После проверки в блоке 1, программа попадет в блок 2, где выведется сообщение о нарушении границ диапазона.
· 50, 2, 50, 2, 30, 6, 30, 6. При таком наборе тестовых данных программа зайдет в блок 3 и далее попадет в блок 4, после чего выведет информационное сообщение о вырожденности случая и закончит свою работу.
· 5; 4; 7; 4; 3; 4; 6; 4. При таких данных программа дойдет до блока 5 и оттуда попадет в блок 6, и закончит работу, выведя сообщение о том, что прямые совпадают.
· 5; 2; 5; 7; 8; 1; 8; 7. При таком наборе тестовых данных программа зайдет в блок 7, откуда попадет в блок 8 и выведя сообщение о том, что прямые параллельны, закончит работу.
· 2; 1; 6; 1; 4; 5; 4; -1. При таких данных программа дойдет до блока 9, без исключительных ситуаций, произойдет расчет точки пересечения и программа закончит работу, выведя на экран точку пересечения с координатами (4; 1).
Заключение
В ходе создания данной курсовой работы мною был изучен и применен на практике метод тестирования, на основе блок-схем. Данный вид тестирования является весьма наглядным и позволяет просмотреть и протестировать все сценарии выполнения программы, что делает его эффективным механизмом поиска ошибок в программе.
Список литературы
1. Канер, С. Тестирование программного обеспечения / С. Канер, Дж. Фолк, Енг. Нгуен. - К: ДиаСофт, 2000.
2. Шимаров, В.А. Тестирование программ: цели и особенности инструментальной поддержки // Программное обеспечение ЭВМ / АН БССР. 1994. - Вып. 100 - с. 19-43
3. Марченко, А.Л. Основы программирования на C# 2.0 / А.Л. Марченко. - М.: БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2007
4. Веб-сайт: http://www.zyxware.com/articles/3436/why-error-guessing-is-significant-in-testing
5. Веб-сайт: http://www.softwaretestingsoftware.com/error-guessing/
Размещено на Allbest.ru
Подобные документы
Изучение и применение на практике метода тестирования на основе блок-схем. Рассмотрение примера тестирования программы о том, является ли год високосным; о нахождении корня уравнения на отрезке с заданной точностью; о пересечении двух прямых на плоскости.
курсовая работа [318,7 K], добавлен 20.09.2014Неразрешимость проблемы тестирования программного обеспечения. Виды и уровни тестирования. Стратегии восходящего и нисходящего тестирования. Методы "белого" и "черного" ящика. Автоматизированное и ручное тестирование. Разработка через тестирование.
курсовая работа [112,2 K], добавлен 22.03.2015Тестирование как составляющая часть процесса отладки программного обеспечения, его роль для обеспечения качества продукта. Обнаружение ошибок в программах, выявление причин их возникновения. Подходы к формулированию критериев полноты тестирования.
курсовая работа [1,6 M], добавлен 20.12.2012Комплексное функциональное и структурное тестирование программного продукта - граф-программа решения квадратного уравнения. Постановка задачи структурного тестирования маршрутов. Заключение о типе и причине ошибки, предложение по ее исправлению.
курсовая работа [2,8 M], добавлен 05.01.2013Применение методов касательных (Ньютона) и комбинированного (хорд и касательных) для определения корня уравнения. Разработка алгоритма решения и его описание его в виде блок-схем. Тексты программ на языке Delphi. тестовый пример и результат его решения.
курсовая работа [923,7 K], добавлен 15.06.2013Изучение различных видов тестирования программного обеспечения. Выявление в программной системе скрытых дефектов до того, как она будет сдана заказчику. Тестирование методом черного ящика. Требования, предъявляемые к процессу тестирования больших систем.
курсовая работа [3,0 M], добавлен 19.11.2009Автоматизация регрессионного тестирования. Классификация по способу сопровождения. Построение потового графа. Набор модульных тестов. Покрытие тестами классов эквивалентности. Тестирование методом "черного ящика". Тесты регрессии на "закрытых" багах.
курсовая работа [1,8 M], добавлен 16.01.2017История возникновения тестирования программного обеспечения, основные цели и особенности его проведения. Виды и типы тестирования, уровни его автоматизации. Использование и исследование необходимых технологий. Полный цикл прогона всей системы мониторинга.
дипломная работа [1,7 M], добавлен 03.05.2018История развития и виды тестирования программного обеспечения. Инсталляционное, регрессионное, конфигурационное, интеграционное, локализационное, модульное тестирование. Методы сокращения трудоемкости модульного тестирования разрабатываемого приложения.
курсовая работа [309,5 K], добавлен 16.12.2015Развитие аппаратных компьютерных средств - задача первых трех десятилетий компьютерной эры. Процесс тестирования как составляющая процесса обеспечения качества разработки ПО. Принципы и критерии, предъявляемые к тестированию программного обеспечения.
курсовая работа [319,5 K], добавлен 25.05.2009