Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Otvety.docx

.pdf
Скачиваний:
42
Добавлен:
03.03.2016
Размер:
934.89 Кб
Скачать

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

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

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

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

Алгоритм:

1.поиск ошибки начинается с точки получения некорректного результата.

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

Методы и средства получения дополнительной информации

Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:

отладочный вывод;

интегрированные средства отладки;

независимые отладчики.

Интегрированные средства отладки

Большинство современных сред программирования (Delphi, Builder C++, VisualStudio и т.д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:

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

предусматривать точки останова;

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

отображать содержимое любых переменных при пошаговом выполнении;

отслеживать поток сообщений и т.п.

Отладка с использованием независимых отладчиков

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

9. Методы и средства отладки

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

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

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

2.Метод индукции(Анализ программы от частного к общему.

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

Алгоритм действий:

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

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

3.Изучение взаимосвязи ошибок

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

5.Проверка гипотезы и корректировка

3.Метод дедукции (От общего к частному.

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

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

Алгоритм:

1.Поиск ошибки начинается с точки получения некорректного результата.

2.Для этой точки проверяются все входные параметры и если некорретны, переходим к точки их появления и делаем анологичную процедуру в этой точке

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

1 этап­ изучение проявления

2 этап­ локализация

3 этап­ определение причины

4 этап­ исправление

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

Методы и средства получения дополнительной информации

Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:

отладочный вывод;

интегрированные средства отладки;

независимые отладчики.

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

1) Аварийная печать ­ вывод сообщений о ненормальном завершении отдельных блоков и всей программы в целом.

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

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

­арифметическое (за тем, чему равны, когда и как изменяются выбранные переменные),

­логическое (когда и как выполняется выбранная последовательность операторов),

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

­отслеживание обращений к переменным,

­отслеживание обращений к подпрограммам,

­проверка значений индексов элементов массивов и т.д.

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

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

­прервать выполнение программы;

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

10.Особенности ведения логов и развитие систем логирования.

Система логирования

В наст. Момент есть такие системы логгирования: Log 4j –исп. по наст. Момент устоявшийся фрейморк

Java.utils.loggin –стандарт.набор перестают использовать

Common – ligging – используется в момент появл. И сохр для обрсовмест. SLF4Y – альтернатива более хорошая (Common – ligging)

Logback – альтернативный движко исп. Там где не устраивает log 4j

Цели логирования:

1 отследить действия системы без отладки

2 изучить обстоятельвства кот. Привели к опред. Сост. Действия

3 проанализировать расходы ресурсов Основной функционал сист. Логирований сообщений:

1 дебаг( отладка сообщ.)

2 информац. Сообщ.

3 предупреждение

4 ошибки

5 fatal( система больше не работает)

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

­выбора потока логирования ( консоль/файл, возможно Б/Д, отправка по сети)

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

Интегрированные тесты обычно проводят на 2ух ур­нях

1 прогр. интерфейс (API)

2 пользовательский интерфейс

CLI – command line interface

Файл регистрации​, ​протокол​, ​журнал​или ​лог​(​англ.log) — файл с записями о событиях в хронологическом порядке. Различают регистрацию внешних событий и протоколирование работы самой программы ­ источника записей (хотя часто всё записывается в единый файл).

Регистрация внешних событий

Лог­файлы сервера​— специальные файлы, в которых протоколируются определённые действия пользователя или программы на сервере.[1]Например, в лог­файлы веб­сервера записывается информация, откуда пришёл тот либо иной посетитель, когда и сколько времени он провел на сайте, что там смотрел и скачивал, какой у него ​браузери какой

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

Проанализировав лог­файлы, можно получить сводные данные активности пользователей, изучить закономерности поведения групп пользователей и оценить эффективность рекламной кампании. Часто используемые данные (статистика) могут

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

биллинговые системы учёта​.

Протоколирование работы программы

Ведение протокола, или ​протоколирование,— хронологическая запись с различной

(настраиваемой) степенью детализации сведений о происходящих в системе событиях

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

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

Наиболее подходящей ​парадигмойдля решения задач ведения файлов регистрации считается ​аспектно­ориентированное программирование.

Ротация логов

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

файл лога потребляет много ​дискового пространства

большой файл лога становится тяжелым для чтения и анализа.

Таким образом бывает необходима ротации логов ­ усечение текущего лога,

архивирование или удаление предыдущих накопленных данных:

по временному промежутку (каждый час, каждый день, за последние сутки/неделю) в новый файл.

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

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

Каждый новый запуск экземпляра ПО создает новый файл лога или переименовывает/откладывает предыдущий файл лога.

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

11. Уровни логгирования. Особенности обработки исключительных ситуаций.

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

У каждого логера есть уровень логирования*(log level). Уровень логирования указывает важность принимаемых сообщений:

Уровень INFO ­ просто информирование о неком событии

Уровень DEBUG ­ используется при отладке

Уровень WARN ­ сообщение об ошибке или нестандартной ситуации, которая потенциально опасна

Уровень ERROR ­ сообщение об ошибке, после которой работа программы все еще возможна

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

Обрабо?тка исключи?тельных ситуа?ций(англ. exception handling)— механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».

Общее понятие исключительной ситуации

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

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

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

Исчерпание доступной памяти. Если в какой­то момент система оказывается не в состоянии выделить достаточный для прикладной программы объём оперативной памяти, программа не сможет работать нормально.

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

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

Общее описание

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

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

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

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

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

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

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

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

Неструктурная обработка исключений

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

Структурная обработка исключений

Структурная обработка исключений требует обязательной поддержки со стороны языка программирования — наличия специальных синтаксических конструкций. Такая конструкция содержит блокконтролируемого кода и обработчик (обработчики) исключений.Здесь «НачалоБлока» и «КонецБлока» — ключевые слова, которые

ограничивают блок контролируемого кода, а «Обработчик» — начало блока обработки соответствующего исключения. Если внутри блока, от начала до первого обработчика, произойдёт исключение, то произойдёт переход на обработчик, написанный для него, после чего весь блок завершится и исполнение будет продолжено со следующей за ним команды. В некоторых языках нет специальных ключевых слов для ограничения блока контролируемого кода, вместо этого обработчик (обработчики) исключений могут быть встроены в некоторые или во все синтаксические конструкции, объединяющие несколько операторов. Так, например, в языке Ада любой составной оператор (begin — end) может содержать обработчик исключений.

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

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

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

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

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