12.01.22_Лекция_1.Тестирование ПО. Лекция Организация тестирования в команде разработчиков
Скачать 41.59 Kb.
|
Лекция 1. Организация тестирования в команде разработчиковВведениеТестирование - очень важный и трудоемкий этап процесса разработки программного обеспечения, так как он позволяет выявить подавляющее большинство ошибок, допущенных при составлении программ. Процесс разработки программного обеспечения предполагает три стадии тестирования: автономное тестирование компонентов программного обеспечения; комплексное тестирование разрабатываемого программного обеспечения; системное или оценочное тестирование на соответствие основным критериям качества. Для повышения качества тестирования рекомендуется соблюдать следующие основные принципы: предполагаемые результаты должны быть известны до тестирования; следует избегать тестирования программы автором; досконально изучать результаты каждого теста; необходимо проверять работу программы на неверных данных; вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части. Формирование набора тестов имеет большое значение, поскольку тестирование является одним из наиболее трудоемких этапов (от 30 до 60 % общей трудоемкости) создания программного продукта. Существуют два принципиально разных подхода к формированию тестовых наборов – структурный и функциональный. Структурный подход базируется на том, что известны алгоритмы работы программы. В основе структурного тестирования лежит концепция максимально полного тестирования всех маршрутов программы. Функциональный подход основывается на том, что алгоритм работы программного обеспечения не известен. Тесты строят, опираясь на функциональные спецификации. Программа рассматривается как «черный ящик», и целью тестирования является выяснение обстоятельств, в которых поведение программы не соответствует требованиям. Опытные отладчики обнаруживают ошибки путём сравнения шаблонов тестовых выходных данных с выходными данными тестируемых систем. Чтобы определить местоположение ошибки, необходимы знания о типах ошибок, шаблонах выходных данных, языке и процессе программирования. Очень важны знания о процессе разработке программного обеспечения. Цели и область тестирования Качество программного продукта характеризуется набором свойств, определяющих, насколько продукт «хорош» с точки зрения заинтересованных сторон, таких как заказчик продукта, спонсор, конечный пользователь, разработчики и тестировщики продукта, инженеры поддержки, сотрудники отделов маркетинга, обучения и продаж. Каждый из участников может иметь различное представление о продукте и том, насколько он хорош или плох, то есть о том, насколько высоко качество продукта. Таким образом, постановка задачи обеспечения качества продукта выливается в задачу определения заинтересованных лиц, их критериев качества и затем нахождения оптимального решения, удовлетворяющего этим критериям. Тестирование является одним из наиболее устоявшихся способов обеспечения качества разработки программного обеспечения и входит в набор эффективных средств современной системы обеспечения качества программного продукта. С технической точки зрения тестирование заключается в выполнении приложения на некотором множестве исходных данных м сверке получаемых результатов с заранее известными (эталонными) с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам. Отладка(debug, debugging) - процесс поиска, локализации и исправления ошибок в программе. Термин «отладка» в отечественной литературе используется двояко: для обозначения активности по поиску ошибок (собственно тестирование), по нахождению причин их появления и исправлению, или активности по локализации и исправлению ошибок. Тестирование - это процесс выполнения ПО системы или компонента в условиях анализа или записи получаемых результатов с целью проверки (оценки) некоторых свойств тестируемого объекта. Тестирование - это процесс анализа пункта требований к ПО с целью фиксации различий между существующим состоянием ПО и требуемым (что свидетельствует о проявлении ошибки) при экспериментальной проверке соответствующего пункта требований. Тестирование - это контролируемое выполнение программы на конечном множестве тестовых данных и анализ результатов этого выполнения для поиска ошибок. Целью проектирования тестовых вариантов является систематическое обнаружение различных классов ошибок при минимальных затратах времени и стоимости. Тестирование обеспечивает: Обнаружение ошибок. Демонстрацию соответствия функций программы ее назначению. Демонстрацию реализации требований к характеристикам программы. Отображение надежности как индикатора качества программы. Тестирование не может показать отсутствие дефектов (оно может показывать только присутствие дефектов). Важно помнить это утверждение при проведении тестирования. Тестирование - важная часть любой программы контроля качества, а зачастую и единственная. Это печально, так как разнообразные методики совместной разработки позволяют находить больше ошибок, чем тестирование, и в то же время обходятся более чем вдвое дешевле в расчете на одну обнаруженную ошибку. Каждый из отдельных этапов тестирования (блочное тестирование, тестирование компонентов и интеграционное тестирование) обычно позволяют найти менее 50% ошибок. Комбинация этапов тестирования часто приводит к обнаружению менее 60% ошибок. Основные понятия процесса тестирования Тестироваться могут самые разные представления знаний о разрабатываемой или сопровождаемой программе на любой фазе ее жизненного цикла. Это могут быть требования к программному продукту, cпецификации проекта или структур данных, фрагменты программного кода. В литературе имеется несколько различных определений понятия “тестирование”. Будем использовать следующее: Определение. Тестирование – это контролируемое выполнение программы на конечном множественаборов данных и анализ результатов этого выполнения с целью обнаружения ошибок. Часто тестирование программы в соответствии с этим определением называют динамическим тестированием, а статический анализ, не требующий выполнения программы (просмотр, инспекция), – статическим тестированием. Принято выделять методы тестирования и критерии тестирования программного продукта. Определение. Методы тестирования – это совокупность правил, регламентирующих последовательность шагов по тестированию. Определение. Критерии тестирования – соображения, позволяющие судить о достаточности проведенного тестирования. Под ошибкой принято понимать различие между вычисленным, обозреваемым или измеренным значением или условием и действительным, специфицированным или теоретически корректным значением или условием, т.е. в программе имеется ошибка, если ее выполнение не оправдывает ожиданий пользователя. Любой программный продукт – от простейших приложений до сложных комплексов реального времени, – вряд ли можно считать свободным от ошибок. Результативным (удачным) считаетсятест, прогон которого привел к обнаружению ошибки. Из данного свойства теста вытекает важное следствие: тестирование – процесс деструктивный (обратный созидательному, конструктивному). Именно этим объясняется, почему многие считают его трудным. Большинство людей склонны к конструктивному процессу созидания объектов и в меньшей степени – к деструктивному процессу. При существующих в реальной работе ограничениях на время, стоимость, надежность и т.п. разработки программного продукта ключевым являетсяследующий вопростестирования: Какое подмножество всех возможных тестов имеет наивысшую вероятность обнаружения большинства ошибок? Определение. Тест – это набор входных значений, условий выполнения и ожидаемых значений на выходе, разработанных для проверки конкретного пути выполнения программы. Программный продукт, как объект тестирования, имеет ряд особенностей, которые отличают процесс тестирования программного обеспечения от традиционного, исторически ранее появившегося “аппаратного” тестирования: отсутствие полностью определенного единого эталона, которому должны соответствовать все результаты тестирования проверяемой программы; На практике для тестирования используются в качестве эталонов косвенные данные, которые не полностью отражают функции и характеристики программ. высокая сложность программ и принципиальная невозможность построения тестовых наборов, достаточных для исчерпывающего тестирования; Комплексы программ, используемые для управления и обработки информации, являются одними из самых сложных изделий, создаваемых человеком. При существующей сложности программ недостижимо исчерпывающее их тестирование, гарантирующее абсолютно полную проверку. Поэтому тестирование проводится в объемах, минимально необходимых для проверки программ в некоторых ограниченных пределах изменения параметров и условий функционирования. Ограниченность ресурсов тестирования привела к необходимости тщательного упорядочивания применяемых методов и конкретных значений параметров с целью получения при тестировании наибольшей глубины проверок программ. Это определяет необходимость применения экономичных и эффективных методов тестирования. наличие в программах вычислительных и логических компонент, а также компонент, характеризующихся стохастическим и динамическим поведением; В сложных программных комплексах практически всегда имеются компоненты, осуществляющие преобразования данных. Кроме того, значительную часть программ составляют схемы принятия логических решений, обработки логических и символьных переменных. В ряде случаев процесс исполнения программ и получаемые результаты зависят от случайного изменения входных и промежуточных данных, а также от реального времени. относительно невысокая степень формализации критериев завершения процесса тестирования и оценки качества тестирования. Показатели качества сложных комплексов программ трудно формализуются и еще более трудно измеряются. Вследствие этого качество процесса тестирования программ и достигаемая при этом их корректность остаются весьма неопределенными и незарегистрированными. Оценки полноты тестирования и достигаемого при этом качества программ обычно получаются в процессе испытаний и сопровождения программ. Подытоживая перечисленные выше особенности тестирования программного продукта, необходимо подчеркнуть невозможность создания единственного универсального метода тестирования. +На практике приходится применять ряд значительно различающихся методов и критериев тестирования. Каждая категория тестов отличается целевыми задачами тестирования, проверяемыми компонентами программ и методами оценки результатов. Только совместное и систематическое применение различных методов тестирования и категорий тестов, базирующихся на различных критериях тестирования, позволяет достичь высокого качества функционирования средних и сложных программных комплексов со средней или большой длительностью эксплуатации, имеющих большой размер исходного кода (105 - 107 строк в программе). Сформулируем основные принципы тестирования: Описание предполагаемых значений выходных данных или результатов должно быть неотъемлемой частью теста. Следует избегать тестирования программы ее автором; тестирование является более эффективным, если оно выполняется не автором программы, но отладка программы обычно более эффективно выполняется авторами. Организация не должна сама тестировать разработанные ею программные продукты. Необходиимо досконально изучать результаты применения каждого теста. Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных данных. Необходимо проверять программу на нежелательные побочные эффекты. Не следует выбрасывать тесты, даже если программа уже не нужна. Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены. Вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части. Объекты тестирования Известно, что существует несколько различных моделей жизненного цикла программного обеспечения, отличающихся друг от друга некоторыми деталями. При этом представление программы на разных фазах ЖЦ изменяется в соответствии с поэтапным изменением программ от уровня первичных целей и алгоритмов до уровня завершенного эксплуатируемого и сопровождаемого программного продукта. С точки зрения тестирования наиболее значимыми являются следующие объекты программного проекта: спецификации программных модулей, групп программ и программных комплексов; программные модули (код программных модулей); группы программ, решающие законченные функциональные задачи; комплексы программ, для которых завершены все виды отладки; программные средства, подлежащие испытаниям перед сдачей в эксплуатацию; сопровождаемый программный продукт до завершения его жизненного цикла. Эти объекты различаются сложностью тестирования, уровнем теоретической разработки методов и существующей степенью автоматизации процесса тестирования. Наиболее формализованным является тестирование спецификаций, которые содержат “наименьшее количество информации” о программах среди всех рассматриваемых объектов. По мере перехода от модуля к группе и комплексу программ сложность тестирования каждого отдельного объекта быстро возрастает. Тестирование ПО при комплексной отладке, испытаниях и сопровождении по степени сложности примерно одинаково. Следует отметить, что интегральная сложность (и, соответственно, трудоемкость) тестирования всей совокупности программных модулей, входящих в комплекс, может быть выше, чем сложность тестирования при испытаниях и сопровождении Уровень теоретической разработки методов тестирования значительно зависит от объектов. Наиболее полно в настоящее время исследованы методы тестирования программных модулей и небольших групп программ, написанных с использованием процедурных языков программирования. Менее исследованными остаются методы и теория тестирования групп программ, написанных с использованием объектно-ориентированных языков программирования. Мало исследованными являются методы и теория тестирования в процессе отладки, испытаний и сопровождения крупных комплексов программ. +Степень автоматизации тестирования или, точнее, относительные затраты на его обеспечение значительно возрастают по мере увеличения сложности объектов тестирования. Автоматизация тестирования отстает от потребностей практики. Наиболее автоматизировано тестирование модулей и групп программ, написанных с использованием процедурных языков программирования. Категории тестов для различных объектов тестированияНа разных этапах ЖЦ программного обеспечения для каждой категории объектов тестирования ставятся свои задачи тестирования и, соответственно, применяются свои виды тестирования и категории тестов. Каждая категория имеет специфическое, частное назначение для выявления ошибок определенного класса. Для описанных выше объектов тестирования выделяются следующие категории тестов: На этапе тестирования спецификаций: полноты и согласованности функций программных компонент; согласованности интерфейса в спецификациях программных компонент. На этапе тестирования программных модулей: структуры программного модуля; вычислений и преобразований данных программным модулем; полноты функций, выполняемых модулем. На этапе тестирования функциональных групп программ: структуры группы программ; межмодульного интерфейса в группе программ; выполнения ограничений по использованию памяти и длительности исполнения группы программ; полноты решения функциональных задач группой программ. На этапе тестирования комплекса программ при отладке: полноты решения функциональных задач комплексом программ для типовых исходных данных; функционирования программ в критических ситуациях по условиям и логике решения задач; корректности использования ресурсов памяти и производительности вычислительной системы; параллельного (одновременного) исполнения различных программ; эффективности защиты от искажения входных данных; определения надежности комплекса программ; оценки эффективности защиты от сбоев аппаратуры и не выявленных ошибок программ. На этапе тестирования комплекса программ при испытаниях: испытаний на соответствие комплекса программ техническому заданию; удобства эксплуатации и взаимодействия человека с комплексом программ; удобства установки и подготовки рабочей версии; работы комплекса программ при конфигурациях оборудования; корректности документации; удобства сопровождения и модификации программ. Тестирование при сопровождении комплекса программ осуществляется с использованием практически всех выше перечисленных категорий тестов, характерных для разработки и испытаний комплекса программ. С этой позиции сопровождение является повторением процесса создания программ или его отдельных этапов. Однако при. сопровождении редко применяется вся совокупность систематизированных категорий тестов. Применение перечисленных выше категорий тестов зависит от класса разрабатываемых программ. Организация и эффективное проведение обширного систематического тестирования требуют больших затрат и высокой квалификации специалистов, которые в области тестируемых программ должны иметь квалификацию не ниже, чем их разработчики. Одним из общих принципов тестирования ПО является проведение работ по тестированию в течение всего ЖЦ. Контрольные вопросы Определите понятие тестирования. Что такое тест? Поясните содержание процесса тестирования. Какие задачи решает тестирование? Каких задач не решает тестирование? Методы тестирования. Критерии тестирования. Определение ошибки. Какой тест считается результативным? Особенности программного продукта, как объект тестирования. Основные принципы тестирования. Объекты программного проекта. Категории тестов. |