можно ли автоматически сформировать документацию на основе комментариев к программному коду

Автоматическая генерация технической документации

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Продолжая тему использования Asciidoc (и других аналогичных форматов) для организации процессов непрерывного документирования, хочу рассмотреть тему автоматический генерации технической документации.

Автоматическая генерация документации — распространенный, но очень расплывчатый термин. Я понимаю под этим термином извлечение для представления в удобном виде информации, содержащейся в исходном коде и настройках документируемой программы (информационной системы).

Общая схема автоматической генерации документации

Если рассматривать процесс автоматической генерации как чёрный ящик, то на входе имеем исходный код, а на выходе — документацию или её фрагмент. Однако в реальности при автоматической генерации документации целесообразны еще два промежуточных звена.

За исключением самых простых случаев, документация готовится в различных выходных форматах (html, docx, odt, pdf и т.п.) и собирается из разных источников (в том числе не автоматически генерируемых) поэтому целесообразно использовать специальные форматы для подготовки документации. Предположим, необходимо подготовить документацию по стандартам ЕСКД? Эта проблема, описана в предыдущей статье. При решении проблем автоматической генерации хватает проблем и без требований ГОСТ.

Общая схема генерации документации выглядит следующим образом:

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Рассмотрим практические приёмы, которые можно использовать при реализации ИТ-проектов. Для примеров будем использовать Asciidoc, однако приёмы применимы к любым языкам разметки текста(reStructuredText, Markdown), и текстовым маркапам для построения диаграмм (рекомендую проект kroki, который позволяет быстро ознакомиться и внедрить наиболее популярные средства построения диаграмм).

Преобразование исходного кода в структурированный формат

Единых подходов к превращению исходного кода в структурированный формат не существует. Рассмотрим наиболее частые варианты.

Информация для документации извлекается из структуры исходного кода

Как правило, используются дополнительные средства языка, обычно комментарии в специальном формате (комментарии Javadoc, ReST и т.п.) и аннотации.

Средств, обеспечивающих преобразование исходного кода в документацию, причём очень зрелых, много. Можно смело брать и использовать подходящие для конкретного проекта. Разработка собственных средств затратна. Мы пошли указанным путём только раз, разрабатывая проект для миграции структуры базы данных. Целесообразность определялась использованием средства во всех наших проектах и желанием попробовать свои силы.

Следующие подходы более гибки с точки зрения настройки автоматической генерации документации в реализуемых проектах.

Структурированный формат получается как один из результатов исполнения исходного кода

При данном подходе считывается и сохраняется в структурированный формат состояния объектов (например, структуры базы данных, конфигурации развернутой среды информационной системы и т.п.), создаваемых в результате работы приложения.

Отдельно отметим использование для документирвоания логов. Типовой пример — тесты. Например, большинство инструментов для тестирования выдают результаты в формате Junit xml report. Это, позволяет сделать универсальные инструменты генерации отчётности по тестам, самый известный, наверное — Allure Framework.

В этой статье показано, как используют JSON-файлы, которые генерирует при работе Cucumber, как документация строится на основе логов, создаваемых в результате работы тестов.

Типовой пример создания документации на основе считывания состояния объектов, создаваемых в результате работы приложения, — документирование структуры БД. В конце раздела приведен пример, иллюстрирующий данный подход.

Исходный код сразу представляет собой структурированный формат

Многие языки уже реализованы в структурированном формате (например, xsd-схемы, OpenAPI, различные DSL для описания предметной области, файлы настроек).

Иногда проводят предварительную обработку этих форматов, например, объединение спецификации в единую иерархическую структуру (так называемая операция «flatten»).

Частным (и частым) случаем является ситуация, когда настройки содержатся в базе данных.

Пример — генерация документации по структуре базы данных

Пример иллюстрирует достаточно частую ситуацию, когда информация для документации хранится в таблицах СУБД.

Создаём скрипт, описывающий структуру БД. Этот скрипт не выглядит как исходник для поддержания структуры БД, однако, как это не парадоксально, таковым является, подробности в документации к уже упомянутому проекту. Это также может быть миграционный скрипт в любой системе контроля версии базы данных.

Применим скрипт к базе данных и воспользуемся двумя инструментами СУБД (пример приведён для PostgreSQL): динамическими представлениями для извлечения сведений о структуре и возможностью создавать JSON-файлы на основе результатов сохранения запросов.

В результате получим JSON-файл:

В следующем разделе будет показано, как этот файл превратить в документ.

Использование шаблонизаторов

Для превращения структурированного файла в документ используют специальный тип языков,
шаблонизаторы. Шаблонизатор позволяет задать правила обхода иерархической структуры данных и правила, по которым элементы иерархии исходного документа преобразуют в выходной документ.

Формат этих правил достаточно простой, они безопасны с точки зрения исполнения, поэтому часто шаблонизаторы используются для настройки различных аспектов работы приложений непосредственно пользователями.

Самым известным языком обработки шаблонов (но далеко не самым простым) является XSLT. Самым минималистичным — Mustache.

Свой язык написания шаблонов и шаблонизатор также создать довольно просто. Например, для создания системы генерации отчётов в форматах Excel и ods мы пошли этим путём.

Можно вообще обойтись без шаблонизатора, просто структурировать код определенным образом, в этой старой статье 2003 года Мартин Фаулер признается в нелюбви к XSLT и заодно объясняет, как его заменить кодом, написанным на языке Ruby. За 18 лет оказалось, что и статические языки также можно прекрасно использовать для этих целей, и XSLT прекрасно себя чувствует, и предложенный в статье подход оказался очень хорош.

В примерах будет использоваться Liquid для работы с JSON и XSLT для работы с XML. В обоих случаях будет использоваться реализация в Ruby, потому что (1) Наиболее распространенный в настоящий момент процессор Asciidoc — Asciidoctor — написан на Ruby (2) Ruby-скрипты отлично работают в java и javascript, что часто позволяет не плодить цирк технологий.

Пример генерации документа из JSON-файла

Рассмотрим простой пример по генерации документа на основе полученного выше JSON-файла.

Генерация диаграммы в формате PlantUML:

На выходе получаем следующий текст диаграммы:

Аналогично сгенерируем документ в формате Asciidoc:

Для объединения обоих кусков в один документ воспользуемся директивой include:

Синтаксис Asciidoc рассмотрен в статье Asciidoc для ЕСКД. Подробнее структурирование документации в Asciidoc планирую описать в отдельной статье. Здесь лишь хотелось бы отметить, что при вставке диаграммы мы указываем параметры её отображения. В разных документах одну и ту же диаграмму мы можем отобразить по-разному (в разных цветах, с разным разрешением, в разной ориентации и т.п.).

Результаты превращаем в файл в формате Microsoft Word с помощью проекта, о котором рассказано в предыдущей статье.

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Ключевые техники, используемые при генерации документации

Для рассмотрения ключевых техник приведём пример с преобразованием XML-файла.

Для примера возьмем выписку из ЕГРЮЛ от Федеральной налоговой службы. Не совсем документация, но удобно для демонстрации основных приёмов преобразования структурированных данных в документацию.

Исходные данные (схема xsd и пример сообщения) взяты на сайте СМЭВ 3 — https://smev3.gosuslugi.ru/portal/inquirytype_one.jsp?id=41108&zone=fed. Для примера приведём небольшую часть выписки из ЕГРЮЛ:

Как видно, названия тэгов и атрибутов вполне говорящие, но мы возьмем полные названия параметров из схемы xsd.

Преобразование выписки из ЕГРЮЛ в формат Asciidoc выглядит следующим образом:

Наименования тэгов и атрибутов XML-документа обёрнуты в фигурные скобки — специальный синтаксис для отображения значений атрибутов Asciidoc. Значения атрибутов легко извлекаем из xsd-схемы с помощью следующего преобразования:

Объединим полученные значения атрибутов Asciidoc (два файла, т.к. описание сервиса по выдаче ЕГРЮЛ состоит из двух схем xsd) и файл с содержанием выписки:

На выходе Microsoft Word даёт следующую картинку:

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Борьба с пробельными символами

Поскольку конечным форматом преобразования является текстовая разметка, вопрос пробелов крайне важен: текст, смещенный на несколько пробелов, может быть воспринят как блок с моноширинным текстом.

Пробелы могут влиять на эстетику, читаемость и обрабатываемость выходного документа. Например, после каждого абзаца в Asciidoc должно быть два переноса строки. Их может быть и три, но читается файл хуже. Во многих автоматически сгенерированных документах количество переносов строк абсолютно не предсказуемо. Особенно это неудобно при сравнении версий файла. При наличии на выходе файла в формате XML или JSON можно было бы применить утилиты, создающие красивый выходной файл. Для текстовых маркапов, насколько я знаю, таких утилит не существует.

С другой стороны, крайне важно, чтобы сам шаблон был красивым и удобным для чтения и редактирования, чтобы, как минимум, были отступы в циклах и условных операторах.

Поработав со многими шаблонизаторами, пришёл к выводу, что единственный практически универсальный вариант — указать шаблонизатору, чтобы он вырезал все пробелы и переносы, а переносы указывать вручную в шаблоне. В приведенном примере есть опция и после каждой выводимой строчки помещена команда

. Некоторые шаблонизаторы воспринимают \n как символ переноса. Если нет, необходимо провести пост-обработку выходного файла и самостоятельно заменять данную комбинацию на перенос строки.

Рекурсия

Рекурсия обеспечивает наглядный способ обхода узлов структурированного документа с большим количеством единообразных уровней иерархии, как в приведённой выписке из ЕГРЮЛ.

Экранирование и другие операции со вставляемыми данными

Данные для вставки в Asciidoc файл могут вступить в конфликт с разметкой Asciidoc. Например, вы хотите взять текст из Open API спецификации и добавить символ « ; ». Однако разработчик мог при описании сам поставить тот же символ. В результате в выходной файл попадёт два символа « ;; » и Asciidoc будет воспринимать текст как терминологический список, и хорошо ещё, если мы быстро поймём, почему на выходе текст отформатирован странно.

Для полного отключения синтаксиса Asciidoc во вставляемых значениях, достаточно их просто экранировать.

Выводы

И анонс: следующая статья будет посвящена вопросам обеспечения качества документации в формате Asciidoc.

Источник

Docs as Code. Часть 2: получаем документацию из кода

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Инструменты для генерирования документации из кода

К 2021 году написано великое множество общедоступных библиотек на всех существующих языках программирования. У каждого разработчика есть уникальная возможность экономить своё время и решать сложные алгоритмические и вычислительные задачи, просто используя готовые решения, правильно встраивая их в свой код.

Наличие подробной и понятной документации изначально было необходимым условием успеха подобных библиотек, ведь они создавались для использования людьми, которые не имеют понятия о принципах их работы. Чтобы упростить получение такой документации, уже более 20-ти лет разрабатываются инструменты, которые позволяют собирать комментарии к коду, написанные по определённым правилам, и формировать из них HTML-страницы, PDF-документы или другие способы отображения структурированных данных. В этой статье речь пойдёт о примере практического применения одного из таких инструментов для документирования API, используемого командой Юлы.

В таблице приведены одни из самых популярных генераторов документации напрямую из кода, которые работают с интересующим нашу команду PHP:

НазваниеПервый релизТекущая версияЯзыки, с которыми работает инструментФорматы вывода
Sphinx2008/03/21, v0.1.616112020/12/24, v3.4.1C, C++, PHP, Python, Ruby, JavaScriptHTML, CHM, LaTex, Man pages, ePub
Doxygen1997/10/262020/12/27, Release_1_9_0C/C++, Java, C#,, PHP, PythonHTML, CHM, RTF, LaTex, Man pages, Doc book, XML
PhpDocumentor2011/02/01, v0.7.12020/10/27, 3.0.0PHPHTML
swagger-php2012/04/19, 0.1.02020/12/02, 2.1.0PHPYAML, JSON

На графике можно увидеть примерную оценку популярности инструментов, основанную на статистике GitHub: количество положительных отзывов — звёзд, а также количество копирований репозиториев:

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Роль технического писателя при включении в процесс разработки нового инструмента

Казалось бы, что может быть проще: разработчики сами оставляют комментарии к коду в нужном формате, а в процесс сборки проекта добавляется шаг, на котором запускается команда, которая разбирает комментарии и превращает их в HTML-страницы — и вуаля, документация готова. Но несмотря на видимую простоту процесса, в нём скрываются свои подводные камни.

Любой из вышеупомянутых инструментов требует определённой настройки, как минимум для кастомизации внешнего вида получаемых HTML-страниц. Установка и интеграция в процесс сборки тоже требуют отдельного внимания, хотя в большинстве случаев не представляют ничего сложного. Иногда проблемы с началом использования инструмента выходят за рамки технических сложностей и связаны с содержанием самих комментариев, особенно, если конечные потребители документации — внешние пользователи, а не только участники проекта. В этих случаях необходима экспертиза отдельного специалиста — технического писателя, основной задачей которого становится не столько написание самой документации, сколько правильная организация процессов вокруг её создания и изменение отношения к ней в целом. Важно перестроить мышление коллег, приведя их к осознанию того, что документация не является конечным продуктом, который создаётся одним человеком или группой людей, а становится процессом, в котором должна участвовать вся команда, работающая над проектом.

Пример использования swagger-php

Swagger-php позволяет получать yaml-файл с документацией, составленной в соответствии со спецификацией OpenAPI, из аннотаций к коду, написанных по определённым правилам. На сайте разработчика этого инструмента пользователю предлагается вариант установки с помощью Composer и несколько вариантов использования: вызывом процедуры непосредственно из PHP-кода, с помощью командной строки или запуском Docker-образа, загруженного из Docker Hub.

Подготовка к работе

Принимая решение о ведении документации в комментариях к коду, мы руководствовались простой истиной — чем меньше лишних действий совершает и дополнительных инструментов использует разработчик, тем меньше времени он тратит на создание описаний и тем сложнее забыть или не успеть их добавить перед передачей работы на проверку коллегам.

Для нашей команды ключевой трудностью во внедрении swagger-php в процесс разработки стало отсутствие полноценного описания всех возможных аннотаций и атрибутов, которые могут быть в них указаны. Однако, в репозитории с проектом приведено несколько примеров использования аннотаций, в том числе стандартный пример с описанием магазина домашних животных, указанный в качестве live-demo интерфейса Swagger на официальном сайте.

Первым делом мы разобрали эти примеры и составили на их основе шаблоны аннотаций для PhpStorm, — live-templates, — которые значительно упростили написание комментариев и соблюдение единой структуры в проекте. Нам помогли сообщения об ошибках, которые генерирует swagger-php. В этих сообщениях выводится полный список атрибутов, которые могут быть заданы для используемой аннотации. На основании полученных таким образом списков мы и составили полные примеры для шаблонов.

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Для тестирования работы инструмента, а также для прояснения вопроса о том, подойдёт ли он нашей команде и сможет ли вписаться в реалии процесса разработки, я переработал большой фрагмент старого незадокументированного кода, составил для него аннотации и получил первый конечный результат: yaml-файл с описанием части внутреннего API Юлы.

В ходе работы стало понятно, что некоторую информацию, имеющую отношение ко всему проекту, удобнее вынести в отдельные файлы и хранить в корне проекта в папке docs. В отдельный файл API_info.php мы вынесли аннотации, кратко характеризующие текущую версию документации:

Также мы создали отдельные файлы для описания групп тегов, выбранных в соответствии с внутренней логикой проекта. В этом разделе целесообразным было указать:

Следующим вопросом, который необходимо было решить, стал выбор способа отображения полученной спецификации.

Swagger UI

Swagger предполагает несколько возможных вариантов предоставления доступа к документации конечным пользователям:

В результате изменений верхняя панель будет выглядеть следующим образом:

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Полный перечень скриптов, которые могут быть запущены в проекте swagger-ui, приведены в соответствующем файле репозитория.

Интерфейс Swagger позволяет выбирать файлы со спецификацией для отображения. Это оказалось удобно для некоторых проектов, в которых есть явное разделение конечных точек. Достаточно в папке dist/ в файле index.html заменить переменную url на массив urls с именами и относительными адресами yaml файлов:

В результате получим следующий вид верхней навигационной панели:

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Сборка проекта

Процессы CI/CD в отношении документации были настроены коллегами из DevOps-подразделения команды, поэтому не буду останавливаться на этом подробно. В общих чертах сделали следующее:

Итоговый процесс

Процесс добавления новой функциональности был расширен и стал включать в себя обязательное добавление аннотаций к коду всеми разработчиками:

Заключение

После того, как добавление аннотаций к коду стало обязательным для всей новой функциональности, Swagger превратился в основной инструмент взаимодействия между командами разработки и тестирования. Процесс обновления и дополнения документации стал более регламентированным и прозрачным, что значительно упростило контроль актуальности и целостности итогового результата.

В 2021 году инструмент, подобный swagger-php, существует практически для любого языка программирования, что позволяет вести документацию в непосредственной близости от кода, а точнее, в самом коде. Таким образом, процессы хранения, проверки и обновления документации автоматически используют те же инструменты, которые применяются для работы с кодом, демонстрируя идеальный пример использования парадигмы Docs as code.

Источник

Автоматизация оформления документации

Работая над проектами связанными с авионикой мне потребовалось оформить несколько комплектов документации с полным описанием проекта. Также следовало учитывать требования многих ГОСТов на оформление и на содержание документации, таких как ЕСПД, КТ-178B и других.

Объем документирования очень большой. Данные во всех документах связаны друг с другом, поэтому при изменении проекта (например добавления нового требования), приходится редактировать практически все документы. Плюс к этому можно где-то ошибиться или забыть поправить, что приводит к ошибкам в документации.

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Далее в статье я расскажу как я решил эту проблему.

Архитектура генератора документации

Поэтому было решено использовать автоматизированные средства, которые создают все документы, используя данные из первичных документов — таблиц в формате CSV, XML документов. При любых изменениях в проекте — можно запустить заново генерацию комплекта документации.

Таблицы в формате CSV удобно редактировать в табличном процессоре. Данные о проекте (текущую версию, наименование, совместимое оборудование) хранил в формате XML.

Описание реализации требований уже содержится в doxygen комментариях к исходному коду. Doxygen специально для таких случаев может генерировать документацию в формате XML.

Генератор документации на основе шаблонов документов создает LaTeX документы, которые уже в PDF формате передаются заказчику.

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Генератор документации

Для реализации такой системы создания документации мне потребовалась утилита обработки шаблонов и скрипт сборки.

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Ключевой элемент системы — утилита обработки шаблонов документов.

Утилита обработки шаблонов

Или установить утилиту можно с помощью команды:

В шаблонах содержится информация — данные из каких внешних источников ему нужны. Утилита во время обработки шаблона подгружает необходимые данные, и использует их при заполнении шаблона данными.

В утилиту передается файл шаблона и путь до результирующего файла. Пути до источников данных в программу не передаются, так как они все определены в шаблоне, и один шаблон может использовать множество разных источников данных.

Источник

Есть разные подходы к написанию документации. Некоторые команды предпочитают начинать создание документации в момент начала создания продукта. Другие откладывают написание мануалов на окончание работ. В некоторых командах документацию пишут специальные люди, которые ходят от разработчика к разработчику и от менеджера к менеджеру, аккумулируя знания о продукте. Во многих небольших командах таких специальных людей нет, а потому документацию часто пишет разработчик или разработчики. Кто-то использует сторонние средства вроде Help & Manual, в которых, как в заправском текстовом редакторе, можно создавать очень сложную верстку и на выходе получать документацию в многообразии форматов. Многие используют другой подход, широко пропагандируемый в последнее время – написание документации прямо в коде программы/библиотеки.

Я в своей работе использовал и сторонние средства, и встроенные. Начинал писать документацию и сразу, и в последний момент. В итоге я для себя решил, что документацию лучше начинать писать во второй половине создания продукта, так как чем ближе к завершению, тем более стабилен API, набор возможностей и т.п., а значит, реже придется корректировать документацию. Написание документации прямо в коде тоже, в конечном счете, оказалось удобнее, чем в сторонних программах, хотя поначалу казалось совсем наоборот. Эта статья как раз о том, как писать документацию прямо в коде.

Описываем API

/// The R component from ABGR value.
public static int GetR ( int abgr )
<
return ( abgr & 0xff ) ;
>

По умолчанию создание xml-файла из комментариев отключено. Его нужно включить в свойствах проекта на вкладке Build.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

В результате при компиляции, в дополнение к файлу вашей сборки, будет сгенерирован xml-файл, который содержит все xml-комментарии из кода (в том числе комментарии к непубличным структурам). Этот файл уже сам по себе полезен тем, что если его положить рядом со сборкой (вашей dll), то это позволит функции IntelliSense в Visual Studio отображать описания для методов в момент набора пользователем кода. Вот пример того, как это будет выглядеть для функции GetR, показанной выше:
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

Однако в большинстве случаев сгенерированный xml-файл содержит комментарии к внутренним структурам, которые пользователям не нужно или нельзя видеть. Ниже я напишу, как автоматически очистить xml-файл так, чтобы в нем остались только описания к публичным методам.

Я не буду подробно рассматривать все xml-теги, а лишь попробую кратко описать наиболее часто используемые.

Тег summary служит для краткого описания назначения класса, интерфейса, перечисления (enum), методов и свойств класса или интерфейса и членов перечисления. Тег param позволяет описать параметр, принимаемый функцией. Этот тег нужно использовать для каждого принимаемого параметра. Тег returns используется для описания возвращаемого значения функции. Тег value полезен для описания значения, которое принимает и/или возвращает некоторое свойство. В некотором смысле тег value является аналогом тега returns.

///
/// Gets the font ascent.
///
/// The font ascent.
/// Ascent is the maximum height above the baseline reached
/// by glyphs in this font, excluding the height of glyphs for
/// accented characters.
public short Ascent
<
get
<
return Impl. Ascent ;
>
>

Очень полезным (и, к сожалению, часто игнорируемым) является тег remarks, который позволяет указать примечания к описываемой сущности. Этот тег можно использовать практически везде кроме описания членов перечисления. На самом деле для членов перечисления тоже можно, но в документации, оформленной в стиле vs2005, этих примечаний просто не будет видно, что уменьшает полезность таких примечаний.

Приведу еще несколько практических замечаний/рекомендаций.

Скачайте и установите расширение для Visual Studio под названием GhostDoc. Это расширение работает во всех версия студии (начиная с версии 2005) и сильно упрощает создание xml комментариев. По нажатию на Ctrl-Shift-D это расширение вставляет описание сущности, на которой в данный момент стоит курсор. Вставляются все необходимые теги, и генерируется текст описания на основе, например, названия метода и названия его параметров. Часто остается лишь откорректировать и дополнить сгенерированный текст.

Недостаток написания документации прямо в коде в том, что комментариев порой больше, чем кода, что может сильно затруднять чтение кода. Для обхода этой проблемы очень удобным оказывается полное разделение публичного интерфейса и реализации.

Если у вас есть несколько перегруженных методов, то при генерации документации для них будет создана отдельная страница (вот пример такой страницы). Текст для этой страницы нужно указать в теге overloads в описании одного из перегруженных методов.

The stream to save font bytes to.

/// Saves the font bytes to a file or a stream.
public void Save ( Stream stream )
<
Impl. Save ( stream ) ;
>

Пример использования частичной спецификации (PdfFontEmbedStyle находится в одном пространстве имен с PdfFont):

public sealed class PdfFont
<

///
/// Gets or sets the value that specifies
/// how this font is embedded into the document.
///
/// The value that specifies
/// how this font is embedded into the document.
public PdfFontEmbedStyle EmbedStyle
<
get
<
return Impl. EmbedStyle ;
>
set
<
Impl. EmbedStyle = value ;
>
>
>

Генерируем файл документации

Еще один важный шаг – описать пространства имен (namespace-ы) в SHFB. Xml комментарии в коде не работают для namespace-ов, поэтому нужно это сделать вручную. Тут поможет секция Comments и свойство NamespaceSummaries в ней. В описании namespace-ов можно использовать стандартные html теги.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду
Настройка проекта завершена, пришло время построить сhm-файл. Выбираем Documentation->Build Project, и, если все было сделано правильно, то получаем красивый файл документации в стиле MSDN.

Пишем статьи

Однако не стоит останавливаться на достигнутом – одного описания API вашего компонента не достаточно для полноценной документации. Хорошая документация обычно содержит дополнительные статьи, примеры, FAQ и т.п.

В окне Project Explorer добавляем новый элемент Content Layout – это описание (с указанием взаиморасположения) того, что входит в документацию. В окне Content Layout добавляются новые статьи (topics). Каждая статья описывается в MAML формате (.aml файлы), это xml-based формат. Sandcastle Help File Builder поставляется с набором предопределенных шаблонов, что значительно упрощает дебют в написании статей. Я в основном использую шаблон Conceptual, реже – Walkthrough.

Описание каждой статьи начинается с указания topic id – уникального идентификатора. На основе этого идентификатора генерируется html файл, который позже попадет в chm. Генерируемый html-файл именуется в форме “TOPIC_ID.htm”. Данный topic id используется также для ссылок на статью из других статей или xml-комментариев в коде.

При создании статьи предлагается ее сохранить в файл с именем “TOPIC_ID.aml”. Можно и нужно при создании сразу указать нормальное имя для файла.

Рассмотрим некоторые элементы управления в SHFB, которые полезны при редактировании статей.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному коду

можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному кодуУстанавливает стартовую страницу документации (будет показываться при
открытии документации.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному кодуУстанавливает положение, в которое будет вставлено описание API,
сгенерированное из xml-файла. В зависимости от того, какой вариант выбран,
описание API будет вставлено
либо перед, либо после, либо как дочерний элемент помеченного таким образом
элемента.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному кодуПредварительный просмотр текущей статьи.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному кодуВставка ссылки на статью в документации. Используйте topic id в
качестве адреса.
можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть фото можно ли автоматически сформировать документацию на основе комментариев к программному коду. Смотреть картинку можно ли автоматически сформировать документацию на основе комментариев к программному коду. Картинка про можно ли автоматически сформировать документацию на основе комментариев к программному коду. Фото можно ли автоматически сформировать документацию на основе комментариев к программному кодуВставка стандартных тегов для разметки статьи.

Окно Entity Reference (на картинке расположено справа) можно использовать для вставки ссылок на описание функций/методов и т.п. сущностей из кода. Такой способ вставки ссылок не очень удобен на мой взгляд, так как нужно сначала открыть текст статьи, потом открыть окно Entity Reference, потом в этом окне написать часть или полное названия сущности, потом найти в списке нужную строку и дважды кликнуть на нее. Все это приведет к тому, что в статью вставится ссылка в позиции курсора. Я предпочитаю писать ссылки руками, а текст для ссылок находить в build log-е (лог от предыдущего билда можно открыть в текстовом редакторе).

href = «ImageId» placement = «center» / > / mediaLink>

К сожалению, в текущей версии SHFB редактор далек от совершенства. Например, теги не закрываются автоматически, очень много действий приходится делать мышью (нет хоткеев), не для всех стандартных тегов есть соответствующие элементы на тулбаре. Парадоксально, но мне для большинства действий с aml-файлами удобнее использовать Visual Studio. Разумеется, можно использовать и любой другой удобный xml-редактор для написания статей.

Интеграция в процесс сборки

Можно включить файл проекта (*.shfbproj) от Sandcastle Help File Builder в solution Visual Studio, однако в настоящее время нет возможности использовать его как полноценный проект. То есть вы не сможете увидеть содержимое такого проекта, проект лишь добавится в группу Solution Items.

Более полезна сборка документации из командной строки. Такую сборку можно делать на Post-Build event или в других случаях. Собрать документацию из командной строки очень просто следующей командой:
%SystemRoot%\Microsoft.NET\Framework\v3.5\MSBuild.exe» /p:Configuration=Release Help.shfbproj
В этой строке Help.shfbproj – название проекта документации.

Надеюсь, эта статья поможет вам начать писать документацию к вашим проектам (если вы еще этого не делаете) за что ваши пользователи наверняка скажут вам спасибо. Успехов вам в написании документации!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *