CodeIt.Right - соблюдаем стандарты кодирования.Автор: Виктор Деревянко Опубликовано: 20.03.2009 Источник: SoftKey.info Соблюдение стандарта кодирования дает программисту массу преимуществ. Код становится более однородным, более читабельным, более простым для восприятия. Упрощаются поиск ошибок в коде, модификация, сопровождение и повторное использование кода.
Стандарты кодирования - это не просто соглашения об именованиях классов и порядке расстановки скобочек.
Стандарты обобщают опыт множества программистов и определяют правила, которых имеет смысл придерживаться при кодировании. Они дают возможность избежать ошибок, которые делали до вас другие программисты.
Стандарты кодирования можно сравнить с правилами движения. Как грамотные водители соблюдают правила движения, так и грамотные программисты следуют стандарту кодирования. Каждый из нас знает, что если правила систематически нарушать, то рано или поздно неприятностей не избежать. Именно тех неприятных неприятностей, из-за которых это правило и было придумано.
Стандартов кодирования существует масса. Только для одного языка С++ их несколько десятков. Плюс многие компании, разрабатывающие программное обеспечения, стремятся ввести собственные стандарты.
Разработчикам C# и VB.NET повезло больше. Фирма Microsoft разработала "Руководство по разработке библиотек классов", описывающее стандарт кодирования для платформы Net Framework. Какой еще стандарт может быть стандартнее? Естественно он прижился и множество разработчиков во всем мире использует именно его. Тем более, что у него есть еще один плюс - для него существуют средства анализа кода, позволяющие автоматически проверять код программы на соблюдение стандарта.
Существует несколько подобных инструментов. Во-первых, FxCop. Это программа от Microsoft, которая анализирует скомпилированный код сборки. Хотя функционал FxCop встроен в Microsoft Visual Studio 2005/2008, многие предпочитают использовать FxCop в виде отдельного приложения из-за более удобного интерфейса. Далее, не так давно появился продукт StyleCop, разработанный одним из разработчиков той же Microsoft. В отличии от FxCop, StyleCop анализирует исходные коды программы, а не скомпилированные сборки. Кроме того, если FxCop ориентирован на дизайн кода, то StyleCop фокусируется на проблемах расположения, читабельности и документируемости кода - той информации, большая часть которой исчезает в процессе компиляции.
FxCop и StyleCop пользуются заслуженным успехом и активно применяются разработчиками. Но обе программы имеют один и тот же недостаток - они могут указать на нарушение в коде, но не способны это нарушение самостоятельно откорректировать. Кроме того, обе программы "заточены" под стандарт кодирования от Microsoft. Если вы по какой-либо причине используете иной стандарт (например, по требованию заказчика), то они засыпят вас сообщениями о несуществующих нарушениях.
Обе проблемы решены в программе CodeIt.Right, разработанной компанией SubMain. CodeIt.Right представляет из себя плагин для Microsoft Visual Studio, способный анализировать код приложения, проверять код на соответствие выбранному стандарту кодирования и выполнять рефакторинг кода с целью исправления выявленных нарушений. CodeIt.Right берет за основу стандарт кодирования от Microsoft, но позволяет без проблем определять собственные стандарты кодирования. С помощью CodeIt.Right легко изучить стандарт кодирования и легко ему следовать.
Интерфейс
CodeIt.Right встраивает собственное меню в Microsoft Visual Studio. Для того, чтобы провести анализ проекта, необходимо дать команду "Start Analysis". CodeIt.Right проанализирует исходные коды приложения (время анализа сопоставимо со временем компиляции приложения) и откроет окно с результатами анализа.
 | | Интерфейс CodeIt.Right | В окне выводится полный список выявленных нарушений. Для каждого нарушения показываются: имя файла, элемент кода, с которым связано нарушение (название переменной, метода и т.п.), номер строки, тип элемента (параметр, метод, класс и т.д.), краткое описание выявленного нарушения, категория нарушения, уровень серьезности и описание действий, которые необходимо предпринять, для фиксации нарушения. Список сгруппирован по файлам проекта. Список отображаемых столбцов настраивается. Заголовки столбцов позволяют отсортировать и отфильтровать содержимое.
Под списком нарушений, в отдельном окне, выводится краткое пояснение выбранного нарушения. Можно получить более детальную информацию о нарушении, нажав кнопку "More..." - чрезвычайно удобный способ для новичка изучить стандарт кодирования. Двойной щелчком мышки по строке с нарушением позволяет перейти к соответствующему коду программы.
Особенностью CodeIt.Right является то, что программа не просто показывает список найденных нарушений, но и позволяет их исправить. Причем исправить грамотно, выполнив полноценный рефакторинг. Например, согласно стандарту кодирования, имена параметров методов необходимо писать в "верблюжем" регистре. Если вы напишите имя другим способом, то CodeIt.Right сообщит об ошибке. По вашей команде CodeIt.Right ошибку исправит: не просто переименует параметр, но и изменит все вхождения имени в коде программы. Так что работоспособность программы при таком изменении не нарушится.
 | | Исправление нескольких ошибок сразу | Процесс исправления ошибок легко контролируется. Для каждого нарушения имеется отдельная кнопка корректировки - нажал, ошибка исправлена. Можно пойти другим путем - отметить галочками нарушения, которые требуется исправить и исправить их все "оптом". В этом случае, CodeIt.Right покажет диалог со списком исправленных нарушений. Если в процессе исправлении нарушений появятся ошибки, CodeIt.Right сообщит о них детальную информацию. Очень удобно, что диалог является немодальным - не закрывая его, можно просмотреть, каким образом было исправлено любое нарушение. Другая приятная особенность - CodeIt.Right отмечает в коде программы все места, в которые были внесены исправления.
 | | Визуализация внесенных изменений | Если в исправлениях что-то не устраивает, то одним нажатием кнопки Undo все внесенные изменения можно отменить. После отмены повторный статистический анализ кода проводить не требуется (в более ранних версиях программы была такая досадная ошибка).
Для многих нарушений имеются различные варианты их корректировки. Например, если у вас класс назван ClassImpl, CodeIt.Right по умолчанию предложит исключить постфикс Impl и переименовать класс в Class1. Не слишком красивое имя. Альтернативный вариант - ввести новое имя вручную. CodeIt.Right позволяет вам самостоятельно решить, какой вариант исправления выбрать.
 | | Выбор варианта исправления | В отдельных случаях, стандарт кодирования приходится нарушать и игнорировать некоторые нарушения. На этот случай CodeIt.Right предоставляет удобную возможность отменить проверку определенного нарушения. Способов отмены несколько. Можно отменить проверку конкретного нарушения, запретить проверять определенный файл или исключить при анализе проверку заданного правила. Кроме того, в настройках программы можно прописать названия регионов кода, которые нужно пропускать при проверке (например, регионы с кодом, создаваемым автоматически дизайнером форм).
Исключенные нарушения, правила и файлы CodeIt.Right показывает на отдельных вкладках в окне анализа. Любые исключения всегда можно отменить.
Возможности
CodeIt.Right отслеживает множество типов нарушений: нарушения связанные с дизайном приложения (реализуйте финализатор правильно), производительностью (свойства не должны возвращать массивы), безопасностью (не объявляйте объекты изменяемых ссылочных типов открытыми только на чтение) и т.д.
CodeIt.Right умеет проверять орфографию. Причем не только в комментариях, но и в словах, входящих в названия классов, переменных и т.д. Проверки выполняется с помощью словарей OpenOffice, так подключить проверку для русского языка - не проблема.
В плагине реализован мощный набор функций, отслеживающих соблюдение правил именования. Проверяется корректность регистра имен, наличие или отсутствие в них определенных префиксов и постфиксов, наличие запрещенных символов. Если вы твердо решили придерживаться при кодировании стандартных требований к именованию идентификаторов, то CodeIt.Right здорово облегчит вам жизнь. Ведь старые привычки именования (особенно у С++-программистов со стажем) не так то просто заменить новыми.
Крайне полезной (и уникальной!) функцией CodeIt.Right является способность отслеживать корректность реализации интерфейсов IDisposable и ISerializable. Реализация этих интерфейсов весьма не тривиальна. Например, при реализации IDisposable в методе Dispose() должна вызываться функция SupressFinalize и методы Dispose() всех управляемых переменных членов класса. О SupressFinalize легко забыть. Еще проще забыть вызвать метод Dispose() у переменной, если она была добавлена в класс после реализации IDisposable. CodeIt.Right сообщит обо всех подобных нарушениях - и сэкономит программисту массу времени.
Собственный стандарт кодирования. Профили
Все правила, которые CodeIt.Right использует для анализа, задаются в профиле. Изначально профиль всего один и базируется он на рекомендациях Microsoft. Этот профиль не редактируемый. Если вам нужен стандарт кодирования, отличающийся от стандартного, создайте новый профиль.
Новый профиль создается либо с чистого листа, либо на основе существующего. В созданные профили можно вносить любые изменения: добавлять, удалять и изменять правила. В отличии от FoxCop, где создание любого пользовательского правила требует программирования, в CodeIt.Right подавляющее большинство правил можно задать через графический пользовательский интерфейс.
 | | Создание собственного правила | Для каждого правила задаются название, уровень серьезности, область действия и список типов элементов, к которым правило применимо. Большинство правил имеют дополнительные, уникальные свойства. Например, правило может "уметь" проверять наличие определенных префиксов или суффиксов, определять регистр идентификатора, находить в идентификатор заданные символы и т.д. Новое правило всегда создается на основе существующего. Если вы хотите создать новое правило, вам нужно найти существующее с требуемым набором свойств, сделать его копию и задать другие значения свойств.
CodeIt.Right содержит функцию автоматического обновления набора правил. Периодически на сайте программы публикуются новые правила (или обновления существующих правил), разработанные SubMain или сторонними разработчиками. CodeIt.Right уведомляет об этом пользователя и предлагает скачать и установить обновления. В процессе установки можно явно указать, какие обновления устанавливать, какие нет и в какие профили обновления добавлять.
Отчетность
CodeIt.Right позволяет генерировать отчетность с информацией о проведенном статистическом анализе. Отчетность двух типов - списки нарушений и сводные таблицы.
Список нарушений можно сохранять в файлы формата XML или Excel (наличия Excel не требуется). Вместе с CodeIt.Right поставляются несколько XSLT преобразований, с помощью которых XML можно преобразовать в HTML.
Сводные таблицы позволяют построить суммарную отчетность по выявленным нарушениям. Механизм создания сводных таблиц в CodeIt.Right очень продуманный и позволяет создать множество различных типов отчетов. В ячейках сводной таблицы всегда отображается количество выявленных нарушений. В столбцах и строках могут быть самые разнообразные данные: категории нарушений, названия файлов, названия проектов, уровни серьезности нарушений и т.д.
 | | Пример сводной таблицы | По умолчанию, CodeIt.Right предлагает четыре встроенных типа сводных таблиц. Несколькими движениями мышки вы можете создать другие таблицы: как очень простые (сгруппированные списки), так и сложные, с многоуровневыми столбцами и строками.
Автоматизация
Процесс статического анализа кода с помощью CodeIt.Right можно автоматизировать. И даже включить в процесс автоматической сборки кода. Для этих целей предназначена утилита SubMain.CodeItRight.Cmd.exe. Она принимает в качестве параметров путь к файлу проекта, название профиля, имя файла, в который будет записываться отчет, имя XSL преобразования для обработки создаваемого отчета. Утилита возвращает либо положительное число (количество найденных нарушений), либо отрицательное число (код ошибки), либо ноль (нарушений нет, ошибок нет, все в порядке).
Конкуренты
Parasoft TEST, SSW Code Auditor, Project Analyzer (только VB.NET).
Системные требования
Microsoft Visual Studio 2003/2005/2008.
Языки C# и Visual Basic Net.
Текущая версия CodeIt.Right: Версия 1.2.08357
Выводы
Плагин понравился. На мой взгляд, этот плагин будет полезен все программистам C# и VB.NET без исключения. CodeIt.Right способен здорово помочь при освоении стандарта кодирования - ошибки найдет, суть их объяснит, способы исправления предложит и внесет в код необходимые исправления, сохранив его полностью работоспособным. Качество реализации - отличное, интерфейс - продуманный и удобный. Множество дополнительных полезных функций - работа из командной строки, мощная система отчетности, экспорт отчетности в XML, поддержка профилей, автообновление правил. В общем, обратите внимание! |