Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основы тестирования программного обеспечения

Покупка
Новинка
Артикул: 822913.02.99
Доступ онлайн
1 000 ₽
В корзину
Курс посвящен обсуждению проблем контроля качества разработки программного обеспечения с позиций тестирования. Задачей курса, реализующейся через лекционный материал и практикум, является подготовка тестировщиков программного проекта. Предлагаемый вашему вниманию курс обобщает опыт многолетней работы учебного центра "Политехник - Моторола” в Санкт-Петербургском государственном политехническом университете. Основные темы лекционного курса: основные понятия тестирования: терминология тестирования, различия тестирования и отладки, фазы и технология тестирования, проблемы тестирования, критерии выбора тестов: структурные, функциональные, стохастические, мутационный, оценки покрытия проекта, разновидности тестирования: модульное, интеграционное, системное, регрессионное, автоматизация тестирования, издержки тестирования, особенности процесса и технологии индустриального тестирования: планирование тестирования, подходы к разработке тестов, особенности ручной разработки и генерации тестов, автоматизация тестового цикла, документирование тестирования, обзоры и метрики, регрессионное тестирование: особенности и виды регрессионного тестирования, методы отбора тестов, оценка эффективности, терминологический словарь: содержит глоссарий терминологии тестирования в соответствии с IEEE Standard Glossary of Software Engineering.
Котляров, В. П. Основы тестирования программного обеспечения : краткий курс / В. П. Котляров. - Москва : ИНТУИТ, 2016. - 252 с. - ISBN 5-9556-0027-2. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2155051 (дата обращения: 06.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Основы тестирования программного обеспечения

2-е издание, исправленное

Котляров В.П.

Национальный Открытый Университет “ИНТУИТ”
2016

2
УДК 004.415.53(075.8)
ББК 18
К73
Основы тестирования программного обеспечения / Котляров В.П. - M.: Национальный Открытый
Университет “ИНТУИТ”, 2016 (Основы информационных технологий)
ISBN 5-9556-0027-2

Курс посвящен обсуждению проблем контроля качества разработки программного обеспечения с
позиций тестирования. Задачей курса, реализующейся через лекционный материал и практикум,
является подготовка тестировщиков программного проекта.
Предлагаемый вашему вниманию курс обобщает опыт многолетней работы учебного центра
“Политехник - Моторола” в Санкт-Петербургском государственном политехническом университете.
Основные темы лекционного курса: основные понятия тестирования: терминология тестирования,
различия тестирования и отладки, фазы и технология тестирования, проблемы тестирования,
критерии выбора тестов: структурные, функциональные, стохастические, мутационный, оценки
покрытия проекта, разновидности тестирования: модульное, интеграционное, системное,
регрессионное, автоматизация тестирования, издержки тестирования, особенности процесса и
технологии индустриального тестирования: планирование тестирования, подходы к разработке
тестов, особенности ручной разработки и генерации тестов, автоматизация тестового цикла,
документирование тестирования, обзоры и метрики, регрессионное тестирование: особенности и
виды регрессионного тестирования, методы отбора тестов, оценка эффективности,
терминологический словарь: содержит глоссарий терминологии тестирования в соответствии с IEEE
Standard Glossary of Software Engineering.

(c) ООО “ИНТУИТ.РУ”, 2006-2016
(c) Котляров В.П., 2006-2016

3
Введение: тестирование - способ обеспечения качества
программного продукта

Рассмотрена проблематика, цели и требования к курсу. Обсуждены основные темы
курса и практикума.

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

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

С технической точки зрения тестирование заключается в выполнении приложения на
некотором множестве исходных данных и сверке получаемых результатов с заранее
известными (эталонными) с целью установить соответствие различных свойств и
характеристик приложения заказанным свойствам. Как одна из основных фаз процесса
разработки программного продукта (Дизайн приложения - Разработка кода -
Тестирование ), тестирование характеризуется достаточно большим вкладом в
суммарную трудоемкость разработки продукта. Широко известна оценка
распределения трудоемкости между фазами создания программного продукта:
40%-20%-40% (Рис. 1 1), из чего следует, что наибольший эффект в снижении
трудоемкости может быть получен прежде всего на фазах Design и Testing. Поэтому
основные вложения в автоматизацию или генерацию кода следует осуществлять,
прежде всего, на этих фазах. Хотя в современном индустриальном программировании
автоматизация тестирования является широко распространенной практикой, в то же
время технология верификации требований и спецификаций пока делает только свои
первые шаги. Задачей ближайшего будущего является движение в сторону такого
распределения трудоемкости (60%-20%-20% (Рис. 1 2)), чтобы суммарная цена
обнаружения большинства дефектов стремилась к минимуму за счет обнаружения
преимущественного числа на наиболее ранних фазах разработки программного
продукта.

4
Рис. 1.1.  Оценка трудоемкости обнаружения и исправления ошибок при создании
программного продукта

Рис. 1.2.  Аналогичная оценка при автоматизации тестирования

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

Предлагаемый вниманию читателей курс обобщает опыт многолетней работы учебного
центра “Политехник - Моторола” в Санкт-Петербургском государственном
политехническом университете. Естественно, наш учебник не единственный.

Среди учебников, посвященных подготовке тестировщиков, мы рекомендуем обратить
внимание на книги [1],[2],[3],[4],[5],[6], также посвященные передаче опыта
промышленного тестирования студентам и аспирантам, выбравшим своей
специальностью профессиональное программирование.

Требования к курсу

5
Курс соответствует требованиям специальности 220400 “Программное обеспечение
вычислительной техники и автоматизированных систем”, ориентированной на
подготовку профессиональных программистов, в частности покрывает разделы курса
“Технология программирования”, посвященные тестированию.

Разделы курса соответствуют следующим разделам Computing Curricula 2001: Computer
Science [7]:

Раздел SE4 Процессы разработки ПО
Раздел SE5 Спецификации и требования к ПО
Раздел SE6 Проверка соответствия ПО

Основные темы лекционного курса

Основные понятия тестирования: терминология тестирования, различия
тестирования и отладки, фазы и технология тестирования, проблемы
тестирования
Критерии выбора тестов: структурные, функциональные, стохастические,
мутационный, оценки покрытия проекта
Разновидности тестирования: модульное, интеграционное, системное,
регрессионное, автоматизация тестирования, издержки тестирования
Особенности процесса и технологии индустриального тестирования:
планирование тестирования, подходы к разработке тестов, особенности ручной
разработки и генерации тестов, автоматизация тестового цикла,
документирование тестирования, обзоры и метрики
Регрессионное тестирование: особенности и виды регрессионного тестирования,
методы отбора тестов, оценка эффективности
Терминологический словарь: содержит глоссарий терминологии тестирования в
соответствии с IEEE Standard Glossary of Software Engineering [8],[9]

В курсе использованы примеры, разработанные на языке С#, для читателей не
владеющих С# эти же примеры продублированы на С. С++ в Приложении.

Основные темы практикума

Для демонстрации и закрепления теоретических знаний разработан практикум,
содержащий:

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

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

6
Практикум представлен в форме тренинга, в котором рассмотрены следующие темы:

Разработка документации на тестируемую систему и ее окружение: описание
требований (Requirement Specification) и спецификаций разработчика (High Level
Design)
Планирование тестирования
Практикум модульного тестирования
Практикум интеграционного тестирования
Практикум системного тестирования
Ручное тестирование и тестовые процедуры
Автоматизированное тестирование на основе скриптов
Автоматизированное тестирование на основе MSC-диаграмм и генерация тестов
Средства поддержки автоматизации тестирования

Используя модель реальной системы управления, студенты могут:

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

Прогнозируемые результаты

В результате изучения курса:

1. Вырабатывается понимание условий применения Верификации, Валидации и

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

2. Вырабатываются навыки и приемы тестирования, применяемые на различных

фазах разработки качественного программного продукта

3. Оцениваются условия эффективного применения инструментальных средств в

разработке качественного программного обеспечения

4. Вырабатываются навыки разработки тестовых программ и тестовых наборов в

программном проекте

5. Вырабатываются навыки разработки проектной документации для этапа

тестирования

6. Вырабатываются навыки планирования и отслеживания задач тестирования
7. Обеспечиваются основы обучения проектной команды, состоящей из

разработчиков и тестировщиков

8. Вырабатываются навыки тестирования программного обеспечения проектов,

разработанных на C#

Потребители курса

Курс и практикум рассчитаны на студентов программистских специальностей:

7
“Программное обеспечение вычислительной техники и
автоматизированных систем”
220200 “Программное обеспечение автоматизированных систем управления”
220300 “Системы автоматизации проектирования”
351500 “Математическое обеспечение и администрирование информационных
систем”
на студентов других специальностей, желающих получить знания и навыки,
необходимые для работы в области промышленного тестирования программных
продуктов

Благодарности

Авторы выражают искреннюю благодарность Московскому отделению Microsoft
Corporation, спонсировавшему разработку настоящего пособия, и лично Люцареву
В.С., отметившему своевременность и полезность данной работы.

Активное участие в подготовке курса принимали аспиранты А.Некрасов и Н.Епифанов,
чьи диссертационные материалы были использованы при написании 5 и 6 глав.

Создание настоящего пособия было бы невозможно без самоотверженной работы
студенческого коллектива, выполнившего разработку и проверку всех примеров.
Коллектив в составе студентов 4 курса К.Кудряшева, Д.Пескова, М.Даишева,
Е.Марченкова и его руководителя аспиранта Д.Югая был организован в виде
программистской бригады и вел разработку по законам, используемым в
промышленных проектах.

8
Основные понятия тестирования

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

Концепция тестирования

Программа – это аналог формулы в обычной математике.

Формула для функции f, полученной суперпозицией функций f1, f2, … fn –
выражение, описывающее эту суперпозицию.

f = f1* f2* f3*... * fn

Если аналог f1,f2,… fn – операторы языка программирования, то их формула –
программа.

Существует два метода обоснования истинности формул:

1. Формальный подход или доказательство применяется, когда из исходных формул-

аксиом с помощью формальных процедур (правил вывода) выводятся искомые
формулы и утверждения (теоремы). Вывод осуществляется путем перехода от
одних формул к другим по строгим правилам, которые позволяют свести
процедуру перехода от формулы к формуле к последовательности текстовых
подстановок:

A**3 = A*A*A
A*A*A = A -> R, A*R -> R, A*R -> R

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

2. Интерпретационный подход применяется, когда осуществляется подстановка

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

Интерпретационный подход используется при экспериментальной проверке
соответствия программы своей спецификации

9
Применение интерпретационного подхода в форме экспериментов над
исполняемой программой составляет суть отладки и тестирования.

Основная терминология

Отладка (debug, debugging) – процесс поиска, локализации и исправления ошибок в
программе [9] [IEEE Std.610-12.1990].

Термин ” отладка ” в отечественной литературе используется двояко: для обозначения
активности по поиску ошибок (собственно тестирование), по нахождению причин их
появления и исправлению, или активности по локализации и исправлению ошибок.

Тестирование обеспечивает выявление (констатацию наличия) фактов расхождений с
требованиями (ошибок).

Как правило, на фазе тестирования осуществляется и исправление
идентифицированных ошибок, включающее локализацию ошибок, нахождение причин
ошибок и соответствующую корректировку программы тестируемого приложения
(Application Under Testing (AUT) или Implementation Under Testing (IUT)).

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

Пример поиска и исправления ошибки

Отладка обеспечивает локализацию ошибок, поиск причин ошибок и
соответствующую корректировку программы (Пример 2.1, Пример 2.2).

// Метод вычисляет неотрицательную
// степень n числа x
static public double Power(double x, int n)
{
  double z=1; 
  
  for (int i=1;n>=i;i++)
  {
    z = z*x;
  }
  return z;
}

10
Доступ онлайн
1 000 ₽
В корзину