Разработка и тестирование по. Разработка тестов по учебной дисциплине. Что такое тестирование стабильности
Очень важно понимать, что QA, это не только непосредственный поиск ошибок в ПО. Это процесс состоящий из множества этапов, которые выполняются практически в течение всего жизненного цикла разработки программного обеспечения: от анализа и тестирования начальных требований, до приемки и тестирования инцидентов с продуктивной среды. В этой статье рассмотрены этапы, процессы и подходы к тестированию. В целом, методы тестирования, это достаточно объемная тема и она будет обязательно разобрана отдельно. А сейчас я выделю только самые основные из этапов процесса QA, которые нужно себе хорошо представлять и не будет лишним вспомнить их перед прохождением собеседования.
1. Анализ документации: бизнес требований и функциональных спецификаций
На этом этапе мы понимаем, с чем имеем дело. В процессе анализа документации, чтобы разобраться с функциональностью мы задаем вопросы другим членам команды, например аналитику или разработчику. Часто эти вопросу позволяют выявить какие-либо нелогичные моменты в требованиях, противоречия, возможное негативное влияние новых требований на текущий функционал ПО. Все это – потенциальные ошибки, которые мы можем заметить и исключить еще на этапе документации.
2. Оценка и планирование тестирования
- Основываясь на знаниях, полученных на этапе анализа мы оцениваем время тестирования. Оценка также обширная и важная тема, ей посвящен целый раздел данного руководства (Требования к тестировщику ч.9: оценка времени на тестирование )
- Далее выполняется планирование. Подробно про планирование я расскажу в статье для менеджеров и руководителей групп тестирования. Однако, тестировщику необходимо знать, что на этом этапе формируются (обычно тест менеджером) стратегия и план тестирования, в которых сводиться воедино вся информация о том, какой функционал мы тестируем, на каком окружении, с какими данным, кто участвует в процессе, какие критерии качества используем и т.д. Подробно – в статье про тестовую стратегию. На интервью тестировщику часто задают вопрос, что такое стратегия тестирования, из чего она состоит и для чего нужна. Поэтому рекомендую ознакомиться с материалом, чтобы получить представление.
Если процесс, по которому мы работаем, достаточно сильно формализован и включает множество отчетов, репортов и прочих сопроводительных документов, то на этом этапе мы также готовим все необходимы шаблоны для этих документов
3. Разработка сценариев тестирования
На данном этапе мы описываем сценарии, по которым будем тестировать продукт. Здесь важны две темы: как определить необходимые сценарии и как их описать.
- Для того, чтобы определить какие проверки необходимо выполнить существуют множество техник и способов. В этой статье я не буду их описывать (можно по названию найти подробное описание на WiKi), только перечислю некоторые из них:
- Traceability matrix
- Decision Table
- Boundary value analysis and Equivalence partitioning
- Pairwise Technique
- Use-Case
Для прохождения интервью самое главное ответить на вопросы:
- Как планируете формировать список проверок?
- Как поймете насколько полно этот список проверок охватывает функционал, который необходимо проверить?
Если какими-то техниками раньше не пользовались, интервьюеру сразу будет ясно, что знания только теоретические, а вы можете легко запутаться. В этом случае обязательно разберитесь с методом тестирования граничных значений и классами эквивалентности (Boundary value analysis and Equivalence partitioning) и отталкивайтесь от функций ПО. Следите, чтобы на каждую функцию и состояние продукта был как минимум один тест. Если у функциональности сложная логика работы, то делайте проверку на каждое условие алгоритма. Также обязательно ориентируйтесь на бизнес смысл функционала, на то как ПО в реальности будет использоваться (Use-Case), создавая тест на каждый сценарий.
- Описание сценариев тестирования или тест дизайн, также имеет множество реализаций: от использования специальных программных средств типа HP ALM до описания сценариев в Excel или Word. Здесь важно четко понимать основные параметры теста, которые должны быть всегда, вне зависимости от инструмента. Скорее всего вам зададут примерно следующий вопрос: «Как выглядит идеальный тест кейс? Из чего он состоит?». Собственно основные составляющие теста следующие:
- Версия тестируемого ПО, ссылка на требования, автор тест кейса
- Начальные условия, шаги для подготовке к тестированию: состояние системы, настройки среды, данные
- Заголовок тест кейса с его основной идеей
- Шаги тестирования, включающие: действие, ожидаемый результат, фактический результат
- Статус тест (тут также необходимы дата выставления статуса и кто его поменял)
- Ссылки на обнаруженные ошибки
- Действия по возвращению системы в исходное состояние
Естественно тест кейс может содержать и множество других параметров, я привел только самые важные без которых точно не обойтись. Более полное описание составляющих теста приведено тут.
4. Выполнение тестирования ПО
Непосредственно тестирование проводиться в несколько этапов, а внутри каждого этапа – цикл (тестирование -> анализ и исправление ошибки -> ретест), или общая проверка работоспособности (поставка\функциональность работает или не работает). Пока рассмотрим только ручное тестирование, а автоматизацию оставим на для отдельной темы. В качестве основных этапов тестирования ПО, которые выполняет QA команда, можно выделить следующие:
- Smoke testing и Sanity testing – предварительная проверка системы и поставки ПО. На этом этапе наша задача убедиться, что тестовая среда настроена и работает, а полученный билд содержит необходимый функционал или изменения и с ним можно продолжать работать. Т.о. мы делаем самые основные, базовые проверки.
- Functional & non-functional testing – основной этап тестирования, который включает в себя все многообразие проверок разных типов разобранных в разделе «3 - Базовые знания по тестированию», направленных на изменения, добавленные в рамках поставки. На этом этапе мы проводим несколько циклов тестирования, как правило более 2.
- Regression testing – проводим цикл регрессионного тестирования и проверяем, что новые фичи и изменения не сломали текущий функционал. Тут также несколько циклов. В принципе этот этап можно считать второй фазой предыдущего блока - Functional & non-functional testing.
- Integration & end-to-end testing – на этом этапе мы проверяем как наш модуль, система или продукт будет взаимодействовать с другими модулями, системами и продуктами. Здесь мы проверяем всю цепочку действий пользователя при работе с системой. Например, пользователь делает заявку через сайт интернет магазина, далее заявка записывается в базу, далее обрабатывается и передается в систему для закупок и т.д. В этом случае мы должны настроить необходимое окружение и проверить весь жизненный цикл заявки, даже если мы доработали только одну систему в цепи.
- Demo testing & User Acceptance Testing – этап демонстрации ПО заказчику \ пользователям, которые в свою очередь также могут (и в идеале должны) проводить свое тестирование продукта – UAT
Более наглядно этапы тестирования ПО представлены на схеме Этапы и участники процесса тестирования . Также там указаны другие команды, которые также участвуют в процессе тестирования, чтобы получилась более полная картина.
5. Подведение итогов и подготовка результатов тестирования
На этом этапе мы делаем следующее:
- Проводим качественный и количественный анализ обнаруженных во время тестирования ошибок и проблем
- Формализуем эти результаты в виде метрик тестирования
- Готовим отчет о результатах тестирования с заключением рекомендуется ли данный билд к поставке в продуктив, какие есть риски, какие меры необходимо предпринять для того, чтобы предотвратить или минимизировать сбои
В качестве результатов и метрик тестирования мы можем использовать такие показатели как (подробнее про метрики тестирования в отдельной статье):
- Количество открытых дефектов по уровню их критичности
Например, у нас могут быть четкие критерии, что с открытыми дефектами уровня Critical мы не выходим в продуктив, а открытый дефект уровня High может быть только один и при этом должна быть дополнительная инструкция как бороться с его последствиями и план по устранению
- Количество открытых дефектов к общему числу дефектов
Так мы показываем какая часть ошибок не исправлена и какое количество таких ошибок, чтобы принять решение о продолжении тестирования или релизе ПО
- Количество дефектов к общему числу тестов
Эта метрика показывает среднюю эффективность одного теста
- Число раз, которое в среднем переоткрывался дефект
Эта метрика показывает сложность и\или качество кода. Если показатель высокий, значит также высоки потенциальные риски, особенно если впоследствии в продукт будут вноситься изменения
6. Поддержка во время установки в продуктив
На данном этапе задача тестирования предоставить команде поддержки, которая будет проводить установку в продуктив всю необходимую информацию о тестировании продукта, возможных рисках, сложностях.
7. Поддержка во время сопровождения продукта
Тестирование программного обеспечения - это оценка разрабатываемого программного обеспечения/продукта, чтобы проверить его возможности, способности и соответствие ожидаемым результатам. Существуют различные типы методов, используемые в области тестирования и обеспечения качества о них и пойдет речь в данной статье.
Тестирование программного обеспечения является неотъемлемой частью цикла разработки программного обеспечения.
Что такое тестирование программного обеспечения?
Тестирование программного обеспечения - это не что иное, как испытание куска кода к контролируемым и неконтролируемым условиям эксплуатации, наблюдение за выходом, а затем изучение, соответствует ли он предварительно определенным условиям.
Различные наборы тест-кейсов и стратегий тестирования направлены на достижение одной общей цели - устранение багов и ошибок в коде, и обеспечения точной и оптимальной производительности программного обеспечения.
Методика тестирования
Широко используемыми методами тестирования являются модульное тестирование, интеграционное тестирование, приемочное тестирование, и тестирование системы. Программное обеспечение подвергается этим испытаниям в определенном порядке.
3) Системное тестирование
4) Приемочные испытания
В первую очередь проводится модульный тест. Как подсказывает название, это метод испытания на объектном уровне. Отдельные программные компоненты тестируются на наличие ошибок. Для этого теста требуется точное знание программы и каждого установленного модуля. Таким образом, эта проверка осуществляется программистами, а не тестерами. Для этого создаются тест-коды, которые проверяют, ведет ли программное обеспечение себя так, как задумывалось.
Отдельные модули, которые уже были подвергнуты модульному тестированию, интегрируются друг с другом, и проверяются на наличие неисправностей. Такой тип тестирования в первую очередь выявляет ошибки интерфейса. Интеграционное тестирование можно осуществлять с помощью подхода "сверху вниз", следуя архитектурному сооружению системы. Другим подходом является подход «снизу вверх», который осуществляется из нижней части потока управления.
Системное тестирование
В этом тестировании, вся система проверяется на наличие ошибок и багов. Этот тест осуществляется путем сопряжения аппаратных и программных компонентов всей системы, и затем выполняется ее проверка. Это тестирование числится под методом тестирования "черного ящика", где проверяются ожидаемые для пользователя условия работы программного обеспечения.
Приемочные испытания
Это последний тест, который проводится перед передачей программного обеспечения клиенту. Он проводится, чтобы гарантировать, что программное обеспечение, которое было разработано отвечает всем требованиям заказчика. Существует два типа приемо-сдаточных испытаний - то, которое осуществляется членами команды разработчиков, известно, как внутреннее приемочное тестирования (Альфа-тестирование), а другое, которое проводится заказчиком, известно, как внешнее приемочное тестирования.
Если тестирование проводится с помощью предполагаемых клиентов, оно называется приемочными испытаниями клиента. В случае если тестирование проводится конечным пользователем программного обеспечения, оно известно, как приемочное тестирование (бета-тестирование).
Есть несколько основных методов тестирования, которые формируют часть режима тестирования программного обеспечения. Эти тесты обычно считаются самодостаточными в поиске ошибок и багов во всей системе.
Тестирование методом черного ящика
Тестирование методом черного ящика осуществляется без каких-либо знаний внутренней работы системы. Тестер будет стимулировать программное обеспечение для пользовательской среды, предоставляя различные входы и тестируя сгенерированные выходы. Этот тест также известен как Black-box, closed-box тестирование или функциональное тестирование.
Тестирование методом белого ящика
Тестирование методом "Белого ящика", в отличие от "черного ящика", учитывает внутреннее функционирование и логику работы кода. Для выполнения этого теста, тестер должен иметь знания кода, чтобы узнать точную часть кода, имеющую ошибки. Этот тест также известен как White-box, Open-Box или Glass box тестирование.
Тестирование методом серого ящика
Тестирование методом серого ящика или Gray box тестирование, это что-то среднее между White Box и Black Box тестированием, где тестер обладает лишь общими знаниями данного продукта, необходимыми для выполнения теста. Эта проверка осуществляется посредством документации и схемы информационных потоков. Тестирование проводится конечным пользователем, или пользователям, которые представляются как конечные.
Нефункциональные тесты
Безопасность приложения является одной из главных задач разработчика. Тестирование безопасности проверяет программное обеспечение на обеспечение конфиденциальности, целостности, аутентификации, доступности и безотказности. Индивидуальные испытания проводятся в целях предотвращения несанкционированного доступа в программный код.
Стресс-тестирование является методом, при котором программное обеспечение подвергается воздействию условий, которые выходят за рамки нормальных условий работы программного обеспечения. После достижения критической точки, полученные результаты записываются. Этот тест определяет устойчивость всей системы.
Программное обеспечение проверяется на совместимость с внешними интерфейсами, такими как операционные системы, аппаратные платформы, веб-браузеры и т.д. Тест на совместимость проверяет, совместим ли продукт с любой программной платформой.
Как подсказывает название, эта методика тестирования проверяет объем кода или ресурсов, которые используются программой при выполнении одной операции.
Это тестирование проверяет аспект удобства и практичности программного обеспечения для пользователей. Легкость, с которой пользователь может получить доступ к устройству формирует основную точку тестирования. Юзабилити-тестирование охватывает пять аспектов тестирования, - обучаемость, эффективность, удовлетворенность, запоминаемость, и ошибки.
Тесты в процессе разработки программного обеспечения
Каскадная модель использует подход "сверху-вниз", независимо от того, используется ли она для разработки программного обеспечения или для тестирования.
Основными шагами, участвующими в данной методике тестирования программного обеспечения, являются:
- Анализ потребностей
- Тест дизайна
- Тест реализации
- Тестирование, отладка и проверка кода или продукта
- Внедрение и обслуживание
В этой методике, вы переходите к следующему шагу только после того, как вы завершили предыдущий. В модели используется не-итерационный подход. Основным преимуществом данной методики является ее упрощенный, систематический и ортодоксальный подход. Тем не менее, она имеет много недостатков, так как баги и ошибки в коде не будут обнаружены до этапа тестирования. Зачастую это может привести к потере времени, денег, и других ценных ресурсов.
Agile Model
Эта методика основана на избирательном сочетании последовательного и итеративного подхода, в дополнение к довольно большому разнообразию новых методов развития. Быстрое и поступательное развитие является одним из ключевых принципов этой методологии. Акцент делается на получение быстрых, практичных, и видимых выходов. Непрерывное взаимодействие с клиентами и участие является неотъемлемой частью всего процесса разработки.
Rapid Application Development (RAD). Методология быстрой разработки приложений
Название говорит само за себя. В этом случае методология принимает стремительный эволюционный подход, используя принцип компонентной конструкции. После понимания различных требований данного проекта, готовится быстрый прототип, а затем сравнивается с ожидаемым набором выходных условий и стандартов. Необходимые изменения и модификации вносятся после совместного обсуждения с заказчиком или группой разработчиков (в контексте тестирования программного обеспечения).
Хотя этот подход имеет свою долю преимуществ, он может быть неподходящим, если проект большой, сложный, или имеет чрезвычайно динамический характер, в котором требования постоянно меняются.
Спиральная модель
Как видно из названия, спиральная модель основана на подходе, в котором есть целый ряд циклов (или спиралей) из всех последовательных шагов в каскадной модели. После того, как начальный цикл будет завершена, выполняется тщательный анализ и обзор достигнутого продукта или выхода. Если выход не соответствует указанным требованиям или ожидаемым стандартам, производится второй цикл, и так далее.
Rational Unified Process (RUP). Рациональный унифицированный процесс
Методика RUP также похожа на спиральную модель, в том смысле, что вся процедура тестирования разбивается на несколько циклов. Каждый цикл состоит из четырех этапов - создание, разработка, строительство, и переход. В конце каждого цикла продукт/выход пересматривается, и далее цикл (состоящий из тех же четырех фаз) следует при необходимости.
Применение информационных технологий растет с каждым днем, также и важность правильного тестирования программного обеспечения выросло в разы. Многие фирмы содержат для этого штат специальных команд, возможности которых находятся на уровне разработчиков.
Как и процесс разработки, процесс последующего тестирования программного обеспечения также следует определенной методологии. Под методологией в данном случае мы понимаем разнообразные комбинации принципов, идей, методов и концептов, к которым вы прибегаете во время работы над проектом.
В настоящее время существует довольно большое количество разнообразных подходов к тестированию, каждый со своими отправными точками, продолжительностью выполнения и методами, используемыми на каждом этапе. И выбор того или иного из них может быть довольно непростой задачей. В этой статье мы рассмотрим разные подходы к тестированию ПО и поговорим об их основных особенностях, чтобы помочь вам сориентироваться в существующем многообразии.
Каскадная модель (Линейная последовательная модель жизненного цикла ПО)
Каскадная модель (Waterfall Model) является одной из наиболее старых моделей, которую можно применять не только для разработки или тестирования ПО, но также практически для любого другого проекта. Его базовым принципом является последовательный порядок выполнения задач. Это значит, что мы можем переходить к следующему шагу разработки или тестирования только после того, как предыдущий был успешно завершен. Эта модель подходит для небольших проектов и применима только в том случае, если все требования точно определены. Главными достоинствами этой методологии являются экономическая эффективность, простота использования и управления документацией.
Процесс тестирования ПО начинается после завершения процесса разработки. На этой стадии все необходимые тесты переносятся с юнитов на системное тестирование для того, чтобы контролировать работу компонентов как по отдельности, так и в комплексе.
Помимо упомянутых выше достоинств, данный подход к тестированию также имеет и свои недостатки. Всегда существует вероятность обнаружения критических ошибок в процессе тестирования. Это может привести к необходимости полностью изменить один из компонентов системы или даже всю логику проекта. Но подобная задача невозможна в случае каскадной модели, поскольку возвращение на предыдущий шаг в этой методологии запрещено.
Узнайте больше о каскадной модели из предыдущей статьи .
V-Model (Модель верификации и валидации)
Как и каскадная модель, методика V-Model основана на прямой последовательности шагов. Основным отличием между этими двумя методологиями является то, что тестирование в данном случае планируется параллельно с соответствующей стадией разработки. Согласно этой методологии тестирования ПО, процесс начинается как только определены требования и становится возможным начать статическое тестирование, т.е. верификацию и обзор, что позволяет избежать возможных дефектов ПО на поздних стадиях. Соответствующий план тестирования создается для каждого уровня разработки ПО, что определяет ожидаемые результаты, а также критерии входа и выхода для данного продукта.
Схема данной модели показывает принцип разделения задач на две части. Те, которые относятся к дизайну и разработке, размещены слева. Задачи, относящиеся к тестированию ПО, размещены справа:
Основные этапы этой методологии могут изменяться, однако обычно они включают следующие:
- Этап определения требований . Приемочное тестирование относится к этому этапу. Его основная задача состоит в оценке готовности системы к финальному использованию
- Этап, на котором происходит высокоуровневое проектирование, или High-Level Design (HDL) . Этот этап относится к системному тестированию и включает оценку соблюдения требований к интегрированным системам
- Фаза детального дизайна (Detailed Design) параллельна фазе интеграционного тестирования, во время которой происходит проверка взаимодействий между различными компонентами системы
- После этапа написания кода начинается другой важный шаг — юнит-тестирование. Очень важно убедиться в том, что поведение отдельных частей и компонентов ПО корректно и соответствует требованиям
Единственным недостатком рассмотренной методологии тестирования является отсутствие готовых решений, которые можно было бы применить, чтобы избавиться от дефектов ПО, обнаруженных на этапе тестирования.
Инкрементная модель
Данная методология может быть описана, как мультикаскадная модель тестирования ПО. Рабочий процесс разделяется на некоторое количество циклов, каждый из которых также делится на модули. Каждая итерация добавляет определенный функционал к ПО. Инкремент состоит из трех циклов:
- дизайн и разработка
- тестирование
- реализация.
В этой модели возможна одновременная разработка разных версий продукта. Например, первая версия может проходить этап тестирования в то время, как вторая версия находится на стадии разработки. Третья версия в то же самое время может проходить этап дизайна. Этот процесс может продолжаться до самого завершения проекта.
Очевидно, что данная методология требует обнаружения максимально возможного количества ошибок в тестируемом ПО настолько быстро, насколько это возможно. Так же, как и фаза реализации, которая требует подтверждения готовности продукта к доставке к конечному пользователю. Все эти факторы существенно увеличивают весомость требований к тестированию.
В сравнении с предыдущими методологиями, инкрементная модель имеет несколько важных преимуществ. Она более гибкая, изменение требований ведет к меньшим затратам, а процесс тестирования ПО является более эффективным, поскольку гораздо проще проводить тестирование и дебаггинг за счет использования небольших итераций. Тем не менее, стоит отметить, что общая стоимость все же выше, чем в случае каскадной модели.
Спиральная модель
Спиральная модель это методология тестирования ПО, которая основана на инкрементном подходе и прототипировании. Она состоит из четырех этапов:
- Планирование
- Анализ рисков
- Разработка
- Оценка
Сразу после того, как первый цикл завершен, начинается второй. Тестирование ПО начинается еще на этапе планирования и длится до стадии оценки. Основным преимуществом спиральное модели является то, что первые результаты тестирования появляется незамедлительно после появления результатов тестов на третьем этапе каждого цикла, что помогает гарантировать корректную оценку качества. Тем не менее, важно помнить о том, что эта модель может быть довольно затратной и не подходит для маленьких проектов.
Несмотря на то, что эта модель является довольно старой, она остается полезной как для тестирования, так и для разработки. Более того, главная цель многих методологий тестирования ПО, включая спиральную модель, изменилась в последнее время. Мы используем их не только для поиска дефектов в приложениях, но также и для выяснения причин, их вызвавших. Такой подход помогает разработчикам работать более эффективно и быстро устранять ошибки.
Читайте подробнее o спиральной модели в предыдущем блог посте .
Agile
Методология гибкой (Agile) разработки и тестирование ПО может быть описана как набор подходов, ориентированных на использование интерактивной разработки, динамического формирования требований и обеспечения их осуществления как результата постоянного взаимодействия внутри самоорганизующейся рабочей группы. Большинство гибких методологий разработки ПО нацелены на минимизацию рисков посредством разработки в рамках коротких итераций. Одним из главных принципов этой гибкой стратегии является возможность быстрого реагирования на возможные изменения, нежели стремление положиться на долгосрочное планирование.
Узнайте больше об Agile (прим. — статья на английском языке) .
Экстремальное программирование (XP, Extreme Programming)
Экстремальное программирование является одним их примеров гибкой разработки ПО. Отличительной особенностью этой методологии является “парное программирование”, ситуация, когда один разработчик работает над кодом, в то время как его коллега постоянно проводит обзор написанного кода. Процесс тестирования ПО является довольно важным, поскольку начинается даже раньше, чем написана первая строка кода. Каждый модуль приложения должен иметь юнит-тест, чтобы большинство ошибок могло быть исправлено на стадии написания кода. Другим отличительным свойством является то, что тест определяет код, а не наоборот. Это значит, что определенная часть кода может быть признана завершенной только в том случае, если все тесты пройдены успешно. В противном случае, код отклоняется.
Главными достоинствами такой методологии являются постоянное тестирование и короткие релизы, что помогает обеспечить высокое качество кода.
Scrum
Scrum — Часть методологии Agile, итеративный инкрементный фреймворк, созданный для управления процессом разработки ПО. Согласно принципам Scrum, команда тестировщиков должна участвовать в следующих этапах:
- Участие в Scrum планировании
- Поддержка в юнит-тестировании
- Тестирование пользовательских историй
- Сотрудничество с заказчиком и владельцем продукта для определения критериев приемлемости
- Предоставление автоматического тестировании
Более того, участники QA-отдела должны присутствовать на всех ежедневных собраниях, как и другие члены команды, чтобы обсудить, что было протестировано и сделано вчера, что будет протестировано сегодня, а также общий прогресс тестирования.
В то же время принципы Agile методологии в Scrum к появлению специфических особенностей:
- Оценка усилий, необходимых для каждой пользовательской истории является обязательной
- Тестировщик должен быть внимательным к требованиям, поскольку они могут постоянно изменяться
- Риск регрессии возрастает вместе с частыми изменениями в коде
- Одновременность планирования и выполнения тестов
- Недопонимание между членами команды в случае если требования заказчика не до конца ясны
Узнайте больше о методологии Scrum из предыдущей статьи .
Заключение
В заключение важно отметить, что сегодня практика использования той или иной методологии тестирования ПО подразумевает мультиверсальный подход. Иными словами, не стоит рассчитывать на то, что какая-то одна методология окажется подходящей для всех типов проектов. Выбор одной из них зависит от большого числа аспектов, таких как тип проекта, требования заказчика, поставленные сроки, а также многих других. С точки зрения тестирования ПО, для некоторых методологий характерно приступать к тестированию на ранних этапах разработки, в то время как при работе с другими принято ожидать до тех пор, пока система не готова полностью.
Если вам нужна помощь с разработкой программного обеспечения или тестированием, выделенная команда разработчиков и QA инженеров готова к работе.
Недавно был на собеседовании на Middle QA на проект, который явно превышает мои возможности. Уделил много времени тому, чего не знал вообще и мало времени повторению простой теории, а зря.
Ниже основы основ для повторения перед собеседованием для Trainee and Junior: определение тестирования, качество , верификация / валидация , цели, этапы, тест план, пункты тест плана, тест дизайн, техники тест дизайна, traceability matrix , test case, чек-лист, дефект, error/deffect/failure , баг репорт, severity vs priority, уровни тестирования, виды / типы, подходы к интеграционному тестированию , принципы тестирования, статическое и динамическое тестирование, исследовательское / ad-hoc тестирование, требования, жизненный цикл бага, стадии разработки ПО, decision table, qa/qc/test engineer, диаграмма связей.
Все замечания, корректировки и дополнения очень приветствуются.
Тестирование программного обеспечения - проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом. В более широком смысле, тестирование - это одна из техник контроля качества, включающая в себя активности по планированию работ (Test Management), проектированию тестов (Test Design), выполнению тестирования (Test Execution) и анализу полученных результатов (Test Analysis).
Качество программного обеспечения (Software Quality) - это совокупность характеристик программного обеспечения, относящихся к его способности удовлетворять установленные и предполагаемые потребности.
Верификация (verification)
- это процесс оценки системы или её компонентов с целью определения удовлетворяют ли результаты текущего этапа разработки условиям, сформированным в начале этого этапа. Т.е. выполняются ли наши цели, сроки, задачи по разработке проекта, определенные в начале текущей фазы.
Валидация (validation)
- это определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе .
Также можно встретить иную интерпритацию:
Процесс оценки соответствия продукта явным требованиям (спецификациям) и есть верификация (verification), в то же время оценка соответствия продукта ожиданиям и требованиям пользователей - есть валидация (validation). Также часто можно встретить следующее определение этих понятий:
Validation - ’is this the right specification?’.
Verification - ’is the system correct to specification?’.
Цели тестирования
Повысить вероятность того, что приложение, предназначенное для тестирования, будет работать правильно при любых обстоятельствах.
Повысить вероятность того, что приложение, предназначенное для тестирования, будет соответствовать всем описанным требованиям.
Предоставление актуальной информации о состоянии продукта на данный момент.
Этапы тестирования:
1. Анализ продукта
2. Работа с требованиями
3. Разработка стратегии тестирования
и планирование процедур контроля качества
4. Создание тестовой документации
5. Тестирование прототипа
6. Основное тестирование
7. Стабилизация
8. Эксплуатация
Тест план (Test Plan)
- это документ, описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.
Отвечает на вопросы:
Что надо тестировать?
Что будете тестировать?
Как будете тестировать?
Когда будете тестировать?
Критерии начала тестирования.
Критерии окончания тестирования.
Основные пункты тест плана
В стандарте IEEE 829 перечислены пункты, из которых должен (пусть - может) состоять тест-план:
a) Test plan identifier;
b) Introduction;
c) Test items;
d) Features to be tested;
e) Features not to be tested;
f) Approach;
g) Item pass/fail criteria;
h) Suspension criteria and resumption requirements;
i) Test deliverables;
j) Testing tasks;
k) Environmental needs;
l) Responsibilities;
m) Staffing and training needs;
n) Schedule;
o) Risks and contingencies;
p) Approvals.
Тест дизайн
– это этап процесса тестирования ПО, на котором проектируются и создаются тестовые сценарии (тест кейсы), в соответствии с определёнными ранее критериями качества и целями тестирования.
Роли, ответственные за тест дизайн:
Тест аналитик - определяет «ЧТО тестировать?»
Тест дизайнер - определяет «КАК тестировать?»
Техники тест дизайна
Эквивалентное Разделение (Equivalence Partitioning - EP) . Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала - 0.
Анализ Граничных Значений (Boundary Value Analysis - BVA). Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.
Причина / Следствие (Cause/Effect - CE). Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как «Имя», «Адрес», «Номер Телефона» а затем, нажать кнопку «Добавить» - это «Причина». После нажатия кнопки «Добавить», система добавляет клиента в базу данных и показывает его номер на экране - это «Следствие».
Предугадывание ошибки (Error Guessing - EG). Это когда тестировщик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «пользователь должен ввести код». Тестировщик будет думать: «Что, если я не введу код?», «Что, если я введу неправильный код? », и так далее. Это и есть предугадывание ошибки.
Исчерпывающее тестирование (Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.
Попарное тестирование (Pairwise Testing) - это техника формирования наборов тестовых данных. Сформулировать суть можно, например, вот так: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров.
Допустим, какое-то значений (налог) для человека рассчитывается на основании его пола, возраста и наличия детей - получаем три входных параметра, для каждого из которых для тестов выбираем каким-то образом значения. Например: пол - мужской или женский; возраст - до 25, от 25 до 60, более 60; наличие детей - да или нет. Для проверки правильности расчётов можно, конечно, перебрать все комбинации значений всех параметров:
№ | пол | возраст | дети |
---|---|---|---|
1 | мужчина | до 25 | детей нет |
2 | женщина | до 25 | детей нет |
3 | мужчина | 25-60 | детей нет |
4 | женщина | 25-60 | детей нет |
5 | мужчина | старше 60 | детей нет |
6 | женщина | старше 60 | детей нет |
7 | мужчина | до 25 | дети есть |
8 | женщина | до 25 | дети есть |
9 | мужчина | 25-60 | дети есть |
10 | женщина | 25-60 | дети есть |
11 | мужчина | старше 60 | дети есть |
12 | женщина | старше 60 | дети есть |
А можно решить, что нам не нужны сочетания значений всех параметров со всеми, а мы хотим только убедиться, что мы проверим все уникальные пары значений параметров. Т.е., например, с точки зрения параметров пола и возраста мы хотим убедиться, что мы точно проверим мужчину до 25, мужчину между 25 и 60, мужчину после 60, а также женщину до 25, женщину между 25 и 60, ну и женщину после 60. И точно так же для всех остальных пар параметров. И таким образом, мы можем получить гораздо меньше наборов значений (в них есть все пары значений, правда некоторые дважды):
№ | пол | возраст | дети |
---|---|---|---|
1 | мужчина | до 25 | детей нет |
2 | женщина | до 25 | дети есть |
3 | мужчина | 25-60 | дети есть |
4 | женщина | 25-60 | детей нет |
5 | мужчина | старше 60 | детей нет |
6 | женщина | старше 60 | дети есть |
Такой подход примерно и составляет суть техники pairwise testing - мы не проверяем все сочетания всех значений, но проверяем все пары значений.
Traceability matrix - Матрица соответствия требований
- это двумерная таблица, содержащая соответсвие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases). В заголовках колонок таблицы расположены требования, а в заголовках строк - тестовые сценарии. На пересечении - отметка, означающая, что требование текущей колонки покрыто тестовым сценарием текущей строки.
Матрица соответсвия требований используется QA-инженерами для валидации покрытия продукта тестами. МСТ является неотъемлемой частью тест-плана.
Тестовый сценарий (Test Case)
- это артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
Пример:
Action Expected Result Test Result
(passed/failed/blocked)
Open page «login» Login page is opened Passed
Каждый тест кейс должен иметь 3 части:
PreConditions Список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
Test Case Description Список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям
PostConditions Список действий, переводящих систему в первоначальное состояние (состояние до проведения теста - initial state)
Виды Тестовых Сценариев:
Тест кейсы разделяются по ожидаемому результату на позитивные и негативные:
Позитивный тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.
Негативный тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций (срабатывание валидаторов), а также проверяет, что вызываемая приложением функция не выполняется при срабатывании валидатора.
Чек-лист (check list)
- это документ, описывающий что должно быть протестировано. При этом чек-лист может быть абсолютно разного уровня детализации. На сколько детальным будет чек-лист зависит от требований к отчетности, уровня знания продукта сотрудниками и сложности продукта.
Как правило, чек-лист содержит только действия (шаги), без ожидаемого результата. Чек-лист менее формализован чем тестовый сценарий. Его уместно использовать тогда, когда тестовые сценарии будут избыточны. Также чек-лист ассоциируются с гибкими подходами в тестировании.
Дефект (он же баг) – это несоответствие фактического результата выполнения программы ожидаемому результату. Дефекты обнаруживаются на этапе тестирования программного обеспечения (ПО), когда тестировщик проводит сравнение полученных результатов работы программы (компонента или дизайна) с ожидаемым результатом, описанным в спецификации требований.
Error
- ошибка пользователя, то есть он пытается использовать программу иным способом.
Пример - вводит буквы в поля, где требуется вводить цифры (возраст, количество товара и т.п.).
В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message), с красным крестиком которые.
Bug (defect)
- ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так как планировалось и программа выходит из-под контроля. Например, когда никак не контроллируется ввод пользователя, в результате неверные данные вызывают краши или иные «радости» в работе программы. Либо внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
Failure
- сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы. То есть, существуют такие дефекты, которые приводят к сбоям (A defect caused the failure) и существуют такие, которые не приводят. UI-дефекты например. Но аппаратный сбой, никак не связанный с software, тоже является failure.
Баг Репорт (Bug Report)
- это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
Шапка
Короткое описание (Summary) Короткое описание проблемы, явно указывающее на причину и тип ошибочной ситуации.
Проект (Project) Название тестируемого проекта
Компонент приложения (Component) Название части или функции тестируемого продукта
Номер версии (Version) Версия на которой была найдена ошибка
Серьезность (Severity) Наиболее распространена пятиуровневая система градации серьезности дефекта:
S1 Блокирующий (Blocker)
S2 Критический (Critical)
S3 Значительный (Major)
S4 Незначительный (Minor)
S5 Тривиальный (Trivial)
Приоритет (Priority) Приоритет дефекта:
P1 Высокий (High)
P2 Средний (Medium)
P3 Низкий (Low)
Статус (Status) Статус бага. Зависит от используемой процедуры и жизненного цикла бага (bug workflow and life cycle)
Автор (Author) Создатель баг репорта
Назначен на (Assigned To) Имя сотрудника, назначенного на решение проблемы
Окружение
ОС / Сервис Пак и т.д. / Браузера + версия /… Информация об окружении, на котором был найден баг: операционная система, сервис пак, для WEB тестирования - имя и версия браузера и т.д.
…
Описание
Шаги воспроизведения (Steps to Reproduce) Шаги, по которым можно легко воспроизвести ситуацию, приведшую к ошибке.
Фактический Результат (Result) Результат, полученный после прохождения шагов к воспроизведению
Ожидаемый результат (Expected Result) Ожидаемый правильный результат
Дополнения
Прикрепленный файл (Attachment) Файл с логами, скриншот или любой другой документ, который может помочь прояснить причину ошибки или указать на способ решения проблемы
Severity vs Priority
Серьезность (Severity) - это атрибут, характеризующий влияние дефекта на работоспособность приложения.
Приоритет (Priority) - это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Можно сказать, что это инструмент менеджера по планированию работ. Чем выше приоритет, тем быстрее нужно исправить дефект.
Severity выставляется тестировщиком
Priority – менеджером, тимлидом или заказчиком
Градация Серьезности дефекта (Severity)
S1 Блокирующая (Blocker)
Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее ключевыми функциями становится невозможна. Решение проблемы необходимо для дальнейшего функционирования системы.
S2 Критическая (Critical)
Критическая ошибка, неправильно работающая ключевая бизнес логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, без возможности решения проблемы, используя другие входные точки. Решение проблемы необходимо для дальнейшей работы с ключевыми функциями тестируемой системой.
S3 Значительная (Major)
Значительная ошибка, часть основной бизнес логики работает некорректно. Ошибка не критична или есть возможность для работы с тестируемой функцией, используя другие входные точки.
S4 Незначительная (Minor)
Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.
S5 Тривиальная (Trivial)
Тривиальная ошибка, не касающаяся бизнес логики приложения, плохо воспроизводимая проблема, малозаметная посредствам пользовательского интерфейса, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.
Градация Приоритета дефекта (Priority)
P1 Высокий (High)
Ошибка должна быть исправлена как можно быстрее, т.к. ее наличие является критической для проекта.
P2 Средний (Medium)
Ошибка должна быть исправлена, ее наличие не является критичной, но требует обязательного решения.
P3 Низкий (Low)
Ошибка должна быть исправлена, ее наличие не является критичной, и не требует срочного решения.
Уровни Тестирования
1. Модульное тестирование (Unit Testing)
Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).
2. Интеграционное тестирование (Integration Testing)
Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.
3. Системное тестирование (System Testing)
Основной задачей системного тестирования является проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т.д.
4. Операционное тестирование (Release Testing).
Даже если система удовлетворяет всем требованиям, важно убедиться в том, что она удовлетворяет нуждам пользователя и выполняет свою роль в среде своей эксплуатации, как это было определено в бизнес моделе системы. Следует учесть, что и бизнес модель может содержать ошибки. Поэтому так важно провести операционное тестирование как финальный шаг валидации. Кроме этого, тестирование в среде эксплуатации позволяет выявить и нефункциональные проблемы, такие как: конфликт с другими системами, смежными в области бизнеса или в программных и электронных окружениях; недостаточная производительность системы в среде эксплуатации и др. Очевидно, что нахождение подобных вещей на стадии внедрения - критичная и дорогостоящая проблема. Поэтому так важно проведение не только верификации, но и валидации, с самых ранних этапов разработки ПО.
5. Приемочное тестирование (Acceptance Testing)
Формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью:
определения удовлетворяет ли система приемочным критериям;
вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.
Виды / типы тестирования
Функциональные виды тестирования
Функциональное тестирование (Functional testing)
Тестирование пользовательского интерфейса (GUI Testing)
Тестирование безопасности (Security and Access Control Testing)
Тестирование взаимодействия (Interoperability Testing)
Нефункциональные виды тестирования
Все виды тестирования производительности:
o нагрузочное тестирование (Performance and Load Testing)
o стрессовое тестирование (Stress Testing)
o тестирование стабильности или надежности (Stability / Reliability Testing)
o объемное тестирование (Volume Testing)
Тестирование установки (Installation testing)
Тестирование удобства пользования (Usability Testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing)
Конфигурационное тестирование (Configuration Testing)
Связанные с изменениями виды тестирования
Дымовое тестирование (Smoke Testing)Регрессионное тестирование (Regression Testing)
Повторное тестирование (Re-testing)
Тестирование сборки (Build Verification Test)
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)
Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.
Тестирование пользовательского интерфейса (GUI Testing) - функциональная проверка интерфейса на соответствие требованиям - размер, шрифт, цвет, consistent behavior.
Тестирование безопасности - это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
Тестирование взаимодействия (Interoperability Testing) – это функциональное тестирование, проверяющее способность приложения взаимодействовать с одним и более компонентами или системами и включающее в себя тестирование совместимости (compatibility testing) и интеграционное тестирование
Нагрузочное тестирование - это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе.
Стрессовое тестирование (Stress Testing) позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом цели стрессового тестирования могут пересекаться с целями тестирования производительности.
Объемное тестирование (Volume Testing). Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения
Тестирование стабильности или надежности (Stability / Reliability Testing). Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.
Тестирование установки направленно на проверку успешной инсталляции и настройки, а также обновления или удаления программного обеспечения.
Тестирование удобства пользования
- это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Сюда также входит:
User eXperience (UX) - ощущение, испытываемое пользователем во время использования цифрового продукта, в то время как User interface - это инструмент, позволяющий осуществлять интеракцию «пользователь - веб-ресурс».
Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.
Конфигурационное тестирование (Configuration Testing) - специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.)
Дымовое (Smoke) тестирование рассматривается как короткий цикл тестов, выполняемый для подтверждения того, что после сборки кода (нового или исправленного) устанавливаемое приложение, стартует и выполняет основные функции.
Регрессионное тестирование - это вид тестирования направленный на проверку изменений, сделанных в приложении или окружающей среде (починка дефекта, слияние кода, миграция на другую операционную систему, базу данных, веб сервер или сервер приложения), для подтверждения того факта, что существующая ранее функциональность работает как и прежде. Регрессионными могут быть как функциональные, так и нефункциональные тесты.
Повторное тестирование
- тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
В чем разница между regression testing и re-testing?
Re-testing - проверяется исправление багов
Regression testing - проверяется то, что исправление багов, а также любые изменения в коде приложения, не повлияли на другие модули ПО и не вызвало новых багов.
Тестирование сборки или Build Verification Test - тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования. По своим целям является аналогом Дымового Тестирования, направленного на приемку новой версии в дальнейшее тестирование или эксплуатацию. Вглубь оно может проникать дальше, в зависимости от требований к качеству выпущенной версии.
Санитарное тестирование - это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям. Является подмножеством регрессионного тестирования. Используется для определения работоспособности определенной части приложения после изменений произведенных в ней или окружающей среде. Обычно выполняется вручную.
Подходы к интеграционному тестированию:
Снизу вверх (Bottom Up Integration)
Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.
Сверху вниз (Top Down Integration)
Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами. Таким образом мы проводим тестирование сверху вниз.
Большой взрыв («Big Bang» Integration)
Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.
Принципы тестирования
Принцип 1
– Тестирование демонстрирует наличие дефектов (Testing shows presence of defects)
Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.
Принцип 2
– Исчерпывающее тестирование недостижимо (Exhaustive testing is impossible)
Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.
Принцип 3
– Раннее тестирование (Early testing)
Чтобы найти дефекты как можно раньше, активности по тестированию должны быть начаты как можно раньше в жизненном цикле разработки программного обеспечения или системы, и должны быть сфокусированы на определенных целях.
Принцип 4
– Скопление дефектов (Defects clustering)
Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.
Принцип 5
– Парадокс пестицида (Pesticide paradox)
Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот “парадокс пестицида”, тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения,
или системы, и найти как можно больше дефектов.
Принцип 6
– Тестирование зависит от контекста (Testing is concept depending)
Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.
Принцип 7
– Заблуждение об отсутствии ошибок (Absence-of-errors fallacy)
Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.
Cтатическое и динамическое тестирование
Статическое тестирование отличается от динамического тем, что производится без запуска программного кода продукта. Тестирование осуществляется путем анализа программного кода (code review) или скомпилированного кода. Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к статическому тестированию относится тестирования спецификации и прочей документации.
Исследовательское / ad-hoc тестирование
Простейшее определение исследовательского тестирования - это разработка и выполнения тестов в одно и то же время. Что является противоположностью сценарного подхода (с его предопределенными процедурами тестирования, неважно ручными или автоматизированными). Исследовательские тесты, в отличие от сценарных тестов, не определены заранее и не выполняются в точном соответствии с планом.
Разница между ad hoc и exploratory testing в том, что теоретически, ad hoc может провести кто угодно, а для проведения exploratory необходимо мастерство и владение определенными техниками. Обратите внимание, что определенные техники это не только техники тестирования.
Требования
– это спецификация (описание) того, что должно быть реализовано.
Требования описывают то, что необходимо реализовать, без детализации технической стороны решения. Что, а не как.
Требования к требованиям:
Корректность
Недвусмысленность
Полнота набора требований
Непротиворечивость набора требований
Проверяемость (тестопригодность)
Трассируемость
Понимаемость
Жизненный цикл бага
Стадии разработки ПО - это этапы, которые проходят команды разработчиков ПО, прежде чем программа станет доступной для широко круга пользователей. Разработка ПО начинается с первоначального этапа разработки (стадия «пре-альфа») и продолжается стадиями, на которых продукт дорабатывается и модернизируется. Финальным этапом этого процесса становится выпуск на рынок окончательной версии программного обеспечения («общедоступного релиза»).
Программный продукт проходит следующие стадии:
анализ требований к проекту;
проектирование;
реализация;
тестирование продукта;
внедрение и поддержка.
Каждой стадии разработки ПО присваивается определенный порядковый номер. Также каждый этап имеет свое собственное название, которое характеризует готовность продукта на этой стадии.
Жизненный цикл разработки ПО:
Пре-альфа
Альфа
Бета
Релиз-кандидат
Релиз
Пост-релиз
Таблица принятия решений (decision table) – великолепный инструмент для упорядочения сложных бизнес требований, которые должны быть реализованы в продукте. В таблицах решений представлен набор условий, одновременное выполнение которых должно привести к определенному действию.
Вариант 1
1. Упорядоченная последовательность команд (инструкций) компьютера для решения конкретной задачи.
A. Свойство программы
B. Программное обеспечение
C. Постановка задачи
D. Программа
E. Язык программирования
2. С позиции специфики разработки и вида программного обеспечения, на какие два класса делятся задачи?
A. Позиционные и функциональные
B. Технологические и функциональные
C. Позиционные и непозиционные
D. Технологические и параметрические
E. Нет верного ответа
3. Какими последовательными действиями можно представить процесс создания программ?
A. Программирование, постановка задачи, построение алгоритма
B. Построение алгоритма, решение задачи
C. Построение алгоритма, программирование
D. Программирование, построение алгоритма, постановка задачи
E. Постановка задачи, построение алгоритма решения, программирование
4. Постановка задачи - это …
A. упорядоченная последовательность команд компьютера для решения задач
B. точная формулировка решения задачи на компьютере с описанием входных и выходных данных
C. совокупность связанных между собой функций, задач управления, с помощью которых достигается выполнение поставленных целей
D. система точно сформулированных правил
E. Все ответы верны
5. Алгоритм - это …
A. разбиение процесса обработки информации на более простые этапы
B. задача, подлежащая реализации с использованием средств информационных технологий
C. точная формулировка решения задачи на компьютере с описанием входных и выходных данных
E. нет верного ответа
6. Разбиение процесса обработки информации на более простые этапы (шаги выполнения), выполнение которых компьютером или человеком не вызывает затруднений
A. Дискретность
B. Определенность
C. Массовость
D. Алгоритм
E. Все ответы верны
7. Выполнимость - это …
A. конечность действий алгоритма решения задач, позволяющая получить желаемый результат при допустимых исходных данных за конечное число шагов
B. разбиение процесса обработки информации на более простые этапы (шаги выполнения), выполнение которых компьютером или человеком не вызывает затруднений
C.действие алгоритма решения задач, позволяющая получить не желаемый результат при допустимых исходных данных за бесконечное число шагов
D. система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных в желаемый результат за конечное число шагов
Е. нет верного ответа
8. Осуществляет разработку и отладку программ для решения функциональных задач
B. Программист-аналитик
C. Прикладной программист
D. Администратор
E. Постановщик задач
9. Занимается разработкой, эксплуатацией и сопровождением системного программного обеспечения, поддерживающего работоспособность компьютера и создающего среду для выполнения программ
A. Прикладной программист
B Программист-аналитик
C. Системный программист
D. Администратор БД
E. нет верного ответа
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Постановщик задач
E. Администратор
A. Администратор БД
B. Прикладной программист
C. Постановщик задач
D. Системный программист
E. все ответы верны
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Конечный пользователь
E. Нет верного ответа
A. Дискретность
B. Экономичность
C. Готовность
D. Работоспособность
E. Надежность
A. Определенность
B. Работоспособность
C. Надежность
D. Экономичность
E. Готовность
A. Экономичность
B. Готовность
C. Надежность
D. Определенность
E. Работоспособность
16. Устойчивость - …
E. Нет верного ответа
A. Устойчивость
B. Перезапуск
C. Готовность
D. Надежность
E. Все ответы верны
С каким этапом жизненного цикла программного продукта связано с алгоритмизацией
18.Процесса обработки данных, детализацией функций обработки, разработкой структуры ПП, выбором методов и средств создания программ?
A. Документирование
B. Программирование
C. Сопровождение
D. Проектирование
E. нет верного ответа
A. Документирование
D. Сопровождение ПП
E. Все ответы верны
20.На каком этапе жизненного цикла программного продукта составляются необходимые сведения по установке и обеспечению надежной работы ПП и т.д.?
A. Проектирование
B. Эксплуатация
C. Документирование
D. Программирование
E. нет верного объекта
21. Жизненный цикл ПО - …
E. Нет верного ответа
E. Нет верного ответа
B. Процесс поставки, процесс обеспечения качества, процесс верификации
C. Процесс управления, процесс создания инфраструктуры, процесс обучения
E. Процесс управления, процесс разработки, процесс обучения
Процесс документирования, процесс обеспечения качества, процесс верификации
E. нет верного ответа
27.На какие две группы делится документация, создаваемая в процессе разработки программных средств?
28. Код группы 1 стандарта ЕСПД означает …
D. Резервные группы
E. нет верного ответа
29. Код группы 0 стандарта ЕСПД означает …
A. Прочие стандарты
B. Резервные группы
C. Основополагающие стандарты
E. Общие положения
30. ЕСПД - это …
A. комплекс программ, устанавливающих правила разработки документации
B. упорядоченная последовательность команд (инструкций) компьютера для решения конкретной задачи
C. система точно сформулированных правил
D. система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных в желаемый результат за конечное число шагов
E. комплекс государственных стандартов, устанавливающих взаимоувязанные правила разработки, оформления и обращения программ и программной документации
31. Расшифруйте ЕСПД
A. Единственная связь программной документации
В. Единая свобода программной документации
C. Единая система программной документации
D. Единство системной программной документации
Е. Нет верного ответа
32. Для чего предназначено Руководство по управлению ПС?
A. Руководство по управлению дает краткую характеристику функциональных возможностей ПС
B. Руководство по управлению описывает сообщения, генерируемые, когда ПС взаимодействует с другими системами, и как реагировать на эти сообщения, также объясняет, как сопровождать системную аппаратуру, если она используется ПС
C. Руководство по управлению дельно предписывает, как устанавливать системы в конкретной среде
D. Руководство по управлению содержит необходимую информацию по применению ПС
E. нет верного ответа
33. На какие группы подразделяются документы, входящие в состав ПС
A. Документация, помогающая вносить изменения в ПС и документация по сопровождению ПС
B. Документы управления разработкой ПС и документация по сопровождению ПС
C. Пользовательская документация и документы управления разработкой ПС
D. Документы управления разработкой ПС и пользовательская документация
E. Пользовательская документация ПС и документация по сопровождению ПС
34. Документы, которые фиксируют различные детали взаимодействия между менеджерами и разработчиками
A. Стандарты
B. Планы, оценки, расписания
C. Отчеты
D. Рабочие документы
E. Заметки и переписка
35. Документы, которые содержат фиксацию идей и проблем, возникающих в процессе разработки, описание используемых идей и подходов
A. Отчеты
B. Стандарты
C. Планы, оценки, расписания
D. Рабочие документы
Е. Заметки, переписка
36. Документы, создаваемые менеджерами для прогнозирования и управления процессами разработки и сопровождения
A. Стандарты
B. Планы, оценки, расписания
C. Рабочие документы
D. Заметки
E. Отчеты
37. Выберите тип документов, которые предписывают разработчикам, каким принципам, правилам, соглашениям они должны следовать в процессе разработки ПС
A. Отчеты
В. Рабочие документы
C. Планы, оценки, расписания
D. Стандарты
Е. Заметки и переписка
38. Для чего необходимы документы, входящие в состав ПС?
A. Данный вид документов содержит фиксацию идей и проблем, возникающих в процессе разработки, описание используемых идей и подходов
B. Эти документы предписывают разработчикам, каким принципам, правилам, соглашениям они должны следовать в процессе разработки ПС
C. Обеспечивают связь внутри коллектива разработчиков и между коллективом разработчиков и менеджерами
E. Описывают программы как с точки зрения их применения пользователями, так и с точки зрения их разработчиков и сопроводителей
39. Для чего необходимы документы управления разработкой ПС?
A. Описывают программы как с точки зрения их применения пользователями, так и с точки зрения их разработчиков и сопроводителей
40. B. Обеспечивают связь внутри коллектива разработчиков и между коллективом разработчиков и менеджерами
C. Объясняет пользователям, как они должны действовать, чтобы применять данное ПС
D. Обеспечивают связь между самой программой и входными данными
E. нет верного ответа
Вариант 2
1. Код группы 2 стандарта ЕСПД означает …
A. Прочие стандарты
C. Правила выполнения документации разработки
Е. Резервные группы
2. Пояснительная записка. Требования к содержанию и оформлению
A. ГОСТ 19.508-79
B. ГОСТ 19.501-78
C. ГОСТ 19.402-78
D. ГОСТ 19.202-78
Е. ГОСТ 19.404-79
3.Техническое задание. Требования к содержанию и оформлению
A. ГОСТ 19.203-78
B. ГОСТ 19.201-78
C. ГОСТ 19.106-78
D. ГОСТ 19.404-79
E. нет верного ответа
4. Требования к программным документам, выполненные печатным способом
A. ГОСТ 19.105-78
B. ГОСТ 19.106-78
C. ГОСТ 19.201-78
D. ГОСТ 19.101-77
E. ГОСТ 19.301-79
5. Общие положения
A. ГОСТ 19.101-77
B. ГОСТ 19.002-77
C. ГОСТ 19.001-77
D. ГОСТ 19.001-78
E. Нет верного ответа
6. Код группы 9 стандарта ЕСПД означает …
A. Резервные группы
B. Основополагающие стандарты
C. Правила выполнения эксплуатационной документации
D. Правила выполнения документации сопровождения
Е. Нет верного ответа
7. Код группы 8 стандарта ЕСПД означает …
A. Прочие стандарты
C. Резервные группы
D. Правила обращения программной документации
Е. Нет верного ответа
8. Код группы 7 стандарта ЕСПД означает …
A. Основополагающие стандарты
B. Правила обращения программной документации
C. Прочие стандарты
E. Резервные группы
9. Код группы 6 стандарта ЕСПД означает …
A. Правила обращения программной документации
В. Общие положения
C. Правила выполнения документации изготовления
D. Резервные группы
Е. Правила выполнения документации сопровождения
10. Анализирует и проектирует комплекс взаимосвязанных программ для реализации функций предметной области
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Постановщик задач
E. Администратор
11. Участвует в процессе создания программ на начальной стадии работ
A. Администратор БД
B. Прикладной программист
C. Постановщик задач
D. Системный программист
E. все ответы верны
12. Является основным потребителем программ
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Конечный пользователь
E. Нет верного ответа
13. Свойство системы сохранять во времени в установленных пределах значения всех характеристик, определяющих способность системы выполнять требуемые функции в условиях заданных режимов эксплуатации
A. Дискретность
B. Экономичность
C. Готовность
D. Работоспособность
E. Надежность
14. Возможность доступа к услугам АИС с использованием соответствующих технологий всегда, когда в ней возникает необходимость
A. Определенность
B. Работоспособность
C. Надежность
D. Экономичность
E. Готовность
15. Количество и степень занятости ресурсов, процессов, ОП, внешней и внутренней памяти, каналов ввода/вывода, терминалов и каналов сети
A. Экономичность
B. Готовность
C. Надежность
D. Определенность
E. Работоспособность
16. Устойчивость - …
A. характеризует способность к безотказному функционированию при наличии сбоев
B. возможность доступа к услугам АИС с использованием соответствующих технологий всегда, когда в ней возникает необходимость
C. Свойство системы сохранять во времени в установленных пределах значения всех характеристик, определяющих способность системы выполнять требуемые функции в условиях заданных режимов эксплуатации
D. количество и степень занятости ресурсов, процессов, ОП, внешней и внутренней памяти, каналов ввода/вывода, терминалов и каналов сети
E. Нет верного ответа
17. Процесс обеспечивает возобновления нормально функционирования АИС
A. Устойчивость
B. Перезапуск
C. Готовность
D. Надежность
E. Все ответы верны
18. С каким этапом жизненного цикла программного продукта связано с алгоритмизацией процесса обработки данных, детализацией функций обработки, разработкой структуры ПП, выбором методов и средств создания программ?
A. Документирование
B. Программирование
C. Сопровождение
D. Проектирование
E. нет верного ответа
19. С каким этапом жизненного цикла программного продукта связано с технической реализацией проектных решений и выполнение с помощью выбранного инструментария разработчика (алгоритмические языки и системы программирования и.т.д.)?
A. Документирование
B. Проектирование структуры ПП
C. Программирование, тестирование и отладка
D. Сопровождение ПП
E. Все ответы верны
20. На каком этапе жизненного цикла программного продукта составляются необходимые сведения по установке и обеспечению надежной работы ПП и т.д.?
A. Проектирование
B. Эксплуатация
C. Документирование
D. Программирование
E. нет верного объекта
21. Жизненный цикл ПО - …
A. непрерывный процесс, который начинается с момент его полного изъятия из эксплуатации и заканчивается в момент принятия решения о необходимости его создания
B. процесс, который начинается с момента его полного описания и заканчивается в момент принятия решения о необходимости его создания
C. непрерывный процесс, который начинается с момента принятия решения о необходимости его создания и заканчивается в момент его полного изъятия из эксплуатации
D. прерывающийся процесс, который начинается с момента написания структуры программы и заканчивается в момент его полного изъятия из эксплуатации
E. Нет верного ответа
22. На какие три группы процессов делится структура жизненного цикла ПО по стандарту ISO/IEC 12207?
A. Составные, действующие и вспомогательные процессы
B. Основные, дополнительные и остальные процессы
C. Вспомогательные, основные и дополнительные процессы
D. Основные, вспомогательные и организационные процессы
E. Нет верного ответа
23. Основные процессы жизненного цикла ПО делятся на …
A. Процесс документирования, процесс обеспечения качества, процесс верификации
B. Процесс поставки, процесс обеспечения качества, процесс верификации
C. Процесс управления, процесс создания инфраструктуры, процесс обучения
D. Процесс приобретения, процесс поставки, процесс разработки*
E. Процесс управления, процесс разработки, процесс обучения
24. Вспомогательные процессы жизненного цикла ПО делятся на …
A. Процесс документирования, процесс обеспечения качества, процесс верификации*
B. Процесс поставки, процесс обеспечения качества, процесс верификации
C. Процесс управления, процесс создания инфраструктуры, процесс обучения
D. Процесс приобретения, процесс поставки, процесс разработки
E. Процесс управления, процесс разработки, процесс обучения
25. Организационные процессы жизненного цикла ПО делятся на …
A. Процесс управления, процесс создания инфраструктуры, процесс обучения, процесс усовершенствования
В. Процесс документирования, процесс обеспечения качества, процесс верификации
C. Процесс приобретения, процесс поставки, процесс разработки
D. Процесс управления, процесс создания инфраструктуры, процесс документирования
E. нет верного ответа
26. Что подразумевает собой процесс документирования?
A. Процесс состоит из действий и задач заказчика, приобретающего ПП
B. Процесс охватывает действия и задачи, выполняемые поставщиком, который снабжает заказчика ПП
C. Процесс обеспечивает соответствующие гарантии того, что ПО в процессе его ЖЦ соответствует заданным требованиям и утвержденным планам
D. Процесс охватывает действия и задачи, выполняемые разработчиком, и охватывает работы по созданию ПО и его компонентов в соответствии с заданными требованиями
Е. Процесс предусматривает формализованное описание информации, созданной в течение ЖЦ ПО
27. На какие две группы делится документация, создаваемая в процессе разработки программных средств?
A. Документы, входящие в состав ПС и документы, помогающие вносить изменения в ПС
B. Пользовательская документация и документация по сопровождению ПС
C. Документы управления разработкой ПС и документы, входящие в состав ПС
D. Общая документация и вспомогательная документация
E. Документы управления разработкой ПС и документы по сопровождению ПС
28. Код группы 1 стандарта ЕСПД означает …
A. Общие положения
B. Правила выполнения эксплуатационной документации
C. Основополагающие стандарты
D. Резервные группы
E. нет верного ответа
29. Код группы 0 стандарта ЕСПД означает …
A. Прочие стандарты
B. Резервные группы
C. Основополагающие стандарты
D. Правила выполнения документации разработки
E. Общие положения
30. ЕСПД - это …
A. Комплекс программ, устанавливающих правила разработки документации
B. Упорядоченная последовательность команд (инструкций) компьютера для решения конкретной задачи
C. Система точно сформулированных правил
D. Система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных в желаемый результат за конечное число шагов
E. Комплекс государственных стандартов, устанавливающих взаимоувязанные правила разработки, оформления и обращения программ и программной документации
31. Код группы 5 стандарта ЕСПД означает …
A. Правила выполнения документации разработки
B. Резервные группы
C. Основополагающие стандарты
D. Правила выполнения эксплуатационной документации
Е.Правила обращения программной документации
32. Код группы 4 стандарта ЕСПД означает …
A. Резервные группы
B. Правила выполнения документации сопровождения
C. Общие положения
D. Правила выполнения документации изготовления
E. Правила выполнения документации разработки
33. Код группы 3 стандарта ЕСПД означает …
A. Правила выполнения документации сопровождения
B. Правила выполнения документации разработки
C. Правила обращения программной документации
D. Правила выполнения документации изготовления
E. Правила эксплуатационной документации
34. Руководство программиста
A. ГОСТ 19.506-79
B. ГОСТ 19.404-79
C. ГОСТ 19.505-79
D. ГОСТ 19.604-78
E. нет верного ответа
35. Заголовки разделов записывают …
A. Строчными буквами и размещают по правому краю
B. Строчными буквами и размещают симметрично относительно правой и левой границ текста
C. Прописными буквами и размещают по левому краю
D. С абзаца строчными буквами (кроме первой прописной)
E. Прописными буквами и размещают симметрично относительно правой и левой границ текста
36. Что не входит в основную часть программного документа?
A. Текст документа
B. Перечень сокращений
C. Лист содержания
D. Приложения
E. Предметный указатель
37. Информационная часть программного документа содержит:
A. Предметный указатель и лист содержания
B. Лист утверждения и лист содержания
C. Титульный лист и лист утверждения
D. Аннотацию и лист содержания
E. Лист утверждения и аннотацию
38. Титульная часть программного документа содержит:
A. Титульный лист
B. Лист утверждения и титульный лист
C. Титульный лист и аннотацию
D. Титульный лист и лист содержания
E. Нет верного ответа
39. Где должны быть указаны требования к информационным структурам на входе и выходе и методам решения, исходным кодам, языкам программирования
A. Требования к составу и параметрам технических средств
B. Требования к функциональным характеристикам
C. Требования к информационной и программной совместимости
D. Требования к надежности
40. Где должны быть указаны требования к обеспечению устойчивого функционирования, контроль входной и выходной информации, время восстановления после отказа и т.п.
A. Требования к функциональным характеристикам
B. Требования к составу и параметрам технических средств
C. Требования к надежности
D. Специальные требования
E. нет верного ответа
Паспорт
1 вариант
Сұрақтың № № вопроса
Қиындықтың дәрежесі
Уровень сложности
Дұрыс жауабы
Правильные ответы