Тестирование программного обеспечения — основы

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

Содержание

  1. Что такое тестирование ПО
  2. На чем базируется тестирование
  3. Что случится, если не тестировать ПО
  4. Преимущества тестирования
  5. Недостатки тестирования
  6. Типы и уровни тестирования
  7. Автоматизированное и ручное тестирование
  8. Когда и кто тестирует ПО
  9. Заключение

Что такое тестирование ПО

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

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

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

Тестирование - стадии жизненного цикла разработки

Зачем нужно тестирование

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

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

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

На чем базируется тестирование ПО

В основе тестирования программного обеспечения лежит ряд ключевых принципов, которым подчиняется весь процесс:

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

Чего можно достичь с помощью тестирования

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

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

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

Что случится, если не тестировать ПО

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

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

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

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

Тестирование - преимущества

Недостатки тестирования

Тестирование - недостатки

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

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

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

  • Функциональное тестирование. Проверяет, что все основные функции программы работают так, как нужно. Для приложения-планировщика мы протестируем, что пользователи могут добавлять, изменять и удалять задачи.
  • Тестирование производительности. Измеряет, насколько хорошо работает ПО в разных условиях. Например, как поведет себя планировщик, если в него одновременно добавят сотни задач. Будет ли он тормозить? Отключаться?
  • Тестирование безопасности. Гарантирует безопасность и отсутствие уязвимостей в приложении. Эффективно ли приложение защищает пользовательские данные? Может ли оно противостоять попыткам взлома?
  • Юзабилити-тестирование. Оценивает пользовательский опыт. Легко ли ориентироваться в приложении? Будет ли оно интуитивно понятным для пользователя?

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

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

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

Остается еще одно важное решение при тестировании, потому что нужно выбрать: ручное, автоматизированное, или оба сразу

Ручное тестирование:

При ручном тестировании тестировщики (люди) выявляют проблемы в процессе работы в приложении:

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

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

Автоматизированное тестирование:

В автоматизированном тестировании тест-кейсы выполняются автоматически через скрипты и инструменты. Идеально для:

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

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

Когда и кто тестирует ПО

Бытует ошибочное мнение о том, что программное обеспечение тестируется только в конце разработки. Однако тестирование – это непрерывный процесс, который следует внедрять на каждом этапе жизненного цикла разработки ПО (SDLC – от англ. Stage of Software Development Lifecycle). Давайте разберемся, когда проводится тестирование, и кто за него отвечает.

Стадии цикла разработки

Когда проводится тестирование ПО

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

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

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

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

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

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

Кто тестирует ПО

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

1. Разработчики:

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

2. QA-тестировщики (обеспечение качества):

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

3. Автоматизаторы тестирования (инженеры по автоматизированному тестированию):

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

4. Конечные пользователи или бизнес-пользователи (UAT):

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

5. Эксперты по безопасности (тестирование безопасности):

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

6. Тестировщики производительности:

  • Нагрузочное и стресс-тестирование. Эти тестировщики анализируют, насколько хорошо программное обеспечение работает в разных условиях (высокая нагрузка со стороны пользователей, ограниченные ресурсы системы и т.д.).
  • Пример с планировщиком: тестировщик проверит, будет ли тормозить или отключаться программа, если сымитировать одновременный доступ сотен или тысяч пользователей.

Когда лучше проводить разные виды тестирования

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

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

Заключение

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

Перевод статьи «What Are The Fundamentals of Software Testing?».

🔥 Какой была ваша первая зарплата в QA и как вы искали первую работу? 

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Читать в телеграм

1 комментарий к “Тестирование программного обеспечения — основы”

  1. Пингбэк: Большой учебник по тестированию

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *