Найти в Дзене

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-2

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

-3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-5

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

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

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?».