Что значит тестирование программного обеспечения

Содержание
  1. Вводная статья по тестированию: F.A.Q. новичка
  2. Что такое тестирование программного обеспечения (ПО)?
  3. Какие есть виды тестирования?
  4. Тестирование можно классифицировать…
  5. Можно ли выделить наиболее востребованные виды тестирования?
  6. Есть ли какие-то базовые принципы тестирования?
  7. Как понять, когда нужно начинать тестирование?
  8. Что такое баги?
  9. Какие инструменты инженер по тестированию обычно использует в своей работе?
  10. Как можно оценить качество ПО?
  11. Что такое тест-план и что в нем должно быть написано?
  12. Что такое тест-дизайн и зачем он нужен?
  13. Что является результатом работы инженера по тестированию?
  14. Есть ли какие-то книги, которые могут быть полезны новичку в тестировании?
  15. Что такое тестирование программ и зачем оно нужно
  16. Почему тестирование — это так важно
  17. Какие виды тестирования существуют
  18. Что тестируют на разных этапах разработки
  19. Как обычно проходит тестирование
  20. Кто всё это делает: немного о профессии

Вводная статья по тестированию: F.A.Q. новичка

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

Благодарим за помощь в подготовке материала «Аплана. Корпоративный университет» и в частности его преподавателей: Александра Бегларяна («Базовый курс тестирования и тест-дизайна») и Екатерину Дрюпину (курс «Ручное функциональное тестирование»).

Что такое тестирование программного обеспечения (ПО)?

Согласно «Руководству к своду знаний по программной инженерии» (IEEE, SWEBOK, 2004), тестирование — это проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом.

Читайте также:  Не выдерживает никакой критики что значит

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

В разных источниках, скажем, в книгах, статьях, можно встретить большое количество определений понятия «тестирование». Разные специалисты пытались объяснить его как можно точнее, придумывая все новые и новые формулировки. Например, одна из самых простых: тестирование — это сравнение фактического результата с ожидаемым. А еще — одна из техник контроля качества, включающая планирование работ (Test Management), проектирование тестов (Test Design), выполнение тестирования (Test Execution) и анализ полученных результатов (Test Analysis). Это исследование программы с целью обнаружения ошибок; возможный способ оценки качества программного обеспечения в терминах найденных дефектов, исполненных тестов и протестированных систем и т.д.

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

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

  1. Функциональные,
  2. Нефункциональные,
  3. Связанные с изменениями.

Тестирование можно классифицировать…

По критерию запуска программы:

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

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

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

По степени подготовленности:

  • Тестирование по документации;
  • Исследовательское тестирование;
  • Интуитивное тестирование (ad hoc testing*).

По признаку позитивности сценариев:

  • Позитивное тестирование;
  • Негативное тестирование*.

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

  • Отказоустойчивость — реакция системы на нестандартные, непредвиденные ситуации.
  • Ad hoc — сложная активность, которую может выполнить только опытный тестировщик.
  • Негативное тестирование — обработка системой ситуаций, которые не заложены разработчиком в программный продукт.
  • Тестирование «черного ящика» (black box) — проведение функционального тестирования без доступа к коду системы.
  • Тестирование «белого ящика» (white box) — функциональное тестирование с доступом к коду системы.
  • Тестирование «серого ящика» (gray box) — расширенный тип black-box тестирования, включающий изучение кода.

Есть еще более сложные и полные классификации. К примеру, вот такой вариант использует один из преподавателей «Аплана. Корпоративный университет» на своем курсе:

Можно ли выделить наиболее востребованные виды тестирования?

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

Ручное функциональное тестирование (РФТ) — это тестирование вручную, то есть без использования каких-либо автоматизированных средств. В этом случае инженер по тестированию берет на себя роль конечного пользователя и, в соответствии с тестовым сценарием, проверяет ПО или систему. Его задача — выявить поведение, отличное от ожидаемого конечным пользователем.

Ручное тестирование применяется в регрессионном (тестирование изменений), интеграционном (связь с другими системами) и при тестировании нового функционала.

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

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

Есть ли какие-то базовые принципы тестирования?

Вот семь основных из них:

  1. Тестирование демонстрирует наличие дефектов. Оно может показать, что дефекты есть, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в ПО, но, даже если они не были обнаружены, это не доказывает корректность тестирования.
  2. Исчерпывающее тестирование невозможно. Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы правильнее распределить усилия.
  3. Ранее тестирование. Чтобы как можно раньше найти дефекты, нужно как можно раньше начать активности по тестированию в жизненном цикле разработки ПО или системы. Кроме того, они должны быть сфокусированы на определенных целях.
  4. Скопление дефектов. Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже и реальной плотности дефектов по модулям. Большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.
  5. Парадокс пестицида. Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев перестанет находить новые дефекты. Чтобы преодолеть «парадокс пестицида», тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты ПО или системы, и найти как можно больше дефектов.
  6. Тестирование зависит от контекста. Тестирование выполняется по-разному, в зависимости от контекста. Допустим, ПО, в котором критически важна безопасность, тестируется не так, как сайт электронной коммерции.
  7. Отсутствие ошибок не означает, что система готова к использованию. Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.

Как понять, когда нужно начинать тестирование?

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

Что такое баги?

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

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

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

Базовые инструменты тестировщика:

  • Текстовый редактор для поиска, конвертации и сравнения файлов (Notepad++, PSPad и др.),
  • Xml-редактор (Altova XML Spy (работа с xml и xsd), XMLPad и др.),
  • Инструмент для работы со снимками экранов (Snipping Tool, Snagit, GreenShoot, ScreenHunter и др.),
  • Инструмент для записи видео с содержимым экрана (CamStudio, Ashampoo Snap, Free Screen Video Recorder и др.),
  • Инструмент для сравнения графических файлов (ImageDiscerner, FastStone Image Viewer, ImageDupeless, Graf2 Free rus),
  • Файловый менеджер (Total Commander, Far Manager, TrolCommander, Free Commander),
  • Планировщик задач (MS Outlook, Redmine и др.).

Как можно оценить качество ПО?

Оценка программного обеспечения производится согласно международному стандарту ISO 9126. ПО будет качественным, если можно обеспечить его функциональность, надежность, удобство использования, удобство сопровождения, производительность и переносимость. Чем больше атрибутов качества можно реализовать или поддержать (для производительности — это соответствие стандартам, временная эффективность и эффективность использования ресурсов и т.д.), тем выше будет качество ПО. У атрибутов есть и численные показатели — метрики, которые позволяют измерять прогресс в достижении качества.

Что такое тест-план и что в нем должно быть написано?

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

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

Основные разделы тест-плана:

  • Назначение,
  • Объект тестирования,
  • Тестовая стратегия,
  • Применяемые виды тестирования,
  • Условия проведения тестирования,
  • Критерии начала и завершения тестирования,
  • План-график проведения тестирования,
  • Ресурсы, необходимые для выполнения тестирования,
  • Возможные риски.

Что такое тест-дизайн и зачем он нужен?

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

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

Что является результатом работы инженера по тестированию?

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

Есть ли какие-то книги, которые могут быть полезны новичку в тестировании?

Рекомендуем к прочтению следующие книги:

  • «Краткие основы тестирования программного обеспечения», А. Коробейник;
  • «Тестирование программного обеспечения. Базовый курс», С.Куликов;
  • «Тестирование дот ком», Р. Савин;
  • «Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений», С. Каннер, Д. Фолк, Е. К. Нгуен;
  • «Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование», Р. Блэк;
  • «Автоматизированное тестирование программного обеспечения», Э. Дастин, Д. Рэшка, Д. Пол;
  • «Как тестируют в Google», Д. Уиттакер, Д. Арбон.

Источник

Что такое тестирование программ и зачем оно нужно

Оказывается, 75% времени при создании программ уходит вовсе не на программирование. Разбираемся, чем же занимаются тестировщики.

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

Почему тестирование — это так важно

Вот типичные программные баги:

  • Вы вводите в поле ответ на вопрос и нажимаете Enter. После этого программа неожиданно завершает работу, не сохранив информацию. И та же ошибка повторяется в следующий раз.
  • Другой случай: вы играете, например, в какую-нибудь стрелялку. Неожиданно персонажи начинают хаотично двигаться, конвульсивно дёргаться, терять или отращивать конечности. И вообще ведут себя не так, как им положено. Некоторое время программа не реагирует на нажатие клавиш, после чего выдаёт «Game over».
  • Ещё один пример: вы заходите в личный кабинет интернет-магазина. Нажимаете «оплатить», а вас выкидывает на главную страницу, да ещё и разлогинивает.

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

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

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

Какие виды тестирования существуют

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

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

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

Есть несколько видов тестирования:

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

Что тестируют на разных этапах разработки

Есть несколько уровней тестирования. Их проводят в разное время:

  1. Модульное тестирование делается в самом начале, когда готовы те куски кода, которые можно проверить по отдельности: объекты, классы, функции, программные модули. Тесты пишутся отдельно для каждой функции или метода. На этом этапе проверяют работоспособность части кода, нет ли регрессии — не появились ли после изменения кода ошибки там, где раньше всё работало нормально. Это самый нижний уровень тестирования, часто это делают те, кто пишет код.
  2. К интеграционному тестированию переходят после модульной проверки. Здесь тестируют связи между проверенными элементами и то, как программа взаимодействует с операционной системой, оборудованием.
  3. Системное тестирование показывает, соответствует ли готовая система функциональным и нефункциональным требованиям.
  4. Приёмочное тестирование проходит, когда заказчик принимает приложения от разработчиков. Его цель — убедиться, что продукт удовлетворяет требованиям клиента. На основании этого покупатель решает, готова ли программа или её нужно дорабатывать.

В зависимости от этапа разработки перед тестировщиками стоят разные цели:

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

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

Как обычно проходит тестирование

Как правило, тестировщики начинают работать с программой сразу после начала проекта:

  • Составляют тест-план, где описан весь объём работ по тестированию и определено, когда их можно закончить. Это примерный документ — в процессе разработки в него не раз внесут изменения: уточнят стратегию и виды тестирования, расписание работ и так далее.
  • Разрабатывают тест-кейсы — перечень конкретных действий и сценарии для проверки каких-то определённых функций программы.
  • Решают, нужна ли автоматизация: стоит ли разрабатывать и запускать автоматические тесты или можно обойтись тестированием вручную.

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

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

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

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

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

Кто всё это делает: немного о профессии

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

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

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

Как показывает статистика работных сайтов, на рынке не хватает разработчиков автотестов, а специалистов ручного тестирования достаточно. Средняя зарплата тестировщика в Москве больше 120 тысяч рублей, а по регионам —
примерно 55–60.

На скриншотах ниже — данные с HeadHunter. В сентябре 2020 года там было 3000 открытых вакансий тестировщика.

Источник

Оцените статью