Тестирование является неотъемлемой частью жизненного цикла разработки программного обеспечения SDLC (Software Development Life Cycle). Тестирование ПО позволяет выявить следующее: ошибки, дефекты и недостатки в продукте; уровень качества разрабатываемого ПО; завершенность технического задания в соответствии с требованиями бизнеса и пользователей. В процессе тестирования очень важно добиться наилучших результатов, не отклоняясь от поставленной цели. В связи с этим как убедиться в правильности выбранной стратегии тестирования?
В подобной ситуации всегда полезно проанализировать предыдущие процессы и рекомендации по тестированию, чтобы быть уверенными в том, что вы следуете лучшим практикам. Начать свой путь в тестировании можно с изучения семи принципов тестирования ПО, изложенных ассоциацией ISTQB (International Software Testing Qualifications Board). Несмотря на то, что тестировщики используют принципы тестирования уже много лет, многие из них, возможно, не осознают, насколько они ценны.
В этой статье мы рассмотрим семь принципов тестирования ПО, которые помогут сделать процесс тестирования более эффективным и привести к разработке более качественного продукта. Прежде чем продолжить, давайте разберемся, что такое тестирование ПО и почему принципы тестирования ПО имеют большое значение.
Содержание:
- Что такое тестирование программного обеспечения?
- Почему важны принципы тестирования ПО?
- Принципы тестирования ПО
- Заключение
- Вопросы и ответы
Что такое тестирование программного обеспечения?
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Тестирование ПО – это процесс проверки и верификации результатов и поведения тестируемого ПО. Тестирование программного обеспечения включает в себя:
- Проверку и подтверждение того, что продукт не содержит ошибок.
- Определение, что продукт отвечает техническим спецификациям в соответствии с планом и ходом разработки.
- Оптимальную и результативную проверку соответствия требованиям пользователя.
- Оценку функциональности и измерение производительности продукта.
- Поиск путей повышения эффективности, точности и удобства использования ПО.
При проведении тестирования ошибки и недостатки в ПО могут быть обнаружены на ранних стадиях и устранены до сдачи продукта. Правильно протестированные программные продукты обеспечивают высокую производительность, надежную защиту и экономическую эффективность, что в конечном итоге приводит к повышению удовлетворенности клиентов. В ходе этого процесса различные аспекты продукта исследуются, анализируются, наблюдаются и оцениваются тестировщиками с помощью ручного тестирования или инструментов автоматизации. Как только тестирование завершено, тестировщики сообщают о его результатах команде разработчиков. В конечном счете, речь идет о предоставлении заказчику продукта высокого качества, именно поэтому тестирование ПО так необходимо.
Почему важны принципы тестирования ПО?
Повсеместно распространено мнение, что успех достигается благодаря соблюдению определенного набора правил. Для поддержания хорошей физической формы, выполнения рабочих задач или достижения жизненных целей часто существуют конкретные цели и правила, которым мы должны следовать, чтобы добиться успеха. То же самое можно сказать и о тестировании ПО. В целом принципы тестирования ПО описывают, как тестировщики или инженеры по тестированию должны создавать понятный и поддерживаемый код, не содержащий ошибок. Инженерия – это не наука, в которой можно взмахнуть волшебной палочкой и превратить нагромождение переменных, классов и функций в безупречный код, но можно использовать некоторые принципы, чтобы понять, все ли вы делаете правильно. Принципы тестирования помогут вам составить тестовые сценарии, позволяющие выявить ошибки, и также создать эффективную стратегию тестирования. Тестирование ПО опирается на следующие семь принципов:
- Тестирование показывает наличие дефектов
- Всё протестировать невозможно
- Раннее тестирование
- Кластеризация дефектов
- Парадокс пестицида
- Тестирование зависит от контекста
- Отсутствие ошибок может быть обманчивым
Итак, что же это за принципы тестирования ПО? Давайте рассмотрим эти семь принципов подробнее.
Принципы тестирования ПО
Тестирование – это невероятно творческая и интеллектуальная деятельность для тестировщиков. Каждый тестировщик должен изучить и понять эти 7 принципов, поскольку это поможет ему достичь высоких стандартов качества, а также даст заказчику уверенность в том, что его ПО готово к выпуску в продакшн. Соблюдение этих принципов поможет вашему проекту развиваться беспрепятственно.
1. Тестирование показывает наличие дефектов
Как сказано в этом принципе тестирования: “тестирование показывает наличие дефектов, но не показывает их отсутствие”. При тестировании ПО мы ищем ошибки, которые должны быть исправлены до развертывания систем в реальных средах – это дает нам уверенность в том, что наши системы будут функционировать корректно, когда с ними начнут работать пользователи. Несмотря на это, процесс тестирования не гарантирует, что ПО будет на 100% безошибочным. Действительно, тестирование значительно сокращает количество дефектов, скрытых в ПО, однако обнаружение и устранение этих проблем не гарантирует полное отсутствие ошибок в продукте или системе.
Даже если тестировщики не могут найти дефекты после регулярного регрессионного тестирования, это не означает, что ПО не содержит ошибок на 100%. Например, приложение может казаться безошибочным после прохождения различных этапов тестирования, но при его развертывании в реальной среде может быть обнаружен неожиданный дефект. Члены команды должны всегда помнить об этом и стараться управлять ожиданиями клиентов.
2. Всё протестировать невозможно
При исчерпывающем тестировании обычно проверяется вся функциональность программного продукта с использованием как допустимых, так и недопустимых входных данных и предусловий. Как бы вы ни старались, протестировать ВСЁ практически невозможно. Одни только входные и выходные данные имеют бесконечное число комбинаций, поэтому невозможно протестировать приложение со всех сторон на 100%.
Рассмотрим случай, когда нам нужно протестировать поле ввода, принимающее проценты от 50 до 55, поэтому мы тестируем данное поле, используя значения: 50, 51, 52, 53, 54, 55. Если предположить, что то же самое поле ввода принимает значения от 50 до 100, то нам нужно будет протестировать его, используя 50, 51, 52, 53, …, 99, 100. Это совсем простой пример. Вы можете подумать, что с этим справится средство автоматизации. Но представьте себе поле, принимающее миллиард значений. Можно ли проверить все возможные значения?
Если мы будем тестировать все возможные сценарии, время выполнения ПО и его стоимость будут увеличиваться. Чтобы не проводить полное тестирование, нужно учитывать некоторые важные эффекты критериев тестирования, такие как риски и приоритеты, в рамках наших усилий по тестированию и оценке.
3. Раннее тестирование
В разработке ПО раннее тестирование означает включение тестирования в процесс разработки как можно раньше. Оно играет важную роль в жизненном цикле разработки программного обеспечения (SDLC). Например, тестирование требований до того, как писать какой-либо код. Исправление проблем на этом этапе жизненного цикла проекта гораздо дешевле и проще, чем исправление проблем в конце проекта, когда приходится писать новые “куски” функционала, что приводит к перерасходу средств и срыву сроков. Стоимость исправления ошибки экспоненциально возрастает со временем по мере продвижения продукта по его жизненному циклу разработки.
Рассмотрим два сценария. В первом случае на этапе сбора требований было обнаружено некорректное требование. Во втором случае обнаружен дефект в полностью разработанном функционале продукта. Исправление некорректного требования обходится дешевле, чем исправление полностью разработанного продукта, который работает не так, как должен. Поэтому для повышения производительности ПО тестирование должно начинаться на начальном этапе, то есть на этапе анализа требований.
4. Кластеризация дефектов
В тестировании ПО кластеризацию дефектов относят к небольшому модулю или фиче, где имеется наибольшее количество ошибок или проблем в работе. Это объясняется тем, что дефекты не распределены равномерно в системе, а сгруппированы. Это может быть обусловлено множеством факторов, например, сложностью самих модулей или сложностью программирования этих модулей.
Принцип Парето (правило “80-20”) гласит, что 80% проблем возникает в 20% модулей, а остальные 20% – в оставшихся 80% модулей. Таким образом, мы отдаем приоритет тестированию 20% модулей, в которых возникает 80% всех ошибок.
Для эффективной стратегии тестирования необходимо тщательно исследовать эти области проверяемого ПО. Метод кластеризации дефектов опирается на знания и опыт команды, которые помогают определить, какие модули следует тестировать. Исходя из своего опыта, вы можете выявить модули с более высокими рисками. Поэтому команде нужно сосредоточиться только на этих “чувствительных” областях, экономя ваше время и силы.
5. Парадокс пестицида
В тестировании ПО парадокс пестицида обычно относится к практике повторения одних и тех же тестовых сценариев снова и снова. Со временем эти тесты перестают находить новые ошибки. Разработчики будут создавать тесты, которые “проходят”, и могут забыть о негативных или пограничных случаях. Это основано на теории, согласно которой при многократном распылении одного и того же пестицида на посевы с целью уничтожения насекомых, у насекомых в конце концов вырабатывается иммунитет, делающий пестицид неэффективным. То же самое справедливо и для тестирования ПО.
Поэтому для преодоления “парадокса пестицида” необходимо регулярно пересматривать и обновлять тест-кейсы, чтобы можно было найти больше дефектов. Однако если этого не делать и повторять одни и те же тесты снова и снова, то в конечном итоге новых ошибок обнаружено не будет, но, как мы уже знаем, это совсем не означает, что система безошибочна на 100%. Чтобы сделать тестирование более эффективным, тестировщики должны постоянно искать пути совершенствования существующих методов тестирования. Для тестирования новых функциональных возможностей программного продукта или системы необходимо разрабатывать новые тесты.
6. Тестирование зависит от контекста
Каждый тип программной системы тестируется по-разному. Согласно этому принципу, тестирование зависит от контекста разрабатываемого ПО, и это абсолютно верно. Реальность такова, что каждое приложение имеет свой уникальный набор требований, поэтому мы не можем загнать тестирование в жесткие рамки. Конечно, каждое приложение проходит через определенный процесс тестирования, однако подход к тестированию может отличаться в зависимости от типа приложения.
В зависимости от характера приложения используются различные методологии, техники и виды тестирования. Например, приложения для медицинской отрасли требуют более тщательного тестирования, чем игровые приложения, системы, критически важные для безопасности (например, электронный блок управления автомобиля или самолета), требуют большего тестирования, чем презентационные сайты компаний, а приложения для интернет-банкинга требуют иных подходов к тестированию, чем сайты электронной коммерции или рекламные сайты.
7. Отсутствие ошибок может быть обманчивым
Создаваемое нами ПО не только должно быть на 99% без ошибок, но и должно отвечать требованиям бизнеса и пользователей, иначе оно станет непригодным для использования. Даже не содержащее ошибок ПО может оказаться бесполезным, если в него заложены неверные требования или если оно не отвечает потребностям бизнеса.
Если вы ее создадите, они придут!!! Существует миф, что если создать идеальную систему без ошибок, то пользователи сами придут и начнут работать с ней, но это не так. Для того чтобы программные системы были пригодны для использования, они должны не только быть на 99% без ошибок, но и отвечать потребностям бизнеса и требованиям пользователей. Поэтому, независимо от того, насколько безупречна или безошибочна ваша система, если она не удобна и сложна в использовании, или если она не соответствует потребностям бизнеса/пользователей, то это не иначе как провал.
Заключение
Как вы убедились, семь принципов тестирования ПО приводят к созданию высококачественных продуктов. Внедрение этих принципов в процесс тестирования поможет вам добиться большей эффективности и концентрации, а также улучшить общую стратегию тестирования. Кроме того, часто можно обнаружить, что применение лишь одного принципа приводит к тому, что другие принципы естественным образом становятся на свои места. Так, например, раннее тестирование может помочь смягчить “заблуждение об отсутствии ошибок”, т.е. привлечение тестировщиков на этапе разработки требований поможет обеспечить соответствие ПО ожиданиям и потребностям заказчика. Сочетание всех этих принципов поможет вам рационально и эффективно использовать свое время и силы.
На этом мы завершаем наш пост “Принципы тестирования программного обеспечения”. Надеемся, что вам понравилось читать эту статью и вы теперь лучше понимаете суть каждого из семи принципов.
Вопросы и ответы
Вопрос 1: Сколько существует принципов тестирования ПО?
Ответ: Для повышения эффективности тестирования ПО применяют семь принципов. Используя эти семь принципов, команды тестировщиков могут максимально эффективно использовать свое время и усилия. Следование этим принципам будет способствовать успешному развитию вашего проекта.
Вопрос 2: Какие это принципы?
Ответ: Ниже приведены семь принципов тестирования ПО:
- Тестирование показывает наличие дефектов в ПО
- Всё протестировать невозможно
- Раннее тестирование
- Кластеризация дефектов
- Парадокс пестицида
- Тестирование зависит от контекста
- Отсутствие ошибок может быть обманчивым
Вопрос 3: Что такое методология тестирования ПО?
Ответ: Методология тестирования ПО – это набор стратегий и подходов, используемых для тестирования программного продукта с целью обеспечения его функционирования и отображения в соответствии с ожиданиями пользователей и требованиями бизнеса. Они включают в себя все виды тестирования – от фронт-энда до бэк-энда, а также модульное и системное тестирование.
Перевод статьи «7 Principles of Software Testing».