Doxygen, слишком тяжелый для поддержания? [закрытый]

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

У Вас есть некоторые подсказки для документирования моего исходного кода эффективно?

Некоторый редактор (или плагин для существующего редактора), чтобы doxygen сделали следующее существует?

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

PS: Я работаю над проектом C/C++.

24
задан Phong 9 March 2010 в 09:43
поделиться

9 ответов

Вы считаете синтаксис Doxygen сложным? Или дело в том, что вам нужно сейчас прокомментировать все функции.

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

Если последнее, то выдержи. Как хорошая практика программирования, каждая общедоступная функция должна иметь заголовок комментария, который объясняет:

  1. Что функция делает
  2. Параметры
  3. Коды возврата
  4. Любые важные предупреждения / ограничения, касающиеся функции.

Это верно независимо от того, какой инструмент документирования вы используете.

Мой большой совет: Избегайте соблазна слишком много комментировать. Опишите, что вам нужно, и не более того. Doxygen предоставляет вам множество тегов, но вам не обязательно использовать их все.

  • Не всегда нужно @brief и подробное описание.
  • Вам не нужно указывать название функции в комментариях.
  • Не нужно комментировать прототип функции И реализацию.
  • Вам не нужно указывать имя файла в верхней части каждого файла.
  • Вам не нужна история версий в комментариях. (Вы используете инструмент контроля версий, верно?)
  • Вам не нужна «дата последнего изменения» или что-то подобное.

Относительно вашего вопроса: Doxygen имеет некоторые параметры конфигурации, чтобы вызывать предупреждения, когда комментарии не соответствуют коду. Вы можете интегрировать это в свой процесс сборки и сканировать вывод Doxygen на наличие предупреждений. Это лучший способ отловить отклонения в коде от комментариев.

28
ответ дан 28 November 2019 в 22:59
поделиться

Что-то серьезно не так с тем, как вы используете комментарии или как вы разрабатываете.

Комментарии Doxygen используются для внешней / внутренней документации по интерфейсам. Если ваши интерфейсы меняются очень быстро, вам, вероятно, следует сначала сесть и подумать об архитектуре.

Если вы используете doxygen для документирования внутреннего потока функций, вам, возможно, стоит переосмыслить этот подход (и даже тогда эти комментарии не должны сильно меняться). Когда у вас есть функция, которая вычисляет какое-то значение, тогда комментарий /// Расчет xy с использованием алгоритма abc определенно не должен меняться каждый день.

9
ответ дан 28 November 2019 в 22:59
поделиться

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

2
ответ дан 28 November 2019 в 22:59
поделиться

Не совсем то, что вы ищете, но этот плагин Vim может генерировать заглушку Doxygen поверх ваших определений. Работает очень хорошо.

2
ответ дан 28 November 2019 в 22:59
поделиться

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

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

0
ответ дан 28 November 2019 в 22:59
поделиться

Это действительно зависит от того, сколько информации вы помещаете в свою документацию.

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

Советы:

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

Вы будете рады, когда придете отредактировать свой код через 6 месяцев ...

4
ответ дан 28 November 2019 в 22:59
поделиться

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

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

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

8
ответ дан 28 November 2019 в 22:59
поделиться

Судите сами, если приведенный ниже стиль соответствует вашим потребностям. Это C-аффин, но, возможно, вы можете извлечь из него достаточно для своих целей.

///\file

/// Brief description goes here
bool /// @retval 0 This is somewhat inconsistent. \n Doxygen allows several retval-descriptions but 
     /// @retval 1 will not do so for parameters. (see below)
PLL_start( 
   unsigned char busywait, ///< 0: Comment parameters w/o repeating them anywhere. If you delete this param, the
                           ///     comment will go also. \n
                           /// 1: Unluckily, to structure the input ranges, one has to use formatting commands like \\n \n
                           /// 2-32767: whatever
   int param)              ///< 0: crash \n
                           ///  1: boom \n
                           ///  2: bang!
{
   /**
    * Here goes the long explanation. If this changes frequently, you have other more grave problems than 
    * documentation. NO DOCUMENTATION OF PARAMETERS OR RETURN VALUES HERE! REDUNDANCY IS VICIOUS!
    * - Explain in list form.
    * - It really helps the maintainer to grok the code faster.
    *
    *@attention Explain misuses which aren't caught at runtime.
    *
    *@pre Context:
    * - This function expects only a small stack ...
    * - The call is either blocking or non-blocking. No access to global data. 
    *
    *@post The Foobar Interrupt is enabled. Used system resources:
    *    - FOO registers 
    *    - BAR interrupts
    */
    /**@post This is another postcondition. */
}
2
ответ дан 28 November 2019 в 22:59
поделиться

В дополнение к Doxygen, я думаю, вам стоит взглянуть на Code Rocket .

Он фактически документирует то, что происходит «внутри» ваших методов, просматривая фактический код и комментарии, которые они содержат, - следовательно, не ограничиваясь только заголовками комментариев к функциям, которые могут устареть по сравнению с фактическим содержимым функции.

Он автоматически предоставит вам блок-схему и псевдокод визуализации содержимого вашего метода в виде документации.

0
ответ дан 28 November 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: