Определить тип синтаксической ошибки в программе
В предыдущих лекциях у вас было достаточно возможностей допустить ошибки в программах. В отличие от человеческих диалогов, которые обычно не зависят от случайных грамматических ошибок и неверного произношения, общение между разработчиком программного обеспечения и компилятором Microsoft Visual Basic требует точного соблюдения всех правил и ограничений языка программирования Visual Basic . В этой лекции рассказывается о дефектах программного обеспечения - багах (ошибках) - которые не дают запуститься программам на Visual Basic . Вы узнаете о различных типах ошибок, появляющихся в программах, и о том, какие инструменты отладки Visual Studio . NET предоставляет для обнаружения и исправления этих ошибок. Эти знания будут вам крайне необходимы при написании ваших собственных программ.
Поиск и исправление ошибок
Три типа ошибок
В программах на Visual Basic могут возникнуть три типа ошибок: синтаксические ошибки, ошибки времени исполнения и логические ошибки.
- Синтаксическая ошибка (или ошибка компиляции) - это программная ошибка (например, неправильно написанное имя свойства или ключевое слово), которая нарушает правила написания программ на Visual Basic. Visual Basic распознает некоторые типы синтаксических ошибок при вводе операторов программы и не позволит запустить программу до тех пор, пока вы не исправите их все.
- Ошибка времени исполнения - это ошибка, которая приводит к неожиданной остановке программы во время ее выполнения. Ошибки времени исполнения возникают, когда программа при выполнении останавливается из-за необнаруженной синтаксической ошибки. Ваш код сгенерирует ошибку времени исполнения, если вы, например, неправильно указали имя файла при использовании метода System.Drawing.Image.FromFile или при попытке считать данные с дисковода гибких дисков, когда в нем нет дискеты.
- Логическая ошибка - это человеческая ошибка - ошибка в программе, которая приводит к тому, что код программы выдает неверные результаты. Большинство усилий при отладке тратится именно на поиск и исправление логических ошибок, совершенных программистом.
Обнаружение логических ошибок
Поверите вы или нет, но этот тип ошибок наиболее распространен в программах на Visual Basic.
Отладка 101: использование режима останова
Одним из способов обнаружить логическую ошибку является выполнение кода вашей программы по одной строке и изучение изменения содержимого одной или нескольких переменных. Для этого можно при работе вашей программы войти в режим останова, а затем просмотреть код в Редакторе кода. Режим останова дает возможность просмотреть программу во время ее исполнения компилятором Visual Basic . Это похоже на то, как если бы вы стояли за спиной пилота и наблюдали за тем, как он ведет самолет. Но в нашем случае вы сами можете трогать рычаги управления.
При отладке вашего приложения используется панель инструментов Debug ( Отладка ) - специальная панель инструментов , предназначенная для поиска ошибок. Эта панель инструментов показана на следующей иллюстрации. Ее можно открыть, выбрав команду Toolbars (Панели инструментов) в меню View (Вид), а затем щелкнув на Debug ( Отладка ).
В следующем упражнении вы установите точку останова, и используете режим останова для обнаружения и исправления логической ошибки в структуре If. Then . Эта ошибка является частью нормальной программы. Чтобы выявить проблему, вы будете использовать кнопку Step Into (Шаг с заходом), расположенную на панели инструментов Debug ( Отладка ), а для изучения значений ключевых переменных и свойств программы окно Autos (Видимые). Обратите особое внимание на эту методику отладки. Ее можно использовать для обнаружения и исправления ошибок в ваших собственных программах.
Ошибки, которые обнаруживает компилятор, называют синтаксическими ошибками или ошибками компиляции. Синтаксические ошибки являются результатом ошибок в конструкции кода, таких как неправильное написание ключевого слова, пропуск необходимого знака пунктуации или использование открывающей фигурной скобки без соответствующей закрывающей фигурной скобки. Эти ошибки обычно легко обнаружить, поскольку компилятор говорит вам, где они находятся и что стало их причиной. Пример программы с синтаксической ошибкой:
Попытка компиляции приведённого кода:
Будет сообщено о четырёх ошибках, но в действительности программа содержит две ошибки:
- Во второй строке отсутствует ключевое слово void перед main
- Строка Welcome to Java должна быть закрыта закрывающей кавычкой в третьей строчке программы
2. Ошибки во время выполнения
Ошибки во время выполнения – это ошибки, которые приводят к ненормальному обрывы работы программы. Они возникают во время работы программы, если среда обнаруживает операцию, которую невозможно выполнить. Обычно ошибки ввода становятся причинами ошибок во время выполнения. Ошибки ввода возникают, когда программа ожидает от пользователя ввода значения, но пользователь вводит величину, которую программа не может обработать. Например, программа ожидает получение числа, но вместо этого пользователь вводит строку, это приводит к ошибкам в программе, связанным с типами данных.
Другой пример ошибок во время выполнения – это деление на ноль. Это происходит, когда в целочисленном деление делитель равен нулю. Пример программы, которая вызовет ошибку во время выполнения:
3. Логические ошибки
Логические ошибки происходят, когда программа неправильно выполняет то, для чего она была создана. Ошибки этого рода возникают по многим различным причинам. Допустим, вы написали программу, которая конвертирует 35 градусов Цельсия в градусы Фаренгейта следующим образом:
Вы получите 67 градусов по Фаренгейту, что является неверным. Должно быть 95.0. В Java целочисленное деление показывает только часть – дробная часть отсекается, по этой причине в Java 9 / 5 это 1. Для получения правильного результата, нужно использовать 9.0 / 5, что даст результат 1.8.
4. Распространённые ошибки
Пропуск закрывающей фигурной скобки, пропуск точки с запятой, пропуск кавычки для строки и неправильное написание имён – всё это самые распространённые ошибки для новых программистов.
Частые ошибки 1: Пропущенные фигурные скобки
Фигурные скобки используются для обозначения в программе блоков. Каждой открывающей фигурной скобке должна соответствовать закрывающая фигурная скобка. Распространённая ошибка – это пропуск закрывающей фигурной скобки. Чтобы избежать эту ошибки, печатайте закрывающую фигурную скобку всякий раз, когда печатаете открывающую фигурную скобку как показано в следующем примере:
Если вы используете IDE такую как NetBeans и Eclipse, то IDE автоматически вставит закрывающую фигурную скобку каждой введённой вами открывающей фигурной скобки.
Частые ошибки 2: Пропуск точки с запятой
Каждая инструкция заканчивается ограничителем инструкции (;). Часто новые программисты забывают поместить ограничитель инструкции для последней инструкции в блоке как это показано в следующем примере:
Частые ошибки 3: Пропуск кавычки
Строки должны помещаться в кавычки. Часто начинающие программисты забывают поместить кавычку в конце строки как показано в следующем примере:
Если вы используете IDE, такую как NetBeans и Eclipse, то IDE автоматически вставит закрывающую кавычку каждый раз, когда вы ввели открывающую кавычку.
Частые ошибки 4: Неправильное написание имён
Java чувствительная к регистру. Неправильное написание имён – частая ошибка для новых программистов. Например, пишут слово main как Main, а вместо String пишут string. Пример:
В программном обеспечении распространены ошибки. Их легко сделать, а найти сложно. В этой главе мы рассмотрим темы, связанные с поиском и устранением ошибок в наших программах на C++, включая изучение того, как использовать интегрированный отладчик, который является частью нашей IDE.
Хотя инструменты и методы отладки не входят в стандарт C++, умение находить и устранять ошибки в программах, которые вы пишете, является чрезвычайно важной частью успешной работы программиста. Поэтому мы уделим немного времени рассмотрению этих тем, чтобы по мере усложнения программ, которые вы пишете, ваша способность диагностировать и устранять проблемы развивалась с той же скоростью.
Если у вас есть опыт отладки программ на другом компилируемом языке программирования, многое из этого будет вам знакомо.
Синтаксические и семантические ошибки
Программирование может быть сложной задачей, и C++ – довольно необычный язык. Сложите эти две вещи вместе и получите множество способов сделать ошибку. Ошибки обычно делятся на две категории: синтаксические ошибки и семантические ошибки (логические ошибки).
Синтаксическая ошибка возникает, когда вы пишете инструкцию, недопустимую в соответствии с грамматикой языка C++. Сюда входят такие ошибки, как отсутствие точек с запятой, использование необъявленных переменных, несоответствие круглых или фигурных скобок и т.д. Например, следующая программа содержит довольно много синтаксических ошибок:
К счастью, компилятор обычно перехватывает синтаксические ошибки и генерирует предупреждения или ошибки, поэтому вы легко обнаружите и устраните проблему. Затем просто снова попробуйте скомпилировать программу, пока не избавитесь от всех ошибок.
После того, как ваша программа скомпилировалась правильно, может быть непросто добиться от нее желаемого результата. Семантическая ошибка возникает, когда оператор синтаксически правильный, но не выполняет то, что задумал программист.
Иногда это приводит к сбою программы, например, в случае деления на ноль:
Современные компиляторы стали лучше обнаруживать определенные типы распространенных семантических ошибок (например, использование неинициализированной переменной). Однако в большинстве случаев компилятор не сможет отловить большинство из этих типов проблем, потому что компилятор предназначен для обеспечения соблюдения грамматики, а не намерений.
В приведенных выше примерах ошибки довольно легко обнаружить. Но в большинстве нетривиальных программ, взглянув на код, семантические ошибки найти нелегко. Здесь могут пригодиться методы отладки.
Ошибки в программах могут допускаться от самого начального этапа составления алгоритма решения задачи до окончательного оформления программы. Разновидностей ошибок достаточно много. Рассмотрим некоторые группы ошибок и соответствующие примеры:
Рассмотрим более подробно некоторые из вышеприведенных видов ошибок.
Синтаксические ошибки
Синтаксические ошибки зачастую выявляют уже на этапе трансляции. К сожалению, многие ошибки других видов транслятор выявить не в силах, т.к. ему не известен задуманный или требуемый результат работы программы.
Примерами синтаксических ошибок является:
- отсутствие знака пунктуации;
- несоответствие количества открывающих и закрывающих скобок;
- неправильно сформированный оператор;
- неправильная запись имени переменной;
- ошибка в написании служебных слов;
- отсутствие условия окончания цикла;
- отсутствие описания массивов и т.п.
Синтаксическая ошибка «Не задан идентификатор»:
Ошибки, которые не обнаруживает транслятор
В случае правильного написания операторов в программе может присутствовать большое количество ошибок, которые транслятор не может обнаружить. Рассмотрим примеры таких ошибок:
Готовые работы на аналогичную тему
Получить выполненную работу или консультацию специалиста по вашему учебному проекту Узнать стоимость- после проверки заданного условия неправильно указана ветвь алгоритма;
- неполный перечень возможных условий при решении задачи;
- один или более блоков алгоритма в программе пропущен.
Ошибки в циклах:
- неправильно указано начало цикла;
- неправильно указаны условия окончания цикла;
- неправильно указано количество повторений цикла;
- использование бесконечного цикла.
Ошибки ввода-вывода; ошибки при работе с данными:
- неправильно задан тип данных;
- организовано считывание меньшего или большего объёма данных, чем нужно;
- неправильно отредактированы данные.
Ошибки в использовании переменных:
- используются переменных, для которых не указаны начальные значения;
- ошибочно указана одна переменная вместо другой.
Ошибки при работе с массивами:
- пропущено предварительное обнуление массивов;
- неправильное описание массивов;
- индексы массивов следуют в ошибочном порядке.
Ошибки в арифметических операциях:
- неправильное использование типа переменной (например, для сохранения результата деления используется целочисленная переменная);
- неправильно определен порядок действий;
- выполняется деление на нуль;
- при расчете выполняется попытка извлечения квадратного корня из отрицательного числа;
- не учитываются значащие разряды числа.
Ошибка в арифметических операциях «Деление на нуль»:
Все вышеописанные ошибки можно обнаружить методом тестирования.
Сопровождение программы
Сопровождением программ называются работы по обслуживанию программ в процессе их эксплуатации.
В случае многократного использования разработанной программы для решения различных задач определенного класса требуется проведение таких дополнительных работ, как:
- при обнаружении ошибок работы программы они должны исправляться;
- при изменении требований эксплуатации необходимая модификация программы;
- выполнение доработки программы с целью решения конкретных задач;
- выполнение дополнительных тестовых расчетов;
- внесение исправлений в рабочую документацию;
- улучшение программы и т.д.
При проведении работ по сопровождению многих программ стоимость этого сопровождения превышает половину затрат, которые приходятся на весь период времени существования программы (от разработки начального алгоритма до морального ее устаревания).
Программа, которая предназначена для длительной эксплуатации, должна сопровождаться соответствующей документацией и инструкцией по ее использованию.
Читайте также: