Техническое тестирование. Тесты на выявление технических способностей. Матрица трассировки требований и тест-кейсов


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

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

Уровни тестирования

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

  • Википедия. Модульное тестирование .
  • Модульное тестирование кода Visual C# в приложениях для Магазина Windows .

Интеграционное тестирование - это процесс исследования ПО, при котором тестируется интерфейсы между компонентами или подсистемами.

  • Википедия. Интеграционное тестирование.

Системное тестирование - это процесс исследования ПО, при котором тестируется интегрированная система на её соответствие требованиям заказчика. Альфа и Бета тестирование относятся к подкатегориям системного тестирования.

Классификация видов тестирования

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

По объекту тестирования

Функциональное тестирование (functional testing) - тестирование ПО, направленное на проверку реализуемости функциональных требований. При функциональном тестировании проверяется способность ПО правильно решать задачи, необходимые пользователям.

  • Википедия. Функциональное тестирование .
  • StackOverflow. Unit tests vs Functional Testing .

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

  • Википедия. Тестирование производительности .

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

  • Википедия. Нагрузочное тестирование .

Стресс-тестирование (stress testing) - тестирование ПО, которое оценивает надёжность и устойчивость системы в условиях превышения пределов нормального функционирования. Это проверка программы в таких стрессовых ситуациях как наличие большого объёма входных параметров, нехватка дискового пространства или маломощный процессор.

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

  • Википедия. Стресс-тестирование программного обеспечения .

Тестирование стабильности (stability/endurance/soak testing) - тестирование ПО, при котором проверяется работоспособность ПО при длительном тестировании со среднем уровнем нагрузки.

Тестирование безопасности (security testing) - тестирование ПО, которое проверяет фактическую реакцию защитных механизмов, встроенных в систему на проникновение злоумышленников.

  • Википедия. Тестирование безопасности .
  • Очир Абушинов: Особенности тестирования безопасности ПО .

Тестирование совместимости (compatibility testing) - тестирование ПО, которое проверяет работоспособность ПО в определенном окружении.

По знанию системы

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

  • Википедия. Тестирование по стратегии чёрного ящика .

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

  • Википедия. Стратегия тестирования по принципу "Белого ящика" .

По времени проведения тестирования

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

Бета-тестирование - это распространение версий с ограничениями для некоторой группы лиц, с целью проверки содержания допустимо минимального количества ошибок в программном продукте.

Регрессионное тестирование (regression testing) - тестирование ПО, при котором проводится проверка ранее найденных ошибок, а также проверка основной функциональности. Проводится, как правило, на каждой новой версии программного продукта. Регрессивное тестирование является наиболее важной фазой тестирования непосредственно перед окончанием работ над продуктом, так как непосредственно перед релизом продукта крайне необходимо проверить не только основную функциональность, но и то, что ни одна из ранее найденных ошибок не повторяется в финальной версии. Являясь неотъемлемой частью функционального тестирования, регрессионное тестирование позволяет гарантировать, что изменения, связанные с устранением дефектов, не оказали негативного воздействия на остальные функциональные области приложения.

  • Википедия. Регрессивное тестирование .

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

  • Википедия. Smoke test .

По степени автоматизации

Ручное тестирование (manual testing) - тестирование при котором не используются программные средства для выполнения тестов и проверки результатов выполнения.

  • Тестирование: Ручное или Автоматизированное ?

Автоматизированное тестирование (automated testing) - тестирование при котором используются программные средства для выполнения тестов и проверки результатов выполнения. Автоматизированное тестирование, несомненно, приносит пользу и экономит время и ресурсы компании.

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

Для автоматизации тестирования существует большое количество приложений. Наиболее популярные из них: HP LoadRunner, HP QuickTest Professional, HP Quality Center, .

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

  • Тестирование: Ручное или Автоматизированное ?

Динамический и статический анализ кода

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

Динамический анализ кода (runtime analysis) - способ анализа программы непосредственно при ее выполнении. При динамическом анализе проблемы в исходном коде находятся по мере их возникновения. Процесс анализа можно разбить на несколько этапов - подготовка исходных данных, проведение тестового запуска программы, сбор необходимых параметров и анализ полученных данных.

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

Существует несколько подходов к классификации видов тестирования ПО. Рассмотрим самые распространенные.

1. Виды тестирования по целям

Согласно с тем, какие цели вы преследуете, тестируя то или иное приложение или программу, тестирование бывает:

  • Функциональное;
  • Нефункциональное.

Функциональное тестирование направлено на проверку того, какие функции программного продукта реализованы, и того, насколько верно они реализованы.

Нефункциональное – проверяет корректность работы нефункциональных требований. Этот вид тестирования скорее проверяет КАК программный продукт работает и включает в себя следующие виды:

  • Тестирование производительности – проверяет как программный продукт работает под определенной нагрузкой. Включает в себя тестирование: > Нагрузочное – определяет, как программа работает под ожидаемой нагрузкой.

    > Стрессовое – определяет работоспособность программного продукта при максимальной нагрузке.

    > Тестирование стабильности – проверяет, выдержит ли программный продукт длительную нагрузку.

    > Конфигурационное – определяет, как программный продукт будет работать в условиях смены конфигурации (платформы, драйверов, компьютеров).

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

2. По степени автоматизации

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

  • Ручное – тестирование программного продукта без использования дополнительных программных средств, т.е. тестирование «вручную».
  • Автоматизированное – тестирование программного продукта с использованием программных средств (более детально в описании ).

3. По позитивности сценария

По позитивности сценария тестирование бывает:

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

4. По доступу к коду программного продукта

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

  • Тестирование «белого ящика» – тестирование программного продукта с доступом к коду.
  • Тестирование «черного ящика» – тестирование без доступа к коду продукта.
  • Тестирование «серого ящика» – тестирование, основанное на ограниченном знании внутренней структуры программного продукта. Часто говорят, что это смесь тестирования «белого ящика» и «черного ящика», но это в корне неверно. В данном случае тестировщик не работает с кодом программного продукта, но он знаком с внутренней структурой программы или приложения и взаимодействием между компонентами.

5. По уровню

По уровню тестирование бывает:

  • Модульное / юнит-тестирование – проверка корректной работы отдельных единиц системы программного продукта. Этот вид тестирования могут выполнять сами разработчики.
  • Интеграционное тестирование – проверка взаимодействия между несколькими единицами программного продукта.
  • Системное – проверка работы всей системы на соответствие заявленным требованиям к программному продукту.

6. По исполнителю

Наверняка, вы слышали об альфа- и бета-тестировании. А поучаствовать в одном из них можно даже не будучи тестировщиком. Итак, по исполнителю тестирование делится на:

  • Альфа-тестирование – тестирование программного продукта на поздней стадии разработки. Проводится разработчиками или тестировщиками.
  • Бета-тестирование – тестирование программного продукта перед выходом на рынок силами обычных людей – добровольцев, которым передается предварительная версия продукта (бета-версия). Их отзывы собираются, анализируются и учитываются при внесении правок в продукт.

7. По формальности

По формальности тестирование бывает:

  • Тестирование по тестам – тестирование по предварительно написанным тест-кейсам.
  • Исследовательское тестирование – одновременная разработка тестов и их исполнение.
  • Свободное тестирование – тестирование без разработки тестов, без документации. Основывается на интуиции и опыте тестировщика.

8. По важности

По степени важности тестируемых функций тестирование делится на:

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

Виды тестирования и подходы к классификации тестирования отличаются от автора к автору. Не существует единственного правильного варианта.

Надеемся, что данная статья поможет вам ориентироваться в самом начале вашего пути в тестировании программного обеспечения.

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

Книги

  • (PDF ) Тестирование программного обеспечения (Святослав Куликов, 2018) . Курс хоть и позиционируется как "базовый", но предметная область расписана глубоко, наглядно, со множеством примеров.
  • (PDF ) Как тестируют в Google (Джеймс Уиттакер, 2012; русский перевод 2014 - изд. "Питер") , книга среднего уровня не только об их опыте реформации процессов тестирования в компании, но и о методах разработки и менеджмента, описанное будет полезно больше для очень крупных компаний разрабатывающих "для самое себя" (типа того же Яндекса, ABBYY, Kaspersky Lab, например), но интересных мыслей и методик - много
  • (PDF ) Ключевые процессы тестирования (Рэкс Блэк, 2004; русский перевод 2006 - изд. "Лори").
    Рассматриваются вопросы организации и проведения тестирования в комплексе, читать выборочно;
  • (PDF ) Гибкое тестирование (Лайза Криспин и Джанет Грегори, 2009; русский перевод 2010 - изд. "Вильямс")
    , о практике тестирования при гибкой (Agile) разработке

Ссылки

  • Сферическое тестирование в вакууме: Как есть, как должно быть, как будет
  • Тестирование документации к программным продуктам

Тестирование: QC И QA

Цель тестирования (test objective, test target) или цель разработки и выполнения тестов:
  • обеспечить очищение ПО от ошибок до приемлимого уровня (вы не можете предоставить 100% покрытие, но вы должны сделать все возможное, и гарантировать, что очевидные ошибки исправлены);
  • убедиться, что ПО отвечает оригинальным требованиям и спецификации;
  • обеспечить уверенность в надёжности ПО (пользователям, заказчикам и т.д.).

Задача QC (Quality Control, контроль качества) это контролировать и фиксировать качество артефактов, или же, другими словами, промежуточных и конечных результатов работы. Его цель заключается в поисках дефектов и обеспечении их исправления. Таким образом тестирование является неотъемлемой частью контроля качества.
Здесь очень подходит термин Verification с вопросом "Are we building the product right?" - правильно ли мы делаем продукт , проверяется соответствие планам, спецификациям, дизайну, правилам составления кода, проход . Проверяем CORRECTNESS.

QA (Quality Assurance, обеспечение качества) - ISO9000 определяет обеспечение качества ПО, как часть менеджмента качества, ориентированную на создании уверенности в том, что требования к устранению багов будут выполнены. Целью QA является обеспечение гарантии того, что продукт будет соответствовать ожиданиям качества заказчика. Она состоит из процессов/действий, направленных на обеспечение качества разработки продукта на каждом из его этапов. Эти действия, как правило, предшествуют развитию продукта и продолжаются, пока процесс пребывает в состоянии развития. На самом QA лежит ответственность за разработку и внедрение процессов и стандартов для улучшения жизненного цикла разработки, и обеспечение уверенности в том, что эти процессы выполняются. Фокусом QA является предотвращение дефектов на всех этапах его реализации и постоянное его совершенствование.
Здесь очень подходит термин Validation с вопросом "Are we building the right product?" - правильный ли продукт мы делаем , удовлетворяет ли продукт нуждам пользователя. Проверяем COMPLETENESS.

Чтобы предоставляемые услуги имели ценность, необходимо, чтобы тестирование было нацелено на проверку функций, которые:

  • значимы для Заказчиков/Пользователей
  • оказывают влияние на мнение пользователя о работе с системой
  • снижают потенциальные затратные риски
Тестирование несущественных частей системы вызывает ложную уверенность в правильности работы системы и оттягивает на себя внушительное количество человеко-часов Разработчиков и Тестировщиков.

1. Тест-анализ

Тест-анализ = процесс поиска/рассмотрения того, что можно использовать для получения информации, необходимой для тестирования. Т.е. информации, необходимой для составления - или test basis. И чаще всего test basis представляет собой набор документов, состоящий из требований , спецификаций , описания архитектуры , интеграционных интерфейсов и т.п.

В общем и целом, необходимо выявить:

Определяем тестовое покрытие (скоуп/объём тестирования)

Матрица трассировки требований и тест-кейсов

Матрица трассируемости требований (Requirement Traceability Matrix ) = двумерная таблица, содержащая соответствие требований (user/business requirements, software requirements) и подготовленных (test cases).
Основное её предназначение в отображении степени покрытия требований .

Примеры Матриц Трассировки:

(скачать в формате XLSX)

В соответствии с лучшими практиками, Бизнес-Требования следует максимально декомпозировать и нумеровать в соответствии со следующим правилом: BR001, BR002 и т.д.
Для каждого Бизнес-Требования будет одно или несколько Функциональных Требований, которые должны соответствовать соглашению по нумерации для соответствующего бизнес-требования: FR001.01, FR001.02, FR001.03, FR002 и т.д. Функциональные требования также должны быть максимально декомпозированы.

(скачать схему в XML)

Если вы используете таск трекер Jira, Zephyr by Jira для тестовой документации и систему управления требованиями Сonfluence, то все сущности синхронизируются и такая трассируемость позволяет:

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

Соотношение привязки Требования и может быть:

  • 1 к 1 (атомарное требование, которое покрывается одним тест-кейсом, данный тест-кейс покрывает только это требование);
  • 1 к n (требование, которое покрывается несколькими тест-кейсами, данные тест-кейсы покрывают только это требование);
    когда одно требование в матрице трассируемости покрывается несколькими тестами, это может говорить об избыточности тестирования. В таком случае надо проанализировать, насколько требование атомарно.
  • n к n (требование, которое покрывается несколькими тест-кейсами, данные тест-кейсы покрывают это и другие требования).

Риск качества

Риск качества (Quality risk) - потенциальный вид ошибки, способ поведения системы, при котором она, вероятно, не соответствует обоснованным ожиданиям качества системы, имеющимся у пользователя или заказчика. Это потенциальный, а не обязательный результат.

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

Риски тестирования

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

  1. Проектные - связанные с коммуникациями участников команды, инфраструктурой:
    - изменение скоупа тестирования после проверки основных тест-кейсов
    ...
  2. Продуктовые - связанные только с тестируемым функционалом и тестовыми средам:
    - отсутствие тестовых зон с заданной конфигурацей (медленные БД, (не)обезличенные БД, отсутствие каких-то тестовых данных)
    - недопустимое время на ожидание подготовки тестовых зон со стороны Администраторов
    ...

Точка зрения (Point of view)

Определяемся с точкой зрения на систему (Point of View ).
Она зависит от того, какую проблему мы решаем и что конкретно анализируем.

Методы анализа и графические нотации для визуализации

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

2. Тест-план и оценка трудозатрат

Тест план (Test Plan) = документ, описывающий весь объём работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.

В общем случае тест-план призван ответить на следующие вопросы:

Оценка трудозатрат (Effort Estimation)

  1. Что оцениваем:
    • Человеческие умения: знания и опыт членов команды. Сильно влияют на оценку.
    • Ресурсы: людские, технические, и т.д.
    • Время
    • Стоимость: бюджет.
  2. Кто может сделать оценку?
    • Тест-аналитик
    • Тестировщик
  3. Методы оценки трудозатрат:

Из собственного опыта: для учёта времени при планировании, полезно определиться и подсчитать - на что в общем случае уходит время тестировщика:

  • разгребание авгиевых почт и мессенджеров
  • вникание в ТЗ/ФТ Задачи
  • составление вопросов и ожидание ответов от Составителей ТЗ/ФТ
  • составление/актуализация/дополнение тест-кейсов к Задаче (в отсутствие Аналитиков)
  • подготовка/проверка предусловий/предустановок в Системе (в отсутствие Администраторов Системы)
  • тестирование Задачи
  • составление багрепортов по выявленным ошибкам/недочётам
  • ожидание фиксов по выявленным и зарепорченным ошибкам. (это время может идти параллельно, если затык по одной задаче - репортим и берём следующую пока та в режиме ожидания фиксов)
  • тестирование пофикшенных багов
  • оформление отчёта о тестировании
  • помощь коллегам по цеху, консультации с ними по рабочим вопросам
  • мероприятия внутри отдела тестирования - совещания, митинги, обучение, праздники и т.п.
  • мероприятия вне отдела тестирования - совещания по другим проектам, демонстрации, обучение, праздники и т.п.
Многое из перечисленного, помимо собственно анализа Задачи и ея тестирования, - может "съедать" значительную часть рабочего времени.

3. Тест дизайн и покрытие

Ресурсы

Суть

Проектирование тестов (test design) = этап проектирования и создания ( , тестовых дел, case - юр. "дело"), в соответствии с определёнными ранее критериями качества и целями тестирования.
Роли, ответственные за тест дизайн:

  • Тест-аналитик -- определяет "ЧТО тестировать?"
  • Тест-дизайнер -- определяет "КАК тестировать?"

Техники тест дизайна

  • Эквивалентное Разделение (Equivalence Partitioning - EP). Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала - 0.
  • Анализ Граничных Значений (Boundary Value Analysis - BVA). Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.
  • Причина / Следствие (Cause/Effect - CE). Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как "Имя", "Адрес", "Номер Телефона" а затем, нажать кнопку "Добавить" - эта "Причина". После нажатия кнопки "Добавить", система добавляет клиента в базу данных и показывает его номер на экране - это "Следствие".
  • Предугадывание ошибки (Error Guessing - EG). Это когда тест аналитик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы "предугадать" при каких входных условиях система может выдать ошибку. Например, спецификация говорит: "пользователь должен ввести код". Тест аналитик, будет думать: "Что, если я не введу код?", "Что, если я введу неправильный код? ", и так далее. Это и есть предугадывание ошибки.
  • Исчерпывающее тестирование (Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.

Тестовый случай

Тестовый случай (Test Case) = артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
Пример оформления: http://www.protesting.ru/documentation/test_case_example.zip
Этимология слова case восходит к юридиспруденции. Case - дело, случай.
В тестировании мы, по-сути, с помощью тест-кейсов, предоставляющих нам свидетельства и факты, поддерживаем аргументы, обосновывая заявления в том что проверяемая Система, ПО или Продукт соответствуют требованиям.

(скачать схему в XML)

Уровни тестирования

(скачать схему в XML)

Модульное тестирование

Модульное тестирование (Unit testing ) = тестирование одного модуля кода (обычно это одна функция или один класс в случае ООП-кода) в изолированном окружении. Это значит, что:
  • если код использует какие-то сторонние классы, то вместо них подсовываются классы-заглушки: моки и стабы. Stub’ы предназначены для получения нужного состояния тестируемого объекта, а Mock’и применяются для проверки ожидаемого поведения тестируемого объекта.
  • код не должен работать с сетью (и внешними серверами), файлами, базой данных (иначе мы тестируем не саму функцию или класс, а еще и диск, базу, ит.д.)

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

Интеграционное тестирование

Интеграционное тестирование (Integration testing ) = проверка связи между модулями (компонентами) кода , а также взаимодействия с различными частями системы (операционной системой, оборудованием либо связи между различными системами). Если проводить аналогии, например с тестированием авиадвигателя, то юнит-тесты - это тестирование отдельных деталей, клапанов, заслонок, а интеграционное тестирование - это запуск собранного двигателя на стенде.
Выполняется разработчиками, зачастую .

Системное тестирование

Системное тестирование (System testing ) = процесс тестирования системы в целом с целью проверки того, что она соответствует установленным Спецификациям к Требованиям к ПО (SRS) .
Удостовериться, что Система умеет принять какие-то данные от поставщиков, обработать их, передать данные потребителям, всё это в правильной последовательности и формате. Дальнейшая судьба данных нас не волнует. Главное - наша система работает правильно в правильном окружении.
При этом выявляются дефекты как: неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные варианты использования, отсутствующая или неверная функциональность, неудобство использования и т.д.
Для минимизации рисков, связанных с особенностями поведения в системы в той или иной среде, во время тестирования рекомендуется использовать окружение максимально приближенное к тому, на которое будет установлен продукт после выдачи.
Выполняется тестировщиками .

Приёмочное тестирование

Приёмочное тестирование (Acceptance testing ) или Приёмо-сдаточные испытания (ПСИ ) - формальный процесс тестирования, который проверяет соответствие системы Бизнес/Пользовательским требованиям и проводится с целью: определения удовлетворяет ли система приёмочным критериям, вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет. Выполняется на основании набора типичных тестовых случаев и сценариев, разработанных на основании требований к данному приложению.
Выполняется тестировщиками .

Сквозное тестирование

Сквозное тестирование (End-To-End , E2E или Chain testing ) = проверять не только наше окружение, но и все взаимосвязанные системы, через которые проходят данные принимаемые или отправляемые нашей системой. А это, в свою очередь, означает, что мы должны будем совместить несколько таких "пирамид тестирования" между собой. E2E тестирование это не просто приёмка (пользовательское тестирование), которое будет выполнять заказчик, это выстраивание мостика, с учётом всех возможных ситуаций, по которому пойдёт заказчик и поведёт за собой в ногу пользователей.
Выполняется тестировщиками .
Для сквозных сценариев используются с большой долей вероятности уже ранее разработанные тесты для каждой из систем, входящей в цепочку (сценарий) Бизнес-процесса. Можно все полные тестовые наборы компании представить в виде разреженной матрицы, где по столбцам распределены тесты для каждой системы (для простоты -- системные), а по строкам - бизнес-процессы. То есть для тех или иных бизнес-процессов надо выбрать\создать тесты, покрывающие бизнес-процесс, установить взаимосвязи. Если покрытия нет - это повод восполнить пробелы в тестовой модели, либо удостовериться, что качество обеспечивается другими уровнями тестирования ( , , ревью кода и прогон его через анализаторы).

(скачать схему в XML)

Виды тестирования

Функциональные тесты базируются на функциях и особенностях, а также взаимодействии с другими системами, и могут быть представлены на всех уровнях тестирования: (Component/Unit testing), (Integration testing), (System testing) и (Acceptance testing). Функциональные виды тестирования рассматривают внешнее поведение системы.

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

Функциональное тестирование (functional testing)

Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.

Функциональные тесты основываются на функциях, выполняемых системой, и могут проводиться на всех уровнях тестирования (компонентном, интеграционном, системном, приёмочном). Как правило, эти функции описываются в требованиях, функциональных спецификациях или в виде вариантов использования системы (use cases).

Функциональное тестирование бывает:

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

Позитивное тестирование является гораздо более важным, но это не означает, что "негативными" тестами можно пренебречь.

Подробнее о позитивном/негативном тестировании: https://www.guru99.com/positive-vs-negative-testing.html

Тестирование безопасности (security and access control testing)

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

Сканирование на предмет наличия уязвимостей (Vulnerability Scanning) : Выполняется с помощью специальных программ-сканеров уязвимостей.

Сканирование безопасности (Security Scanning) : Включается в себя идентификацию сетевых и системных недостатков (слабых мест), а затем предоставляет решения для сокращения таких рисков. Сканирование может выполняться как в ручном так и автоматическом режимах.

Тест на проникновение (Penetration testing) : симулирует нападение злоумышленника. Это тестирование включает анализ конкретной системы с целью проверить потенциальную уязвимость к внешним попыткам взлома.

Оценка риска (Risk Assessment) : включает в себя анализ рисков безопасности, наблюдаемых в организации. Риски классифицируются как слабые (low), средние (medium) и высокие (high). Этот вид тестирования рекомендует методы контроля и снижения рисков.

Тестирование производительности (performance testing) или нагрузочное тестирование (load testing)

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

Стрессовое тестирование (stress testing) = тестирование приложения под экстремальными нагрузками, определение способности обрабатывать высокий уровень траффика или обработки данных. Целью является определить переломную точку приложения.

Задачей тестирования стабильности (stability) / надежности (reliability) - является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходит отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты влияющие именно на стабильность работы.

Тестирование выносливости (endurance testing) = убеждение в том, что приложение может безопасно находиться под высокими нагрузками долгий период времени.

Объёмное тестирование (volume testing) = получение оценки производительности при увеличении объёмов данных в базе данных приложения.

Тестирование удобства использования (usability testing)

Тестирование удобства пользования - это метод тестирования, направленный на установление степени удобства использования, "обучаемости", понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий.

Удобство (User Friendliness):

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

Тестирование на отказ и восстановление (failover and recovery testing)

Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.
Тестирование на отказ и восстановление очень важно для систем, работающих по принципу "24x7", например интернет-магазины, ERP-системы.

Объектом тестирования в большинстве случаев являются весьма вероятные эксплуатационные проблемы, такие как:

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

Тестирование графического пользовательского интерфейса (GUI testing)

  1. проверить для всех элементов GUI размеры, позицию и принятие букв и цифр. Например, во всех полях ввода возможно производить ввод
  2. удостовериться, что графический интерфейс позволяет полностью реализовать весь функционал приложения
  3. проверить верность отображения предупреждающий сообщений и сообщений об ошибках
  4. проверить читабельность шрифтов, используемых приложением, их выравнивание, цвет
  5. проверить отображение и расположение изображений
  6. проверить расположение элементов интерфейса при различных разрешениях экрана

Тестирование совместимости (compatibility testing)

Аппаратное обеспечение: совместимость с различными аппаратными конфигурациями.
Операционные системы: совместимость с различными операционными системами: Windows, *nix, Mac OS и т.д.
Программное обеспечение: совместимость с различным программным обеспечением. Например, MS Word совместим с MS Outlook, MS Excel, VBA и т.д.
Сеть: Оценка производительности системы в сети с изменяющимися параметрами, такими как пропускная способность, рабочая скорость, ёмкость. Проверка возможности применения приложения при различных вариантах значений этих параметров.
Браузер: проверка совместимости веб-сайта с основными по-популярности: Firefox, Google Chrome, Internet Explorer, Opera, Safari.
Устройства: совместимость с различными устройствами: принтерами, сканерами, средствами беспроводной связи, USvoid-устройствами.
Мобильные устройства: совместимость с мобильными платформами, такими как Android, iOS и т.д.
Версии программного обеспечения: совместимость с различными версиями программного обеспечения. Например, совместимость Microsoft Word с Windows 10, Windows 8, Windows 7, Windows XP, Windows XP SP2 и т.д.

Дымовое тестирование (Smoke testing)

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

Ре-тест (Re-test)

Проводится в случае, если фича/функциональность уже имела дефекты, и эти дефекты были недавно исправлены.

Санитарная проверка (Sanity check)

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

Регрессионное тестирование (regression testing)

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

Пример, разъясняющий разницу между тестами после изменений

У нас есть веб-сервис с пользовательским интерфейсом и RESTful API. Будучи тестировщиками, мы знаем:

  • Что у него есть 10 точек входа, для простоты, в нашем случае расположенных на одном IP
  • все они принимают GET-запрос на вход, возвращая какие-либо данные в формате json

Тогда можно сделать ряд утверждений о том, какие типы тестов нужно использовать в какой момент времени:

  • Выполнив один простой GET-запрос к одной из этих точек входа. Если от сервиса пришёл ответ в формате JSON, т.е. не вернул ошибку 4хх или 5хх или что-то невнятное, то он не "задымился". На этом можно сказать что "дымный" тест пройден. Для проверки того, что работает так же и UI достаточно просто один раз открыть страницу в браузере.
  • Санитарное тестирование в данном случае будет состоять из выполнения запроса ко всем 10 точкам входа в API.
  • Ре-тест в данном примере это точечная проверка что, к примеру, сломавшаяся точка входа в API следующем билде отрабатывает как задумывалось.
  • Регрессионные тесты будут состоять из Smoke + Sanity + UI выполняемые вместе в одной куче:
    • Выполнения запроса ко всем 10 точкам входа в API, сверкой полученного JSON с ожидаемым, а так же наличием требуемых данных в нём
    • проверить что добавление 11-ой точки входа не поломало, к примеру, восстановление пароля.

(скачать схему в XML)

Методы: ручное и авто

Ручное (manual testing) = выполнение тестировщиком тестовых сценариев и тестовых случаев вручную.

К автоматизации тестирования (automation testing) существуют следующие основные подходы:

Некоторые инструменты для автоматизации тестов

  • серия программных продуктов Selenium

Полезные статьи

  • Автоматизированное Функциональное Тестирование
  • Как стать автоматизатором тестирования?
  • AUTOMATION TESTING Tutorial: Process, Planning & Tools
  • https://gist.github.com/codedokode/a455bde7d0748c0a351a - Автоматизированное тестирование
  • Антипаттерны тестирования ПО (unit-тесты, интеграционные тесты)

Баг-репорт

Баг репорт (bug report) = документ, описывающий ситуацию или последовательность действий, приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.

Составлять следует стремиться так, чтобы по названию или краткому описанию бага (summary) разработчик понял в чём соль проблемы, а прочитав детальное описание бага (description) он примерно представлял в в каком компоненте или даже его части ему надо искать ошибку.

Значимость/серьёзность (severity) ошибок
0 остановка системы server down остановка работы системы
1 Потеря данных data loss Потеря пользовательских, операторских, системных данных
2 Потеря функциональности functional loss Блокирование основной функциональности. Могут включать в себя нефункциональные проблемы, например связанные с производительностью, которые вызывает неприемлимые задержки в использовании функций
3 Дыра в безопасности security loss
4 Потеря функциональности с наличием обходного пути functional loss but alternate path exists Блокирование основной функциональности, но для пользователя существует разумный обходной путь
5 Частичная потеря функциональности partial functionality loss Блокирование использования некоторой несущественной функциональности
6 Косметическая ошибка cosmetic error Значительные недостатки в пользовательском интерфейсе или в способности системы реагировать на запросы пользователя

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

Правила оформления названия (subject) баг-репорта

"Catalog Editor: Remove - ask user to delete catalog if user removed all products from catalog" - правильное православное кошерное халяльное название.
"Organizer", "Catalog properties page" - за такие названия тасков всего 400 лет назад отправляли на костёр.

Структура правильного названия таска:
<Где (название страницы)> : <Какой элемент/функция страницы> - <суть ошибки/задания>
Образцы:
Catalog Editor: Copy - not all existing catalogs shown in "select catalog" combobox
Catalog Library -> Duplicate Catalog - If "Use audience" option is marked, "Shared with" data must be copied to the new catalog

Шаблон "тела" баг-репорта

DO: ("ДЕЙСТВИЯ", "ШАГИ ВОСПРОИЗВЕДЕНИЯ")
Укажите последовательность действий, поведайте - что именно было сделано вами для достижения того состояния системы, при котором вы столкнулись с ошибкой

RESULT: ("РЕЗУЛЬТАТ:")
Опишите последствия ваших действий, расскажите, что случилось, когда достигнута "точка невозвращения" и как баг проявляет себя

EXPECTED RESULT: ("ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:")
Описание ожидаемого поведения системы при прохождении пользователем шагов, указанных в "DO". Ожидаемый результат должен соответствовать требованиям заказчика описанным документации либо здравому смыслу. Разработчик должен знать что ему надо сделать.

ADDITIONAL INFO: ("ДОПИНФО:")
Чтобы сделать хороший баг-репорт отличным - используйте любую возможность дополнить его, как то:

  • Добавьте скриншоты (отметив на них, если нужно, важные места).
  • Добавьте лог сервера или текст сообщения об ошибке (если эти сведения доступны).
  • Добавьте свои соображения и предположения по поводу встреченного бага (коротко, если таковые имеются).

Пример баг-репорта

Метрики по обеспечению качества

Метрика (QA metric) - это количественный масштаб и метод, который может использоваться для измерения.

Введение и использование метрик необходимо для улучшения контроля над процессом разработки, в частности над процессом тестирования.

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

Для наглядности можно сгруппировать метрики по типам сущностей, участвующих в обеспечении качества и тестировании программного обеспечения, а именно:

  • Метрики по тестовым случаям
  • Метрики по багам / дефектам
  • Метрики по задачам

Метрики по тест-кейсам

Метрики по багам


Метрики "Open/Closed Bugs", "Bugs by Severity" и "Bugs by Priority" хорошо визуализируют степень приближения продукта к достижению критериев качества по багам.
Метрики "Reopened/Closed Bugs" и "Rejected/Opened Bugs" направлены на отслеживание работы отдельных участников групп разработки и тестирования.

Метрики по задачам

Название Описание
Deployment tasks Метрика показывает количество и результаты установок приложения. В случае, если количество отклоненных командой тестирования версий будет критически высоким, рекомендуется срочно проанализировать и выявить причины, а также в кротчайшие сроки решить имеющуюся проблему.
Still Opened Tasks Метрика показывает количество все еще открытых задач. К окончанию проекта все задачи должны быть закрыты. Под задачами понимаем следующие виды работ: написание документации (архитектура, требования , планы), имплементация новых модули или изменение существующих по запросам на изменения, работы по настройке стендов, различные исследования и многое другое.

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

Подбор тестировщиков

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

Самое главное для нанимаемого тестировщика:

  • желание учиться
  • самостоятельность
  • неконфликтность и гибкость. Тестировщики должны стремиться отстаивать и защищать качество разумно и в пределах бизнес-контекста, но делать это твердо и убедительно. Если тестировщик готовит отчет об ошибке, который не нравится разработчику, и сталкивается с противостоянием "несчастного" программиста, ему не нужно склонять голову, класть руки в карманы и смиренно бормотать: "Хорошо-хорошо, я думаю, что отзову этот отчет об ошибке". Вместо этого тестировщик должен выпрямить спину, выслушать аргументы программиста и затем сказать что-то вроде этого: "Да, но если бы я был заказчиком и увидел такое поведение системы, у меня не было бы поводов для восторга". Твердый, но гибкий характер является требованием к хорошему тестировщику.
  • способность к напряжённой и сконцентрированной работе. Должно быть понимание ключевых приоритетов и нацеливание тестирования на следование им. Это трудно сделать, поскольку приоритеты часто меняются. Есть тестировщики, которые из-за неспособности концентрировать своё внимание испытывали трудности в выполнении поставленных перед ними задач на должном уровне качества и в надлежащие сроки. Хотя они обладали хорошими знаниями в тестировании, этот единственный пробел в их характере ограничивает их потенциал. тестировщики должны сообщать плохие новости группе разработки. Тестировщик время от времени сталкивается с сопротивлением и защитной реакцией, выступая в роли гонца с плохой новостью. Оба этих явления порождают дополнительные стрессы в жизни тестировщиков. Хорошие тестировщики заставляют себя работать в условиях недооценки и плохого понимания их роли со стороны других участников проекта.

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

Лучшие начинающие тестировщики делятся на следующие категории:

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

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

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

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

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

Четвёртая проблема, строго не относящаяся только к этой практике, но возникает всегда, когда группа тестирования становится тихой заводью или болотом для сотрудников, отвергнутых другими подразделениями компании. Это, естественно, наиболее проблемная ситуация для ведущего тестировщика или тест-менеджера при построении группы тестирования. Неявным посылом здесь является "Здесь нужно работать с людьми, которые считаются нежелательными по разным причинам; нужно проводить тестирования в сложившихся условиях". Некоторые из этих людей превращаются в отличных тестировщиков, в том время как другие оказываются источником неисчерпаемых проблем.

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

Андерклокинг - снижение частоты работы оборудования.

Баг (дефект) - недостаток компонента или системы, который может привести к отказу определенной функциональности.

Приоритет багов - важность той или иной ошибки в ПО:

  • Trivial — косметическая малозаметная проблема.
  • Minor — очевидная, незначительная проблема.
  • Major — значительная проблема.
  • Critical — проблема, нарушающая работу c ключевыми функциями ПО.
  • Blocker — проблема, нарушающая функционирование ПО.

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

Валидация - определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе.

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

Спецификация - детальное описание того, как должно работать ПО.

Система отслеживания ошибок (англ. bug tracking system ) — программа учета и/или контроля багов:

  • Atlassian JIRA
  • Bugzilla
  • YouTrack
  • Redmine

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

Обеспечение качества (Quality Assurance, QA) - совокупность мероприятий, охватывающих все технологические этапы разработки, выпуска и эксплуатации программного обеспечения

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

Ошибка (англ.Error ) – действие, которое порождает неправильный результат.

Сбой (англ.Failure ) – несоответствие фактического результата работы компонента или системы ожидаемому результату.

Классификация по типу тестирования:
Мобильное тестирование — тестирование мобильных приложений.
Консольное тестирование — тестирование приложений предназначенных для консолей.
Web-тестирование (Браузерное тестирование) — тестирование браузерных приложений.

Классификация по запуску кода на исполнение:
Статическое тестирование (англ.Static testing ) - тестирование без запуска кода на исполнение.
Динамическое тестирование (англ. Dynamic testing ) - тестирование с запуском кода на исполнение.

Классификация по доступу к коду и архитектуре ПО:
Черный ящик (англ. Black box ) — тестировщику не известно как устроена тестируемая система.
Белый ящик (англ. White box ) — тестировщику известно все детали реализации тестируемой системы.
Серый ящик (англ. Grey box ) — тестировщику известно только некоторые особенности устройства тестируемой системы.

Классификация по степени автоматизации:
Ручное тестирование (англ. Manual testing ) — тестирование ПО будучи его пользователем.
Автоматизированное тестирование (англ. Automated testing ) — тестирование ПО при помощи специальных программ.

Классификация по принципу работы с приложением:
Позитивное тестирование (англ. Positive testing ) — тестирование ПО на то, как оно должно работать.
Негативное тестирование (англ. Negative testing ) — тестирование ПО на то, как оно не должно работать.

Классификация по уровню детализации приложения:
Интеграционное тестирование — тестирование взаимодействия и связей нескольких компонентов приложения.
Системное тестирование — это тестирование всего приложения от начала и до конца.
Модульное тестирование — тестирование на уровне отдельного функционального компонента приложения.

Классификация по целям и задачам:
Функциональное тестирование - проверка корректности работы функциональности приложения.
Нефункциональное тестирование - проверка нефункциональных особенностей приложения (удобство использования, совместимость, производительность, безопасность).
Инсталляционное тестирование - проверка протекания стадии инсталляции (установки) приложения.
Регрессионное тестирование - проверка на наличие багов, вызванных изменениями в приложении.
Повторное тестирование - выполнение тест-кейсов, которые ранее обнаружили дефекты, с целью подтверждения устранения дефектов.
Приёмочное тестирование - тестирование, направленное на проверку приложения с точки зрения конечного пользователя/заказчика
Тестирование удобства использования - тестирование, направленное на исследование того, насколько конечному пользователю понятно, как работать с продуктом, а также на то, насколько ему нравится использовать продукт.
Тестирование доступности - тестирование, направленное на исследование пригодности продукта к использованию людьми с ограниченными возможностями
Тестирование интерфейса - тестирование, направленное на проверку интерфейсов приложения или его компонентов.
Тестирование безопасности - тестирование, направленное на проверку способности приложения противостоять злонамеренным попыткам получения доступа к данным или функциям
Тестирование интернационализации - тестирование, направленное на проверку готовности продукта к работе с использованием различных языков и с учётом различных национальных и культурных особенностей.
Тестирование локализации - тестирование, направленное на проверку корректности и качества адаптации продукта к использованию на том или ином языке с учётом национальных и культурных особенностей.
Тестирование совместимости - тестирование, направленное на проверку способности приложения работать в указанном окружении (браузер, мобильное ус-во и т.д.).
Тестирование данных и баз данных - тестирование, направленное на исследование таких характеристик данных, как полнота, непротиворечивость, целостность, структурированность и т.д.
Тестирование использования ресурсов - совокупность видов тестирования, проверяющих эффективность использования приложением доступных ему ресурсов и зависимость результатов работы приложения от количества доступных ему ресурсов.
Сравнительное тестирование - тестирование, направленное на сравнительный анализ преимуществ и недостатков разрабатываемого продукта по отношению к его основным конкурентам.
Демонстрационное тестирование - формальный процесс демонстрации заказчику продукта с целью подтверждения, что продукт соответствует всем заявленным требованиям.
Избыточное тестирование - тестирование приложения со всеми возможными комбинациями всех возможных входных данных во всех возможных условиях выполнения.
Тестирование надёжности - тестирование способности приложения выполнять свои функции в заданных условиях.
Тестирование восстанавливаемости - тестирование способности приложения восстанавливать свои функции и заданный уровень производительности, а также восстанавливать данные в случае возникновения критической ситуации.
Тестирование отказоустойчивости - тестирование, заключающееся в эмуляции или реальном создании критических ситуаций с целью проверки способности приложения задействовать механизмы, предотвращающие нарушение работоспособности, производительности и повреждения данных.
Тестирование производительности - исследование показателей скорости реакции приложения на внешние воздействия при различной по характеру и интенсивности нагрузке.
Нагрузочное тестирование - исследование способности приложения сохранять заданные показатели качества при нагрузке в допустимых пределах и некотором превышении этих пределов/
Тестирование масштабируемости - исследование способности приложения увеличивать показатели производительности в соответствии с увеличением количества доступных приложению ресурсов.
Объёмное тестирование - исследование производительности приложения при обработке различных (как правило, больших) объёмов данных.
Стрессовое тестирование - исследование поведения приложения при нештатных изменениях нагрузки, значительно превышающих расчётный уровень.
Конкурентное тестирование - исследование поведения приложения в ситуации, когда ему приходится обрабатывать большое количество одновременно поступающих запросов, что вызывает конкуренцию между запросами за ресурсы (базу данных, память, канал передачи данных, дисковую подсистему и т.д.)
Фокус-тест (англ. Focus test ) — тестирование, проводимое с целью получения первичной реакции игроков. Необходимо для оценки удобства использования и того, как продукт принимается целевой аудиторией или сторонними людьми.

Failure - сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы.

UX (англ. User eXperience — опыт пользователя ) - ощущение, испытываемое пользователем во время использования цифрового продукта.

UI (англ. User Interface — пользовательский интерфейс ) - это инструмент, позволяющий осуществлять взаимодействие «пользователь - приложение».

Анализ граничных значений (англ. Boundary Value Analysis - BVA ). Анализ граничных значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.

Дымовое тестирование (англ. Smoke test ) — короткий цикл тестов для подтверждения, что после сборки кода (нового или исправленного) приложение стартует и выполняет основные функции.

Исследовательское (ad-hoc) тестирование - это разработка и выполнения тестов в одно и то же время, что является противоположностью сценарного подхода.

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

Матрица соответствия требований (англ. Traceability matrix ) - это двумерная таблица, содержащая соответсвие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases).

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

Предугадывание ошибки (англ. Error Guessing - EG ). Это когда тест аналитик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку.

Причина / Следствие (англ. Cause/Effect - CE ). Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие).

Санитарное тестирование - это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям.

Серьезность (англ. Severity ) - это атрибут, характеризующий влияние дефекта на работоспособность приложения.

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

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

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

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

Релиз-кандидат или RC (англ. Release candidate ), Пре-релиз, иногда «гамма-версия» - стадия-кандидат на то, чтобы стать стабильной.

Релиз или RTM (англ. Release to manufacturing — промышленное издание ) - издание продукта, готового к тиражированию.

Пост-релиз или Post-RTM (англ. Post-release to manufacturing ) - издание продукта, у которого есть несколько отличий от RTM и помечается как самая первая стадия разработки следующего продукта.

Таблица принятия решений (англ. Decision table ) - инструмент для упорядочения сложных бизнес требований, которые должны быть реализованы в продукте.

Тест-дизайн (англ. Test design ) - это этап процесса тестирования ПО, на котором проектируются и создаются тестовые случаи (тест кейсы).

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

Тестирование взаимодействия (англ. Interoperability Testing ) - это функциональное тестирование, проверяющее способность приложения взаимодействовать с одним и более компонентами или системами.

Тестирование сборки (англ. Build Verification Test ) - тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования.

Тестирование пользовательского интерфейса (англ. UI Testing ) - тестирование, выполняемое с целью определения, удобен ли некоторый искусственный объект (такой как веб-страница, пользовательский интерфейс или устройство) для его предполагаемого применения.

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

Чек-лист (англ. Check list ) - это документ, описывающий что должно быть протестировано.

Эквивалентное Разделение (англ. Equivalence Partitioning - EP ). Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала - 0.

Z-конфликт (англ. Z-fighting ) — наложение текстур друг на друга.

Оверклокинг (англ. Overclocking ) — процесс увеличения частоты (и напряжения) компонента компьютера сверх штатных режимов с целью увеличения скорости его работы.

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

Для этого они используют такой метод, как тестирование.

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

Как проводится тестирование?

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

Начинаете с ним беседовать и понимаете — соискатель подготовился проходить тесты, что может исказить действительность результатов .

Второй шаг – провести тестирование:

  1. Раздайте тесты с вопросами и заданиями, бланки для ответов.
  2. Объясните, с какой целью вы будете проводить тестирование.
  3. Зачитайте инструкцию или дайте отпечатанный текст.
  4. Тесты должны состоять из 20-25 заданий .
  5. Уточните, что на каждое задание даётся по одной минуте . По истечении времени тестирование сразу прекращается.
  6. Если человек не понимает, приведите пример выполнения подобных заданий.
  7. Отвечайте на вопросы кандидатов .
  8. Принятие ответов и их проверка. С результатами обработки можно ознакомить кандидата, но это необязательно.

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

Другие тесты при приеме на работу с ответами можно найти в сети Интернет.

Виды

Тесты при трудоустройстве делятся на несколько видов : профессиональные, личностные, интеллектуальные, математические, логические, вербальные, на внимательность, на сообразительность, на обучаемость, по механике, и самый распространённый в торговых организациях «Как продать ручку».

Давайте подробно остановимся на каждом из них.

Профессиональные

Чтобы определить профессионализм соискателя, специалисты применяют особые тесты . Для – задания на знание бухгалтерского учёта; для секретаря — пройти тест на владение основами делопроизводства, проверка грамотности, внимательности к деталям, скорости печати, быстрого и эффективного поиска информации; для специалиста налоговой службы — прохождение налоговых тестов, для юристов и экономистов — проверка юридической или экономической грамотности, на уровень знания иностранного языка, владения компьютерными программами и т. д.

составляют вопросы и несколько вариантов ответов: да, нет, в некоторых случаях.

При этом дается интерпретация ответов.

По таким объяснениям можно сразу увидеть ответ.

А с помощью готовых ключей к тесту определить количество правильных ответов и вынести своё решение.

Работодатель может предложить пройти тест для соискателей на знание некоторых приёмов работы excel(эксель).

Соискатель, имеющий опыт, знающий теорию, ответивший на большинство вопросов имеет все шансы получить желаемую должность .

Личностные или психологические

Интеллектуальные

Если работа требует умственных затрат , то работодатель вправе знать, насколько высоки интеллектуальные способности его работников.

Именно с этой целью используют такой вид тестирования, чтобы объективно оценить интеллектуальный уровень (IQ) соискателей.

Для правильного подбора заданий подойдет книга английского психолога Г. Айзенка .

Можно воспользоваться тестом Амтхауэра . Он определяет уровень умственных способностей по девяти критериям.

По результатам можно точно установить математического склада ума кандидат или гуманитарий и даже определить, к какой из 49 профессий подходит.

Онлайн тестирование на уровень интеллекта можно пройти .

Математические

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

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

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

Пройти онлайн тест по математике можно .

Логические

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

Логические тесты на работу первый взгляд абсурдны. В одной из задач сказано, что некоторые улитки — горы. Горы обожают кошек. Значит, все улитки обожают кошек.

Главное для тестируемого сосредоточиться, построить логическую цепочку , объяснить её, не обращая внимания на улиток и кошек. Специалист должен понять: умеет ли будущий работник логически рассуждать и нестандартно мыслить.

Тест на логику можно пройти онлайн .

Вербальные

Вербальные тесты полезны для проверки на должности преподавателей, переводчиков или секретарей .

Дают возможность оценить умение соискателя работать с текстами : понимать, разбирать, оценивать информацию, делать выводы.

Кандидат имеет возможность получить желаемую должность, если в совершенстве владеет родным языком, умеет логично и грамотно говорить, обладает большим словарным запасом.

На выполнение вербального теста обычно дается гораздо больше времени , чем числовых. Ответ состоит из букв или слова. Нужно выбрать из нескольких вариантов или самому придумать ответ.

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

Вербальные тесты дают возможность нанимателю понять, лаконична ли речь кандидата, может ли он словами убеждать, доказывать.

Пройти вербальный тест онлайн можно .

На обучаемость

Многие молодые соискатели в пишут: «Готов к обучению». А вот люди, имеющие большой стаж и опыт, не желают переобучаться , думая, что знаний, накопленных ими, будет достаточно. Для этого используется короткий тест, позволяющий оценить обучаемость (способность к обработке и восприятию новой информации).

По механике

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

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

Онлайн тестирование по механике предложено .

На Полиграфе

Крупные компании при приеме на работу пользуются мобильным аппаратным комплексом .

Может ли работодатель применить детектор лжи ?

Закон не запрещает.

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

В чём заключается процесс тестирования? Вопросы трёх видов: настраивающие, коррекционные и фактические .

Если ответы на последние два честны, физиологические параметры человека одинаковы. Они трансформируются, если человек говорит неправду. Это фиксируется аппаратом.

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

Ответы дают безошибочное суждение о кандидате . По окончании проверки работодатель решает: будет кандидат работать или нет.

«Продайте ручку»

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

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

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

Резюме

Так стоит ли стараться применять тесты при подборе персонала?

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

Если выбор правильный, то повышается продуктивность, работоспособность всех сотрудников организации.

Ошибки обходятся дорого. Умение брать на работу – настоящий талант, который еще и не часто встречается.