Справување со грешки и исклучоци во еден систем е предизвик кој често се занемарува. Во предавањето ќе покриеме теорија на грешки, справување со грешки и исклучоци на ниво на солуција, контекст и податочна анализа на лог датотеки.
7. Агенда
Ready
• Теорија на грешки;
• Типови на грешки;
• Справување со грешки по тип;
• Одговорни и засегнати страни;
• Стратегии за справување со грешки;
• Покажани практики на терен;
• Справување со грешки и екстракција на податоци во бизнис логика;
• Справување со грешки и екстракција на податоци на клиентско ниво;
• Справување со грешки и екстракција на податоци во веб апликации;
• Анализа на логови;
8. ГРЕШКА Е БИЛО КОЈ ПРЕКИН КОЈ ГО СПРЕЧУВА
СИСТЕМОТ ДА ЈА ИЗВРШУВА ФУНКЦИЈАТА ЗА КОЈА
Ready
Е НАМЕНЕТ
9. Ready
Секој сериозен систем мора да има добра стратегија на справување со
грешките
Голем дел од кодот се труди да се справи со грешки и прекини во системот
Полесно е да се специфицира и напише код за тоа што треба еден систем да
прави. Тежината е да се предвиди што може да тргне наопаку.
10. Ready
Типови на грешки
Багови, проблеми кои не може да ги предвидиме и контролираме.
Пр: Stackoverflow, Nullpointer...
using System;
class Program
{
static void Main()
{
User appUser = DomainServices.User.GetByUsername(@“marjann”);
Console.WriteLine(appUser.Email);
}
}
11. Ready
Типови на грешки
Грешки настанати од несоодветен внес на податоци.
Пр: Во поле за целоброен тип, корисникот внесува карактери...
using System;
class Program
{
static void Main()
{
var userIdInput = Console.ReadLine();
int id = int.Parse(userIdInput);
Console.WriteLine(id);
}
}
12. Ready
Типови на грешки
Инфраструктурни проблеми.
Пр: Забрана за читање на податоци на диск, полн диск, податочниот сервер
не е достапен...
using System;
class Program
{
static void Main()
{
var user = UserRepository.GetByUsername(@”marjann”);
Console.WriteLine(user.Email);
}
}
13. Ready
Со кои типови на грешки
може да се справиме?
Баговите се системски проблеми со кои не може да се справиме.
Невалиден внес на податоци е системски проблем со кој системот успешно
треба да се справи.
При инфраструктурни проблеми, системот треба да е спремен да ги извести
задолжените и одговорни страни за истиот.
14. Ready
Одговорни и засегнати
страни
Корисниците на системот.
Системските администратори.
Софтверските инженери.
15. Ready
Кој е одговорен за
справување со грешките?
Софтверските инженери.
16. Ready
Стратегии за справување
со грешки
Глобална – на ниво на систем.
Локално-контекстуална – на ниво на процес/метод/акција.
18. Ready
Глобална стратегија
Глобална перспектива на системот.
Централизирано справување со грешки.
Сакаме детален опис наместо завиткана грешка!
Сакаме детали за извршувањето!
Сакаме унифицирани пораки!
19. Ready
Глобална стратегија
Повеќе-нивоовска апстракција се коси со глобалната стратегија.
Интерно, системот не треба да ги сокрива грешките.
Пр: User.IsExistingUsername(“marjann”) -> DbConnetionException != false
Надворешно, системот треба да е транспарентен и унифициран во
информирање при настанување на грешка.
Пр: Invalid username, Username is not valid!?
20. Ready
Што правиме доколку
акцијата може да се
повтори (retry)?
Локалниот контекст стапува на сцена.
Локалниот контекст е исклучок, а не правило!
Не можеме да се справиме со повеќето грешки. Целта е да го држиме
системот жив.
Чесен исклучок на правилото: If it does not work fake it!
Пр: Немаме пристап до база, корисниот сака да се регистрира со
корисничко име, враќаме резултат дека корисничкото име е зафатено.
22. Ready
Справување со грешки и
екстракција на податоци
во бизнис логика;
Унификација на грешки, кодови и групи.
Информации за грешка(Error Info) наспроти Грешка(Exception).
Збогатување на грешката со информации и логирање.
26. Ready
Справување со грешки и
екстракција на податоци
на клиентско ниво;
Локализација на грешки.
Пренесување на информација за грешка до корисникот.
28. Ready
Анализа на логови
Кој, Што, Како, Каде, Кога?
Одговор на прашањата:
- Како се користи сотфверот?
- Тесно грло во извршување?
- Параметри на извршување?
- Шаблони на извршување?
ПРОМ – алатка за процесно рударење.