Trilha de aprendizado · Nível 15 · Tutorial 1

Definir requisitos verificáveis para uma aplicação de linha de comando

Delimitar uma aplicação de linha de comando para consultar e atualizar um catálogo local em JSON, definindo comportamentos e critérios de aceitação que orientarão sua implementação e entrega.

  • Nível: Intermediário
  • Duração: 15 min
  • 8 passos
Definir requisitos verificáveis para uma aplicação de linha de comando

O que você vai percorrer

  1. Delimitar o problema e o escopo Defina a fronteira da primeira entrega de uma aplicação de terminal para consultar e corrigir um catálogo JSON local. 1 min
  2. Descrever operações pela intenção do usuário Mapeie as duas operações da primeira entrega a partir do que a pessoa precisa fazer, identificando entradas, precondições e regras de validade sem decidir a implementação. 2 min
  3. Especificar resultados e efeitos nos dados Transforme as intenções de consulta e atualização em compromissos funcionais observáveis, incluindo o que deve mudar — e o que deve permanecer preservado. 2 min
  4. Transformar requisitos em critérios de aceitação Converta compromissos funcionais em cenários concretos, observáveis e decidíveis. 2 min
  5. Tornar compatibilidade, volume e tempo mensuráveis Transforme expectativas gerais de qualidade em compromissos que possam ser verificados na entrega. 2 min
  6. Ligar requisitos a comandos e evidências Monte uma matriz que conecte cada compromisso do catálogo ao comando planejado, ao critério de aceitação e à evidência que realmente o comprova. 2 min
  7. Priorizar uma entrega mínima completa Selecione uma primeira entrega pequena, mas capaz de resolver o fluxo principal do usuário e de ser aceita por evidências concretas. 2 min
  8. Consolidar e revisar a especificação Reúna os compromissos definidos para o catálogo local e revise se eles podem orientar tanto a implementação quanto a aceitação futura. 3 min

O que você vai aprender

  • Identificar as operações essenciais da aplicação e explicitar o que ficará fora do escopo.
  • Descrever entradas, resultados e efeitos persistentes esperados para cada operação.
  • Definir requisitos de compatibilidade, volume de dados e tempo de resposta com condições verificáveis.
  • Relacionar cada requisito a uma evidência de aceitação da aplicação entregue.

Antes de começar

  • Executar Python no modo interativo e em scripts
  • Selecionar casos de teste e verificar exceções
  • Salvar e carregar dados em JSON

Passo 1 de 8

Delimitar o problema e o escopo

Defina a fronteira da primeira entrega de uma aplicação de terminal para consultar e corrigir um catálogo JSON local.

Usuário, contexto e problema

Comece pela necessidade, não pela solução

A aplicação será útil para uma pessoa que trabalha no terminal e mantém um catálogo local em JSON. Ela precisa localizar um registro pelo identificador e corrigir seu nome quando encontrar uma informação desatualizada ou digitada incorretamente.

Essa é a necessidade do usuário: consultar e corrigir dados existentes. Ela não diz ainda como o programa será organizado internamente.

Exemplo

Formulação do problema

Uma pessoa que usa o terminal precisa consultar um registro de um catálogo JSON local pelo seu identificador e corrigir o nome desse registro, mantendo os demais dados do catálogo.

A fronteira da primeira entrega

Inclua apenas o fluxo essencial

Para a primeira entrega, o catálogo já existe. O produto terá duas capacidades: consultar um registro por identificador e atualizar o nome de um registro identificado.

Delimitar o escopo não reduz a utilidade: garante que o fluxo principal possa ser entregue e verificado por completo.

Incluído e excluído

A imagem mostra a fronteira proposta para o produto.

Diagrama de fronteira do produto: dentro, consultar um registro existente e atualizar seu nome em um catálogo JSON local; fora, criar ou remover registros, interface gráfica, sincronização em rede e uso simultâneo por vários processos.

Dentro da fronteira ficam as duas operações que resolvem o problema inicial; fora ficam capacidades adiadas ou não atendidas.

Exclusões tornam o compromisso claro

Diga também o que não será feito

Registre explicitamente as exclusões da primeira entrega:

  • criar registros;
  • remover registros;
  • oferecer interface gráfica;
  • sincronizar dados pela rede;
  • permitir que vários processos usem o mesmo catálogo ao mesmo tempo.

Uma exclusão não é uma falha escondida: é uma capacidade que não faz parte deste compromisso.

Dica

Evite confundir necessidade com preferência

“Corrigir o nome de um registro pelo terminal” descreve uma necessidade. “Usar uma classe X” ou “organizar em três módulos” descreve uma preferência de implementação. Nesta etapa, defina o que o usuário consegue fazer e o que o produto não cobre.

Verifique a delimitação

Qual escopo está melhor definido?

Escolha a formulação adequada para a primeira entrega.

Passo 2 de 8

Descrever operações pela intenção do usuário

Mapeie as duas operações da primeira entrega a partir do que a pessoa precisa fazer, identificando entradas, precondições e regras de validade sem decidir a implementação.

Da intenção ao caso de uso

Comece pelo que o usuário quer realizar

Um caso de uso descreve uma intenção observável da pessoa usuária — não uma função, classe ou sequência interna do programa.

Para o catálogo local, a primeira entrega tem duas intenções:

  • Consultar um registro pelo seu identificador.
  • Atualizar o nome de um registro pelo seu identificador.

Evite especificar agora frases como “chamar buscar_por_id” ou “percorrer a lista”. Elas escolhem uma implementação antes de definir o contrato do produto.

Exemplo

Intenção, não mecanismo

✅ “A pessoa consulta o registro de identificador A17 em um catálogo local escolhido.”

❌ “O programa chama uma função que lê o JSON e procura A17 em um dicionário.”

A primeira frase pode ser aceita ou rejeitada ao usar a aplicação. A segunda limita decisões de código que serão tomadas depois.

Vocabulário e mapa de entradas

Defina os dados mínimos do cenário

Use um vocabulário pequeno e consistente:

  • Catálogo local: arquivo JSON que a pessoa escolhe para operar.
  • Registro: item do catálogo com identificador único e nome não vazio.
  • Identificador: valor que aponta para um único registro.
  • Novo nome: informação fornecida somente na atualização.

Assim, a consulta precisa do catálogo local e do identificador. A atualização precisa desses dois dados mais o novo nome.

Entradas de cada intenção

Compare as informações fornecidas em cada caso de uso.

Diagrama com duas ramificações: consultar recebe catálogo local e identificador; atualizar recebe catálogo local, identificador e novo nome.

A atualização inclui todas as entradas da consulta e acrescenta o novo nome.

Exemplo

Mapa inicial dos casos de uso

| Intenção | Informações fornecidas pela pessoa |
|---|---|
| Consultar um registro | catálogo local escolhido; identificador |
| Atualizar um nome | catálogo local escolhido; identificador; novo nome |

Este mapa não determina se essas informações serão digitadas, lidas de argumentos ou obtidas de outra interface. A forma da linha de comando será definida mais adiante.

Precondição, entrada ou regra?

Separe três tipos de afirmação

Uma especificação fica mais clara quando não mistura estas categorias:

  • Precondição: situação que precisa existir para iniciar o cenário. Ex.: há um catálogo local disponível para ser escolhido.
  • Entrada: informação fornecida para aquela operação. Ex.: identificador e, na atualização, novo nome.
  • Regra de validade: condição que uma informação deve atender. Ex.: cada identificador é único e o nome não pode ser vazio.

A precondição descreve o contexto; a entrada vem da interação; a regra limita valores aceitáveis. Ainda não estamos definindo resultados, mensagens ou alterações no arquivo.

Classifique as afirmações

Relacione cada afirmação à categoria adequada.

Toque em um item e depois no par correspondente.

Cheque o mapa das operações

Qual é o conjunto de entradas?

Qual conjunto descreve somente as entradas necessárias para a intenção “atualizar o nome de um registro”?

Passo 3 de 8

Especificar resultados e efeitos nos dados

Transforme as intenções de consulta e atualização em compromissos funcionais observáveis, incluindo o que deve mudar — e o que deve permanecer preservado.

Requisito funcional: comportamento que se pode observar

Do pedido ao compromisso

Um requisito funcional descreve um comportamento observável sob condições definidas. Ele não diz como o código deve ser organizado nem como o JSON deve ser formatado.

Para este catálogo, o requisito precisa deixar claro: em que condição a operação ocorre, o que a pessoa vê e qual efeito acontece nos dados — ou que os dados não mudam.

Três partes de um requisito observável

Use esta sequência para revisar cada requisito: condição → resultado apresentado → efeito no catálogo.

Diagrama com três blocos conectados: condição de entrada, resultado visível no terminal e efeito persistente no catálogo JSON.

O requisito conecta uma ação observável ao estado dos dados, sem depender da implementação interna.

Sucesso: consultar não muda; atualizar persiste

Exemplo

Requisitos funcionais propostos

RF-01 — Consulta: Quando o catálogo local puder ser lido e contiver o identificador informado, a aplicação deve apresentar as informações desse registro e não deve alterar o catálogo.

RF-02 — Atualização: Quando o catálogo local puder ser lido, contiver o identificador informado e receber um nome não vazio, a aplicação deve confirmar a atualização e persistir o novo nome. O identificador do registro e todos os demais registros devem permanecer inalterados.

Antes, resultado e confirmação posterior

A confirmação de atualização não basta por si só. O novo nome precisa aparecer em uma consulta feita em outra execução da aplicação.

Comparação em três etapas: catálogo inicial com registro id 42 e nome Ana, atualização para Ana Souza, e nova consulta mostrando id 42 com nome Ana Souza; outro registro permanece igual.

A evidência de persistência é o catálogo alterado e a nova consulta, não apenas uma mensagem de sucesso.

Falhas previstas preservam o catálogo

Defina também o que não pode acontecer

O contrato deve cobrir situações previsíveis sem supor detalhes de mensagens ou códigos de saída:

  • Se o identificador não existir, a aplicação deve informar que não encontrou o registro e não alterar o catálogo.
  • Se o novo nome for vazio, a aplicação deve informar a entrada inválida e não alterar o catálogo.
  • Se o catálogo não puder ser lido ou contiver JSON inválido, a aplicação deve informar a falha e não sobrescrever o arquivo.

Assim, uma tentativa sem condições válidas nunca destrói nem modifica dados existentes.

Atenção

Evite uma promessa insuficiente

“Exibir erro se algo der errado” é vago: não identifica a condição, nem informa se o catálogo foi preservado. Declare cada situação relevante e o efeito esperado nos dados.

Prática: complete o requisito de atualização

Escreva um requisito verificável

Reescreva este requisito vago: “O programa deve atualizar o nome do produto.” Inclua condição de entrada, resultado observável, mudança persistente e o que deve permanecer inalterado.

Escreva pelo menos 180 caracteres (0/180).

Passo 4 de 8

Transformar requisitos em critérios de aceitação

Converta compromissos funcionais em cenários concretos, observáveis e decidíveis.

Do compromisso à aprovação

Requisito não é critério

Um requisito expressa um compromisso: “A aplicação deve atualizar o nome de um registro existente.”

Um critério de aceitação torna esse compromisso verificável: define um catálogo inicial completo, a ação do usuário e o que deve ser observado depois. Assim, duas pessoas conseguem chegar à mesma decisão sobre a entrega, sem depender de como o código foi organizado.

Estrutura de um cenário verificável

Use Dado / Quando / Então para separar estado inicial, ação e resultados observáveis.

Diagrama com três blocos conectados: catálogo inicial, ação de atualização e resultado com mensagem mais catálogo persistido atualizado.

O cenário começa nos dados conhecidos e termina no que o usuário vê e no estado que permanece salvo.

Um cenário completo de atualização

Exemplo

Critério de aceitação: atualização bem-sucedida

Requisito: a aplicação deve persistir o novo nome de um registro existente.

Dado um catálogo local com exatamente estes registros:

[
  {"id": "p1", "nome": "Caderno"},
  {"id": "p2", "nome": "Caneta"}
]

Quando a pessoa solicita a atualização do registro p2 para o nome Caneta azul.

Então a aplicação informa que o registro p2 foi atualizado.

E uma nova consulta, em outra execução, ao identificador p2 apresenta o nome Caneta azul.

E o catálogo persistido passa a conter:

[
  {"id": "p1", "nome": "Caderno"},
  {"id": "p2", "nome": "Caneta azul"}
]

O identificador de p2 e o registro p1 permanecem inalterados. O critério não exige uma formatação específica do JSON; exige os dados corretos.

Dica

Calcule o resultado pelos dados

Não escreva “o sistema atualiza corretamente”. Declare qual valor deve aparecer e qual estado deve permanecer. O resultado esperado deve poder ser determinado apenas pelo catálogo inicial e pela ação descrita — não pela implementação.

Cobrir falhas sem duplicar cenários

O que também precisa ser decidido

Além do sucesso, cubra situações que impedem a atualização:

  • Identificador inexistente: informar a ausência e preservar todo o catálogo.
  • Nome inválido, como vazio: informar a invalidez e preservar todo o catálogo.

Esses cenários verificam duas coisas: a resposta ao usuário e a ausência de efeito nos dados. Não repita cenários que provam exatamente a mesma regra com valores diferentes sem acrescentar uma condição relevante.

Exemplo

Critério de aceitação: registro ausente

Dado o catálogo:

[
  {"id": "p1", "nome": "Caderno"},
  {"id": "p2", "nome": "Caneta"}
]

Quando a pessoa solicita alterar o nome do registro p9 para Lápis.

Então a aplicação informa que não existe registro com o identificador p9.

E o catálogo persistido continua contendo exatamente p1 com nome Caderno e p2 com nome Caneta.

Complete o critério

Efeito persistente

Complete o trecho:

E uma nova consulta ao identificador p2, em outra execução, apresenta o nome ____.

Preservação dos dados

Complete o resultado para uma tentativa de atualizar p2 com nome vazio:

E o catálogo persistido permanece ____.

Passo 5 de 8

Tornar compatibilidade, volume e tempo mensuráveis

Transforme expectativas gerais de qualidade em compromissos que possam ser verificados na entrega.

Qualidade também precisa de limite

Requisitos não funcionais verificáveis

Além de definir o que os comandos fazem, especifique em quais condições eles precisam funcionar. Compatibilidade, capacidade e tempo de resposta são requisitos não funcionais quando incluem uma condição observável e um limite para aprovação.

Evite promessas como “funciona em qualquer computador”, “aceita catálogo grande” ou “é rápido”. Elas não permitem decidir se a entrega foi aprovada.

Da expectativa à verificação

Comparação entre três expectativas vagas e três cartões de requisito mensurável, cada cartão mostrando condição de execução, medida e limite de aprovação.

Um requisito verificável declara o cenário, a medida observada e a regra para aprovar ou reprovar.

Compatibilidade e capacidade declaradas

Declare o que será suportado

Compatibilidade não é suporte universal. Declare versões e plataformas, por exemplo: “A aplicação deve executar em Python 3.11 e 3.12 no Windows 11 e no Ubuntu 22.04 LTS.”

Para capacidade, descreva a carga: quantidade de registros, tamanho máximo de cada nome e tamanho do arquivo JSON. Também separe duas fronteiras:

  • Faixa suportada: a aplicação deve operar normalmente dentro dela.
  • Limite de rejeição: acima dele, deve recusar o catálogo com mensagem clara, sem alterá-lo.

Exemplo

Formulação mensurável

Vago: “O catálogo deve suportar muitos itens.”

Verificável: “A consulta e a atualização devem operar com catálogos de até 10.000 registros, nomes de até 120 caracteres e arquivo JSON de até 5 MB. Acima de 10.000 registros ou 5 MB, a aplicação deve informar que o catálogo excede o limite e não deve sobrescrever o arquivo.”

Escolha uma compatibilidade verificável

Qual requisito de compatibilidade permite uma decisão objetiva de aprovação?

Medir o comando inteiro

Tempo exige cenário e fronteira

Um limite de tempo só é verificável se disser qual operação, qual carga, em qual ambiente e o que a medição inclui.

Para este catálogo, a fronteira pode ser a execução completa do comando: começa ao iniciá-lo e termina quando ele finaliza, incluindo leitura do JSON, processamento, escrita quando houver atualização e encerramento. Registre processador, memória e tipo de armazenamento; SSD e disco rígido podem produzir resultados diferentes.

Defina também repetições, estatística e limite. Exemplo: usar a mediana de 10 execuções, não apenas uma tentativa favorável.

Exemplo

Requisito de tempo completo

“Em um computador de referência com processador de 4 núcleos, 8 GB de RAM e SSD, a consulta de um identificador existente em um catálogo JSON de 10.000 registros e até 5 MB deve concluir em até 1,0 s. O tempo será a mediana de 10 execuções completas do comando.”

Dica

Meta não é evidência

Este requisito é um compromisso para a aceitação futura, não uma alegação de que o resultado já foi alcançado. A evidência será registrada depois, nas condições declaradas, com a carga e as medições obtidas.

Cheque se é possível aprovar

Avalie o requisito de desempenho

Qual formulação é suficiente para verificar o tempo de resposta?

Resumo

Checklist de requisitos mensuráveis

  • Compatibilidade: declare versões do Python e sistemas operacionais, sem prometer suporte universal.
  • Capacidade: fixe quantidade de registros, tamanhos relevantes e a regra de rejeição acima do limite.
  • Desempenho: associe operação, carga, ambiente, fronteira de medição, repetições, estatística e limite.
  • Medições futuras são evidência de aceitação; metas escritas ainda não são resultados medidos.

Passo 6 de 8

Ligar requisitos a comandos e evidências

Monte uma matriz que conecte cada compromisso do catálogo ao comando planejado, ao critério de aceitação e à evidência que realmente o comprova.

Da promessa à comprovação

Uma matriz de rastreabilidade

Um requisito só está pronto para ser aceito quando você sabe como verificá-lo. Registre quatro ligações: requisito → comando planejado → critério → evidência.

Os comandos ainda são apenas uma interface planejada, por exemplo catalogo consultar --arquivo catalogo.json --id 7 e catalogo atualizar --arquivo catalogo.json --id 7 --nome "Caderno". Não é necessário decidir agora como o parser será implementado.

Cadeia de rastreabilidade

A evidência deve testar o compromisso declarado, não apenas uma parte interna do programa.

Diagrama conectando requisito, comando planejado, critério de aceitação e evidência de verificação para uma aplicação de catálogo JSON.

Cada seta responde: “como saberemos que este compromisso foi cumprido?”

Evidências adequadas ao compromisso

Exemplo

Exemplo de matriz preenchida

| Requisito | Comando planejado | Critério | Evidência necessária |
|---|---|---|---|
| Consultar um registro existente sem alterar o catálogo | catalogo consultar --arquivo catalogo.json --id 7 | Com o ID 7 existente, apresenta as informações desse registro e o arquivo permanece igual | Saída exibida pelo comando + comparação do conteúdo do arquivo antes e depois |
| Atualizar o nome de um registro | catalogo atualizar --arquivo catalogo.json --id 7 --nome "Caderno" | Com ID existente e nome não vazio, confirma a atualização; o novo nome permanece gravado | Resultado apresentado + arquivo antes/depois + nova consulta em outra execução mostrando “Caderno” |
| Respeitar o limite de tempo declarado | Comando de consulta na carga definida | Nas condições de referência, a estatística escolhida fica dentro do limite | Registro da versão do Python e do sistema, carga usada, ambiente de medição e tempos obtidos |

Dica

Persistência exige uma observação posterior

Uma mensagem como “nome atualizado” comprova apenas o que foi informado na tela. Para comprovar persistência, compare os dados gravados e faça uma nova consulta em outra execução. Um teste unitário de uma função isolada também não substitui essa evidência do comando disponível ao usuário.

Escolha a evidência correta

Associe cada compromisso à melhor evidência

Relacione cada requisito à evidência que o comprova de forma suficiente.

Toque em um item e depois no par correspondente.

Plano não é resultado

Escrever “medir o tempo em cinco execuções” é um plano de verificação. Só será evidência de aceitação quando houver medições registradas nas condições declaradas. Do mesmo modo, uma matriz revela lacunas: se um requisito não tem evidência adequada, ainda não é possível decidir objetivamente se a entrega o cumpre.

Passo 7 de 8

Priorizar uma entrega mínima completa

Selecione uma primeira entrega pequena, mas capaz de resolver o fluxo principal do usuário e de ser aceita por evidências concretas.

Mínimo não é sinônimo de incompleto

Priorize o fluxo que resolve o problema

A primeira entrega deve atender à necessidade central: uma pessoa usa o terminal para localizar um registro do catálogo e, quando necessário, corrigir seu nome de forma durável.

Priorize cada compromisso por երեք perguntas:

  1. É necessário para o usuário concluir esse fluxo?
  2. Depende de outro comportamento já incluído?
  3. Pode ser verificado por um critério e uma evidência definidos?

Neste catálogo, consulta e atualização persistente formam um conjunto: atualizar sem poder consultar o resultado depois não fecha o fluxo de uso.

Do fluxo completo ao recurso opcional

A entrega mínima fecha o caminho principal antes de acrescentar extensões.

Comparação entre um fluxo curto e contínuo de consultar, atualizar, salvar e consultar novamente, e vários blocos opcionais desconectados ou incompletos.

Pequena e completa: o usuário consulta, corrige, a alteração é salva e pode ser confirmada em outra execução.

O compromisso mínimo do catálogo

Exemplo

Seleção para a primeira entrega

Incluir agora

  • Consultar um registro existente pelo identificador em um catálogo JSON local.
  • Informar quando o identificador não existe, sem alterar o arquivo.
  • Atualizar o nome de um registro existente com nome não vazio.
  • Persistir a atualização e confirmá-la por consulta em uma nova execução.
  • Informar falha de leitura ou JSON inválido sem sobrescrever o catálogo.
  • Cumprir os limites declarados de compatibilidade, volume e tempo nas condições definidas.

Adiar explicitamente

  • Criar e remover registros.
  • Interface gráfica.
  • Sincronização em rede.
  • Uso simultâneo por vários processos.
  • Busca por nome, filtros e relatórios.

Adiar esses itens reduz capacidades opcionais; não remove uma parte necessária da consulta ou da atualização prometida.

Dica

Qualidade também pode ser essencial

Compatibilidade, capacidade e tempo de resposta não são enfeites se fazem parte do contexto declarado. Se a promessa é funcionar em versões e sistemas específicos, com determinado catálogo e limite de tempo, esses requisitos entram na entrega mínima e precisam de evidência futura.

Escolha sem enfraquecer o contrato

Justifique a prioridade

Você precisa definir a primeira entrega do catálogo. Quais compromissos você manteria obrigatoriamente e quais dois ou mais recursos adiaria? Justifique usando a necessidade do usuário, o fluxo completo e a possibilidade de aceitação por evidências.

Escreva pelo menos 120 caracteres (0/120).

Passo 8 de 8

Consolidar e revisar a especificação

Reúna os compromissos definidos para o catálogo local e revise se eles podem orientar tanto a implementação quanto a aceitação futura.

O contrato em uma página

Síntese antes de implementar

Uma miniespecificação útil descreve o que será entregue e como será verificado, não como o código será organizado.

Para este produto, o contrato reúne:

  • Público e contexto: pessoa que usa o terminal para consultar e corrigir um catálogo JSON local.
  • Escopo: consultar um registro por identificador e atualizar seu nome.
  • Exclusões: criar ou remover registros, interface gráfica, rede e uso simultâneo por vários processos.
  • Dados: cada registro tem identificador único e nome não vazio.
  • Resultados: consulta apresenta o registro sem alterar o arquivo; atualização confirma a alteração e a mantém em uma nova execução.
  • Falhas previstas: identificador inexistente, nome inválido, arquivo ilegível ou JSON inválido são informados sem sobrescrever o catálogo.

Do requisito à aceitação

A especificação conecta intenção, comportamento observável e evidência.

Diagrama mostrando um usuário no terminal ligado a duas operações, consulta e atualização, que levam a um catálogo JSON e a marcas de verificação de resultado, persistência e limites de qualidade.

Cada compromisso precisa chegar a uma verificação observável na aplicação entregue.

Resumo

Contrato consolidado

Use esta síntese como referência de revisão.

  • A primeira entrega fecha dois fluxos: consultar e atualizar um nome existente.
  • O catálogo só pode mudar após uma atualização válida de um identificador existente.
  • Uma mensagem de sucesso não basta: a persistência é confirmada por consulta em outra execução.
  • Toda promessa funcional ou de qualidade deve indicar condições e evidência de aceitação.

Exemplo de miniespecificação verificável

Exemplo

Trecho consolidado

Operações planejadas

  1. catalogo consultar <arquivo> <id>
  • Com um catálogo JSON válido e um identificador existente, apresenta o identificador e o nome correspondentes.
  • Não altera o conteúdo do arquivo.
  • Se o identificador não existir, informa a ausência e preserva o arquivo.
  1. catalogo atualizar <arquivo> <id> <novo_nome>
  • Com identificador existente e nome não vazio após remover espaços das extremidades, altera somente o nome daquele registro.
  • Confirma a atualização; uma consulta em nova execução apresenta o novo nome.
  • Para identificador inexistente ou nome inválido, informa a falha e preserva o arquivo.

Limites da primeira entrega

  • Compatibilidade a verificar: Python 3.11 e 3.12 em Ubuntu 22.04 e Windows 11.
  • Capacidade: até 10.000 registros, cada um com identificador e nome de até 100 caracteres, em arquivo de até 5 MB. Acima de 5 MB, a aplicação deve recusar o processamento com mensagem clara, sem alterar o arquivo.
  • Desempenho: em computador de referência com SSD, para um arquivo de 5 MB e 10.000 registros, a duração completa de cada comando deve ter mediana de no máximo 1 segundo em 10 execuções.

Evidências previstas

  • Saída do comando para sucesso e falhas esperadas.
  • Comparação do arquivo antes e depois de cada cenário.
  • Nova consulta após atualização válida.
  • Registro das versões, sistemas, carga, ambiente de referência e medições.

Dica

Precisão suficiente

Os comandos acima são uma interface planejada, não uma exigência de implementar o parser agora. O ponto central é que cada argumento, resultado, alteração e limite possa ser verificado sem inspecionar funções internas.

Revisão cruzada

Encontre as lacunas

Revise este rascunho problemático:

“O programa deve gerenciar bem um catálogo grande. O usuário consulta itens e edita nomes rapidamente. A edição deve salvar. O programa funciona nos sistemas comuns.”

Compare-o com o contrato consolidado. Procure termos vagos, comportamentos ausentes, possíveis contradições entre consulta e atualização e promessas sem uma evidência definida.

Corrija o rascunho

Quais correções mínimas você registraria para transformar o rascunho em uma especificação verificável? Inclua pelo menos uma correção funcional, uma condição de preservação dos dados, um limite de qualidade e uma evidência.

Escreva pelo menos 180 caracteres (0/180).

Checklist de conclusão

Resumo

Antes de passar à implementação

Use este checklist para avaliar sua miniespecificação.

  • O público, o problema, o escopo e as exclusões estão explícitos.
  • As operações descrevem a intenção do usuário, entradas, precondições, resultados e efeitos persistentes.
  • Cenários de sucesso e falhas previstas dizem o que acontece com o catálogo.
  • Compatibilidade, volume e tempo têm limites, condições de execução e regra de aprovação.
  • Cada requisito está ligado a um comando planejado e a uma evidência que realmente o comprova.
  • A entrega mínima fecha os fluxos essenciais; melhorias adiadas continuam explicitamente fora do escopo.
  • Nenhum requisito depende de detalhes de arquitetura ou de uma implementação ainda inexistente.

Especificação pronta para orientar decisões

Parabéns! Você concluiu: Definir requisitos verificáveis para uma aplicação de linha de comando

Ótimo trabalho. Sua especificação agora pode servir como referência para as próximas decisões de implementação e para a futura aceitação da aplicação. Mantenha os requisitos, critérios e evidências juntos: eles delimitam o que precisa ser construído e como demonstrar que foi entregue.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso