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

Содержание

1. Отладка программы

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

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

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

Способы обнаружения ошибки:

Оба способа по-своему удобны и обычно используются совместно.

3. принципы отладки

Принципы локализации ошибок:

Принципы исправления ошибок еще больше похожи на законы Мерфи:

4. Методы отладки

Силовые методы

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

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

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

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

Тестовые наборы данных должны учитывать все варианты решения, поэтому выберем следующие наборы чисел:

Данные Ожидаемый результат
a=10; b=-4; c=1 max=a=10
a=-2; b=8; c=4 max=b=8
a=90; b=0; c=90.4 max=c=90.4

В результате выполнения программы мы, однако, получим следующие результаты:
Для a=10; b=-4; c=1:

Для a=-2; b=8; c=4: < pre оказалось третье число 8.00Для a=90; b=0; c=90.4:

Наибольшим оказалось третье число 0.00

Вывод во втором и третьем случаях явно неверен. Будем разбираться.

1. Трассировка и промежуточная наблюдение за переменными

Добавляем промежуточную печать или наблюдение за переменными:

Листинг программы существенно увеличился и стал вот таким:

var
a, b, c: real;
begin
writeln('Программа находит значение максимального из трех введенных чисел');
write('Введите первое число '); readln(a);
writeln('Вы ввели число ',a:8:2); <отл. печать>
write('Введите второе число '); readln(b);
writeln('Вы ввели число ',b:8:2); <отл. печать>
write('Введите третье число '); readln(c);
writeln('Вы ввели число ',c:8:2); <отл. печать>
writeln('a>b=',a>b,', a>c=',a>c,', (a>b)and(a>c)=',(a>b)and(a>c)); <отл. печать>
if (a>b)and(a>c) then
writeln('Наибольшим оказалось первое число ',a:8:2)
else begin
writeln('b>a=',b>a,', b>c=',b>c,', (b>a)and(b>c)=',(b>a)and(b>c)); <отл. печать>
if (b>a)and(a>c) then
writeln('Наибольшим оказалось второе число ',b:8:2)
else
writeln('Наибольшим оказалось третье число ',b:8:2);
end;
end.

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

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

Вывод для второго случая получается следующим:

Наибольшим оказалось третье число 4.00

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

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

Как видно, невыявленные ошибки в программе остаются. Просматриваем расчетный блок: все, что относится к максимальному b (максимум с получается "в противном случае"), и обнаруживаем пресловутую проблему "a>c" вместо "b>c". Программа отлажена.

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

Неверные результаты в нашем случае могут получиться из-за ошибки в:

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

4. Обратное движение по алгоритму

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

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

В нашей задаче для самого полного набора данных нужно выбрать такие переменные, что
a > b > c
a > c > b
b > a > c
b > c > a
c > a > b
c > b > a

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

5. Средства отладки

Помимо методик, хорошо бы иметь представление о средствах, которые помогают нам выявлять ошибки. Это:

3) Непосредственное слежение:

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

Виды ошибок и основные принципы отладки программного обеспеченияРис Пример отладки приложения

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

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

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

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

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

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

рис Классификация ошибок этапа выполнения по возможным причинам

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

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

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

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

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

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

Ошибки в циклах: неправильно указано начало цикла; неправильно указаны условия окончания цикла; неправильно указано количество повторений цикла; использование бесконечного цикла.

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

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

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

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

ошибки в архитектуре приложения пприводящие к увеличени технического долга

Методы (пути) снижение ошибок в программировании

7. Советы отладчику

1) Проверяйте тщательнее: ошибка скорее всего находится не в том месте, в котором кажется.

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

3) Тщательнее следить за объявлениями констант, типов и переменных, входными данными.

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

7) Ошибка, скорее всего окажется вашей и будет находиться в тексте программы. Гораздо реже она оказывается:

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

11) Если вы уже знаете симптомы ошибки, иногда полезно не исправлять ее сразу, а на фоне известного поведения программы поискать другие ляпы.

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

2) При прогоне программы по тестовым начальным данным, полученные результаты нужно сверить с эталонными и проанализировать разницу, если она есть.

3) При разработке тестов нужно учитывать не только правильные, но и неверные исходные данные.

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

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

9. Проектирование тестов

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

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

Если исходить из алгоритма программы, мы должны составить следующие тесты:
ввод границ диапазона
— min< max
— min>max
ввод числа
— A < min (A<>0)
— A > max (A<>0)
— min <= A <= max (A<>0)
— A=0

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

10. Стратегии тестирования

1) Тестирование программы как "черного ящика".

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

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

"Черным ящиком" удобно тестировать небольшие подпрограммы.
2) Тестирование программы как "белого ящика".

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

На практике мы, как всегда, совместно используем оба принципа.
3) Тестирование программ модульной структуры.

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

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

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

См. также

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

3 способа устранения ошибок Windows

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

Аппаратные сбои проявляются в следующем:

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

возникновение синего экрана

ошибки в работе браузера

снижение скорости и сбои сетевых подключений

изменение отображения

Причины неполадок Windows:

Устранение неполадок в работе Windows служебными утилитами

Разработчики компании Microsoft предусмотрели возникновение сбоев в работе Windows и включили в пакеты ОС служебные утилиты для диагностики и устранения ошибок.

Проверка жесткого диска и исправление неполадок с помощью chkdsk

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

Командную консоль можно вызвать одним из следующих способов:

Загрузив командную консоль, в строке набрать следующее:

chkdsk буква_диска: параметры_проверки, где:

буква диска – это имя диска с двоеточием (С:).

На Скрин. 5 приведен пример использования консольной утилиты chkdsk с параметрами /F и /R на диске С: (обнаруженные неполадки исправляются автоматически).

Как видно на скрин.5, выполнение команды невозможно пока логический диск С: используется системой и выполнить проверку предлагается при перезагрузке (набрать Y (Да) или N (Нет)).

выполнение команды

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

chkdsk без аргументов

Проверка логических дисков через проводник

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

Для запуска оснастки в Windows, версии 7, выбрать Управление компьютером, как показано на скрин.7.

Для запуска оснастки в Windows, версий 8 и 10, нажать сочетание + X и выбрать Управление дисками, как показано на Скрин. 8.

На Скринах 9,10 показан выбор действий для выполнения проверки логического диска С:/ на наличие ошибок в консоли «Управление компьютером» для Windows7.

Для Windows 8 и 10 выполнение проверки проходит аналогично с небольшими отличиями в консольном оформлении и выводе сообщений.

выполнение проверки

Управление дисками

Выбор дисков

Рассписание проверки диска

Проверки-диска в windows 10

Устранение неполадок в работе Windows с помощью панели управления

Автоматически провести диагностику и устранить распространенные ошибки поможет такая оснастка «Панели Управления» (далее ПУ), как «Устранение неполадок».

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

Для доступа ко всем категориям автоматических исправлений, необходимо последовательно перейти по разделам ПУ, как указано на Скринах 11-13, и выбрать любую утилиту диагностики, запустив ее от имени администратора.

Поиск исправления проблем

Просмотр всех категорий

Устранение неполадок

Дополнительные программы для исправления ошибок Windows

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

FixWin 10

Приложение распространяется бесплатно, не требует установки на жесткий диск и запускается через исполняемый файл (FixWin 10.exe). Интерфейс английский.

Скачать FixWin10 можно с этого сайта.

FixWin помогает исправить основные проблемы:

Все исправления сгруппированы в основные разделы:

выбрать соответствующий «проблемный» раздел

Раздел для исправлений

Anvisoft PC PLUS

Anvisoft PC-PLUS – бесплатная программа, с англоязычным интерфейсом. Скачать её можно с официального сайта по этому адресу.

Функциональные возможности Anvisoft PC-PLUS позволяют исправить следующее:

Работа с Anvisoft PC-PLUS (Скрин.16-18):

Запустить исполняемый файл

Найти в списке конкретную ошибку

Процесс исправления ошибок

NetAdapter Repair All In

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

Скачать ее можно по этому адресу.

NetAdapter Repair All InOne предназначена для устранения неполадок, связанных с работой сети.

Приложение позволяет просмотреть все сетевые настройки и просканировать доступность IP и DNS (ping).

Возможности исправления и настройки:

Утилита запускается с правами администратора – Скрин.19.

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

Если нажать кнопку Advanced Repair, то настройки:

сбрасываются в значения по умолчанию.

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

Антивирусная утилита AVZ

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

AVZ – антивирусное ПО для обнаружения и удаления:

AVZ не проводит лечение зараженных программ.

Утилиту можно загрузить с сайта разработчика Z-Oleg. Com.

Язык интерфейса – русский и английский.

Запуск AVZ осуществляется без предварительной установки на компьютер (Скрин.20).

Запуск AVZ

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

Чтобы открыть микропрограммы восстановления, в меню выбрать раздел Файл/Восстановление системы (Скрин.21) и в появившемся окне отметить «галочкой» необходимые операции для исправления системных настроек – Скрин.22.

Восстановление системы

Востановление настроек системы

Часто задаваемые вопросы по неполадкам в работе Windows

Что нужно делать для профилактики предотвращения сбоев в Windows?

Как устранить STOP ошибки в Windows?

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

Источники:

https://intellect. icu/vidy-oshibok-i-osnovnye-printsipy-otladki-programmnogo-obespecheniya-6184

https://pchelp. one/obsluzhivanie/oshibki-windows-i-prichiny-nepoladok. html

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: