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

1. Программный продукт и программа

Выше не зря было указано, что статья посвящена вопросам тестирования именно программных продуктов (далее – ПП), а не программ. Чем же отличается программный продукт от программы? А отличается он тем, что:

  • обладает максимально обобщённым диапазоном и видом входных данных;

  • тщательным тестированием, что является неожиданно сложным этапом;

  • наличием подробной документации.

По мнению Фредерика Брукса, создание программного продукта требует в 3 раза больше затрат времени, чем создание программы. Сам Брукс участвовал в разработке больших и сложных продуктов в командах разработчиков компании IBM.

Жизненный цикл программного продукта включает в себя следующие этапы:

  • формирование требований (этим занимаются бизнес-аналитики, которые тщательно изучили бизнес-процессы заказчика);

  • проектирование (эта задача аналитиков, составляющих ТЗ на разработку);

  • разработка (здесь подключаются front-end, back-end разработчики);

  • тестирование (эти занимаются тестировщики);

  • поставка ПП;

  • поддержка – (здесь нужны специалисты группы поддержки, аналитики и разработчики).

Тестирование находится в середине этих этапов и от него зависят финальные этапы жизненного цикла – поставка и поддержка, но оно оказывает влияние и на разработку.

2. Тестирование и обеспечение качества

Можно дать по крайней мере три определения тестирования ПП:

1.  Тестирование ПП – это комплекс мер, направленных на проверку соответствия продукта требованиям к нему предъявляемым (прямым и косвенным).

2.  Тестирование ПП – это проверка соответствия между ожидаемым и реальным поведением ПП, осуществляемая на конечном наборе тестов, выбранном определенным образом.

3.  В более широком смысле тестирование ПП - это одна из техник контроля качества, включающая в себя активности по:

  •  планированию работ (Test Management)

  • проектированию тестов (Test Design)

  • выполнению тестов (Test Execution)

  • анализу полученных результатов (TestAnalysis)

Зачем же нужно тестирование ПП? Чаще всего люди, напрямую не связанные с тестированием, дают такие ответы на этот вопрос:

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

2.  Тестирование сравнивает ожидаемый результат с фактическим. Это тоже не совсем так, хотя кейсы направлены именно на это.

3.  Тестирование подтверждает отсутствие багов в ПП. Это справедливо лишь в пределах тех методов, которыми проводилось тестирование. В принципе никакое тестирование не может гарантировать полное отсутствие багов в ПП.

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

  • предоставление информации о качестве ПП конечному заказчику;

  • повышение качества ПО;

  • предотвращение появления дефектов.

Часто бывает так, что тестирование приравнивают к обеспечению качеством (QA –Quality Assurance). Но эти два понятия – не одно и то же, хотя и связаны друг с другом. Их объединяет более крупное понятие – управление качеством, включающее в себя все виды деятельности, направляющие и контролирующие организацию в отношении качества выполнения работ и предоставления услуг. В частности, управление качеством содержит не только QA, но и контроль качества (QC – Quality Control). Группа тестирования не управляет качеством и не контролирует его, а всего лишь предоставляет информацию о качестве выполнения работ по разработке ПП (см. рис. 1).

Рисунок 1 – Место тестирования в обеспечении качества ПП
Рисунок 1 – Место тестирования в обеспечении качества ПП

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

Качество ПП – это совокупность характеристик ПП, относящаяся к его способности удовлетворять установленные и предполагаемые потребности.

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

Управлению качеством посвящён ISO 9000. Качество ПП также регламентируется набором стандартов:

  • ГОСТ 28195-89 Оценка качества программных средств. Общие положения.

  • ГОСТ 28806-90 Качество программных средств. Термины и определения.

  •  ГОСТ Р ИСО/МЭК Требования и оценка качества систем и программного обеспечения (SQuaRE). Модели качества систем и программных продуктов.

     3. Диаграмма качества

Рисунок 2 – Диаграмма качества ПП
Рисунок 2 – Диаграмма качества ПП

Диаграмма или модель качества (рис. 2), представленная в первой части стандарта ISO 9126, предлагает использовать для описания внутреннего и внешнего качества ПП многоуровневую модель.

На верхнем уровне этой модели выделено 6 основных характеристик качества ПП:

  • функциональность,

  • переносимость,

  • надёжность,

  • производительность,

  •  удобство использования,

  • удобство сопровождения.

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

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

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

  •  функциональным,

  • нефункциональным,

  • связанным с изменениями.

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

  • на основе функциональных требований, указанных в спецификации требований,

  •  на основе бизнес-процессов, которые должен обеспечивать ПП.

Нефункциональное тестирование – тестирование свойств ПП, не относящихся к его функциональности:

  • все виды тестирования производительности ПП:

    • нагрузочное тестирование (Performance and Load Testing);

    • стрессовое тестирование (Stress Testing);

    • тестирование стабильности или надёжности (Stability/Reliability Testing);

    • объёмное тестирование (Volume Testing);

  •  тестирование установки ПП (Installation Testing);

  • тестирование удобства использования ПП (Usability Testing);

  • тестирование на отказ и восстановление (Failover and Recovery Testing);

  • конфигурационное тестирование (Configuration Testing).

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

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

Тестирование стабильности или надёжности – это проверка работоспособности ПП при длительном тестировании с ожидаемым уровнем нагрузки:

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

  •  отсутствие перезагрузок серверов в период данного вида тестирования;

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

Объёмное тестирование – это тестирование ПП при большом увеличении количества данных, используемых ПП и хранящихся в БД. Например, если со временем ожидается определенный рост размера БД, то можно искусственно увеличить БД до этого размера и протестировать производительность ПП при его использовании.

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

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

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

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

Тестирование, связанное с изменениями, подразделяется на:

  •  дымовое тестирование (Smoke Testing);

  • регрессионное тестирование (Regression Testing);

  • тестирование сборки (Build Verification Test);

  • санитарное тестирование, или проверку согласованности/исправности (Sanity Testing).

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

Регрессионное тестирование – это проверка ранее протестированного ПП на отсутствие дефектов в той его части, которая не изменилась после внесения изменений в ПП или в следствии изменений во внешней среде.

Тестирование сборки – это проверка того, что выпущенная новая версия ПП соответствует критериям качества.

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

Существуют и другие классификации видов тестирования:

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

    • ручное – тестирование ПП в ручном режиме;

    • автоматизированное – тестирование ПП с помощью программных тестов;

  • по позитивности сценария:

    • позитивное - тестирование на данных или сценариях, которые соответствуют нормальному (штатному, ожидаемому) поведению ПП;

    • негативное - тестирование использует неожиданные или недостоверные данные для проверки поведения;

  • по доступу к исходному коду:

    • белый ящик – тестирование с доступом к исходному коду ПП,

    • серый ящик – тестирование с ограниченным знанием внутренней структуры ПП,

    • чёрный ящик – тестирование без доступа к исходному коду ПП.

А ещё — по исполнителю, уровню, формальности, важности... Наука тестирования достаточно обширна! На рисунке 3 представлены возможные виды тестирования для карандаша (если к процессу подойти формально!).

Рисунок 3 – Тестирование карандаша
Рисунок 3 – Тестирование карандаша

Продолжение следует...

Комментарии (0)