
Passo 1 de 8
Organizar a documentação para quem vai usar a aplicação
Crie a base de um README voltado a quem recebe a distribuição, separando-o dos documentos usados para desenvolver e justificar o projeto.
Trilha de aprendizado · Nível 15 · Tutorial 10
Preparar a documentação da entrega com instruções verificadas de instalação e uso, limites conhecidos e justificativas das decisões de arquitetura e desempenho.
Organizar a documentação para quem vai usar a aplicação
Crie a base de um README voltado a quem recebe a distribuição, separando-o dos documentos usados para desenvolver e justificar o projeto. 2 min
Escrever um início rápido reproduzível
Monte um início rápido que leve da obtenção do artefato à primeira operação útil, sem depender da pasta de desenvolvimento. 3 min
Transformar a configuração em uma referência consultável
Converta o contrato de configuração em uma seção de documentação que o usuário possa consultar sem deduzir precedência, caminhos ou tratamento de erros. 3 min
Documentar falhas e orientar a recuperação
Organize falhas observáveis em uma referência que informe o que ocorreu, onde apareceu o diagnóstico, qual código foi retornado e como agir em seguida. 2 min
Declarar compatibilidade e limites conhecidos
Delimite as evidências da versão entregue para informar o que foi declarado, verificado, limitado e ainda não avaliado. 2 min
Registrar o motivo das decisões de arquitetura
Documente uma escolha arquitetural relevante em um ADR curto, com alternativas e consequências claras. 3 min
Justificar desempenho sem prometer além das medições
Registre evidências de desempenho de forma rastreável e formule conclusões limitadas ao cenário realmente avaliado. 3 min
Conferir a documentação e fechar a entrega
Consolide o README e os registros de decisão, relacione cada afirmação a uma evidência da distribuição e revise divergências antes de declarar a entrega pronta. 3 min

Passo 1 de 8
Crie a base de um README voltado a quem recebe a distribuição, separando-o dos documentos usados para desenvolver e justificar o projeto.
Quem recebe sua aplicação não deve precisar explorar a pasta de desenvolvimento para descobrir o que ela faz. O README é o ponto de entrada: apresenta a finalidade, orienta o uso, indica onde encontrar limites relevantes e aponta documentos complementares.
Neste tutorial, usaremos um caso didático: uma CLI fictícia chamada csv-resumo, que lê um CSV e mostra um resumo de suas colunas numéricas. Os comandos, arquivos e saídas desse caso são simulados; eles servem para estruturar a documentação e não representam um pacote disponível para instalação.
Cada documento atende a uma pergunta e um público principal.

Use o README para orientar o uso da entrega; deixe detalhes de implementação e desenvolvimento nos documentos apropriados.
Dica
Organize as seções pela jornada de quem usa a distribuição: “O que é?”, “Como obtenho e uso?”, “Quais opções e limites importam?” e “Onde encontro mais detalhes?”. Não transforme o README em um diário do desenvolvimento.
Use # e ## para criar uma hierarquia escaneável; listas para requisitos ou observações; links relativos para documentos do próprio repositório; e blocos cercados por crases triplas para separar comandos e resultados da explicação.
O leitor deve distinguir imediatamente o que é texto explicativo, o que deve ser digitado e o que é uma saída esperada.
Exemplo didático: o conteúdo abaixo documenta a CLI fictícia csv-resumo.
# csv-resumo
Gera um resumo das colunas numéricas de um arquivo CSV.
## Para quem é
Use esta ferramenta quando precisar inspecionar rapidamente um CSV local
sem abrir uma planilha.
## Uso em resumo
```text
csv-resumo dados/vendas.csv
```
Saída simulada:
```text
linhas: 3
coluna valor: mínimo=12.50 máximo=30.00 média=20.00
```
## Documentação relacionada
- [Decisão sobre leitura em fluxo](docs/decisoes/adr-001-leitura-em-fluxo.md)
- [Instruções para desenvolvimento](CONTRIBUTING.md)
Exemplo
No arquivo Markdown, as crases e os sinais # definem a estrutura. Na visualização renderizada, o título aparece destacado, os links ficam clicáveis e os blocos preservam a aparência de terminal. Mantenha comandos e saídas em blocos separados: isso evita que uma saída simulada pareça ser algo que a pessoa deve digitar.
O README pode apontar para documentos mais específicos, mas não precisa duplicá-los. Docstrings explicam o uso de partes do código; instruções de desenvolvimento ajudam quem altera o projeto; registros de decisão preservam o porquê de escolhas relevantes. A pessoa usuária encontra no README apenas o contexto necessário para usar a entrega.
Associe cada informação ao local mais adequado.
Toque em um item e depois no par correspondente.

Passo 2 de 8
Monte um início rápido que leve da obtenção do artefato à primeira operação útil, sem depender da pasta de desenvolvimento.
Um início rápido responde às primeiras dúvidas de quem recebeu a distribuição: qual artefato e versão estão sendo documentados, onde obtê-lo, quais recursos precisa ter e quais comandos executar para confirmar que a aplicação funciona.
Não suponha que o pacote esteja publicado em um índice público. Se a entrega é uma wheel fornecida pela equipe, declare isso. Também diferencie o uso normal de comandos de desenvolvimento: pip install pacote.whl instala uma distribuição; pip install -e . depende das fontes e não serve como instrução de uso da entrega.
A sequência deve partir de um ambiente limpo e terminar em um resultado observável.

O leitor instala o artefato recebido, não a pasta de desenvolvimento.
Dica
Informe o sistema/terminal ao qual os comandos se aplicam, a versão do Python e os caminhos usados no exemplo. Só ofereça uma variante para outro sistema quando ela também tiver sido verificada para aquela entrega.
Em um README, marque claramente o que a pessoa deve digitar e o que deve aparecer depois. Um exemplo útil inclui o conteúdo do arquivo de entrada, para que ninguém precise inventar dados ou procurar arquivos no repositório.
O caso abaixo é didático e simulado. Troque o nome da wheel, o comando e os resultados pelos elementos do seu próprio artefato validado; ele não anuncia um pacote disponível para instalação.
Exemplo de Markdown para adaptar ao seu artefato.
## Início rápido
Este exemplo foi escrito para a distribuição **csv-resumo 1.2.0**,
recebida como o arquivo `csv_resumo-1.2.0-py3-none-any.whl`.
Ele foi verificado no Python 3.12, em um terminal POSIX, fora da pasta
que contém as fontes do projeto.
> Adapte o nome do arquivo, o comando e as saídas à sua própria distribuição.
> `csv-resumo` é apenas um comando simulado deste tutorial.
### 1. Criar um ambiente e instalar a wheel recebida
Digite, em um diretório de trabalho fora das fontes:
```console
$ python3.12 -m venv .venv
$ . .venv/bin/activate
$ python -m pip install /caminho/para/csv_resumo-1.2.0-py3-none-any.whl
```
### 2. Confirmar o comando instalado
```console
$ csv-resumo --help
usage: csv-resumo [-h] ARQUIVO
```
A ajuda é exibida e o comando termina com código de saída 0.
### 3. Executar um resumo
Crie `vendas.csv` no diretório de trabalho com este conteúdo:
```csv
produto,quantidade
caneta,3
caderno,2
```
Depois, digite:
```console
$ csv-resumo vendas.csv
```
Saída esperada:
```text
registros: 2
quantidade total: 5
```
O comando apenas lê `vendas.csv`; nenhum arquivo novo é criado neste exemplo.
Coloque os elementos abaixo na ordem mais reproduzível para um início rápido.
Um README diz apenas: “Instale o pacote e execute meu-comando dados.csv”. Escreva uma frase que acrescente uma pré-condição ou um resultado esperado concreto e elimine uma suposição importante.
Escreva pelo menos 20 caracteres (0/20).
Resumo

Passo 3 de 8
Converta o contrato de configuração em uma seção de documentação que o usuário possa consultar sem deduzir precedência, caminhos ou tratamento de erros.
Uma referência de configuração não deve obrigar o usuário a inferir nomes ou padrões. Para cada opção, registre: finalidade, tipo, padrão, valores aceitos e o nome usado em cada fonte.
Considere este contrato didático de uma CLI de resumo de CSV chamada csv-resumo:
| Opção | Finalidade e tipo | Padrão | CLI | Ambiente | Arquivo TOML |
| --- | --- | --- | --- | --- | --- |
| diretório de dados | Pasta que contém os CSVs; caminho | diretório atual | --dados CAMINHO | CSV_RESUMO_DADOS | dados.dir |
| separador | Delimitador do CSV; texto de 1 caractere | , | --separador CARACTERE | CSV_RESUMO_SEPARADOR | dados.separador |
| máximo de linhas | Limite de linhas lidas; inteiro positivo | 1000 | --max-linhas N | CSV_RESUMO_MAX_LINHAS | processamento.max_linhas |
Liste somente fontes que a aplicação realmente aceita. Não invente uma variável de ambiente, uma chave ou um valor alternativo para tornar a tabela “mais completa”.
A presença de uma fonte e o valor que ela fornece são informações diferentes.

A referência deve mostrar a ordem implementada e preservar valores explícitos, inclusive 0 ou false.
Dica
A tabela é uma interface pública: confira nomes, tipos e padrões no contrato e na versão empacotada validada. Ela não é o lugar para justificar por que a aplicação foi desenhada dessa forma.
Para este contrato didático, a maior prioridade vence: argumento da CLI → variável de ambiente → arquivo TOML → padrão interno. Se uma fonte não informar uma opção, ela apenas cede lugar à próxima; isso não equivale a fornecer um valor.
Declare também onde o arquivo fica e como é selecionado. Exemplo de texto para a referência:
Sem--config,csv-resumoprocura opcionalmenteconfig.tomlno diretório atual. Para usar outro arquivo, informe--config CAMINHO. Caminhos relativos nas chavesdados.dirsão resolvidos a partir da pasta que contém o próprio arquivo TOML. Já caminhos passados em--dadossão resolvidos a partir do diretório atual do terminal.
Assim, o usuário sabe tanto qual fonte vence quanto qual pasta serve de base para cada caminho.
Exemplo
Com config.toml contendo max_linhas = 500, a ausência de CSV_RESUMO_MAX_LINHAS mantém 500. Se o ambiente fornecer CSV_RESUMO_MAX_LINHAS=0, esse 0 é um valor explícito; a aplicação deve então validá-lo conforme seu contrato, em vez de tratá-lo como ausência ou voltar ao padrão.
Salve este conteúdo como config.toml fora do pacote instalado, por exemplo em uma pasta de trabalho do usuário. Se ele não estiver no diretório atual, selecione-o com --config.
[dados]
dir = "entrada"
separador = ";"
[processamento]
max_linhas = 500Neste exemplo, entrada é interpretado em relação à pasta que contém config.toml. O caminho do arquivo de dados não é uma pasta interna da instalação.
csv-resumo --config ./config.toml vendas.csvA referência deve cobrir as situações previstas pelo contrato, com linguagem objetiva:
--config inexistente: a execução não continua; informe o caminho solicitado e oriente o usuário a corrigir o caminho ou criar o arquivo.max_linhas = 0 viola o requisito de inteiro positivo; informe a opção e o valor esperado.Não inclua credenciais, tokens ou caminhos pessoais nos exemplos. Use valores fictícios e caminhos relativos. A tabela detalhada de mensagens e códigos de saída será tratada em outra seção da documentação.
Complete com a fonte de maior prioridade: arquivo TOML → variável de ambiente → ____.

Passo 4 de 8
Organize falhas observáveis em uma referência que informe o que ocorreu, onde apareceu o diagnóstico, qual código foi retornado e como agir em seguida.
Documente falhas pela situação que a pessoa consegue observar, e não pela exceção interna. Para cada situação, registre:
stdout ou stderr;Códigos não zero não têm significado universal. Por isso, descreva somente os códigos que a sua aplicação definiu.
A referência conecta o resultado técnico observável a uma recuperação segura.

A ação recomendada completa o diagnóstico: ela transforma uma falha em um próximo passo utilizável.
Dica
Oriente a pessoa a corrigir o caminho, criar ou selecionar um arquivo válido, ou revisar uma opção. Evite incluir rastreamentos internos, valores sensíveis de configuração ou dados do arquivo do usuário.
Em exemplos de terminal, identifique visualmente o comando, o resultado normal em stdout e o diagnóstico em stderr. Isso evita que o usuário copie uma mensagem de erro como se fosse parte do comando ou espere uma falha no canal errado.
Exemplo
A transcrição abaixo é simulada para uma CLI de resumo de CSV; adapte nomes, mensagens e códigos ao contrato do seu artefato.
Comando digitado
$ resumo-csv vendas.csvstdout
stderr
Erro: não foi possível abrir o arquivo de entrada: vendas.csvCódigo de saída: 3
Recuperação: confirme o nome e o diretório do arquivo; depois execute novamente com um caminho acessível.
Neste caso, a frase mostrada é um exemplo de mensagem. Só declare um texto como estável — por exemplo, para automação — se essa estabilidade fizer parte do contrato aprovado.
Relacione cada campo ao que ele deve informar na documentação.
Toque em um item e depois no par correspondente.
Considere o comportamento documentado: quando o usuário fornece --config caminho.toml e o arquivo não existe, a aplicação escreve um diagnóstico em stderr e encerra com o código definido para configuração inválida. Redija a ação recomendada para a referência de falhas. Inclua ao menos duas verificações ou alternativas seguras.
Escreva pelo menos 80 caracteres (0/80).

Passo 5 de 8
Delimite as evidências da versão entregue para informar o que foi declarado, verificado, limitado e ainda não avaliado.
Na documentação da versão entregue, separe afirmações que parecem semelhantes, mas respondem a perguntas diferentes:
requires-python.Ambientes não avaliados devem permanecer como não avaliados. A falta de teste não prova incompatibilidade, mas também não prova funcionamento.
Use uma matriz para tornar visível a diferença entre metadado, teste e ausência de evidência.

A documentação deve manter o alcance de cada afirmação visível, sem preencher lacunas com suposições.
Exemplo
Declarada nos metadados: Python 3.11 ou superior.
Verificada com o artefato resumocsv-1.4.0-py3-none-any.whl:
| Python | Plataforma | Situação |
|---|---|---|
| 3.11 | Ubuntu 24.04 | verificado |
| 3.12 | Windows 11 | verificado |
Outras combinações compatíveis com os metadados não foram avaliadas nesta entrega.
A tabela vincula os testes a uma versão e a um artefato específicos. Ela não sugere que apenas as combinações listadas funcionem, nem afirma que as demais foram aprovadas.
Dica
Prefira termos como declarada, verificada, não avaliada, recusada pela aplicação e observada na avaliação. Eles são mais úteis e honestos do que “suporta tudo” ou “funciona em qualquer ambiente”.
Para cada item, registre a condição em que ocorre, o impacto para o usuário e uma alternativa quando ela existir.
Exemplo
Se os metadados declaram requires-python = ">=3.11", a documentação pode afirmar que todas as versões futuras do Python e todos os sistemas operacionais foram testados.
Reescreva esta afirmação para que ela informe corretamente o alcance da evidência: “O programa funciona em qualquer sistema e processa arquivos CSV de qualquer tamanho.”
Escreva pelo menos 80 caracteres (0/80).

Passo 6 de 8
Documente uma escolha arquitetural relevante em um ADR curto, com alternativas e consequências claras.
Um ADR (Architecture Decision Record, ou registro de decisão arquitetural) explica por que uma escolha relevante foi feita. Ele não substitui docstrings, não lista todas as classes e não descreve o código linha a linha.
Use um ADR quando a escolha cria uma fronteira, impõe uma dependência, descarta alternativas plausíveis ou terá consequências para mudanças futuras. No caso da CLI de resumo de CSV, separar a leitura de CSV das regras de resumo é uma decisão digna de registro.
O diagrama mostra uma decisão de fronteira: a interface de linha de comando e o leitor de CSV ficam fora das regras de negócio.

Um ADR pode incluir um diagrama simples quando ele torna a fronteira escolhida mais fácil de entender.
Dica
O README aponta para o ADR quando o leitor precisar entender a razão de uma escolha. O ADR, por sua vez, não repete comandos de instalação ou uso: ele pode criar um link relativo para a seção apropriada do README.
Um registro enxuto costuma conter:
Se a decisão mudar, preserve o ADR anterior e altere seu status para Substituído por ADR-00X, explicando brevemente a razão. Não reescreva o passado como se a escolha anterior nunca tivesse existido.
Exemplo
Data: 2025-03-08
Status: Aceito
A aplicação recebe um arquivo CSV e produz resumos definidos pelos requisitos R-02 e R-04. A CLI, o formato CSV e os caminhos de arquivo são detalhes externos; as regras de cálculo não devem depender deles.
Adotar a alternativa 3. O adaptador converte registros CSV para os dados usados pela aplicação; a CLI apenas interpreta argumentos e apresenta resultados.
Benefícios: regras de resumo independentes de csv e testes mais diretos para a lógica central.
Custos e riscos aceitos: há conversão entre registros externos e dados internos, além de mais uma fronteira a manter. Alterações no formato CSV exigem atualização no adaptador.
Consulte [uso e formato de entrada](../../README.md#formato-de-entrada).
Qual trecho expressa melhor uma justificativa adequada para escolher um adaptador de CSV separado?
Redija um ADR curto para a decisão de manter a leitura de CSV em um adaptador separado das regras de resumo. Considere a separação entre domínio, aplicação, interface e persistência já definida no projeto. Inclua ao menos uma alternativa e uma consequência desfavorável aceita.
Escreva pelo menos 350 caracteres (0/350).

Passo 7 de 8
Registre evidências de desempenho de forma rastreável e formule conclusões limitadas ao cenário realmente avaliado.
Uma nota de desempenho precisa permitir que outra pessoa entenda o que foi comparado e até onde a conclusão vale. Registre: versão ou artefato, carga de trabalho, máquina e sistema, versão do Python, configuração de concorrência, procedimento e fronteira medida.
A fronteira é especialmente importante: informe se o tempo inclui leitura, criação de processos ou threads, processamento, consumo dos resultados e gravação da saída. Compare execuções que realizam o mesmo trabalho e produzem resultado equivalente.
Use este mapa como checklist para a seção de desempenho ou para uma decisão registrada.

Sem carga, ambiente e fronteira de medição, um número de tempo não é interpretável.
Dica
Uma medição em uma máquina e uma carga específicas é um fato daquele cenário. Ela não prova desempenho igual em outras versões, máquinas, volumes ou tipos de arquivo.
Exemplo
Dados simulados; não são evidência da sua aplicação.
Artefato: csv-resumo 1.4.0, wheel validada.
Carga: um CSV local com 100.000 linhas; ambas as versões produziram o mesmo arquivo de resumo.
Ambiente: Ubuntu 24.04, Python 3.12.3, notebook com 4 núcleos lógicos.
Procedimento: 5 execuções por variante; tempo decorrido da abertura do CSV até o resumo gravado.
| Variante | Configuração | Mediana | Intervalo observado |
| --- | --- | ---: | ---: |
| Sequencial | 1 processo | 1,82 s | 1,79–1,88 s |
| Concorrente | 4 processos | 2,11 s | 2,03–2,25 s |
Decisão: manter a execução sequencial nesta versão. Na carga e no ambiente avaliados, a variante concorrente foi mais lenta e acrescenta criação e coordenação de processos.
Não é garantia: este resultado não afirma que a versão sequencial será mais rápida em todo hardware, arquivo ou versão do Python.
Reavaliar se: houver cargas maiores, transformação por linha mais custosa, outro ambiente-alvo relevante ou mudança na implementação.
Use rótulos claros na redação:
A decisão pode apontar para um ADR quando ela afetar a arquitetura; não é necessário duplicar no README todos os detalhes do experimento.
Com base exclusivamente no exemplo didático anterior, qual conclusão é adequada para documentar?
Usando os dados simulados do exemplo, redija uma nota de decisão. Inclua: uma evidência numérica, o motivo para manter ou rejeitar a concorrência e um limite de validade da conclusão.
Escreva pelo menos 180 caracteres (0/180).

Passo 8 de 8
Consolide o README e os registros de decisão, relacione cada afirmação a uma evidência da distribuição e revise divergências antes de declarar a entrega pronta.
Antes de fechar a entrega, transforme cada afirmação importante em uma trilha verificável: critério de aceitação → seção do documento → comando reproduzível → evidência observada.
A evidência deve identificar a versão e o artefato testado, por exemplo dist/resumo_csv-1.2.0-py3-none-any.whl. Executar a árvore de fontes, usar instalação editável ou importar módulos locais não substitui a verificação da distribuição empacotada.
Use uma tabela ou mapa simples para impedir que o README prometa algo que não foi conferido.

Cada declaração operacional relevante deve chegar a um comando e a um resultado registrados.
Exemplo
| Critério | Seção | Comando reproduzível | Evidência |
|---|---|---|---|
| A ajuda é exibida sem erro | Início rápido | resumo-csv --help | wheel resumo_csv-1.2.0-py3-none-any.whl, ambiente limpo, saída 0; uso exibido em stdout |
| CSV inválido é informado | Falhas e recuperação | resumo-csv dados.csv | mesma wheel, saída 3; diagnóstico em stderr; nenhum arquivo de saída criado |
Inclua o caminho ou identificador do artefato, a versão e a data da execução onde sua equipe puder consultá-los. Não invente uma execução que não ocorreu.
Confira no artefato validado os exemplos de ajuda, sucesso, configuração inválida e falha de acesso aos dados. Em cada transcrição, separe claramente o comando digitado, o conteúdo de stdout, o conteúdo de stderr, o código de saída e os efeitos em arquivos.
Uma transcrição didática marcada como simulada só ilustra formato: ela não é evidência da sua aplicação. Se a execução real divergir, registre a divergência e corrija o documento ou o comportamento, conforme o contrato aprovado.
Exemplo
README afirma: configuração inválida retorna código 2.
Evidência simulada:
$ resumo-csv --config ausente.toml dados.csv
stderr: erro: arquivo de configuração não encontrado: ausente.toml
código de saída: 4A transcrição acima é apenas um exemplo de auditoria, não o resultado de um comando disponível neste tutorial. Se o contrato aprovado define 4 para arquivo solicitado inexistente, corrija o README para 4. Se define 2, corrija a aplicação e gere uma nova distribuição antes de atualizar a evidência.
No exemplo simulado, explique como você decide entre corrigir o README e corrigir a aplicação. Inclua o que precisa ser revalidado depois.
Escreva pelo menos 80 caracteres (0/80).
Com sua wheel ou sdist validada, execute os comandos que você documentou em um ambiente limpo e fora da pasta do projeto. Use arquivos de entrada próprios, criando-os a partir do conteúdo textual descrito no README quando necessário.
Para cada cenário, anote: artefato e versão, comando, stdout, stderr, código de saída e arquivos criados ou preservados. Este tutorial não recebe arquivos nem verifica sua execução automaticamente; o objetivo é você confrontar o documento com o que observou localmente.
Resumo
A documentação está pronta quando uma pessoa consegue usar a distribuição sem depender das fontes de desenvolvimento.
Escolha um critério de aceitação da sua aplicação e registre uma trilha de auditoria. Se ainda não tiver executado o cenário, declare isso explicitamente e diga qual comando pretende conferir.
Escreva pelo menos 120 caracteres (0/120).
Parabéns! Você concluiu: Documentar uso, limitações e decisões da aplicação
Você concluiu a trilha
Parabéns! Você passou por todos os tutoriais desta trilha.
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks