Ошибки определения данных делятся на

Отладка – это процесс локализации и исправления ошибок,

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

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

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

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

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

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

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

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

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

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

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

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

ошибки компоновки;

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

Ошибки

Ошибки

Ошибки

Ошибки

компиляции

компоновки

выполнения

9.1 Классификация ошибок (2)

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

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

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

Всвязи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом.

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

Ко вторым – С со всеми его модификациями.

9.1 Классификация ошибок (3)

Ошибки компоновки

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

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

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

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

Они могут иметь разную природу, и соответственно по-разному проявляться.

Часть ошибок обнаруживается и документируется операционной системой.

Выделяют четыре способа проявления таких ошибок:

9.1Классификация ошибок (4)

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

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

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

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

9.1 Классификация ошибок (5)

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

Ошибки

выполнения

Ошибки определения данных

Ошибки

передачи

Ошибки

преобразования

Ошибки

перезаписи

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

данные

Логические

ошибки

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

Кодирования

Неприменимый

Некорректная

работас

метод

переменными

Неверный

Некорректные

алгоритм

вычисления

Неверная

Ошибки

структураданных

межмодульных

Другие

интерфейсов

Неправильнаяреализация

алгоритма

Другие

Ошибки накопления погрешностей

Игнорирование

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

Игнорирование

способов

уменьшения

погрешности

9.2 Методы отладки

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

метод тестирования;

метод индукции;

метод дедукции;

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

Метод тестирования

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

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

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

9.2 Методы отладки(2)

Метод индукции

Метод основан на тщательном анализе симптомов ошибки, которыми могут проявляться как неверные результаты

вычислений или как сообщение об ошибке.

Процесс отладки с использованием метода индукции можно представить в виде алгоритма.

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

тестов.

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

Начало

Выявлениесимптомов ошибки

Организацияданных обошибке

Изучениеих взаимосвязей

Выдвижениегипотезы

Доказательство

гипотезы

Гипотеза

нет

доказана?

да

Нахождениеошибки

Конец

9.2 Методы отладки(2)

Метод дедукции

Начало

По

методу

дедукции

вначале

Перечисление

формируют

множество

причин,

возможныхпричин

которые могли бы вызвать данное

проявление

ошибки.

Затем

Сборновыхданных

Использование

анализируя причины, исключают

те,

процессаисключения

которые

противоречат

имеющимся

да

Исключены

данным.

все?

Если все причины исключены, то следует

нет

Доказательство

выполнить

дополнительное

гипотезы

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

исследуемого

фрагмента.

Гипотеза

нет

В

противном

случае

наиболее

доказана?

да

вероятную

гипотезу

пытаются

Нахождениеошибки

доказать.

Если

гипотеза

объясняет

полученные

признаки

ошибки,

то

ошибка найдена, иначе – проверяют

Конец

следующую причину.

9.3 Общая методика отладки ПО

Можно предложить следующую методику отладки программного обеспечения, написанного на универсальных языках программирования для выполнения в операционных системах MS DOS и Win32:

1 этап. Изучение проявления ошибки.

2 этап. Локализации ошибки .

3 этап. Определение причины ошибки.

4 этап. Исправление ошибки .

5 этап. Повторное тестирование.

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

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

Если ошибка допущена неумышленно, ее называют паралогизмом.

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

Ошибки в доказательствах уже обсуждались. Рассмотрим теперь ошибки в определениях, в делениях (классификациях) и софизмы.

Все определения делятся на неявные и явные.

Явное определение — это определение, имеющее форму равенства двух понятий (определяемого и определяющего).

Неявное определение — определение, не имеющее формы равен­ства двух понятий.

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

Обычное словарное определение гиперболы: «Гипербола — это стилистическая фигура, состоящая в образном преувеличении, напри­мер: „Наметали стог выше тучи“». Определяющая часть выражается словами «стилистическая фигура, состоящая.» и слагается из двух частей. Сначала понятие гиперболы подводится под более широкое понятие «стилистическая фигура». Затем гипербола отграничивает­ся от всех других стилистических фигур. Это достигается указанием признака «образное преувеличение», присущего только гиперболе и отсутствующего у других стилистических фигур, за которые можно было бы принять гиперболу. Явное определение гиперболы дополня­ется примером.

К явным определениям, и в частности к классическим, предъявляется ряд достаточно простых и очевидных требований. Их называют прави­лами определения.

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

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

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

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

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

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

Содержат очевидный круг определения «Война есть война» и «Театр — это театр, а не кинотеатр». Задача определения — раскрыть содержание ранее неизвестного имени и сделать его известным. Опреде­ление, содержащее круг, разъясняет неизвестное через него же. В итоге неизвестное так и остается неизвестным. Истину можно, к примеру, оп­ределить как верное отражение действительности, но только при усло­вии, что до этого верное отражение действительности не определялось как такое, которое даст истину.

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

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

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

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

Интересно отметить, что наши обычные загадки представляют собой, в сущности, своеобразные определения. Формулировка загадки — это половина определения, его определяющая часть. Отгадка — вторая его половина, определяемая часть. «Утром — на четырех ногах, днем — на двух, вечером — на трех. Что это?» Понятно, что это — человек в разные периоды своей жизни. Саму загадку можно переформулировать так, что она станет одним из возможных его определений.

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

Древний китайский буддист Дэн Инь-фэн однажды задал такую за­гадку своим ученикам. «Люди умирают сидя и лежа, некоторые умирают даже стоя. А кто умер вниз головой?» — «Мы такого не знаем», — от­ветили ученики. Тогда Дэн встал на голову и. умер.

Сейчас такого рода «загадка» кажется абсурдом. Но в то давнее вре­мя, когда жил Дэн, в атмосфере полемики с существующими обычаями и ритуалом его «загадка» и предложенная им «разгадка» показались вполне естественными. Во всяком случае, его сестра, присутствовав­шая при этом, заметила только: «Живой ты, Дэн, пренебрегал обычаями и правилами и вот теперь, будучи мертвым, опять нарушаешь общест­венный порядок!»

< Предыдущая   Следующая >


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

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

Главные аспекты качества данных

Доступность
У аналитиков должен быть доступ к необходимым данным, но, кроме этого, доступ должен быть и к инструментам, используемым в аналитике.

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

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

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

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

Однозначность
Каждое поле с информацией должно иметь полноценное описание, не допускающее двусмысленных значений.

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

Тот самый лемминг, не влияющий на биржевые курсы.

Надежность
Надежные данные — это одновременно полная и точная информация.

Своевременность
Бич российского бизнеса — несвоевременные данные.
Часто случается, что данные еще не успели обработать и проанализировать, а они уже устарели.

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

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

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

Данные с ошибками


Василиск — в его описании явно закралась ошибка.

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

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

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

В случае технических причин и сбоев все решается калибровкой и правильной настройкой инструментов сбора информации.

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

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

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

Самое надежное и простое решение — стандартизировать как можно больше этапов процесса сбора данных.

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

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

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

Так, например, некоторые результаты медицинских опросов населения показывают, что рост взрослого человека может быть 53 см или 112 см. И если в первом случае понятно, что закралась ошибка, и скорее всего рост реципиента был 153 см, то во втором случае рост может быть как правильным, так и ошибочным. При опросах часто встречаются ошибки-очепятки, такие как «аллергия на окошек» или вес 156 кг вместо 56 кг.

В среднем ошибки делятся на четыре типа:

  1. Запись
    Ошибка, при которой данные были изначально записаны неверно.
  2. Вставка
    Появление дополнительного символа.
    Например: 53,247 ► 523,247.
  3. Удаление
    Потеря одного или нескольких символов.
    Например: 53,247 ► 53,27.
  4. Перемена мест
    Просто берем и меняем два или более символов местами.
    Например: 53,247 ► 52,437.

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

Часто ошибки встречаются в написании дат, а еще чаще при столкновении разных стандартов, таких как американский (месяц/день/год) и европейский (день/месяц/год).
И если иногда ясно, что это ошибка (23 марта — 3/25), то в других случаях она может быть не замечена (3 апреля — 3 / 5 или 5/3?).

Как снизить количество  ошибок


Гиппогриф — гордое и величественное  мифическое животное, разновидность грифонов. Да, на гравюре тоже он, но с ошибками в описании.

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

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

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

Если же количество вариантов велико, то можно использовать форму вопрос-ответ с заключительным подтверждением правильности введенных данных.

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

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

Так для числа 94121 контрольным числом будет 8, при последовательном складывании цифр получается сумма 17, продолжаем складывание и получаем 17=1+7=8.

Передаем 941218, а при получении система проводит обратные расчеты и, если сумма не совпадает, то число будет отмечено как ошибочное.

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


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

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

Всем спасибо за внимание и хорошего дня!

Источник информации

Автор: Карл Андерсон
Аналитическая культура. От сбора данных до бизнес-результатов
Creating a Data-Driven Organization
ISBN: 978-5-00100-781-4
Издательство: Манн, Иванов и Фербер


Подборка по базе: ТИПОВАЯ ЗАДАЧА № 2. ОПРЕДЕЛЕНИЕ СТАТИЧЕСКОЙ УСТОЙЧИВОСТИ ПРМ.doc, Л№2 Причины отказов программного обеспечения, признаки появления, Понятие, виды и структура бизнес плана.pdf, 4курсовая работа автодор Виды социальных услуг точно.rtf, 1. Статистика ошибок и дефектов в комплексах программ и их харак, Бланк отчета ПЗ 4.1.4. Определение класса защищенности ГИС — .do, 2022 Курсовая ГП Договор понятие значение виды! доработка 2.docx, Тема Определение коммерческой скорости и сроков.docx, Модуль 2. Виды конфликтов, ПЗ 2.doc, Диктант виды предложений.docx


Виды ошибок. Определение ошибок ПО. Классификация ошибок

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

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

Также, ошибки могут относится к самым разным частям кода:

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

Ошибки


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

Ошибки компоновки

Ошибки компиляции

Классификация ошибок по этапу обработки программы

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


Ошибки накопления погрешностей

Ошибки определения данных


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


Кодирования

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

  • Игнорирование ограничений разрядной сетки
  • Игнорирование способов уменьшения погрешности
  • Ошибки передачи
  • Ошибки преобразования
  • Ошибки перезаписи
  • Неправильные данные

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

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

  1. Отсутствие заданий начальных значений переменных.
  2. Неверные условия окончания цикла.
  3. Неверную индексацию цикла.
  4. Отсутствие задания условий инициирования цикла.
  5. Неправильное указание ветви алгоритма для продолжения процесса решения задачи.

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

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

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

  1. Пропуск некоторых операторов.
  2. Отсутствие необходимых данных.
  3. Непредусмотренные данные.
  4. Неверный формат данных.

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

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

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

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

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

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

  1. Противоречивые команды.
  2. Отсутствие условий окончания цикла.
  3. Дублирование или отсутствие меток.
  4. Отсутствие описания массива.
  5. Запрещенный переход.

Советы по устранению ошибок:

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

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

  1. Присваивание.
  2. Ввод.
  3. Чтение из файла.

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

Обнаружение ошибок.

Ситуации, по которым мы определяем, что в программе есть ошибка:

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

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

  • точки обнаружения
  • точки происхождения

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

Автор статьи

Юлия Валерьевна Шульгина

Эксперт по предмету «Логика»

преподавательский стаж — 10 лет

Задать вопрос автору статьи

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

Определение 1

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

Любое определение состоит из двух основных элементов:

  • того, что определяется (определяемого понятия, definiendum);
  • того, при помощи чего определяется (определяющего понятия, definiens).

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

Китайский язык для начинающих

Научись писать, понимать и воспроизводить текстовую информацию

Выбрать занятия

Иногда дать определение (т.е. однозначно и полностью задать значение термина) невозможно. Тогда прибегают к приемам, сходным с определением:

  • указанию (остенсивному определению), т. е. разъяснению выражений путем непосредственного указания на предметы (процессы, явления), ими обозначаемые. Маленькие дети усваивают значения большинства терминов именно таким способом. Также остенсивные определения могут использоваться при изучении иностранного языка;
  • описанию, т. е. перечислению некоторых признаков предметов, позволяющих их отличить (обнаружить). Прием описания относится к эмпирическому уровню познания, на котором происходит выявление свойств изучаемых предметов;
  • характеристике, т. е. указанию существенных (в том или ином отношении) отличительных признаков. Характеристика близка к настоящему определению, но отличие состоит в том, что у характеристики нет цели отграничить, отличить характеризуемый предмет от всех остальных;
  • сравнению, т. е. косвенной характеристике, состоящей в указании общих и отличных черт предметов рассматриваемого класса по сравнению с предметами другого класса.

«Ошибки при определении понятий в логике» 👇

Классификация определений

В зависимости от того, что определяется (сам предмет или просто утверждается новое обозначающее его имя) выделяют два вида определений:

  • реальные (касающиеся предметов). Их цель – раскрыть содержание, взаимосвязи и существенные признаки предмета;
  • номинальные (касающиеся имен). Их цель – указать, что из перечисленного в определении именуется вводимым термином.

Определение 2

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

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

Пример номинального определения: «Электролиты – это вещества, растворы (расплавы) которых проводят электрический ток».

Определение 3

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

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

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

По форме определения бывают:

  • явными (имеющими форму «А есть В» или «А, если и только если В»);
  • неявными (в которых нет четкого различия между определяемой и определяющей частями).

Правила определения и типовые ошибки

Ко всем определениям – независимо от их вида и формы – предъявляются определенные требования, сформулированные в виде правил.

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

  1. Слишком широкое определение (если объем определяющего термина больше, чем объем определяемого термина).

    Пример 1

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

  2. Слишком узкое определение (если объем определяющего термина меньше, чем объем определяемого термина).

    Пример 2

    Пример слишком узкого определения: «Биология – это наука о растениях и животных». На самом деле, этими направлениями занимаются отдельные разделы биологии; биология в целом охватывает более общие и широкие вопросы.

Второе правило: определение не должно порождать круг. Это значит, что должны быть выполнены условия:

  • определяющая часть явного определения не должна содержать определяемый термин;
  • термины, используемые в определяющей части, не должны определяться через определяемый термин.

Если это правило нарушается, могут возникнуть следующие ошибки:

  1. Порочный круг. В этом случае смысл термина из определяющей части раскрывается в другом определении через исходный определяемый термин.

    Пример 3

    Пример порочного круга: «Материя – это все, не являющееся сознанием; сознание – это все, не являющееся материей».

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

    Пример 4

    Пример тавтологичного определения: «Дождливая погода – это погода, когда идет дождь».

Третье правило: определение должно быть ясным. Если это правило нарушается, формируется неясное определение (с двусмысленным, метафорическим и непонятным определяющим термином).

Пример 5

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

Находи статьи и создавай свой список литературы по ГОСТу

Поиск по теме

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

индукции;

дедукции;

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

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

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

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

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

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

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

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

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

Отладка, или debugging, — это поиск (локализация), анализ и устранение ошибок в программном обеспечении, которые были найдены во время тестирования.

Виды ошибок

Ошибки компиляции

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

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

Ошибки компоновки

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

Ошибки выполнения (RUNTIME Error)

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

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

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

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

К ним относятся:

  • ошибки преобразования;
  • ошибки данных;
  • ошибки перезаписи.

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

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

В эту группу входят:

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

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

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

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

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

Метод индукции

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

Вот как выглядит процесс:

Алгоритм отладки по методу индукции

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

Метод дедукции

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

Отладка по методу дедукции

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

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

Как выполняется отладка в современных IDE

Ранние отладчики, например gdb, представляли собой отдельные программы с интерфейсами командной строки. Более поздние, например первые версии Turbo Debugger, были автономными, но имели собственный графический интерфейс для облегчения работы. Сейчас большинство IDE имеют встроенный отладчик. Он использует такой же интерфейс, как и редактор кода, поэтому можно выполнять отладку в той же среде, которая используется для написания кода.

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

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

Шаг с заходом (step into)

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

Шаг с обходом (step over)

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

Шаг с выходом (step out)

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

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

У некоторых отладчиков (таких как GDB 7.0, Visual Studio Enterprise Edition 15.5 и более поздних версий) есть возможность вернуться на шаг назад. Это полезно, если пропущена цель либо нужно повторно проверить выполненную инструкцию. 

Отладка – это процесс локализации и исправления ошибок,

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

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

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

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

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

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

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

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

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

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

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

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

ошибки компоновки;

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

Ошибки

Ошибки

Ошибки

Ошибки

компиляции

компоновки

выполнения

9.1 Классификация ошибок (2)

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

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

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

Всвязи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом.

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

Ко вторым – С со всеми его модификациями.

9.1 Классификация ошибок (3)

Ошибки компоновки

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

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

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

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

Они могут иметь разную природу, и соответственно по-разному проявляться.

Часть ошибок обнаруживается и документируется операционной системой.

Выделяют четыре способа проявления таких ошибок:

9.1Классификация ошибок (4)

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

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

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

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

9.1 Классификация ошибок (5)

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

Ошибки

выполнения

Ошибки определения данных

Ошибки

передачи

Ошибки

преобразования

Ошибки

перезаписи

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

данные

Логические

ошибки

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

Кодирования

Неприменимый

Некорректная

работас

метод

переменными

Неверный

Некорректные

алгоритм

вычисления

Неверная

Ошибки

структураданных

межмодульных

Другие

интерфейсов

Неправильнаяреализация

алгоритма

Другие

Ошибки накопления погрешностей

Игнорирование

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

Игнорирование

способов

уменьшения

погрешности

9.2 Методы отладки

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

метод тестирования;

метод индукции;

метод дедукции;

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

Метод тестирования

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

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

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

9.2 Методы отладки(2)

Метод индукции

Метод основан на тщательном анализе симптомов ошибки, которыми могут проявляться как неверные результаты

вычислений или как сообщение об ошибке.

Процесс отладки с использованием метода индукции можно представить в виде алгоритма.

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

тестов.

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

Начало

Выявлениесимптомов ошибки

Организацияданных обошибке

Изучениеих взаимосвязей

Выдвижениегипотезы

Доказательство

гипотезы

Гипотеза

нет

доказана?

да

Нахождениеошибки

Конец

9.2 Методы отладки(2)

Метод дедукции

Начало

По

методу

дедукции

вначале

Перечисление

формируют

множество

причин,

возможныхпричин

которые могли бы вызвать данное

проявление

ошибки.

Затем

Сборновыхданных

Использование

анализируя причины, исключают

те,

процессаисключения

которые

противоречат

имеющимся

да

Исключены

данным.

все?

Если все причины исключены, то следует

нет

Доказательство

выполнить

дополнительное

гипотезы

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

исследуемого

фрагмента.

Гипотеза

нет

В

противном

случае

наиболее

доказана?

да

вероятную

гипотезу

пытаются

Нахождениеошибки

доказать.

Если

гипотеза

объясняет

полученные

признаки

ошибки,

то

ошибка найдена, иначе – проверяют

Конец

следующую причину.

9.3 Общая методика отладки ПО

Можно предложить следующую методику отладки программного обеспечения, написанного на универсальных языках программирования для выполнения в операционных системах MS DOS и Win32:

1 этап. Изучение проявления ошибки.

2 этап. Локализации ошибки .

3 этап. Определение причины ошибки.

4 этап. Исправление ошибки .

5 этап. Повторное тестирование.

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

Какие существуют методы анализа и локализации ошибки

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

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

Существует три основных способа тестирования:

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

Функциональное или аналитическое тестирование

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

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

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

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

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

Тест граничных значений

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

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

Локализация ошибок

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

Процесс локализации ошибок состоит из следующих трех компонент:

Получение на машине тестовых результатов.

Анализ тестовых результатов и сверка их с эталонными.

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

Технология отладки автоматизированного рабочего места

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

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

1) Отладка программы производилась следующим образом:

2) Запуск программы с набором тестовых входных данных и выявление наличия ошибок.

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

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

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

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

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

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

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

7. Локализация ошибок

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

Процесс локализации ошибок состоит из следующих трех компонент:

1. Получение на машине тестовых результатов.

2. Анализ тестовых результатов и сверка их с эталонными.

3. Выявление ошибки или формулировка предположения о характере и месте ошибки в программе.

По принципам работы средства локализации разделяются на 4 типа :

1. Аварийная печать.

2. Печать в узлах.

АВАРИЙНАЯ ПЕЧАТЬ осуществляется один раз при работе отлаживаемой программы, в момент возникновения аварийной ситуации в программе, препятствующей ее нормальному выполнению. Тем самым, конкретное место включения в работу аварийной печати определяется автоматически без использования информации от программиста, который должен только определить список выдаваемых на печать переменных.

ПЕЧАТЬ В УЗЛАХ включается в работу в выбранных программистом местах программы; после осуществления печати значений данных переменных продолжается выполнение отлаживаемой программы.

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

ПРОКРУТКА производится на заданных участках программы, и после выполнения каждого оператора заданного типа (например, присваивания или помеченного) происходит отладочная печать.

По типам печатаемых значений (числовые и текстовые или меточные) средства разделяются на арифметические и логические.

7.2. Классификация средств локализации ошибок

Ниже дана классификация средств локализации.

ТИПЫ СРЕДСТВ ЛОКАЛИЗАЦИИ ОШИБОК :

СРЕДСТВА ЛОКАЛИЗАЦИИ:

1. Аварийная печать (арифметическая).

1.1. Специальные средства языка.

1.2. Системные средства.

2. Печать в узлах (арифметическая).

2.1. Обычные средства языка.

2.2. Специальные средства языка.

3. Слежение (специальные средства).

4. Прокрутка (специальные средства).

8. Технология отладки программы автоматизации учета движения товаров на складе малого предприятия

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

1. Просмотр текста программы и прокрутка с целью обнаружения явных синтаксических и логических ошибок.

2. Трансляция программы (транслятор выдает сообщения об обнаруженных им ошибках в тексте программы).

3. Тестирование. Тестирование проводилось посредством ввода исходных данных, с дальнейшей их обработкой, выводом результатов на печать и экран. Результаты работы программы сравнивались заданными в техническом задании.

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

Отладка программы производилась по следующему алгоритму :

1. Прогонка программы с набором тестовых входных данных и выявление наличия ошибок.

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

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

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

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

В качестве тестовых входных данных использовалась последовательность частотных выборок, генерируемых имитатором в режиме 1. (Каждому интервалу соответствует фиксированное значение выборок.)

Итоговый тест по дисциплине «Поддержка и тестирование программных модулей»

Является ли программа аналогом математической формулы?

Варианты ответов
  • Да
  • Нет
  • Математические формулы и программы не сводятся друг к другу
Вопрос 2

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

Варианты ответов
  • использование аналогий
  • эксперимент над программой
  • доказательство программы
  • формальный и интерпретационный
Вопрос 3

Отметьте верные утверждения

Варианты ответов
  • тестирование – процесс поиска ошибок
  • в фазу тестирования входят поиски и исправление ошибок
  • отладка – процесс локализации и исправления ошибок
Вопрос 4

Зачем нужна спецификация тестирования?

Варианты ответов
  • для формирования команды тестировщиков
  • для разработки тестового набора
  • для понимания смысла программы
Вопрос 5
Варианты ответов
  • выполнение программы в уме
  • пошаговое выполнение
  • метод контрольных точек и анализа трасс
Вопрос 6

Зачем нужен Log-файл?

Варианты ответов
  • для изучения результатов тестирования в режиме on-line
  • для фиксации результатов прогона test-suite
  • для записи комментариев после прогона тестов
Вопрос 7
Варианты ответов
  • разработка тестового набора
  • прогон программы на тестовом наборе
  • доказательство правильности программы
  • анализ результатов тестирования
Вопрос 8
Варианты ответов
  • определение областей эквивалентности входных параметров
  • анализ покрытия тестами всех возможных случаев поведения
  • проверка граничных значений
Вопрос 9

Что такое управляющий граф программы (УГП)?

Варианты ответов
  • множество операторов программы.
  • граф, вершины которого кодируют операторы программы, а дуги — управления (порядок исполнения) операторов
  • множество операторов управления
Вопрос 10
Варианты ответов
  • множество связанных дуг УГП
  • последовательность вершин и дуг УГП с фиксированными начальной и конечной вершиной
  • последовательность ветвей УГП с фиксированными начальной вершиной первой ветви и конечной вершиной последней ветви пути
Вопрос 11
Варианты ответов
  • нереализуемый путь недоступен при корректном исполнении программы
  • нереализуемый путь недоступен всегда
  • нереализуемый путь доступен при сбое
  • нереализуемый путь доступен при реализации недопустимых состояний переменных программы
Вопрос 12

Возможно ли тестирование программы на всех допустимых значениях параметров?

Варианты ответов
  • да, всегда
  • никогда
  • возможно в отдельных случаях
Вопрос 13

Какие предъявляются требования к идеальному критерию тестирования?

Варианты ответов
  • достаточность
  • достижимость
  • полнота
  • проверяемость
Вопрос 14

Какие классы критериев тестируемости известны

Варианты ответов
  • структурные критерии
  • мутационные критерии
  • функциональные критерии
  • сценарные критерии
  • стохастические критерии
Вопрос 15
Варианты ответов
  • сценарный критерий
  • такого критерия не существует
  • критерий «черного ящика»
Вопрос 16
Варианты ответов
  • критерий тестирования команд
  • критерий тестирования ветвей
  • критерий тестирования циклов
  • критерий тестирования путей
Вопрос 17
Варианты ответов
  • не проверяется соответствие со спецификацией
  • не проверяется соответствие со спецификацией, не зафиксированное в структуре программы
  • не проверяются ошибки в структурах данных
Вопрос 18
Варианты ответов
  • тестирование пунктов спецификации
  • тестирование классов входных данных
  • тестирование классов выходных данных
  • тестирование функций
  • тестирование правил
Вопрос 19
Варианты ответов
  • не проверяется соответствие со спецификацией
  • не проверяются ошибки, требования к которым не зафиксированы в спецификации
  • не проверяются ошибки в структурах данных, требования к которым не зафиксированы в спецификации
Вопрос 20
Варианты ответов
  • создание программ-мутантов на основе изменения модульной структуры основной программы
  • создание программ-мутантов с функциональными дефектами
  • оценка числа ошибок в программе на основе искусственно внесенных мелких ошибок
Вопрос 21
Варианты ответов
  • оценка проекта интегрирует оценки оттестированности модулей
  • оценка проекта может вычисляться инкрементально
  • в результате получаем наихудшую оценку оттестированности
  • в результате получаем наилучшую оценку оттестированности
Вопрос 22

Какие существуют разновидности уровней тестирования?

Варианты ответов
  • модульное
  • интеграционное
  • структурное
  • системное
  • регрессионное
Вопрос 23

Какие задачи у модульного тестирования?

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

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

Варианты ответов
  • анализ потоков управления модуля
  • анализ потоков данных модуля
  • анализ покрытия в соответствии с заданными структурными критериями
Вопрос 25
Варианты ответов
  • построение УГП (управляющего графа программы)
  • выбор тестовых путей
  • генерация тестов, соответствующих выбранным тестовым путям
Вопрос 26
Варианты ответов
  • статические
  • динамические
  • методы реализуемых путей
Вопрос 27
Варианты ответов
  • Регрессионное тестирование
  • монолитное тестирование
  • нисходящее тестирование
  • восходящее тестирование
Вопрос 28
Варианты ответов
  • необходимость разработки заглушек
  • параллельная разработка эффективных модулей
  • необходимость разработки среды управления очередностью вызовов модулей
  • необходимость разработки драйверов
Вопрос 29
Варианты ответов
  • тесты оперируют пользовательским или другими внешними интерфейсами
  • структура проекта тестируется на уровне подсистем
  • тестированию подлежит система в целом
  • тестирование осуществляется по методу «черного ящика»
Вопрос 30
Варианты ответов
  • выявление дефектов в функционировании приложения или в работе с ним
  • выявление дефектов использования ресурсов
  • выявление несовместимости с окружением
  • выявление непредусмотренных сценариев применения или использования непредусмотренных комбинаций данных
Вопрос 31
Варианты ответов
  • перетестирование предусматривает только контроль частей приложения, связанных с изменениями
  • выбор между полным и частичным перетестированием и пополнением тестовых наборов
  • регрессионное тестирование является подмножеством системного тестирования
Вопрос 32

Какие типы дефектов выявляются при системном и регрессионном тестировании

Программные ошибки. Методы отладки

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

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

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

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

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

В соответствии с этапом обработки, на котором появляются ошибки, различают ошибки компиляции, ошибки компоновки, ошибки выполнения (рис. 5.1) [7].

Группы программных ошибок

Рис. 5.1. Группы программных ошибок

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

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

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

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

Причины ошибок выполнения очень разнообразны, а потому их

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

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

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

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

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

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

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

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

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

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

Методы отладки программного обеспечения можно классифицировать следующим образом [7]:

  • • метод ручного тестирования;
  • • метод индукции;
  • • метод дедукции;
  • • метод обратного прослеживания.

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

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

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

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

Рассмотрим категории программных ошибок, которые встречаются наиболее часто.

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

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

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

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

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

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

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

Ситуация гонок. Предположим, в системе ожидаются два события: А и Б. Если первым наступит событие А, то выполнение программы продолжится, а если событие Б, то в работе программы произойдет сбой. Разработчики предполагают, что первым всегда должно быть событие А, и не ожидают, что Б может выиграть гонки и наступить раньше. Такова классическая ситуация гонок. Тестировать ситуации гонок довольно сложно. Наиболее типичны они для систем, где параллельно выполняются взаимодействующие процессы и потоки, а также для многопользовательских систем реального времени. Ошибки в таких системах трудно воспроизвести, и на их выявление обычно требуется очень много времени.

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

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


Подборка по базе: Понятие, виды и структура эколог.правонарушений.docx, понятие структура и виды правосознания.docx, понятие структура и виды правосознания.pptx, Индексы для оценки уровня физического развития. Определение типа, Пенсия за выслугу лет понятие, функции и виды.doc, Практическое заняние №1 Тема 1 ДЕНЬГИ СУЩНОСТЬ, ФУНКЦИИ, ВИДЫ , Договора и их виды, как одна из форм организации коммерческой д, Лесные пожары. Определение, верховые, низовые, почвенные.doc, инструкция групповые виды.doc, ЭКСКУРСИИ И ИХ ВИДЫ.pptx


Виды ошибок. Определение ошибок ПО. Классификация ошибок

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

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

Также, ошибки могут относится к самым разным частям кода:

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

Ошибки


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

Ошибки компоновки

Ошибки компиляции

Классификация ошибок по этапу обработки программы

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


Ошибки накопления погрешностей

Ошибки определения данных


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


Кодирования

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

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

  • Ошибки передачи
  • Ошибки преобразования
  • Ошибки перезаписи
  • Неправильные данные

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

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

Классификация ошибок этапа выполнения

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

  1. Отсутствие заданий начальных значений переменных.
  2. Неверные условия окончания цикла.
  3. Неверную индексацию цикла.
  4. Отсутствие задания условий инициирования цикла.
  5. Неправильное указание ветви алгоритма для продолжения процесса решения задачи.

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

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

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

  1. Пропуск некоторых операторов.
  2. Отсутствие необходимых данных.
  3. Непредусмотренные данные.
  4. Неверный формат данных.

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

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

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

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

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

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

  1. Противоречивые команды.
  2. Отсутствие условий окончания цикла.
  3. Дублирование или отсутствие меток.
  4. Отсутствие описания массива.
  5. Запрещенный переход.

Советы по устранению ошибок:

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

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

  1. Присваивание.
  2. Ввод.
  3. Чтение из файла.

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

Обнаружение ошибок.

Ситуации, по которым мы определяем, что в программе есть ошибка:

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

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

  • точки обнаружения
  • точки происхождения

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

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