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

  • Блочное (модульное, unit testing) тестирование наиболее понятное для программиста. Фактически это тестирование методов какого-то класса программы в изоляции от остальной программы.

Не всякий класс легко покрыть unit тестами. При проектировании нужно учитывать возможность тестируемости и зависимости класса делать явными. Чтобы гарантировать тестируемость можно применять TDD методологию, которая предписывает сначала писать тест, а потом код реализации тестируемого метода. Тогда архитектура получается тестируемой. Распутывание зависимостей можно осуществить с помощью Dependency Injection. Тогда каждой зависимости явно сопоставляется интерфейс и явно определяется как инжектируется зависимость — в конструктор, в свойство или в метод.

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

Если к нему подходить как к unit-тестированию, у которого в тестах зависимости не заменяются mock-объектами, то получаем проблемы. Для хорошего покрытия нужно написать много тестов, так как количество возможных сочетаний взаимодействующих компонент — это полиномиальная зависимость. Кроме того, unit-тесты тестируют как именно осуществляется взаимодействие (см. тестирование методом белого ящика). Из-за этого после рефакторинга, когда какое-то взаимодействие оказалось выделенным в новый класс, тесты рушатся. Нужно применять менее инвазивный метод.

  • Системное тестирование - это тестирование программы в целом. Для небольших проектов это, как правило, ручное тестирование — запустил, пощелкал, убедился, что (не) работает. Можно автоматизировать. К автоматизации есть два подхода.

Первый подход — это использовать вариацию MVC паттерна — Passive View и формализовать взаимодействие пользователя с GUI в коде. Тогда системное тестирование сводится к тестированию Presenter классов, а также логики переходов между View. Но тут есть нюанс. Если тестировать Presenter классы в контексте системного тестирования, то необходимо как можно меньше зависимостей подменять mock объектами. И тут появляется проблема инициализации и приведения программы в нужное для начала тестирования состояние.

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

Oct. 21, 2023, Источник

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

1. Модульное тестирование (Unit Testing)

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

2. Интеграционное тестирование (Integration Testing)

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

3. Системное тестирование (System Testing)

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

4. Приёмочное тестирование (Acceptance Testing)

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

5. Нагрузочное тестирование (Load Testing)

Проверка способности программы обрабатывать определённый объём задач или запросов за заданный промежуток времени. Целью является определение производительности и выявление узких мест.

6. Тестирование безопасности (Security Testing)

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

7. Регрессионное тестирование (Regression Testing)

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

8. Usability Testing (Тестирование удобства использования)

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

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

March 22, 2024, easyoffer