Onde um programador deve explicar a lógica estendida por trás do código?


8

Eu desenvolvi algumas bibliotecas quantitativas em C # onde é importante entender não apenas as informações clássicas que acompanham os comentários XMLDoc (que contêm informações básicas com a assinatura do método), mas também as fórmulas matemáticas usadas nos métodos.

Por isso, gostaria de poder incluir documentação estendida com o código, que poderia conter, por exemplo, fórmulas de látex, gráficos e assim por diante.

Você acha que essas informações devem ser incluídas na documentação da API?

Ou deveria ser incluído em um blog de desenvolvimento para obter exemplos?

Existem ferramentas comuns que geralmente são usadas para esse tipo de finalidade?


A lógica estendida, pode ser entendida em pequenos pedaços, método por método, ou o usuário deve ler a explicação completa antes de mergulhar na API?
FrustratedWithFormsDesigner

Na verdade, ambos. Às vezes, gostaria de explicar ao usuário como ele deve usar algumas classes juntas, talvez fornecendo um diagrama de classes e alguns exemplos globais. Também deve estar em algum lugar que um programador iniciante possa olhar, por exemplo.
SRKX

Os blogs são bons para conversas e ruins para documentação. Você deseja absolutamente que a versão do código e a versão do documento sejam totalmente sincronizadas, e uma postagem no blog tem um ciclo de vida independente do código.
Ross Patterson

Respostas:


14

No que me diz respeito, quanto mais você mantém a documentação do código, maior a probabilidade de ela ser mantida atualizada e mais útil é provável.

É por isso que tento manter toda a documentação no mesmo repositório que o código, mesmo os manuais do usuário, e tento mantê-la em um formato de texto sem formatação que pode ser facilmente gerenciado por um sistema de controle de revisão.

Documentação no código

Parece que você já tem este assunto coberto, mas é importante lembrar que, na verdade, o uso dos recursos de documentação no ambiente de desenvolvimento escolhido ( pydoc para python, javadoc em java ou comentários xml em C #) é a técnica de documentação mais importante. Eles facilitam a escrita da documentação ao mesmo tempo que o código.

Se você confiar em voltar e documentar as coisas posteriormente, talvez não consiga contornar isso, mas se fizer isso ao escrever o código, o que precisa ser documentado ficará em sua mente. O C # ainda tem a opção de emitir um aviso de compilação se a documentação XML estiver incompleta ou inconsistente com o código real.

Testes como documentação

Outro aspecto importante é ter uma boa integração e testes de unidade.

Frequentemente, a documentação se concentra no que classes e métodos fazem isoladamente, ignorando como eles são usados ​​juntos para resolver seu problema. Os testes geralmente os colocam em contexto, mostrando como eles interagem entre si.

Da mesma forma, testes de unidade frequentemente apontam explicitamente dependências externas através das quais as coisas precisam ser zombadas .

Também acho que, usando o desenvolvimento orientado a testes, escrevo um software que é mais fácil de usar, porque estou usando desde o início. Com uma boa estrutura de teste, tornar o código mais fácil de testar e fácil de usar geralmente é a mesma coisa.

Documentação de nível superior

Finalmente, há o que fazer em relação ao nível do sistema, arquitetura, desenvolvedor e possivelmente também documentação do usuário final. Muitos advogariam escrever essa documentação em um wiki ou usar o Word ou outro processador de texto, mas para mim o melhor lugar para essa documentação também é o código, em um formato de texto sem formatação, que é amigável ao sistema de controle de versão.

Assim como na documentação no código, se você armazenar sua documentação de nível superior no seu repositório de códigos, é mais provável que a mantenha atualizada. Você também obtém o benefício de que, ao extrair a versão XY do código, também obtém a versão XY da documentação. Além disso, se você usa um formato compatível com VCS, significa que é fácil ramificar, diferenciar e mesclar, assim como seu código.

Eu gosto bastante do primeiro , pois é fácil produzir páginas html e documentos PDF a partir dele, e é muito mais amigável que o LaTeX , mas ainda pode incluir expressões matemáticas do LaTeX quando você precisar.

Ao escrever código altamente matemático, também acho útil ter alguns documentos wxmaxima no meu repositório de projetos. Sendo texto simples, eles também ramificam, diferenciam e mesclam-se muito bem, mas o uso de um sistema de álgebra computacional pode ajudá-lo a verificar consistentemente suas fórmulas e a documentá-las.


8

Você pode incluir essa documentação nos comentários XML e gerar manuais, páginas da Web e outros documentos do LaTeX usando o doxygen . Use os elementos <remarks>e <example>para a prosa estendida.


3

Eu usaria documentação externa se você precisar incluir diagramas de classes, gráficos, fórmulas, imagens etc. para explicar como suas bibliotecas funcionam. Inclua essa documentação externa como parte dos lançamentos da sua biblioteca, em qualquer formato que você considere apropriado (LaTeX ou não). Você pode consultar este documento a partir do seu código, se desejar (por exemplo, "consulte a documentação" Leia-me "para obter mais informações.").


2
... ou links diretos para as partes relevantes, se possível.
FrustratedWithFormsDesigner

0

A chave, acredito, é a consistência . Se você anotou de forma consistente os métodos com comentários que podem ser extraídos, por exemplo, com o Doxygen, faz sentido incluir também a descrição lógica estendida, pois é nesse ponto que os desenvolvedores provavelmente procurarão. De repente, apontar o desenvolvedor para outro documento parece desnecessário e apenas confundirá os desenvolvedores.

No entanto, se a descrição de todo o programa for fornecida em outro lugar, você deve continuar com isso e fornecer a descrição lógica estendida.


0

Se você acha que é necessário documentar as entranhas de um método em sua API, provavelmente não definiu / modularizou a interface muito bem.

Uma API bem escrita não deve exigir que o programador entenda como os internos funcionam. Além disso, ao documentar desnecessariamente o funcionamento, você está quebrando a camada de abstração e bloqueando-se em uma implementação específica, o que também não é bom.


4
Eu discordo completamente. Para uma API quantitativa, o usuário precisa saber qual é o algoritmo subjacente para saber se os métodos atendem às suas necessidades ou para entender a saída (pense em otimização, aproximações numéricas e assim por diante).
SRKX

Se isso for necessário, sugiro que você libere uma biblioteca, solução de código aberto em vez de uma API.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.