Файл: Отладка и тестирование программ:Основные подходы и ограничения ( РАЗРАБОТКА ПРОГРАММ ).pdf
Добавлен: 01.04.2023
Просмотров: 258
Скачиваний: 2
СОДЕРЖАНИЕ
Существует целый ряд причин возникновения ошибок в программах:
- процесс проектирования – преобразование и детализация различных представлений. Ошибки могут вноситься на любом из этапов, имея накопительный эффект. Главной причиной здесь является высокая сложность грамотного процесса проектирования программного обеспечения;
- ошибки, вносимые на этапе кодирования – в большинстве случаев эти ошибки вызваны невнимательностью разработчиков и неправильной трактовкой исходных требований.
Всего существует два вида ошибок в программном обеспечении:
- функциональные – нарушения программной спецификации – несоответствие каким-либо заявленным требованиям. Такие ошибки ведут к ухудшению функциональности (точности и пригодности);
- нефункциональные – нарушение правил языка программирования, а также некорректное использование библиотечных функций. Такие ошибки являются причинами снижения надежности и ухудшения функциональности. Примеры таких ошибок:
- ошибки использования неинициализированных указателей;
- утечки памяти;
- игнорируемые участки кода;
- отсутствие инициализации интервальных переменных;
- выход за границы диапазонов;
- отсутствие проверки возвращаемых значений и т.п.
Программные ошибки обладают собственным жизненным циклом, который состоит из следующих этапов:
- действие программиста, которое приводит к возникновению ошибки – незнание, опечатка, неверное понимание функциональных особенностей;
- программная ошибка – совокупность конструкций исходного кода, способных привести к некорректным действиям;
- срабатывание ошибки – возникновение таких условий в рамках программного кода, при которых выполняются некорректные действия;
- проявление ошибки – негативное влияние ошибки на работоспособность программного обеспечения – аварийное завершение, получение некорректных результатов и т.п. [16]
Принято выделять несколько категорий тяжести ошибки в программном обеспечении, нарушение работоспособности которого могут привести к катастрофическим последствиям:
- катастрофическая – высокая вероятность прекращения функционирования системы в случае возникновения ошибки. Может вызвать повреждение не только системы, но и окружающей среды, а также привести к тяжелым травмам и гибели людей;
- критическая – высокая вероятность прекращения функционирования системы в случае возникновения ошибки. Может вызвать повреждение не только системы, но и окружающей среды, однако, не угрожает здоровью и жизни людей;
- существенная – наблюдается снижение эффективности функционирования программного продукта в случае возникновения ошибки. Может вызвать прекращение работы программного обеспечения без заметных повреждений в системе. Не угрожает здоровью и жизни людей;
- несущественная – может наблюдаться снижение эффективности функционирования программного продукта в случае возникновения ошибки. Практически не приводит к возникновению отказа [7].
Для оценки надежности программных продуктов применяются различные методы:
- динамические – опираются на результаты выполнения программы. Такие методы позволяют получать абсолютные показатели надежности, однако они характеризуются высокой трудоемкостью сбора исходных данных, используют упрощающие предположения о взаимном влиянии ошибок, а также сильно зависят от качества и объема исходных данных;
- статические – опираются на анализ различных артефактов, полученных на этапе проектирования. Такие методы характеризуются низкой трудоемкостью, они позволяют выполнять оценку автоматически. Минус данных методов в сложности реализации, а также в том, что они не обеспечивают абсолютных показателей надежности;
- архитектурные – базируются на анализе архитектуры всей системы, могут включать в себя как статические, так и динамические подходы;
- эмпирические – методы, полученные только на базе информации о процессе проектирования.
Все эти методы обладают общими свойствами:
- универсальность по отношению к различным программам;
- универсальность по отношению к различным условиям эксплуатации программного обеспечения;
- стадии применения метода;
- требуемый набор исходных данных;
- сложность получения оценки;
- точность и достоверность оценки [12].
2.3. Отладка программ
Отладкой принято называть процесс локализации (определения оператора программы, выполнение которого приводит к нарушению вычислительного процесса) и исправления ошибок, выявленных на этапе тестирования программного продукта. Для исправления ошибки важно понять ее причину. Процесс отладки требует от программиста глубоких знаний специфики управления используемыми техническими средствами, операционной системы, среды и языка программирования, реализуемых процессов, природы и специфики ошибок, методик отладки и соответствующих программных средств.
Стоит отметить, что четко сформулированные методики отладки отсутствуют. В общем случае принято различать три вида ошибок:
- синтаксические – данный вид ошибок обязательно сопровождается комментарием со стороны среды разработки (компилятора или транслятора), в котором указывается их местоположение;
- ошибки компоновки - выявляются компоновщиком (редактором связей) при объединении модулей программы в одно целое;
- ошибки выполнения – это такие ошибки, которые могут быть выявлены аппаратными средствами, операционной системой или пользователем при выполнении программы. Данная группа ошибок является наиболее сложной в силу того, что они проявляются самыми разными способами. Ошибки выполнения также можно поделить на несколько групп:
- ошибки определения исходных данных (ошибки передачи, ошибки преобразования, ошибки перезаписи и ошибки данных);
- логические ошибки проектирования (неверный алгоритм, неприменимый метод, некорректная структура данных и т.п.) и кодирования (ошибки некорректного использования переменных, вычислений, межмодульного интерфейса, реализации алгоритма, другие);
- ошибки накопления погрешностей результатов вычислений (игнорирование ограничений разрядной сетки и способов уменьшения погрешности).
Стоит отметить, что в любом случае отладка программы предполагает обдумывание и логическое осмысление всей имеющейся информации об ошибке. Большое количество ошибок может быть обнаружено по косвенным признакам с помощью тщательного анализа программного кода и результатов тестирования без получения дополнительной информации с помощью различных методов:
- ручное тестирование – предполагает тестирование пользователями вручную. В случае обнаружения ошибки отладка заключается в выполнении тестируемой программы вручную на некотором тестовом наборе, при работе с которым была зафиксирована ошибка;
- индукция – метод, основанный на тщательном анализе симптомов ошибки, которые могут проявляться в качестве неверных результатов вычислений или появляющихся сообщений об ошибках в процессе выполнения;
- дедукция – метод, при котором сперва формируется множество причин, способных вызвать определенное проявление ошибки, после чего производится анализ причин, и исключаются те, которые противоречат имеющимся данным;
- обратное прослеживание – метод, применяемый для точки вывода неверного результата. При этом выдвигается некоторая гипотеза о значениях основных переменных, способных привести к получению данного результата, а затем, исходя из этой гипотезы, делаются предположения о значениях переменных в предыдущей точке.
Для получения дополнительной информации об ошибке реализуется добавочное тестирование и применяются специальные методы и средства, например:
- интегрированные средства отладки;
- отладочный вывод;
- независимые отладчики.
Общая методика отладки программных продуктов, написанных для выполнения в операционных системах семейства Microsoft Windows может быть описана последовательностью шагов:
- 1 шаг - изучение проявления ошибки;
- 2 шаг – локализация ошибки;
- 3 шаг - выяснение причины ошибки;
- 4 шаг — исправление ошибки;
- 5 шаг - повторное тестирование.
Процесс отладки может быть существенно упрощен, если при его выполнении следовать основным рекомендациям структурного подхода к программированию:
- программу наращивать «сверху-вниз», от интерфейса к обрабатывающим подпрограммам, тестируя ее по ходу добавления подпрограмм;
- выводить пользователю вводимые им данные для контроля и проверять их на допустимость сразу после ввода;
- предусматривать вывод основных данных во всех узловых точках алгоритма (ветвлениях, вызовах подпрограмм) [13].
2.4. Выводы
В рамках данной главы рассмотрены виды тестирования, а также способы отладки.
ЗАКЛЮЧЕНИЕ
В рамках выполнения данной работы была раскрыта тема «Отладка и тестирование программ: основные подходы и ограничения».
В первой главе описываются основные процессы разработки программного обеспечения, которые принято делить на три группы:
- основные;
- вспомогательные;
- организационные.
К основным процессам разработки относятся:
- приобретение;
- поставка;
- разработка;
- эксплуатация;
- сопровождение.
Также в первой главе дается понятие термину «тестирование» - процесс исполнения программного кода с целью обнаружения ошибок. Важно различать процессы тестирования и отладки. Отладка не является частным случаем тестирования. Процесс отладки направлен на установление точной природы известной ошибки, а затем на исправление этой ошибки. Эти два вида деятельности связаны, т.к. результаты тестирования являются исходными данными для отладки.
Вторая глава работы посвящена непосредственно тестированию. Здесь рассмотрены основные виды тестирования:
- тестирование программы как черного ящика;
- тестирование программы как белого ящика.
Также уделяется внимание тестированию надежности. Данное понятие определяет следующие свойства программного продукта:
- стабильность – совокупность свойств программного продукта, которые определяют частоту отказов, вызванных ошибками исходного кода;
- устойчивость – совокупность свойств программного продукта, отражающих его способность поддерживать требуемый уровень пригодности в случае возникновения программных ошибок или нарушении определенного интерфейса;
- восстанавливаемость – совокупность свойств программного продукта, характеризующая его возможность восстанавливать уровень качества функционирования в случае отказа.
Отдельно рассматривается понятие отладки, а также описаны основные способы отладки:
- ручное тестирование;
- индукция;
- дедукция;
- обратное прослеживание.