Тестирование и отладка программного обеспечения кратко

Обновлено: 30.06.2024

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

Основные термины

Тестирование (testing) – процесс выполнения программы с целью найти ошибки. Может выполняться как с компьютером, так и без него (общий термин).
Доказательство (proof) – попытка найти в программе ошибки путем доказательств на основе математических теорем о правильности программы безотносительно к внешней программной среде (вид тестирования).
Контроль (verification) – попытка найти ошибки, выполняя программу в тестовой или моделируемой среде (вид тестирования).
Испытание (validation) – попытка найти ошибки, выполняя программу в заданной программной среде (вид тестирования).
Аттестация (certification) – авторитетное подтверждение правильности программы (итоговое тестирование, для критичного ПО).

Отладка (debugging) – средство установления точной природы ошибок, процесс, противоположный тестированию, ведет к устранению ошибок.

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

Автономное тестирование, тестирование модуля (module testing) – контроль отдельного модуля в изолированной среде (например, с помощью ведущей программы), инспекция текста модуля на сессии программистов, которая иногда дополняется математическим доказательством правильности модуля.
Тестирование сопряжений (integration testing) – контроль сопряжений между частями системы, как между компонентами в комплексе, так и между модулями отдельного компонента (например, у заглушки).
Комплексное тестирование (system testing) – контроль и/или испытание системы по отношению к исходным целям. Является процессом контроля, если оно выполняется в моделируемой среде, и процессом испытания в реальной среде.

ПРИНЦИПЫ (аксиомы) тестирования

Мои примечания к аксиомам тестирования:

Связь процесса тестирования с процессом проектирования ПО

В процессе проектирования ПО обычно принимаются следующие решения:

Как вы видите, процесс непосредственного кодирования не включен в проектирование.

Процессы тестирования (в скобках указаны номера связанных с ними процессов проектирования):

1. Автономный тест (6, 7)
2. Тест сопряжений (4, 5)
3. Тест функций (3)
4. Комплексный тест (2)
5. Тест приемлемости (1)

Тестирование ПО включает:

1) постановку задачи;
2) проектирование тестов;
3) написание тестов;
4) тестирование тестов;
5) выполнение тестов;
6) изучение результатов тестирования.

Два крайних подхода к проектированию тестов:

  • Каждая команда – хотя бы один раз;
    Каждый условный переход – в каждом направлении хотя бы раз;
    Цикл – ни разу, один раз, максимальное число раз.

Две стратегии тестирования: восходящее и нисходящее

Восходящее тестирование – от отдельных модулей по мере их готовности (в том числе отдельных функций) к тестированию форм и ПО в целом.
Нисходящее тестирование начинается с тестирования структуры ПО и с последующим тестированием модулей.
Реально используются комбинации обеих стратегий в зависимости от сложности ПО.

Критерии выбора стратегии тестирования

Время до полной сборки программы
Время реализации скелета программы
Имеющийся инструментарий проектирования
Мера параллелизма ранних этапов реализации
Возможность проверки в реальных условиях эксплуатации

Отладка

После цикла тестирования начинается цикл отладки программы.

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

Далее выдвигается гипотеза, которая проверяется после изменения программного кода.

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

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

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

Отладка программы

В современных системах программирования (например, Turbo C, Turbo Pascal, Turbo Basic и др.) отладку осуществляет зачастую специальное программное средство – отладчик, который позволяет исследовать внутреннее поведение программы.

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

При выполнении отладки программы нужно придерживаться следующих правил:

  • на начальном этапе проведения отладки нужно использовать простые тестовые данные;
  • возникающие ошибки устранять строго по очереди;
  • помнить, что причина ошибок – не машина. Современные ПК и программы-трансляторы наделены достаточно высокой надежностью.

Готовые работы на аналогичную тему

Тест и тестирование

Если программа прошла отладку и явные ошибки не выявляются, пригодность программы для работы, которая является решающей характеристикой, устанавливает контроль программы по результатам ее выполнения на системе тестов.

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

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

Тестовые данные

Обеспечение проверки всех возможных условий возникновения ошибок должно ложится на правильно подобранные тестовые данные:

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

Рассмотрим на примере систему тестовых данных для задачи нахождения корней квадратного уравнения ax^2+bx+c=0:

Этапы процесса тестирования

Процесс тестирования зачастую делится на 3 этапа:

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

При подготовке тестовых данных и проведении тестирования нужно учитывать следующие моменты:

  • каким будет результат работы программы, которая не рассчитана на обработку отрицательных или нулевых значений переменных, в случае обработки таких данных?
  • каков будет результат работы программы, которая обрабатывает массивы, если число их элементов превысит величину, указанную в объявлении массива?
  • что произойдет в случае слишком малых или слишком больших чисел?

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

Отладка программы — один их самых сложных этапов разработки программного обеспечения, требующий глубокого знания:

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

• среды и языка программирования,

• природы и специфики различных ошибок,

• методик отладки и соответствующих программных средств.

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

В целом сложность отладки обусловлена следующими причинами:

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

• психологически дискомфортна, так как необходимо искать собственные ошибки и, как правило, в условиях ограниченного времени;

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

• отсутствуют четко сформулированные методики отладки.

В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 10.1):


синтаксические ошибки - ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы; ошибки компоновки - ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;

ошибки выполнения - ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.

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

Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества может обнаружить компилятор и, соответственно, меньше ошибок будет обнаруживаться на следующих этапах. В связи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, имеющий очень простой и четко определенный синтаксис, хорошо проверяемый при компиляции программы, ко вторым - Си со всеми его модификациями. Чего стоит хотя бы возможность выполнения присваивания в условном операторе в Си, например:

if (c = n) x = 0; /* в данном случае не проверятся равенство с и n, а выполняется присваивание с значения n, после чего результат операции сравнивается с нулем, если программист хотел выполнить не присваивание, а сравнение, то эта ошибка будет обнаружена только на этапе выполнения при получении результатов, отличающихся от ожидаемых */

Ошибки компоновки. Ошибки компоновки, как следует из названия, связаны с проблемами,

обнаруженными при разрешении внешних ссылок. Например, предусмотрено обращение к подпрограмме другого модуля, а при объединении модулей данная подпрограмма не найдена или не стыкуются списки параметров. В большинстве случаев ошибки такого рода также удается быстро локализовать и устранить.

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

• несовпадение полученных результатов с ожидаемыми.

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

• неверное определение исходных данных,

• накопление погрешностей результатов вычислений (рис. 10.2).

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

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

К последней группе относят:

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

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

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

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

Н а к о п л е н и е п о г р е ш н о с т е й результатов числовых вычислений возникает, например, при некорректном отбрасывании дробных цифр чисел, некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.

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

опосредованного проявления ошибок;

возможности взаимовлияния ошибок;

возможности получения внешне одинаковых проявлений разных ошибок;

отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску – так называемые стохастические ошибки;

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

написания отдельных частей программы разными программистами.

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

ручного тестирования;

обратного прослеживания.

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

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

Данный метод часто используют как составную часть других методов отладки.

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

В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.

Метод дедукции. По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем анализируя причины, исключают те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе - проверяют следующую причину (рис. 10.4).

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

Разница между тестированием и отладкой - Разница Между

Разница между тестированием и отладкой - Разница Между

Содержание:

главное отличие между тестированием и отладкой является то, что тестирование - это процесс обнаружения и обнаружения дефектов программного обеспечения, а отладка - это процесс устранения выявленных дефектов.

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

Ключевые области покрыты

1. Что такое тестирование
- определение, функциональность
2. Что такое отладка
- определение, функциональность
3. В чем разница между тестированием и отладкой
- Сравнение основных различий

Основные условия

Отладка, функциональное тестирование, нефункциональное тестирование, тестирование программного обеспечения


Что такое тестирование

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


Существует два основных типа тестирования. Это функциональное тестирование и нефункциональное тестирование. Функциональное тестирование проверяет, что программное обеспечение достигло ожидаемого уровня. Модульное тестирование используется для проверки работоспособности каждого модуля. Это тестирование отдельных модулей. В отличие от других типов тестирования, модульное тестирование выполняется разработчиками, а не тестерами. Интеграционное тестирование - это тестирование двух модулей. Он проверяет поток данных между двумя модулями. Системное тестирование - это тестирование всего программного обеспечения. Это некоторые распространенные типы функционального тестирования. Нефункциональное тестирование проверяет нефункциональные аспекты системы, такие как производительность, нагрузка, масштабируемость, удобство использования и т. д.

Что такое отладка

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

Разница между тестированием и отладкой

Определение

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

Основная задача

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

В исполнении

Кроме того, тестирование выполняется командой тестирования, а отладка - командой разработчиков.

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

Способ выполнения

Хотя тестирование может быть выполнено вручную или автоматически, отладка выполняется вручную.

Заключение

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

Ссылка:

Читайте также: