лекции, страница 9

PDF-файл лекции, страница 9 Тестирование на основе моделей (63507): Лекции - 9 семестр (1 семестр магистратуры)лекции: Тестирование на основе моделей - PDF, страница 9 (63507) - СтудИзба2020-08-21СтудИзба

Описание файла

PDF-файл из архива "лекции", который расположен в категории "". Всё это находится в предмете "тестирование на основе моделей" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 9 страницы из PDF

Поскольку в большинстве современных языковпрограммирования принято писать не более одной инструкции в строке, эта метрика чащевсего коррелирует с метрикой покрытия строк исходного кода. Однако всегда при разговорео строках кода стоит уточнять, насколько они соответствуют инструкциям, потому что частьстрок содержит декларативную, неисполняемую информацию, и информация обинструкциях позволяет точнее оценить ситуацию. В том случае, если часть инструкций недостижима, т.е. не может быть выполнена ни при каких условиях, долю покрытыхинструкций определяют только по отношению ко всем достижимым инструкциям.Рассмотрим следующий пример.1234567int gcd(int a, int b){if(a == 0)return b;if(b == 0)return a;if(a > 0 && b < 0 || a < 0 && b > 0)89101112131415161718192021222324b = -b;while(b != 0){if(b > a && a > 0 || b < a && a < 0){a = b-a;b = b-a;a = a+b;}b = a-b;a = a-b;}return a;}Приведенная функция вычисляет наибольший общий делитель своих аргументов.При вызове этой функции с аргументами 0 и 1 выполняются только инструкции в строках3 и 4.

При вызове с аргументами 1 и 0 будут выполнены строки 3, 5, 6. При вызове саргументами 1 и –2 выполняются строки 3, 5, 7, 8, 10, 12, 14, 15, 16, 19, 20, 23. Такимобразом, набор тестовых данных, состоящий из пар <0, 1>, <1, 0>, <1, –2> обеспечиваетполное покрытие инструкций этой функции.Заметим, что вместо <1, –2> можно было бы использовать два набора аргументов,например, <1, –1> и <1, 2>, первый из которых покрывает инструкцию 8, но не покрывает 14,15, 16, а второй — покрывает эти три инструкции. С точки зрения получаемого покрытия всеравно, какой набор тестовых данных выбрать.

Однако могут быть существенны другиеаспекты, например, время работы тестового набора и удобство анализа результатовтестирования. Время выполнения тестов обычно сокращается при уменьшении ихколичества, но сложный тест, эквивалентный по покрытию нескольким простым, в рядеслучаев может выполняться дольше, чем все они вместе взятые. С точки зрения удобстваанализа результатов, чем проще тесты, тем лучше, поскольку меньше различных факторовприходится рассматривать при локализации ошибки, найденной таким тестом.В примерах, приведенных ниже, обычно используются наиболее компактные полныетестовые наборы для заданной метрики, но на практике всегда стоит рассмотреть вопросыэффективности выполнения тестов и удобства анализа результатов, прежде чем пытатьсяминимизировать их количество.Для обнаружения всех ошибок покрытия 100% инструкций недостаточно. В следующемпримере приведен код функции, которая должна по значению целого числа печатать егопростую характеристику — ноль это, четное или нечетное число, положительное илиотрицательное.

В этом коде пропущена вставка слова «нечетное» в описание нечетныхчисел. Однако тесты с входными данными 0, 2 и –2 дадут 100% покрытия строк и необнаружат никаких ошибок.1234567891011121314String classifier(int n){StringBuffer s = new StringBuffer();if(n == 0)return "ноль";if(n%2 == 0)s.append("четное ");if(n < 0)s.append("отрицательное");elses.append("положительное");151617return s.toString();}Проблема здесь в том, что определенный код ошибочно пропущен, а покрытиеинструкций, естественно, не гарантирует обнаружения пропущенных инструкций, посколькуоно вычисляется только по имеющимся.

Чтобы решить эту проблему, используют покрытиеветвей.Для определения ветвей нужно рассмотреть граф потока управления программы. Графпотока управления для приведенного выше примера изображен ниже. Для пояснений ублоков кода, которые всегда выполняются в одной последовательности, помещенысоответствующие инструкции. Каждый условный оператор (также как и оператор цикла иливыбора) имеет несколько ребер графа, ведущих из него, в соответствии с возможным ходомвыполнения инструкций, то есть определяет разветвление потока управления. Каждое ребро,выходящее из вершины графа, из которой выходят и другие ребра, называется ветвью.Условному оператору соответствуют два выходящих из его вершины ребра, операторупроверки условия цикла — тоже два (выйти из цикла или нет), а оператору выбора можетсоответствовать много выходящих ребер — по числу указанных вариантов значенийвыражения, по которому осуществляется выбор.StringBuffer s = new StringBuffer();AданетBn == 0Creturn "ноль";данетn%2 == 0Ds.append("четное ");Eдаn < 0нетFs.append("отрицательное");s.append("положительное");return s.toString();Покрыть ветвь означает обеспечить такой ход выполнения инструкций, что послеинструкции ветвления, которая является начальной вершиной этой ветви, выполнитсяинструкция в концевой вершине ветви.

Недостижимой считается ветвь, которая не можетбыть покрыта ни при каком выполнении кода. Метрика покрытия ветвей (branch coverageили decision coverage) вычисляется аналогично покрытию инструкций — это доля покрытыхв ходе теста ветвей по отношению к общему количеству достижимых ветвей.В рассматриваемом примере имеется шесть ветвей — на схеме графа они помеченылатинскими буквами. Для каждой ветви, кроме D, есть соответствующий набор инструкций,который выполняется, когда покрывается эта ветвь. В нашем случае концевая вершина ветвиD соответствует условному оператору, который выполнится и при покрытии другой ветви.Поэтому покрытие всех инструкций не гарантирует покрытия всех ветвей.

Для полногопокрытия ветвей во втором примере можно использовать, например, тестовые данные 0, 1, 2и –2. Тест, использующий значение параметра 1, покажет, что для нечетных чиселсоответствующая пометка не выдается.Однако верно, что, если тесты дают 100% покрытия ветвей, они же всегда дадут и 100%покрытия инструкций. Для величин покрытия, меньших 100%, никаких общих соотношениймежду покрытием инструкций и ветвей указать нельзя. С одной стороны, количествоинструкций может значительно превышать количество ветвей, с другой стороны, половинаветвей программы может не содержать инструкций, как в приведенном примере. Поэтомупокрытие 95% инструкций может соответствовать только 5% покрытых ветвей и наоборот,покрыв 95% ветвей, можно покрыть только 5% инструкций.Но тот факт, что 100% покрытие ветвей автоматически означает 100% покрытияинструкций, уже достаточно важен.

Он показывает, что метрика покрытия ветвей «негрубее» метрики покрытия инструкций, выделяет не меньше разнообразных ситуаций. Если100% покрытия по одной метрике тестового покрытия влечет 100% покрытия по другойметрике, говорят, что первая метрика сильнее или тоньше. Соответственно, вторая слабееили грубее первой. Если одна метрика сильнее другой, а та тоже сильнее первой, ониэквивалентны. В этой ситуации все равно, какую из них использовать, если нас интересуеттолько полное, 100% покрытие.

Метрика покрытия ветвей сильнее метрики покрытияинструкций, а обратное не верно. Поэтому при достижении 100% покрытия ветвейтестирование в общем случае оказывается более полным, чем при покрытии 100%инструкций.Чтобы покрыть все ветви в коде, вычисляющем наибольший общий делитель, тоже нужнодополнить набор тестов, покрывающий все инструкции, например, взять тестовые данные<0, 1>, <1, 0>, <1, –2>, <1, 2>. Чтобы убедиться в этом, достаточно изучить графа потокауправления этого кода, представленный ниже. В нем вершины, соответствующие операторамветвления и выхода из тела функции помечены номерами строк, содержащих эти операторы.В этом примере две ветви — отрицательные ветви для условных операторов в строках 7 и 12— тоже не содержат соответствующих инструкций.34567101223Допустим, однако, что мы, исправив последний пример, нечаянно внесли в него еще однуошибку.

Теперь нечетные числа помечаются как надо, но условие пометки отрицательныхчисел неправильное.12345678910111213141516171819String classifier(int n){StringBuffer s = new StringBuffer();if(n == 0)return "ноль";if(n%2 == 0)s.append("четное ");elses.append("нечетное ");if(n < 0 && n%2 == 0)s.append("отрицательное");elses.append("положительное");return s.toString();}Набор тестовых данных 0, 1, 2, –2, по-прежнему покрывающий 100% ветвей, необнаруживает такую ошибку. Чтобы выявить ее, необходимо использовать тесты,покрывающие комбинации условий, встречающихся в операторах ветвления.Комбинации условий определяется следующим образом.

Выделим условия всехветвлений в коде программы, определяемых условными операторами, операторами циклаили операторами выбора. Эти условия являются предикатами, составленными при помощилогических операций (отрицания «не», конъюнкции «и», дизъюнкции «или», равенства,неравенства или исключающего «или») из элементарных условий — логических формул,которые уже не разлагаются на составляющие логические формулы.

Выделив всеэлементарные условия из ветвлений в коде заданной программы, мы можем составлятькомбинации из этих условий и их отрицаний, или, что то же самое, из их значений true и false(1 и 0). В приведенном примере элементарными условиями являются предикаты (n == 0),(n%2 == 0) и (n < 0). Из трех условий и их отрицаний можно составить 8 комбинаций, однаконе все эти комбинации будут выполнимы. Так, не может быть одновременно выполнено (n== 0) и (n < 0), или (n == 0) и !(n%2 == 0). Выбросив все невыполнимые комбинации, мыполучим в данном примере только 5 комбинаций элементарных условий и их отрицаний —если (n == 0), значения остальных двух условий определяются однозначно, иначе дваоставшихся условия становятся независимыми и дают еще 4 комбинации.Номерn == 0n%2 == 0n<011102000300140105011Комбинация значений элементарных условий покрывается тестом, если во время еговыполнения эти условия в некоторый момент имеют в точности эти значения.Метрика покрытия комбинаций условий (multiple condition coverage) определяется какдоля покрытых текстами комбинаций значений элементарных условий, участвующих вусловиях ветвлений программы, по отношению к общему количеству выполнимыхкомбинаций значений элементарных условий.В приведенном выше примере набор тестовых данных 0, 1, 2, –2 не покрываеткомбинацию условий с номером 3 в таблице.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее