Главная страница
Навигация по странице:

  • Ошибки, которые не обнаруживает транслятор

  • Ошибки в выборе алгоритма.

  • Семантические (смысловые) ошибки

  • Лекция 5.1-21 Виды ошибок. Синтаксические ошибки


    Скачать 56.16 Kb.
    НазваниеСинтаксические ошибки
    Дата18.04.2023
    Размер56.16 Kb.
    Формат файлаdocx
    Имя файлаЛекция 5.1-21 Виды ошибок.docx
    ТипПрограмма
    #1071478

    Виды ошибок

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



    Синтаксические ошибки

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

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

    Примерами синтаксических ошибок является:

    • Отсутствие знака пунктуации;

    • Несоответствие количества открывающих и закрывающих скобок;

    • Неправильно сформированный оператор;

    • Неправильная запись имени переменной;

    • Ошибка в написании служебных слов;

    • Отсутствие условия окончания цикла;

    • Отсутствие описания массивов и т.п.

    Ошибки, которые не обнаруживает транслятор

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

    Логические ошибки:

    • После проверки заданного условия неправильно указана ветвь алгоритма;

    • Неполный перечень возможных условий при решении задачи;

    • Один или более блоков алгоритма в программе пропущен.

    Ошибки в циклах:

    • Неправильно указано начало цикла;

    • Неправильно указаны условия окончания цикла;

    • Неправильно указано количество повторений цикла;

    • Использование бесконечного цикла.

    Ошибки ввода-вывода; Ошибки при работе с данными:

    • Неправильно задан тип данных;

    • Организовано считывание меньшего или большего объёма данных, чем нужно;

    • Неправильно отредактированы данные.

    Ошибки в использовании переменных:

    Ошибки при работе с массивами:

    • Пропущено предварительное обнуление массивов;

    • Неправильное описание массивов;

    • Индексы массивов следуют в ошибочном порядке.

    Ошибки в арифметических операциях:

    • Неправильное использование типа переменной (например, для сохранения результата деления используется целочисленная переменная);

    • Неправильно определён порядок действий;

    • Выполняется деление на нуль;

    • При расчёте выполняется попытка извлечения квадратного корня из отрицательного числа;

    • Не учитываются значащие разряды числа.

    Классификация ошибок

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

      - системные ошибки;

    -   ошибки в выборе алгоритма;

    -   алгоритмические ошибки;

    -   технологические ошибки;

    -   программные ошибки.

    Системные ошибки в большом (сложном) программном обес­печении определяются, прежде всего неполной информацией о реальных процессах, происходящих в источниках и потребителях информации.

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

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

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

    При автономной и в начале комплексной отладки ПО доля найденных системных ошибок в нем невелика (примерно 10%), но она существенно возрастает (до 35—40%) на завершающих этапах комплексной отладки. В процессе эксплуатации преоб­ладающими являются системные ошибки (примерно 80% всех ошибок). Следует отметить также большое количество команд и групп программ, которые корректируются при исправлении каждой системной ошибки.

    Ошибки в выборе алгоритма. В настоящее время накоплен значительный фонд алгоритмов для решения типовых задач.

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

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

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

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

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

    Некоторые программисты проверяют алгоритм следующим образом. Через несколько дней после составления алгоритма они повторно обращаются к описанию задачи и составляют алгоритм заново. Затем сличают оба варианта. Такой шаг на первый взгляд может показаться пустой тратой времени, однако всякая ошибка на уровне алгоритма может в дальнейшем обернуться катаст­рофой и повлечь основательный пересмотр программы.

    Технологические ошибки — это ошибки документации и фик­сирования программ в памяти ЭВМ. Они составляют 5—10 % от общего числа ошибок, обнаруживаемых при отладке. Боль­шинство технологических ошибок выявляются автоматически формализованными методами (например, транслятором).

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

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

    Семантика языка — это система правил истолкования пост­роений конструкций. Например, если фрагмент конструкции имеет вид А*(В + С), то правила семантики предписывают, что сначала выполняется сложение величин В и С, а затем результат умножается на величину А. Правила семантики (смысла) конст­рукций обычно вполне естественны и понятны, но в некоторых случаях их надо специально оговаривать, комментировать.

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

    Итак, выделяют синтаксические и семантические ошибки.

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

    Семантические (смысловые) ошибки — это применение опе­раторов, которые не дают нужного эффекта (например, а—в вместо а+в), ошибка в структуре алгоритма, в логической взаи­мосвязи его частей, в применении алгоритма к тем данным, к которым он неприменим и т.д. Правила семантики не фор­мализуемы. Поэтому поиск и устранение семантической ошибки и составляет основу отладки.

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

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

    Каждая программная ошибка влечет за собой необходимость изменения команд существенно меньше, чем при алгоритми­ческих и системных ошибках. На этапах комплексной отладки ПО и эксплуатации удельный вес программных ошибок падает и составляет примерно 15 и 30 % соответственно от общего коли­чества ошибок, выявляемых в единицу времени.



    написать администратору сайта