Интересности      Книги      Утилиты    

20 сентября 2012 г.

NDepend 4, меняем SQL на Linq

linq

Я уже писал раньше об NDepend, очень мощной утилите для ревью, аудита и анализа кода. Совсем недавно она обновилась до 4-й версии. В NDepend 4 в основном радуют несколько новшеств:

  • Code query and rule over LINQ (CQLinq). Привычный старый SQL подобный язык CQL для написания правил сдвинулся в сторону CQLinq – LINQ подобного или фактически LINQ выражений для написания правил. Старый CQL тоже остался для тех кто с ним сроднился.
  • NDepend.API. Дает возможность писать свои собственные статические анализаторы кода базируясь на NDepend.API. Это для тех кому мало CQLinq и собственных правил анализа кода.
  • VS 2012 addin support. Поддержка Visual Studio 2012, то есть интеграция NDepend как add-in как это было для предыдущих версий Visual Studio.

Подробненько про эти и остальные фичи на сайте NDepend.

Code query and rule over LINQ (CQLinq)

CQLinq_Overview1[1]

Синтаксис изменился от SQL подобного до LINQ подобного. Если честно то это все равно что вы писали раньше запросы в коде на SQL а стали писать через LINQ. Действительно удобно, можно писать как LINQ выражения так и с использованием LINQ extension methods, последнее правда годится для простыл правил анализа кода.

Methods.Where(m => m.NbLinesOfCode > 30).Count()

warnif count > 0
from baseClass in JustMyCode.Types
where baseClass.IsClass && baseClass.NbChildren > 0
let derivedClassesUsed = baseClass.DerivedTypes.UsedBy(baseClass)
where derivedClassesUsed.Count() > 0
select new { baseClass, derivedClassesUsed }

Есть типы от которых пляшут все выражения, такие как JustMyCode, Application, ThirdParty, Assemblies etc. Названия как бы говорят сами за себя: JustMyCode – только в моем коде, ThirdParty – только в зависимостях и т.п. Дальше остается делать запросы отталкиваясь от них как в примере.

Можно просто делать запросы к “базе кода”, а для того чтобы создавать правила обычно можно использовать вначале warnif count > 0.

Синтаксис CQLinq - не сложный и человеку знакомому LINQ с может даже не понадобится смотреть в документацию.

NDepend.API

В папке $NDependInstallPath$\Lib валяется сборка NDepend.API.dll, которая и представляет собой API для написания своих собственных анализаторов кода. Там же можно найти NDepend.PowerTools – набор готовых анализаторов с открытым кодом, которые по сути являются примером использования API.

NDepend.API пригодится тем, кому мало возможностей CQLinq. Чтобы основательно разобраться там – не нужно много усилий. Получить вводную в доке по ссылке Getting Started и посмотреть в примеры NDepend.PowerTools.

VS 2012 addin support

Представляет собой обновление совместимости add-in для новой VS 2012. представляет тот же функционал что и отдельное приложение NDepend, просто с удобной интеграцией в Visual Studio.

Выводы

NDepend обновился и стал более расширяемым. Можно делать многое в том числе - свои собственные правила для анализа и метрики, собственные кастомизированные отчеты по билду, интеграция с билд системами. Отличная утилита для тех кому нужно часто делать код ревью и аудит, возможно для архитекторов. Но NDepend все еще остается утилитой, помощником для тех кто хочет охватить сложную базу исходного кода быстрым взглядом, но он еще не стал такой мощной системой для анализа билдов как скажем Sonar, где уже многое идет “из коробки” и бесплатно.

Комментариев нет:

Отправить комментарий