Como escrever comentários de documentação para fgldoc

Conteúdo

Principios

As aplicações normalmente têm três tipos de documentos: especificações, documentos estruturais e manuais para os utilizadores.

O âmbito deste documento prende-se apenas com os documentos que descrevem estruturalmente as aplicações.

Documentação criada em documentos autónomos normalmente estão desactualizados e são modificados apenas quando a gestão o define como tarefa prioritária (o que apenas acontece quando o seu estado fôr tal que já não tem qualquer utilidade).

Desta forma pensamos que a melhor forma será a documentação estar a cargo dos programadores e de preferência junto do código que se está a documentar (ou seja no source de 4gl).

Por isso, a exemplo do javadoc decidimos criar uma ferramenta que com base em standards muito bem definidos extraia a informação embebida no código e gere documentos com formato especifico e perfeitamente definido.

Devemos portanto tentar seguir os seguintes principios:

Quem é o “'dono' dos comentários de documentação - Especificadores, documentadores ou programadores

Os comentários não devem ser da exclusiva responsabilidade de nenhuma destas entidades. Esta é partilhada entre eles consoante a fase em que o projecto se encontra,

É importante notar que em grande parte dos projectos, os programas fonte são herdados já construidos e muitas vezes não documentados. De qualquer forma, de certeza não estão documentados com a nomenclatura que usamos.

Idealmente a documentação deve ser escrita pelos programadores à medida que implementam (ou alteram) as funções. Se existir uma metodologia de escrita inicial de um esqueleto sendo depois cada função implementada pelos programadores, deve ser o responsável pela construção do esqueleto a escrevê-lo.

Quando esta documentação é iniciada já depois da aplicação estar em funcionamento (num processo de refactoring ou simplesmente de documentação), deve ser efectuada sob a forma de empreitada tentanto ao máximo que seja o mais exaustiva possivel.

Após a documentação inserida, durante a fase de manutenção do projecto, os programadores têm de alterar toda a documentação no que refere às modificações efectuadas. No caso de resolução de bug(s) estas devem ser registadas no controlo de versões.

Com isto em mente, estes principios tentam descrever os comentários para documentação. Devem ser entendidos como sugestões em vez de requisitos rigidos a seguir até à exaustão. Sempre que existam alternativas criativas que se prove ser mais eficaz deve-se aplicáas e mesmo sugeri-las ao responsável deste documento.

Terminologia

Comentários para documentação (doc comments)

Comentários especiais escritos no código fonte de 4gl delimitado por {** ... }. Estes comentários são processados pela ferramenta p4gl paracarregar a documentação numa base de dados relacional. Desenvolvida em flex (lex), bison (yacc), C e perl.

fgldoc

A ferramenta que gera dinâmicamente a documentação a partir dos dados carregados no repositório em formato relacional. Foi desenvolvida em jsp e java.

Ficheiros Fonte

A ferramenta gera documentação com origem em várias fontes:

Forma geral de um comentário de documentação

Um comentário de documentação é feito em duas partes: uma descrição seguido de zero ou mais tags, com uma linha em branco entre estas secções:

{**
  Isto é a parte da descrição do comentário de documentação

  @process ASSINANTES
}

Linhas com mais de 80 caracteres de comprimento devem, se possivel ser devidamente partidas. Se tiver mais de um parágrafo no comentário de documentação, separe o parágrafo com a tag <P>.

Descrições

Primeira frase

A primeira frase de cada comentário de documentação deve ser um sumário, contendo uma descrição concisa mas completa do item que está a ser documentado. A ferramenta javadoc copia esta primeira frase para o sumário relativo do item. Isto torna importante a escrita de frases iniciais informaticas que se consiga descrever imediatamente.

Esta frase termina no primeiro ponto (.) seguido de um espaço, tab ou fim de linha ou na primeira tag encontrada. No exemplo que se segue a primeira frase termina em Prof.:

/**
 * Isto é uma simulação de experiência do Prof. Pardal.
 */



Se o preender, no entanto pode inserir um ponto usando os metacaracteres do HTML para conseguir este objectivo, como de seguida se define:

/**
 * Isto é uma simulação de experiência do Prof.&nbsp; Pardal.
 */



Guia de estilo

De seguida apresentam-se algumas sugestões e convenções para escritade das descrições nos comentários de documentação.

As palavras reservadas devem estar entre as tags <CODE>...</CODE> quando mensionadas numa descrição. Incluir:

Quando se referir no meio de um comentário a uma função deve sempre omitir os parenteses e os respectivos parâmetros. É preferivel incluir a palavra método quando se pretender usar.

Ex:

A função add permite inserir items. - Preferivel

add(item) permite inserir items  Evitar

Esta regra deve ser sobretudo aplicado quando se definem tags como por exemplo @param

A descrição deve estar na 3ª pessoa declarativa em vez da 2ª pessoa impreativa.

Ex:

Devolve o número : Preferivel

Devolves o número: Evitar

Um método implementa uma operação, assim normalmente começa com uma frase.

Obtem o nome do cliente : Preferivel

Esta função obtem o nome do cliente : Evitar

Os melhores nomes de funções auto documentam-se. No entanto, se o comentário apenas repetir o nome da função numa frase, não está a acrescentar qualquer informação. O comentário ideal vai para além das destas palavras e deve sempre recompensá-lo com mais um pedaço e informação que não é imediatamente (ou pelo menos para todas as pessoas) óbvia a partir do nome da função.

Ex:

Evitar -

{**
 * Afecta o nome do cliente
 *}
function setClientName(name)

Preverivel -

{**
 * Regista o nome do cliente na variável modular para posteriormente o salvar na tabela clientes
 *}
function setCliemntName(name)

Use "tambem conhecido como" em vez de "aka", "ou seja" ou " sendo mais especifico" em vez de i.e.

Convenções para tag(s)

Ordem das tags

As tags devem preferêncialmente ser incluidas na ordem que se segue:

* @author 
* @version
*
* @param
* @return
* @see
* @since
* @deprecated
* @todo

De preferência dividir as tags por blocos relacionados.

Quando se inserir a mesma tag multiplas vezes deve-se separar das outras para aumentar a legibilidade.

Tags @param devem ter a mesma ordem que a ordenação correspondente do(s) parametro(s).

Comentários adicionais

@author

Omitir se author desconhecido. Pode-se usar expansões efectuadas pelo controlo de versoes. Se existirem várias devem estar ordenadas por ordem cronológica.

@version

Pode-se, se possivel usar a expansão do controlo de versões. Corresponde à revisão do source e não à versão do executável resultado ca compillação de vários sources.

@param

Esta tag deve ser seguida pelo nome do parâmetro (não o seu tipo). Embora seja redundante com a declaração do(s) parãmetros, é a única forma de efectuar a associação de um comentário especifico com o parâmetro. Por convenção o primeiro substantivo da descrição deve reflectir o tipo de informação que este armazena (pode ser precedido por artigos como "O").

Ex:

* @param num         o número a formatar
* @param strUsing    string de formatação do número

Não inserir entre tags <CODE> </CODE> pois a ferramenta de exploração já o faz.

Usar preferêncialmente uma expressão a uma oração.

@return

Em métodos que não retornem qualquer valor deve ser omitido.

Quando o método retornar diferentes valores devem exitir várias tags para cada tipo de retorno.

@deprecated

Permite marcar um método como de utilizaçao a evitar pois ira provavelmente desaparecer na proxima versao.

@since

Marca a versão (quando esta fôr conhecida) a partir da qual o método foi inserido.

Inserir apenas se conhecido e relevante

@todo

Define uma funcionalidade a implementar neste método. Permite ao programador marcar determinada tarefa que deve ser implementada na função, mas que não é oportuno implementar (ou porque está apenas a resolver um problema ou porque não pretende quebrar determinada linha de raciocinio).

Desta forma pode-se, em qualquer altura relembrar o que faltou implementar.

Exemplos