SlideShare a Scribd company logo
1 of 39
Качество код.Анализкода с NDepend
План Качество Какие способы достичь качества Качество кода в аспекте проектирования Принципы ООП/ООД Метрики кода NDepend
Зачемкачество?
Холиворная тема
“Железный треугольник” Железный треугольник, или треугольник менеджмента. Его смысл в том, что ограничения на объём работ, сроки и бюджет должны быть разумными и нужно ими управлять (балансировать) Объем работ  (фичи, функционал, качество и т.д.) Время  (график, сроки) Деньги (бюджет, ресурсы) Где же качество?
“Железный треугольник” Объем работ  (фичи, функционал, качество и т.д.) Качество Время  (график, сроки) Деньги (бюджет, ресурсы) Качественное ПО получается в результате баланса между объемом работ, сроками и бюджетом http://www.intuit.ru/department/se/msd/4/3.html
К чему эти треугольники?
Ценности качественного кода
Какиеестьспособы? Организационные  XP (eXtreme Programming) Code review Project management, methodology,  Utilities: StyleCop, FxCop, Code Analysis Requirements… Технические Юнит-тесты TDD, Defensive programming style OOP/OOD, principles Обучение
Какиеестьспособы? Внешние – программистские практики Парное программирование Статический анализ кода Code review , Unit-tests, TDD/BDD Внутренние- правильное проектирование и рефакторинг кода как способ превращения плохого кода в более хороший OOP/OOD, principles,  Programming style
Сode Review Организационные способы
Статическийанализкода StyleCop, FxCop, Code Analysis, Ndepend Цельавтоматизироватьreview кода и обратитьвнимание на распространненые ошибки и скользкие участки. В идеале внедрить стат. анализ в CI (build process) Организационные способы
Методологии и управление Управление проектом напрямую влияет на результаты и удовлетворенность от работы Хаотическое управление = низкое качество(e.g. Cowboy coding) Организационные способы
Extreme programming Парное программирование Всесторонний codereview Юнит-тесты на весь код (TDD) YAGNI, не пишем того, что не нужно Изменчивые требования Частая коммуникация с заказчиком и в команде  Организационные способы
Обучение Никакие утилиты стат.анализа не заменят людей Позволяет писать качественные код  Повышает коммуникации Улучшает команду Парное программирование способствует Обучение
Юнит-тесты, TDD Юнит-тесты – позволяют контролировать соответствие кода задуманному поведению. ТDD – подход к написанию кода начиная с тестов. «Тесты вперед» Техническиеспособы
Рефакторинг Техническиеспособы
Защитное программирование Defensive programming  Использование ассертов (asserts) Использование контрактов кода(code contracts)Ассерты или контракты как мини юнит-тесты если что то идет не так Техническиеспособы
Технический долг К его появлению приводит быстрая и бездумная разработка Когда мы понимаем, что можем написать дизайн лучше, но в силу причин не делаем этого – мы откладываем долг. Выплачивать придется рефакторингом Техническиеспособы
Ценности, принципы и паттерны
Принципы ООП/ООД Принципы SOLID Принципы GRASP KISS = Keep it simple DRY = Don’t repeat 		yourself YAGNI = You ain’tgonna need it Техническиеспособы http://msug.vn.ua/Posts/Details/4221
Метрики кода Это количественные показатели, которые можно измерить и которые могут дать представление о качестве кода Что можно померять: Lines of code Number of classes Inheritance depth  Maintainability index Cyclomatic index
NDepend. Dependency graph
NDepend. Dependency graph
Ndepend. Dependency matrix
Ndepend. Metrics view
CQL Query Explorer
NDepend. CQL SQL подобный синтакс Запросы к базе кода(codebase), чтобы полу-чить метрики SELECT TOP 10 METHODS  ORDER BY NbLinesOfCode DESC SELECT METHODS  WHERE NbLinesOfCode > 10 SELECT FIELDS WHERE HasAttribute "System.ThreadStaticAttribute"
Метрики
Coupling Efferent coupling (Ce): внутренняя связанность, число типоввнутрисборки, которые зависят от типов из вне сборки Afferent coupling (Ca):внешняя связанность, число типов вне сборки которые зависят от типов в внутри сборки
Instability (I) Instability (I): отношение внутренней связанности(Ce) к общей связанности, индикатор устойчивости к изменениям.  I = Ce / (Ce + Ca) I=0 – полностью стабильная сборка, сложная для модификации. I=1 – нестабильная сборка, внутри слабая связанность
Abstractness (A) Abstractness (A): абстрактность, отношение числа внутренних абстрактных типов к числу внутренних типов. A=0 – полностью «конкретная» сборка  A=1 – полностью абстрактная сборка
Relational Cohesion (H) RelationalCohesion (H): относительная сцепленность, среднее число внутренних отношений на тип: H = (R + 1) / N,  где R = число отношений внутри сборки,  N = число типов сборки Классы внутри сборки должны сильно соотносится друг с другом, и сцепленность должна быть высокой. С другой стороны, слишком большие значение могут означать излишнюю связанность. Хорошие значения сцепленности1.5 ≤ H ≤ 4.0
Coupling, Cohesion, Abstractness and Instability metrics on example  Се = внутренняя связанность, Са – внешняя, I – стабильность,  N – число типов сборки, А – абстрактность, Н – относительная сцепленность
Lack of cohesion (LCOM) Принцип SRP утверждает, что класс должен иметь не более чем одну причину для изменения. Такой класс сцепленный (cohesive). Высокое значение означает плохо сцеплений класс. Типы, у которых LCOM > 0.8 могут быть проблемными. Тем не менее, очень сложно избежать таких не-сцепленных типов
Cyclomatic Complexity (CC) Число следующих выражений в методе: if, while, for, foreach, case, default, continue, goto, &&, ||, catch, ? : (ternary operator), ?? (nonnull operator) Эти выражения не учитываются:  else, do, switch, try, using, throw, finally, return, object creation, method call, field access CC > 15 сложно понимать, CC > 30 очень сложные и должны быть разбиты на более мелкие методы (кроме сгенерированного кода)
Distance from main sequence:zone of pain and zone of uselessness Main sequence в терминахNDepend, 	A + I = 1, Представляет оптимальный баланс между абстрактностью и стабильностью D – это нормализированное расстояние от main sequence, 0 ≤ D ≤ 1 Сборки с D > 0.7  - проблематичны Но, в реальной жизни, сложно избежать таких сборок. Просто необходимо удерживать число таких сборок минимальным.
Cсылки и источники Msug http://msug.vn.ua/Posts/Details/4199 - NDepend http://msug.vn.ua/Posts/Details/4221- GRASP NDepend http://www.ndepend.com/ http://www.ndepend.com/GettingStarted.aspx Метрики NDepend http://www.hanselman.com/blog/content/binary/NDepend%20metrics%20placemats%201.1.pdf http://ndepend.com/Metrics.aspx О качестве http://merle-amber.blogspot.com/ http://blog.byndyu.ru
Спасибо за внимание:)

More Related Content

Similar to Качество кода. NDepend

"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосноватьMaksym Bezuglyi
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1sgdread
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#geekfamilyrussia
 
Оценка сроков IT проектов
Оценка сроков IT проектовОценка сроков IT проектов
Оценка сроков IT проектовAlexander Kalinichev
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 
От заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechОт заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechZlit
 
Тестирование наукоёмких SDK
Тестирование наукоёмких SDKТестирование наукоёмких SDK
Тестирование наукоёмких SDKSQALab
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4Pavel Veinik
 
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...HOWWEDOIT
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибкиYury Zelensky
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in russuser0562f1
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++ssuser0562f1
 
Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...LuxoftTraining
 
Управление &#1087...
Управление &#1087...Управление &#1087...
Управление &#1087...akor
 
Project Management 2.0: AI Transformation
Project Management 2.0: AI TransformationProject Management 2.0: AI Transformation
Project Management 2.0: AI TransformationEduard Tyantov
 
Андрей Плетенев. Две метрики для оптимизации распределения ресурсов
Андрей Плетенев. Две метрики для оптимизации распределения ресурсовАндрей Плетенев. Две метрики для оптимизации распределения ресурсов
Андрей Плетенев. Две метрики для оптимизации распределения ресурсовAndrey Pletenev
 
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...Ontico
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноBubon Makabra
 

Similar to Качество кода. NDepend (20)

"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#Как попасть на следующий уровень карьеры и зарплаты в C#
Как попасть на следующий уровень карьеры и зарплаты в C#
 
Оценка сроков IT проектов
Оценка сроков IT проектовОценка сроков IT проектов
Оценка сроков IT проектов
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
От заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechОт заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit Tech
 
Тестирование наукоёмких SDK
Тестирование наукоёмких SDKТестирование наукоёмких SDK
Тестирование наукоёмких SDK
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Software craftsmanship meetup #4
Software craftsmanship meetup #4Software craftsmanship meetup #4
Software craftsmanship meetup #4
 
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...
Продвинутые методики продуктовых отделов продаж с практическими примерами. Ан...
 
запахи кода
запахи кодазапахи кода
запахи кода
 
лекция типовые ошибки
лекция типовые ошибкилекция типовые ошибки
лекция типовые ошибки
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in ru
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++
 
Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...Эффективное объектно-ориентированное проектирование и структурное качество пр...
Эффективное объектно-ориентированное проектирование и структурное качество пр...
 
Управление &#1087...
Управление &#1087...Управление &#1087...
Управление &#1087...
 
Project Management 2.0: AI Transformation
Project Management 2.0: AI TransformationProject Management 2.0: AI Transformation
Project Management 2.0: AI Transformation
 
Андрей Плетенев. Две метрики для оптимизации распределения ресурсов
Андрей Плетенев. Две метрики для оптимизации распределения ресурсовАндрей Плетенев. Две метрики для оптимизации распределения ресурсов
Андрей Плетенев. Две метрики для оптимизации распределения ресурсов
 
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...
Две метрики для оптимизации распределения ресурсов / Андрей Плетенев (Upgrade...
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 

More from Roman Kalita

статические анализаторы кода за и против
статические анализаторы кода  за и противстатические анализаторы кода  за и против
статические анализаторы кода за и противRoman Kalita
 
Internet explorer 9 для разработчиков
Internet explorer 9 для разработчиковInternet explorer 9 для разработчиков
Internet explorer 9 для разработчиковRoman Kalita
 
Введение в Share point2010, ppt
Введение в Share point2010, pptВведение в Share point2010, ppt
Введение в Share point2010, pptRoman Kalita
 
Windows phone 7 series, ppt
Windows phone 7 series, pptWindows phone 7 series, ppt
Windows phone 7 series, pptRoman Kalita
 
Введение в SharePoint 2010
Введение в SharePoint 2010Введение в SharePoint 2010
Введение в SharePoint 2010Roman Kalita
 
Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 seriesRoman Kalita
 

More from Roman Kalita (7)

статические анализаторы кода за и против
статические анализаторы кода  за и противстатические анализаторы кода  за и против
статические анализаторы кода за и против
 
N depend & cql
N depend & cqlN depend & cql
N depend & cql
 
Internet explorer 9 для разработчиков
Internet explorer 9 для разработчиковInternet explorer 9 для разработчиков
Internet explorer 9 для разработчиков
 
Введение в Share point2010, ppt
Введение в Share point2010, pptВведение в Share point2010, ppt
Введение в Share point2010, ppt
 
Windows phone 7 series, ppt
Windows phone 7 series, pptWindows phone 7 series, ppt
Windows phone 7 series, ppt
 
Введение в SharePoint 2010
Введение в SharePoint 2010Введение в SharePoint 2010
Введение в SharePoint 2010
 
Windows phone 7 series
Windows phone 7 seriesWindows phone 7 series
Windows phone 7 series
 

Качество кода. NDepend

  • 2. План Качество Какие способы достичь качества Качество кода в аспекте проектирования Принципы ООП/ООД Метрики кода NDepend
  • 5. “Железный треугольник” Железный треугольник, или треугольник менеджмента. Его смысл в том, что ограничения на объём работ, сроки и бюджет должны быть разумными и нужно ими управлять (балансировать) Объем работ (фичи, функционал, качество и т.д.) Время (график, сроки) Деньги (бюджет, ресурсы) Где же качество?
  • 6. “Железный треугольник” Объем работ (фичи, функционал, качество и т.д.) Качество Время (график, сроки) Деньги (бюджет, ресурсы) Качественное ПО получается в результате баланса между объемом работ, сроками и бюджетом http://www.intuit.ru/department/se/msd/4/3.html
  • 7. К чему эти треугольники?
  • 9. Какиеестьспособы? Организационные XP (eXtreme Programming) Code review Project management, methodology, Utilities: StyleCop, FxCop, Code Analysis Requirements… Технические Юнит-тесты TDD, Defensive programming style OOP/OOD, principles Обучение
  • 10. Какиеестьспособы? Внешние – программистские практики Парное программирование Статический анализ кода Code review , Unit-tests, TDD/BDD Внутренние- правильное проектирование и рефакторинг кода как способ превращения плохого кода в более хороший OOP/OOD, principles, Programming style
  • 12. Статическийанализкода StyleCop, FxCop, Code Analysis, Ndepend Цельавтоматизироватьreview кода и обратитьвнимание на распространненые ошибки и скользкие участки. В идеале внедрить стат. анализ в CI (build process) Организационные способы
  • 13. Методологии и управление Управление проектом напрямую влияет на результаты и удовлетворенность от работы Хаотическое управление = низкое качество(e.g. Cowboy coding) Организационные способы
  • 14. Extreme programming Парное программирование Всесторонний codereview Юнит-тесты на весь код (TDD) YAGNI, не пишем того, что не нужно Изменчивые требования Частая коммуникация с заказчиком и в команде Организационные способы
  • 15. Обучение Никакие утилиты стат.анализа не заменят людей Позволяет писать качественные код Повышает коммуникации Улучшает команду Парное программирование способствует Обучение
  • 16. Юнит-тесты, TDD Юнит-тесты – позволяют контролировать соответствие кода задуманному поведению. ТDD – подход к написанию кода начиная с тестов. «Тесты вперед» Техническиеспособы
  • 18. Защитное программирование Defensive programming Использование ассертов (asserts) Использование контрактов кода(code contracts)Ассерты или контракты как мини юнит-тесты если что то идет не так Техническиеспособы
  • 19. Технический долг К его появлению приводит быстрая и бездумная разработка Когда мы понимаем, что можем написать дизайн лучше, но в силу причин не делаем этого – мы откладываем долг. Выплачивать придется рефакторингом Техническиеспособы
  • 21. Принципы ООП/ООД Принципы SOLID Принципы GRASP KISS = Keep it simple DRY = Don’t repeat yourself YAGNI = You ain’tgonna need it Техническиеспособы http://msug.vn.ua/Posts/Details/4221
  • 22. Метрики кода Это количественные показатели, которые можно измерить и которые могут дать представление о качестве кода Что можно померять: Lines of code Number of classes Inheritance depth Maintainability index Cyclomatic index
  • 28. NDepend. CQL SQL подобный синтакс Запросы к базе кода(codebase), чтобы полу-чить метрики SELECT TOP 10 METHODS ORDER BY NbLinesOfCode DESC SELECT METHODS WHERE NbLinesOfCode > 10 SELECT FIELDS WHERE HasAttribute "System.ThreadStaticAttribute"
  • 30. Coupling Efferent coupling (Ce): внутренняя связанность, число типоввнутрисборки, которые зависят от типов из вне сборки Afferent coupling (Ca):внешняя связанность, число типов вне сборки которые зависят от типов в внутри сборки
  • 31. Instability (I) Instability (I): отношение внутренней связанности(Ce) к общей связанности, индикатор устойчивости к изменениям. I = Ce / (Ce + Ca) I=0 – полностью стабильная сборка, сложная для модификации. I=1 – нестабильная сборка, внутри слабая связанность
  • 32. Abstractness (A) Abstractness (A): абстрактность, отношение числа внутренних абстрактных типов к числу внутренних типов. A=0 – полностью «конкретная» сборка A=1 – полностью абстрактная сборка
  • 33. Relational Cohesion (H) RelationalCohesion (H): относительная сцепленность, среднее число внутренних отношений на тип: H = (R + 1) / N, где R = число отношений внутри сборки, N = число типов сборки Классы внутри сборки должны сильно соотносится друг с другом, и сцепленность должна быть высокой. С другой стороны, слишком большие значение могут означать излишнюю связанность. Хорошие значения сцепленности1.5 ≤ H ≤ 4.0
  • 34. Coupling, Cohesion, Abstractness and Instability metrics on example Се = внутренняя связанность, Са – внешняя, I – стабильность, N – число типов сборки, А – абстрактность, Н – относительная сцепленность
  • 35. Lack of cohesion (LCOM) Принцип SRP утверждает, что класс должен иметь не более чем одну причину для изменения. Такой класс сцепленный (cohesive). Высокое значение означает плохо сцеплений класс. Типы, у которых LCOM > 0.8 могут быть проблемными. Тем не менее, очень сложно избежать таких не-сцепленных типов
  • 36. Cyclomatic Complexity (CC) Число следующих выражений в методе: if, while, for, foreach, case, default, continue, goto, &&, ||, catch, ? : (ternary operator), ?? (nonnull operator) Эти выражения не учитываются: else, do, switch, try, using, throw, finally, return, object creation, method call, field access CC > 15 сложно понимать, CC > 30 очень сложные и должны быть разбиты на более мелкие методы (кроме сгенерированного кода)
  • 37. Distance from main sequence:zone of pain and zone of uselessness Main sequence в терминахNDepend, A + I = 1, Представляет оптимальный баланс между абстрактностью и стабильностью D – это нормализированное расстояние от main sequence, 0 ≤ D ≤ 1 Сборки с D > 0.7 - проблематичны Но, в реальной жизни, сложно избежать таких сборок. Просто необходимо удерживать число таких сборок минимальным.
  • 38. Cсылки и источники Msug http://msug.vn.ua/Posts/Details/4199 - NDepend http://msug.vn.ua/Posts/Details/4221- GRASP NDepend http://www.ndepend.com/ http://www.ndepend.com/GettingStarted.aspx Метрики NDepend http://www.hanselman.com/blog/content/binary/NDepend%20metrics%20placemats%201.1.pdf http://ndepend.com/Metrics.aspx О качестве http://merle-amber.blogspot.com/ http://blog.byndyu.ru