Академический Документы
Профессиональный Документы
Культура Документы
Скачано С Www.Sharewood.Biz - Присоединяйся!
Скачано С Www.Sharewood.Biz - Присоединяйся!
тестирование
Назначение регрессионного тестирования. В каких случаях
требуется его проводить? Выбор тест-комплектов для
регрессионного тестирования. Приоритизация и оптимизация
тест-комплектов.
Анализ кода
Анализ бизнес-логики
Практика
Покрытие требований
Калькулятор
Домашнее задание
Дополнительные материалы
Используемая литература
© geekbrains.ru 1
При этом даже самые незначительные изменения в программном коде могут серьезно повлиять на
качество ПО. Чтобы убедиться в отсутствии ошибок в реализованном функционале ПО, проводят
регрессионное тестирование.
● Регрессия старых ошибок (Old bugs regression) – попытка доказать, что недавнее
© geekbrains.ru 2
● Регрессия побочного эффекта (Side effect regression) – попытка доказать, что недавнее
изменение кода или данных сломало другие части разрабатываемого приложения.
В третьей итерации добавили новую операцию, для которой создали «Тест-комплект 3». Проводя
регрессионное тестирование, нужно выполнять все тесты из тест-комплектов 1 и 2. Аналогично для
каждой последующей итерации. При этом время, выделенное на итерацию для добавления новой
функции, не меняется, но время на проведение полного регрессионного тестирования растет вместе
с функциональностью приложения.
© geekbrains.ru 3
© geekbrains.ru 4
Анализ кода
Обратим внимание на маленькую функцию по нахождению корней квадратного уравнения. Вспомним,
что это такое:
2
Чтобы найти корни квадратного уравнения, нужно вычислить дискриминант по формуле D = B - 4AC.
© geekbrains.ru 5
double Equation(int Print, float A, float B, float C, float& X1, float& X2)
{
float D = B * B - 4.0 * A * C;
if (
D >= 0
)
{
X1 =
(-B + sqrt(D)) / 2.0 / A;
X2 =
(-B - sqrt(D)) / 2.0 / A;
}
else
{
X1 =
-B / 2.0 / A;
X2 = sqrt (D) / 2.0 / A;
}
if (
Print)
printf("Solution: %f, %f\n", X1, X2);
return D;
}
К выходным параметрам функции Equation относятся Х1 и Х2, предназначенные для хранения
корней уравнения. Возвращаемое значение функции – дискриминант уравнения.
1 1 1 -6 1 2 -3 25 Solution: X1 = 2, X2 = -3
3 1 2 0 0 0 -2 4
4 1 2 1 0 -1 -1 0
5 1 2 0 -1 2 -4
По результатам второго теста было определено, что в функции содержится ошибка. Если
дискриминант оказывался отрицательным, то функция падала и прекращала выполнение. Создали
новую версию этой функции, в которой должны были исправить расчет корней уравнения, когда
дискриминант отрицательный. Функция E
quation– измененная версия:
© geekbrains.ru 6
f (
i D >= 0
)
{
X1
=
(-B + sqrt(D)) / 2.0 / A;
X2
=
(-B - sqrt(D)) / 2.0 / A;
}
else
{
X1
=
-B / 2.0 / A;
X2
= sqrt (-D);
}
if (
Print)
{
if
(D >=
0)
printf("Solution: X1 = %f, X2 = %f\n", X1, X2);
else
printf("Solution: X1 = %f+%fi, X2 = %f-%fi\n", X1, X2, X1, X2);
}
return D;
}
В измененной версии была исправлена ошибка в строке 13 и добавлен новый формат вывода
комплексных корней, который затронул весь формат вывода на строках с 17 по 20.
Для регрессионного тестирования данной функции достаточно выполнить тесты 1 и 2. Первый тест
проверит правильность вывода на экран вещественных корней уравнения. Второй – правильно ли
рассчитываются и выводятся на экран комплексные корни уравнения.
Мы рассмотрели подход к анализу кода, но в реальных условиях тестировщику сложно его применять.
Зачастую изменения отражаются не только на текущих функциях, но и на других участках
программного кода, где используется значение этой функции.
Анализ бизнес-логики
Наиболее подходящим способом для определения тестов для выборочного регрессионного
тестирования является анализ бизнес-логики приложения. Для него используются требования,
спецификация и интуиция тестировщика.
● Авторизация покупателя;
© geekbrains.ru 7
При этом выполняются не все тесты из тест-комплекта, а только те, которые могут найти ошибку. Нет
необходимости проверять страницу регистрации на заполнение обязательных полей, валидацию на
формат email-поля. Достаточно одного позитивного теста на успешную регистрацию пользователя,
чтобы проверить влияние изменений в личном кабинете на регистрацию.
Новый тест выполняется первый раз, когда тестируется новая функциональность или проверятся
исправление ошибки.
Тест считается пригодным для повторного использования, если увеличивает покрытие или
способствует выявлению ошибки. В противном случае он считается устаревшим и отбрасывается.
Устаревшими тестами могут быть не только те, которые уже не могут выполниться, так как потеряли
актуальность ввиду изменившейся функциональности, но и те тесты, которые не увеличивают
покрытие. Например, в начале разработки ПО для интернет-магазина была ошибка при регистрации
пользователя, если заполнено поле «Отчество». На эту ошибку завели тест. Но после исправления
бага он станет устаревшим, т.к. не увеличивает покрытие: поле «Отчество» покроет тест с
заполнением ФИО покупателя.
Во время регрессионного тестирования могут выполняться не все тесты, пригодные для повторного
использования.
© geekbrains.ru 8
Например, тест с ошибкой при регистрации по полю «Отчество». После исправления ошибки его
можно добавить к регрессионному набору. Но когда он не выявит ошибку несколько раз, его следует
удалить.
● Похожие тесты можно склеить (есть одинаковые шаги теста, но разные проверки);
● Крупные тесты можно разбить на несколько или сократить, выкинув лишние участки;
© geekbrains.ru 9
● Чем раньше мы узнаем о том, что в ПО появилась серьезная регрессионная ошибка, тем
скорее ее исправят;
● Часто причиной провала тестов (напрямую не связанных друг с другом) является одна и та же
ошибка в ПО;
● На интуиции:
● На истории разработки:
Но если отличие состоит, например, в отчете, в котором устранили ошибку, и парой косметических
исправлений (кнопочку поместили чуть выше), то регрессионное тестирование всего ПО будет пустой
тратой времени. Можно проверить, что ошибка в отчете исправлена, а кнопку переместили куда
следует. Но если ваша интуиция призывает проверить каких-либо области ПО, то стоит
прислушаться.
© geekbrains.ru 10
Как показывает практика, даже при тщательном проектировании тестов, самом тестировании и
подготовке к нему все же остаются белые пятна. Когда тестов становится много, то тестировщик
сходу не сможет ответить на вопрос: «А проверяешь ли ты вот такой сценарий?».
Тестовое покрытие – это одна из метрик оценки качества тестирования, представляющая собой
плотность покрытия требований или исполняемого кода тестами.
Чем выше требуемый уровень тестового покрытия, тем больше тестов будет выбрано для
проверки тестируемых требований или исполняемого кода.
● Покрытие кода (Code Coverage) – оценка покрытия исполняемого кода тестами путем
отслеживания непроверенных в процессе тестирования частей ПО;
Различияподходов
Метод покрытия требований сосредоточен на том, чтобы проверить соответствие набора проводимых
тестов требованиям к продукту. Анализ покрытия кода – на полноте проверки тестами разработанной
части продукта (исходного кода). Анализ потока управления – на прохождении путей в графе или
модели выполнения тестируемых функций (Control Flow Graph).
Ограничения
подходов
Метод оценки покрытия кода не выявит нереализованные требования, так как работает не с конечным
продуктом, а с существующим исходным кодом.
Метод покрытия требований может оставить непроверенными некоторые участки кода, потому что не
учитывает конечную реализацию.
T
cov= (L /L
cov ) * 100%
total
© geekbrains.ru 11
T
cov– тестовое покрытие;
L
cov– количество требований, проверяемых тест кейсами;
L
total– общее количество требований.
Вроде бы все хорошо. Но посмотрим, как наши тест-кейсы покрывают требования. Для этого мы
определим требование для каждого тест-кейса. По итогу может получиться, что некоторые
требования в тестировании пропущены, а часть тестов не проверяет ни одного требования. Это могут
быть проверки, явно не зафиксированные в требованиях (например, поддержка браузера Internet
Explorer 6).
T
cov= (L
tc/L
code) * 100%
где:
T
cov– тестовое покрытие;
L
tc– количество строк кода, покрытых тестами;
L
code– общее количество строк кода.
© geekbrains.ru 12
Рассмотрим пример на простом сайте интернет-магазина, который имеет главную страницу, страницу
поиска, карточку товара и страницу «О нас».
Для покрытия на базе анализа потока управления нам нужно проверить все возможные переходы. И
если мы забыли проверить переход с главной страницы на страницу «О нас», то это «белое пятно»,
© geekbrains.ru 13
Уровень 1 Покрытие Каждый оператор должен быть выполнен как минимум один раз.
операторов
● Уровень 1 говорит о том, что мы каждую из наших страниц должны были открыть хотя бы
один раз;
● Уровень 3 – нужно проверить, например, что отобразит страница с карточкой товара, когда
закончилась акция и цена стала прежней. Или что нельзя перейти на карточку товара,
которого нет в наличии;
● Уровень 4 и выше очень сложно выполним при тестировании методом черного ящика, и
достигается при необходимости автоматизированными тестами, (т.е. при тестировании
методом белого ящика). Например, если в нашем каталоге 200 000 товаров, то на уровнях,
начиная с четвертого, нужно проверить переход на карточку каждого товара, из каждого
возможного места. Для нашего примера это 200 000 *3 = 600 000 тестов.
© geekbrains.ru 14
Калькулятор
Посмотрим, как выбирать тесты для регрессионного тестирования, когда мы знаем, как
взаимодействуют между собой области программы.
© geekbrains.ru 15
1. В функцию сложения;
Домашнее задание
Для рассмотренных ниже ситуаций нужно решить:
2. Тесты для каких разделов нужно выполнить, чтобы подтвердить отсутствие регрессии?
Ситуации:
2. Интернет-сайт для просмотра и заказа товаров (это наш интернет-сайт, по которому была
доработка на запрещенные продукты). Схема модулей сайта представлена ниже.
Направление стрелок указывает, на что может повлиять изменение в текущем разделе ПО. В
новой версии внесли изменения:
c. В раздел «Менеджер/Администрирование».
© geekbrains.ru 16
2. http://qastugama.blogspot.ru/2013/01/1.html
3. https://habrahabr.ru/post/270365/
Используемая литература
Для подготовки данного методического пособия были использованы следующие ресурсы:
1. https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0
%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%
B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
2. http://kspt.icc.spbstu.ru/media/files/2013/courses/softwarequality/04-Testing-102-RT.pdf
3. http://www.intuit.ru/studies/courses/48/48/lecture/1444?page=3
4. http://2009.cee-secr.org/docs/secr2009_presentation_Itsykson_Akhin.pdf
5. http://www.protesting.ru/testing/testcoverage.html
6. https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0
%B5_%D0%BA%D0%BE%D0%B4%D0%B0
© geekbrains.ru 17