Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> автоматическое документирование кода, automatic documentation 
:(
    Опции темы
bilbobagginz
Дата 10.7.2008, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



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

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

Большие дяди перед написанием кода пишут документ, определяющий что этот код будет делать.
Но, когда дело доходит до реализации (имплементации), всё пишется с теми же интерфейсами, но чуточку по-другому, чем планировалось. Поэтому документация кода внутри исходников - незаменима (если у вас конечно получается писать настолько чисто и классически, что сам код настолько прост и самоописаем, что документация вам не нужна.
Обычно же хочется быть способным погулять по коду, а точнее по его документации, посмотреть глазами на связи меж структурами данных, и без особого напрягу всё это запомнить. Также хочется, чтобы из данной документации были ссылки на живой код, и можно было посмотреть полные списки классов, структур, файлов проекта и т.д.
Фактически нужен инструмент автоматического создания документации, который бы прошелся по коду, и извлек из него заметки, описания, определения, всё, и уложил бы эту информацию в HTML, чтобы было легко почитать это через пару лет, и понять: что же мы тут наделали?
Kроме написания своими руками парсера документаци, одно из самых доступных, причем бесплатно, решений этой проблемы - Доксиджен.


Примечание:
В данной статье опускаются опасности разных методов документирования и написания кода. Насчет опасностей - писать дурацкий код, с дурацкими комментариями - это независимая опасность от doxygen.
Если человек писАть не умеет, то ему учиться надо. Я исхожу из того, что документуруется то, что нужно и как нужно. И задача, решение которой тут описано - создание на основе кода + комментариев документа (напр. PDF, LaTeX, RTF, или HTML каталог) со следующими "параметрами":
  • удобного для чтения, со ссылками в код
  • индекс элементов кода с пояснениями
  • иллюстрации связей между различными компонентами программы
т.е. дебаты о целесообразности одного или другого стиля комментирования тут не актуальны.



Идея - не писать вручную дополнительные "служебные" ключевые слова на каждой строке кода для комментирования, а просто комментировать, почти "незаметно" для себя.

Установка
Домашняя страница проекта - тут
Скачать и установить можно оттуда. Процесс установки довольно простой:
  • На системах GNU/линукс или UNIX проще всего довериться дистрибутиву. Пакет поставляется в дистрибутиве.
  • На системах Микрософта doxygen придется предварительно скачать и установить:
    • реализацию LaTeX для Winows, напр. MikTeX
    • реализацию ghoststrip, напр. эту
    • для создания  помощи в формате HTML в стиле Windows нужно скачать пакет Microsoft HTML help workshop
    • Далее качается и ставится сам пакет Doxygen.
Принцип работы с инструментом прост: 
Комментирование исходников делается по простому принципу, описанному ниже. Далее создается кофигурационный файл настроек работы Doxygen, и в заключение она запускается. После этого создается каталог, с существующим индексом index.html, с которого можно начать просматривать готовую документацию. Вид документации можно контролировать при помощи специального CSS файла (не обязательно), чтобы придать ему "свой" стиль.

Этапы работы с doxygen:
  • "Незатруднительное" комментирование кода
  • создание конфигурационного файла
  • запуск генератора документации doxygen
О каждом этапе в расширенной форме - ниже.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Незатруднительное" комментирование кода
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
создание конфигурационного файла
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
запуск doxygen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ту Би Континьюд


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Lazin
Дата 10.7.2008, 08:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



еще не помешает установить graphviz, пакет визуализации графов
с его помощью doxygen может рисовать UML схемы

вообще в коде выглядит это так:
Код

/*! \breif Краткое описание (если не указано, то берется из основного описания)
 *  \group Можно группировать документацию по смыслу
 *  Описание класса
 */
class Foo
{
    /*! \breif Краткое описание
     *  Развернутое описание
     *  Можно привести пример кода:
     *  \code
     *  Foo f; f.foo("aaaa", 111);
     *  \endcode
     *  \param a - описание параметра a
     *  \param b - описание параметра b
     *  \return описание возвращаемого значения
     */
    int foo(std::string a, long b)
    {
       return 0;
    }
};

doxygen поддерживает разные яп и разные форматы документирования, не только тот что я привел smile
PM MAIL Skype GTalk   Вверх
Torsten
Дата 10.7.2008, 09:46 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Когда я читаю исходники докуметнированные doxygen - я сильно матерюсь, так комментариев настолько много, что желание читать исходники пропадает сразу же, особенно в хедерах, где описан интерфейс класса.  Когда комментарий в 1 строку - это нормально, когда 20 - для хедера нет, для соурса тоже нормально, если обьясняется что-то нестандартное. Тем более как правило нормальные программисты называют идентификаторы и функции так, что они сами документируются и когда ты читаешь их сразу все понимаешь. Естественно если программист пишет string a, int b - таких нужно сразу увольнять, пускай опен соурс пишут.
Этому еще на первых курсах учат - не пишите комментарий там где он будет лишним.



Это сообщение отредактировал(а) Torsten - 10.7.2008, 09:48
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
Lazin
Дата 10.7.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



ну во первых, можно свернуть комментарии в IDE(если конечно IDE поддерживает folding)...
ИМХО doxygen все-же удобнее вики, не всегда смысл кода очевиден, иногда бывают всякие неявные соглашения, например, что какая-то функция не может быть вызвана из любого потока а только из GUI потока, или еще что нибудь в этом роде, так что документацию нужно писать. Это особенно хорошо начинает чувствоваться с большим проектом, когда работаешь над одной частью проекта достаточно долго, забываешь что и как в другой части проекта и приходится читать документацию или анализировать код если ее нет smile 
PM MAIL Skype GTalk   Вверх
bilbobagginz
Дата 10.7.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Lazin, одно из свойств doxygen, которое действительно раздражает, при чтении комментов "приготовленных" под doxygen, это обозначения в таком вот стиле (кстати у тебя там опечатка: \brief, а не \breif)
Код

/*! \brief Краткое описание (если не указано, то берется из основного описания)
 *  \group Можно группировать документацию по смыслу
 *  Описание класса
 */
class Foo
{
    /*! \brief Краткое описание
     *  Развернутое описание
     *  Можно привести пример кода:
     *  \code
     *  Foo f; f.foo("aaaa", 111);
     *  \endcode
     *  \param a - описание параметра a
     *  \param b - описание параметра b
     *  \return описание возвращаемого значения
     */
    int foo(std::string a, long b)
    {
       return 0;
    }
};

я скоро добавлю, то что рекомендую:

Код

/*! \class Краткое описание
 *   Длинное 
 *   описание
 *   класса на несколько строк
 */
class Foo
{
    /*! \fn Краткое описание
     *  Развернутое описание
     *  Можно привести пример кода, но для этого лучше создать отдельный файл КОДА.
     */
    int foo(
              std::string a, //!< описание параметра a
              long b         //!< описание параметра b
              )
    {
       return 0;
    }
};

т.е. принцип - как можно меньше "внешних" коду ключевых слов.
Насчет опасностей - писать дурацкий код, с дурацкими комментариями - это независимая опасность от doxygen.
Если человек писАть не умеет, то ему учиться надо.

Добавлено @ 11:08
Цитата(Lazin @  10.7.2008,  10:30 Найти цитируемый пост)
Это особенно хорошо начинает чувствоваться с большим проектом

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



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Torsten
Дата 12.7.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Lazin
Цитата(Lazin @  10.7.2008,  10:30 Найти цитируемый пост)
Это особенно хорошо начинает чувствоваться с большим проектом, когда работаешь над одной частью проекта достаточно долго, забываешь что и как в другой части проекта и приходится читать документацию или анализировать код если ее нет 

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

--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
Lazin
Дата 12.7.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Torsten, ты хочешь сказать, что у вас код вообще не документирован?
если что, тема обсуждения - doxygen, а не необходимость документации к коду

Это сообщение отредактировал(а) Lazin - 12.7.2008, 23:40
PM MAIL Skype GTalk   Вверх
Torsten
Дата 13.7.2008, 11:01 (ссылка)   | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Lazin
Код пишется так, что он автоматически документируется. Я уже об писал, если функции и переменные называются int foo(string a) - таких нужно сразу увольнять. Примеры как раз таки приведены в этой теме. Вообщем эти моменты в книгах обсуждают. Самая наверное лучшая - Совершенный код, от Макконела.
 
Естественно главное детали проектов (диаграммы классов, компонентов) и guides с examples по использованию находятся на вики.

Это сообщение отредактировал(а) Torsten - 13.7.2008, 11:10
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
W4FhLF
Дата 13.7.2008, 11:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Torsten @  13.7.2008,  11:01 Найти цитируемый пост)
Естественно главное детали проектов (диаграммы классов, компонентов) и guides с examples по использованию находятся на вики.


В одной из тем ты утверждал, что вы не используете диаграммы, ибо нет надобности и времени: 

Цитата

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


А теперь диаграммы классов одна из основных деталей ваших проектов. Быстро пересмотрели свои взгляды smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
gargon2008
Дата 20.11.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.1.2008

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1221 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.