460 likes | 699 Views
Тестирование ПО Подходы и практика 22 мая 200 8 г. Технологии программирования. 4 курс. Тестирование ( def). Тестирование – деятельность, выполняемая для оценки и улучшения качества программного обеспечения.
E N D
Тестирование ПОПодходы и практика22 мая 2008 г. Технологии программирования 4 курс
Тестирование (def) Тестирование –деятельность, выполняемая для оценки и улучшения качества программного обеспечения. Эта деятельность обычно базируется на обнаружении дефектов и проблем в программных системах.
Качество ПО(def) «Достижение отличного уровня пригодности к использованию» - Watts Hamphrey, автор CMM. «Степень соответствия присущих характеристик требованиям» - ISO 9001. Приемлемое качество: <Количественно выраженный> компромисс между заказчиком и исполнителем в отношении характеристик продукта, создаваемого исполнителем в интересах решения задач заказчика с учетом других ограничений проекта.
Доказательства правильности • Формальный подход. Формальное доказательство правильности – вывод формул при помощи формальных процедур из исходных аксиом. • Интерпретационный подход. Экспериментальная проверка. Подстановка данных и интерпретация результатов.
Сущность тестирования Тестирование программных систем состоит из динамическойверификации поведения программ на конечном (ограниченном)наборе тестов, выбранныхсоответствующим образом из обычно выполняемых действий прикладной области и обеспечивающих проверку соответствия ожидаемомуповедению системы.
Аспекты определения • Динамичность. Выполнение программы с заданными входными данными. • Конечность. Невозможно перебрать все варианты входных данных. • Выбор. Умение задавать вопросы системе. Что проверяем – то и находим. • Ожидания. Какое поведение приемлемо, а какое – ошибочно.
Принципиальная ограниченность Тестирование программы может использоваться только для демонстрации наличия дефектов, но никогда не покажет их отсутствие. (Фальсификация, а не верификация.)
Терминология • Отладка (debug, debugging) –процесс поиска, локализации и исправления ошибок в программе. • Тестированиеобеспечивает выявление (констатацию наличия) фактов расхождений с требованиями (ошибок). • Сбои и дефекты. Дефект или недостаток – это причина возникновения нежелательного поведения системы. Само это поведение называется сбоем или ошибкой.
Уровни тестирования Над чем проводятся тесты: • Модульное тестирование. Тестирование отельного элемента системы. (Подробноеописание - стандартIEEE 1008-87 “Standard for Software Unit Testing”) • Интеграционное тестирование. Проверка взаимодействия между модулями. • Системное тестирование. Безопасность, надежность, скорость, точность, и т.п. Интерфейсы к внешним приложениям, ОС, аппаратуре.
Цели тестирования • Приёмочное тестирование. Проверка поведения системы на предмет удовлетворения требований заказчика. • Установочное тестирование. Проверка процедуры инсталляции системы в целевом окружении. • Альфа- и бета-тестирование. Внутреннее (альфа) и внешнее (с привлечением отобранных пользователей) пробное использование. • Функциональные тесты. Проверка соответствия системы предъявляемым к ней требованиям, описанным на уровне спецификации поведенческих характеристик.
Цели тестирования • Достижение и оценка надежности. Помогая идентифицировать причины сбоев, тестирование подразумевает и повышение надежности программных систем. • Регрессионное тестирование. Повторное выборочное тестирование системы или компонент для проверки сделанных модификаций не должно приводить к непредусмотренным эффектам. • Тестирование производительности. Цель - достижение реальных (достижимых) возможностей производительности. • Нагрузочное тестирование (Stress testing). Цель – выявить поведение системы при пиковой (стрессовой) нагрузке.
Цели тестирования • Сравнительное тестирование. Единичный набор тестов, позволяющих сравнить две версии системы. • Восстановительные тесты. Цель – проверка возможностей рестарта системы в случае непредусмотренной катастрофы. • Конфигурационное тестирование. Проверка поведения и работоспособности системы в различных конфигурациях (в терминах «ролей» пользователей). • Тестирование удобства и простоты использования (Usability testing). Легкость освоения системы пользователем, решения им своих задач, качество защиты от ошибок пользователя.
Техники тестирования • Базирующиеся на интуиции и опыте инженера. • Специализированное тестирование (Ad hoc testing). Тесты основываются на опыте, интуиции и знаниях инженера, рассматривающего проблему с точки зрения имевшихся ранее аналогий.
Техники тестирования • Базирующиеся на интуиции и опыте инженера. • Исследовательские тесты. Одновременное обучение, проектирование теста и его исполнение. Использует знания инженера, формируемых на основе поведения тестируемого продукта в процессе проведения тестирования, степени знакомства с приложением, платформой, типами возможных сбоев и дефектов, и т.п.
Техники тестирования • Базирующиеся на спецификациях. • Эквивалентное разделение. • Анализ граничных значений. • Таблицы принятия решений. • Конечные автоматы. • Формальные спецификации. • Случайное тестирование.
Техники тестирования • Ориентированные на код. • Базирующиеся на блок-схеме. Проверка покрытия всех маршрутов на блок-схеме. • На основе потоков данных. Отслеживается полный жизненный цикл переменных внутри программы. • Ссылочные модели (дерево вызовов).
Техники тестирования • Ориентированные на дефекты. • Предположение ошибок. Ищем наиболее вероятные или разрушительные ошибки. Например, на основе анализа рисков. • Тестирование мутаций. Мутация – небольшое изменение тестируемой программы, произошедшее за счет частных синтаксических изменений кода (в частности, рефакторинга).
Техники тестирования • Ориентированные на условия использования. • Операционный профиль. Тестирование проводится в таком тестовом окружении, которое максимально приближено к реальным условиям работы системы. • Базирующиеся на надежности инженерного процесса. Базируются на условиях разработки системы.
Процесс тестирования: соображения • Программирование без персоналий. Все заинтересованы в выпуске качественного продукта. Никто не скрывает ошибок. • Руководства по тестированию. Все знают, что и как делается. Есть программы, планы, известны подходы и методики. • Управление процессом тестирования. Известны люди, инструменты, есть регламент работ и значения количественных оценок.
Процесс тестирования: соображения • Документирование тестов и рабочего продукта. Стандарт IEEE 829-98 “Standard for Software Test Documentation” Документы: • План тестирования. • Спецификация процедуры тестирования. • Спецификация тестов. • Лог тестов.
Процесс тестирования: соображения • Внутренние и независимые команды тестирования. Лучше иметь обе. • Оценка стоимости и усилий. Выбор техники, концепции и модели тестирования в зависимости от бюджета и целей тестирования. • Окончание тестирования. Достижение системой приемлемого качества. • Повторное использование. Шаблоны тестов.
Тестирование: состав работ • Планирование. • Генерация сценариев тестирования. • Разработка окружения. • Выполнение тестов. • Регистрация результатов (журнал тестирования). • Анализ результатов. • Отчет.
1. Планирование Ключевые аспекты планирования: • координация персонала. • управление оборудованием и другими средствами, необходимыми для организации тестирования. • планирование обработки нежелательных результатов.
2. Сценарии тестирования На этом этапе выбираем уровни и техники тестирования, конфигурации и версии системы и описываем ожидаемые результаты тестирования. Здесьже определяем критерии прекращения тестов.
3. Тестовое окружение Перечисляем средства, необходимые для тестирования: • Аппаратные средства. • Системное программное окружение. • Специализированное ПО для прогона и контроля тестов. • Средства регистрации и документирования.
4. Выполнение тестов • должны фиксироваться все работы и результаты процесса тестирования. • форма журналирования таких работ и их результатов должна быть такой, чтобы соответствующее содержание было понятно, однозначно интрепретируемо и повторяемо другими лицами. • тестирование должно проводиться в соответствии с заданными и документированными процедурами. • тестирование должно производиться над однозначно идентифицируемой версией и конфигурацией программной системы.
5. Регистрация результатов • Когда проводится тест. • Какой тест. • Кем проводится. • Для какой конфигурации программной системы. • Результат теста. • Сбой во время теста. • Последовательность шагов, приведших к сбою. • Уровень серьезности дефекта.
6. Анализ результатов Сбои, обнаруженные в процессе тестирования, чаще всего порождаются дефектами и ошибками, присутствующими в тестируемой программной системе. Анализ заключается в определении типов ошибок, ставших причиной этих дефектов (например, плохо сформулированные требования, некорректный дизайн, утечки памяти и т.д.)
7. Отчет о тестировании Зависит от цели тестирования. В отчете делается заключение об успешности или неуспешности тестирования в целом. Отчёты по тестам могут являться входом для процесса управления изменениями и генерации запросов на изменения (change request) в рамках процессов конфигурационного управления.
Методологии разработки и тестирования • Каскадная (Водопад). • Итеративная/Спиральная. • Rational Unified Process (RUP). • Microsoft Solution Framework (MSF). • Rapid Application Development (RAD). • Гибкие методологии (Agile Dev).
Итеративная модель Каскадная модель, повторяемая несколько раз.
RUP • Планирование тестов. • Дизайн тестов. • Разработка тестов. • Выполнение тестов. • Оценка тестов.
MSF Фаза стабилизации. Вехи: • Точка конвергенции. • Точка достижения нуля. • Готовность версии-кандидата. • Контрольное тестирование завершено. • Тестирование приемлемости для потребителей завершено. • Пилотное внедрение завершено. • Готовность решения утверждена.
MSF Фаза стабилизации. Результаты: • Окончательный продукт (golden release). • Документация выпуска (release notes). • Материалы поддержки решения. • Результаты и инструментарий тестирования. • Исходный и исполнимый код приложений. • Проектная документация. • Анализ пройденной фазы (milestone review).
MSF:Основные задачи проектной группы.
RAD • Быстрое прототипирование. • Тестирование и разработка не разделяются. • Регрессионное тестирование?
Гибкие методы разработки • Разработка через тестирование(Test Driven Development, TDD). • Рефакторинг.
Разработка через тестирование Разработка через тестирование - процесс разработки программного обеспечения, который предусматривает написание и автоматизацию модульных тестов еще до момента написания соответствующих классов или модулей.
Рефакторинг • Когда в программу нужно добавить некую функциональность, но её код не структурирован удобным образом для добавления этой функциональности, то сначала стоит произвести рефакторинг программы, чтобы упростить внесение изменений, и только после этого вносить эти изменения. • Перед тем, как начать рефакторинг, убедитесь, что у Вас есть основательный комплект тестов. Тесты должны быть самопроверяющимися. • Ритм рефакторинга: тестирование, небольшое изменение и т.д.
ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ ЕСПД ГОСТ 19.301-79: • Объект испытаний. • Цель испытаний. • Требования к программе. • Требования к документации. • Средства и порядок испытаний. • Тестовые примеры.
Спасибо за внимание Конец лекции.