- •1.Проблемы создания больших программ.
- •2. Основные понятия
- •3. Состав жизненного цикла по
- •1.Анализ требований
- •4.Стандартизация процессов жизненного цикла программ
- •5. Модели жизненного цикла программного обеспечения.
- •6.Техническое задание на разработку.
- •7.Документирование программ.
- •8.Выбор архитектуры по.
- •9.Структурный и объектный подходы к разработке программ.
- •10. Метод структурного анализа и проектирования sadt (idef0)
- •11. Диаграммы потоков данных dfd.
- •12. Диаграмма сущность – связь erm
- •13. Методы объектно-ориентированного анализа и проектирования. Язык uml.
- •14. Методы разработки структуры программной системы
- •15.Выбор языка программирования. Стиль программирования.
- •16.Защитное программирование.
- •17.Тестирование и отладка
- •18.Типичные ошибки
- •19.Отладка программных продуктов
- •20.Ввод в зксплуатацию
- •21.Ускорение разработки по. Технология rad
- •22. Экстремальное программирование
18.Типичные ошибки
В соответствии с этапом реализации ПО, на котором проявляются ошибки, различают несколько разных типов ошибок.
Синтаксические ошибки — ошибки, фиксируемые компилятором (транслят0р0м, интерпретатором) при выполнении синтаксического, частично семантического анализов проги.
Ошибки компоновки — ошибки, обнаруженные компоновщиком и редактором связей) при объединении модулей программы. Ошибки выполнения — ошибки, обнаруженные ОС, аппарат.ср-вами илиюзеромм при ввыполнении проги.
Синтаксические ошибки относят к группе самых простых, так как синтаксис языка, как правило, строго формализован, и ошибки сопровождаются развернутым комментарием с указанием ее местоположения. Определить причины таких ошибок несложно: если при нечетком знании правил языка за несколько прогонов удается удалить все ошибки данного типа. Т.о., чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего кол-ва может обнаружить компилятор и меньше ошибок будет обнаружено на следующих этапах. В связи с этим говорят о языках прогр-ния с защищенным и незащищенным синтаксисом. К первым относят язык Pascal, имеющий очень простой и четко определенный синтаксис, хорошо проверяемый при компиляции проги, ко вторым — язык С со всеми его модификациями. Пример:
if (с = n) х = 0;
В данном случае не проверяется равенство с и n, а выполняется присваивание с значения n, после чего резалт операции сравнивается с нулем. Если прогр-ст хотел выполнить не присваивание, а сравнение, то эта ошибка будет обнаружена только на этапе выполнения при получении резалтов, отличающихся от ожидаемых.
Существует ряд языков (напр., Фортран), где новые переменные можно вводить автоматически, без декларации. Такая возможность дает еще один источник синтаксических ошибок. Как обнаружить незаконное исполь-ние объявл.переменной, что перепутаны имена? Многие системы прогр-ния позволяют вывод таблицы перекрестных ссылок, т. е. таблицы, содержащей список идентиф-ров и номеров строк, где идентиф-оры встретились. Анализ таблицы перекрестных ссылок дает возм-сть легко обнаруживать такие ситуации.
Ошибки компоновки связаны с проблемами, обнаруженными при разрешении внешних ссылок. Напр, предусмотрено обращение к подпроге другого модуля, а при объединении модулей данная подпрога не найдена или не стыкуются списки параметров. В больш-ве случаев ошибки такого рода также удается быстро локализовать и устранить. Несколько сложнее устранить ошибку компоновки, возникающую в случае, когда в двух или более модулях программы объявлено одно и то же имя процедуры и все эти процедуры имеют одинаковый состав и тип параметров. Такие ошибки тоже могут проявиться только на этапе выполнения в виде неверного резалта. Тщательный анализ таблицы перекрестных ссылок может помочь и в этом случае.
Ошибки выполнения относят к самой непредсказ.группе, поскольку могут иметь разную природу, и соотв-но по-разному проявляться. Часть ошибок обнаруживается и документируется ОС. 4 способа проявления таких ошибок:
1. появление сообщения об ошибке, зафиксир-ной схемами контроля выполнения машинных команд, о переполнении разрядной сетки, ситуации «деление на ноль», нарушении адресации и т. п.;
2. появление сообщения об ошибке, обнаруженной ОС, напр. о нарушении защиты памяти, попытке записи на устр-ва, защищ-ые от записи, отсутствии файла с заданным именем и т. п.;
3. «зависание» ПК, которое может быть вызвано, напр., наличием бесконечного цикла в проге, чрезмерной загрузкой проца вычислениями или бесконечным ожиданием освобождения ресурса, блокированного другой прогой;
4. несовпадение полученных резалтов с ожидаемыми.
Причины ошибок выполнения очень разнообразны, а потому и локализация может оказаться крайне сложной. Все возможные причины ошибок можно разделить на следующие группы:
1. неверное определение исходных данных;
2. логические ошибки;
3. накопление погрешностей результатов вычислений.
Неверное определение исходных данных происходит, если возникают любые ошибки при выполнении операций ввода-вывода: ошибки передачи, преобразования, перезаписи и данных. Причем использование специальных техн.ср-тв и прогр-ние с защитой от ошибок позволяют обнаружить и предотвратить только часть этих ошибок. Лог.ошибки имеют разную природу. Так, они могут следовать из ошибок, допущенных при проектировании, например при выборе методов, разработке алгоритмов или определении структуры классов, а могут быть непоср-но внесены при кодировании модуля. К последней группе относят следующие ошибки:
1. некорректного исполь-ия переменных: неудачный выбор типов данных; исполь-ие переменных до их инициализации, исполь-ие индексов, выходящих за границы опред-ия массивов, нарушения соответствия типов данных при исполь-ии явного или неявного переопред-ия типа данных, располож-ых в памяти при исполь-ии нетипизир.переменных, открытых массивов, объединении, динам.памяти, адресной арифметики и т. д.;
2. вычислений: некорректные вычисления над неарифмет.переменными; некорректные исполь-ие целочисл.арифметики и преобр-ие типов данных в процессе вычислений; ошибки, связанные с незнанием приоритетов выполнения операций для ариф. и лог. выражений и т. п,;
3. межмодульного интерфейса: игнор системных соглашений, нарушение типов и послед-ти при передаче параметров, несоблюдение единства единиц измерения формал. и факт. параметров, нарушение области действия локальных и глобальных переменных;
кодирования: неправильная реал-ия логики проги при кодир-ии, игнор особ-тей или огран-ний конкр.языка прогр-ия.
Накопление погрешностей резалтов числ.вычислений возникает, например, при некорр.отбрасывании дробных цифр чисел, некорр.исполь-ии приближ.методов вычислений, игноре ограничения разрядной сетки предст-ия веществ.чисел в ЭВМ и т. п.
Все перечисл-ые выше причины возник-ия ошибок следует иметь в виду в процессе отладки. Кроме того, сложность отладки растёт также вследствие влияния следующих факторов:
1.опосред-ного проявления ошибок;
2.возможности взаимовлияния ошибок;
3. возможности получения внешне одинаковых проявлений разных ошибок;
4.отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску(стохастические ошибки);
5. возможности устранения внешних проявлений ошибок в исследуемой ситуации при внесении некоторых изменений в прогу, например при включении в программу диагност.фрагментов может аннулироваться или измениться внешнее проявление ошибок;
6. написания отдельных частей программы разными прогр-ми.
Инспекции исходного текста '
- набор процедур и приемов обнар-ия ошибок при изучении текста группой спецов, в которую входят: автор проги, проектировщик, специалист по тест-ию и координатор — компетентный прогр-ст, но не автор проги. Метод сквозного просмотра не заменяет машинное тест-ие. Скорее их следует рассматривать как взаимодоп.ср-ва. Наибольший эффект достигается при их одноврем.применении.
Общая процедура инспекции предполагает следующие операции. Участникам группы заранее выдается листинг проги и специф-ия на нее. Далее прогр-ст рассказывает о логике работы проги и отвечает на ??? инспекторов, затем прогу анализируют эксперты по списку ??? для выявления истор-ки сложившихся общих ошибок прогр-ия.
Список ??? для инспекций исходного текста зависит как от исполь-ого языка прогр-ия, так и от специфики разрабат-ого ПО. В качестве примера ниже приведен список вопросов, который можно использовать при анализе правильности программ.
1. Контроль обращений к данным:
2. Контроль вычислений:
3. Контроль передачи управления:
4. Контроль межмодульных интерфейсов:
Кроме непосредств.обнар-ия ошибок, резалты инспекции позволяют прогр-ту увидеть другие сделанные им ошибки, получить возм-сть оценить свой стиль прогр-ия, выбор алгоритмов и методов тестир-ия. Инспекция - способ раннего выявления частей проги, с большей вероят-ю содержащих ошибки, что позволяет при тестир-ии уделить внимание именно этим частям.