SlideShare a Scribd company logo
1 of 18
Roslyn Code Analysis
Кулаков Анатолий
SPB .NET Community #4
Статический анализ
Позволяет добиться консистентного вида
• отступы
• комментарии
• наименования
• группировки
• скобки
…
Позволяет избежать популярных ошибок
• корректность вызовов
• дизайн библиотек
• интернационализация
• время жизни ресурсов
• производительность
• безопасность
• различные метрики кода
…
Минусы
• позднее время проверок
• бедные настройки (уровень критичности, контекст применения и т.д.)
• нет единой простой платформы для написания правил
• слабая система для «исправлений» найденных замечаний
• сложность использования, распространения и поддержки новых
правил
• контекст анализа на уровне отдельной сборки
• множество багов и медленное развитие
• из-за анализа IL плохо работает с синтаксическим сахаром
• морально устарели
Code Analysis API (aka Diagnostics API)
• все проверки происходят в реальном времени
• гибкая система уровня критичности
• стандартные инструменты для построения анализаторов и
исправителей
• анализ исходных кодов, а не IL
• отставание инструментов от языка невозможно
• контекст анализа на уровне всего солюшена
• легко писать бизнес-правила (в среднем 50-100 строк на правило)
• Roslyn легко изучается, тестируется, портируется
• это модно 
Спасибо ReSharper’у за наше счастливое детство
Знания о пользе статического
анализа кода
Малый порог вхождения
Удовольствие от
использования
CI
Кирилл Скрыган, JetBrains
Code-Aware Library
• базируются на Roslyn
• распростаняются через NuGet и VSIX
• нацелены на пропаганду лучших практик
• могут включать фиксы
Библиотеки, помогающие в design-time работать с другими библиотеками
Существующие примеры использования
• FxCop
• StyleCop
• AzureAnalysis (работа с Azure)
• AsyncPackage (лучшие практики использования Task-based
Asynchronous Pattern)
• MetaCompilation (обучение написанию своих анализаторов)
• AnalyzerPowerPack (общие правила работы с языком)
• RoslynDiagnostics (работа с Roslyn)
• C# Essentials (для перехода на синтаксис C# 6)
• TsqlAnalyzer (проверка T-SQL строк в коде C#)
Стоимость исправления ошибок
Момент выявления ошибки:
• до написания кода
• статические проверки
• unit-тесты
• code review
• интеграционные тесты
• ручные тесты
• ошибка при эксплуатации
Цена
Идеи для новых анализаторов
• AutoMapper может проверять соответствие всех свойств в преобразуемых типах,
возможность создания конвертеров
• Autofac может проверять полноту регистраций, возможность создания компонента, захват
зависимостей
• RouteAttributes должны содержать только url сегменты, которые есть в параметрах метода
• ImmutableAttribute – гарантирует, что состояние объекта не меняется после создания
• в DTO классах не должно быть бизнес-методов, все свойства открытые, коллекции
проинициализированны, ссылки только на другие DTO или примитивы.
• объекты, участвующие в бинарной сериализации, должны иметь атрибут Serializable
• валидация xml конфигов на наличие ожидаемых настроек
• вся работа со временем должна быть только в UTC
• любой ORM, WEB, фреймворки переполнены неявными договорённостями
Любите статический анализ
• Если вы замечали в код-ревью, как ваша команда постоянно
делает одни и те же ошибки. Теперь вы можете написать
правила, позволяющие избежать надоедливых багов.
• Если ваши библиотеки содержат сложные бизнес-соглашения,
требующие определённого порядка действий. Теперь правила
позволят вам не забыть про неочевидные обязательства.
• Если у вас есть open source библиотеки или просто с public API, а
пользователи упорно не хотят читать документацию по
правильному их использованию. Теперь вы можете добавить
корректирующие правила к вашим библиотекам и
распространять их в виде NuGet пакета.

More Related Content

What's hot

автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиSQALab
 
Что такое Robot Framework?
Что такое Robot Framework?Что такое Robot Framework?
Что такое Robot Framework?Mykhailo Poliarush
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?sqadays8
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
 
Эволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumЭволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumSQALab
 
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкойВнедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкойSQALab
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграцииIgor Khrol
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Mykhailo Poliarush
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейSQALab
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Seleniumjazzteam
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Mail.ru Group
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Как автоматизировать комплексные системы
Как автоматизировать комплексные системыКак автоматизировать комплексные системы
Как автоматизировать комплексные системыSQALab
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 

What's hot (20)

автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 
Что такое Robot Framework?
Что такое Robot Framework?Что такое Robot Framework?
Что такое Robot Framework?
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
Эволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumЭволюция автотестирования на Selenium
Эволюция автотестирования на Selenium
 
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкойВнедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
Внедрение автоматизации тестирования в highload проекте с непрерывной выкладкой
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграции
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?Что такое проект по автоматизации тестирования ПО?
Что такое проект по автоматизации тестирования ПО?
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Как автоматизировать комплексные системы
Как автоматизировать комплексные системыКак автоматизировать комплексные системы
Как автоматизировать комплексные системы
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 

Viewers also liked

Visual Studio 2015 Diagnostic and Debugging Tools
Visual Studio 2015 Diagnostic and Debugging ToolsVisual Studio 2015 Diagnostic and Debugging Tools
Visual Studio 2015 Diagnostic and Debugging ToolsMikhail Shcherbakov
 
___ Final symposium report Protecting children from poverty disaster a
___ Final symposium report  Protecting children from poverty disaster a   ___ Final symposium report  Protecting children from poverty disaster a
___ Final symposium report Protecting children from poverty disaster a Education and Resilience
 
FINAL Agenda_Regional Education and Resilience in EAP
FINAL Agenda_Regional Education and Resilience in EAPFINAL Agenda_Regional Education and Resilience in EAP
FINAL Agenda_Regional Education and Resilience in EAPEducation and Resilience
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLRMikhail Shcherbakov
 
сценарии использования статического анализатора
сценарии использования статического анализаторасценарии использования статического анализатора
сценарии использования статического анализатораMikhail Shcherbakov
 
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP comments
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP commentsSelf Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP comments
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP commentsEducation and Resilience
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...Education and Resilience
 
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015 L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015 Partenaire Européen
 
Tugas perbaikan 1 (uji sifat fisik dan ucs)
Tugas perbaikan 1 (uji sifat fisik dan ucs)Tugas perbaikan 1 (uji sifat fisik dan ucs)
Tugas perbaikan 1 (uji sifat fisik dan ucs)Vento Pontus
 

Viewers also liked (20)

Visual Studio 2015 Diagnostic and Debugging Tools
Visual Studio 2015 Diagnostic and Debugging ToolsVisual Studio 2015 Diagnostic and Debugging Tools
Visual Studio 2015 Diagnostic and Debugging Tools
 
50D_John
50D_John50D_John
50D_John
 
77D_Chuang&Chang
77D_Chuang&Chang77D_Chuang&Chang
77D_Chuang&Chang
 
134 d wiyada
134 d wiyada134 d wiyada
134 d wiyada
 
Project Rider
Project RiderProject Rider
Project Rider
 
UNGEI-UNESCO_SRGBV_Discussion_Paper_FINAL
UNGEI-UNESCO_SRGBV_Discussion_Paper_FINALUNGEI-UNESCO_SRGBV_Discussion_Paper_FINAL
UNGEI-UNESCO_SRGBV_Discussion_Paper_FINAL
 
___ Final symposium report Protecting children from poverty disaster a
___ Final symposium report  Protecting children from poverty disaster a   ___ Final symposium report  Protecting children from poverty disaster a
___ Final symposium report Protecting children from poverty disaster a
 
34D_Dogaojo
34D_Dogaojo34D_Dogaojo
34D_Dogaojo
 
131D_Manocha
131D_Manocha131D_Manocha
131D_Manocha
 
50D_John
50D_John50D_John
50D_John
 
FINAL Agenda_Regional Education and Resilience in EAP
FINAL Agenda_Regional Education and Resilience in EAPFINAL Agenda_Regional Education and Resilience in EAP
FINAL Agenda_Regional Education and Resilience in EAP
 
63D_Dyahpuspita
63D_Dyahpuspita63D_Dyahpuspita
63D_Dyahpuspita
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLR
 
сценарии использования статического анализатора
сценарии использования статического анализаторасценарии использования статического анализатора
сценарии использования статического анализатора
 
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP comments
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP commentsSelf Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP comments
Self Reporting and Monitoring Questionnaire 12-NOV-2013.IIEP comments
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...
Smith A (2014) Contemporary Challenges for Education in Conflict Affected Cou...
 
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015 L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015
L'immobilier 100% entre particuliers - AI100 - Edition Septembre/Octobre2015
 
Tugas perbaikan 1 (uji sifat fisik dan ucs)
Tugas perbaikan 1 (uji sifat fisik dan ucs)Tugas perbaikan 1 (uji sifat fisik dan ucs)
Tugas perbaikan 1 (uji sifat fisik dan ucs)
 

Similar to Roslyn Code Analysis

Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.jsTimur Shemsedinov
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"GeeksLab Odessa
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...DevDay
 
Code review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияCode review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияSQALab
 
Промышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыПромышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыMikhail Payson
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAlexander Lisachenko
 
Организация процессов разработки на основе VSTS и TFS
Организация процессов разработки на основе VSTS и TFSОрганизация процессов разработки на основе VSTS и TFS
Организация процессов разработки на основе VSTS и TFSАлександр Шамрай
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 
20100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture0620100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture06Computer Science Club
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...Ivan Piskunov
 

Similar to Roslyn Code Analysis (20)

Team workflow
Team workflowTeam workflow
Team workflow
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Sivko
SivkoSivko
Sivko
 
Code review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияCode review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспечения
 
Промышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыПромышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. Инструменты
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
Dotnet
DotnetDotnet
Dotnet
 
Организация процессов разработки на основе VSTS и TFS
Организация процессов разработки на основе VSTS и TFSОрганизация процессов разработки на основе VSTS и TFS
Организация процессов разработки на основе VSTS и TFS
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
20100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture0620100314 virtualization igotti_lecture06
20100314 virtualization igotti_lecture06
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...
Особенности проведения аудита безопасности корпоративной IT-инфраструктуры_PH...
 

More from Mikhail Shcherbakov

Mythbusters - Web Application Security
Mythbusters - Web Application SecurityMythbusters - Web Application Security
Mythbusters - Web Application SecurityMikhail Shcherbakov
 
Apache Ignite.NET в действии
Apache Ignite.NET в действииApache Ignite.NET в действии
Apache Ignite.NET в действииMikhail Shcherbakov
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NETMikhail Shcherbakov
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridMikhail Shcherbakov
 
WCF. Легко или проблемно
WCF. Легко или проблемноWCF. Легко или проблемно
WCF. Легко или проблемноMikhail Shcherbakov
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Mikhail Shcherbakov
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3. Mikhail Shcherbakov
 
RESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationRESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationMikhail Shcherbakov
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETMikhail Shcherbakov
 
Использование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахИспользование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахMikhail Shcherbakov
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.Mikhail Shcherbakov
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++Mikhail Shcherbakov
 
Разработка мобильных приложений на С# с использованием Xamarin
Разработка мобильных  приложений на С# с использованием XamarinРазработка мобильных  приложений на С# с использованием Xamarin
Разработка мобильных приложений на С# с использованием XamarinMikhail Shcherbakov
 
Многопоточность в .NET: Дьявол в деталях
Многопоточность в .NET: Дьявол в деталяхМногопоточность в .NET: Дьявол в деталях
Многопоточность в .NET: Дьявол в деталяхMikhail Shcherbakov
 

More from Mikhail Shcherbakov (20)

Delegates and events in C#
Delegates and events in C#Delegates and events in C#
Delegates and events in C#
 
Mythbusters - Web Application Security
Mythbusters - Web Application SecurityMythbusters - Web Application Security
Mythbusters - Web Application Security
 
Apache Ignite.NET в действии
Apache Ignite.NET в действииApache Ignite.NET в действии
Apache Ignite.NET в действии
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NET
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data Grid
 
WCF. Легко или проблемно
WCF. Легко или проблемноWCF. Легко или проблемно
WCF. Легко или проблемно
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
Structured logging
Structured loggingStructured logging
Structured logging
 
RESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationRESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentation
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
Использование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахИспользование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектах
 
Sandboxing in .NET CLR
Sandboxing in .NET CLRSandboxing in .NET CLR
Sandboxing in .NET CLR
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++
 
Разработка мобильных приложений на С# с использованием Xamarin
Разработка мобильных  приложений на С# с использованием XamarinРазработка мобильных  приложений на С# с использованием Xamarin
Разработка мобильных приложений на С# с использованием Xamarin
 
What's New in C# 6
What's New in C# 6What's New in C# 6
What's New in C# 6
 
Многопоточность в .NET: Дьявол в деталях
Многопоточность в .NET: Дьявол в деталяхМногопоточность в .NET: Дьявол в деталях
Многопоточность в .NET: Дьявол в деталях
 
Sandboxing in .NET CLR
Sandboxing in .NET CLRSandboxing in .NET CLR
Sandboxing in .NET CLR
 

Roslyn Code Analysis

  • 1. Roslyn Code Analysis Кулаков Анатолий SPB .NET Community #4
  • 2. Статический анализ Позволяет добиться консистентного вида • отступы • комментарии • наименования • группировки • скобки … Позволяет избежать популярных ошибок • корректность вызовов • дизайн библиотек • интернационализация • время жизни ресурсов • производительность • безопасность • различные метрики кода …
  • 3. Минусы • позднее время проверок • бедные настройки (уровень критичности, контекст применения и т.д.) • нет единой простой платформы для написания правил • слабая система для «исправлений» найденных замечаний • сложность использования, распространения и поддержки новых правил • контекст анализа на уровне отдельной сборки • множество багов и медленное развитие • из-за анализа IL плохо работает с синтаксическим сахаром • морально устарели
  • 4.
  • 5. Code Analysis API (aka Diagnostics API) • все проверки происходят в реальном времени • гибкая система уровня критичности • стандартные инструменты для построения анализаторов и исправителей • анализ исходных кодов, а не IL • отставание инструментов от языка невозможно • контекст анализа на уровне всего солюшена • легко писать бизнес-правила (в среднем 50-100 строк на правило) • Roslyn легко изучается, тестируется, портируется • это модно 
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. Спасибо ReSharper’у за наше счастливое детство Знания о пользе статического анализа кода Малый порог вхождения Удовольствие от использования CI
  • 14. Code-Aware Library • базируются на Roslyn • распростаняются через NuGet и VSIX • нацелены на пропаганду лучших практик • могут включать фиксы Библиотеки, помогающие в design-time работать с другими библиотеками
  • 15. Существующие примеры использования • FxCop • StyleCop • AzureAnalysis (работа с Azure) • AsyncPackage (лучшие практики использования Task-based Asynchronous Pattern) • MetaCompilation (обучение написанию своих анализаторов) • AnalyzerPowerPack (общие правила работы с языком) • RoslynDiagnostics (работа с Roslyn) • C# Essentials (для перехода на синтаксис C# 6) • TsqlAnalyzer (проверка T-SQL строк в коде C#)
  • 16. Стоимость исправления ошибок Момент выявления ошибки: • до написания кода • статические проверки • unit-тесты • code review • интеграционные тесты • ручные тесты • ошибка при эксплуатации Цена
  • 17. Идеи для новых анализаторов • AutoMapper может проверять соответствие всех свойств в преобразуемых типах, возможность создания конвертеров • Autofac может проверять полноту регистраций, возможность создания компонента, захват зависимостей • RouteAttributes должны содержать только url сегменты, которые есть в параметрах метода • ImmutableAttribute – гарантирует, что состояние объекта не меняется после создания • в DTO классах не должно быть бизнес-методов, все свойства открытые, коллекции проинициализированны, ссылки только на другие DTO или примитивы. • объекты, участвующие в бинарной сериализации, должны иметь атрибут Serializable • валидация xml конфигов на наличие ожидаемых настроек • вся работа со временем должна быть только в UTC • любой ORM, WEB, фреймворки переполнены неявными договорённостями
  • 18. Любите статический анализ • Если вы замечали в код-ревью, как ваша команда постоянно делает одни и те же ошибки. Теперь вы можете написать правила, позволяющие избежать надоедливых багов. • Если ваши библиотеки содержат сложные бизнес-соглашения, требующие определённого порядка действий. Теперь правила позволят вам не забыть про неочевидные обязательства. • Если у вас есть open source библиотеки или просто с public API, а пользователи упорно не хотят читать документацию по правильному их использованию. Теперь вы можете добавить корректирующие правила к вашим библиотекам и распространять их в виде NuGet пакета.