A falácia da documentação de código

19/10/2013

Esta é a tradução de The code documentation fallacy de Jussi Pakkanen.
Digamos que você comece a trabalhar em uma nova base de código. Será que você, como um usuário, prefire ter 90% ou 10% das suas funções de API comentadas no Doxygen ou algo semelhante?

Usando meus poderes psíquicos eu suspeito que você escolheu 90%.

Parece ser a coisa óbvia. Muitas empresas ainda têm um mandamento que todas as funções da API (ou >90% delas) devem ser documentadas. Não ter comentários é apenas ruim. Isto parece como uma questão acéfala perfeitamente óbvia.

Mas é realmente?

Infelizmente, existem alguns problemas com essa hipótese. A principal delas é que os comentários serão escritos por seres humanos. O que eles provavelmente acabam fazendo é algo como isto.

/*
 * Takes a foobar and frobnicates it.
 *
 * @param f the foobar to be frobnicated.
 * @param strength how strongly to frobnicate.
 * @return the frobnicated result.
 */
int frobnicate_foobar(Foobar f, int strength);

Isto é algo que eu gosto de chamar de documentação por palavra de ordem aleatória. Agora podemos fazer a pergunta realmente relevante: quais informações adicionais esse tipo de comentário fornece?

A resposta é, obviamente, absolutamente nada. É só barulho. Não, na verdade é ainda pior: é o ruído que tem uma grande probabilidade de estar errado. Quando algum programador muda a função, é muito fácil esquecer de atualizar os comentários.

Por outro lado, se apenas 10% das funções são documentadas, a maioria das funções não tem quaisquer comentários, mas as que têm algo, provavelmente, será como isto:

/**
 * The Foobar argument must not have been initialized in a different
 * thread because that can lead to race conditions.
 */
int frobnicate_foobar(Foobar f, int strength)

Este é o tipo de comentário que é realmente útil. Naturalmente, seria melhor para verificar a condição especificada dentro da função, mas às vezes você não pode. Tê-la em um comentário é a coisa certa a se fazer nesses casos. Não tendo toneladas de documentação lixo faz esses tipos de comentários se destacarem. Isso significa que, paradoxalmente, que ter menos comentários leva a melhor documentação e experiência do usuário.

Como uma estimativa grosseira, 95% das funções em qualquer base de código devem ser tão simples e específicas que a sua assinatura é tudo que você precisa para usá-las. Se elas não estiverem, o design da API falhou: de volta à prancheta de desenho.

Leia também Readme Driven Development

Marcadores:

postado por dgv @ 18:30