SlideShare a Scribd company logo
1
IOA Error Panel
PLEASE PRESS ENTER TO RESUME
Обработка ошибок в C#
MSK.NET представляет
ERROR
Илья Фофанов
http://engineerspock.com
2
Зачем надо уметь обрабатывать ошибки?
• Бич современности: падающие приложения, которые ничего не
сообщают о возникшей проблеме
• Обработка ошибок – критически важная часть программ с высокими
требованиями к устойчивости
3
4
Проверяемые Непроверяемые
Большие проблемы…
с исключениями
5
6
Виды ошибок
7
Как бороться с
исключениями
public HttpResponseMessage CreateCustomer(string name,
string billingInfo) {
Result<BillingInfo> billingInfoResult = null;
try {
billingInfoResult = BillingInfo.Create(billingInfo);
}
catch (Exception ex) {
Log(ex);
return CreateResponseMessage(ex);
}
Result<CustomerName> customerNameResult = null;
try {
customerNameResult = CustomerName.Create(name);
}
catch (Exception ex) {
Log(ex);
return CreateResponseMessage(ex);
}
try {
_paymentGateway.ChargeCommission(billingInfoResult.Value);
}
catch (Exception ex) {
Log(ex);
return CreateResponseMessage(ex);
}
var customer = new Customer(customerNameResult.Value);
try {
_repository.Save(customer);
}
catch (Exception ex) {
Log(ex);
_paymentGateway.RollbackLastTransaction();
}
try {
_emailSender.SendGreetings(customerNameResult.Value);
}
catch (Exception ex) {
Log(ex);
return CreateResponseMessage(ex);
}
return CreateResponseMessage(true);
}
«Try-Catch» Hell
8
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
Result<CustomerName> customerNameResult = CustomerName.Create(name);
return Result.Combine(billingInfoResult, customerNameResult)
.OnSuccess(() => _paymentGateway.ChargeCommission(billingInfoResult.Value))
.OnSuccess(() => new Customer(customerNameResult.Value))
.OnSuccess(customer => _repository.Save(customer)
.OnFailure(() => _paymentGateway.RollbackLastTransaction()))
.OnSuccess(() => _emailSender.SendGreetings(customerNameResult.Value))
.OnBoth(Log)
.OnBoth(CreateResponseMessage);
}
«No Try-Catch» Paradise
9
Семь бед - один ответ: исключения!
10
Use exceptions. They are much cleaner then all the other options.
The fear about uncaught exceptions is misplaced. Forgetting to catch an exception is
much better than forgetting the if statement to check a result. The former fails visibly,
and the latter fails silently.
The fear of messy code near the try/catch blocks is also misplaced. Use the 'extract
till you drop' rule, and make sure that any function with a try/catch block has _only_
the try/catch block in it; with the try block being a single function call.
Finally, write tests for all your exception throws, and all your exception catches. Error
processing is part of the legitimate behavior of your system and testing it is very
important.
Robert Martin aka “Uncle Bob”
“
https://groups.google.com/forum/#!topic/clean-code-discussion/CQSA4czDvHc 11
Проблемы исключений
12
Пример проверяемого исключения
public static void readFile(string filePath) throws IOException {
FileReader file = new FileReader(filePath);
BufferedReader fileInput = new BufferedReader(file);
// Print first 3 lines of the file
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
13
Проблема масштабирования
14
Проблема версионирования
Нельзя просто так взять
и добавить новый тип исключения
15
Какое решение?
16
Выпилить проверяемые исключения!
Трудно понять программу
17
Their power comes at an extremely high cost; it becomes
impossible to understand the flow of the program using only
local analysis; the whole program must be understood. This is
especially true when you mix exceptions with more exotic
control flows like event-driven or asynchronous programming.
Avoid, avoid, avoid; use exceptions only in the most exceptional
circumstances, where the benefits outweigh the costs.
Eric Lippert
“
18
“…people don't care. They're not going to handle any of these exceptions. There's
a bottom level exception handler around their message loop. That handler is just
going to bring up a dialog that says what went wrong and continue.”
“It is funny how people think that the important thing about exceptions is
handling them. That is not the important thing about exceptions. In a well-written
application there's a ratio of ten to one, in my opinion, of try finally to try catch.”
Anders Hejlsberg
“
19
Как обезопасить себя при чтении файла?
try
{
File.ReadAllLines();
}
catch (?)
{
}
20
Исключения из File.ReadAllLines()
• ArgumentException
• ArgumentNullException
• PathTooLongException
• NotSupportedException
• IOException
• DirectoryNotFoundException
• FileNotFoundException
• UnathorizedAccessException
• SecurityException
21
Знаем ли мы какие исключения перехватывать?
22
Corrupted State Exceptions
23
SEHException
Если CLR не знает, что делать с исключением из unmanaged
кода, то CLR заворачивает его в тип SEHException.
24
Corrupted State Exception
Corrupted State Exception (CSE) –
исключение связанное с поврежденным состоянием.
Примеры CSE в C#:
• SEHException
• AccessViolationException
CSE в unmanaged:
• EXCEPTION_ILLEGAL_INSTRUCTION EXCEPTION_IN_PAGE_ERROR
• EXCEPTION_INVALID_DISPOSITION
EXCEPTION_NONCONTINUABLE_EXCEPTION
• EXCEPTION_ACCESS_VIOLATION EXCEPTION_STACK_OVERFLOW
• EXCEPTION_PRIV_INSTRUCTION STATUS_UNWIND_CONSOLIDATE
25
CSE. Надо ли ловить?
• В общем случае ловить CSE не надо. Компенсационную логику
написать практически невозможно.
• Можно ловить только в случаях, когда вы точно знаете с какой
проблемой столкнулись и уверены, что можно «подавить и
продолжить»
26
CSE. Как поймать?
[HandleProcessCorruptedStateExceptions]
public static void HandleCorruptedState()
{
// handling
}
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
</runtime>
</configuration>
1.
2.
27
Обработка исключений
28
Обработка только известных исключений
29
try {
File.ReadAllLines();
}
catch (IOException ex) {
}
//а точно ничего не забыли?
Политики фильтраций
30
try {
File.ReadAllLines();
}
catch (Exception ex) {
//делегируем обработку
ExceptionManager
.HandleException(ex, “Policy”);
}
Catch Them All!
31
try {
File.ReadAllLines();
}
//вообще всё пофигу!
catch (Exception ex) {
}
Подавление исключений
1. Приложение какого типа вы разрабатываете?
2. Полной корректности достичь очень трудно.
3. Каков размер приложения?
32
… most people don’t write robust error handling
code in non-systems programs, throwing an
exception usually gets you out of a pickle fast.
Catching and then proceeding often works too.
No harm, no foul. Statistically speaking,
programs “work.”
Joe Duffy
“
33
Категории ошибок
Пользовательские
восстанавливаемые
Системные
восстанавливаемые
Пользовательские
невосстанавливаемые
Системные
невосстанавливаемые
Пользовательские Системные
ВосстанавливаемыеНевосстанавливаемые
34
Восстанавливаемые
пользовательские ошибки
public void TransferMoney(Payment p)
{
if (p == null)
throw new ArgumentNullException("p");
ValidatePayment(p);
}
35
Исключения и сигнатура метода
36
Эту семантическую часть надо
вывести в сигнатуру метода!
• Исключения – побочные эффекты
• Исключения, выражающие нарушения
пользовательской бизнес-логики
скрывают важную семантическую часть
Боремся с исключениями
37
Способы борьбы с исключениями
• Шаблон Tester-Doer
• Шаблон TryParse
• Railway Oriented Programming
38
Tester-Doer
ICollection<Student> students = GetStudents();
if (!students.IsReadOnly)//tester
{
students.Add(new Student("Joe")); //doer
}
39
TryParse
DateTime birthday;
bool parsed = DateTime.TryParse("12/08/1988", out birthday);
if (parsed)
{
SocialNumber socialNumber;
parsed = SocialNumber.TryParse("1239584594", out socialNumber);
if (parsed) { }
else { }
}
else
{
}
40
Недостатки Tester-Doer и TryParse
• Tester-Doer – форма антипаттерна «temporal coupling»
• Tester-Doer не работает в условиях конкурентного доступа
• TryParse неуклюж из-за out-параметра и возврата boolean
41
Pipelining
[| 83uy; 80uy; 79uy; 67uy; 75uy |]
|> Encoding.ASCII.GetString(textInBytes)
|> Console.WriteLine(contents)
var sb = new StringBuilder();
sb.Append("Hello")
.Append(",")
.Append("World")
.AppendLine("!");
Pipelining in F# Method chaining in C#
42
Коды ошибок
43
Демо
44
4 вида методов
Commands:
Queries:
void EnrollStudent(Student student);//not expected to fail
Result EnrollStudent(Student student);//expected to fail
Student GetStudent(string name); //not expected to fail
Result<Student> GetStudent(string name);//expected to fail
45
Итоги
46
Что делать?
 Отслеживайте control flow.
Если вызов уходит в unmanaged будьте готовы к неприятностям.
 Есть три основных подхода к обработке исключений.
Выбирайте тот, который оптимальным образом удовлетворяет
требования по устойчивости конкретного приложения.
47
Категории ошибок – что делать?
Result Monad
CatchHandle or
Suppress
Fail Fast or Suppress Fail Fast Only
Пользовательские Системные
ВосстанавливаемыеНевосстанавливаемые
48
Ссылки
http://pluralsight.com/courses/csharp-applying-functional-principles
«Applying Functional Principles in C#» - видео курс
https://github.com/vkhorikov/CSharpFunctionalExtensions
Класс Result и полезные расширения – исходники
https://www.nuget.org/packages/CSharpFunctionalExtensions/
Класс Result и полезные расширения – NuGet package
Владимир Хориков
https://www.visualstudio.com/en-us/products/visual-studio-dev-essentials-vs.aspx
49
Ссылки
https://ericlippert.com/2014/03/03/living-with-unchecked-exceptions/
Статья Эрика Липперта в двух частях про исключения
https://vimeo.com/97344498
Scott Wlaschin - Railway Oriented Programming — error handling in functional languages
http://www.artima.com/intv/handcuffs.html
Андерс Хейлсберг об исключениях
http://joeduffyblog.com/2016/02/07/the-error-model/
Очень крутая статья Joe Duffy об обработке ошибок
50
https://www.nuget.org/packages/EnterpriseLibrary.ExceptionHandling/
Enterprise Exception Handling Block
http://sergeyteplyakov.blogspot.ru/2016/06/semantic-of-exception.html
Статья Теплякова об исключениях
https://github.com/App-vNext/Polly
Polly
Илья Фофанов
http://engineerspock.com
https://www.udemy.com/user/eliasfofanov/
https://habrahabr.ru/users/engineerspock/
51
Спасибо за внимание!

More Related Content

What's hot

Тестирование ПО (2016)
Тестирование ПО (2016)Тестирование ПО (2016)
Тестирование ПО (2016)
Marat Akhin
 
Проблема тестовых входных данных
Проблема тестовых входных данныхПроблема тестовых входных данных
Проблема тестовых входных данныхMarat Akhin
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debuggingcolriot
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключенийphearnot
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptionsolegol
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
Ruslan Shevchenko
 
Тестовый оракул: что, где, когда
Тестовый оракул: что, где, когдаТестовый оракул: что, где, когда
Тестовый оракул: что, где, когдаMarat Akhin
 
Регрессионное тестирование
Регрессионное тестированиеРегрессионное тестирование
Регрессионное тестированиеMarat Akhin
 
Дебаггинг
ДебаггингДебаггинг
ДебаггингMarat Akhin
 
Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?Marat Akhin
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodePositive Hack Days
 
Проблема наблюдаемости
Проблема наблюдаемостиПроблема наблюдаемости
Проблема наблюдаемостиMarat Akhin
 
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
LogeekNightUkraine
 
Test design techniques
Test design techniquesTest design techniques
Test design techniquesQA Guards
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
Tatyanazaxarova
 
Полнота тестирования ПО
Полнота тестирования ПОПолнота тестирования ПО
Полнота тестирования ПОMarat Akhin
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
Vadim Lyakhovets
 
тестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентациятестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентация
Роман Растопшин
 
Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииGetDev.NET
 

What's hot (20)

Тестирование ПО (2016)
Тестирование ПО (2016)Тестирование ПО (2016)
Тестирование ПО (2016)
 
Проблема тестовых входных данных
Проблема тестовых входных данныхПроблема тестовых входных данных
Проблема тестовых входных данных
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключений
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Тестовый оракул: что, где, когда
Тестовый оракул: что, где, когдаТестовый оракул: что, где, когда
Тестовый оракул: что, где, когда
 
Регрессионное тестирование
Регрессионное тестированиеРегрессионное тестирование
Регрессионное тестирование
 
Дебаггинг
ДебаггингДебаггинг
Дебаггинг
 
Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source Code
 
Проблема наблюдаемости
Проблема наблюдаемостиПроблема наблюдаемости
Проблема наблюдаемости
 
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
 
Test design techniques
Test design techniquesTest design techniques
Test design techniques
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
Полнота тестирования ПО
Полнота тестирования ПОПолнота тестирования ПО
Полнота тестирования ПО
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
тестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентациятестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентация
 
Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
 

Viewers also liked

Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Yulia Tsisyk
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
Yulia Tsisyk
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
Yulia Tsisyk
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
Yulia Tsisyk
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#
Mikhail Shcherbakov
 
Исключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NETИсключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NET
Vladimir Kochetkov
 
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
Yulia Tsisyk
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Yulia Tsisyk
 
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
Yulia Tsisyk
 
Яков Повар "Системы обмена сообщениями на примере MassTransit"
Яков Повар "Системы обмена сообщениями на примере MassTransit"Яков Повар "Системы обмена сообщениями на примере MassTransit"
Яков Повар "Системы обмена сообщениями на примере MassTransit"
Yulia Tsisyk
 
Adam Sitnik "State of the .NET Performance"
Adam Sitnik "State of the .NET Performance"Adam Sitnik "State of the .NET Performance"
Adam Sitnik "State of the .NET Performance"
Yulia Tsisyk
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
MskDotNet Community
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Yulia Tsisyk
 

Viewers also liked (13)

Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#
 
Исключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NETИсключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NET
 
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
 
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»
 
Яков Повар "Системы обмена сообщениями на примере MassTransit"
Яков Повар "Системы обмена сообщениями на примере MassTransit"Яков Повар "Системы обмена сообщениями на примере MassTransit"
Яков Повар "Системы обмена сообщениями на примере MassTransit"
 
Adam Sitnik "State of the .NET Performance"
Adam Sitnik "State of the .NET Performance"Adam Sitnik "State of the .NET Performance"
Adam Sitnik "State of the .NET Performance"
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
 

Similar to Илья Фофанов "Обработка ошибок в C#"

C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
corehard_by
 
практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кода
Yuri Afanasiev
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Andrey Karpov
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
Kirill Golodnov
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
Anton Moiseenko
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
Levon Avakyan
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
Yandex
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
Aleksandr Tarasov
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
SQALab
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
Andrey Karpov
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
corehard_by
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
Igor Khrol
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
CodeFest
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
Max Arshinov
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
Tatyanazaxarova
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
yaevents
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
Alexey Ermakov
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab
 

Similar to Илья Фофанов "Обработка ошибок в C#" (20)

C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кода
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Bytecode
BytecodeBytecode
Bytecode
 

Илья Фофанов "Обработка ошибок в C#"