В любой программе разработчики сталкиваются с необходимостью обработки ошибок. Основной механизм работы с ошибками в .NET Framework — это исключения. Мы поговорим о преимуществах и недостатках их использования. Вы узнаете, используются ли исключения для обработки ошибок в программном обеспечении марсохода NASA, а также о том, какие способы обработки исключений имеются в нашем распоряжении. Также обсудим, можно ли не использовать исключения для обработки ошибочных ситуаций. Приходите, будет интересно.
Moscow .Net Meetup #3
13 октября 2016
Статический анализ кода: современный взглядAndrey Karpov
Статический анализ - это методология выявления ошибок в исходном тексте программы, основанная на просмотре кода программистом, помеченного статическим анализатором там, где потенциально может находиться ошибка. Многие относятся к статическому анализу как к устаревшему и не актуальному методу. Действительно, существует ряд моментов, из-за которых кажется, что статический анализ приносил пользу раньше, когда средства разработки были намного менее функциональны. Однако если отбросить устаревшее, то оказывается, что методология статического анализа по-прежнему позволят существенно сократить цену устранения многих дефектов, за счет их обнаружения еще на стадии конструирования (кодирования). Более того, развитие языков, появление таких технологий программирования как OpenMP, увеличение среднего размера проекта делают применение статических анализаторов все более привлекательным для контроля качества проекта.
Модульное тестирование является неотъемлемой частью современного процесса разработки. В своем докладе я хочу поговорить о том как нужно разрабатывать модульные тесты в проекте на C++ так чтобы это приносило максимум пользы.
Статический анализ кода: современный взглядAndrey Karpov
Статический анализ - это методология выявления ошибок в исходном тексте программы, основанная на просмотре кода программистом, помеченного статическим анализатором там, где потенциально может находиться ошибка. Многие относятся к статическому анализу как к устаревшему и не актуальному методу. Действительно, существует ряд моментов, из-за которых кажется, что статический анализ приносил пользу раньше, когда средства разработки были намного менее функциональны. Однако если отбросить устаревшее, то оказывается, что методология статического анализа по-прежнему позволят существенно сократить цену устранения многих дефектов, за счет их обнаружения еще на стадии конструирования (кодирования). Более того, развитие языков, появление таких технологий программирования как OpenMP, увеличение среднего размера проекта делают применение статических анализаторов все более привлекательным для контроля качества проекта.
Модульное тестирование является неотъемлемой частью современного процесса разработки. В своем докладе я хочу поговорить о том как нужно разрабатывать модульные тесты в проекте на C++ так чтобы это приносило максимум пользы.
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
Рассказ о истории и использовании в реальной жизни инструментов анализа кода на основе JavaChecker и TermWare
Сопустствующий текст: http://datacenter.gradsoft.ua/files/articles/OSDN2011/
Я занимаюсь разработкой статического анализатор кода PVS-Studio для анализа программ на языке Си/Си++. После появления в PVS-Studio 4.00 анализа общего назначения мы получили множество откликов, как положительных, так и отрицательных. Кстати, предлагаю скачать новую версию PVS-Studio, в которой благодаря откликам людей было поправлено большое количество ошибок и недочетов.
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Владимир Кошелев «Автоматический поиск ошибок»Yulia Tsisyk
MSK .NET Meetup #7
21 февраля 2017
Мы поговорим о автоматических инструментах поиска ошибок в программах для.Net. Посмотрим на зоопарк средств статического анализа. Попробуем автоматически генерировать Unit-тесты с помощью IntelliTest.
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
Рассказ о истории и использовании в реальной жизни инструментов анализа кода на основе JavaChecker и TermWare
Сопустствующий текст: http://datacenter.gradsoft.ua/files/articles/OSDN2011/
Я занимаюсь разработкой статического анализатор кода PVS-Studio для анализа программ на языке Си/Си++. После появления в PVS-Studio 4.00 анализа общего назначения мы получили множество откликов, как положительных, так и отрицательных. Кстати, предлагаю скачать новую версию PVS-Studio, в которой благодаря откликам людей было поправлено большое количество ошибок и недочетов.
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Владимир Кошелев «Автоматический поиск ошибок»Yulia Tsisyk
MSK .NET Meetup #7
21 февраля 2017
Мы поговорим о автоматических инструментах поиска ошибок в программах для.Net. Посмотрим на зоопарк средств статического анализа. Попробуем автоматически генерировать Unit-тесты с помощью IntelliTest.
Кирилл Маурин «Проектирование и разработка модульных приложений» Yulia Tsisyk
Выступление с MSK .NET Meetup #7
21 февраля 2017
Во вдоль и поперек изъезженной теме разработки модульных приложений есть много нового и полезного для большей части аудитории. Много материала из личного опыта автора с иллюстрацией из собственной микробиблиотеки с отрытым исходным кодом.
Рахманов Александр "Что полезного в разборе дампов для .NET-разработчиков?"Yulia Tsisyk
Сегодня на .NET-конференциях мы все чаще мы слышим про WinDBG, но в тоже время он все еще остается в стороне среди .NET-разработчиков, считается крайне специфичным и даже ненужным инструментом.
В докладе мы попробуем привнести альтернативный взгляд. Покажем как выстроить процесс сбора дампов, их анализа и исправления, встроить его в жизненный цикл разработки вашего приложения, сделав неотъемлемой частью для диагностики как рядовых, так и уникальных случаев. Затем рассмотрим группы основных проблем (deadlocks, out of memory, access violation, logical errors, etc.), которые могут произойти с вашим приложением, и инструменты для их анализа. И, конечно же, разберем примеры каждой из проблем, которые встретились нам на практике в наших продуктах, в коде .NET и WPF:
— Как при помощи флэшки «повесить» WPF-приложение?
— Безопасно ли вызывать DateTime.Now?
и другие жизненные ситуации.
Moscow .Net Meetup #4·14 ноября 2016
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Yulia Tsisyk
В докладе будут рассмотрены приемы оптимизации приложений на платформе .NET, в большей степени специфичные для desktop приложений. Тем не менее, представителям других направлений тоже будет что почерпнуть.
Для достижения максимальной скорости запуска приложения или поднятия из swap'а иногда приходится обращаться к нестандартным подходам, которые, на первый взгляд, могут идти наперекор общепринятой практике (например, отказ от emit в пользу reflection). Каждая из оптимизаций, начиная от устройства CLR, заканчивается анализом в xperf отдельных IO операций, будет подобно разобрана. В качестве результатов будут представлены показатели реальных продуктов.
Moscow .Net Meetup #4·14 ноября 2016
Вячеслав Михайлов «Как сделать Single Sign-On в веб-приложении в 10 строк кода»Yulia Tsisyk
докладе речь пойдёт о том, какие выбрать механизмы аутентификации и авторизации в приложении. Вячеслав поделится опытом использования IdentityServer и продемонстрирует способы его применения.
Яков Повар "Системы обмена сообщениями на примере MassTransit"Yulia Tsisyk
Разрабатывать большие продукты непросто. Когда сложность задач и нагрузка на приложения растёт с каждым днем, старые подходы и практики иногда уже не спасают. Могут ли системы на базе асинхронного обмена сообщениями быть той серебряной пулей, которая решит все наши проблемы?
В докладе я отвечу на этот вопрос, а также расскажу, какие подходы лежат в основе таких систем и что выбрать в мире .Net для их реализации. Мы поговорим о том, какие задачи помогут решить такие подходы и чего стоит избегать при их использовании.
Moscow .Net Meetup #3·13 октября 2016
Adam Sitnik "State of the .NET Performance"Yulia Tsisyk
MSK DOT NET #5
2016-12-07
In this talk Adam will describe how latest changes in.NET are affecting performance.
Adam wants to go through:
C# 7: ref locals and ref returns, ValueTuples.
.NET Core: Spans, Buffers, ValueTasks
And how all of these things help build zero-copy streams aka Channels/Pipelines which are going to be a game changer in the next year.
MSK .NET Meetup #7
21 февраля 2017
Мы поговорим о автоматических инструментах поиска ошибок в программах для.Net. Посмотрим на зоопарк средств статического анализа. Попробуем автоматически генерировать Unit-тесты с помощью IntelliTest.
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. Опытом борьбы с трудностями при написании многопоточного кода поделится Никита Цуканов.
Доклад "Параллелизм и распределённые вычисления на акторах с Akka.NET" рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. 11 августа речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
Вот уже более двух лет мы создаём онлайн-специализацию по С++ на платформе Coursera. Её цель — обучить языку C++ с нуля до уровня, достаточного для решения практических задач, с которыми приходилось сталкиваться авторам в своей практике. В своём докладе я расскажу, как мы создаём наши онлайн-курсы, и уделю особое внимание техническим проблемам, которые нам пришлось решить в процессе создания автоматической системы проверки программ студентов.
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
Есть ошибки, которые легко прячутся от программистов на обзорах кода. Чаще всего они связаны с опечатками или недостаточным знанием тонких нюансах языка/библиотеки. Давайте посмотрим интересные примеры таких ошибок и как их можно выявить с помощью статического анализа. При этом анализаторы не конкурируют с обзорами кода или, например, юнит-тестами. Они отлично дополняют другие методологии борьбы с ошибками.
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
Любите ли вы велосипеды? Все разработчики любят свои ненаколеночныерешения велосипеды! И мы не исключение. В нашем докладе мы покажем как собирать, сколачивать, вылепливать собственный велосипед так, чтобы на нем потом могла ездить без слёз вся команда, компания, или может весь мир.
Что в докладе будет:
- много Spring Boot-а;
- live coding;
- создание собственного Spring Boot Starter-а;
- Apache Thrift в качестве подопытного кролика.
Чего не будет:
- бенчмарков и сравнений Thrift vs REST vs gRPC vs XXX.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
Сегодня я хочу посвятить пост тематике, почему инструменты анализа исходного кода полезны вне зависимости от уровня знаний и опыта программиста. А польза такого анализа будет продемонстрирована на примере инструмента, который известен всем программистам - WinMerge.
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
Александр Петренко, ИСП РАН
Профессор, доктор физико-математических наук, заведующий отделом технологий программирования Института системного программирования (ИСП РАН), профессор ВМК МГУ. Основные работы в областях: формализация требований, генерация тестов на основе формализованных требований и формальных моделей (model based testing – MBT). Приложения: тестирование операционных систем и распределенных систем, тестирование компиляторов, верификация дизайна микропроцессоров, формализация стандартов на API операционных систем и телекоммуникационных протоколов. Сопредседатель оргкомитетов International MBT workshop (http://www.mbrworkshop.org/), Spring Young Researcher Colloquium on Software Engineering – SYRCoSE (http://syrocose.ispras.ru), городского семинара по технологиям разработки и анализа программ ТРАП/SDAT (http://sdat.ispras.ru/).
Тема доклада
Модели в профессиональной инженерии и тестировании программ.
Тезисы
Model Based Software Engineering (MBSE) является расширением подхода к разработке программ на основе моделей. В MBSE в отличие, например, от MDA (Model Driver Architecture) существенное внимание уделяется не только задачам собственно проектирования и разработки кода, но и задачам других фаз жизненного цикла – анализу требований, верификации и валидации, управлению требованиями на всех фазах жизненного цикла. Model Based Testing (MBT) хронологически возник гораздо раньше, чем MBSE и MDA, однако его место в разработке программ в полной мере раскрылось вместе с развитием MBSE. По этой причине MBT и MBSE следует рассматривать в тесной связке. В докладе будут рассмотрены концепции MBSE-MDA-MBT, основные источники и виды моделей, которые используются в этих подходах, методы генерации тестов на основе моделей, известные инструменты для
3. Зачем надо уметь обрабатывать ошибки?
• Бич современности: падающие приложения, которые ничего не
сообщают о возникшей проблеме
• Обработка ошибок – критически важная часть программ с высокими
требованиями к устойчивости
3
11. 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
18. 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
19. “…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
20. Как обезопасить себя при чтении файла?
try
{
File.ReadAllLines();
}
catch (?)
{
}
20
24. SEHException
Если CLR не знает, что делать с исключением из unmanaged
кода, то CLR заворачивает его в тип SEHException.
24
25. 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
26. CSE. Надо ли ловить?
• В общем случае ловить CSE не надо. Компенсационную логику
написать практически невозможно.
• Можно ловить только в случаях, когда вы точно знаете с какой
проблемой столкнулись и уверены, что можно «подавить и
продолжить»
26
31. Catch Them All!
31
try {
File.ReadAllLines();
}
//вообще всё пофигу!
catch (Exception ex) {
}
32. Подавление исключений
1. Приложение какого типа вы разрабатываете?
2. Полной корректности достичь очень трудно.
3. Каков размер приложения?
32
33. … 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
36. Исключения и сигнатура метода
36
Эту семантическую часть надо
вывести в сигнатуру метода!
• Исключения – побочные эффекты
• Исключения, выражающие нарушения
пользовательской бизнес-логики
скрывают важную семантическую часть
40. 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
41. Недостатки Tester-Doer и TryParse
• Tester-Doer – форма антипаттерна «temporal coupling»
• Tester-Doer не работает в условиях конкурентного доступа
• TryParse неуклюж из-за out-параметра и возврата boolean
41
42. 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
45. 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
47. Что делать?
Отслеживайте control flow.
Если вызов уходит в unmanaged будьте готовы к неприятностям.
Есть три основных подхода к обработке исключений.
Выбирайте тот, который оптимальным образом удовлетворяет
требования по устойчивости конкретного приложения.
47
48. Категории ошибок – что делать?
Result Monad
CatchHandle or
Suppress
Fail Fast or Suppress Fail Fast Only
Пользовательские Системные
ВосстанавливаемыеНевосстанавливаемые
48
49. Ссылки
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
50. Ссылки
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