Занятие 1 Введение в тестирование ПО Введение. С чего всё начиналось? • Только крупные фирмы и институты, • единицы продуктов в год, • сверхпрофессионализм кадров, • низкоуровневые языки разработки ПО. it-courses.by Основные «эпохи тестирования» В 50–60-х годах тестирование представляло собой скорее отладку программ (debugging). Существовала концепция т.н. «исчерпывающего тестирования (exhaustive testing)» – проверки всех возможных путей выполнения кода со всеми возможными входными данными. Однако очень скоро выяснилось, что исчерпывающее тестирование невозможно, т.к. количество возможных путей и входных данных очень велико, а также при таком подходе сложно найти проблемы в документации. it-courses.by Основные «эпохи тестирования» В 70-х годах фактически родились 2 фундаментальные идеи тестирования. Сначала оно рассматривалось как процесс доказательства работоспособности программы (positive testing), а затем, наоборот, как процесс доказательства неработоспособности программы (negative testing). !!! Неверное утверждение: негативные тест-кейсы должны заканчиваться возникновением сбоев и отказов в приложении. !!! Верное утверждение: негативные тест-кейсы пытаются вызвать сбои и отказы, но корректно работающее приложение выдерживает это испытание и продолжает работать верно. it-courses.by Основные «эпохи тестирования» В 80-х годах произошло ключевое изменение места тестирования в разработке ПО: тестирование стало применяться на протяжении всего цикла разработки (software lifecycle). Появились первые элементарные попытки автоматизировать тестирование. В 90-х годах произошёл переход от тестирования как такового к более всеобъемлющему процессу, который называется «обеспечение качества (quality assurance)», охватывает весь цикл разработки ПО и затрагивает процессы планирования, проектирования, создания и выполнения тест-кейсов, поддержку имеющихся тест-кейсов и тестовых окружений. it-courses.by Основные «эпохи тестирования» В 2000-х годах развитие тестирования продолжалось в контексте поиска всё новых и новых путей, методологий, техник и подходов к обеспечению качества. Серьёзное влияние на понимание тестирования оказало появление гибких методологий разработки. Автоматизация тестирования уже воспринималась как обычная неотъемлемая часть большинства проектов, а также стали популярны идеи о том, что во главу процесса тестирования следует ставить не соответствие программы требованиям, а её способность предоставить конечному пользователю возможность эффективно решать свои задачи. it-courses.by Основные «эпохи тестирования» О современном этапе развития тестирования мы будем говорить на протяжении всего курса. Основные характеристики: • гибкие методологии и гибкое тестирование, • глубокая интеграция с процессом разработки, • широкое использование автоматизации, • колоссальный набор технологий и инструментальных средств, • кросс-функциональность команды. it-courses.by ПК–революция в разработке ПО • Проникновение компьютеризации во все сферы жизнедеятельности, • увеличение количества фирм-разработчиков, • экспоненциальный рост числа создаваемых программ, • постоянный пересмотр подходов к обеспечению качества и требований к надежности программ. it-courses.by Больше фирм – выше конкуренция Потребитель/заказчик выбирает разработчика, обещающего оптимальное сочетание цены, времени разработки, качества продукта. Разработчик ищет новые способы обхода конкурентов (технологии, методологии разработки). Тестирование – конкурентное преимущество (повышение качества). Всё больше и больше программ в наше время должны быть безупречными. Современные программы управляют оборудованием больниц, аэропортов, атомных реакторов, космических кораблей. it-courses.by Тестирование и качество Качество ПО • степень, в которой ПО обладает требуемыми свойствами; • совокупность характеристик ПО, относящихся к его способности удовлетворять установленные и предполагаемые потребности. Обеспечение качества (QA) - комплекс действий, направленных на обеспечение качества разрабатываемого продукта, на всех стадиях его разработки. it-courses.by Тестирование и качество Тестирование ПО (Software Testing) – процесс анализа программного средства и сопутствующей документации с целью выявления дефектов и повышения качества продукта. Тестирование ПО (Software Testing) – проверка соответствия между реальным и ожидаемым поведением программы с помощью конечного набора тестов. it-courses.by Тестирование и качество В более широком смысле тестирование - это техника контроля качества (QC). Контроль качества (QC) состоит из • планирования работ (Test Management), • проектирования тестов (Test Design), • выполнения тестирования (Test Execution), • анализа полученных результатов (Test Analysis). it-courses.by Тестирование и качество Quality Control направлен на поиск дефектов в готовом продукте, для того чтобы убедиться, что продукт соответствует требованиям и готов к передаче пользователю (заказчику). Quality Assurance направлено больше на процессы, их усовершенствование (оптимизацию) для минимизации количества багов (дефектов) в самом начале разработки продукта. Это довольно эффективно, так как анализируются все аспекты в самом начале, а не когда продукт готов и выясняется, что работать с ним не совсем удобно или можно реализовать функциональность по-другому. it-courses.by Тестирование и качество Вывод: QA ориентирован на процесс, QC - на тестирование продукта. QA - делаем вещи правильным образом. QC - результат разработки соответствует ожиданиям. it-courses.by Объекты тестирования: • • • Программы при их непосредственном запуске и исполнении (software). Код программ без запуска и исполнения (code). Прототип программного продукта (product prototype). • Проектная документация (project documentation): • Требования к продукту (product requirements). • Функциональные спецификации к продукту (functional specifications). • Документы по архитектуре (product architecture) и дизайну (product design). • План проекта (project plan). • Тестовые сценарии (test cases). • Сопроводительная документация: • Интерактивная помощь (on-line help). • Руководства по установке (Installation guide) и использованию (user manual). it-courses.by Характеристики качества ( • • • • • • • • • функциональность, надежность, удобство использования, практичность, эффективность, удобство сопровождения, портативность (мобильность), совместимость, защищенность. it-courses.by ISO/IEC 25010 ): Функциональность ПО признается функциональным, если выполняет возложенные на него задачи, отвечает заданным потребностям пользователей. Данный аспект предполагает правильную и точную работу, совместимость всех входящих в состав ПО компонентов. • • • ПО решает прикладные задачи заказчика/пользователя. ПО используется в конкретной области. Продукт не может быть всюду применимым. it-courses.by Надежность Под надежностью понимается бесперебойное выполнение возлагаемых на ПО задач в заданных условиях в течение установленного времени. it-courses.by Практичность набор атрибутов, требуемых для использования и индивидуальной оценки этого использования определенным или предполагаемым кругом пользователей. К практичности ПО относят: • понятность, • обучаемость, • простоту использования. it-courses.by Удобство использования степень удобства ПО для пользователей, его наглядность, легкость эксплуатации и изучения, привлекательность. it-courses.by Эффективность Эффективность - свойство ПО обеспечивать требуемый уровень эффективности в решении задач с учетом используемых вычислительных ресурсов в определенных условиях. Эффективность - это оптимальное сочетание производительности приложения и затрачиваемых ресурсов системы. it-courses.by Удобство сопровождения Сопровождаемость - приспособленность ПО к модификации конфигураций и функций. Добавление новой функциональности - обычное дело для приложений в промышленной эксплуатации. Важно, чтобы приложение не имело внутренних ограничений развития. it-courses.by Портативность (мобильность) Портативность - способность ПО работать на разных аппаратных платформах или под управлением разных операционных систем, переносимость между операционными системами, оборудованием в целом. it-courses.by Совместимость способность программных компонентов взаимодействовать друг с другом. it-courses.by Защищенность минимизация угроз, связанных с несанкционированным чтением, изменением информации и т. д. Угрозы могут быть также связаны с некорректным использованием ПО, внешним воздействием со стороны посторонних лиц, выходом из строя технических средств. it-courses.by Модель качества ПО (ISO/IEC 9126) it-courses.by Этапы тестирования: • анализ требований, • планирование испытаний, • проектирование тестов, • запуск тестов, • редактирование тестов, • системное тестирование, • приемочные испытания, • эксплуатация и сопровождение. it-courses.by Анализ требований: 1. Изучаем спецификации требований. 2. Изучаем функциональные требования к системе. 3. Отвечаем на вопросы: a. Что нам предстоит тестировать? b. Как много будет работы? c. Какие есть сложности? d. Всё ли необходимое у нас есть? 4. Получаем данные, по которым составляем план тестирования. it-courses.by Планирование испытаний: 1. Определяем объемы испытаний и ресурсы. 2. Пишем расписание того, когда будем выполнять намеченные действия. it-courses.by Проектирование тестов: 1. Определяем: • цель тестирования, • специфику входных данных (классы эквивалентности...), • модули и подмодули приложения, • архитектуру проверок (группы чек-листов), • архитектуру тестов (детализация от крупного к деталям). 2. Пишем тесты. it-courses.by Запуск тестов: 1. Проверяем наши тесты в действии. 2. Анализируем тестовые результаты. it-courses.by Редактирование тестов: 1. Пересматриваем и корректируем тесты. 2. Держим тесты в актуальном состоянии. 3. Дополняем новыми тестами. it-courses.by Системное тестирование: 1. Проверяем всю систему (все модули нашего продукта как единую систему). 2. Получаем сведения о качестве ПО. it-courses.by Приемочные испытания Альфа-тестирование - использование незавершённой (альфа) версии продукта, в которой реализована не вся функциональность, запланированная для версии проектной командой, сотрудниками компании, с целью выявить ошибки в работе реализованных модулей и функций для их последующего устранения. Бета-тестирование - интенсивное использование почти готовой версии продукта ограниченной аудиторией конечных пользователей (фокус- группами), чтобы выявить максимальное число ошибок (и устранить их) перед окончательным выходом (релизом) продукта на рынок к массовому потребителю. it-courses.by Альфа-версия и бета-версия it-courses.by Поддержка и сопровождение: 1. Тестирование багов, найденных в релизном продукте. 2. Регрессионное тестирование билда после внесенных исправлений (regression testing). it-courses.by Жизненный цикл тестирования it-courses.by Направления тестирования: ● статическое (без запуска программного кода продукта), ● динамическое (при запущенной системе). it-courses.by Статическое тестирование !! Раннее выявление дефектов дешевле. Проверяем: • код, • требования и спецификации, • архитектуру • дизайн (прототип). it-courses.by Динамическое тестирование Более позднее выявление – более дорогое устранение дефектов (спецификации написаны, архитектура разработана, интерфейс программы тоже готов). Проверяем все характеристики качества запущенного приложения. it-courses.by Методы тестирования Мы работаем с кодом системы? • НЕТ = метод «черного» ящика (black-box). • Частично = метод «серого» ящика (grey-box). • ДА = метод «белого» ящика (white-box). it-courses.by Уровни тестирования Над чем мы проводим тесты? “Вширь”(модуль -> группа модулей -> система): • компонентное/модульное (component/unit testing), • интеграционное (integration testing), • системное (system testing). “Вглубь”: • приемочное (smoke test, acceptance testing), • тест критического пути (critical path test), • расширенный тест (extended test). it-courses.by Виды тестирования: • функциональное тестирование, • нефункциональное тестирование, • тестирование, связанное с изменениями. it-courses.by Функциональное тестирование тестирование ПО, главная цель которого - это проверка реализуемости функциональных требований приложения, т.е. способности приложения в заданных критериях решать возложенные на него задачи: • функциональное тестирование (functional testing), • тестирование новой функциональности (new feature testing), • тестирование безопасности (security testing). it-courses.by Нефункциональное тестирование проверка на соответствие нефункциональным требованиям: 1. Производительности (performance testing): • нагрузочное (performance & load testing), • стрессовое ( stress testing), • тестирование стабильности / надежности (stability / reliability testing), • тестирование объемами (volume testing). 2. Установочное (installation testing). 3. Удобства пользования (usability testing). 4. Тестирование на отказ и восстановление (failover & recovery testing). 5. Конфигурационное (configuration testing). 6. Интернационализации (internationalization testing). 7. Локализационное (localization testing). 8. Тестирование документации (document testing). 9. Тестирование совместимости (compatibility testing). it-courses.by Тестирование производительности Тестирование производительности (performance testing) - тестирование, чтобы определить, как быстро работает система или её часть под определённой нагрузкой. it-courses.by Нагрузочное тестирование Нагрузочное тестирование (load testing) – это автоматизированное тестирование, которое имитирует одновременную работу множества пользователей над приложением. it-courses.by Стрессовое тестирование Стрессовое тестирование (stress testing) позволяет проверить, насколько приложение (система в целом) работоспособны в условиях стресса, и также оценить способность системы к регенерации (возвращению к нормальному состоянию после прекращения стресса). !Цель - оценить работоспособность системы в условиях повышенной и предельной нагрузки. it-courses.by Тестирование надежности Тестирование стабильности / надежности (stability / reliability testing) – проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. it-courses.by Тестирование объемами Задача - оценить производительность при увеличении объемов данных в БД приложения, при этом • происходит измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций, • может производиться определение количества пользователей, одновременно работающих с приложением. it-courses.by Тестирование документации Тестирование документации (document testing) – тестирование, с которого начинается почти любой проект. • Оно призвано обнаружить ошибки в документации. • Эти ошибки опасны тем, что они растут как снежный ком и могут вызвать лавину проблем, приводящих на более поздних стадиях работы с проектом к очень сложно устранимым и дорогостоящим последствиям. it-courses.by Установочное тестирование Тестирование установки направлено на проверку успешной инсталляции и настройки, а также обновления и удаления ПО. it-courses.by Тестирование удобства пользования Тестирование удобства использования (usability testing) - тестирование, показывающее степень удобства использования, обучаемости, понятности и привлекательности для пользователя разрабатываемого ПО в контексте определенных условий. it-courses.by Тестирование на отказ и восстановление Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет продукт с точки зрения способности противостоять сбоям и успешно восстанавливаться после них. Сбои могут возникать в связи с ошибками ПО, отказом оборудования или проблемами связи (отказом сети). it-courses.by Конфигурационное тестирование Конфигурационное тестирование (Configuration Testing) специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, различных конфигурациях компьютеров и т.д.). it-courses.by Тестирование совместимости Тестирование совместимости (compatibility testing) - тестирование для проверки корректной работы продукта в определенном окружении. Окружение - это: • • • • • • • аппаратная платформа; сетевые устройства; периферия (принтеры, CD/DVD-приводы, веб-камеры...); операционная система (Unix, Windows, MacOS) базы данных (Oracle, MS SQL, MySQL, ...) системное программное обеспечение (веб-сервер, антивирус, ...) браузеры (Internet Explorer, Firefox, Opera, Chrome, Safari). it-courses.by Тестирование интернационализации Тестирование интернационализации (internationalization testing) проверяет готовность приложения к работе с разными языковыми интерфейсами: • • • корректному отображению шрифтов и пунктов меню, возможности сортировки и поиска, способности обрабатывать файлы на разных языках. Следующая стадия – локализационное тестирование. it-courses.by Локализационное тестирование Локализационное тестирование (localization testing) проверяет, насколько корректно продукт адаптирован к работе на другом языке: • всё ли переведено и переведено ли правильно, • не нарушилась ли логика построения интерфейса и обработки данных... it-courses.by Локализационное тестирование Для локализационного тестирования рекомендуется обязательно приглашать в команду носителя того языка, перевод на который тестируется. В противном случае мы рискуем увидеть нечто подобное: • Пункт меню «Сделать под себя» («Customise»). • Огромная красная кнопка «ВСЁ!» («Finish»). • Пункт меню «Ясные печенья» («Clear cookies»). it-courses.by Связанные с изменениями виды Починен баг – необходимо проверить, воспроизводится он или нет. Виды: • дымовое тестирование (smoke testing), • регрессионное тестирование (regression testing), • тестирование сборки (build verification testing), • проверка согласованности/исправности (sanity testing). it-courses.by Smoke Test Smoke Test – короткий цикл тестов, чтобы убедиться, что после сборки кода (нового или исправленного) приложение стартует и выполняет основные функции. Smoke Test – выполнение минимального набора тестов для выявления явных ошибок критичного функционала. it-courses.by Регрессионное тестирование Регрессионное тестирование – вид тестирования для подтверждения факта, что существующая ранее функциональность работает, как и прежде, после сделанных в приложении или окружающей среде исправлений или дополнений (починки дефекта, слиянии кода, миграции на другую операционную систему, базу данных, веб-сервер или сервер приложения) . it-courses.by Тестирование сборки Тестирование сборки – тестирование выпущенной версии (сборки) по критериям качества для начала тестирования. it-courses.by Санитарное тестирование Санитарное тестирование – это узконаправленное тестирование, чтобы доказать, что конкретная функция работает согласно заявленным требованиям. it-courses.by Ментальная схема видов тестирования it-courses.by