Down the rabbit hole - Error handling examined

Post on 14-Jul-2015

1.091 views 3 download

Transcript of Down the rabbit hole - Error handling examined

Ready

Ready

Please Muteyour mobile devices

Ready

General Sponsors

Platinum Sponsors

Silver Sponsors

Gold Sponsors

Bronze Sponsors

Promoters

Ready

Marjan Nikolovski

Father, Dev, CEO/Emit Knowledge

Down the rabbit holeError handling examined

try {

}

// Twitter: @m4rjann

// Blog: emitknowledge.com/research-labs

Ready

Посветено за сопругата и синот

Ready

Ready

Агенда

• Теорија на грешки;

• Типови на грешки;

• Справување со грешки по тип;

• Одговорни и засегнати страни;

• Стратегии за справување со грешки;

• Покажани практики на терен;

• Справување со грешки и екстракција на податоци во бизнис логика;

• Справување со грешки и екстракција на податоци на клиентско ниво;

• Справување со грешки и екстракција на податоци во веб апликации;

• Анализа на логови;

Ready

ГРЕШКА Е БИЛО КОЈ ПРЕКИН КОЈ ГО СПРЕЧУВА СИСТЕМОТ ДА ЈА ИЗВРШУВА ФУНКЦИЈАТА ЗА КОЈА

Е НАМЕНЕТ

Ready

Секој сериозен систем мора да има добра стратегија на справување со грешките

Голем дел од кодот се труди да се справи со грешки и прекини во системот

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

Ready

Багови, проблеми кои не може да ги предвидиме и контролираме. Пр: Stackoverflow, Nullpointer...

Типови на грешки

using System;

class Program{

static void Main(){

User appUser = DomainServices.User.GetByUsername(@“marjann”);Console.WriteLine(appUser.Email);

}}

Ready

Грешки настанати од несоодветен внес на податоци.Пр: Во поле за целоброен тип, корисникот внесува карактери...

Типови на грешки

using System;

class Program{

static void Main(){

var userIdInput = Console.ReadLine();int id = int.Parse(userIdInput);Console.WriteLine(id);

}}

Ready

Инфраструктурни проблеми.Пр: Забрана за читање на податоци на диск, полн диск, податочниот сервер не е достапен...

Типови на грешки

using System;

class Program{

static void Main(){

var user = UserRepository.GetByUsername(@”marjann”);Console.WriteLine(user.Email);

}}

Ready

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

Со кои типови на грешки може да се справиме?

Невалиден внес на податоци е системски проблем со кој системот успешно треба да се справи.

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

Ready

Корисниците на системот.

Одговорни и засегнати страни

Системските администратори.

Софтверските инженери.

Ready

Софтверските инженери.

Кој е одговорен за справување со грешките?

Ready

Глобална – на ниво на систем.

Стратегии за справување со грешки

Локално-контекстуална – на ниво на процес/метод/акција.

Ready

КЛИЕНТ/КОРИСНИЧКИ ИНТЕРФЕЈС

БИЗНИС ЛОГИКА

ПОДАТОЧНО РЕПОЗИТОРИ

АПИ СЕРВИСИ

ЕКСТЕРНИ СЕРВИСИ

СПРАВУВАЊЕ СО ГРЕШКИ

Ready

Глобална перспектива на системот.

Глобална стратегија

Централизирано справување со грешки.

Сакаме детален опис наместо завиткана грешка!

Сакаме детали за извршувањето!

Сакаме унифицирани пораки!

Ready

Повеќе-нивоовска апстракција се коси со глобалната стратегија.

Глобална стратегија

Интерно, системот не треба да ги сокрива грешките.Пр: User.IsExistingUsername(“marjann”) -> DbConnetionException != false

Надворешно, системот треба да е транспарентен и унифициран во информирање при настанување на грешка.Пр: Invalid username, Username is not valid!?

Ready

Локалниот контекст стапува на сцена.

Што правиме доколку акцијата може да се повтори (retry)?

Локалниот контекст е исклучок, а не правило!

Не можеме да се справиме со повеќето грешки. Целта е да го држиме системот жив.

Чесен исклучок на правилото: If it does not work fake it!Пр: Немаме пристап до база, корисниот сака да се регистрира со корисничко име, враќаме резултат дека корисничкото име е зафатено.

Ready

Демо

Ready

Унификација на грешки, кодови и групи.

Справување со грешки и екстракција на податоци во бизнис логика;

Информации за грешка(Error Info) наспроти Грешка(Exception).

Збогатување на грешката со информации и логирање.

Ready

Демо

Ready

Пренос на доволна информација.

Справување со грешки и екстракција на податоци во веб апликации;

Дефинирање на страници за грешки.

Ready

Демо

Ready

Локализација на грешки.

Справување со грешки и екстракција на податоци на клиентско ниво;

Пренесување на информација за грешка до корисникот.

Ready

Демо

Ready

Кој, Што, Како, Каде, Кога?

Анализа на логови

ПРОМ – алатка за процесно рударење.

Одговор на прашањата:- Како се користи сотфверот?- Тесно грло во извршување?- Параметри на извршување?- Шаблони на извршување?

Ready

Ready

catch(PPTException up){

}

Logger.Log(“ПРАШАЊА?”, up);throw up;

ReadyReady

Thank you