Основы тестирования программного обеспечения
Покупка
Тематика:
Проектирование, отладка и тестирование ПО. Вспомогательные средства проектирования. CASE-технологии
Издательство:
ИНТУИТ
Автор:
Котляров Всеволод Павлович
Год издания: 2016
Кол-во страниц: 252
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 5-9556-0027-2
Артикул: 822913.02.99
Курс посвящен обсуждению проблем контроля качества разработки программного обеспечения с позиций тестирования. Задачей курса, реализующейся через лекционный материал и практикум, является подготовка тестировщиков программного проекта.
Предлагаемый вашему вниманию курс обобщает опыт многолетней работы учебного центра "Политехник - Моторола” в Санкт-Петербургском государственном политехническом университете. Основные темы лекционного курса: основные понятия тестирования: терминология тестирования, различия тестирования и отладки, фазы и технология тестирования, проблемы тестирования, критерии выбора тестов: структурные, функциональные, стохастические, мутационный, оценки покрытия проекта, разновидности тестирования: модульное, интеграционное, системное, регрессионное, автоматизация тестирования, издержки тестирования, особенности процесса и технологии индустриального тестирования: планирование тестирования, подходы к разработке тестов, особенности ручной разработки и генерации тестов, автоматизация тестового цикла, документирование тестирования, обзоры и метрики, регрессионное тестирование: особенности и
виды регрессионного тестирования, методы отбора тестов, оценка эффективности, терминологический словарь: содержит глоссарий терминологии тестирования в соответствии с IEEE Standard Glossary of Software Engineering.
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Основы тестирования программного обеспечения 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