Юзабилити-тестирование. Что же такое тестирование? Какие инструменты сплит-тестирования использовать

  • Tutorial

Недавно был на собеседовании на Middle QA на проект, который явно превышает мои возможности. Уделил много времени тому, чего не знал вообще и мало времени повторению простой теории, а зря.

Ниже основы основ для повторения перед собеседованием для Trainee and Junior: определение тестирования, качество , верификация / валидация , цели, этапы, тест план, пункты тест плана, тест дизайн, техники тест дизайна, traceability matrix , test case, чек-лист, дефект, error/deffect/failure , баг репорт, severity vs priority, уровни тестирования, виды / типы, подходы к интеграционному тестированию , принципы тестирования, статическое и динамическое тестирование, исследовательское / ad-hoc тестирование, требования, жизненный цикл бага, стадии разработки ПО, decision table, qa/qc/test engineer, диаграмма связей.

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

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

Качество программного обеспечения (Software Quality) - это совокупность характеристик программного обеспечения, относящихся к его способности удовлетворять установленные и предполагаемые потребности.

Верификация (verification) - это процесс оценки системы или её компонентов с целью определения удовлетворяют ли результаты текущего этапа разработки условиям, сформированным в начале этого этапа. Т.е. выполняются ли наши цели, сроки, задачи по разработке проекта, определенные в начале текущей фазы.
Валидация (validation) - это определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе .
Также можно встретить иную интерпритацию:
Процесс оценки соответствия продукта явным требованиям (спецификациям) и есть верификация (verification), в то же время оценка соответствия продукта ожиданиям и требованиям пользователей - есть валидация (validation). Также часто можно встретить следующее определение этих понятий:
Validation - ’is this the right specification?’.
Verification - ’is the system correct to specification?’.

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

Этапы тестирования:
1. Анализ продукта
2. Работа с требованиями
3. Разработка стратегии тестирования
и планирование процедур контроля качества
4. Создание тестовой документации
5. Тестирование прототипа
6. Основное тестирование
7. Стабилизация
8. Эксплуатация

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

Основные пункты тест плана
В стандарте IEEE 829 перечислены пункты, из которых должен (пусть - может) состоять тест-план:
a) Test plan identifier;
b) Introduction;
c) Test items;
d) Features to be tested;
e) Features not to be tested;
f) Approach;
g) Item pass/fail criteria;
h) Suspension criteria and resumption requirements;
i) Test deliverables;
j) Testing tasks;
k) Environmental needs;
l) Responsibilities;
m) Staffing and training needs;
n) Schedule;
o) Risks and contingencies;
p) Approvals.

Тест дизайн – это этап процесса тестирования ПО, на котором проектируются и создаются тестовые сценарии (тест кейсы), в соответствии с определёнными ранее критериями качества и целями тестирования.
Роли, ответственные за тест дизайн:
Тест аналитик - определяет «ЧТО тестировать?»
Тест дизайнер - определяет «КАК тестировать?»

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

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

Анализ Граничных Значений (Boundary Value Analysis - BVA). Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.

Причина / Следствие (Cause/Effect - CE). Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как «Имя», «Адрес», «Номер Телефона» а затем, нажать кнопку «Добавить» - это «Причина». После нажатия кнопки «Добавить», система добавляет клиента в базу данных и показывает его номер на экране - это «Следствие».

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

Исчерпывающее тестирование (Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.

Попарное тестирование (Pairwise Testing) - это техника формирования наборов тестовых данных. Сформулировать суть можно, например, вот так: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров.

Допустим, какое-то значений (налог) для человека рассчитывается на основании его пола, возраста и наличия детей - получаем три входных параметра, для каждого из которых для тестов выбираем каким-то образом значения. Например: пол - мужской или женский; возраст - до 25, от 25 до 60, более 60; наличие детей - да или нет. Для проверки правильности расчётов можно, конечно, перебрать все комбинации значений всех параметров:

пол возраст дети
1 мужчина до 25 детей нет
2 женщина до 25 детей нет
3 мужчина 25-60 детей нет
4 женщина 25-60 детей нет
5 мужчина старше 60 детей нет
6 женщина старше 60 детей нет
7 мужчина до 25 дети есть
8 женщина до 25 дети есть
9 мужчина 25-60 дети есть
10 женщина 25-60 дети есть
11 мужчина старше 60 дети есть
12 женщина старше 60 дети есть

А можно решить, что нам не нужны сочетания значений всех параметров со всеми, а мы хотим только убедиться, что мы проверим все уникальные пары значений параметров. Т.е., например, с точки зрения параметров пола и возраста мы хотим убедиться, что мы точно проверим мужчину до 25, мужчину между 25 и 60, мужчину после 60, а также женщину до 25, женщину между 25 и 60, ну и женщину после 60. И точно так же для всех остальных пар параметров. И таким образом, мы можем получить гораздо меньше наборов значений (в них есть все пары значений, правда некоторые дважды):

пол возраст дети
1 мужчина до 25 детей нет
2 женщина до 25 дети есть
3 мужчина 25-60 дети есть
4 женщина 25-60 детей нет
5 мужчина старше 60 детей нет
6 женщина старше 60 дети есть

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

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

Тестовый сценарий (Test Case) - это артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
Пример:
Action Expected Result Test Result
(passed/failed/blocked)
Open page «login» Login page is opened Passed

Каждый тест кейс должен иметь 3 части:
PreConditions Список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
Test Case Description Список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям
PostConditions Список действий, переводящих систему в первоначальное состояние (состояние до проведения теста - initial state)
Виды Тестовых Сценариев:
Тест кейсы разделяются по ожидаемому результату на позитивные и негативные:
Позитивный тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.
Негативный тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций (срабатывание валидаторов), а также проверяет, что вызываемая приложением функция не выполняется при срабатывании валидатора.

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

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

Error - ошибка пользователя, то есть он пытается использовать программу иным способом.
Пример - вводит буквы в поля, где требуется вводить цифры (возраст, количество товара и т.п.).
В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message), с красным крестиком которые.
Bug (defect) - ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так как планировалось и программа выходит из-под контроля. Например, когда никак не контроллируется ввод пользователя, в результате неверные данные вызывают краши или иные «радости» в работе программы. Либо внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
Failure - сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы. То есть, существуют такие дефекты, которые приводят к сбоям (A defect caused the failure) и существуют такие, которые не приводят. UI-дефекты например. Но аппаратный сбой, никак не связанный с software, тоже является failure.

Баг Репорт (Bug Report) - это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
Шапка
Короткое описание (Summary) Короткое описание проблемы, явно указывающее на причину и тип ошибочной ситуации.
Проект (Project) Название тестируемого проекта
Компонент приложения (Component) Название части или функции тестируемого продукта
Номер версии (Version) Версия на которой была найдена ошибка
Серьезность (Severity) Наиболее распространена пятиуровневая система градации серьезности дефекта:
S1 Блокирующий (Blocker)
S2 Критический (Critical)
S3 Значительный (Major)
S4 Незначительный (Minor)
S5 Тривиальный (Trivial)
Приоритет (Priority) Приоритет дефекта:
P1 Высокий (High)
P2 Средний (Medium)
P3 Низкий (Low)
Статус (Status) Статус бага. Зависит от используемой процедуры и жизненного цикла бага (bug workflow and life cycle)

Автор (Author) Создатель баг репорта
Назначен на (Assigned To) Имя сотрудника, назначенного на решение проблемы
Окружение
ОС / Сервис Пак и т.д. / Браузера + версия /… Информация об окружении, на котором был найден баг: операционная система, сервис пак, для WEB тестирования - имя и версия браузера и т.д.

Описание
Шаги воспроизведения (Steps to Reproduce) Шаги, по которым можно легко воспроизвести ситуацию, приведшую к ошибке.
Фактический Результат (Result) Результат, полученный после прохождения шагов к воспроизведению
Ожидаемый результат (Expected Result) Ожидаемый правильный результат
Дополнения
Прикрепленный файл (Attachment) Файл с логами, скриншот или любой другой документ, который может помочь прояснить причину ошибки или указать на способ решения проблемы

Severity vs Priority
Серьезность (Severity) - это атрибут, характеризующий влияние дефекта на работоспособность приложения.
Приоритет (Priority) - это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Можно сказать, что это инструмент менеджера по планированию работ. Чем выше приоритет, тем быстрее нужно исправить дефект.
Severity выставляется тестировщиком
Priority – менеджером, тимлидом или заказчиком

Градация Серьезности дефекта (Severity)

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

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

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

S4 Незначительная (Minor)
Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.

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

Градация Приоритета дефекта (Priority)
P1 Высокий (High)
Ошибка должна быть исправлена как можно быстрее, т.к. ее наличие является критической для проекта.
P2 Средний (Medium)
Ошибка должна быть исправлена, ее наличие не является критичной, но требует обязательного решения.
P3 Низкий (Low)
Ошибка должна быть исправлена, ее наличие не является критичной, и не требует срочного решения.

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

1. Модульное тестирование (Unit Testing)
Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).

2. Интеграционное тестирование (Integration Testing)
Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.

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

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

5. Приемочное тестирование (Acceptance Testing)
Формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью:
определения удовлетворяет ли система приемочным критериям;
вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.

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

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

Функциональное тестирование (Functional testing)
Тестирование пользовательского интерфейса (GUI Testing)
Тестирование безопасности (Security and Access Control Testing)
Тестирование взаимодействия (Interoperability Testing)

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

Все виды тестирования производительности:
o нагрузочное тестирование (Performance and Load Testing)
o стрессовое тестирование (Stress Testing)
o тестирование стабильности или надежности (Stability / Reliability Testing)
o объемное тестирование (Volume Testing)
Тестирование установки (Installation testing)
Тестирование удобства пользования (Usability Testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing)
Конфигурационное тестирование (Configuration Testing)

Связанные с изменениями виды тестирования

Дымовое тестирование (Smoke Testing)
Регрессионное тестирование (Regression Testing)
Повторное тестирование (Re-testing)
Тестирование сборки (Build Verification Test)
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)

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

Тестирование пользовательского интерфейса (GUI Testing) - функциональная проверка интерфейса на соответствие требованиям - размер, шрифт, цвет, consistent behavior.

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

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

Нагрузочное тестирование - это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе.

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

Объемное тестирование (Volume Testing). Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения

Тестирование стабильности или надежности (Stability / Reliability Testing). Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.

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

Тестирование удобства пользования - это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Сюда также входит:
User eXperience (UX) - ощущение, испытываемое пользователем во время использования цифрового продукта, в то время как User interface - это инструмент, позволяющий осуществлять интеракцию «пользователь - веб-ресурс».

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

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

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

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

Повторное тестирование - тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
В чем разница между regression testing и re-testing?
Re-testing - проверяется исправление багов
Regression testing - проверяется то, что исправление багов, а также любые изменения в коде приложения, не повлияли на другие модули ПО и не вызвало новых багов.

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

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

Подходы к интеграционному тестированию:
Снизу вверх (Bottom Up Integration)
Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.
Сверху вниз (Top Down Integration)
Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами. Таким образом мы проводим тестирование сверху вниз.
Большой взрыв («Big Bang» Integration)
Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.

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

Принцип 1 – Тестирование демонстрирует наличие дефектов (Testing shows presence of defects)
Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.

Принцип 2 – Исчерпывающее тестирование недостижимо (Exhaustive testing is impossible)
Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.

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

Принцип 4 – Скопление дефектов (Defects clustering)
Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.

Принцип 5 – Парадокс пестицида (Pesticide paradox)
Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот “парадокс пестицида”, тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения,
или системы, и найти как можно больше дефектов.

Принцип 6 – Тестирование зависит от контекста (Testing is concept depending)
Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.
Принцип 7 – Заблуждение об отсутствии ошибок (Absence-of-errors fallacy)
Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.

Cтатическое и динамическое тестирование
Статическое тестирование отличается от динамического тем, что производится без запуска программного кода продукта. Тестирование осуществляется путем анализа программного кода (code review) или скомпилированного кода. Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к статическому тестированию относится тестирования спецификации и прочей документации.

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

Разница между ad hoc и exploratory testing в том, что теоретически, ad hoc может провести кто угодно, а для проведения exploratory необходимо мастерство и владение определенными техниками. Обратите внимание, что определенные техники это не только техники тестирования.

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

Требования к требованиям:
Корректность
Недвусмысленность
Полнота набора требований
Непротиворечивость набора требований
Проверяемость (тестопригодность)
Трассируемость
Понимаемость

Жизненный цикл бага

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

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

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

Жизненный цикл разработки ПО:
Пре-альфа
Альфа
Бета
Релиз-кандидат
Релиз
Пост-релиз

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

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

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

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

С чего же начинать организацию процесса тестирования?

Я выделяю 11 основных критериев в организации процесса тестирования:

  1. Цели и область тестирования
  2. Команда
  3. Управление
  4. Коммуникация и взаимодействие
  5. Методология тестирования
  6. Документированность процесса
  7. Управление рисками
  8. Измерение процесса
  9. Инструменты
  10. Тестовые среды
  11. Совершенствование процесса

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

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

  • Зачем нам нужно тестирование?
  • Что мы имеем, чтобы сделать тестирование?
  • Какие процессы нужно формализовать или создать?
  • Как и что мы должны тестировать?

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

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

  • ISO 29119
  • IEEE 829\1008
  • TPI Next&TMap
  • ISTQB

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

Любой ИТ процесс всегда должен удовлетворять потребностям бизнеса!

Мы разберем основные критерии построения процесса тестирования.

Цели и область тестирования

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

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

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

  • Что надо тестировать?
  • Что будем тестировать?

Зачастую, то что надо тестировать и то что будем может сильно различаться. Это зависит от возможностей вашего процесса тестирования. «Что надо» часто диктуется бизнесом и руководством, поэтому хороший руководитель должен всегда понимать, «что нужно» тестировать. Как говорится в поговорке: «За двумя зайцами погонишься, ни одного не поймаешь», так и тут. Всегда лучше качественно тестировать то, что действительно вы можете тестировать вашей командой, чем хвататься за все, что просит бизнес и ничего не успевать в срок, да еще и пропускать критичные дефекты.

Команда и управление

Команда — это самая важная составляющая процесса тестирования. Без команды вы, как руководитель, ничего не сделаете. Зачастую к формированию команды подходят несколькими подходами:

Инструменты и инфраструктура

Какой же процесс тестирования без инструментов? Это получается ручной труд ради ручного труда 🙂 Я думаю многие из вас часто слышали о написании тест-кейсов в документах ворд, о построения графиков и диаграмм в экселе. Но, зачем тратить усилия, если рынок предлагает нам готовые продукты управления тестирования, такие как HP ALM, MS TFS, TestRail, TestLink, JIRA Zephyr и многие другие.
Поэтому, если вы приступили к организации процесса тестирования, то делайте этот процесс удобным и эффективным. Пишите тест-кейсы в удобных формах готовых продуктов, интегрируйте инструменты с системой управления задачами, настраивайте и т.д.

Подходя к выбору инструмента нужно всегда понимать:

  • Какие задачи вы планируете выполнять?
  • Какой у вас бюджет на инструменты?

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

Помимо инструментов управления тестирования, к инструментам тестирования также можно отнести:

  • Система управления дефектами и задачами (может включаться в систему управления тестированием)
  • Вспомогательные инструменты (для скриншотов, снятия логов, работы с БД, SOUP UI для XML и т.д.)
  • Инструменты автоматизации ( , Selenium и т.д.)
  • Системы управления знаниями (на wiki движке)

Теперь поговорим об инфраструктуре. В текущем контексте своего повествования я подразумеваю тестовые среды.

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

Стандартно я выделяю следующие типы тестовых сред:

  • Среда разработки (можно ли ее относить к тестовой?, но тем не менее)
  • Среда тестирования системы (может быть развернута одна или несколько систем, компонент, не требует серьезных мощностей)
  • Среда интеграции (полноценный интеграционная среда для проверки работоспособности сквозных бизнес процессов)
  • Среда (основное требования — соответствие мощностями боевому контуру)
  • Среда ПродЛайк/ПреПрод (среда для отладки готового протестированного билда, проведение инсталяционного тестирования)

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

Совершенствование процесса

Я очень часто говорю такую фразу, что «Любой процесс, неважно какой, всегда должен постоянно совершенствоваться», на что очень часто слышу «Зачем, наш процесс и так хорошо работает».

Но это не так. Почему мы должны постоянно совершенствовать процесс тестирования:

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

2. ИТ сфера постоянно развивается. Приходят новые технологи подходы, которые всегда позволяются совершенствовать процесс тестирования.

Как говорится, совершенству нет предела!

Ну а как совершенствовать — это стандартный цикл Демминга.

Запланировали — .Сделали — Проанализировали — Скорректировали

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

Перевод: Ольга Алифанова

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

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

Из чего состоит тестирование

Расследование

Расследование определяется как "наблюдение или изучение путем близкого наблюдения и систематического изучения" .

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

Исследование

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

Тестирование не должно восприниматься, как прогон списка готовых тестов или тест-кейсов, дающих твердый "pass/fail" результат. Если у вас есть юзер-стори или набор требований, конечно, важно иметь их в виду. Однако критерии приемки бывает полезно переформулировать как "критерии отказа ". Когда критерии приемки не удовлетворены, продукт не принят, но если они в порядке, это не значит, что в ПО нет багов.

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

Снижение рисков

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

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

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

Ценность

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

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

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

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

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

  • Требования
  • Дизайн
  • Предположения
  • Документацию
  • Инфраструктуру
  • Процессы.

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

Коммуникация

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

Человек может начать работать тестировщиком, имея слабые технические навыки, но если он силен в коммуникации и может внятно донести свою мысль – это куда важнее.

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

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

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

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

Потенциальная бесконечность

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

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

Из чего тестирование не состоит

Простота

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

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

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

Автоматизируемость

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

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

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

Повышение качества

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

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

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

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

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

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

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

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

Жизненно необходимо для успеха продукта

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

Никогда не заканчивается

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

Часть работы тестировщика – это принятие решений, что именно тестировать, и понимание последствий этих решений и связанных с нимирисков.

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

Тестирование – это многое, многое другое

Я перечислила только некоторые аспекты того, что же такое тестирование. Эта статья могла бы быть значительно длиннее! Нет единого определения, что подразумевается под тестированием, а впихнуть в одно предложение все то, чем занимаются тестировщики, просто невозможно! Если поискать определение тестирования в Интернете, можно наткнуться на фразы вроде "поиск багов в приложениях" – но как мы уже выяснили, это не только и не столько поиск багов.

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

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

Что это такое – А/Б тестирование сайта?

Если вкратце, то это метод оценки эффективности двух вариантов одной и той же страницы. Например, есть два дизайна карточки товара и оба они настолько круты, что вы даже спать и есть не можете. Логичный выход – проверить, какой вариант работает лучше. Для этого половине посетителей показывается вариант №1, а половине – вариант №2. Побеждает тот, кто лучше справляется с поставленными задачами.

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

Как проводится A/B тестирование сайта

Постановка задачи

Сначала нужно определиться с целью. Поймите, чего вы хотите добиться: увеличения конверсии, времени пребывания на сайте или снизить процент отказов. Если с целями и задачами все ОК, меняйте контент или дизайн, опираясь на них. Например, можно пойти по пути всех growth-хакеров и изменить расположение и дизайн кнопки «Купить». Сейчас она висит слева внизу и вы хотите посмотреть, что будет, если поменять ее внешний вид и передвинуть кнопку выше и правее.

Техническая реализация

Здесь все просто – либо создается отдельная страница, на которой меняется только объект тестирования, либо программист применяет магию и реализует все в рамках одного документа.

Подготовка контрольных данных

Страница переделана и все готово к запуску теста. Но сперва нужно измерить исходные показатели конверсии и всех остальных параметров, которые мы будем учитывать. Исходному варианту страницы присваиваем имя «A», а новому – «B».

Тест

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

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

Анализ

Теперь нужно ждать, пока наберется достаточно статистики и сравнить результаты А/Б тестирования. Сколько именно придется ждать, зависит от популярности сайта и некоторых других параметров. Выборка должна представлять статистическую значимость. Это значит, что вероятность случайности результата должна быть не выше 5%. Пример: Допустим, на обеих страницах одинаковое количество визитов – по тысяче. При этом у страницы A 5 целевых действий, а у страницы B – 6. Результат отличается слишком незначительно, чтобы говорить о закономерности, поэтому он не годится.

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

Выработка решения

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

Как сделать A/B и сплит-тестирование объективным

Снизить влияние внешних факторов. Мы уже немного затронули эту тему – нужно проводить тест в один и тот же период времени, а источники трафика должны быть одинаковыми для обеих страниц. Если не позаботиться о равных условиях, то получите нерепрезентативную выборку. Люди из поиска ведут себя на странице не так, как посетители из группы в «Фейсбуке» или «Вконтакте». То же самое с объемом трафика – он должен быть примерно одинаковым.

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

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

Влияет ли A/B тестирование сайта на SEO?

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

Что и как можно улучшить с помощью A/B тестирования

  • Конверсию. Самый популярный вариант. Даже незначительное изменение страницы может повлиять на показатель конверсии. При этом целевым действием может считаться и покупка, и регистрация, и просмотр какой-либо страницы, и подписка на рассылку, и переход по ссылке.
  • Средний чек. В этом случае часто тестируют новые блоки дополнительных продаж: «похожие товары» и «с этим товаром часто покупают».
  • Поведенческие факторы. К ним относят глубину просмотра, среднее время на сайте и отказы.

Обычно пробуют менять:

  • Дизайн кнопок «Купить», «Оставить заявку».
  • Контент страницы: заголовки, описание продукта, изображения, призывы к действию и все остальное.
  • Расположение и внешний вид блока с ценами.
  • Структуру страницы.
  • Расположение, структуру и дизайн формы заявки.

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

Инструменты для A/B тестирования сайта

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

Optimizely.com

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

Changeagain.me

Достаточно удобный сервис, главное преимущество – простая и полная интеграция с Google Analytics: цели можно создавать прямо в сервисе, а они потом автоматически подгружаются в систему. Остальные функции более-менее стандарны: простой визуальный редактор, таргетинг по устройствам и странам. конкретный набор зависит от тарифного плана..

ABtasty.com

Этот сервис отличается большим пробным периодом – он длиться аж 30 дней, вместо стандартных 14-15-ти. Плюс, инструмент интегрируется в WordPress, Google Analytics и несколько других сервисов, которыми пользуются забугорные маркетологи и веб-мастера. Из дополнительных плюсов: удобный интерфейс и детальный таргетинг.

Как провести A/B тестирование через Google Analytics

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

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

Там задаются адреса страниц A и B. Если поставить галочку «Унификация вариантов для других отчетов по содержанию», то в остальных отчетах показатели всех вариантов будут учитываться как показатели исходной страницы.

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

Как настроить «Яндекс Метрику» для A/B тестирования

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

После этого нужно передать в метрику информацию о том, какой вариант сайта увидел пользователь. Небольшую инструкуцию дает сам «Яндекс» . Для нам нужно создать параметр А/Б тестирования и присвоить ему нужное значение. В случае с кнопкой мы определяем параметр как:

var yaParams = {ab_test: "Кнопка1" };

или

var yaParams = {ab_test: "Кнопка2" };

После этого параметр передается в «Метрику» и его можно использовать для формирования отчета по «параметрам визитов».

Итоги

А/Б (или сплит) тестирование сайта – это важный, нужный и почти обязательный инструмент. Если регулярно проверять новые гипотезы, эффективность страницы можно вывести на новый уровень. Но нельзя сказать, что усилий для этого нужно минимум. Чтобы просто поменять расположение или цвет кнопки придется подключить к делу программиста или дизайнера, пусть это и не займет много времени. Плюс, любое предположение может оказаться ошибочным. Но кто не рискует, тот не получает возросший поток заявок и не бегает по офису счастливым.

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

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

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

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

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

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

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

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

6) ознакомление испытуемого с результатами тестирования, сообщение ему или ответственному лицу соответствующей информации с учетом принципа «Не навреди!»; в этом случае возникает необходимость решения серии этических и нравственных задач;

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

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

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

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

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

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

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

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

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

свойство. Применяются разные способы проверки надежности тестов.

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

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

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

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

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

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

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