A Importância de Documentar Seu Código
- Luiz Henrique de Oliveira Bueno
- 26 de dez. de 2024
- 13 min de leitura

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ê

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

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:


Quando cada tabela está claramente documentada com comentários que explicam o propósito de cada campo, isso traz diversos benefícios:
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.
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.
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

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.





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:

4. Ferramentas para Documentação

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:

Gere a documentação com um comando simples:

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:

Gere a documentação com:

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:

Para gerar a documentação, use:

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)

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):

Inicie o servidor local:

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

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:

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
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.
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.
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.
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.
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
Doxygen Documentation
Site oficial: https://www.doxygen.nl/
Guia completo para usar o Doxygen, ferramenta amplamente utilizada para documentar C, C++ e outras linguagens.
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.
JSDoc Documentation
Site oficial: https://jsdoc.app/
Documentação detalhada para criar documentação de projetos JavaScript e TypeScript.
Swagger/OpenAPI Documentation
Site oficial: https://swagger.io/
Guia para criar e gerenciar documentação interativa para APIs usando Swagger e OpenAPI.
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
Site oficial: https://dbdocs.io/
Ferramenta para documentar esquemas de bancos de dados de forma automática e colaborativa.
MySQL Workbench
Site oficial: https://dev.mysql.com/doc/workbench/en/
Ferramenta oficial do MySQL para modelagem de dados e documentação.
pgModeler
Site oficial: https://pgmodeler.io/
Ferramenta open-source para criar diagramas de banco de dados PostgreSQL.
GitHub Pages
Documentação: https://pages.github.com/
Recurso para hospedar sites estáticos e documentação diretamente de repositórios GitHub.
Read the Docs
Site oficial: https://readthedocs.org/
Plataforma para hospedar e visualizar documentação gerada pelo Sphinx.
Artigos e Publicações Online
"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.
"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.
"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.
"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
FreeCodeCamp - Complete Guide to Documenting Code
Tutoriais gratuitos sobre boas práticas de documentação em várias linguagens.
Kaggle Notebooks
Link: https://www.kaggle.com/
Exemplos de notebooks bem documentados para projetos de ciência de dados e aprendizado de máquina.
Coursera - Software Engineering Courses
Cursos que abordam a importância da documentação no ciclo de vida do software.
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
Python Docstring Conventions
PEP 257: https://peps.python.org/pep-0257/
Guia oficial para escrever docstrings no Python.
PostgreSQL Documentation
Site oficial: https://www.postgresql.org/docs/
Referência para criar e documentar bancos de dados PostgreSQL.
SQL Server Documentation
Microsoft Docs: https://learn.microsoft.com/en-us/sql/
Documentação oficial para criar e gerenciar bancos de dados no SQL Server.
JavaDoc Tool
Documentação oficial: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html
Ferramenta oficial para gerar documentação de projetos Java.
Padrões de Documentação
Markdown Syntax Guide
Referência: https://www.markdownguide.org/
Um guia abrangente para escrever documentação usando Markdown.
API Documentation Best Practices
Artigo: https://swagger.io/resources/articles/documenting-apis/
Boas práticas para escrever e manter documentações de APIs.
Google Style Guide for Python
Guia de estilo para Python, incluindo convenções de documentação.




Comentários