top of page

A Importância de Documentar Seu Código

  • Luiz Henrique de Oliveira Bueno
  • 26 de dez. de 2024
  • 13 min de leitura
ree

1. Introdução


No universo do desenvolvimento de software, a escrita de código é apenas uma parte do processo. Um dos maiores desafios enfrentados por desenvolvedores e equipes ao longo do ciclo de vida de um projeto é a compreensão e manutenção do código existente.


Como desenvolvedores, frequentemente nos deparamos com situações em que voltamos a um código escrito meses atrás e percebemos que é quase impossível entender a lógica implementada, mesmo sendo os próprios autores. É aqui que a documentação do código se torna essencial.


Documentar o código não é apenas uma prática recomendada: é uma necessidade. Sem documentação, o código se torna um enigma, difícil de entender, modificar ou corrigir. Isso impacta diretamente a produtividade das equipes, aumenta o custo de manutenção e torna a colaboração entre os membros muito mais difícil. Além disso, a documentação é crucial para facilitar a entrada de novos integrantes no projeto e reduzir o tempo necessário para que eles se tornem produtivos.


Este artigo tem como objetivo explorar a importância da documentação, explicar o que documentar, apresentar boas práticas e ferramentas para facilitar esse processo, além de exemplos práticos, incluindo a linguagem SQL.


2. O Que Documentar e Por Quê

ree

Documentar o código Python por exemplo, não é apenas adicionar comentários esporádicos. Trata-se de criar informações que ajudem outros (e você mesmo no futuro) a entender como o código funciona, por que certas decisões foram tomadas e como utilizar ou modificar a aplicação. Aqui estão os principais elementos que devem ser documentados:


2.1. Comentários no CódigoComentários em Python explicam partes específicas do código que podem ser complexas ou não intuitivas. Por exemplo:


  • Explicação de operações complexas, como manipulação de listas, dicionários ou objetos.

  • Motivações de escolhas técnicas, como o uso de uma determinada estrutura de dados ou abordagem de programação.

  • Informações sobre parâmetros e retornos de funções, para que outros possam entender como utilizá-las.


2.2. Arquivos de ConfiguraçãoAssim como em outros projetos, é importante documentar configurações de banco de dados, conexões e scripts de inicialização em projetos Python. Isso facilita a configuração do ambiente de desenvolvimento e produção.


2.3. Documentação TécnicaREADME.md: Um arquivo simples que explica o propósito do projeto, como configurá-lo e usá-lo. Isso é essencial para que outros possam entender e contribuir com o projeto.Changelogs: Registros das mudanças feitas ao longo do tempo, como adição de novas funcionalidades, correção de bugs e melhorias de desempenho.


2.4. DocstringsEm Python, as docstrings são blocos de texto que fornecem documentação para módulos, funções, classes e métodos. Elas ficam logo após a declaração do elemento e são acessíveis através da função help() ou a propriedade doc. As docstrings devem explicar o propósito, os parâmetros, os retornos e quaisquer exceções que a função possa lançar.


2.5. Estruturas de Banco de DadosAssim como em outros projetos, em aplicações Python que utilizam banco de dados SQL, documentar tabelas, colunas, índices e relacionamentos é fundamental. Isso inclui:


  • Nome e propósito de cada tabela.

  • Tipos de dados utilizados e restrições (ex.: NOT NULL, UNIQUE, etc.).

  • Relacionamentos entre tabelas (FOREIGN KEYS).


A documentação de código não se destina apenas a outros desenvolvedores. Na verdade, ela pode servir como uma referência valiosa para diversos profissionais envolvidos no projeto, dependendo do contexto.


Analistas de negócios, por exemplo, podem consultar a documentação para entender melhor o funcionamento do sistema e como ele se alinha com os requisitos do negócio. Eles podem verificar informações sobre a estrutura do banco de dados, as regras de negócio implementadas e a lógica por trás das principais funcionalidades.


Gerentes de projetos, por sua vez, podem utilizar a documentação para acompanhar o progresso do desenvolvimento, avaliar a complexidade das tarefas e estimar melhor os prazos. Eles podem se basear nas informações sobre a arquitetura do sistema, as dependências entre módulos e as interfaces de integração.


Até mesmo os usuários finais podem se beneficiar da documentação, especialmente de guias de uso e manuais. Esses materiais podem explicar de maneira clara e detalhada como interagir com o sistema, facilitando a adoção e o suporte aos usuários.


Portanto, a documentação deve ser pensada de forma abrangente, atendendo às necessidades de todos os stakeholders envolvidos no projeto, desde a equipe técnica até os usuários finais. Isso garante que o sistema seja bem compreendido, utilizado e mantido ao longo do tempo.


3. Exemplos de Código e Comentários Bem Documentados

ree

3.1. Exemplo de Código SQL com Comentários

Abaixo está um exemplo de um script SQL comentado que cria um sistema básico de gerenciamento de pedidos:


ree
ree

Quando cada tabela está claramente documentada com comentários que explicam o propósito de cada campo, isso traz diversos benefícios:


  1. Entendimento rápido e intuitivo: Qualquer desenvolvedor, mesmo aquele que não participou do projeto desde o início, consegue rapidamente compreender a finalidade de cada tabela e coluna. Isso facilita muito a integração de novos membros na equipe.


  2. Manutenção facilitada: No futuro, quando for necessário fazer alterações ou adições na estrutura do banco de dados, a documentação ajuda a entender as implicações e evitar problemas. Fica claro quais tabelas e campos estão relacionados.


  3. Comunicação eficiente: Ao documentar detalhadamente a estrutura, a comunicação entre a equipe de desenvolvimento e outras áreas, como analistas de negócio e gerentes de projeto, fica muito mais clara e precisa. Todos conseguem visualizar e entender o modelo de dados.


Os relacionamentos FOREIGN KEY (CHAVE ESTRANGEIRA) entre as tabelas também são descritos na documentação. Isso é extremamente importante, pois:


  • Evidencia as dependências entre as entidades do sistema

  • Facilita a compreensão de fluxos de dados e regras de negócio

  • Auxilia na implementação correta de consultas e operações que envolvem múltiplas tabelas


A documentação detalhada da estrutura do banco de dados, com explicações sobre o propósito de cada elemento, é fundamental para garantir que o sistema seja bem entendido, mantido e evoluído ao longo do tempo, tanto pela equipe técnica quanto por outras partes interessadas.


3.2. Exemplo de Código Python com Comentários

ree

Aqui está um exemplo prático de código Python com comentários bem estruturados, explicando cada parte do código. O exemplo implementa um sistema básico de gerenciamento de tarefas com uso de classes.


ree
ree
ree
ree
ree

Começando pela classe Tarefa:


  • Ela representa uma tarefa com atributos como descrição, status (concluída) e data de criação.

  • Isso significa que cada objeto Tarefa carrega informações essenciais sobre uma determinada atividade a ser realizada.

  • A classe inclui métodos para marcar a tarefa como concluída e para retornar uma representação legível da tarefa (usando o método str).

  • Esses métodos facilitam a manipulação e a exibição das informações da tarefa.


Passando para a classe ListaDeTarefas:


  • Essa classe gerencia uma lista de tarefas, ou seja, uma coleção de objetos Tarefa.

  • Ela permite adicionar novas tarefas, listar todas as tarefas existentes e concluir tarefas específicas.

  • Essas funcionalidades tornam a gestão do conjunto de tarefas muito mais organizada e prática.


Agora, vamos falar sobre a documentação desse código:


  • Foram usados docstrings para documentar as classes e métodos, explicando o propósito de cada um.

  • Isso significa que, ao consultar o código, qualquer desenvolvedor pode rapidamente entender o que cada elemento do programa faz, sem precisar ler todo o código-fonte.

  • Além disso, comentários inline foram utilizados para explicar partes específicas do código, como lógica complexa ou decisões de design.

  • Esses comentários complementam a documentação das classes e métodos, fornecendo contexto adicional.


Por fim, no bloco if name == "__main__":, é demonstrado um exemplo prático de como usar as classes Tarefa e ListaDeTarefas.


  • Esse trecho de código serve como um "tutorial" incorporado, mostrando aos usuários como criar, listar e gerenciar tarefas.

  • Essa abordagem torna o código muito mais autoexplicativo e fácil de entender, tanto para desenvolvedores quanto para usuários finais que possam estar interessados em utilizar o sistema.


Em resumo, a documentação detalhada das classes, métodos e funcionalidades, juntamente com um exemplo prático de uso, torna esse código Python muito mais compreensível e fácil de manter e evoluir no futuro.


Saída Esperada

Ao executar o código, a saída será semelhante a:


ree

4. Ferramentas para Documentação

ree

A documentação de código pode ser uma tarefa árdua sem o auxílio de ferramentas adequadas. Felizmente, existem muitos recursos que ajudam a gerar, organizar e manter a documentação de maneira eficiente.

Essas ferramentas podem ser usadas para documentar desde pequenos scripts até sistemas complexos, incluindo APIs, bancos de dados e bibliotecas. Vamos explorar algumas das principais ferramentas disponíveis, organizadas por categorias e casos de uso.


4.1. Ferramentas para Documentação de Código

Essas ferramentas ajudam a criar documentação diretamente a partir do código, extraindo informações de comentários e outras estruturas.


4.1.1. Doxygen

  • Ferramenta poderosa para gerar documentação de código automaticamente.

  • Suporta várias linguagens, como C, C++, Java, Python e mais.

  • Extrai informações de comentários estruturados no código e gera documentação em vários formatos, como HTML, LaTeX e PDF.

  • Exemplo de uso:

    Adicione comentários ao estilo do Doxygen no código:

ree

Gere a documentação com um comando simples:

ree

4.1.2. JSDoc
  • Ideal para projetos JavaScript.

  • Permite documentar funções, classes e módulos de forma clara e estruturada.

  • Integração com ferramentas como TypeScript e Node.js.

  • Exemplo de comentário com JSDoc:

ree

Gere a documentação com:

ree

4.1.3. Sphinx

  • Uma ferramenta popular para criar documentação em Python.

  • Usa arquivos de texto no formato reStructuredText ou Markdown para gerar documentação em HTML, PDF, ePub e outros formatos.

  • Integra-se facilmente com docstrings no Python.

  • Exemplo de docstring no estilo Sphinx:

ree

Para gerar a documentação, use:

ree

4.1.4. Swagger/OpenAPI
  • Ferramenta essencial para documentar APIs RESTful.

  • Permite gerar uma interface interativa (como um playground) para testar as APIs e visualizar seus endpoints.

  • Exemplo de definição de API com OpenAPI (formato YAML)

ree

Ferramentas como Swagger UI podem renderizar essa documentação em uma interface visual interativa.


4.2. Ferramentas para Bancos de Dados

Documentar estruturas de banco de dados, como tabelas, colunas e relacionamentos, é fundamental para projetos que dependem fortemente de dados. Essas ferramentas ajudam a organizar e visualizar esquemas de bancos de dados.


4.2.1. dbdocs.io
  • Ferramenta online para criar e compartilhar documentação de bancos de dados.

  • Conecta-se diretamente a bancos de dados (como MySQL, PostgreSQL e SQL Server) e gera documentação baseada no esquema.

  • Permite adicionar descrições e anotações para tabelas e colunas.


4.2.2. MySQL Workbench
  • Ferramenta oficial do MySQL para modelagem de dados.

  • Permite criar diagramas ER (Entidade-Relacionamento) e documentar tabelas, colunas e relacionamentos.

  • Exemplo de uso:

    • Gere um diagrama ER do banco de dados e exporte-o como um relatório HTML ou PDF.


4.2.3. pgModeler
  • Ferramenta open-source para modelagem de dados em PostgreSQL.

  • Permite criar esquemas detalhados e exportar a documentação.


4.3. Ferramentas para Hospedar Documentação

Depois de criar a documentação, é importante disponibilizá-la de maneira acessível para a equipe ou usuários finais. Estas ferramentas são ideais para hospedar documentação online.


4.3.1. GitHub Pages
  • Serviço gratuito do GitHub para hospedar sites estáticos.

  • Ideal para documentação escrita em Markdown, como arquivos README.md.

  • Fácil de configurar diretamente a partir de um repositório no GitHub.


4.3.2. Read the Docs
  • Plataforma popular para hospedar documentação técnica.

  • Integra-se ao Sphinx e suporta projetos Python.

  • Gera e hospeda a documentação automaticamente a partir do repositório.


4.3.3. Confluence
  • Ferramenta corporativa da Atlassian para criar e gerenciar documentação.

  • Ideal para equipes que trabalham com metodologias ágeis.


4.4. Ferramentas para Notas e Organização

Ferramentas de anotações podem ser úteis para documentar ideias, decisões e processos relacionados ao código.


4.4.1. Notion
  • Plataforma versátil para organizar documentação técnica e notas.

  • Permite criar páginas com formatação rica, links e tabelas.


4.4.2. Obsidian
  • Ideal para desenvolvedores que preferem um fluxo de trabalho offline.

  • Suporta Markdown e permite organizar documentos em um formato de grafo.


4.5. Ferramentas de Automação e Integração

Automatizar a geração de documentação economiza muito tempo e garante que as informações estejam sempre atualizadas.


4.5.1. MkDocs
  • Ferramenta simples para criar sites de documentação estáticos.

  • Suporte nativo para Markdown.

  • Exemplo de configuração (mkdocs.yml):

ree

Inicie o servidor local:

ree

4.5.2. Redoc
  • Ferramenta que transforma definições OpenAPI em uma interface interativa e elegante.

  • Ideal para documentar APIs públicas ou privadas.


4.5.3 Ferramentas de Documentação de APIs:


  • Swagger/OpenAPI: Permite a documentação de APIs RESTful de forma interativa e autoexplicativa, incluindo testes e interação com a API diretamente no navegador.

  • Postman: Além de ser uma ferramenta para testar APIs, o Postman também possui recursos para gerar documentação de APIs de forma colaborativa.


4.5.4 Documentação de Bibliotecas e Frameworks:

  • ReadTheDocs: Plataforma que hospeda e gera documentação de projetos, com suporte a várias linguagens, incluindo Python, Java, JavaScript e C++.

  • Jupyter Notebooks: Permitem a criação de documentação interativa, combinando código, visualizações e textos explicativos.


    """"Para documentar SQL especificamente, ferramentas como MySQL Workbench e SQL Server Management Studio permitem gerar diagramas ER (Entidade-Relacionamento) que ajudam na visualização do banco de dados."""


A escolha da ferramenta mais adequada dependerá do tamanho e complexidade do projeto, bem como das necessidades específicas da equipe.

O importante é entender que a documentação não deve ser vista como uma tarefa separada, mas sim como parte integrante do processo de desenvolvimento. Ao utilizar as ferramentas certas, a documentação pode se tornar um processo mais ágil, eficiente e alinhado com as necessidades do projeto e da equipe.


 5. Boas Práticas de Documentação

ree
5.1. Seja claro e objetivo:

A documentação deve utilizar uma linguagem simples e direta, evitando exagerar em detalhes desnecessários. O objetivo é facilitar o entendimento, não impressionar com vocabulário rebuscado. Explique os conceitos de forma clara e concisa.


5.2. Comente apenas o necessário:

Não é preciso comentar cada linha de código, especialmente quando se trata de operações triviais. Os comentários devem focar em partes do código que possam ser complexas, ambíguas ou não intuitivas. A documentação deve complementar, não duplicar, o que o código já expressa por si só.


5.3. Mantenha a documentação atualizada:

É essencial garantir que quaisquer mudanças realizadas no código sejam devidamente refletidas na documentação. Nada é mais frustrante do que ler uma documentação desatualizada que não condiz com a implementação real. Estabeleça um fluxo de trabalho para atualizar a documentação sempre que o código for modificado.


5.4. Use padrões consistentes:

Adote um estilo uniforme em todos os comentários, docstrings e arquivos de documentação. Isso inclui coisas como formatação, nomenclatura, estrutura e nível de detalhamento. A consistência torna a documentação muito mais legível e fácil de entender.


5.5. Inclua exemplos práticos:

Sempre que possível, demonstre como usar funções, tabelas, APIs ou outros elementos do sistema. Exemplos concretos ajudam os leitores a compreender melhor o propósito e a aplicação prática daquilo que está sendo documentado.


Seguindo essas boas práticas, a documentação se torna uma ferramenta muito mais eficaz, capaz de guiar desenvolvedores, analistas e usuários finais de maneira clara e eficiente. Isso facilita a adoção, manutenção e evolução do sistema ao longo do tempo.


Conclusão:

ree

Documentar o código é essencial para a melhoria contínua da qualidade do desenvolvimento de software. Quando o código é bem documentado, ele se torna muito mais legível, compreensível e fácil de manter. Isso permite que os desenvolvedores identifiquem e corrijam problemas com muito mais eficiência, evitando a propagação de bugs e defeitos.

Além disso, a documentação facilita enormemente a colaboração entre membros da equipe. Quando o código é bem explicado e as estruturas estão claramente descritas, novos desenvolvedores podem se integrar ao projeto com muito mais rapidez. Eles conseguem entender o sistema, suas regras de negócio e suas interdependências de maneira muito mais ágil.

Essa melhoria na colaboração se traduz diretamente em uma redução significativa do esforço necessário para entender, corrigir e expandir o projeto ao longo do tempo. Com a documentação como guia, os desenvolvedores não precisam "reinventar a roda" a cada nova tarefa ou demanda. Eles podem se concentrar em agregar valor, em vez de perder tempo tentando decifrar o código existente.

Embora possa parecer um investimento adicional no início, os benefícios da documentação superam em muito o tempo gasto. Afinal, uma documentação bem estruturada e mantida atualizada é um ativo valioso que valoriza todo o projeto e facilita sua evolução a longo prazo.

Desenvolvedores que adotam essa prática demonstram profissionalismo, responsabilidade e comprometimento com a qualidade do software. Eles entendem que a documentação não é uma tarefa separada, mas sim uma parte integrante do processo de desenvolvimento de alta qualidade.

Em resumo, documentar o código é uma estratégia essencial para equipes que buscam entregar software confiável, escalável e de fácil manutenção. Os benefícios dessa abordagem se refletem em maior produtividade, menos retrabalho e uma entrega de valor muito mais eficiente para os clientes e usuários finais.


Referências:


Livros e Publicações

  1. Sommerville, I. (2015). Software Engineering. Pearson.

    • Um dos livros mais reconhecidos sobre engenharia de software, cobrindo desde o ciclo de vida do desenvolvimento até a importância da documentação e manutenção.

  2. Martin, R. C. (2008). Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall.

    • Este livro é essencial para compreender a importância do código limpo e bem documentado, além de práticas para escrever comentários úteis e evitar redundâncias.

  3. Fowler, M. (2018). Refactoring: Improving the Design of Existing Code. Addison-Wesley.

    • Uma referência para práticas de refatoração, com uma seção dedicada sobre como escrever código mais legível e documentado.

  4. Beck, K. (2004). Extreme Programming Explained: Embrace Change. Addison-Wesley.

    • Este livro aborda a importância da documentação no contexto de metodologias ágeis, destacando como equilibrar documentação com entregas rápidas.

  5. McConnell, S. (2004). Code Complete: A Practical Handbook of Software Construction. Microsoft Press.

    • Um guia prático sobre como escrever código de alta qualidade, com capítulos dedicados à documentação e comentários no código.


Documentações Oficiais


  1. Doxygen Documentation

    • Site oficial: https://www.doxygen.nl/

    • Guia completo para usar o Doxygen, ferramenta amplamente utilizada para documentar C, C++ e outras linguagens.

  2. Sphinx Documentation

    • Site oficial: https://www.sphinx-doc.org/

    • Documentação oficial que ensina como gerar documentação para projetos Python e integrá-la com Read the Docs.

  3. JSDoc Documentation

    • Site oficial: https://jsdoc.app/

    • Documentação detalhada para criar documentação de projetos JavaScript e TypeScript.

  4. Swagger/OpenAPI Documentation

    • Site oficial: https://swagger.io/

    • Guia para criar e gerenciar documentação interativa para APIs usando Swagger e OpenAPI.

  5. MkDocs Documentation

    • Site oficial: https://www.mkdocs.org/

    • Um recurso simples e poderoso para criar sites estáticos de documentação com Markdown.


Ferramentas de Documentação


  1. dbdocs.io

    • Site oficial: https://dbdocs.io/

    • Ferramenta para documentar esquemas de bancos de dados de forma automática e colaborativa.

  2. MySQL Workbench

  3. pgModeler

    • Site oficial: https://pgmodeler.io/

    • Ferramenta open-source para criar diagramas de banco de dados PostgreSQL.

  4. GitHub Pages

    • Documentação: https://pages.github.com/

    • Recurso para hospedar sites estáticos e documentação diretamente de repositórios GitHub.

  5. Read the Docs

Artigos e Publicações Online


  1. "Why Good Documentation is Key to Software Development Success"

    • Artigo no Medium. Link: https://medium.com/

    • Discussão sobre como a documentação bem feita pode melhorar a colaboração e reduzir custos no desenvolvimento.

  2. "Clean Code Principles in Practice"

    • Publicado por Martin Fowler. Link: https://martinfowler.com/

    • Explora princípios de código limpo e como comentários e documentação se encaixam nesse contexto.

  3. "How to Effectively Document Your Code"

    • Publicado no Dev.to. Link: https://dev.to/

    • Um guia prático para iniciantes sobre como começar a documentar projetos.

  4. "The Importance of Documenting SQL Databases"

    • Artigo publicado no Towards Data Science. Link: https://towardsdatascience.com/

    • Enfatiza a importância de documentar bancos de dados e os benefícios para equipes de desenvolvimento e análise de dados.


Recursos Educacionais e Tutoriais


  1. FreeCodeCamp - Complete Guide to Documenting Code

  2. Kaggle Notebooks

    • Link: https://www.kaggle.com/

    • Exemplos de notebooks bem documentados para projetos de ciência de dados e aprendizado de máquina.

  3. Coursera - Software Engineering Courses

  4. YouTube - "How to Document Your Code Properly"

    • Canal: TechLead

    • Vídeo explicando boas práticas para documentar código de forma eficiente.


Linguagens e Frameworks


  1. Python Docstring Conventions

  2. PostgreSQL Documentation

  3. SQL Server Documentation

  4. JavaDoc Tool

Padrões de Documentação


  1. Markdown Syntax Guide

  2. API Documentation Best Practices

  3. Google Style Guide for Python

Comentários


bottom of page