Тестирование- процесс выполнения программы, целью которого является выявление ошибок. Никакое тестирование не может доказать отсутствие ошибок в хоть сколько-нибудь сложном программном обеспечении. Для ПО выполнение полного тестирования, т. е. задания всех возможных комбинаций исходных данных, становится невозможным, а, следовательно, всегда имеется вероятность того, что в программном обеспечении остались невыявленные ошибки. Однако соблюдение основных правил тестирования и научно обоснованный подбор тестов может уменьшить их количество.
Тестирование — очень важный и трудоемкий этап процесса разработки программного обеспечения, так как правильное тестирование позволяет выявить подавляющее большинство ошибок, допущенных при составлении программ.
Процесс разработки ПО предполагает три стадии тестирования: автономное, комплексное и системное, каждая из которых соответствует завершению соответствующей части системы.
Различают два подхода к формированию тестов: структурный и функциональный. Каждый из указанных подходов имеет свои особенности и области применения.
Как оценить качество ПО? [GeekBrains]
Процесс разработки программного обеспечения, в том виде, как он определяется в современной модели жизненного цикла программного обеспечения, предполагает три стадии тестирования:
• автономное тестирование компонентов программного обеспечения;
• комплексное тестирование разрабатываемого программного обеспечения;
• системное или оценочное тестирование на соответствие основным критериям качества.
Дата добавления: 2018-02-15 ; просмотров: 563 ; Мы поможем в написании вашей работы!
Источник: studopedia.net
16 Лекция № 16. Тестирование и отладка программных продуктов
Содержание лекции: виды контроля качества разрабатываемого ПО; ручной контроль; структурное, функциональное и оценочное тестирование; классификация ошибок; методы и средства отладки ПО.
Цель лекции: ознакомиться с видами и способами контроля и тестирования ПО, методами и средствами отладки программ.
Недостаточно выполнить проектирование и кодирование программного продукта, также необходимо обеспечить его соответствие требованиям и спецификациям. Многократно проводимые исследования показали, что чем раньше обнаруживаются те или иные несоответствия или ошибки, тем больше вероятность их исправления и ниже его стоимость [4]. Современные технологии разработки ПО предусматривают раннее обнаружение ошибок за счет выполнения контроля результатов всех этапов и стадий разработки. На начальных этапах контроль осуществляют вручную или с использованием CASE-средств, на последних — он принимает форму тестирования.
Тестирование — это процесс выполнения программы, целью которого является выявление ошибок. Никакое тестирование не может доказать отсутствие ошибок в сложном ПО, поскольку выполнение полного тестирования становится невозможным и имеется вероятность, что остались невыявленные ошибки. Соблюдение основных правил тестирования и научно обоснованный подбор тестов может уменьшить их количество. Процесс разработки согласно современной модели жизненного цикла ПО предполагает три стадии тестирования: автономное тестирование компонентов ПО; комплексное тестирование разрабатываемого ПО; системное или оценочное тестирование на соответствие основным критериям качества. Для повышения качества тестирования рекомендуется соблюдать следующие основные принципы:
Цель в жизни. Как понять? Узнай как достичь любой цели в современном мире! Аудиокнига целиком
- предполагаемые результаты должны быть известны до тестирования;
- следует избегать тестирования программы автором;
- необходимо досконально изучать результаты каждого теста;
- необходимо проверять действия программы на неверных данных;
- необходимо проверять программу на неожиданные побочные эффекты на неверных данных.
- синтаксические ошибки – сопровождаются комментарием с указанием их местоположения, фиксируются компилятором (транслятором) при выполнении синтаксического и частично семантического анализа;
- ошибки компоновки — обнаруживаются компоновщиком (редактором связей) при объединении модулей программы;
- ошибки выполнения — обнаруживаются аппаратными средствами, операционной системой или пользователем при выполнении программы, проявляются разными способами и в свою очередь делятся на группы:
- ошибки определения исходных данных (ошибки передачи, ошибки преобразования, ошибки перезаписи и ошибки данных);
- логические ошибки проектирования (неприменимый метод, неверный алгоритм, неверная структура данных, другие) и кодирования (ошибки некорректного использования переменных, вычислений, межмодульного интерфейса, реализации алгоритма, другие);
- ошибки накопления погрешностей результатов вычислений (игнорирование ограничений разрядной сетки и способов уменьшения погрешности).
- ручного тестирования (при обнаружении ошибки нужно выполнить тестируемую программу вручную, используя тестовый набор, при работе с которым была обнаружена ошибка);
- индукции (основан на тщательном анализе симптомов ошибки, которые могут проявляться как неверные результаты вычислений или как сообщение об ошибке);
- дедукции (вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки, а затем анализируя причины, исключают те, которые противоречат имеющимся данным);
- обратного прослеживания (для точки вывода неверного результата строится гипотеза о значениях основных переменных, которые могли бы привести к получению данного результата, а затем, исходя из этой гипотезы, делают предположения о значениях переменных в предыдущей точке).
- программу наращивать «сверху-вниз», от интерфейса к обрабатывающим подпрограммам, тестируя ее по ходу добавления подпрограмм;
- выводить пользователю вводимые им данные для контроля и проверять их на допустимость сразу после ввода;
- предусматривать вывод основных данных во всех узловых точках алгоритма (ветвлениях, вызовах подпрограмм).
Источник: studfile.net
Процесс выполнения программы целью которого является выявление ошибок
Существует три уровня тестирования:
- Модульное (или компонентное) тестирование, когда проверяется только какая-то часть ПО: отдельная функция, класс, модуль программы. Стандартно оно проводится через вызов кода. Зачастую тестирование на этом уровне осуществляется самим разработчиком. Модульное тестирование от компонентного отличается тем, что в компонентном используют реальные объекты и драйверы, а в модульном – конкретные значения.
- Интеграционное тестирование – процесс исследования ПО, когда проверяются интерфейсы между компонентами или подсистемами. К интеграционному тестированию можно отнести также проверку взаимодействия двух систем в заданных точках. Например, передачу данных из одной системы в другую.
- Системное тестирование – проверка соответствия системы требованиям заказчика. Исследуются функциональные и нефункциональные требования к системе в целом, выявляются дефекты и непредусмотренные сценарии. Например, что будет, если в поле, в которое вводится два знака, попробовать ввести три, букву вместо цифры и т.д.
Системное тестирование проводят по базе требований, под каждое из которых создается тестовый случай (тест-кейс) . Тестирование может идти и по базе случаев использования, когда по каждому из них определяются сценарии, для которых создаются кейсы.
Классификация видов тестирования
Как видите, классов не так много, но в каждом из них можно выделить несколько разных видов тестирования.
Перечислим основные:
- Функциональное тестирование – проверка, что ПО правильно решает пользовательские задачи.
- Тестирование производительности позволяет оценить быстродействие ПО при заданной нагрузке. Тестирование производительности проводится до и после оптимизации. Его целью является проверка и выявление факторов, которые влияют на производительность ПО.
- Нагрузочное тестирование предполагает оценку ПО при плановой, повышенной и пиковой нагрузке. Ресурсы системы конечны и такое тестирование позволяет избежать связанных с нагрузкой инцидентов после ее внедрения.
- Стресс-тест – проверка работы ПО в критических условиях: миграция данных из другой системы в больших объемах, загрузка большого количества данных, нехватка памяти или дискового пространства. Также проверяется, как будет работать ПО, когда им одновременно начнет пользоваться большое количество пользователей.
- Тестирование стабильности – проверка реакции ПО на взлом, попытки хищения данных и т.д.
- Тестирование совместимости – проверка реакции ПО на окружение, заданные условия использования другими системами и проч.
- Тестирование black box или тестирование черного ящика проводится только через интерфейсы пользователя.
- Тестирование white box или тестирование белого ящика – тестирование с доступом к исходному коду программы. Этот способ позволяет оценить реакции внутри ПО на те или иные события, более тонко и точечно выявить ошибки или неоднозначные реализации логических цепочек.
- Альфа-тестирование – имитация реальной работы с ПО, чтобы оценить его в максимально приближенных к реальным условиях.
- Бета-тестирование проводится группой по основным параметрам с целью проверки наличия в ПО минимального количества ошибок.
- Регресс-тест – проверка ранее найденных ошибок. После разработки и доработки проверяется, что ни одна из них не появилась вновь.
- Дымовой тест – проверка «А запускается ли ПО?». Smoke testing проводят, когда отдельные компоненты нужно собрать в один продукт. Бывает, что по отдельности каждая компонента работает стабильно и корректно, а вместе – нет.
- Ручное тестирование – тестирование, при котором не используются доп. инструменты, для проверки проводится только имитация действий пользователя.
- Автоматизированное тестирование – тестирование с использованием специальных программных средств. Автоматизированное тестирование экономит время и ресурсы, а также увеличивает надежность ПО.
- Динамический анализ кода – анализ исходного текста программы в процессе ее выполнения. В этом случае проблемы в коде обнаруживаются по мере их появления.
- Статический анализ кода проводится без реального выполнения исследуемых программ. Он позволяет обнаружить дефекты еще до того, как код будет готов к запуску. Статический анализ также называю аудитом кода.
Как видите, в рамках тестирования могут идти самые разные процессы на различных уровнях. Управляют ими специалисты, которых называют тестировщиками.
Тестировщик ПО – специалист, который занимается проверкой программного обеспечения, выявляет ошибки и помогает улучшать продукт. Тестировщиков также называют инженерами по QA (от англ. Quality Assurance – обеспечение качества).
Инженер по QA не только проводит тестирование, но и дает рекомендации по исправлению багов в некоторых случаях.
Обязанности тестировщика
- контроль качества разрабатываемых продуктов;
- выявление и анализ ошибок, возникающих при работе с ПО;
- разработка тестов, тест-кейсов;
- тестирование;
- анализ результатов тестирования;
- классификация ошибок;
- сопровождение процесса ликвидации найденной ошибки;
- документирование всего процесса.
О работе тестировщика существует немало мифов , причем разных полюсов: от того, что туда вход открыт всем, до того, что без знания языков программирования в тестировщики не попасть.
Это крайности, освоить профессию с нуля можно, причем способ стоит выбрать такой, который понравится – самостоятельно, в компании или сразу в работе.
Стек технологий тестировщика:
У каждого инженера по QA есть свой уникальный опыт и собственный стек технологий – набор инструментов, которые он использует в работе, включая языки программирования, СУБД и прочее.
Перечислим наиболее распространенные варианты:
Языки разметки и программирования:
- HTML/CSS
- Python
- SQL
- Java/JavaScript
Фреймворки:
- Selenium
- Allure
Системы автоматизации:
ПО для управления проектами:
Библиотеки модульного тестирования:
- Nose
- SimpleTest
- Jest
- Jasmine
- Chai
- JUnit
- Nunit
- Boost Test
- Watir
Серверы, для запуска легковесных оболочек:
- Selenoid
- Docker
Это примерный список: важно понимать, что в каждом проекте будет уникальная комбинация стека технологий, отвечающая индивидуальным требованиям. К акой-нибудь веб-проект может работать, например, с таким стеком: Java + Html elements + Selenoid + Allure + Jenkins + Readmine.
Список того, чем может владеть и что может изучать тестировщик огромен, начиная c английского и языков программирования, именно поэтому профессия становится такой гибкой и востребованной. Только постоянно развиваясь, инженер по QA может стать дорогим и уникальным специалистом. Начните с малого, постоянно практикуйтесь и развивайте уникальные компетенции. Удачи вам в освоении этой интересной профессии!
Источник: proglib.io