Similar presentations:
Обработка ошибок
1.
ОБРАБОТКА ОШИБОК2.
ВИДЫ ОШИБОКОшибки времени компиляции
Ошибки времени выполнения
Синтаксические
Динамические семантические
Статические семантические
Логические
Скрытые ошибки
3.
СИНТАКСИЧЕСКИЕ ОШИБКИprivate string name
public Class1()
{
public override bool Solve(
4.
СТАТИЧЕСКИЕ СЕМАНТИЧЕСКИЕИспользование неинициализированных
переменных
int i;
i++;
Несовпадение типов
int a = "hello";
Ошибки в выражениях
string s = "...";
int a = 5 - s;
Неизвестные ссылки
//using System;
namespace EventCalculus.Axioms
{
public class HoldsAtPredicate
{
public override bool Solve()
{
throw new
NotImplementedException();
}
}
}
5.
ДИНАМИЧЕСКИЕ СЕМАНТИЧЕСКИЕВыход индекса за пределы массива
int[] v = new int[10];
v[10] = 100;
Отсутствие блока catch при наличии оператора throw
6.
ЛОГИЧЕСКИЕОшибки в логике проведения вычислений
public static int Sum(int a, int b)
{
return a - b;
}
Ошибки выхода из циклов
for (int i = 0; i < n; i--)
Ошибки ветвления
7.
СКРЫТЫЕ ОШИБКИ (LATENT ERRORS)Деление на 0
int res = (a + b) / (c - d);
Ссылки на null
var value = truthValues.FirstOrDefault(x => x.Time == time).Value;
8.
ОТЛАДКА9.
НЕЭФФЕКТИВНЫЙ СПОСОБ ОТЛАДКИГадать где находится ошибка
Сначала делать, а потом думать
Частные исправления
Свалить все на компилятор, компьютер, язык, чужие библиотеки, иллюминатов, рептилоидов
10.
ЭФФЕКТИВНЫЙ МЕТОД ОТЛАДКИСобрать данные (логирование, результаты тестов и т.д.)
Сформулировать гипотезу, почему все так произошло
Разработать эксперимент, подтверждающий или опровергающий гипотезу
Оценить результат выполнения теста
Повторить
11.
ОТЛАДКА12.
СПОСОБЫ ИЗБАВЛЕНИЯ ОТ ОШИБОКМаксимальное покрытие кода тестами
Тестирование недостатка данных
Использование утверждений
Проверка всех входных данных
Проверка доступности внешних ресурсов
Проверка на null
Грамотное разбиение кода на классы, методы и т.д.
13.
СПОСОБЫ ОБРАБОТКИ ОШИБОКВернуть нейтральное значение (но не Null)
Заменить следующим корректным блоком
данных
Заменить предыдущим значением
Подставить ближайшее допустимое значение
Логирование
Возврат кода ошибки
Вызвать метод обработки ошибки
Показать сообщение об ошибке
Прекратить выполнение
Сгенерировать исключение
14.
ВОЗВРАТ КОДА ОШИБКИ VS ГЕНЕРАЦИЯ ИСКЛЮЧЕНИЯВозврат кода ошибки
Многословность
Вызов каждого метода должен быть обернут блоком if
«Хрупкость»
Можно легко забыть написать тот самый if
Быстродействие
Неуниверсальность
Не могут быть использованы в конструкторах, операторах,
свойствах
Подразумевают использование выходных переменных
Генерация исключения
Универсальность
Могут быть использованы в операторах,
конструкторах, свойствах
Соответствуют принципу открытости/закрытости
Типизированы
Обработка ошибки находится где-то, возможно
очень далеко от места ее возникновения
15.
ПРАВИЛА РАБОТЫ С ИСКЛЮЧЕНИЯМИИсключения всегда должны быть обработаны
Исключения генерируются на уровне абстракции обрабатывающего их класса, то есть в терминах
обрабатывающего класса
В методе, в котором есть блок try/catch не должно быть больше ничего
Исключения должны содержать максимально возможное количество информации
Исключения не должны использоваться вместо блока if/else