Виды Тестирования ПО. Полный Список

09.08.2019 Проблемы

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

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

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

1) информирование испытуемого о целях проведения тестирования;

2) ознакомление испытуемого с инструкцией по выполнению тестовых заданий и достижение уверенности исследователя в том, что инструкция понята правильно;

3) обеспечение ситуации спокойного и самостоятельного выполнения заданий испытуемыми; сохранение нейтрального отношения к тестируемым, уход от подсказок и помощи;

4) соблюдение исследователем методических указаний по обработке полученных данных и интерпретации результатов, которыми сопровождается каждый тест или соответствующее задание;

5) предупреждение распространения полученной в результате тестирования психодиагностической информации, обеспечение ее конфиденциальности;

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 также похожа на спиральную модель, в том смысле, что вся процедура тестирования разбивается на несколько циклов. Каждый цикл состоит из четырех этапов - создание, разработка, строительство, и переход. В конце каждого цикла продукт/выход пересматривается, и далее цикл (состоящий из тех же четырех фаз) следует при необходимости.

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

Введение

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

Такой процесс формальной проверки, или верификации , может доказать, что дефекты отсутствуют с точки зрения используемого метода. (То есть нет никакой возможности точно установить или гарантировать отсутствие дефектов в программном продукте с учётом человеческого фактора, присутствующего на всех этапах жизненного цикла ПО).

Существует множество подходов к решению задачи тестирования и верификации ПО, но эффективное тестирование сложных программных продуктов - это процесс в высшей степени творческий, не сводящийся к следованию строгим и чётким процедурам или созданию таковых.

Также к статическому тестированию относят тестирование требований , спецификаций , документации .

Регрессионное тестирование

Основная статья: Регрессионное тестирование

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

Тестовые скрипты

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

Тестирование «белого ящика» и «чёрного ящика»

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

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

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

Если «альфа-» и «бета-тестирование» относятся к стадиям до выпуска продукта (а также, неявно, к объёму тестирующего сообщества и ограничениям на методы тестирования), тестирование «белого ящика» и «чёрного ящика» имеет отношение к способам, которыми тестировщик достигает цели.

Бета-тестирование в целом ограничено техникой чёрного ящика (хотя постоянная часть тестировщиков обычно продолжает тестирование белого ящика параллельно бета-тестированию). Таким образом, термин «бета-тестирование» может указывать на состояние программы (ближе к выпуску чем «альфа»), или может указывать на некоторую группу тестировщиков и процесс, выполняемый этой группой. Итак, тестировщик может продолжать работу по тестированию белого ящика, хотя ПО уже «в бете» (стадия), но в этом случае он не является частью «бета-тестирования» (группы/процесса).

Покрытие кода

Основная статья: Покрытие кода

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

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

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

Цитаты

  • «Тестирование программ может использоваться для демонстрации наличия ошибок, но оно никогда не покажет их отсутствие.» - Дейкстра , 1970 г.

См. также

  • Обратная семантическая трассировка - универсальный метод тестирования любого проектного артефакта

Примечания

Литература

  • Гленфорд Майерс, Том Баджетт, Кори Сандлер Искусство тестирования программ, 3-е издание = The Art of Software Testing, 3rd Edition. - М .: «Диалектика», 2012. - 272 с. - ISBN 978-5-8459-1796-6
  • Лайза Криспин, Джанет Грегори Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд = Agile Testing: A Practical Guide for Testers and Agile Teams. - М .: «Вильямс», 2010. - 464 с. - (Addison-Wesley Signature Series). - 1000 экз. - ISBN 978-5-8459-1625-9
  • Канер Кем, Фолк Джек, Нгуен Енг Кек Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений. - Киев: ДиаСофт, 2001. - 544 с. - ISBN 9667393879
  • Калбертсон Роберт, Браун Крис, Кобб Гэри Быстрое тестирование. - М .: «Вильямс», 2002. - 374 с. - ISBN 5-8459-0336-X
  • Синицын С. В., Налютин Н. Ю. Верификация программного обеспечения. - М .: БИНОМ, 2008. - 368 с. - ISBN 978-5-94774-825-3
  • Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. - СПб. : Питер, 2004. - 320 с. - ISBN 5-94723-698-2

Ссылки

  • Портал специалистов по тестированию и обеспечению качества ПО (рус.)
  • Портал об автоматизированном тестировании ПО (рус.)
  • Качество программного обеспечения (рус.)

Введение

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

Такой процесс формальной проверки, или верификации , может доказать, что дефекты отсутствуют с точки зрения используемого метода. (То есть нет никакой возможности точно установить или гарантировать отсутствие дефектов в программном продукте с учётом человеческого фактора, присутствующего на всех этапах жизненного цикла ПО).

Существует множество подходов к решению задачи тестирования и верификации ПО, но эффективное тестирование сложных программных продуктов - это процесс в высшей степени творческий, не сводящийся к следованию строгим и чётким процедурам или созданию таковых.

Также к статическому тестированию относят тестирование требований , спецификаций , документации .

Регрессионное тестирование

Основная статья: Регрессионное тестирование

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

Тестовые скрипты

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

Тестирование «белого ящика» и «чёрного ящика»

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

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

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

Если «альфа-» и «бета-тестирование» относятся к стадиям до выпуска продукта (а также, неявно, к объёму тестирующего сообщества и ограничениям на методы тестирования), тестирование «белого ящика» и «чёрного ящика» имеет отношение к способам, которыми тестировщик достигает цели.

Бета-тестирование в целом ограничено техникой чёрного ящика (хотя постоянная часть тестировщиков обычно продолжает тестирование белого ящика параллельно бета-тестированию). Таким образом, термин «бета-тестирование» может указывать на состояние программы (ближе к выпуску чем «альфа»), или может указывать на некоторую группу тестировщиков и процесс, выполняемый этой группой. Итак, тестировщик может продолжать работу по тестированию белого ящика, хотя ПО уже «в бете» (стадия), но в этом случае он не является частью «бета-тестирования» (группы/процесса).

Покрытие кода

Основная статья: Покрытие кода

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

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

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

Цитаты

  • «Тестирование программ может использоваться для демонстрации наличия ошибок, но оно никогда не покажет их отсутствие.» - Дейкстра , 1970 г.

См. также

  • Обратная семантическая трассировка - универсальный метод тестирования любого проектного артефакта

Примечания

Литература

  • Гленфорд Майерс, Том Баджетт, Кори Сандлер Искусство тестирования программ, 3-е издание = The Art of Software Testing, 3rd Edition. - М .: «Диалектика», 2012. - 272 с. - ISBN 978-5-8459-1796-6
  • Лайза Криспин, Джанет Грегори Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд = Agile Testing: A Practical Guide for Testers and Agile Teams. - М .: «Вильямс», 2010. - 464 с. - (Addison-Wesley Signature Series). - 1000 экз. - ISBN 978-5-8459-1625-9
  • Канер Кем, Фолк Джек, Нгуен Енг Кек Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений. - Киев: ДиаСофт, 2001. - 544 с. - ISBN 9667393879
  • Калбертсон Роберт, Браун Крис, Кобб Гэри Быстрое тестирование. - М .: «Вильямс», 2002. - 374 с. - ISBN 5-8459-0336-X
  • Синицын С. В., Налютин Н. Ю. Верификация программного обеспечения. - М .: БИНОМ, 2008. - 368 с. - ISBN 978-5-94774-825-3
  • Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. - СПб. : Питер, 2004. - 320 с. - ISBN 5-94723-698-2

Ссылки

  • Портал специалистов по тестированию и обеспечению качества ПО (рус.)
  • Портал об автоматизированном тестировании ПО (рус.)
  • Качество программного обеспечения (рус.)

Андрей Колесов

Вряд ли имеет смысл говорить о важности тестирования в общем процессе разработки ПО, ведь давно известно, что реализация каждого этапа жизненного цикла приложений является необходимым условием для появления качественного программного продукта. Но, сказав слова о равенстве всех видов работ, нужно признать: в течение всей истории разработки ПО - а она насчитывает более 50 лет - тестирование выступало в роли падчерицы, которой достается самая трудоемкая, рутинная и непрестижная работа * . Далеко за примерами ходить не нужно: авторские права разработчиков закреплены законодательством, их имена можно при желании легко узнать. А что нам известно о тех, кто тестирует приложения, и это при том, что именно на их долю приходится в среднем около трети затрат по созданию ПО?

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

Нужно отметить парадоксальную ситуацию: при обилии методической литературы и курсов по проектированию и кодированию ПО наблюдается практически полное отсутствие материалов по тестированию и отладке! Как сказал известный американский автор книг по разработке ПО Джон Роббинс: "Даже если у вас есть специальное образование, бьюсь об заклад, что вы никогда не сталкивались со специальным курсом, посвященным отладке" (см. PC Week/RE, № 9/2004, с. 61).

Однако ситуация несколько меняется, одним из свидетельств чего являются проведенные в конце февраля в Москве компанией "Аплана" при поддержке московского представительства IBM практические семинары "Эффективная организация процессов тестирования в ходе разработки и сопровождения корпоративных систем". Тема оказалась настолько актуальной, что Центр технологий IBM не смог вместить всех желающих в один день, поэтому семинар пришлось проводить дважды. Изначально мероприятие было ориентировано на ИТ-подразделения корпораций, ведущие собственные внутрифирменные разработки, однако большой интерес к нему проявили и специализированные фирмы - создатели заказного и тиражируемого ПО. В общей сложности в семинарах приняли участие более 80 руководителей и специалистов корпоративных и ведомственных центров разработки и внедрения, а также ИТ-компаний.

Следует подчеркнуть, что, хотя в качестве инструментальной базы использовались продукты IBM Rational, основной акцент семинара был сделан на организационные и методические вопросы тестирования в контексте общего процесса разработки ПО и бизнес-функционирования предприятий в целом. Во многом именно такой подход предопределил активное участие специалистов в данном мероприятии.

Особенности организации тестирования

В первую очередь нужно отметить, что вопросы тестирования следует рассматривать в контексте всего жизненного цикла ПО, начиная от разработки ТЗ и заканчивая сопровождением приложений. Как известно, тестирование - это процедура обнаружения дефектов (ошибок) ПО до его промышленного использования. Очевидно, что трудоемкость такой работы связана с количеством самих ошибок, в связи с чем надо четко выделить основные причины их появления:

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

Есть еще один важный момент. Тестирование, в свою очередь, является лишь составляющей частью отладки - процесса доводки ПО после его написания до эксплуатационного состояния. Процесс этот включает две основные процедуры: обнаружение ошибок (тестирование) и поиск и устранение их причин. Однако, даже учитывая все возможные взаимосвязи этих работ (например, поиск причин ошибок требует проведения специального дополнительного тестирования), нужно подчеркнуть, что тестирование является достаточно автономным, независимым этапом жизненного цикла ПО. При этом подчеркнем, что повышение качества разработки (которое обратно пропорционально количеству ошибок в приложении) напрямую снижает затраты на устранение ошибок, но на объем тестирования влияет совсем не так сильно: его нужно проводить в любом случае и желательно "по полной программе".

Понятно также, что организация и методика тестирования в значительной степени зависят от целевого назначения разработки: коробочный продукт, заказной проект или внутрифирменный. И тут стоит еще раз обратить внимание на то, что прошедшие семинары были адресованы в первую очередь разработчикам ИТ-подразделений заказчиков. Объяснение этому простое: во-первых, объем разработок, выполняемых в таких компаниях и в специализированных ИТ-фирмах, по крайней мере соизмерим; во-вторых, в силу ряда причин задачи тестирования при выполнении внутрифирменных проектов достаточно специфичны и очень актуальны.

Говоря об особенностях процедур тестирования в ИТ-подразделениях, наверное, надо выделить три основных, весьма противоречивых аспекта.

  1. Объем тестирования очень велик. Дело в том, что именно в случае внутрифирменных разработок очень часто вносятся изменения (многие слушатели семинара говорили о непрерывном потоке корректировок по запросам подразделений-заказчиков). А ведь, как известно, классическое правило разработки ПО гласит: изменение одной строки кода требует повторного проведения полного цикла тестирования.
  2. Как это ни цинично звучит, но разработчики очень часто не заинтересованы в снижении количества ошибок в ПО, передаваемом в эксплуатацию. Руководство компаний оценивает работу ИТ-отдела в первую очередь по его умению уложиться в бюджет (время и деньги), а проблемы эксплуатации программ его волнуют значительно меньше. Поэтому получается, что увеличение объемов тестирования повышает издержки ИТ-подразделения без выделения соответствующих ресурсов со стороны начальства ** .
  3. Проведение качественного тестирования требует наличия специалистов и инструментов соответствующего профиля. А из п. 2 следует, что ИТ-подразделениям держать собственные группы тестировщиков просто невыгодно.

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

Программа мероприятия включала как методические аспекты организации процессов тестирования, так и практические рекомендации по их применению. Ключевая идея в целом выглядит достаточно очевидной: повышение качества тестирования ПО при сохранении разумного уровня затрат на его проведение должно обеспечиваться за счет современных промышленных методов (организационных и технических) выполнения этих работ.

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

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

Тестирование пронизывает весь жизненный цикл ПО, начиная от проектирования и заканчивая неопределенно долгим этапом эксплуатации. Эти работы напрямую связаны с задачами управления требованиями и изменениями, ведь целью тестирования является как раз возможность убедиться в соответствии программ заявленным требованиям.

Тестирование - процесс пошаговый. Наверное, имеет смысл разделить проверку работоспособности программ в ходе непосредственного написания кода (самим программистом) и после завершения основного этапа кодирования (скорее всего, специальными тестировщиками). Тут можно вспомнить о золотом правиле программирования: написание каждых 20-30 строк кода (тем более законченных процедур, функций) должно сопровождаться проверкой их работоспособности, хотя бы в каком-то основном режиме. В то же время нужно подчеркнуть и важное различие в проведении тестирования в ходе кодирования и по его завершении: в первом случае продолжать написание программы (а также запуск других тестовых примеров) желательно только после устранения ошибки, во втором осуществляется пакетное выполнение серии текстов с простой фиксацией их результатов.

Тестирование - процесс также итерационный. После обнаружения и исправления каждой ошибки обязательно следует повторение тестов, чтобы убедиться в работоспособности программы. Более того, для идентификации причины обнаруженной проблемы может потребоваться проведение специального дополнительного тестирования. При этом нужно всегда помнить о фундаментальном выводе, сделанном профессором Эдсжером Дейкстрой в 1972 г: "Тестирование программ может служить доказательством наличия ошибок, но никогда не докажет их отсутствие!".

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

Функциональное и нагрузочное тестирование. Работы первого вида можно отнести к традиционным - проверка ПО на соответствие требованиям по функционалу *** . В последние годы заметно возросла актуальность относительно новых задач, таких, например, как анализ совместимости разрабатываемого продукта с различными программными и аппаратными платформами, приложениями и пр. Второй тип обычно связывают с задачами оценки производительности и масштабирования, но на самом деле он затрагивает гораздо более широкий круг проблем; выявление узких мест в коде программы, обнаружение "утечек" ресурсов и т. д.

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

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

Наверное, имеет смысл выделить тестирование текущей конфигурации системы и тестирование с учетом ее возможного развития. Анализ возможных проблем в будущем чаще всего связывается сегодня с задачами масштабирования, например повышения нагрузки на систему в результате увеличения числа пользователей. Хотя конечно же тут нужно иметь в виду более широкий круг вопросов, в частности перспективы смены платформы. Хотелось бы при этом подчеркнуть, что оценка масштабирования может (и должна!) производиться не только с помощью тестирования реального приложения, но и методами системного моделирования на уровне общей структуры ПО (о таком подходе в последние годы что-то стали забывать!).

Решение проблемы - центры тестирования

Как уже было сказано, ведущую роль в вопросах тестирования играют методология и организационная составляющая. Что же касается инструментария, то его роль в этом процессе вторична и выбор того или иного продукта для автоматизации задач тестирования определяется уже в зависимости от целей и специфики проекта, существующих предпочтений заказчика, бюджета. На рынке сейчас представлен целый спектр средств автоматизированного тестирования, в котором лидируют IBM Rational, Mercury, Segue, Compuware.

В рамках семинара специалистами компании "Аплана" рассматривались возможности автоматизированного тестирования на примере средств тестирования IBM Rational, которые в настоящее время получили значительное распространение среди российских разработчиков (см. врезку "Методология и инструментарий IBM Rational"). Обсуждались также различные сценарии их применения при создании ПО корпоративного уровня. Среди конкретных программных продуктов особое внимание было уделено наиболее популярной сегодня системе IBM Rational Robot.

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

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

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

  • выполнение полного комплекса работ по тестированию ПО или отдельных его этапов на стенде Центра или на площадке заказчика;
  • консалтинг и обучение заказчиков по вопросам организации процессов тестирования внутри организации;
  • аудит тестирования, проводимого сторонними компаниями;
  • аутсорсинг технических и программных ресурсов для проведения тестирования.

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

* Не забывая о значимости вопросов тестирования, нужно помнить о том, что один из классиков современных методов разработки ПО, голландский профессор Эдсжер Дейкстра еще в конце 60-х годов прошлого столетия обосновал необходимость применения методов структурного программирования, исходя именно из задачи снижения трудозатрат на тестирование.

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

*** Говоря о тестировании, надо также обязательно упомянуть о важности верификации ПО (систематической процедуры проверки правильности). Тонкое различие между этими понятиями заключается в том, что тестирование базируется на возможности сравнения полученных результатов с эталонными. Однако есть достаточно большой класс задач, когда эталонных данных попросту нет. Классический пример такого варианта - построение сложных математических моделей с решением десятков тысяч дифференциальных уравнений, хотя аналогичные ситуации возникают и тогда, когда имеешь дело с бизнес-приложениями. В этом случае требуется включение в ПО дополнительных функций и проведение специальных исследований, чтобы у пользователя появилась уверенность (пусть даже не 100-%), что программа действительно работает правильно.

Методология и инструментарий IBM Rational
Общая методология разработки ПО Rational Unified Process выделяет довольно большой набор видов тестирования (см. рисунок). Их можно с известной долей условности разделить следующим образом:
Функциональное тестирование (Function testing)
  • тестирование целостности данных (Data integrity testing);
  • тестирование на разных платформах (Configuration testing);
  • тестирование отказоустойчивости (Failover & recovery testing);
  • тестирование доступа (Security testing);
  • инсталляционное тестирование (Installation testing);
  • тестирование пользовательского интерфейса (User interface testing)
Нагрузочное тестирование (Load testing)
  • профилирование производительности (Performance profiling);
  • тестирование цикла работы (Business cycle testing);
  • тестирование при большой пользовательской нагрузке (Stress testing);
  • тестирование на больших объемах данных (Volume testing).
Для решения этих задач предлагаются следующие основные инструменты:
  • IBM Rational TestManager - управление тестированием;
  • IBM Rational PurifyPlus (Purify, PureCoverage, Quantify) - анализ работы системы в режиме RunTime;
  • IBM Rational Robot - функциональное и нагрузочное тестирование;
  • IBM Rational TestFactory - автоматизация создания тестов;
  • IBM Rational XDE Tester - функциональное тестирование Java и web-приложений.
Из сопоставления двух этих списков видно, что каждый продукт покрывает несколько типов тестирования. Вот краткая характеристика этих инструментов.
IBM Rational TestManager необходим на всех этапах тестирования, предоставляет в распоряжение команды общие средства планирования, проектирования, исполнения и анализа тестов с использованием единой панели управления. Данный продукт имеет собственное хранилище данных, что обеспечивает более качественное управление версиями. Любой инструмент тестирования ПО, обладающий собственным API, не сложно интегрировать в единую систему, при этом может поддерживаться большинство исполняющих платформ тестирования.
IBM Rational PurifyPlus включает три инструмента, предназначенных для анализа в режиме реального времени приложений и компонентов, разработанных с помощью Visual C/C++, C#, VB, VB .NET, Java, Java .NET. Purify обеспечивает автоматическое выявление ошибок, связанных с памятью, при этом выделяются источник и расположение ошибки. Если доступен исходный код, то его можно исправить непосредственно из Purify. Запатентованная технология Object Code Insertion позволяет выявлять ошибки доступа к памяти не только в исходном коде, но и в двоичных программных компонентах (DLL, объекты COM/DCOM, ODBC). PureCoverage - средство автоматического определения непротестированного кода. Quantify выполняет оценку производительности, определяя узкие места приложений и компонентов, как с исходным кодом, так и без него. Встроенные средства анализа данных помогают проводить сравнение результатов тестовых прогонов для различных вариантов кода.
IBM Rational Robot - средство создания, изменения и выполнения автоматизированных тестов Интернет-приложений, ERP-систем и клиент-серверных решений. С его помощью обеспечивается объектно-уровневая поддержка при создании приложений на различных средствах разработки. Сценарии функциональных тестов генерируются в среде SQABasic, синтаксически совместимой с VB; встроенный редактор позволяет расширить сценарии тестов необходимыми процедурами и логическими условиями. Предусмотрена возможность создания специализированных тестов для различных типов программных объектов. Для формирования скриптов используется собственный Си-подобный язык.
IBM Rational TestFactory - инструмент автоматической генерации скриптов тестирования посредством всестороннего анализа запущенного приложения для выявления дефектов надежности. Поскольку в программах имеется огромное число путей выполнения, проблема заключается в том, чтобы создать тесты, которые проверяют полный функционал приложения за минимальное число шагов.
IBM Rational XDE Tester - специализированный инструмент для тестирования Java-приложений (J2EE, J2SE, SWT, AWT/JFC) и Web-приложений (HTML, DHTML, XML, JavaScript, апплеты Java). Текстовые сценарии пишутся на Java, технология ScriptAssure обеспечивает проверку достоверности динамических данных. Среда тестирования реализована в оболочке Eclipse, при этом имеется возможность встраивания инструмента в WebSphere Studio и Rational XDE Developer.