теория_2 (Методичка и инструкции на ЛР №8)

2017-12-22СтудИзба

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

Файл "теория_2" внутри архива находится в следующих папках: Методичка и инструкции на ЛР №8, Инструкции, Задание_2. Документ из архива "Методичка и инструкции на ЛР №8", который расположен в категории "". Всё это находится в предмете "технологии разработки программного обеспечения (по)" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "технологии разработки по" в общих файлах.

Онлайн просмотр документа "теория_2"

Текст из документа "теория_2"

5.2. Тестовые примеры

5.2.1. Разработка тестовых примеров

Непосредственно для тестирования программного обеспечения необходимо определить проверочные задания, выполняемые системой или ее отдельной частью. Такие задачи называются тестовыми примерами.

Можно выделить два подхода к созданию тестовых примеров – исходя из функциональных требований (или из любой другой документации описывающей систему) и исходя из кода. Построение тестовых примеров, исходя из кода, и построение покрытия кода мы будем изучать позднее, а сейчас рассмотрим подробнее первый случай. При тестировании функциональности программы применяется подход "черного ящика", то есть для каждого требования к системе формируются тест-требования, которые, как правило, детализируют функциональные требования так, что на одно функциональное требование может приходиться несколько тест-требований. Сами тест-требования определяют, что должно быть протестировано, но не определяют, как. Конкретные значения задаются в тестовых примерах. Таким образом, одному тест-требованию может соответствовать сразу несколько тестовых примеров.

Каждый тестовый пример состоит из набора входных значений и набора ожидаемых выходных значений. Рассмотрим спецификацию из семинара 1.

Начнем мы с тестирования отдельных составляющих программы (в данном случае – модуль математика) на допустимые данные и, в частности, на допустимые граничные данные.

Рассмотрим пример. Для этого возьмем требование 4.2.4.1.

Требование 4.2.4.1: Для чисел, меньших либо равных MAXINT и больших либо равных MININT , частное которых меньше либо равна MAXINT и больше либо равна MININT и делитель не равен 0, функция деления должна возвращать правильное частное с точки зрения математики.

Функция, которую будем тестировать:

/// <summary>

/// частное

/// </summary>

/// <param name="a">делимое</param>

/// <param name="b">делитель</param>

/// <returns>частное</returns>

public static long Div(long a, long b)

В принципе, тестирование такой функции легко автоматизируется при помощи Unit Testing, так как у нее уровень доступа public, т.е. к ней можно обратиться из любого класса. К тому же она является статической, что позволит вызывать ее, не создавая экземляр класса CalcClass. Однако на этом семинаре мы рассмотрим ручное тестирование.

Прежде всего по этому функциональному требованию составим тест-требования. На первый взгляд, очевидно, что вопрос для проверки звучит так: "Проверить, что для чисел, меньших либо равных MAXINT и больших либо равных MININT, частное которых меньше либо равно MAXINT и больше либо равно MININT и делитель не равен 0, функция деления возвращает правильное частное с точки зрения математики". Однако, это не совсем так. Фраза "меньших либо равных" сразу же наводит на мысль о проверке двух случаев – 1) хотя бы одно из чисел строго равно MAXINT и 2) все числа меньше, чем MAXINT.

Замечание. Стоит заметить, что сейчас мы пишем очень подробные тест-требования, которые практически сразу можно отобразить в тестовые примеры. Такая ситуация наблюдается, например, в проектах, в которых тест-требования отсутствуют, а тестовые примеры пишутся сразу на основании функциональных требований.

Тест-требования

  1. Проверить, что для чисел, меньших MAXINT и больших 0, функция деления возвращает правильное частное с точки зрения математики.

  2. Проверить, что для делимого, меньшего MAXINT и большего 0, и делителя, меньшего 0 и большего MININT, функция деления возвращает правильное частное с точки зрения математики.

  3. Проверить, что для делимого, меньшего 0 и большего чем MININT, и делителя, большего 0 и меньшего MAXINT, функция деления возвращает правильное частное с точки зрения математики.

  4. Проверить, что для чисел, меньших 0 и больших MININT, функция деления возвращает правильное частное с точки зрения математики.

  5. Проверить, что для делимого, равного 0, и делителя, меньшего MAXINT и большего 0, функция деления возвращает правильное частное с точки зрения математики.

  6. Проверить, что для делимого, равного 0, и делителя, большего MININT и меньшего 0, функция деления возвращает правильное частное с точки зрения математики.

  7. Проверить, что для делимого, равного MAXINT, и делителя, меньшего MAXINT и большего MININT, функция деления возвращает правильное частное с точки зрения математики.

  8. Проверить, что для делимого, равного MININT, и делителя, меньшего MAXINT и большего MININT, функция деления возвращает правильное частное с точки зрения математики.

  9. Проверить, что для делителя, равного MAXINT, и делимого, меньшего MAXINT и большего MININT, функция деления возвращает правильное частное с точки зрения математики.

  10. Проверить, что для делителя, равного MININT, и делимого, меньшего MAXINT и большего MININT, функция деления возвращает правильное частное с точки зрения математики.

  11. Проверить, что для делителя, равного MAXINT, и делимого, равного MININT, функция деления возвращает правильное частное с точки зрения математики.

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

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

  14. Проверить, что для делителя, равного MININT, и делимого, равного MAXINT, функция деления возвращает правильное частное с точки зрения математики.

Замечание: на самом деле, еще можно проверить, что функция корректно работает с однозначными и многозначными числами. К тому же надо убедиться, что она правильно обрабатывает все цифры в числах, а, например, не генерирует исключение, если одно из чисел содержит цифру 9, или результат ее работы не зависит от того, делится ли одно число на другое нацело или нет.

Составим тестовые примеры и запишем их в виде таблицы (табл.5.1).

Таблица 5.1. Тестовые примеры для требования 4.2.4.1

Входные значения: делимое, делитель

Ожидаемый результат

Номер тест-требования

Примечания

1)

43 / 21

2

1)

Самый частый случай – корректные входные данные

2)

87/-56

-1

2)

-//-

3)

-9/2

-4

3)

-//-

4)

-4321/-50

86

4)

-//-

5)

0/1234567890

0

5)

Часто ошибки проявляются при нулевых значениях переменных

6)

0/-1098765432

0

6)

-//-

7)

2147483647/95

22605091

7) и 1)

Проверка граничных условий

8)

-2147483648/9

-238609294

8) и 2)

-//-

9)

99/2147483647

0

9) и 1)

-//-

10)

-87/-2147483648

0

10) и 4)

-//-

11)

-2147483648/2147483647

-1

11)

А здесь - ошибка

12)

2147483647/2147483647

1

12)

-//-

13)

-2147483648/-2147483648

1

13)

Ошибка

14)

2147483647//-2147483648

0

14)

Ошибка

Примечание. Здесь стоит так или иначе сымитировать работу функции и исследовать ее функциональность вместе со студентами.

Заметим, что, мы не можем точно сказать, где произошла ошибка, — это хорошо видно из рис.5.1.


Рис. 5.1.  Определение местоположения ошибки

Части рисунка, помеченные вопросом – те части программы, в которых могла быть ошибка. Это сами вычисления, преобразование типов, ошибка GUI или передачи параметров (возможно, с некорректным преобразованием типов). О выявленных ошибках составляется отчет, который отдается разработчикам. При этом исправление ошибки в обязанности тестировщика не входит, так как он занимается именно тестированием, а не отладкой приложения.

В первом тесте мы ввели два числа и получили верный результат. Все остальные тесты точно такие же. Но перебрать их все не получится, так как всевозможных комбинаций – 429496736 * 429496735= 184467445805156960. Очевидно, что большинство входных значений приведут к одному и тому же результату, и нет смысла проверять их все. Если программа пройдет первый тест, то она, вероятнее всего, пройдет и остальные.

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

5.2.2 Классы эквивалентности

Рассмотрим другой пример.

Требование 4.2.1.1: Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно MININT, функция суммирования должна возвращать правильную сумму с точки зрения математики.

Функция, которую будем тестировать:

/// <summary>

/// Сложение

/// </summary>

/// <param name="a">слагаемое</param>

/// <param name="b">слагаемое</param>

/// <returns>сумма</returns>

public static long Add(long a, long b)

По сравнению с предыдущим требованием у этого явно есть недостатки. Здесь ничего не говорится об ограничениях на сумму. Можно легко подобрать два таких числа, которые будут удовлетворять заявленному требованию, а их сумма будет выходить за границы int. Скорее всего, это ошибка проектирования программы. Тогда необходимо исправить спецификацию и сообщить об этом остальным участникам разработки, прежде всего ее составителю.

После исправлений функциональное требование 4.2.1.1. будет выглядеть так:

Требование 4.2.1.1: Для чисел, меньших либо равных MAXINT и больших либо равных MININT, сумма которых меньше либо равна MAXINT и больше либо равна MININT, функция суммирования должна возвращать правильную сумму с точки зрения математики.

Тестирование на допустимые данные ничем не будет отличаться от тестирования функции деления. Составим классы эквивалентности.

В простейшем случае любое из слагаемых делится на 3 класса эквивалентности: MININT, MAXINT и промежуточное значение. Если подходить более серьезно, то можно выделить 7 допустимых классов эквивалентности: MININT, MININT+1, отрицательное не граничное число, 0, положительное не граничное число, MAXINT-1, MAXINT.

Учитывая то, что у нас два идентичных входных параметра, для полного рассмотрения всех классов эквивалентности необходимо составить и проверить 7*7=49 тестовых примеров, что все равно гораздо меньше, чем полный перебор.

При этом, как показал тест с делением, ошибка может проявиться лишь в нескольких из этих примеров, которые не сильно отличаются от остальных граничных классов эквивалентности.

Некоторые классы эквивалентности не удовлетворяют требованию 4.2.1.1. так как выводят сумму за допустимые пределы. Поведение метода на таких входных данных описано в требовании 4.2.1.2.

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