Тестирование программного обеспечения — процесс исследования, испытания программного продукта, имеющий две различные цели:
- продемонстрировать разработчикам и заказчикам, что программа соответствует требованиям;
- выявить ситуации, в которых поведение программы является неправильным, нежелательным или не соответствующим спецификации.
Существующие на сегодня методы тестирования программного обеспечения не позволяют однозначно и полностью выявить все дефекты и установить корректность функционирования анализируемой программы, поэтому все существующие методы тестирования действуют в рамках формального процесса проверки исследуемого или разрабатываемого программного обеспечения.
Такой процесс формальной проверки, или верификации, может доказать, что дефекты отсутствуют с точки зрения используемого метода. (То есть, нет никакой возможности точно установить или гарантировать отсутствие дефектов в программном продукте с учётом человеческого фактора, присутствующего на всех этапах жизненного цикла программного обеспечения.)
Существует множество подходов к решению задачи тестирования и верификации программного обеспечения, но эффективное тестирование сложных программных продуктов — это процесс в высшей степени творческий, не сводящийся к следованию строгим и чётким процедурам или созданию таковых.
Качество программного обеспечения можно определить как совокупную характеристику исследуемого ПО с учётом следующих составляющих:
- надёжность
- сопровождаемость
- практичность
- эффективность
- мобильность
- функциональность
Существует несколько признаков, по которым принято производить классификацию видов тестирования. Обычно выделяют следующие:
По объекту тестирования
- Функциональное тестирование
- Тестирование производительности
- Нагрузочное тестирование
- Стресс-тестирование
- Тестирование стабильности
- Конфигурационное тестирование
- Юзабилити-тестирование
- Тестирование интерфейса пользователя
- Тестирование безопасности
- Тестирование локализации
- Тестирование совместимости
По знанию системы
- Тестирование чёрного ящика
- Тестирование белого ящика
- Тестирование серого ящика
По степени автоматизации
- Ручное тестирование
- Автоматизированное тестирование
- Полуавтоматизированное тестирование
По степени изолированности компонентов
- Модульное тестирование
- Интеграционное тестирование
- Системное тестирование
По времени проведения тестирования
- Альфа-тестирование
- Дымовое тестирование (англ. smoke testing)
- Тестирование новой функции (new feature testing)
- Подтверждающее тестирование
- Регрессионное тестирование
- Приёмочное тестирование
- Бета-тестирование
По признаку позитивности сценариев
- Позитивное тестирование
- Негативное тестирование
По степени подготовленности к тестированию
- Тестирование по документации (формальное тестирование)
- Интуитивное тестирование (англ. ad hoc testing)
Источник: unetway.com
Лекция 10. Тестирование программных продуктов
Тестироваться могут самые разные представления знаний о разрабатываемой или сопровождаемой программе на любой фазе ее жизненного цикла. Это могут быть требования к программному продукту, cпецификации проекта или структур данных, фрагменты программного кода.
В литературе имеется несколько различных определений понятия “тестирование”. Будем использовать следующее:
Определение. Тестирование – это контролируемое выполнение программы на конечном множестве наборов данных и анализ результатов этого выполнения с целью обнаружения ошибок.
Часто тестирование программы в соответствии с этим определением называют динамическим тестированием, а статический анализ, не требующий выполнения программы (просмотр, инспекция), – статическим тестированием.
Принято выделять методы тестирования и критерии тестирования программного продукта.
Определение. Методы тестирования – это совокупность правил, регламентирующих последовательность шагов по тестированию.
Определение. Критерии тестирования – соображения, позволяющие судить о достаточности проведенного тестирования.
Под ошибкой принято понимать различие между вычисленным, обозреваемым или измеренным значением или условием и действительным, специфицированным или теоретически корректным значением или условием, т.е. в программе имеется ошибка, если ее выполнение не оправдывает ожиданий пользователя.
Любой программный продукт – от простейших приложений до сложных комплексов реального времени, – вряд ли можно считать свободным от ошибок.
Результативным (удачным) считается тест, прогон которого привел к обнаружению ошибки. Из данного свойства теста вытекает важное следствие: тестирование – процесс деструктивный (обратный созидательному, конструктивному). Именно этим объясняется, почему многие считают его трудным. Большинство людей склонны к конструктивному процессу созидания объектов и в меньшей степени – к деструктивному процессу.
При существующих в реальной работе ограничениях на время, стоимость, надежность и т.п. разработки программного продукта ключевым является следующий вопрос тестирования: Какое подмножество всех возможных тестов имеет наивысшую вероятность обнаружения большинства ошибок?
Определение. Тест – это набор входных значений, условий выполнения и ожидаемых значений на выходе, разработанных для проверки конкретного пути выполнения программы.
Программный продукт, как объект тестирования, имеет ряд особенностей, которые отличают процесс тестирования программного обеспечения от традиционного, исторически ранее появившегося “аппаратного” тестирования:
отсутствие полностью определенного единого эталона, которому должны соответствовать все результаты тестирования проверяемой программы;
На практике для тестирования используются в качестве эталонов косвенные данные, которые не полностью отражают функции и характеристики программ.
высокая сложность программ и принципиальная невозможность построения тестовых наборов, достаточных для исчерпывающего тестирования;
Комплексы программ, используемые для управления и обработки информации, являются одними из самых сложных изделий, создаваемых человеком. При существующей сложности программ недостижимо исчерпывающее их тестирование, гарантирующее абсолютно полную проверку. Поэтому тестирование проводится в объемах, минимально необходимых для проверки программ в некоторых ограниченных пределах изменения параметров и условий функционирования. Ограниченность ресурсов тестирования привела к необходимости тщательного упорядочивания применяемых методов и конкретных значений параметров с целью получения при тестировании наибольшей глубины проверок программ. Это определяет необходимость применения экономичных и эффективных методов тестирования.
наличие в программах вычислительных и логических компонент, а также компонент, характеризующихся стохастическим и динамическим поведением;
В сложных программных комплексах практически всегда имеются компоненты, осуществляющие преобразования данных. Кроме того, значительную часть программ составляют схемы принятия логических решений, обработки логических и символьных переменных. В ряде случаев процесс исполнения программ и получаемые результаты зависят от случайного изменения входных и промежуточных данных, а также от реального времени.
относительно невысокая степень формализации критериев завершения процесса тестирования и оценки качества тестирования.
Показатели качества сложных комплексов программ трудно формализуются и еще более трудно измеряются. Вследствие этого качество процесса тестирования программ и достигаемая при этом их корректность остаются весьма неопределенными и незарегистрированными. Оценки полноты тестирования и достигаемого при этом качества программ обычно получаются в процессе испытаний и сопровождения программ.
Подытоживая перечисленные выше особенности тестирования программного продукта, необходимо подчеркнуть невозможность создания единственного универсального метода тестирования.
На практике приходится применять ряд значительно различающихся методов и критериев тестирования. Каждая категория тестов отличается целевыми задачами тестирования, проверяемыми компонентами программ и методами оценки результатов. Только совместное и систематическое применение различных методов тестирования и категорий тестов, базирующихся на различных критериях тестирования, позволяет достичь высокого качества функционирования средних и сложных программных комплексов со средней или большой длительностью эксплуатации, имеющих большой размер исходного кода (10 5 — 10 7 строк в программе).
Сформулируем основные принципы тестирования:
Описание предполагаемых значений выходных данных или результатов должно быть неотъемлемой частью теста.
Следует избегать тестирования программы ее автором; тестирование является более эффективным, если оно выполняется не автором программы, но отладка программы обычно более эффективно выполняется авторами.
Организация не должна сама тестировать разработанные ею программные продукты.
Необходиимо досконально изучать результаты применения каждого теста.
Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных данных.
Необходимо проверять программу на нежелательные побочные эффекты.
Не следует выбрасывать тесты, даже если программа уже не нужна.
Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены.
Вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части.
Источник: studfile.net
Тестирование программ при разработке программных продуктов это
Тестирование программного обеспечения – это метод проверки соответствия фактического программного продукта ожидаемым требованиям, который также необходим, чтобы убедиться, что продукт не содержит дефектов.
- Что такое тестирование программного обеспечения?
- Почему тестирование ПО важно?
- Преимущества тестирования ПО
- Тестирование в программной инженерии
- Типы тестирования ПО
- Стратегии тестирования в программной инженерии
Некоторые предпочитают называть тестирование программного обеспечения:
«Белый ящик» – когда у нас есть доступ к коду, и мы его тестируем, читаем сам код (статическое тестирование), запускаем в дебаге, пишем автотесты;
«Черный ящик» – когда мы не знаем, как система устроена внутри, нет доступа к коду или мы не умеем его читать, и поэтому ориентируемся только на внешнее поведение или ТЗ;
«Серый ящик» – когда мы смотрим в код и понимаем, как он устроен, а потом открываем само приложение и проверяем, как этот код отображается уже в нем, но ориентируемся уже больше на ТЗ (это компиляция двух вышеприведенных определений).
Проще говоря, тестирование подразумевает проверку приложения на соответствие требованиям и стандартам качества. В этом руководстве мы познакомим аудиторию со средствами тестирования и убедимся в его значимости.
Почему тестирование ПО важно?
Если в программном обеспечении есть ошибки или дефекты, они могут быть обнаружены на раннем этапе производства ПО и устранены до его поставки в продакшн. Правильно протестированный программный продукт обеспечивает надежность, безопасность и высокую производительность, что в дальнейшем приводит к экономии времени, денег и удовлетворенности клиентов.
Тестирование важно, потому что ошибки в программном обеспечении могут дорого обойтись производителю. Они могут привести к серьезным финансовым потерям и даже человеческим жертвам, и история полна таких примеров.
- В апреле 2015 года терминал Bloomberg в Лондоне вышел из строя из-за сбоя программного обеспечения, затронувшего более 300 000 трейдеров на финансовых рынках. Это вынудило правительство отложить продажу долга в 3 миллиарда фунтов стерлингов.
- Автомобили Nissan отозвали с рынка более 1 миллиона автомобилей из-за сбоя программного обеспечения сенсорных датчиков подушек безопасности. Сообщается о двух несчастных случаях из-за этого программного сбоя.
- Starbucks была вынуждена закрыть около 60% магазинов в США и Канаде из-за сбоя программного обеспечения в ее POS-системе. В какой-то момент магазин подал кофе бесплатно, так как они не смогли обработать транзакцию.
- Некоторые сторонние розничные продавцы Amazon увидели, что их цена снизилась до 1 пенни из-за сбоя программного обеспечения. Они остались с большими потерями.
- Уязвимость в Windows 10 позволила выйти из изолированной программной среды безопасности через брешь в системе win32k.
- В 2015 году истребитель F-35 стал жертвой программного сбоя, из-за которого не смог правильно обнаруживать цели.
- 26 апреля 1994 года самолет Airbus A300 авиакомпании China Airlines разбился из-за ошибки в программном обеспечении, в результате чего погибли 264 невинных человека!
- В 1985 году канадский аппарат лучевой терапии Therac-25 вышел из строя из-за ошибки программного обеспечения и доставил пациентам смертельные дозы радиации, в результате чего 3 человека погибли и еще 3 получили тяжелые ранения.
- В апреле 1999 года из-за ошибки в ПО не удалось запустить военный спутник стоимостью 1,2 миллиарда долларов, что стало самой дорогостоящей аварией в истории.
- В мае 1996 года из-за ошибки в ПО на банковские счета 823 клиентов крупного банка США было зачислено 920 миллионов долларов США.
Рентабельность
Одно из ключевых преимуществ тестирования. В случае, если ошибки были обнаружены на раннем этапе тестирования программного обеспечения, их исправление обходится дешевле. Своевременное тестирование любого ИТ-проекта поможет вам сэкономить деньги в долгосрочной перспективе.
Безопасность
Люди ищут проверенные продукты. Тестирование избавиться вас от рисков утечки информации.
Качество продукта
Главная цель любого продукта – принести своим клиентам пользу. Тестирование гарантирует, что продукт будет выполнен в соответствии с бизнес-требованиями и выполнять свои функции.
Удовлетворенность клиентов
Если пользователь не является ярым фанатом определенного бренда, при выборе из нескольких схожих продуктов, пользователь выбирает тот, который удобнее. UI / UX Testing обеспечивает лучший пользовательский опыт.
Тестирование в программной инженерии
Согласно ANSI / IEEE 1059, тестирование в программной инженерии – это процесс оценки программного продукта, позволяющий определить, соответствует ли текущий программный продукт требуемым условиям. Процесс тестирования включает в себя оценку характеристик программного продукта на соответствие требованиям с точки зрения отсутствующих требований, ошибок или дефектов, безопасности, надежности и производительности.
- Функциональное тестирование
- Модульное (компонентное)
- Интеграционное
- Системное
- Регрессионное
- Приемочное
- Смоук
- Тестирование отказоустойчивости
- Нагрузочное
- Объемное
- Тестирование масштабируемости
- Регрессионное
- Тестирование технического обслуживания
Стратегии тестирования в программной инженерии
Вот основные стратегии в тестировании программного обеспечения:
Модульное тестирование
Этот подход к тестированию программного обеспечения используется программистом для тестирования отдельно взятого модуля программы. Это помогает разработчикам узнать, правильно ли работает каждый блок кода в изоляции от остальных.
Интеграционное тестирование
Основное внимание уделяется созданию и проектированию программного обеспечения. Вы должны видеть, что при взаимодействии интегрированные блоки работают без ошибок.
Системное тестирование
В этом методе ваше программное обеспечение компилируется как единое целое, а затем как единое целое тестируется. Эта стратегия проверяет, среди прочего, функциональность, безопасность и переносимость.
Валидационное тестирование
Процесс оценки программного обеспечения с целью определить – удовлетворяет ли оно определенным бизнес-требованиям. Валидационное тестирование гарантирует, что продукт соответствует потребностям клиента. Его также можно расценивать как демонстрацию того, что продукт будет выполнять свое предназначение при развертывании в соответствующей среде.
Хорошо то тестирование, при котором высока вероятность обнаружения ошибок.
Краткое изложение основ тестирования программного обеспечения:
- Тестирование программного обеспечения определяется как деятельность, направленная на проверку соответствия фактических результатов ожидаемым и на отсутствие дефектов в программной системе.
- Тестирование важно, потому что ошибки в программном обеспечении могут быть дорогими или даже опасными для людей.
- Важными причинами использования тестирования программного обеспечения являются: экономичность, безопасность, качество продукции и удовлетворенность клиентов.
- Обычно тестирование подразделяется на три категории: функциональное тестирование, тестирование производительности и сопровождение.
- Основными стратегиями в разработке программного обеспечения являются: модульное тестирование, интеграционное тестирование, валидационное тестирование и системное тестирование.
- «Тестирование программного обеспечения» С.С. Куликов(базовый курс, 2-ое издание)
- https://coderlessons.com/tutorials/kachestvo-programmnogo-obespecheniia/slovar-testirovaniia-programmnogo-obespecheniia/validatsionnoe-testirovanie
- http://akkaparallel.blogspot.com/2013/03/blog-post_1180.html
- https://www.guru99.com/software-testing
Источник: logrocon.ru