quarta-feira, 5 de dezembro de 2012

Porque documentar o código?


Até um tempo atrás eu acreditava que, por meu código estar fácil de ser interpretado, eu não precisava comenta-lo, pois perderia um tempo para tal. Depois de um tempo fui percebendo ao utilizar alguns métodos antigos, que era um pouco difícil a manutenção deles, além de ser um grande problema o entendimento por outros programadores. Como eu evitaria esse problema? A resposta é muita simples, só comentar.
Mas porque devo fazer uma boa documentação? O que isso influenciara no meu projeto? E como eu sei se meu comentário esta bom, ruim, insuficiente?
Bom veremos isto abaixo

Primeiro, O que seria documentação?
Documentação descreve cada parte do código-fonte, uma função, uma classe, um trecho ou módulo. Podemos dizer que a documentação consiste em um conjunto de manuais gerais e técnicos, podendo ser organizado em forma de textos e comentários, utilizando ferramentas do tipo dicionários, diagramas e fluxo gramas, gráficos, desenhos, dentre outros.


Mas, por que documentar? O que isso irá me trazer de bom
As razões básicas para documentar um código é auxiliar a comunicação durante o desenvolvimento do software e auxiliar o entendimento nas atividades de manutenção e atualização quando se fizerem necessárias.
Para você ter uma idéia mais de 50% do trabalho de evolução de um software é dedicado ao entendimento do programa e a tarefa mais difícil da manutenção é o entendimento da estrutura do sistema. Por isso, o desenvolvedor deve encontrar um ponto de equilíbrio na quantidade de documentação gerada e encontrar as ferramentas que facilitarão o entendimento da documentação, tanto para o administrador quanto para o futuro usuário do software.
Alguns problemas são apontados pela falta de documentação adequada. Dentre eles podemos citar as dificuldades para a atualização e manutenção, dificuldades de acesso do usuário e alto custo para o software. 

Exemplos:

Código mal estruturado
Com este código você não entende o que é a classe, o que ela faz, quais são os métodos, quais são os argumentos dos métodos, E com certeza você perderá tanto tempo tentando entende-la, que compensava mais se recriar ela.
public class classe2 {
    public void pessoa (String var1, int var2){
        Pessoa a = new Pessoa;
        a.setName(var1);
        int t = calcula(var2, 2012);
        a.setIdade(t);
    }
    private int calcula(int var1, int var2){
        int var3 = var1 – var2;
        return var3;
    }
}


Código bem estruturado
Só pelos nomes de classe, métodos e argumentos, você consegue identifica o que a classe faz sem muita dificuldade
public class GerenciaPessoa {
    public void novaPessoa(String nome, int anoNascimento){
        Pessoa pessoa = new Pessoa;
        pessoa.setName(nome);
        int idade = calculaIdade(anoNascimento, 2012);
        pessoa.setIdade(idade);
    }
    private int calculaIdade(int anoNascimento, int anoAtual){
        int idade = anoAtual – anoNascimento;
        return idade;
    }
}

Código com comentários indecifráveis
Contém comentário, mas e ae, o que ele faz? Seria isso uma data de criação? É fica um pouco difícil.
// 05 – 12 - 2012
private boolean validaAltura(var 1, var 2){
    int var3;
    if(var1 > var2){
        var3 = (var2-var1)/2
    }else{
        var3 = (var2-var1)*5
    }
    if(var3 > 1){
        return true;
    }else{
        return false;
    }
}

Código mal comentado
Ok, você comentou o código, mas de um forma que esta na cara que aquilo (classe, métodos, função) já fazia. Por exemplo var2 – var1, eu sei que subtrai, eu estou lendo, você não precisa comentar isto, outra é a classe, você se reescreveu o nome dela, ainda não explica o que ela faz.
// valida altura
private boolean validaAltura(var 1, var 2){
    int var3;
    if(var1 > var2){
        var3 = (var2-var1)/2 // subtrai var2 por var1 e divide por 2
    }else{
        var3 = (var2-var1)*5 // subtrai var2 por var1 e multiplica 5
    }
    if(var3 > 10){ // se var3 e maior que 10
        return true;
    }else{
        return false;
    }
}

Código comentado
Neste caso a descrição do método faz você conseguir entender o que o ele e as funções fazem
/*
* Valida a altura que ira ser preciso para a definição do Predio, segundo o requisito 2
* param1 var1 – diâmetro do predio
* param2 var2 – comprimento da rua em relação ao predio
* return true, se a distancia está ok
*/
private boolean validaAltura(var 1, var 2){
    int var3;
    // verfica se o var2 e maior que o var1, para calcular a densidade a ser usada)
    if(var1 > var2){
        var3 = (var2-var1)/2
    }else{
        var3 = (var2-var1)*5
    }
    // caso a altura ultrapasse ao valor definido 10, então retornará true
    if (var3 > 10){
        return true;
    }else{
        return false;
    }
}

Conclusão

Só pra concluir então, se você for fazer um software, não deixe de fazer uma boa documentação, está é a melhor arma para evitar futuras complicações

Até a próxima ae galera,
lembrando que qualquer dúvida, reclamação ou sugestão, entrar em contato em.

Flws.


Referencia
http://www.leandrogarcia.com/blog/a-importancia-de-comentar-seu-codigo-e-comentar-direito/
http://www.periodicos.letras.ufmg.br/index.php/textolivre/article/view/24

Nenhum comentário:

Postar um comentário