# data[].attributes.body
- Descrição do que o software deve fazer
- Solução dos problemas levantados na análise de requisitos
- Forma de comunicação entre o analista e os desenvolvedores do software

Principais objetivos

- Projetar um software que atenda as necessidades dos usuários
- Evitar implementação de funcionalidades que não seriam usadas
- Ajudar na descrição das funcionalidades

Técnicas para explorar requisitos

- Use cases
- User story

# data[].attributes.body
- Descrição de uma sequência de iterações entre um sistema e um ator
- Revelam as funcionalidades de um sistema
- Permite especificar, documentar e visualizar o comportamento que o sistema terá para satisfazer os seus requisitos

Exemplos de casos de uso

Em uma loja online de quadros:
Atualizar o perfil de um cliente
Pesquisar um quadro
Comprar um quadro
Rastrear um pedido
Cancelar um pedido não enviado

Partes de um caso de uso

- Cenário
- Ator
- Use Case
- Comunicação

Relações entre casos de uso

- Include: para que um caso de uso execute sua funcionalidade é necessário chamar outro caso de uso

- Extend:  funciona como o caso de uso base só que adiciona novos passos

# data[].attributes.body
- Declarações concisas das necessidades do usuário
- Também utilizado para organização de requisitos
- Descrições de uma funcionalidade do ponto de vista de um usuário
- Devem ser curtas,  simples e claras
- Na user story o foco é nas necessidades reais e práticas do usuário

Partes de um user story

- Ator
- Ação
- Funcionalidade

A seguir um exemplo de um user story:

Um vendedor quer procurar por um livro X para verificar se aquele livro está disponível no estoque para que possa vende-lo

# data[].attributes.body
- Definem os pré requisitos que devem ser atendidos antes que o caso de uso seja executado
- Elas descrevem o estado do sistema e não a intenção do usuário

A seguir um exemplo de uma pré condição:

Para o caso de uso sacar dinheiro de um caixa eletrônico, é necessário que o caixa tenha dinheiro

# data[].attributes.headline
Fluxos normais, fluxos alternativos e exceções

# data[].attributes.subject
Fluxos normais, fluxos alternativos e exceções

# data[].attributes.body
Fluxos normais

- Um cenário é identificado como o fluxo normal de um caso de uso
- Lista de etapas indicando qual entidade o sistema ou um ator executa a cada etapa

Fluxos alternativos

- Fornecem o mesmo resultado que o fluxo normal, mas representam variações menos comuns na forma em que a tarefa é realizada
- Um fluxo normal pode se ramificar em fluxos alternativos

Exceções

- São condições que podem impedir o sucesso de um caso de uso
- Descrevem as condições de erro que podem ocorrer durante a execução do caso de uso.

# data[].attributes.body
- Descreve o estado do sistema após a execução do caso de uso
- Podem definir algo observável para o usuário, resultados físicos ou mudanças internas no estado do sistema

A seguir exemplos de pós condições:

Sistema exibir o saldo da conta;
Caixa eletrônico dispensar distribuir o dinheiro e imprimir um recibo;

# data[].attributes.headline
Limitações de um documento Word para especificações

# data[].attributes.subject
Limitações de um documento Word para especificações

# data[].attributes.body
- Dificuldade em manter versões anteriores dos requisitos
- Possibilidade de se ter requisitos duplicados, ocasionando problemas de manutenção
- Textos ambíguos que levam a uma má interpretação.

# data[].attributes.body
Apesar da maioria dos projetos possuir apenas uma especificação de requisitos, em projetos extremamente grandes se torna necessário fazer uma divisão do projeto em vários subprojetos, atribuindo uma especificação para cada um deles.