Процесс обнаружения и исправления ошибок называется

распределение частей абстрактного объекта на нескольких машинах

тиражирование распределенного объекта на нескольких компьютерах

использование нескольких компьютеров как один

создание виртуальных пользователей

создание виртуальных частных сетей

спецификацией пользователя

анализа сложных программных систем

проектирования сложных программных систем

обучения утилизации сложных программных систем

обучения эксплуатации сложных программных систем

разработки и сопровождения сложных программных систем

при работе с элементами каждого модуля проекта

при работе с общими характеристиками всех модулей

при работе всей группы разработчиков

при работе каждого сотрудника группы разработчиков

человеческие взаимоотношения и их психология

распределение бюджета на реализацию аппаратной, материальной, социальной частей проекта

приведение в соответствие амбиций менеджеров их квалификации

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

результата проектирования

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

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

модули программы программируются независимо друг от друга

программируются модули программы с модулей самого нижнего уровня

программируются модули программы, начиная с модуля самого верхнего уровня (головного)

межпроектное взаимодействие внутри одной группы разработок

способность программного обеспечения к взаимодействию с другим программным обеспечением

понятность требований заказчика

планирование времени выполнения запросов

поддержку целостности данных

производительность транзакций

безопасность работы с огромными массивами данных

реструктурирование унаследованного программного обеспечения

модификацию унаследованного программного обеспечения

тестирование унаследованного программного обеспечения

раскрытие структуры унаследованного программного обеспечения

оптимизацию унаследованного программного обеспечения

знание алгоритмов программирования

умение переходить от одного уровня абстракции к другому

умение переключаться от одной стадии проекта к другой

профессиональное владение языками программирования

желательный результат системы

желательных пользователей системы

желательное поведение системы

желательные свойства системы

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

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

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

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

а) проверить все возможные режимы работы программы;

б) по возможности, локализовать ошибку.

При тестировании программы простой и действенный метод дополнительного контроля над ходом её выполнения – получение контрольных точек, т. е. контрольный вывод промежуточных результатов.

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

33. ВИДЫ ОШИБОК В ПРОГРАММАХ

Об ошибках в программе сигнализируют некорректная работоспособность программы либо ее полное невыполнение. В наше время для обозначения ошибки в программе используют термин «Баг» (с англ. Bug-жук).

Есть несколько типов ошибок:

1) Логическая ошибка. Это, пожалуй, наиболее серьезная из всех ошибок. Когда написанная программа на любом языке компилирует и работает правильно, но выдает неправильный вывод, недостаток заключается в логике основного программирования. Это ошибка, которая была унаследована от недостатка в базовом алгоритме. Сама логика, на которой базируется вся программа, является ущербной. Чтобы найти решение такой ошибки нужно фундаментальное изменение алгоритма. Вам нужно начать копать в алгоритмическом уровне, чтобы сузить область поиска такой ошибки. (пример: задача программы вывести сумму двух чисел а и b.

varc,a,b:integer;

Begin

readln(a,b);

c:=a-b; {нужнобылонаписатьc:=a+b;}

writeln(c);

readln;

end.

2) Синтаксическая ошибка.Каждый компьютерный язык, такой как C, Java, Perl и Python имеет специфический синтаксис, в котором будет написан код. Когда программист не придерживаться «грамматики» спецификациями компьютерного языка, возникнет ошибка синтаксиса. Такого рода ошибки легко устраняются на этапе компиляции.

begin

writln(‘helloworld!’); {вместоwritElnнаписаноwritln, чтоприведеткошибке}

readln;

end.

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

vara,b:real;

begin

b:=7.5;

с:=b*3; {ошибка компиляции, мы присваиваем значениие несуществующей переменой}

writeln(a);

readln;

end.

4) Ошибки среды выполнения (RunTime).Программный код успешно скомпилирован, и исполняемый файл был создан. Вы можете вздохнуть с облегчением и запустить программу, чтобы проверить ее работу. Ошибки при выполнении программы могут возникнуть в результате аварии или нехватки ресурсов носителя. Разработчик должен был предвидеть реальные условия развертывания программы. Это можно исправить, вернувшись к стадии кодирования.

vara:array[1..5] of integer;

begin

a[0]:=5; {ошибка в том, что мы вышли за предел массива}

writeln(a[0]);

readln;

end;

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

vara:real;

begin

a:=10/0; {ошибка, делениена 0}

writeln(a);

readln

end.

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

vara:integer;

begin

a:=32768; {ошибка, максимальное значение переменной типа integer равно 32767}

end.

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

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

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

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

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

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

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

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

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

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

Всю документацию можно разбить на две группы:

– документы управления разработкой ПС;

– документы, входящие в состав ПС.

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

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

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

Контрольные вопросы

1. Что такое система программирования?

2. Что относится к технологии OLE?

3. Что относится к технологии Microsoft .NET?

4. Что такое модульное программирование?

5. Назовите основные принципы объектно-ориентрованного программирования.

6. Что относится к процедурному программированию?

7. Как происходит отладка и тестирование программ?

8. Какие виды документации используют при разработке программ?

9. Что такое парадигма программирования?

10. Что такое объекты, классы?

Читайте также:

©2015-2022 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03
Нарушение авторских прав и Нарушение персональных данных



Поиск по сайту:


Мы поможем в написании ваших работ!

Ошибка, недостаток, сбой или сбой в компьютерной программе или системе

A Ошибка программного обеспечения — это ошибка, недостаток или сбой в компьютерной программе или системе, из-за которой она дает неверный или неожиданный результат или ведет себя непредусмотренным образом. Процесс поиска и исправления ошибок называется «отладка » и часто использует формальные методы или инструменты для выявления ошибок, а с 1950-х годов некоторые компьютерные системы были разработаны также для обнаружения, обнаружения или автоматического исправления различных компьютерные ошибки во время работы.

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

Некоторые программные ошибки связаны с катастрофами. Ошибки в коде, который управлял аппаратом Therac-25 лучевой терапии, были непосредственными причинами смерти пациентов в 1980-х годах. В 1996 г. ракета Европейского космического агентства стоимостью 1 миллиард долларов прототип Ariane 5 должна была быть уничтожена менее чем через минуту после запуска из-за ошибки в системе. бортовая компьютерная программа наведения. В июне 1994 года вертолет Royal Air Force Chinook врезался в Mull of Kintyre, в результате чего погибло 29 человек. Первоначально это было отклонено как ошибка пилота, но расследование Computer Weekly убедил запрос Палаты лордов в том, что это могло быть вызвано ошибкой программного обеспечения в компьютере управления двигателем.

самолета. В 2002 году исследование, проведенное по заказу Национальный институт стандартов и технологий Министерства торговли США пришел к выводу, что «программные ошибки или ошибки настолько распространены и настолько пагубны, что обходятся экономике США примерно в 59 миллиардов долларов. ежегодно, или около 0,6 процента валового внутреннего продукта ».

Содержание

  • 1 История
    • 1.1 Отчет« Ошибки в системе »
  • 2 Терминология
  • 3 Профилактика
    • 3.1 Типографические ошибки
    • 3.2 Методологии разработки
    • 3.3 Поддержка языков программирования
    • 3.4 Анализ кода
    • 3.5 Инструментарий
  • 4 Тестирование
  • 5 Отладка
  • 6 Тест ошибок
  • 7 Управление ошибками nt
    • 7.1 Уровень серьезности
    • 7.2 Приоритет
    • 7.3 Версии программного обеспечения
  • 8 Типы
    • 8.1 Арифметика
    • 8.2 Логика
    • 8.3 Синтаксис
    • 8.4 Ресурс
    • 8.5 Многопоточность
    • 8.6 Взаимодействие
    • 8.7 Работа в команде
  • 9 Последствия
  • 10 Хорошо известные ошибки
  • 11 В популярной культуре
  • 12 См. Также
  • 13 Ссылки
  • 14 Внешние ссылки

История

Среднеанглийское слово bugge лежит в основе терминов «bugbear » и «bugaboo » как терминов, используемых для обозначения монстра.

Термин «ошибка» для описания дефектов был частью инженерного жаргона с 1870-х годов и предшествовал электронным компьютерам и компьютерному программному обеспечению; возможно, изначально он использовался в аппаратной инженерии для описания механических неисправностей. Например, Томас Эдисон написал следующие слова в письме своему сотруднику в 1878 году:

Так было во всех моих изобретениях. Первым шагом является интуиция, и она приходит с порывом, затем возникают трудности — эта штука выдает, и [это] затем, что «жуки» — как называются такие маленькие ошибки и трудности — проявляют себя и месяцы интенсивного наблюдения, изучения прежде чем будет достигнут коммерческий успех или провал, необходимы и труд.

Baffle Ball, первая механическая игра в пинбол, в 1931 году рекламировалась как «свободная от ошибок». Проблемы с военным снаряжением во время Второй мировой войны упоминались как ошибки (или сбои ). В фильме 1940 года Flight Command дефект в части радиопеленгатора называется «ошибкой». В книге, опубликованной в 1942 году, Луиза Дикинсон Рич, говоря о механизированной машине для резки льда, сказала: «Распиловка льда была приостановлена ​​до тех пор, пока не будет привлечен создатель, чтобы устранить жучков. своего любимого ».

Исаак Азимов использовал термин« ошибка »для обозначения проблем с роботом в своем рассказе« Поймай этого кролика », опубликованном в 1944 году.

A страница из журнала электромеханического компьютера Harvard Mark II с изображением мертвой мотылька, удаленной с устройства.

Термин «ошибка» использовался в описании компьютерного первопроходца Грейс Хоппер, который объявил причину неисправности в одном из первых электромеханических компьютеров. Типичная версия этой истории такова:

В 1946 году, когда Хоппер освободили от действительной службы, она поступила на Гарвардский факультет в вычислительную лабораторию, где продолжила свою работу над Mark II и Марк III. Операторы связали ошибку в Mark II с мотыльком, застрявшим в реле, придумав термин «ошибка». Этот баг был аккуратно удален и записан в журнал. Исходя из первой ошибки, сегодня мы называем ошибки или сбои в программе ошибкой.

Хоппер не нашла ошибку, что она с готовностью признала. В бортовом журнале была дата 9 сентября 1947 года. Операторы, которые его нашли, включая Уильяма «Билла» Берка, позже работавшего в Лаборатории военно-морского оружия, Дальгрен, Вирджиния, были знакомы с техническим термином и забавно сохранил насекомое с пометкой «Первый реальный случай обнаружения ошибки». Хоппер любил пересказывать эту историю. Этот журнал, вместе с прикрепленным к нему мотыльком, является частью коллекции Смитсоновского Национального музея американской истории.

Связанный термин «отладка » также появился раньше, чем его использовали в вычислительной технике: Оксфордский словарь английского языка этимология этого слова содержит свидетельство 1945 года в контексте авиационных двигателей.

Идея, что программное обеспечение может содержать ошибки, восходит к 1843 году Ады Лавлейс. примечания к аналитической машине, в которых она говорит о возможности того, что программные «карты» для аналитической машины Чарльза Бэббиджа ошибочны:

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

Отчет «Ошибки в системе»

Институт открытых технологий, управляемый группой New America, выпустил доклад «Ошибки в системе» в августе 2016 года, в котором говорится, что политики США должны провести реформы, чтобы помочь исследователям выявлять и устранять ошибки программного обеспечения. В отчете «подчеркивается необходимость реформы в области обнаружения и раскрытия уязвимостей программного обеспечения». Один из авторов отчета сказал, что Конгресс сделал недостаточно для устранения уязвимости киберпрограмм, хотя Конгресс принял ряд законопроектов по борьбе с более серьезной проблемой кибербезопасности.

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

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

Терминология

Хотя использование термина «ошибка» для описания ошибок программного обеспечения является обычным явлением, многие предложили отказаться от него. Один из аргументов состоит в том, что слово «ошибка» не связано с тем, что проблема была вызвана человеком, и вместо этого подразумевает, что дефект возник сам по себе, что привело к необходимости отказаться от термина «ошибка» в пользу таких терминов, как «дефект» с ограниченным успехом. Начиная с 1970-х годов Гэри Килдалл несколько юмористически предложил использовать термин «грубая ошибка».

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

Различные этапы «ошибки» во всем цикле могут быть описаны как «ошибки», «аномалии», «сбои», «сбои», «ошибки», «исключения», «сбои», «сбои», «ошибки», » дефекты »,« инциденты »или« побочные эффекты ».

Предотвращение

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

Типографические ошибки

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

Методологии разработки

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

Модульное тестирование включает в себя написание теста для каждой функции (модуля), которая программа для исполнения.

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

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

Разработка с открытым исходным кодом позволяет любому исследовать исходный код. Школа мысли, популяризированная Эриком С. Реймондом как закон Линуса, гласит, что популярное программное обеспечение с открытым исходным кодом имеет больше шансов иметь мало ошибок или совсем не иметь ошибок, чем другое программное обеспечение., потому что «при достаточном внимании к нему все ошибки мелкие». Однако это утверждение оспаривается: специалист по компьютерной безопасности Элиас Леви писал, что «легко скрыть уязвимости в сложном, малоизученном и недокументированном исходном коде», потому что «даже если люди просматривают код, это не означает, что они обладают достаточной квалификацией для этого «. Примером того, что это произошло случайно, была уязвимость 2008 OpenSSL в Debian.

Поддержка языков программирования

Языки программирования включают функции, помогающие предотвратить ошибки, такие как системы статических типов , ограниченное пространства имен и модульное программирование. Например, когда программист записывает (псевдокод) LET REAL_VALUE PI = "THREE AND A BIT", хотя это может быть синтаксически правильным, код не проходит проверку типа . Скомпилированные языки улавливают это без необходимости запускать программу. Интерпретируемые языки выявляют такие ошибки во время выполнения. Некоторые языки намеренно исключают функции, которые легко приводят к ошибкам, за счет более низкой производительности: общий принцип заключается в том, что почти всегда лучше писать более простой и медленный код, чем непостижимый код, который выполняется немного быстрее, особенно с учетом того, что обслуживание стоимость существенная. Например, язык программирования Java не поддерживает арифметику с указателем ; реализации некоторых языков, таких как Pascal и языков сценариев, часто имеют границы среды выполнения , проверяющие массивов, по крайней мере, в отладочной сборке.

Анализ кода

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

Инструментарий

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

Тестирование

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

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

Отладка

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

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

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

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

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

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

Некоторые ошибки обнаруживаются при вводе данных, которые программисту может быть трудно воссоздать. Одной из причин смерти радиационной машины Therac-25 была ошибка (в частности, состояние гонки ), которая возникала только тогда, когда оператор машины очень быстро вводил план лечения; На то, чтобы это сделать, потребовались дни практики, поэтому ошибка не проявлялась ни при тестировании, ни при попытке производителя воспроизвести ее. Другие ошибки могут перестать возникать всякий раз, когда установка расширяется, чтобы помочь найти ошибку, например, запуск программы с отладчиком; они называются хайзенбагами (шутливо названы в честь принципа неопределенности Гейзенберга ).

С 1990-х годов, особенно после катастрофы Ariane 5 Flight 501, возрос интерес к автоматизированным средствам отладки, таким как статический анализ кода посредством абстрактной интерпретации.

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

Тест ошибок

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

  • тест Siemens
  • ManyBugs — тест на 185 ошибок C. в девяти программах с открытым исходным кодом.
  • Defects4J — это тест на 341 ошибку Java из 5 проектов с открытым исходным кодом. Он содержит соответствующие исправления, которые охватывают множество типов исправлений.
  • BEARS — это эталонный тест на ошибки сборки с непрерывной интеграцией с упором на ошибки тестирования. Он был создан путем мониторинга сборок из проектов с открытым исходным кодом на Travis CI.

Управление ошибками

Управление ошибками включает в себя процесс документирования, категоризации, назначения, воспроизведения, исправления и выпуска исправленного кода. Предлагаемые изменения в программном обеспечении — ошибки, запросы на улучшения и даже целые выпуски — обычно отслеживаются и управляются с помощью систем отслеживания ошибок или систем отслеживания проблем. Добавленные элементы могут называться дефектами, заявками, проблемами или, следуя парадигме гибкой разработки, рассказами и эпосами. Категории могут быть объективными, субъективными или комбинированными, например номер версии, область программного обеспечения, серьезность и приоритет, а также тип проблемы, такой как запрос функции или ошибка.

Уровень серьезности

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

Priority

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

Выпуски программного обеспечения

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

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

  • Срок должен быть соблюден, а ресурсов недостаточно для исправления всех ошибок к указанному сроку.
  • ошибка уже исправлена ​​в следующем выпуске, и она не имеет высокого приоритета.
  • Изменения, необходимые для исправления ошибки, слишком дороги или затрагивают слишком много других компонентов, что требует серьезного тестирования.
  • Можно подозревать или знать, что некоторые пользователи полагаются на существующее поведение с ошибками; предлагаемое исправление может ввести критическое изменение.
  • Проблема находится в области, которая будет устаревшей в следующем выпуске; исправлять это не нужно.
  • Это «не ошибка». Возникло недопонимание между ожидаемым и предполагаемым поведением, когда такое недопонимание не связано с путаницей, возникшей из-за недостатков дизайна или ошибочной документации.

Типы

В проектах разработки программного обеспечения — «ошибка» или «сбой» может быть введен на любом этапе. Ошибки возникают из-за упущений или недоразумений, допущенных командой разработчиков программного обеспечения во время спецификации, проектирования, кодирования, ввода данных или документации. Например, относительно простая программа для построения списка слов по алфавиту может не учитывать, что должно произойти, если слово содержит дефис. Или при преобразовании абстрактного дизайна в код кодировщик может непреднамеренно создать единичную ошибку и не отсортировать последнее слово в списке. Ошибки могут быть такими же простыми, как опечатка: имелось в виду «<» where a «>».

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

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

Арифметика

Логика

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

Синтаксис

  • Использование неправильного оператора, например выполнение присваивания вместо проверки равенства. Например, в некоторых языках x = 5 установит значение x равным 5, а x == 5 будет проверять, является ли x в настоящее время 5 или каким-либо другим числом. Интерпретируемые языки допускают сбой такого кода. Скомпилированные языки могут обнаруживать такие ошибки до начала тестирования.

Ресурс

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

Многопоточность

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

Взаимодействие

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

Коллективная работа

  • Нераспространяемые обновления; например программист изменяет myAdd, но забывает изменить mySubtract, который использует тот же алгоритм. Эти ошибки смягчаются философией Не повторяйся.
  • Комментарии устарели или неверны: многие программисты считают, что комментарии точно описывают код.
  • Различия между документации и продукта.

Последствия

Объем и тип ущерба, который может вызвать программная ошибка, естественным образом влияют на принятие решений, процессы и политику в отношении качества программного обеспечения. В таких приложениях, как пилотируемые космические путешествия или автомобильная безопасность, поскольку недостатки программного обеспечения могут привести к травмам или даже смерти людей, такое программное обеспечение будет подвергаться гораздо более тщательной проверке и контролю качества, чем для Например, веб-сайт интернет-магазина. В таких приложениях, как банковское дело, где недостатки программного обеспечения могут нанести серьезный финансовый ущерб банку или его клиентам, контроль качества также более важен, чем, скажем, приложение для редактирования фотографий. Технологическому центру Software Assurance НАСА удалось снизить количество ошибок до менее 0,1 на 1000 строк кода (SLOC ), но это не было сочтено возможным для проектов в мире бизнеса..

Помимо ущерба, причиненного ошибками, часть их стоимости связана с усилиями, вложенными в их исправление. В 1978 году Линц и др. показал, что в среднем по проектам 17% усилий по разработке вкладывается в исправление ошибок. Исследование, проведенное в 2020 году в репозиториях GitHub, показало, что медиана составляет 20 процентов.

Хорошо известные ошибки

Ряд программных ошибок стал широко известным, обычно из-за по степени серьезности: примеры включают крушения различных космических и военных самолетов. Возможно, самая известная ошибка — это проблема 2000 года, также известная как ошибка 2000 года, в которой опасались, что мировой экономический коллапс произойдет в начале 2000 года в результате того, что компьютеры думали, что это был 1900. (В конце концов, серьезных проблем не возникло.) Срыв в 2012 году на бирже был связан с одной такой несовместимостью между старым API и новым API.

В массовой культуре

  • В романе 1968 года 2001: Космическая одиссея и соответствующем фильме 1968 года 2001: Космическая одиссея, бортовой компьютер космического корабля, HAL 9000, пытается убить всех членов экипажа. В последующем романе 1982 года 2010: Одиссея 2 и сопутствующем фильме 1984 года 2010 выясняется, что это действие было вызвано тем, что компьютер был запрограммирован двумя конфликтующими цели: полностью раскрыть всю свою информацию и сохранить в секрете истинную цель полета от экипажа; этот конфликт привел к тому, что HAL стал параноиком и, в конечном итоге, стал смертоносным.
  • В американской комедии 1999 года Офисное пространство трое сотрудников пытаются использовать озабоченность своей компании исправлением компьютерной ошибки Y2K, заразив компьютер компании система с вирусом, который отправляет округленные пенни на отдельный банковский счет. Этот план имеет неприятные последствия, поскольку у самого вируса есть собственная ошибка, которая преждевременно отправляет большие суммы денег на счет.
  • Роман 2004 года «Ошибка» Эллен Ульман описывает попытку программиста найти неуловимую ошибку в приложении базы данных.
  • Канадский фильм 2008 года Control Alt Delete рассказывает о программисте в конце 1999 года, который пытается исправить ошибки в своей компании, связанные с годом Проблема 2000.

См. Также

Ссылки

Внешние ссылки

  • «Перечисление общих слабых мест »- экспертная веб-страница, посвященная ошибкам, на NIST.gov
  • тип ОШИБКИ Джима Грея — другое er Тип ошибки
  • Изображение «первой компьютерной ошибки» на Wayback Machine (архивировано 12 января 2015 г.)
  • «Первая компьютерная ошибка! »- письмо от 1981 об ошибке Адмирала Хоппера
  • «на пути к пониманию ошибок компилятора в GCC и LLVM «. Исследование ошибок в компиляторах 2016 г.

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

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

операционной системы,

среды и языка программирования,

реализуемых процессов,

природы и специфики различных ошибок,

методик отладки и соответствующих программных средств. 

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

Вцелом сложность отладки обусловлена следующими причинами:

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

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

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

отсутствуют четко сформулированные методики отладки.

Всоответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 10.1):


    синтаксические ошибки — ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы; ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;

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

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

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

if (c = n) x = 0; /* в данном случае не проверятся равенство с и n, а выполняется присваивание с значения n, после чего результат операции сравнивается с нулем, если программист хотел выполнить не присваивание, а сравнение, то эта ошибка будет обнаружена только на этапе выполнения при получении результатов, отличающихся от ожидаемых */ 

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

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

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

• появление сообщения об ошибке, зафиксированной схемами контроля выполнения машинных команд, например, переполнении разрядной сетки, ситуации «деление на ноль», нарушении адресации и т. п.;

появление сообщения об ошибке, обнаруженной операционной системой, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т. п.;

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

несовпадение полученных результатов с ожидаемыми.

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

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

неверное определение исходных данных,

логические ошибки,

накопление погрешностей результатов вычислений (рис. 10.2).

Н е в е р н о е о п р е д е л е н и е и с х о д н ы х д а н н ы х происходит, если возникают любые ошибки при выполнении операций ввода-вывода: ошибки передачи, ошибки преобразования, ошибки перезаписи и ошибки данных. Причем использование специальных технических средств и программирование с защитой от ошибок (см.§ 2.7) позволяет обнаружить и предотвратить только часть этих ошибок, о чем безусловно не следует забывать.

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

Кпоследней группе относят:

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

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

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

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

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

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

опосредованного проявления ошибок;

возможности взаимовлияния ошибок;

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

отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску – так называемые стохастические ошибки;

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

написания отдельных частей программы разными программистами.

Методы отладки программного обеспечения

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

ручного тестирования;

индукции;

дедукции;

обратного прослеживания.

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

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

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

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

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

В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.

Метод дедукции. По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем анализируя причины, исключают те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе — проверяют следующую причину (рис. 10.4).

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

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Процесс исправления ошибок 6 букв сканворд
  • Профессиональные юридические формулировки и клише ошибки
  • Прочитай предложение какие ошибки допущены запиши исправленный текст
  • Процесс искоренения ошибок 6 букв сканворд

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии