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

Фундаментальная теория тестирования

Время на прочтение
15 мин

Количество просмотров 833K

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

Перейдем к основным понятиям

Тестирование программного обеспечения (Software Testing) — проверка соответствия реальных и ожидаемых результатов поведения программы, проводимая на конечном наборе тестов, выбранном определённым образом.

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

Для чего проводится тестирование ПО?

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

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

  • Принцип 1 — Тестирование демонстрирует наличие дефектов (Testing shows presence of defects).
    Тестирование только снижает вероятность наличия дефектов, которые находятся в программном обеспечении, но не гарантирует их отсутствия.
  • Принцип 2 — Исчерпывающее тестирование невозможно (Exhaustive testing is impossible).
    Полное тестирование с использованием всех входных комбинаций данных, результатов и предусловий физически невыполнимо (исключение — тривиальные случаи).
  • Принцип 3 — Раннее тестирование (Early testing).
    Следует начинать тестирование на ранних стадиях жизненного цикла разработки ПО, чтобы найти дефекты как можно раньше.
  • Принцип 4 — Скопление дефектов (Defects clustering).
    Большая часть дефектов находится в ограниченном количестве модулей.
  • Принцип 5 — Парадокс пестицида (Pesticide paradox).
    Если повторять те же тестовые сценарии снова и снова, в какой-то момент этот набор тестов перестанет выявлять новые дефекты.
  • Принцип 6 — Тестирование зависит от контекста (Testing is context depending). Тестирование проводится по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем новостной портал.
  • Принцип 7 — Заблуждение об отсутствии ошибок (Absence-of-errors fallacy). Отсутствие найденных дефектов при тестировании не всегда означает готовность продукта к релизу. Система должна быть удобна пользователю в использовании и удовлетворять его ожиданиям и потребностям.

Обеспечение качества (QA — Quality Assurance) и контроль качества (QC — Quality Control) — эти термины похожи на взаимозаменяемые, но разница между обеспечением качества и контролем качества все-таки есть, хоть на практике процессы и имеют некоторую схожесть.

QC (Quality Control) — Контроль качества продукта — анализ результатов тестирования и качества новых версий выпускаемого продукта.

К задачам контроля качества относятся:

  • проверка готовности ПО к релизу;
  • проверка соответствия требований и качества данного проекта.

QA (Quality Assurance) — Обеспечение качества продукта — изучение возможностей по изменению и улучшению процесса разработки, улучшению коммуникаций в команде, где тестирование является только одним из аспектов обеспечения качества.

К задачам обеспечения качества относятся:

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

Скриншот

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

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

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

Пример: когда разрабатывали аэробус А310, то надо было сделать так, чтобы закрылки вставали в положение «торможение», когда шасси коснулись земли. Запрограммировали так, что когда шасси начинают крутиться, то закрылки ставим в положение «торможение». Но вот во время испытаний в Варшаве самолет выкатился за пределы полосы, так как была мокрая поверхность. Он проскользил, только потом был крутящий момент и они, закрылки, открылись. С точки зрения «верификации» — программа сработала, с точки зрения «валидации» — нет. Поэтому код изменили так, чтобы в момент изменения давления в шинах открывались закрылки.

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

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

Этапы тестирования:

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

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

Программный продукт проходит следующие стадии:

  1. анализ требований к проекту;
  2. проектирование;
  3. реализация;
  4. тестирование продукта;
  5. внедрение и поддержка.

Требования

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

Атрибуты требований:

  1. Корректность — точное описание разрабатываемого функционала.
  2. Проверяемость — формулировка требований таким образом, чтобы можно было выставить однозначный вердикт, выполнено все в соответствии с требованиями или нет.
  3. Полнота — в требовании должна содержаться вся необходимая для реализации функциональности информация.
  4. Недвусмысленность — требование должно содержать однозначные формулировки.
  5. Непротиворечивость — требование не должно содержать внутренних противоречий и противоречий другим требованиям и документам.
  6. Приоритетность — у каждого требования должен быть приоритет(количественная оценка степени значимости требования). Этот атрибут позволит грамотно управлять ресурсами на проекте.
  7. Атомарность — требование нельзя разбить на отдельные части без потери деталей.
  8. Модифицируемость — в каждое требование можно внести изменение.
  9. Прослеживаемость — каждое требование должно иметь уникальный идентификатор, по которому на него можно сослаться.

Дефект (bug) — отклонение фактического результата от ожидаемого.

Отчёт о дефекте (bug report) — документ, который содержит отчет о любом недостатке в компоненте или системе, который потенциально может привести компонент или систему к невозможности выполнить требуемую функцию.

Атрибуты отчета о дефекте:

  1. Уникальный идентификатор (ID) — присваивается автоматически системой при создании баг-репорта.
  2. Тема (краткое описание, Summary) — кратко сформулированный смысл дефекта, отвечающий на вопросы: Что? Где? Когда(при каких условиях)?
  3. Подробное описание (Description) — более широкое описание дефекта (указывается опционально).
  4. Шаги для воспроизведения (Steps To Reproduce) — описание четкой последовательности действий, которая привела к выявлению дефекта. В шагах воспроизведения должен быть описан каждый шаг, вплоть до конкретных вводимых значений, если они играют роль в воспроизведении дефекта.
  5. Фактический результат (Actual result) — описывается поведение системы на момент обнаружения дефекта в ней. чаще всего, содержит краткое описание некорректного поведения(может совпадать с темой отчета о дефекте).
  6. Ожидаемый результат (Expected result) — описание того, как именно должна работать система в соответствии с документацией.
  7. Вложения (Attachments) — скриншоты, видео или лог-файлы.
  8. Серьёзность дефекта (важность, Severity) — характеризует влияние дефекта на работоспособность приложения.
  9. Приоритет дефекта (срочность, Priority) — указывает на очерёдность выполнения задачи или устранения дефекта.
  10. Статус (Status) — определяет текущее состояние дефекта. Статусы дефектов могут быть разными в разных баг-трекинговых системах.
  11. Окружение (Environment) – окружение, на котором воспроизвелся баг.

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

Скриншот

Severity vs Priority

Серьёзность (severity) показывает степень ущерба, который наносится проекту существованием дефекта. Severity выставляется тестировщиком.

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

  • Блокирующий (S1 – Blocker)
    тестирование значительной части функциональности вообще недоступно. Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее ключевыми функциями становится невозможна.
  • Критический (S2 – Critical)
    критическая ошибка, неправильно работающая ключевая бизнес-логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, то есть не работает важная часть одной какой-либо функции либо не работает значительная часть, но имеется workaround (обходной путь/другие входные точки), позволяющий продолжить тестирование.
  • Значительный (S3 – Major)
    не работает важная часть одной какой-либо функции/бизнес-логики, но при выполнении специфических условий, либо есть workaround, позволяющий продолжить ее тестирование либо не работает не очень значительная часть какой-либо функции. Также относится к дефектам с высокими visibility – обычно не сильно влияющие на функциональность дефекты дизайна, которые, однако, сразу бросаются в глаза.
  • Незначительный (S4 – Minor)
    часто ошибки GUI, которые не влияют на функциональность, но портят юзабилити или внешний вид. Также незначительные функциональные дефекты, либо которые воспроизводятся на определенном устройстве.
  • Тривиальный (S5 – Trivial)
    почти всегда дефекты на GUI — опечатки в тексте, несоответствие шрифта и оттенка и т.п., либо плохо воспроизводимая ошибка, не касающаяся бизнес-логики, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.

Срочность (priority) показывает, как быстро дефект должен быть устранён. Priority выставляется менеджером, тимлидом или заказчиком

Градация Приоритета дефекта (Priority):

  • P1 Высокий (High)
    Критическая для проекта ошибка. Должна быть исправлена как можно быстрее.
  • P2 Средний (Medium)
    Не критичная для проекта ошибка, однако требует обязательного решения.
  • P3 Низкий (Low)
    Наличие данной ошибки не является критичным и не требует срочного решения. Может быть исправлена, когда у команды появится время на ее устранение.

Существует шесть базовых типов задач:

  • Эпик (epic) — большая задача, на решение которой команде нужно несколько спринтов.
  • Требование (requirement ) — задача, содержащая в себе описание реализации той или иной фичи.
  • История (story) — часть большой задачи (эпика), которую команда может решить за 1 спринт.
  • Задача (task) — техническая задача, которую делает один из членов команды.
  • Под-задача (sub-task) — часть истории / задачи, которая описывает минимальный объем работы члена команды.
  • Баг (bug) — задача, которая описывает ошибку в системе.

Тестовые среды

  • Среда разработки (Development Env) – за данную среду отвечают разработчики, в ней они пишут код, проводят отладку, исправляют ошибки
  • Среда тестирования (Test Env) – среда, в которой работают тестировщики (проверяют функционал, проводят smoke и регрессионные тесты, воспроизводят.
  • Интеграционная среда (Integration Env) – среда, в которой проводят тестирование взаимодействующих друг с другом модулей, систем, продуктов.
  • Предпрод (Preprod Env) – среда, которая максимально приближена к продакшену. Здесь проводится заключительное тестирование функционала.
  • Продакшн среда (Production Env) – среда, в которой работают пользователи.

Основные фазы тестирования

  • Pre-Alpha: прототип, в котором всё ещё присутствует много ошибок и наверняка неполный функционал. Необходим для ознакомления с будущими возможностями программ.
  • Alpha: является ранней версией программного продукта, тестирование которой проводится внутри фирмы-разработчика.
  • Beta: практически готовый продукт, который разработан в первую очередь для тестирования конечными пользователями.
  • Release Candidate (RC): возможные ошибки в каждой из фичей уже устранены и разработчики выпускают версию на которой проводится регрессионное тестирование.
  • Release: финальная версия программы, которая готова к использованию.

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

Вид тестирования — это совокупность активностей, направленных на тестирование заданных характеристик системы или её части, основанная на конкретных целях.

Скриншот

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

  2. Классификация по доступу к коду и архитектуре:
    • Тестирование белого ящика — метод тестирования ПО, который предполагает полный доступ к коду проекта.
    • Тестирование серого ящика — метод тестирования ПО, который предполагает частичный доступ к коду проекта (комбинация White Box и Black Box методов).
    • Тестирование чёрного ящика — метод тестирования ПО, который не предполагает доступа (полного или частичного) к системе. Основывается на работе исключительно с внешним интерфейсом тестируемой системы.

  3. Классификация по уровню детализации приложения:
    • Модульное тестирование — проводится для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде. Проводится самими разработчиками, так как предполагает полный доступ к коду.
    • Интеграционное тестирование — тестирование, направленное на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое.
    • Системное тестирование — процесс тестирования системы, на котором проводится не только функциональное тестирование, но и оценка характеристик качества системы — ее устойчивости, надежности, безопасности и производительности.
    • Приёмочное тестирование — проверяет соответствие системы потребностям, требованиям и бизнес-процессам пользователя.

  4. Классификация по степени автоматизации:
    • Ручное тестирование.
    • Автоматизированное тестирование.

  5. Классификация по принципам работы с приложением
    • Позитивное тестирование — тестирование, при котором используются только корректные данные.
    • Негативное тестирование — тестирование приложения, при котором используются некорректные данные и выполняются некорректные операции.

  6. Классификация по уровню функционального тестирования:
    • Дымовое тестирование (smoke test) — тестирование, выполняемое на новой сборке, с целью подтверждения того, что программное обеспечение стартует и выполняет основные для бизнеса функции.
    • Тестирование критического пути (critical path) — направлено для проверки функциональности, используемой обычными пользователями во время их повседневной деятельности.
    • Расширенное тестирование (extended) — направлено на исследование всей заявленной в требованиях функциональности.

  7. Классификация в зависимости от исполнителей:
    • Альфа-тестирование — является ранней версией программного продукта. Может выполняться внутри организации-разработчика с возможным частичным привлечением конечных пользователей.
    • Бета-тестирование — программное обеспечение, выпускаемое для ограниченного количества пользователей. Главная цель — получить отзывы клиентов о продукте и внести соответствующие изменения.

  8. Классификация в зависимости от целей тестирования:
    • Функциональное тестирование (functional testing) — направлено на проверку корректности работы функциональности приложения.
    • Нефункциональное тестирование (non-functional testing) — тестирование атрибутов компонента или системы, не относящихся к функциональности.
      1. Тестирование производительности (performance testing) — определение стабильности и потребления ресурсов в условиях различных сценариев использования и нагрузок.
      2. Нагрузочное тестирование (load testing) — определение или сбор показателей производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству).
      3. Тестирование масштабируемости (scalability testing) — тестирование, которое измеряет производительность сети или системы, когда количество пользовательских запросов увеличивается или уменьшается.
      4. Объёмное тестирование (volume testing) — это тип тестирования программного обеспечения, которое проводится для тестирования программного приложения с определенным объемом данных.
      5. Стрессовое тестирование (stress testing) — тип тестирования направленный для проверки, как система обращается с нарастающей нагрузкой (количеством одновременных пользователей).
      6. Инсталляционное тестирование (installation testing) — тестирование, направленное на проверку успешной установки и настройки, обновления или удаления приложения.
      7. Тестирование интерфейса (GUI/UI testing) — проверка требований к пользовательскому интерфейсу.
      8. Тестирование удобства использования (usability testing) — это метод тестирования, направленный на установление степени удобства использования, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий.
      9. Тестирование локализации (localization testing) — проверка адаптации программного обеспечения для определенной аудитории в соответствии с ее культурными особенностями.
      10. Тестирование безопасности (security testing) — это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
      11. Тестирование надёжности (reliability testing) — один из видов нефункционального тестирования ПО, целью которого является проверка работоспособности приложения при длительном тестировании с ожидаемым уровнем нагрузки.
      12. Регрессионное тестирование (regression testing) — тестирование уже проверенной ранее функциональности после внесения изменений в код приложения, для уверенности в том, что эти изменения не внесли ошибки в областях, которые не подверглись изменениям.
      13. Повторное/подтверждающее тестирование (re-testing/confirmation testing) — тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.

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

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

Автор книги «A Practitioner’s Guide to Software Test Design», Lee Copeland, выделяет следующие техники тест-дизайна:

  1. Тестирование на основе классов эквивалентности (equivalence partitioning) — это техника, основанная на методе чёрного ящика, при которой мы разделяем функционал (часто диапазон возможных вводимых значений) на группы эквивалентных по своему влиянию на систему значений.
  2. Техника анализа граничных значений (boundary value testing) — это техника проверки поведения продукта на крайних (граничных) значениях входных данных.
  3. Попарное тестирование (pairwise testing) — это техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить количество тест-кейсов.
  4. Тестирование на основе состояний и переходов (State-Transition Testing) — применяется для фиксирования требований и описания дизайна приложения.
  5. Таблицы принятия решений (Decision Table Testing) — техника тестирования, основанная на методе чёрного ящика, которая применяется для систем со сложной логикой.
  6. Доменный анализ (Domain Analysis Testing) — это техника основана на разбиении диапазона возможных значений переменной на поддиапазоны, с последующим выбором одного или нескольких значений из каждого домена для тестирования.
  7. Сценарий использования (Use Case Testing) — Use Case описывает сценарий взаимодействия двух и более участников (как правило — пользователя и системы).

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

Скриншот

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

Согласно ISTQB, тестирование белого ящика — это:

  • тестирование, основанное на анализе внутренней структуры компонента или системы;
  • тест-дизайн, основанный на технике белого ящика — процедура написания или выбора тест-кейсов на основе анализа внутреннего устройства системы или компонента.
  • Почему «белый ящик»? Тестируемая программа для тестировщика — прозрачный ящик, содержимое которого он прекрасно видит.

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

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

Согласно ISTQB, тестирование черного ящика — это:

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

Тестовая документация

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

Тест план должен отвечать на следующие вопросы:

  • Что необходимо протестировать?
  • Как будет проводиться тестирование?
  • Когда будет проводиться тестирование?
  • Критерии начала тестирования.
  • Критерии окончания тестирования.

Основные пункты тест плана:

  1. Идентификатор тест плана (Test plan identifier);
  2. Введение (Introduction);
  3. Объект тестирования (Test items);
  4. Функции, которые будут протестированы (Features to be tested;)
  5. Функции, которые не будут протестированы (Features not to be tested);
  6. Тестовые подходы (Approach);
  7. Критерии прохождения тестирования (Item pass/fail criteria);
  8. Критерии приостановления и возобновления тестирования (Suspension criteria and resumption requirements);
  9. Результаты тестирования (Test deliverables);
  10. Задачи тестирования (Testing tasks);
  11. Ресурсы системы (Environmental needs);
  12. Обязанности (Responsibilities);
  13. Роли и ответственность (Staffing and training needs);
  14. Расписание (Schedule);
  15. Оценка рисков (Risks and contingencies);
  16. Согласования (Approvals).

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

Чаще всего чек-лист содержит только действия, без ожидаемого результата. Чек-лист менее формализован.

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

Атрибуты тест кейса:

  • Предусловия (PreConditions) — список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
  • Шаги (Steps) — список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям.
  • Ожидаемый результат (Expected result) — что по факту должны получить.

Резюме

Старайтесь понять определения, а не зазубривать. Если хотите узнать больше про тестирование, то можете почитать Библию QA. А если возникнет вопрос, всегда можете задать его нам в телеграм-канале @qa_chillout.

Работа тестировщика входит в пятерку самых популярных работ в сфере IT, согласно статистике за 2020 год. Рынок растет очень быстро, а IT-компании постоянно создают новые команды тестировщиков. А вот еще немного впечатляющей статистики – на тестирование уходит 50% всего времени и более 50% общей стоимости любого проекта по созданию софта. А это приличный бюджет. Это означает, что налаживание процессов тестирования позволит сэкономить не только время, но и деньги.

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

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

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

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

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

Выбор инструмента и способа тестирования зависит от ваших целей и от желаемого уровня тестирования.  

А какие еще есть типы тестов?

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

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

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

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

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

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

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

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

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

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

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

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

Системное тестирование проводится на полной интегрированной системе. Его основная цель – проверить, соответствует ли система требованиям. Оно относится к тестированию методом «черного ящика» и, следовательно, не требует знания внутренней структуры. Системное тестирование делится на альфа-тестирование и бета-тестирование.

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

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

Запись на курс Manual QA

#подборки


  • 0

Учиться тестированию можно по-разному. Хорошие книги — источник базовых знаний и практического опыта экспертов.

 vlada_maestro / shutterstock

Наталья Березовская

Автор в сфере IT, digital, экономики и финансов. Ведёт некоммерческий проект для начинающих писателей «ЛитЦех».

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


Это пособие для тех, кто только начинает свой путь в тестировании. Оно дает самые общие представления о профессии, погружает в суть процесса и описывает его простыми словами, без излишнего академизма и трудных для восприятия понятий. Учебник можно рассматривать как некий гейтвей в тестирование, поскольку автор знакомит читателя с основными терминами, соотносит англоязычные понятия с русскими, попутно раскрывая и объясняя каждое из них. Преимущество книги Романа Савина «tестирование dot com» еще и в русском языке оригинала, что исключает проблему неточностей перевода.


Фундаментальные концепции менеджмента бизнес-приложений

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

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


Технологии функционального тестирования программного обеспечения и систем

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

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


Универсальный учебник, переживший третье переиздание на русском языке; в целом книге уже больше 30 лет, но она дополняется от издания к изданию. Несмотря на столь почтенный возраст, она не теряет в актуальности благодаря глубине изложенного материала. Книга посвящена не методикам или языкам тестирования. Авторы поставили своей целью рассказать об основополагающих принципах:

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

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


Оптимизация ресурсов и временных затрат на тестировании — важная и острая тема для команд разработки. Книга Рекса Блэка через контроль рисков рассказывает о 12 процессах тестирования.

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


Практическое руководство для тестировщиков ПО и гибких команд

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


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

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


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

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


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

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


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

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


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

Распространяется бесплатно в формате PDF

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

Ее можно перечитывать много раз и находить новые способы решения насущных задач. Автор рассказывает о различных типах атак: на сервер, на клиент, state based и других. Описание атаки состоит из вводной части, сферы применения и инструкции о том, как ее проводить.


Вторая книга Витакера — пошаговое руководство по тестированию безопасности приложений. Ее лучше читать после «How to break web software».

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

Автор рассказывает о верхнеуровневых классах проверок, например, на уровне кода или GUI, и приводит 19 атак на защищенность приложения. Каждое описание атаки или инъекции состоит из вводной части, описания случаев применения и руководства по нему.


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

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


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

Как зарабатывать больше с помощью нейросетей?
Бесплатный вебинар: 15 экспертов, 7 топ-нейросетей. Научитесь использовать ИИ в своей работе и увеличьте доход.

Узнать больше

Software testing plays a crucial role in ensuring the quality and reliability of software applications. It systematically evaluates various aspects of the software, including functionality, performance, and usability. However, to be a good tester and excel in software testing, you need to have good knowledge of both manual and automation techniques

Aspiring testers and experienced professionals must be updated with the latest software testing trends and technology trends. Books provide an invaluable resource for learning and expanding one’s knowledge in software testing. You should enhance your skills with software testing books to excel in your career. 

Software Testing Books

In this article, we have combined a list of the top 12 software testing books for manual and automation testing. These books cover various topics, from fundamental principles to advanced techniques, industry best practices, and emerging trends.

We have carefully selected books catering to testers with different expertise and experience levels. If you want to dig into the fundamentals, explore specific testing methodologies, or dive deep into test automation frameworks, this list has something for everyone.

Each software testing book featured in this compilation provides valuable insights, practical examples, and hands-on exercises to enhance your understanding of software testing concepts. First thing first, let’s understand the basics first.

What is Software Testing?

Software testing is a process of testing any software, or application to check its durability. During testing, all the bugs, and issues that arise from the expected output need to be addressed and resolved beforehand before it actually goes in for public usage. You can also refer to this article – Software Testing Basics to learn the basics of software testing.

Now, let’s gear up and embark on this enlightening journey through the top 12 software testing books that will elevate your testing skills and equip you with the necessary and important tools to excel in your testing career. Let’s get started!

Best Software Testing Books For Manual and Automation Testing

Now, let’s check out the best hand-picked Top 12 Software Testing Books for manual and automation testing that every software should know.

1. The Art of Software Testing, 3rd Edition

“The Art of Software Testing” has been an indispensable software testing book for software testers for over three decades. Authored by Glenford J. Myers, Corey Sandler, and Tom Badgett, this timeless classic covers a broad range of software testing principles, techniques, and methodologies.

1. The Art of Software Testing, 3rd Edition

The book’s third edition has been updated to reflect the changing landscape of software testing. It provides valuable insights into effective test case design and automation and managing the testing process. The authors emphasize the importance of structured testing approaches and offer practical guidance on creating reliable test cases and executing them systematically.

This book is an excellent foundation for beginners in the field as it provides a solid understanding of fundamental concepts and principles of software testing. Experienced professionals looking to expand their knowledge will also find it useful in refining their skills.

Author: Glenford J. Myers, Tom Badgett, Corey Sandler.

Cost: 699 INR

Publication year: 1979

Rating: 4.3

2. Software Testing, 2nd Edition, 2005

This second edition offers readers a comprehensive overview of various techniques and methodologies used in software testing, such as black-box and white-box testing, functional and structural testing, along with static techniques. The software book for beginners is divided into six different chapters that include aspects and crucial software testing concepts. The author emphasizes test planning, execution, and defect tracking while providing practical advice on effective management techniques. 

2. Software Testing, 2nd Edition, 2005

The chapters in the software testing book are presented clearly and concisely, making the content easily understandable. This book for testing is highly recommended for individuals new to software testing and those who wish to enhance their skills before embarking on real-world project work.

Author: Ron Patton

Cost: 6789 INR

Publication year: 2005

Rating: 4.2

3. Software Testing: A Craftsman’s Approach, Fourth Edition

It is another highly regarded book that focuses on the craftsmanship aspect of software testing, with its latest fourth edition covering manual and automated testing techniques while emphasizing a hands-on approach to critical thinking using real-world examples like security or performance tests or even exploring automation frameworks. 

3. Software Testing: A Craftsman’s Approach, Fourth Edition

It is an excellent software testing book for beginners as it is structured to give information and improve understanding of software testing methodologies, best practices, and techniques. The book’s appendix includes essential documents for sample use case technical inspection. Additionally, the fourth edition includes a section on software testing within an Agile programming environment.

It also combines strong mathematical principles with a comprehensive treatment of Model-Based Testing. It covers code-based (structural) testing and specification-based (functional) testing, taking these techniques beyond traditional unit testing discussions to encompass integration and system testing.

Author: Paul C. Jorgensen

Cost: 1099 INR 

Publication year: 1st edition-1995 and latest edition 2023

Rating: 4.2

4. Software Testing Career Package – A Software Tester’s Journey from Getting a Job to Becoming a Test Leader!

This software testing book for beginners guides individuals pursuing a career in software testing, offering valuable insights and practical advice from the initial job search to advancing as a test leader. The authors explain about various stages of a software tester’s career. Starting with landing a job in software testing, the book provides tips and strategies for resume building, interview preparation, and showcasing one’s skills effectively.

4. Software Testing Career Package – A Software Tester’s Journey from Getting a Job to Becoming a Test Leader!

The book talks about the fundamental concepts of software testing, giving the reader insight into how to perform software tests in real-world scenarios. Reading this book will familiarise you with the principles of test planning, test design, defect management, etc. This book also details test automation, managing test projects, and performance testing. Such information is crucial for testers when they progress in their career. 

It is one of the prime software testing books for beginners, as the author has given their expertise and shared practical experience throughout the book. Hence, the insights shared in this book empower readers to navigate their careers effectively and achieve their goals in the field of software testing. 

Author: Vijay Shinde and Debassis Pradhan

Cost: 449 INR 

Publication year: 2005

Rating: 3.9

5. Penetration Testing – A Hands-On Introduction to Hacking

It is a valuable software testing book for testers exploring ethical hacking and penetration testing in depth. The book aims to assist individuals interested in simulating cyber attacks to identify security vulnerabilities in networks, operating systems, and applications. It acknowledges that becoming a skilled penetration tester is a challenging endeavor that requires extensive knowledge and expertise.

5. Penetration Testing – A Hands-On Introduction to Hacking

This testing book for testing offers a wealth of informative content and penetration techniques to evaluate enterprise defenses. It caters to the needs of information security experts worldwide by providing practical guidance and insights into the field. By studying the book’s materials and applying the techniques outlined, readers can enhance their ability to assess security measures effectively.

The content covers various aspects of penetration testing, including different attack types, methodologies, and commonly used tools. Through hands-on examples and practical exercises, readers gain a deeper understanding of the subject matter. 

Author: Georgia Weidman

Cost: 2919 INR

Publication year: 2014

Rating: 4.6

6. Software Testing Techniques, 2nd Edition

The book for testing provides valuable insights and practical techniques for effectively testing software systems. The second edition builds upon the first edition’s success, incorporating new developments and advancements in software testing. It covers many testing techniques, from traditional to more modern and innovative methods. Boris Beizer’s expertise shines through in how he explains complex concepts in a clear and accessible manner.

6. Software Testing Techniques, 2nd edition

One of the highlights of this software testing book is its emphasis on practicality. It discusses theoretical aspects of software testing and provides real-world examples and case studies. This enables readers to understand how to apply the techniques in practice, making it an invaluable resource for beginners and experienced testers.

The book covers various aspects of software testing, including test design, test management, and test automation. It also explores boundary value analysis, equivalence partitioning, and state transition testing. These techniques equip testers with the tools they need to identify potential defects and ensure the quality and reliability of software systems.

Author: Boris Beizer

Cost: 594 INR

Publication year: 1982

Rating: 4.1

7. Lessons Learned in Software Testing: A Context-Driven Approach

This fascinating software testing book captures decades of collective software testing experience. It compiles essential lessons that any software testing professional would greatly benefit from.

7. Lessons Learned in Software Testing: A Context-Driven Approach

What makes this software testing book truly unique and captivating is the chance to learn from the mistakes and experiences of software testers. Written by some of the world’s top software testing experts, the book generously shares their wisdom and years of experience, ensuring you avoid repeating their errors. Each lesson in the testing book is presented as an assertion associated with software testing and followed by a detailed explanation or example that illuminates the how, when, and why behind the testing lesson.

Imagine the value of learning from the firsthand experiences of seasoned professionals in the field. With this book, you have access to a wealth of knowledge that can shape your approach to software testing and help you avoid common pitfalls.

Author: Cem Kaner, James Bach, Bret Pettichord

Cost: 3330 INR

Publication year: 2002

Rating: 4.6

8. Agile Testing: A Practical Guide for Testers and Agile Teams

It is a must-have software testing book for anyone involved in Agile development, including testers, Agile teams, managers, or customers. Understanding the nuances of Agile can be challenging, but this book offers clear and practical guidance to navigate the world of Agile testing.

8. Agile Testing: A Practical Guide for Testers and Agile Teams

The authors have explained the Agile testing quadrants, helping readers identify the specific types of testing required, who should perform them, and the tools needed to execute tests effectively.

What sets this software testing book distinct is its comprehensive coverage of not just Agile methodologies but also the perspective of a tester throughout an Agile software development iteration. It dives into the seven key success factors of Agile testing, providing valuable insights for achieving successful outcomes in an Agile environment.

Author: Crispin Lisa, Gregory Janet

Cost: 5020 INR

Publication year: 2008

Rating: 4.4

9. A Practitioner’s Guide to Software Test Design (Artech House Computing Library) 

This comprehensive and practical software testing book is an important resource for anyone inquisitive and inclined in mastering the art of software testing and test design.

9. A Practitioner’s Guide to Software Test Design (Artech House Computing Library)

One of the book’s strengths is its ability to present the essential test design techniques in a consistent and easily understandable format. It is a handy handbook you can immediately apply in your testing endeavors.

By reading this book on testing, you’ll gain insights into choosing the best test case design, effectively finding software application defects and errors in less time and with fewer resources, and developing optimal strategies for efficient testing. It also emphasizes the importance of reducing the likelihood of costly mistakes.

The book’s usefulness extends beyond test design. It guides estimating effort and assessing the time and cost associated with thorough testing. This makes it a valuable asset for various professionals involved in the software development and testing process.

Author: Lee Copeland

Cost: 7641 INR

Publication year: 2003

Rating: 4.3

10. Software Test Automation – Effective Use of Test Execution Tools

It is a practical software testing book that explores the implementation of automated testing in software development. It caters to both aspiring automation test engineers and individuals with prior knowledge in the field. The book for testing explains the fundamental principles of automated testing and provides valuable insights into designing a robust testing framework. Focusing on specific project requirements, it offers guidance on selecting and applying suitable testing tools.

10. Software Test Automation – Effective Use of Test Execution Tools

Authored by renowned experts known for their seminars, consultancy, and training, this book is a valuable resource for anyone seeking a clear and rational introduction to automated testing. This software testing book is essential to equip you with practical knowledge to improve your automated testing practices. 

Author: Mark Fewster and Dorothy Graham

Cost: 5961 INR

Publication year: 1999

Rating: 3.7

11. Java for Testers: Learn Java Fundamentals Fast

It is a software testing book that caters to testers who want to quickly grasp the fundamentals of Java programming for test automation. Authored by Alan Richardson, an experienced expert in the field, this book offers a practical and accessible approach to learning Java.

11. Java for Testers: Learn Java Fundamentals Fast

If you’re working as a tester and looking to expand your skill set or are new to programming, this software testing book provides a clear and concise introduction to Java. It focuses specifically on the aspects relevant to software testing, allowing testers to learn Java at an accelerated pace.

By reading this book, you’ll gain a solid foundation in Java programming, enabling you to effectively implement test automation solutions. With its emphasis on practicality and the expertise of the author, “Software Test Automation – Java for Testers: Learn Java Fundamentals Fast” is an invaluable resource for testers who want to enhance their automation skills using Java.

Author: Alan Richardson

Cost: 1943 INR

Publication year: 2015

Rating: 4.4

12. The Way of the Web Tester: A Beginner’s Guide to Automating Tests

It is a software testing book that aims to help readers understand three key aspects of web testing. Firstly, it teaches how to write effective automated tests for the web/UI. Secondly, it gives testing guidelines that help the readers select the right tests to focus on. Lastly, it emphasizes the importance of team communication and collaboration to maximize testing efforts.

12. The Way of the Web Tester: A Beginner’s Guide to Automating Tests

Jonathan Rasmusson, the author of this book, goes above and beyond to make the content engaging and enjoyable. Alongside the technical knowledge, you’ll find a plethora of cartoons, graphics, best practices, humorous anecdotes, and real-life stories. This unique approach creates an immersive and enjoyable reading experience.

If you want to dive into UI automation, “The Way of the Web Tester” is an invaluable resource. It offers hands-on tutorial exercises and practical guidance that can greatly benefit beginners in the field.

Author: Jonathan Rasmusson

Cost: 1973 INR

Publication year: 2016

Rating: 4.5

Conclusion 

The list mentioned above on the top 12 software testing books is a valuable resource for individuals looking to start their journey in software testing. By exploring these books, you can gain in-depth knowledge and enhance your skills in this field. Continuous learning and skill development are crucial in the rapidly evolving software industry, and these books provide an excellent foundation for growth. Don’t hesitate to dive into software testing and use these books for testing to kickstart or further advance your career as a software tester. 

FAQs – Best Software Testing Books

Q1. Are these software testing books suitable for beginners?

Yes, they offer a comprehensive introduction to software testing concepts and techniques, making them accessible for those starting their journey in the field.

Q2. Can these books help advance my career as a software tester?

Absolutely! They cover various aspects of software testing, including automation, agile methodologies, test design, and more, enabling you to develop your skills and stay updated with industry best practices.

Q3. Do these books cater to specific areas of software testing?

Yes, the recommended books cover a wide range of topics in software testing, including web testing, test automation, agile testing, and test design. 

Q4. Which is the best software testing book for manual and automation?

The best software testing book for both manual and automation is The Art of Software Testing, 3rd Edition which was published back in 1979, following to this, Software Testing, 2nd Edition (2005), Software Testing: A Craftsman’s Approach, Fourth Edition falls among the top books for software testing.

Software-Testing

Junior QA requirements

Основы, определения, виды тестирования

Качество ПО — это совокупность характеристик ПО, относящихся к его способности удовлетворять установленные и предполагаемые потребности.
Обеспечение качества (QA) — комплекс мероприятий направленный на обеспечение качества разрабатываемого продукта, на всех стадиях разработки.
Тестирование ПО (Software Testing) – процесс анализа программного средства и сопутствующей документации с целью выявления дефектов и повышения качества продукта.
Quality Control направлено на поиск дефектов в готовом продукте для того, чтобы убедиться, что продукт соответствует требованиям и готов к передаче пользователю (заказчику).
Quality Assurance направлено больше на процессы, их усовершенствование (оптимизацию) для минимизации количества багов (дефектов) в самом начале разработки продукта. Это довольно эффективно, так как анализируются все аспекты в самом начале, а не когда продукт готов и выясняется, что работать с ним не совсем удобно или можно реализовать функциональность по-другому.

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

  • Программы при их непосредственном запуске и исполнении (software).
  • Код программ без запуска и исполнения (code).
  • Прототип программного продукта (product prototype).
  • Проектная документация (project documentation):
    • Требования к продукту (product requirements).
    • Функциональные спецификации к продукту (functional specifications).
    • Документы по архитектуре (product architecture) и дизайну (product design).
    • План проекта (project plan).
    • Тестовые сценарии (test cases).
  • Сопроводительная документация:
    • Интерактивная помощь (on-line help).
    • Руководства по установке (Installation guide) и использованию (user manual).

Этапы тестирования (жизненный цикл тестирования)

  • Анализ требований. Изучаем спецификации требований, функциональные требования к системе. Отвечаем на вопросы: что нам предстоит тестировать, как много будет работы, какие есть сложности, всё ли необходимое у нас есть. Получаем данные, по которым составляем план тестирования.
  • Планирование испытаний. Определяем объемы испытаний и ресурсы, пишем расписание того, когда будем выполнять намеченные действия.
  • Проектирование тестов. Определяем: цель тестирования, специфику входных данных (классы эквивалентности…), модули и подмодули приложения, архитектуру проверок (группы чек-листов), архитектуру тестов (детализация от крупного к деталям). Пишем тесты.
  • Запуск тестов. Проверяем тесты в действии, анализируем тестовые результаты.
  • Редактирование тестов. Пересматриваем и корректируем тесты, держим тесты в актуальном состоянии, дополняем новыми тестами.
  • Системное тестирование. Проверяем всю систему (все модули нашего продукта как единую систему), получаем сведения о качестве ПО.
  • Приемочные испытания (альфа и бета тестирование).
  • Эксплуатация и сопровождение. Тестирование багов, найденных в релизном продукте, регрессионное тестирование билда после внесенных исправлений (regression testing).

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

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

Мы работаем с кодом системы?

  • НЕТ = метод «черного» ящика (black-box)
  • Частично = метод «серого» ящика (grey-box)
  • ДА = метод «белого» ящика (white-box)
По уровню (вширь)
  • Компонентное/модульное (component/unit testing). Каждая сложная программная система состоит из отдельных частей – модулей, выполняющих ту или иную функцию в составе системы. Для того, чтобы удостовериться в корректной работе системы в целом, необходимо вначале протестировать каждый модуль системы по отдельности.
  • Интеграционное (integration testing). Результатом тестирования и верификации отдельных модулей, составляющих программную систему, является заключение о том, что эти модули являются внутренне непротиворечивыми и соответствуют требованиям. Однако отдельные модули редко функционируют сами по себе, поэтому следующая задача после тестирования отдельных модулей – тестирование корректности взаимодействия нескольких модулей, объединенных в единое целое. Такое тестирование называют интеграционным. Его цель – удостовериться в корректности совместной работы компонент системы.
  • Системное (system testing). На этом этапе проводится не только функциональное тестирование, но и оценка характеристик качества системы – ее устойчивости, надежности, безопасности и производительности. На этом этапе выявляются многие проблемы внешних интерфейсов системы, связанные с неверным взаимодействием с другими системами, аппаратным обеспечением, неверным распределением памяти, отсутствием корректного освобождения ресурсов и т.п.
По уровню (вглубь)
  • Приемочное (smoke test, acceptance testing) — проверка самой важной функциональности программного продукта.
  • Тест критического пути (critical path test) – проверка функциональности, используемой типичными пользователями в повседневной деятельности.
  • Расширенный тест (extended test) – проверка всей заявленной функциональности.
По цели
  • Функциональное

    • Функциональное тестирование (functional testing)
    • Тестирование новой функциональности (new feature testing)
    • Тестирование безопасности (security testing)
  • Нефункциональное

    • Производительности (performance testing) — определить, как быстро работает система или её часть под определённой нагрузкой:
      • нагрузочное (performance & load testing) — автоматизированное тестирование, которое имитирует одновременную работу множества пользователей над приложением;
      • стрессовое ( stress testing) позволяет проверить насколько приложение (система в целом) работоспособны в условиях стресса, и также оценить способность системы к регенерации (возвращение к нормальному состоянию после прекращения стресса);
      • тестирование стабильности / надежности (stability / reliability testing) проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки;
      • тестирование объемами (volume testing) оценить производительность при увеличении объемов данных в базах данных приложения.
    • Установочное (installation testing) направлено на проверку успешной инсталляции и настройки, а также обновления и удаления ПО.
    • Удобства пользования (usability testing) — тестирование, показывающее степень удобства использования, обучаемости, понятности и привлекательности для пользователя разрабатываемого ПО в контексте определенных условий.
    • Тестирование на отказ и восстановление (failover & recovery testing) проверяет продукт с точки зрения способности противостоять и успешно восстанавливаться после сбоев, возникших в связи с ошибками ПО, отказами оборудования или проблемами связи (например, отказ сети).
    • Конфигурационное (configuration testing) — специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров …).
    • Интернационализации (internationalization testing) проверяет готовность приложения к работе с разными языковвыми интерфейсами.
    • Локализационное (localization testing) проверяет, насколько корректно продукт адаптирован к работе на другом языке.
    • Тестирование документации (document testing) – тестирование, с которого начинается почти любой проект. Призвано обнаружить ошибки в документации на ранних стадиях.
    • Тестирование совместимости (compatibility testing) — тестирование, для проверки корректной работы продукта в определенном окружении.
  • Связанное с изменениями

    • Дымовое тестирование (smoke testing) — короткий цикл тестов, чтобы убедиться, что после сборки кода (нового или исправленного) приложение стартует и выполняет основные функции.
    • Регрессионное тестирование (regression testing) — вид тестирования для подтверждения факта, что существующая ранее функциональность работает как и прежде после сделанных в приложении или окружающей среде исправлений или дополнений (починка дефекта, слияние кода, миграция на другую операционную систему, базу данных, веб сервер или сервер приложения).
    • Тестирование сборки (build verification testing) — тестирование выпущенной версии (сборки) по критериям качества для начала тестирования.
    • Проверка согласованности/исправности (sanity testing) — это узконаправленное тестирование, чтобы доказать, что конкретная функция работает согласно заявленным требованиям.

Верификация и валидация

Верификация (Verification) — это статическая практика проверки документов, дизайна, архитектуры, кода, т.д. Отвечает на вопрос “Делаем ли мы продукт правильно?”.
Валидация (validation) – это процесс оценки конечного продукта, необходимо проверить, соответствует ли программное обеспечение ожиданиям и требованиям клиента. Это динамический механизм проверки и тестирования фактического продукта. Отвечает на вопрос “Делаем ли мы правильный продукт?”.

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

  1. Тестирование показывает наличие дефектов. Тестирование может показать наличие дефектов в программе, но не доказать их отсутствие. Тем не менее, важно составлять тест-кейсы, которые будут находить как можно больше багов. Таким образом, при должном тестовом покрытии, тестирование позволяет снизить вероятность наличия дефектов в программном обеспечении. В то же время, даже если дефекты не были найдены в процессе тестирования, нельзя утверждать, что их нет.
  2. Исчерпывающее тестирование невозможно. Невозможно провести исчерпывающее тестирование, которое бы покрывало все комбинации пользовательского ввода и состояний системы, за исключениям совсем уж примитивных случаев. Вместо этого необходимо использовать анализ рисков и расстановку приоритетов, что позволит более эффективно распределять усилия по обеспечению качества ПО.
  3. Раннее тестирование. Тестирование должно начинаться как можно раньше в жизненном цикле разработки программного обеспечения, и его усилия должны быть сконцентрированы на определенных целях.
  4. Скопление дефектов. Разные модули системы могут содержать разное количество дефектов – то есть, плотность скопления дефектов в разных элементах программы может отличаться. Усилия по тестированию должны распределяться пропорционально фактической плотности дефектов. В основном, большую часть критических дефектов находят в ограниченном количестве модулей. Это проявление принципа Парето: 80% проблем содержатся в 20% модулей.
  5. Парадокс пестицида. Прогоняя одни и те же тесты вновь и вновь, Вы столкнетесь с тем, что они находят все меньше новых ошибок. Поскольку система эволюционирует, многие из ранее найденных дефектов исправляют и старые тест-кейсы больше не срабатывают. Чтобы преодолеть этот парадокс, необходимо периодически вносить изменения в используемые наборы тестов, рецензировать и корректировать их с тем, чтобы они отвечали новому состоянию системы и позволяли находить как можно большее количество дефектов.
  6. Тестирование зависит от контекста. Выбор методологии, техники и типа тестирования будет напрямую зависеть от природы самой программы. Например, программное обеспечение для медицинских нужд требует гораздо более строгой и тщательной проверки, чем, скажем, компьютерная игра. Из тех же соображений, сайт с большой посещаемостью должен пройти через серьезное тестирование производительности, чтобы показать возможность работы в условиях высокой нагрузки.
  7. Заблуждение об отсутствии ошибок. Тот факт, что тестирование не обнаружило дефектов, еще не значит, что программа готова к релизу. Нахождение и исправление дефектов будут не важны, если система окажется неудобной в использовании, и не будет удовлетворять ожиданиям и потребностям пользователя.

Жизненный цикл разработки ПО и методологии разработки

Цикл (процесс) разработки ПО (software development life cycle) – это путь от идеи до поддержки готового продукта. Чем более отлажены каждая из стадий цикла и координация между ними, тем эффективнее работает компания, тем выше качество и тем счастливее пользователи/клиенты.

Жизненный цикл ПО:

  • Формирование и анализ требований
  • Проектирование
  • Реализация
  • Тестирование продукта
  • Внедрение
  • Эксплуатация и сопровождение

Когда начинать тестирование: на этапе формирования требований.

Когда заканчивать тестирование:

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

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

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

waterfall

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

  • Снижение воздействия серьёзных рисков на ранних стадиях проекта, что ведет к минимизации затрат на их устранение.
  • Организация эффективной обратной связи команды с потребителем/заказчиками и создание продукта, реально отвечающего их потребностям.
  • Акцент усилий на наиболее важных и критичных направлениях проекта.
  • Непрерывное итеративное тестирование.
  • Раннее обнаружение конфликтов и потенциальных багов.
  • Более равномерная загрузка участников проекта.
  • Эффективное использование накопленного опыта.
  • Реальная оценка текущего состояния проекта.
  • Затраты распределяются по всему проекту, а не группируются в конце.

Scrum
Scrum (от англ. scrum «схватка») — методология управления проектами, активно применяющаяся для гибкой разработки ПО. Scrum чётко делает акцент на качественном контроле процесса
разработки.
Скрам (Scrum) — это набор принципов, на которых строится процесс разработки, позволяющий в жёстко фиксированные и небольшие по времени итерации, называемые спринтами (sprints), предоставлять конечному пользователю работающее ПО с новыми возможностями, для которых определён наибольший приоритет. Новые функции ПО, которые должны быть реализованы в очередном спринте определяются в начале спринта на этапе планирования и не должны изменяться на всём его протяжении. При этом строго фиксированная небольшая длительность спринта придаёт процессу разработки предсказуемость и гибкость.
Спринт (Sprint) — итерация в скраме, в ходе которой создаётся функциональный прирост ПО. Жёстко фиксирован по времени. Длительность одного спринта от 2 до 4 недель.
Резерв Проекта (Product backlog) — это список требований к функциональности, упорядоченный по их степени важности, подлежащих реализации. Элементы этого списка называются «пожеланиями пользователя» (user story) или элементами резерва (backlog items).
Резерв спринта (Sprint backlog) — содержит функциональность, выбранную владельцем проекта из резерва проекта. Все функции разбиты по задачам, каждая из которых оценивается
скрам-командой. Каждый день команда оценивает объем работы, который нужно проделать для завершения спринта.
Scrum. Встречи:

  • Планирование спринта (Sprint Planning Meeting) — в начале каждого спринта из резерва проекта выбираются задачи, обязательства по выполнению которых за спринт принимает на себя команда. На основе выбранных задач создается резерв спринта. Каждая задача оценивается в идеальных человеко-часах. Решение задачи не должно занимать более 12 часов или одного дня. При необходимости задача разбивается на подзадачи. Обсуждается и определяется, каким образом будет реализован этот объём работ.
  • Ежедневное совещание (Daily Scrum meeting): в течение совещания каждый член команды отвечает на 3 вопроса: Что сделано с момента предыдущего ежедневного совещания? Что будет сделано с момента текущего совещания до следующего? Какие проблемы мешают достижению целей спринта?
  • Обзор итогов спринта (Sprint review meeting) проводится после завершения спринта. Команда демонстрирует инкремент функциональности продукта всем заинтересованным лицам (demo).
  • Ретроспективное совещание (Retrospective meeting) проводится после завершения спринта. Члены команды высказывают своё мнение о прошедшем спринте и отвечают на два основных вопроса: Что было сделано хорошо в прошедшем спринте? Что надо улучшить в следующем спринте?

Канбан
В отличие от Scrum, в команде канбан отсутствуют роли владельца продукта и модератора, а процесс разработки делится не на универсальные спринты, а на стадии выполнения задач («Планируется», «Разрабатывается», «Тестируется», «Завершено»). Жизненный цикл задачи отображается на канбан-доске, физической или электронной. Такая визуализация делает рабочий процесс открытым и понятным для всех участников, что особенно важно в Agile, когда у команды нет одного формального руководителя. Канбан, как и другие практики бережливого производства, пришедшие из Японии, направлен на достижение баланса и выравнивание нагрузки исполнителей. Эффективность работы оценивается по среднему времени жизни задачи, от начальной до конечной стадии. Если задача прошла весь путь быстро, то команда проекта работала продуктивно и слаженно. Иначе – необходимо решать проблему: искать, где и почему возникли задержки и чью работу надо оптимизировать.

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

  1. Эквивалентное разбиение. Метод эквивалентного разбиения позволяет минимизировать число тестов, не создавая сценарий для каждого возможного значения, а выбрав только одно значение из целого класса и приняв за аксиому, что для всех значений в данной группе результат будет аналогичным. Например, мы тестируем функциональность приложения, позволяющего покупать авиа- и железнодорожные билеты онлайн. Стоимость билета будет зависеть от возраста пассажира, так как дети, студенты и пенсионеры относятся ко льготным категориям. У нас есть четыре возрастных группы: младше 15 лет, от 15 до 25 лет, старше 25 и младше 60 лет и люди старше 60. При этом, в поле для ввода возраста помещается всего два символа, поэтому указать возраст более 99 лет технически невозможно. QA-специалисту не нужно писать 99 тестов для каждого возраста, хватит пяти: по одному для каждой возрастной группы (скажем, 10, 18, 35 и 75 лет) и один для случая, если возраст человека превышает 99 лет. Да, последний тест на практике невыполним (поскольку в поле возраста невозможно ввести более двух знаков), и все же не следует забывать об этой проверке.
  2. Граничные значения. Техника граничных значений основана на предположении, что большинство ошибок может возникнуть на границах эквивалентных классов. Она тесно связана с вышеописанной техникой эквивалентного разбиения, из-за чего часто используется с ней в паре. Тогда для примера из предыдущего пункта границами будут являться значения 0, 15, 25, 60 и 99. Граничными значениями будут 0, 1, 14, 15, 16, 24, 25, 26, 59, 60, 61, 98, 99, 100.
  3. Таблица принятия решений. Другое название метода – матрица принятия решений. Эта техника подходит для более сложных систем, например – двухфакторной аутентификации. Предположим, чтобы войти в систему, пользователю нужно ввести сначала логин и пароль, а затем еще подтвердить свою личность присланным в смс кодом. Какие возможны сценарии:
  • Правильный логин и правильный пароль.
  • Правильный логин, неправильный пароль.
  • Неправильный логин, правильный пароль.
  • Неправильный логин, неправильный пароль.
    Первый из этих сценариев сопровождается либо правильным, либо неправильным вводом смс-кода, итого у нас получается 5 тестов. При этом только один из сценариев приведет к положительному результату (пользователь успешно авторизуется), а остальные закончатся неудачей. Однако, может быть так, что система выдает разные сообщения в зависимости от того, на каком этапе была допущена ошибка, скажем: invalid login, invalid password. Соответственно, групп потребуется больше, а таблица станет обширнее.

matrix

  1. Попарное тестирование. Суть этого метода, также известного как pairwise testing, в том, что каждое значение каждого проверяемого параметра должно быть протестировано на взаимодействие с каждым значением всех остальных параметров. После составления такой матрицы мы убираем тесты, которые дублируют друг друга, оставляя максимальное покрытие при минимальном необходимом наборе сценариев. Попарное тестирование позволяет обнаружить максимум ошибок без избыточных проверок.
  2. Причина и следствие. Простая проверка базовых действий и их результата. Например, если нажать крестик в правом верхнем углу окна (причина), оно закроется (следствие), и т.д. Этот метод позволяет проверить все возможности системы, а также обнаружить баги и улучшить техническую документацию продукта.
  3. Предугадывание ошибок. Используя свои знания о системе, QA-специалист может «предугадать», при каких входных условиях есть риск ошибок. Для этого важно иметь опыт, хорошо знать продукт и уметь выстроить коммуникации с коллегами.

Тестирование требований

Требования (requirements) — описание того, какие функции и с соблюдением каких условий должно выполнять приложение в процессе решения полезной для пользователя задачи.
Требования должны быть независимы от внутренней архитектуры приложения, т.е. должны описывать то, что необходимо заказчику без деталей реализации (принцип «what, not how»).
Почему же так важны требования? На каждом следующем шаге процесса разработки продукта стоимость обнаружения и устранения дефекта повышается в разы. Т.е. обнаружение максимального числа ошибок в требованиях поможет избежать лишней траты времени и средств в дальнейшем.
Уровни требований:

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

Типы требований:

  • функциональные. Определяют «что система должна делать»;
  • нефункциональные. Определяют «как система это должна делать?». Нефункциональные требования включают:
  • бизнес-правила (business rules) — описывают особенности принятых в предметной области (и/или непосредственно у заказчика) процессов, ограничений и правил;
  • атрибуты качества – это описания ключевых для проекта показателей качества (важных свойств продукта — производительность, масштабируемость, восстанавливаемость);
  • требования к интерфейсу описывают особенности взаимодействия системы с другими системами, операционной средой и пользователем;
  • ограничения представляют собой факторы, ограничивающие выбор способов и средств (в том числе инструментов) реализации продукта.
  • другие требования:
  • потребности (needs) — отражают проблемы бизнеса, которые должны быть соотнесены с использованием или приобретением системы
  • системные требования (system requirements) — описывают высокоуровневые требования к ПО, содержащему несколько взаимосвязанных подсистем и приложений. При этом, система может быть как целиком программной, так и состоять из программной и аппаратной частей (подключаемые модули).
  • требования с количественной оценкой (quantifiable requirements) — требования, поддающиеся количественному определению/измерению, например, система должна обеспечить пропускную способность «столько-то запросов в секунду».

Источники требований:

  • Соображения, высказанные представителем заказчика
  • Артефакты, описывающие предметную область
  • «Лучшие практики» («best practices»)
  • Конкурирующие программные продукты

Важность тестирования требований состоит в том, что хорошие требования позволяют:

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

Хорошее требование должно быть:

  • Завершённым (complete). Все важные аспекты должны быть включены. Ничто не должно быть оставлено «для будущего определения» (TBD — to be defined).
  • Непротиворечивым (consistent). Требование не должно содержать противоречий как внутри себя, так и с другими требованиями.
  • Корректным (correct) Требование должно чётко указывать на то, что должно выполнять приложение. Недопустимо при написании требования предполагать, что что-то окажется очевидным. Каждый человек понимает это «очевидное» по-своему.
  • Недвусмысленным (unambiguous). Требование не должно допускать разночтений.
  • Проверяемым (verifiable). Требование должно быть сформулировано так, чтобы существовали способы однозначной проверки — выполнено требование или нет.
  • Модифицируемыми (modifiable) Структура и стиль набора требований должны быть такими, чтобы набор требований можно было легко модифицировать. Должна отсутствовать избыточность. Должно быть построено корректное содержание всего документа.
  • Прослеживаемыми (traceable) У каждого требования должен быть уникальный идентификатор, по которому на это требование можно сослаться.
  • Проранжированными по важности, стабильности и срочности (ranked for importance, stability and priority) Для каждого требования должен быть указан уровень его важности (насколько оно важно для заказчика), стабильности (насколько высока вероятность, что это требование ещё будет изменено в процессе обсуждения деталей проекта) и срочности (как быстро требование должно быть реализовано).

Техники тестирования требований:

  1. Взаимный просмотр:
  • беглый просмотр — автор показывает свою работу коллегам, они в свою очередь дают свои рекомендации, высказывают свои вопросы и замечания;
  • технический просмотр — выполняется группой специалистов;
  • формальная инспекция — привлекается большое количество специалистов, представляет собой структурированный, систематизированный и документированный подход. Минус такого варианта — тратится много времени.
  1. Вопросы — если возникают вопросы, то можно спрашивать у представителей заказчика, более опытных коллег.
  2. Тест-кейсы и чек-листы — хорошее требование должно быть проверяемым, чтобы это определить можно использовать чек-листы или полноценные тест-кейсы. Если можно быстро придумать несколько пунктов чек-листа — это уже хороший знак.
  3. Исследование поведения системы — необходимо мысленно смоделировать процесс работы пользователя с системой, созданной по тестируемым требованиям, после этого определить неоднозначные варианты определения системы.
  4. Рисунки — графическое представление дает наглядное представление приложения, на рисунке проще увидеть, что какие-то элементы не стыкуются, где-то чего-то не хватает и т.д.
  5. Прототипирование — сделав наброски пользовательского интерфейса, легко оценить применить применение тех или иных пользовательских решений.

Тест план

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

  • процесс тестирования продукта в конкретном проекте;
  • что, когда, кем и как будет тестироваться;
  • компоненты тестирования;
  • команду тестировщиков;
  • стратегию и методы тестирования;
  • критерии качества и риски тестирования;
  • график работ.

Секции тестового плана:

  1. Перечень работ. Включается перечень функциональных областей приложений, которые будут подвергаться тестированию. Здесь же может быть перечень компонентов или функциональности, которые не будут тестироваться по тем или иным причинам.
  2. Критерии качества и оценка качества процесса. Здесь отражается перечень критериев качества, по которым оценивают уровень качества продукта и возможность передать его
    заказчику. Критерии качества относятся к качеству продукта. В тестовых планах могут быть зафиксированы и критерии качества самого процесса (тестирования и разработки). Чтобы в случае чего была возможность оценить, насколько грамотно был построен процесс тестирования, были ли проблемы, и, если были, разобраться, почему.
  3. Риски. Кроме описания самого риска, нужно указать вероятность его возникновения и степень влияния на проект. Производная этих двух величин даёт показатель, который может рассматриваться как степень серьёзности риска.
  4. Документация и Deliverables. В этой секции перечисляется перечень артефактов с шаблонами и результатами: тест план, тестовые сценарии, тестовые автоматические скрипты, дефект-репорты, отчеты о результатах тестирования, также указывается, кто будет их высылать, как часто, каким способом, кому и т.д.
  5. Тестовая стратегия. Самый большой и один из самых важных разделов плана. Здесь расписывается стратегия тестирования, методы и типы тестов, каким образом будет выполняться тестирование, почему именно так и т. д.
  6. Ресурсы. Человеческие ресурсы: перечень ключевых людей на проекте (менеджер проекта, представители заказчика, лидер команды разработчиков и т.д.), список тестировщиков с их ролями на проекте, а также с зонами ответственности. Аппаратные ресурсы (hardware): перечень тестовых серверов и рабочих станций, инструментов, используемых для тестирования или для вспомогательных работ, описание тестового окружения. Программные ресурсы (software): операционные системы, СУБД, серверы приложений, веб-серверы.
  7. Метрики. Метрика – это числовая характеристика, позволяющая оценить аспект программного продукта или процесса.
  8. Расписание. В этой секции описывается график тестирования в согласовании с графиком выпуска билдов и планом проекта, который разрабатывает менеджер проекта. Сюда же включаются основные даты (milestones): например, даты окончания промежуточных фаз работы. График тестирования нужен для того, чтобы чётко понимать, когда и что следует делать, ничего не пропустить, ничего не забыть и т.д. Он же упрощает контроль за ходом работ по тестированию, а также позволяет оценить текущую ситуацию, определить, всё ли выполнено из того, что было запланировано.
  9. Ключевые точки и люди.

Критерии хорошего тест плана:

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

Разработка тестов (чек-листы, тест-кейсы)

Чек-лист (checklist) — cписок проверок без описания шагов. Упрощенная форма тест-кейса.
Тест кейс – совокупность шагов, условий и параметров созданных для проверки работоспособности функции или ее части.

Структура тест-кейса:

  • Номер (number) или идентификатор (id)
  • Связанное с тестом требование (related requirement)
  • Модуль (feature)
  • Имя (name)
  • Предусловия (preconditions)
  • Шаги (steps)
  • Ожидаемый результат (expected result)
  • Статус (passed, failed, blocked)
  • Приоритет (priority: smoke, critical…)
  • Cвязанный с тестом баг (если есть) (related bug)
  • Постусловия (postconditions)

Результатом документирования тестов является тест-кейс. Набор тест-кейсов – Test Suite. Test Suite объединяет тесты по какому-то принципу: модулю, функционалу, виду тестирования.

Тест-кейсы могут быть:

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

Зачем нужны тест-кейсы:

  • Тест-кейсы – хороший способ хранения проектной информации.
  • Написание тест-кейсов – один из способов протестировать проектную документацию ещё до выхода первого билда.
  • Наличие тест-кейсов ускоряет регрессионное тестирование.
  • Тест-кейсы – прекрасный способ быстро ввести в курс дела новичка или сотрудника, только что подключившегося к проекту.
  • Имея тест-кейсы, мы можем в любой момент «вспомнить», что мы делали месяц, полгода, год назад.
  • Тест-кейсы позволяют легко отслеживать прогресс (X% тестов выполнено, Y% тестов прошло (завалилось), Z% требований покрыто тестами).

SQL

SQL — structured query language — «язык структурированных запросов», стандартный язык доступа и управления базами данных (БД).
Структурированный язык запросов — это стандартный язык доступа к БД, таким как SQL Server, Oracle, MySQL, Sybase и Access.
Программная инструкция для получения данных из БД, называется запросом к базе данных.

Основные MySQL запросы:
SELECT — извлекает данные из таблицы БД;
UPDATE — обновляет данные в таблице БД;
DELETE — уничтожает данные в таблице БД;
INSERT INTO- вставляет новые данные в таблицу БД.

Первичный ключ или PRIMARY KEY предназначен для однозначной идентификации каждой записи в таблице и является строго уникальным (UNIQUE): две записи таблицы не могут иметь одинаковые значения первичного ключа. Нулевые значения (NULL) в PRIMARY KEY не допускаются. Если в качестве PRIMARY KEY используется несколько полей, их называют составным ключом.

Пример:

CREATE TABLE USERS (
id INT NOT NULL,
name VARCHAR (20) NOT NULL,
PRIMARY KEY (id)
);

Здесь в качестве первичного ключа используется поле id.

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

Пример:

CREATE TABLE order (
order_id INT NOT NULL,
user_id INT,
PRIMARY KEY (order_id),
FOREIGN KEY (user_id) REFERENCES users(id)
);

В данном случае внешний ключ, привязанный к полю user_id в таблице order, ссылается на первичный ключ id в таблице users, и именно по этим полям происходит связывание двух таблиц.

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

UNIQUE — гарантирует уникальность значений в столбце;
NOT NULL — значение не может быть NULL;
INDEX — создаёт индексы в таблице для быстрого поиска/запросов;
CHECK — значения столбца должны соответствовать заданным условиям;
DEFAULT — предоставляет столбцу значения по умолчанию.

Ключевое слово ORDER BY используется для сортировки данных в порядке возрастания (ASC) или убывания (DESC).

Пример:

SELECT * FROM user ORDER BY name DESC;

Чтобы объединить две таблицы в одну, следует использовать оператор JOIN. Соединение таблиц может быть внутренним (INNER) или внешним (OUTER), причём внешнее соединение может быть левым (LEFT), правым (RIGHT) или полным (FULL).

INNER JOIN — получение записей с одинаковыми значениями в обеих таблицах, т.е. получение пересечения таблиц.
FULL OUTER JOIN — объединяет записи из обеих таблиц (если условие объединения равно true) и дополняет их всеми записями из обеих таблиц, которые не имеют совпадений. Для записей, которые не имеют совпадений из другой таблицы, недостающее поле будет иметь значение NULL.
LEFT JOIN — возвращает все записи, удовлетворяющие условию объединения, плюс все оставшиеся записи из внешней (левой) таблицы, которые не удовлетворяют условию объединения.
RIGHT JOIN — работает точно так же, как и левое объединение, только в качестве внешней таблицы будет использоваться правая.

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

Пример:

SELECT column(s) FROM first_table
UNION
SELECT column(s) FROM second_table;

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

Примеры:

SELECT * FROM user WHERE name LIKE '%test%';

Данный запрос позволяет найти данные всех пользователей, имена которых содержат в себе «test».

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

Пример:

SELECT very_long_column_name AS alias_name
FROM table;

Тестирование веб-приложений

Web-приложение — это клиент-серверное приложение, в котором клиентом выступает браузер, а сервером — web-сервер, что уже является по сути двумя программами, которые необходимо тестировать как отдельно, так и в связке. Кроме веб-сервера, приложение может использовать базы данных, другие приложения и удаленные веб-сервисы.

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

Веб-сервер — это ПО, которое предоставляет веб-страницы в ответ на запросы веб-браузеров. Обычно запрос страницы создается при щелчке ссылки на веб-странице, выборе закладки в браузере либо вводе URL-адреса в адресной строке браузера.

client-server

«Клиент — сервер» (англ. client–server) — архитектура, в которой сетевая нагрузка распределены между поставщиками услуг, называемыми серверами, и заказчиками услуг, называемыми клиентами.
Фактически клиент и сервер — это программное обеспечение. Обычно эти программы расположены на разных вычислительных машинах и взаимодействуют между собой через вычислительную сеть посредством сетевых протоколов, но они могут быть расположены также и на одной машине.

HTTP (англ. HyperText Transfer Protocol – «протокол передачи гипертекста») – протокол прикладного уровня передачи данных. Изначально – в виде гипертекстовых документов в формате HTML, сегодня используется для передачи произвольных данных. Основой HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

Структура HTTP-запроса:

  1. строка запроса (Request Line);
  2. заголовки (Message Headers);
    Пустая строка (разделитель)
  3. тело сообщения (Entity Body) – необязательный параметр.
    Строка запроса — указывает метод передачи, URL-адрес, к которому нужно обратиться и версию протокола HTTP.
    Заголовки — описывают тело сообщений, передают различные параметры и др. сведения и информацию. Тело сообщения — это сами данные, которые передаются в запросе. Тело сообщения – это необязательный параметр и может отсутствовать.

Ответ сервера:
HTTP/1.1 <код ответа> <сообщение><\n>
<заголовок>: <значение><\n>
<заголовок>: <значение><\n>

<заголовок>: <значение><\n>
<\n>
<тело документа>

Коды ответов сервера:
1хх Информационные сведения
2хх Подтверждение и принятие действия или команды
3хх Redirect или перенаправления
4хх Ошибка со стороны клиента
5хх Неполадки и сообщения со стороны сервера

Основные запросы:

  1. GET — запрашивает представление ресурса. Запросы с использованием этого метода могут только извлекать данные. Не имеет тела.
  2. POST — используется для отправки сущностей к определённому ресурсу. Часто вызывает изменение состояния или какие-то побочные эффекты на сервере. Имеет тело.
  3. PUT — заменяет все текущие представления ресурса данными запроса.
  4. DELETE — удаляет указанный ресурс.

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

JSON (англ. JavaScript Object Notation) — простой формат обмена данными, основанный на языке программирования JavaScript. Использует человекочитаемый текст для передачи объектов данных.

Синтаксические правила JSON:

  • Данные указываются в парах имя / значение, разделяемые двоеточием «firstName»:«Lev»
  • Данные разделяются запятыми «firstName»:«Anna», «lastName»:«Karenina»
  • Фигурные скобки удерживают объекты {«firstName»:«Lev»,«lastName»:«Tolstoy»},
  • Квадратные скобки содержат массивы

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

Синтаксис XML:

  • Весь XML документ должен иметь корневой элемент.
  • Все теги должны быть закрыты (либо самозакрывающийся тег).
  • Все теги должны быть правильно вложены.
  • Имена тегов чувствительны к регистру.
  • Имена тегов не могут содержать пробелы.
  • Значения атрибута должны появляться в кавычках («»).
  • Атрибуты не могут иметь вложения (в отличие от тегов).
  • Пробел сохраняется.

Поиск и документирование дефектов

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

Статусы бага:

  1. Новый (New) или Открыт (Open). Тестировщик находит дефект и заносит его в систему управления дефектами. С этого момента баг начинает свою официальную жизнь и о его существовании знают необходимые люди.
  2. Назначен (assigned). Далее разработчик рассматривает дефект и назначает его исправление кому-то из команды разработчиков.
  3. Исправлен (fixed). Разработчик, которому было назначено исправление дефекта, исправляет его и сообщает о том, что задание выполнено.
  4. Проверен (verified). Тестировщик, который обнаружил ошибку проверяет на новом билде (в котором исправление данной ошибки заявлено), исправлен ли дефект на самом деле. И только в том случае, если ошибка не проявится на новом билде, тестировщик меняет статус бага на Verified.
  5. Открыт заново (reopened). Если баг проявляется на новом билде, тестировщик снова открывает этот дефект. Баг приобретает статус Reopened.
  6. Не могу воспроизвести (can not reproduce). Если в описании бага нет всей необходимой информации, программист не сможет его воспроизвести, чтобы починить.
  7. Не баг (not a bug). Баг может быть отклонён. Во-первых, потому, что для заказчика какие-то ошибки — не ошибки. Во-вторых, это может случиться по вине тестировщика из-за плохого знания продукта, требований (дефекта на самом деле нет).
  8. Не чинить (will not fix). Формально это баг, но чинить его не будут, не могут или не хотят.
  9. Дублирован (duplicate). Если уже существует открытый баг, который направлен на выявление той же самой ошибки.

Баг/Дефект Репорт (Bug Report) — это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и
ожидаемого результата.

Атрибуты баг репорта:

  1. Идентификатор (id);
  2. Краткое описание (summary). Хорошее краткое описание должно давать ответы на три вопроса: Что? Где? При каких условиях?
  3. Подробное описание (description);
  4. Шаги воспроизведения (steps to reproduce, STR) — точный путь, чтобы воспроизвести дефект;
  5. Актуальный результат (Actual Result);
  6. Ожидаемый результат (Expected Result);
  7. Важность (severity) — показывает насколько ошибка затрагивает значимый функционал приложения;
  8. Срочность (priority) — показывает, как быстро необходимо исправить ошибку.

Дополнительные атрибуты: возможность «обойти баг» (workaround), дополнительная информация (additional information), воспроизводимость (reproducible), приложения (attachments).

Test result report

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

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

Структура отчёта:
• Команда тестировщиков: перечисляются все задействованные в процессе тестирования сотрудники с указанием занимаемой должности и роли на проекте в подотчётный период.
• Описание процесса тестирования (testing process descripion). Даётся краткое описание того, как происходило тестирование: какие использовались методы, техники, инструментальные средства и т.п.
• Краткое описание (summary). Краткое описание того, какие билды были протестированы, есть ли в качестве приложения прогресс или регресс, есть ли какие-либо проблемы, требующие внимания руководства.
• Расписание (tesing timetable). Детализированное описание того, какая работа и на протяжении какого времени выполнялась каждым тестировщиком.
• Рекомендации (recomendaions) — подчеркнуть те важные моменты, на которые следует обратить внимание руководству или лидерам проектных команд. Здесь также, возможно, будет дана рекомендация на передачу проекта заказчику («передачу в продакшн»).
• Статистика по ошибкам (bugs statistics). Приводится сводная таблица, содержащая информацию об ошибках, с которыми команде тестировщиков приходилось иметь дело в подотчётный период.
• Список новых ошибок (new bugs found). Приводится список ошибок, обнаруженных командой тестировщиков за отчётный период.
• Статистика по всем ошибкам (all bugs statistics). Сводная таблица с информацией об ошибках за всё время работы над проектом.

Отчёт о результатах тестирования в основном нужен:
• Менеджеру проекта
• Лидеру команды разработчиков
• Лидеру команды тестировщиков
• Заказчику

Тестирование веб-сервисов и API

Веб-сервис — это идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.
Веб-сервисы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (SOAP, XML-RPC, REST и т. д.).
Веб-приложение — это то, что пользователь может увидеть глазами и с чем может взаимодействовать используя графический интерфейс.
Веб-сервис — это программа, работающая без участия пользователя, как правило без графического интерфейса (gui может быть разработан для упрощения тестирования) и пользователь не может взаимодействовать с ней привычным способом, нажимая на кнопки и ссылки. Разрабатываются для автоматической обработки и распределения информации.
Структура веб-приложения:

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

Основные виды веб-сервисов:
SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. Первоначально SOAP предназначался в основном для реализации удаленного вызова процедур (RPC — Remote Procedure Call). Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур.
REST (сокр. от англ. Representational State Transfer — «передача состояния представления») — архитектурный стиль взаимодействия компонентов распределенного приложения в сети. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределенной гипермедиа-системы. В определенных случаях (интернет-магазины, поисковые системы, прочие системы, основанные на данных) это приводит к повышению производительности и упрощению архитектуры. Компоненты в REST взаимодействуют наподобие взаимодействия клиентов и серверов во Всемирной паутине. REST является альтернативой RPC.

Различия SOAP и REST сервисов:

  • SOAP – это целое семейство протоколов и стандартов, откуда напрямую вытекает, что это более тяжеловесный и сложный вариант с точки зрения машинной обработки. Поэтому REST
    работает быстрее.
  • REST поддерживает различные форматы: text, JSON, XML; SOAP — только XML.
  • REST работает только по HTTP(S) используя всего 4 HTTP метода (Get, Post, Put, Delete), а SOAP может работать с различными протоколами.
  • REST может работать с ресурсами. Каждый URL это представление какого-либо ресурса. SOAP работает с операциями, которые реализуют какую-либо бизнес логику с помощью нескольких
    интерфейсов.

Тестирование web-сервисов:

  • Postman. Расширение для Google Chrome, которое в бесплатной версии позволяет посылать запросы, записывать их, показывать историю. Удобно и понятно.
  • jMeter. Инструмент, получивший известность, прежде всего, благодаря нагрузочному тестированию, которое можно проводить с его помощью. Но это лишь одно из множества его
    применений.
  • Fiddler. Позволяет просматривать посылаемые HTTP запросы. И много чего еще.
  • SoapUI. Мощный продукт для разработки и тестирования веб приложений.
  • Runscope. Cервис для автоматизированного тестирования API. С его помощью можно посылать запросы к серверу и проверять полученные ответы по заранее установленным критериям.
  • Advanced REST Client. Еще одно расширение для Chrome для работы с API (конструкция запросов, их показ в удобном виде и другое).

Тестирование мобильных приложений

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

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

Виды мобильных приложений:

  • Нативные: нативный = родной. Разрабатываются специально под конкретную платформу (отдельно под iOS , Android, Windows Phone). Используются только «родные» языки программирования для написания таких приложений (Swift, Objective-C — iOS, Java — Android, C# for WP). Платформозависимый UX и UI. Бережное расходование ресурсов телефона (батарея, сеть..). Можно полностью зашифровать и скрыть реализацию исходного кода (proguard).
  • Веб (web site и progressive): по сути, сайт, оптимизированный под смартфон. GUI создается при помощи стандартных веб-технологий. Кроссплатформенные— могут работать на всех устройствах, без дополнительной адаптации. Для установки не нужен магазин. Очень ограниченно могут использовать ПО смартфона (камера, гироскоп…).
  • Гибридные. Почти полная функциональность нативного приложения на НЕзависимой платформе. Кроссплатформенность. Почти полное использование ПО смартфона (есть ограничения). Разработка дешевле и быстрее, чем у нативных. Не бережное использование ресурсов телефона. Нативное поведение и UI нужно прописывать самому отдельно и самостоятельно. Нельзя полностью скрыть исходный код.

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

  1. Внешние прерывания:
  • входящие и исходящие SMS и MMS
  • входящие и исходящие звонки
  • изъятие аккумулятора
  • отключение и подключение usb-провода
  • отключение и подключение сети
  • переход из режима WiFi на 3G и обратно
  • отключение и подключение SD-карты
  • включение и выключение проигрывателя
  • зарядка устройства
  • push-уведомления сторонних приложений и их открытие
  • засыпание устройства
  1. Ресурсы телефона:
  • как ведет себя приложение при малом количестве места на устройстве (недостаток места для установки или работы приложения)
  • при низком заряде аккумулятора
  • установка на карту SD
  • очистка данных приложения при удалении его с устройства
  • с включенным/выключенным GPS
  • поддержка необходимых медиа-файлов данной моделью и ОС
  1. Обратная связь с пользователем:
  • сообщения при загрузке контента / прогресс-бар
  • сообщения при ошибке доступа к сети
  • наличие сообщений при попытке удалить важную информацию
  • наличие экрана / сообщения при окончании процесса / игры
  • наличие и синхронность звуковых и вибрационных уведомлений с уведомлениями на экране
  • версии ОС: приложение не должно устанавливаться на неподдерживаемые устройства; обязательная проверка на всех возможных из поддерживаемых девайсов.
  1. Остальное:
  • проверка адекватного обновления (сохраняются все данные пользователя)
  • датчик поворота экрана
  • выход в фон
  • переходы в социальные сети
  • проверка работы одного приложения с несколькими пользователями одновременно (соц. сети) в оффлайн/онлайн режиме
  • все элементы должны быть такого размера, чтобы пользователь мог однозначно попасть по ним

Middle QA

Понравилась статья? Поделить с друзьями:
  • Mitsubishi space runner руководство по ремонту
  • Аугментин 400 суспензия дозировка для детей цена инструкция по применению
  • Руководства по белкам
  • Motorola радиотелефон dect motorola c1001lb инструкция на русском
  • Путь аналитика практическое руководство it специалиста читать онлайн