Алгоритмические ошибки это ошибки времени компиляции

Аннотация: Лекция носит факультативный характер. Здесь мы рассматриваем виды допускаемых в программировании ошибок, способы тестирования и отладки программ, инструменты встроенного отладчика.

Цель лекции

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

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

Чем больше опыта имеет программист, тем меньше ошибок в коде он совершает. Но, хотите верьте, хотите нет, даже самый опытный программист всё же допускает ошибки. И любая современная среда разработки программ должна иметь собственные инструменты для отладки приложений, а также для своевременного обнаружения и исправления возможных ошибок. Программные ошибки на программистском сленге называют багами (англ. bug — жук), а программы отладки кода — дебаггерами (англ. debugger — отладчик). Lazarus, как современная среда разработки приложений, имеет собственный встроенный отладчик, работу с которым мы разберем на этой лекции.

Ошибки, которые может допустить программист, условно делятся на три группы:

  1. Синтаксические
  2. Времени выполнения (run-time errors)
  3. Алгоритмические

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

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

Найденная компилятором синтаксическая ошибка - нет объявления переменной i

Рис.
27.1.
Найденная компилятором синтаксическая ошибка — нет объявления переменной i

Подобные ошибки могут возникнуть при неправильном написании директивы или имени функции (процедуры); при попытке обратиться к переменной или константе, которую не объявляли (
рис.
27.1); при попытке вызвать функцию (процедуру, переменную, константу) из модуля, который не был подключен в разделе uses; при других аналогичных недосмотрах программиста.

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

Ошибки времени выполнения

Ошибки времени выполнения (run-time errors) тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы, или во время тестирования. Если такую программу запустить из среды Lazarus, то она скомпилируется, но при попытке загрузки, или в момент совершения ошибки, приостановит свою работу, выведя на экран соответствующее сообщение. Например, такое:

Сообщение Lazarus об ошибке времени выполнения

Рис.
27.2.
Сообщение Lazarus об ошибке времени выполнения

В данном случае программа при загрузке должна была считать в память отсутствующий текстовый файл MyFile.txt. Поскольку программа вызвала ошибку, она не запустилась, но в среде Lazarus процесс отладки продолжается, о чем свидетельствует сообщение в скобках в заголовке главного меню, после названия проекта. Программисту в подобных случаях нужно сбросить отладчик командой меню «Запуск -> Сбросить отладчик«, после чего можно продолжить работу над проектом.

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

Если программу запустить из самой Windows, при возникновении этой ошибки появится такое же сообщение. При этом если нажать «OK«, программа даже может запуститься, но корректно работать все равно не будет.

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

begin
  MySL:= TStringList.Create;
  MySL.Add('Новая строка');
end;
    

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

begin
  MySL:= TStringList.Create;
  MySL.Add('Новая строка');
  ...; //работа с объектом
  MySL.Free; //освободили объект
end;
    

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

begin
  try
    MySL:= TStringList.Create;
    MySL.Add('Новая строка');
    ...; //работа с объектом
  finally
    MySL.Free; //освободили объект, даже если была ошибка
  end;
end;
    

Итак, во избежание ошибок времени выполнения программист должен не забывать делать проверку на правильность ввода пользователем допустимых значений, заключать опасный код в блоки try…finally…end или try…except…end, делать проверку на существование открываемого файла функцией FileExists и вообще соблюдать предусмотрительность во всех слабых местах программы. Не полагайтесь на пользователя, ведь недаром говорят, что если в программе можно допустить ошибку, пользователь эту возможность непременно найдет.

Алгоритмические ошибки

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

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

Если программа работает правильно с одними наборами исходных данных, и неправильно с другими, то это свидетельствует о наличии алгоритмической ошибки. Алгоритмические ошибки иногда называют логическими, обычно они связаны с неверной реализацией алгоритма программы: вместо «+» ошибочно поставили «-«, вместо «/» — «*», вместо деления значения на 0,01 разделили на 0,001 и т.п. Такие ошибки обычно не обнаруживаются во время компиляции, программа нормально запускается, работает, а при анализе выводимого результата выясняется, что он неверный. При этом компилятор не укажет программисту на ошибку — чтобы найти и устранить её, приходится анализировать код, пошагово «прокручивать» его выполнение, следя за результатом. Такой процесс называется отладкой.

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

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

Ошибки, которые могут быть в программе,
принято делить на три группы:

  • синтаксические;

  • ошибки времени выполнения;

  • алгоритмические.

Синтаксические ошибки, их также называют
ошибками времени компиляции (Compile-time
error), наиболее легко устранимы. Их
обнаруживает компилятор, а программисту
остается только внести изменения в
текст программы и выполнить повторную
компиляцию.

Ошибки времени выполнения, в Delphi они
называются исключениями (exception), тоже,
как правило, легко устранимы. Они обычно
проявляются уже при первых запусках
программы и во время тестирования.

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

После возникновения ошибки
программист может либо прервать
выполнение программы, для этого надо
из менюRun выбрать
команду Program
Reset, 
либо продолжить
ее выполнение, например, по шагам (для
этого из менюRun надо
выбрать команду Step), наблюдая
результат выполнения каждой инструкции.

Рис. 13.1. Сообщение
об ошибке при запуске программы из
Delphi

Если программа запущена из
Windows, то при возникновении ошибки на
экране также появляется сообщение об
ошибке, но тип ошибки (исключения) в
сообщении не указывается (рис. 13.2). После
щелчка на кнопке ОКпрограмма,
в которой проявилась ошибка, продолжает
(если сможет) работу.

Рис. 13.2. Сообщение
об ошибке при запуске программы из
Windows

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

Предотвращение и обработка ошибок

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

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

Инструкция обработки исключения в общем
виде выглядит так:

try

// здесь инструкции, выполнение которых
может вызвать исключение

except //
начало секции обработки исключений

on ТипИсключения1 do Обработка1;

on ТипИсключения2 do Обработка2;

on ТипИсключенияJ do ОбработкаJ;

else

// здесь инструкции обработки остальных
исключений

end;

где:

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

  • except — ключевое слово, обозначающее
    начало секции обработки исключений.
    Инструкции этой секции будут выполнены,
    если в программе возникнет ошибка;

  • on — ключевое слово, за которым следует
    тип исключения, обработку которого
    выполняет инструкция, следующая за do;

  • else — ключевое слово, за которым следуют
    инструкции, обеспечивающие обработку
    исключений, тип которых не указаны в
    секции except.

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

Таблица 13.1. Типичные
исключения

Тип исключения

Возникает

EZeroDivide

При выполнении операции деления, если
делитель равен нулю

EConvertError

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

Тип исключения

Возникает

EFilerError

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

Ошибки выполнения:

Определения данных;

Передачи;

Преобразования;

Перезаписи;

Неправильные данные.

Логические;

Неприемлемый подход;

Неверный алгоритм;

Неверная структура данных;

Другие;

Кодирования;

Проектирования;

Некорректная работа с переменными;

Некорректные вычисления;

Ошибки интерфейсов;

Неправильная реализация алгоритма;

Другие.

Накопления погрешностей;

Игнорирование ограничений разрядной
сетки;

Игнорирование способов уменьшения
погрешностей.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

Введение

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

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

Введение

Ошибки, которые могут быть в программе, принято делить на три группы:

  • синтаксические;
  • ошибки времени выполнения;
  • алгоритмические.

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

Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается внести изменения в текст программы и выполнить повторную компиляцию.

Ошибки времени выполнения

Ошибки времени выполнения, они называются исключениями (Exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования

При возникновении ошибки в программе, запущенной из ИСР, среда прерывает работу программы и в окне сообщений дает информацию о типе ошибки.

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

Если программа запущена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается. После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу.

Алгоритмические ошибки

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

Предотвращение и обработка ошибок

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

FPC и ИСР предоставляют программисту мощные средства:

  • Компилятор с регулируемыми опциями.

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

TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

Ошибки, которые могут
быть в программе, принято делить на три группы:

  • синтаксические;
  • ошибки времени выполнения;
  • алгоритмические.

Синтаксические ошибки,
их также называют ошибками времени компиляции (Compile-time error), наиболее
легко устранимы. Их обнаруживает компилятор, а программисту остается только
внести изменения в текст программы и выполнить повторную компиляцию.

Ошибки времени выполнения,
в Delphi они называются исключениями (exception), тоже, как правило, легко устранимы.
Они обычно проявляются уже при первых запусках программы и во время тестирования.

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

После возникновения
ошибки программист может либо прервать выполнение программы, для этого надо
из меню Run выбрать команду Program Reset, либо продолжить ее
выполнение, например, по шагам (для этого из ме
ню
Run надо выбрать команду Step), наблюдая результат выполнения
каждой инструкции.

Рис. 13.1. Сообщение
об ошибке при запуске программы из Delphi

Если программа запущена
из Windows, то при возникновении ошибки на экране также появляется сообщение
об ошибке, но тип ошибки (исключения) в сообщении не указывается (рис. 13.2).
После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает
(если сможет) работу.

Рис. 13.2. Сообщение
об ошибке при запуске программы из Windows

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

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Compile-Time Errors: Errors that occur when you violate the rules of writing syntax are known as Compile-Time errors. This compiler error indicates something that must be fixed before the code can be compiled. All these errors are detected by the compiler and thus are known as compile-time errors. 
    Most frequent Compile-Time errors are: 
     

    • Missing Parenthesis (})
    • Printing the value of variable without declaring it
    • Missing semicolon (terminator)

    Below is an example to demonstrate Compile-Time Error:
     

    C++

    #include <iostream>

    using namespace std;

    int main()

    {

        int x = 10;

        int y = 15;

        cout << " "<< (x, y)

    }

    C

    #include<stdio.h>

    void main()

    {

        int x = 10;

        int y = 15;

        printf("%d", (x, y));

    }

    Error: 
     

    error: expected ';' before '}' token

    Run-Time Errors: Errors which occur during program execution(run-time) after successful compilation are called run-time errors. One of the most common run-time error is division by zero also known as Division error. These types of error are hard to find as the compiler doesn’t point to the line at which the error occurs.
    For more understanding run the example given below.
     

    C++

    #include <iostream>

    using namespace std;

    int main()

    {

        int n = 9, div = 0;

        div = n/0;

        cout <<"result = " << div;

    }

    C

    #include<stdio.h>

    void main()

    {

        int n = 9, div = 0;

        div = n/0;

        printf("result = %d", div);

    }

    Error: 
     

    warning: division by zero [-Wdiv-by-zero]
         div = n/0;

    In the given example, there is Division by zero error. This is an example of run-time error i.e errors occurring while running the program.
    The Differences between Compile-Time and Run-Time Error are:
     

    Compile-Time Errors Runtime-Errors
    These are the syntax errors which are detected by the compiler. These are the errors which are not detected by the compiler and produce wrong results.
    They prevent the code from running as it detects some syntax errors. They prevent the code from complete execution.
    It includes syntax errors such as missing of semicolon(;), misspelling of keywords and identifiers etc. It includes errors such as dividing a number by zero, finding square root of a negative number etc.

    Improve Article

    Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Compile-Time Errors: Errors that occur when you violate the rules of writing syntax are known as Compile-Time errors. This compiler error indicates something that must be fixed before the code can be compiled. All these errors are detected by the compiler and thus are known as compile-time errors. 
    Most frequent Compile-Time errors are: 
     

    • Missing Parenthesis (})
    • Printing the value of variable without declaring it
    • Missing semicolon (terminator)

    Below is an example to demonstrate Compile-Time Error:
     

    C++

    #include <iostream>

    using namespace std;

    int main()

    {

        int x = 10;

        int y = 15;

        cout << " "<< (x, y)

    }

    C

    #include<stdio.h>

    void main()

    {

        int x = 10;

        int y = 15;

        printf("%d", (x, y));

    }

    Error: 
     

    error: expected ';' before '}' token

    Run-Time Errors: Errors which occur during program execution(run-time) after successful compilation are called run-time errors. One of the most common run-time error is division by zero also known as Division error. These types of error are hard to find as the compiler doesn’t point to the line at which the error occurs.
    For more understanding run the example given below.
     

    C++

    #include <iostream>

    using namespace std;

    int main()

    {

        int n = 9, div = 0;

        div = n/0;

        cout <<"result = " << div;

    }

    C

    #include<stdio.h>

    void main()

    {

        int n = 9, div = 0;

        div = n/0;

        printf("result = %d", div);

    }

    Error: 
     

    warning: division by zero [-Wdiv-by-zero]
         div = n/0;

    In the given example, there is Division by zero error. This is an example of run-time error i.e errors occurring while running the program.
    The Differences between Compile-Time and Run-Time Error are:
     

    Compile-Time Errors Runtime-Errors
    These are the syntax errors which are detected by the compiler. These are the errors which are not detected by the compiler and produce wrong results.
    They prevent the code from running as it detects some syntax errors. They prevent the code from complete execution.
    It includes syntax errors such as missing of semicolon(;), misspelling of keywords and identifiers etc. It includes errors such as dividing a number by zero, finding square root of a negative number etc.

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

    Ошибки времени компиляции

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

    Пример

    public class Test{
       public static void main(String args[]){
          System.out.println("Hello")
       }
    }
    

    Итог

    C:Sample>Javac Test.java
    Test.java:3: error: ';' expected
       System.out.println("Hello")
    

    Ошибки времени выполнения

    Исключение (или исключительное событие) – это проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы прерывается, и программа / приложение прерывается ненормально, что не рекомендуется, поэтому эти исключения должны быть обработаны.

    Пример

    import java.io.File;
    import java.io.FileReader;
    
    public class FilenotFound_Demo {
       public static void main(String args[]) {
          File file = new File("E://file.txt");
          FileReader fr = new FileReader(file);
       }
    }
    

    Итог

    C:>javac FilenotFound_Demo.java
    FilenotFound_Demo.java:8: error: unreported exception
    FileNotFoundException; must be caught or declared to be thrown
       FileReader fr = new FileReader(file);
                       ^
    1 error
    

    Алгоритмическая ошибка

    Cтраница 1

    Алгоритмические ошибки значительно труднее поддаются обнаружению методами формализованного автоматического контроля, чем предыдущие типы ошибок. К алгоритмическим следует отнести прежде всего ошибки, обусловленные некорректной постановкой функциональных задач, когда в спецификациях не полностью оговорены все условия, необходимые для получения правильного результата. Эти условия формируются и уточняются в значительной части в процессе тестирования и выявления ошибок в результатах функционирования программ. Ошибки, обусловленные неполным учетом всех условий решения задач, являются наиболее частыми в этой группе и составляют до 70 % всех алгоритмических ошибок или около 30 % общего количества ошибок на начальных этапах проектирования.
     [1]

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

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

    Алгоритмические ошибки представляют собой ошибки в программной трактовке алгоритма, например недоучет всех вариантов работы алгоритма.
     [4]

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

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

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

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

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

    В предыдущем параграфе был рассмотрен характер формирования алгоритмической ошибки вычислений при отсутствии искажающих воздействий со стороны окружающей среды и вычислительной системы. В реальных условиях на процесс смены состояний АлСУ и ошибку выходных сигналов существенное влияние оказывают искажающие воздействия, которые по отношению к управляющему объекту могут быть как внешними, так и внутренними. Внешние воздействия, источником которых является внешняя ( по отношению к управляющему объекту) среда, связаны с ошибками определения параметров управляемого процесса, отказами и сбоями в работе датчиков информации, каналов связи и преобразующих устройств. Внутренние воздействия, источниками которых являются ЦВМ или комплексы ЦВМ, используемые для реализации алгоритмической системы, обусловлены сбоями, частичными отказами и прерываниями.
     [11]

    Кроме того, значительные трудности представляет разделение системных и алгоритмических ошибок и выделение доработок, которые не следует квалифицировать как ошибки.
     [12]

    Однако формула ( 29) позволяет судить о характере формирования алгоритмической ошибки в реальных системах и сделать важный вывод о несостоятельности попыток оценки качества АлСУ всякого рода контрольными просчетами.
     [13]

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

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

    Страницы:  

       1

       2

       3

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

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

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

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

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

    Методы тестирования программ

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

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

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

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

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

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

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

    Средства отладки программ в Delphi

    Ошибки,
    которые могут быть в программе, принято
    делить на три группы:

    • синтаксические;

    • ошибки времени
      выполнения;

    • алгоритмические.

    Синтаксические
    ошибки называют также ошибками времени
    компиляции (Compile-time error). Они наиболее
    легко устранимы. Их обнаруживает
    компилятор, а программисту остается
    только внести изменения в текст программы
    и выполнить повторную компиляцию.

    Ошибки
    времени выполнения (Run-time
    error) возникают не при каждом запуске
    программы, а лишь при определенном
    наборе входных данных (например, делении
    на ноль или вводе некорректной даты).
    Для их выявления требуется тщательно
    подготовить тестовые примеры. Если
    причиной являются не программные ошибки,
    а действия пользователя, то в программе
    должна быть предусмотрена обработка
    исключительных ситуаций (см. § 5).

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

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

    Соседние файлы в папке ИТ

    • #
    • #
    • #
    • #
    • #
    • #
    • #

      17.05.2015165 б6Товары.txt

    • #

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

    Введение

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

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

    Введение

    Ошибки, которые могут быть в программе, принято делить на три группы:

    • синтаксические;
    • ошибки времени выполнения;
    • алгоритмические.

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

    Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается внести изменения в текст программы и выполнить повторную компиляцию.

    Ошибки времени выполнения

    Ошибки времени выполнения, они называются исключениями (Exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования

    При возникновении ошибки в программе, запущенной из ИСР, среда прерывает работу программы и в окне сообщений дает информацию о типе ошибки.

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

    Если программа запущена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается. После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу.

    Алгоритмические ошибки

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

    Предотвращение и обработка ошибок

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

    FPC и ИСР предоставляют программисту мощные средства:

    • Компилятор с регулируемыми опциями.

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

    TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

    Ошибки, которые могут
    быть в программе, принято делить на три группы:

    • синтаксические;

    • ошибки времени выполнения;

    • алгоритмические.

    Синтаксические ошибки,
    их также называют ошибками времени компиляции (Compile-time error), наиболее
    легко устранимы. Их обнаруживает компилятор, а программисту остается только
    внести изменения в текст программы и выполнить повторную компиляцию.

    Ошибки времени выполнения,
    в Delphi они называются исключениями (exception), тоже, как правило, легко устранимы.
    Они обычно проявляются уже при первых запусках программы и во время тестирования.

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

    После возникновения
    ошибки программист может либо прервать выполнение программы, для этого надо
    из меню Run выбрать команду Program Reset, либо продолжить ее
    выполнение, например, по шагам (для этого из ме
    ню
    Run надо выбрать команду Step), наблюдая результат выполнения
    каждой инструкции.

    Рис. 13.1. Сообщение
    об ошибке при запуске программы из Delphi

    Если программа запущена
    из Windows, то при возникновении ошибки на экране также появляется сообщение
    об ошибке, но тип ошибки (исключения) в сообщении не указывается (рис. 13.2).
    После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает
    (если сможет) работу.

    Рис. 13.2. Сообщение
    об ошибке при запуске программы из Windows

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

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