PDS e Metodologias Ágeis
Levantamento de Requisitos

Este trabalho simula o dialogo entre um vendedor e um programador.

🟣 Entrevista 1 — Primeira Reunião (Levantamento Inicial)

CLIENTE:
Oi, tudo bem? Então… eu queria fazer um site pra minha loja de açaí, sabe? Um site bonito, que apareça as fotos dos potes bem cheios, com aquelas coberturas caindo assim…

Programador:
Oi, tudo ótimo! Ah, entendi, você quer um site que destaque bem as imagens dos seus produtos, certo?

CLIENTE:
Isso! E queria também que desse pra pessoa montar o açaí dela… tipo, ela escolhe o tamanho, os adicionais, põe leite condensado, paçoca… essas coisas.

Programador:
Entendi. Então seriam dois tipos de venda: produtos prontos (como um açaí tradicional 500ml) e o cliente montando o seu próprio açaí.

CLIENTE:
Exatamente! E sabe o que seria legal? Se tivesse música tocando no site!

Programador:
(risos) Música? Podemos pensar em colocar, mas talvez isso atrapalhe um pouco a navegação, sabe?
Você quer focar em vender ou fazer algo mais descontraído?

CLIENTE:
Ah, é… melhor vender né? Então esquece a música!

Programador:
Certo! Sobre os pedidos: como você quer receber? O cliente paga no site ou paga na hora?

CLIENTE:
Olha, ainda tô começando… queria que ele só mandasse o pedido. Daí eu confirmo no WhatsApp e combino o pagamento.

Programador:
Ok, pedido sem pagamento online. E você quer controlar o estoque também?

CLIENTE:
Estoque? Ah… seria bom saber quando tá acabando leite condensado, paçoca… Mas não precisa ser complicado, não. Se não der, deixa pra depois.

Programador:
Tudo bem, vou anotar como “controle simples de estoque” pra uma segunda fase.

CLIENTE:
Isso!


🟣 Entrevista 2 — Definindo o Básico (com mais detalhes)

Programador:
Oi, voltei! Organizei algumas ideias pra gente confirmar.

CLIENTE:
Ótimo! Vamos ver!

Programador:
Sobre os produtos: você quer cadastrar o nome do açaí, o preço, o tamanho (ex: 300ml, 500ml) e colocar uma foto. Correto?

CLIENTE:
Certo. Mas às vezes eu quero fazer promoções! Tipo, “Compre um de 500ml e ganhe uma granola grátis.”

Programador:
Entendi. Promoções podem ser configuradas também, mas talvez num segundo momento, combinado?

CLIENTE:
Tá bom! Primeiro vamos focar no básico.

Programador:
Sobre os adicionais: vamos ter uma listinha? Tipo: Banana, Paçoca, Leite condensado… cada um com um preço.

CLIENTE:
Sim! E às vezes eu queria dar adicionais grátis em dias especiais, tipo “sexta-feira da banana grátis”.

Programador:
Ok, posso deixar espaço para adicionar promoções depois. No momento, vamos focar no cliente escolher os adicionais e adicionar ao pedido.

CLIENTE:
Perfeito.

Programador:
Agora: o pedido.
O cliente seleciona o produto, escolhe os adicionais e informa o nome e telefone para contato, certo?

CLIENTE:
Isso! E o bairro também, né? Vai que eu começo a entregar…

Programador:
Boa ideia. Vamos incluir campo para Bairro também.

CLIENTE:
Ah, e se a pessoa quiser pedir dois açaís diferentes no mesmo pedido?

Programador:
Ótimo ponto. Então vamos deixar o carrinho com possibilidade de adicionar mais de um produto.


🟣 Entrevista 3 — Confirmando Tudo (com cliente viajando um pouco)

Programador:
Oi, tudo certo? Vim só pra validar antes de começar!

CLIENTE:
Opa! Tô animado!

Programador:
Então vamos lá:
No site, o cliente vai poder:

  • Ver a lista de produtos
  • Ver os adicionais
  • Escolher o produto e o tamanho
  • Escolher adicionais
  • Adicionar ao carrinho
  • Informar nome, telefone e bairro
  • Confirmar pedido
  • E o pedido vai pro seu WhatsApp.

CLIENTE:
Show! E se der, eu queria que o site piscasse alguma coisa, tipo uma estrela, quando a pessoa confirmasse o pedido!

Programador:
(risos) Vamos fazer uma mensagem de “Pedido enviado com sucesso”, pode ser?

CLIENTE:
Tá ótimo! Estrela piscando era bobagem minha, esquece!

Programador:
Beleza. Sobre o controle dos produtos: você vai conseguir acessar um painel pra:

  • Cadastrar novo açaí
  • Alterar preço
  • Cadastrar novos adicionais
  • Alterar fotos

CLIENTE:
Ahhh, legal! Quero também poder desativar um produto, tipo “acabou”, sem apagar tudo.

Programador:
Perfeito, vou colocar a opção de deixar um produto inativo.

CLIENTE:
E se eu mudar de ideia e quiser cobrar o pedido online?

Programador:
A gente consegue adicionar depois. Por enquanto vamos deixar como “pedido via WhatsApp” mesmo.

CLIENTE:
Combinado!

PDS e Metodologias Ágeis
PDS e Metodologias Ágeis

Resumo: Programação, Testes e Modelagem de Sistemas

1. Programação Orientada a Objetos com Python

Conceitos-chave:

  • Classes e Objetos:
    Uma classe é um molde; o objeto é o produto. Classes definem atributos (características) e métodos (ações).
  • Encapsulamento:
    Técnica que protege os dados dentro de uma classe, permitindo acesso controlado através de getters (leitura) e setters (modificação).

Aplicações práticas:

  • Criação de softwares modulares e organizados.
  • Utilização de boas práticas como separação de responsabilidades, reutilização de código e manutenção mais fácil.

Exemplos:

  • Criar uma classe Carro com atributos como cor e métodos como acelerar().

Boas práticas destacadas:

  • Utilizar convenções de encapsulamento (_atributo).
  • Planejar o código com esboços no papel antes da implementação.

2. Testes Não Funcionais: Desempenho, Segurança e Usabilidade

Desempenho

  • Testes de carga e stress:
    Avaliam se o sistema suporta alta demanda (ex.: Black Friday).
  • Otimização de recursos:
    Melhor uso de memória, CPU e armazenamento, como fazem Netflix e Spotify.
  • Monitoramento contínuo:
    Ferramentas como Google Analytics analisam o desempenho em tempo real.

Segurança

  • Testes de invasão (PenTest) e vulnerabilidade:
    Simulam ataques para descobrir falhas.
  • Autenticação e Autorização:
    Como o uso de 2FA (Autenticação de dois fatores).
  • Compliance:
    Seguir normas como GDPR para proteger dados dos usuários.

Exemplo real:
O ataque à Sony Pictures (2014) mostrou falhas como falta de 2FA e servidores desatualizados.

Usabilidade

  • Avaliação heurística:
    Avaliar a facilidade de uso seguindo princípios como os de Nielsen.
  • Testes com usuários reais:
    Observar o uso prático para melhorar a experiência.
  • Acessibilidade:
    Tornar sistemas usáveis para todos, como faz a Apple com seus recursos para deficientes.

3. Diagramas de Casos de Uso (UML)

Exemplo de diagrama de caso de uso: Referencia: https://medium.com/operacionalti/uml-diagrama-de-casos-de-uso-29f4358ce4d5

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

O que são:

  • Diagramas que mostram como os usuários (atores) interagem com o sistema.
  • Representam funcionalidades e ajudam no entendimento, planejamento e comunicação do sistema.

Componentes principais:

  • Atores: quem usa (pessoas ou outros sistemas).
  • Casos de uso: o que o sistema faz para atender o ator.
  • Relacionamentos: associação, inclusão e extensão.

Exemplos:

  • E-commerce: Cliente compra produtos; administrador gerencia estoque.
  • Sistema bancário: Cliente faz saques e consultas.
  • Educação: Aluno assiste aula, professor publica material.

Importância prática:

  • Clarificam requisitos e interações antes da programação.
  • Ajudam a prever problemas e definir prioridades de desenvolvimento.

Resumo Final para Aula

TemaPontos PrincipaisExemplos Reais
Programação O.O.Classes, Objetos, EncapsulamentoPython (classe Carro)
Testes Não FuncionaisCarga, Segurança, UsabilidadeNetflix, Sony Pictures
Diagramas de Casos de UsoVisualizar ações do sistemaE-commerce, Saúde, Educação

💬 Sugestão de abordagem com os alunos:

“Hoje vamos aprender como construir softwares organizados, seguros e fáceis de usar, entendendo como desenhar, testar e programar melhor!”

Resumo Elaborado: Programação, Modelagem de Dados e Requisitos de Software


1. Diagramas UML: Casos de Uso, Classes e Sequências

Diagramas de Casos de Uso ​​

  • Representam as funcionalidades que o sistema oferece e como os usuários (atores) interagem com ele.
  • Principais elementos:
    • Atores: Pessoas ou sistemas externos que usam o sistema.
    • Casos de uso: Ações realizadas pelo sistema.
    • Relacionamentos: Mostram como atores e casos de uso se conectam.
  • Aplicações práticas: e-commerce, bancos, sistemas de ensino.
  • Objetivo: Melhorar a comunicação entre desenvolvedores, clientes e usuários.

Diagramas de Classes

referencia: https://slideplayer.com.br/slide/13956163/

  • Representam a estrutura estática do sistema.
  • Cada classe mostra seus atributos (informações) e métodos (ações que podem ser realizadas).
  • Exemplo: Classe “Usuário” com atributos como nome, email e métodos como logar().

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Diagramas de Sequência

Referencia: https://medium.com/documenta%C3%A7ao-uml/introdu%C3%A7%C3%A3o-ao-diagrama-de-sequ%C3%AAncia-1ea5e9563594

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

  • Mostram como os objetos interagem no tempo para realizar funções.
  • Utilizados para representar o fluxo de mensagens entre usuários, sistemas e bases de dados.
  • Exemplo: Usuário adiciona produto ao carrinho → Sistema processa → Estoque é atualizado.


2. Modelagem de Dados Relacional ​​

Use o site site https://www.draw.io/ para gerar o modelo da loja de açaí

Fundamentos:

  • Entidades: Representam objetos reais, como Clientes, Produtos, Pedidos.
  • Relacionamentos: Como esses objetos se conectam (ex.: Cliente faz Pedido).

Normalização dos dados:

  • 1ª Forma Normal (1NF): Cada campo com um único valor.
  • 2ª Forma Normal (2NF): Eliminar dependências parciais em chaves compostas.
  • 3ª Forma Normal (3NF): Eliminar dependências transitivas.

Melhores práticas:

  • Chaves primárias e chaves estrangeiras para manter integridade dos dados.
  • Indexação para melhorar a performance de consultas.
  • Monitoramento contínuo do banco para otimizar consultas grandes.

Exemplo de aplicação:

  • Em sistemas de vendas, é necessário dividir dados em tabelas como Clientes, Pedidos, Produtos para evitar repetição de informações.

3. Modelagem de Requisitos de Software ​​

Requisitos de Software:

  • Requisitos Funcionais:
    Descrevem o que o sistema faz (ex.: “Usuário pode se cadastrar”).
  • Requisitos Não Funcionais:
    Definem qualidades do sistema (ex.: “O sistema deve carregar em 2 segundos”).
  • Requisitos de Domínio:
    Específicos de uma área (ex.: um sistema médico que precisa seguir normas de saúde).

Levantamento de requisitos:

  • Técnicas: entrevistas, questionários, observação direta, workshops.
  • Ferramentas: UML, JIRA, Trello.

Documentação:

  • Especificação de Requisitos de Software (SRS): documento técnico detalhado.
  • User Stories (Histórias de Usuário):
    Exemplo: “Como cliente, quero adicionar produtos ao carrinho para finalizar minha compra.”

Requisitos em Metodologias Ágeis:

  • Flexibilidade:
    Permitem mudanças rápidas durante o desenvolvimento.
  • Priorização:
    Entregam primeiro o que é mais importante.
  • User Stories e Critérios de Aceitação:
    Validam se a funcionalidade foi entregue corretamente.

Quadro Resumo para Aula

TemaPontos PrincipaisExemplos
Diagramas de Casos de UsoComo o usuário interage com o sistemaLoja online, Banco, Escola
Diagramas de ClassesEstrutura de dados do sistemaCadastro de clientes
Diagramas de SequênciaOrdem de interação entre objetosCompra online
Modelagem de DadosOrganização eficiente de informaçõesBanco de dados de vendas
Modelagem de RequisitosO que o sistema faz e como deve se comportarCadastro rápido e seguro

Sugestão para Apresentação Oral

Você pode dizer algo assim:

“Hoje vamos conhecer ferramentas essenciais para criar sistemas modernos: vamos entender como desenhar os requisitos de um sistema, organizar seus dados, planejar suas funções e testar se tudo está funcionando corretamente.”

Tabela de Jargões e Significados

JargãoSignificado
UML (Unified Modeling Language)Linguagem usada para desenhar diagramas que explicam como um sistema funciona.
Diagrama de Casos de UsoDesenho que mostra o que o sistema faz e como os usuários (atores) interagem com ele.
AtorQuem interage com o sistema (pessoa, sistema ou dispositivo).
Caso de UsoAção ou funcionalidade que o sistema deve realizar.
Relacionamento (UML)Ligação entre atores e casos de uso ou entre casos de uso diferentes.
Diagrama de ClassesRepresentação das partes de um sistema: suas informações (atributos) e ações (métodos).
Diagrama de SequênciaMostra a ordem em que as ações acontecem entre os objetos de um sistema.
Linha de VidaRepresenta o tempo de vida de um objeto enquanto ele interage no sistema.
Mensagem SíncronaComunicação onde quem envia espera uma resposta antes de continuar.
Mensagem AssíncronaComunicação onde quem envia não precisa esperar resposta para continuar.
Modelagem de Dados RelacionalTécnica para organizar as informações em bancos de dados, evitando erros e repetição.
EntidadeRepresentação de um objeto ou conceito real (ex: cliente, produto).
Relacionamento (Dados)Conexão entre duas entidades no banco de dados.
NormalizaçãoProcesso para organizar os dados em tabelas de forma correta, evitando repetições.
Chave PrimáriaIdentificador único de cada registro numa tabela (ex: CPF de uma pessoa).
Chave EstrangeiraLigação entre duas tabelas diferentes.
User StoryPequena história escrita do ponto de vista do usuário dizendo o que ele precisa fazer.
Critério de AceitaçãoCondições que mostram que uma funcionalidade foi feita corretamente.
MoSCoWTécnica para priorizar tarefas: Must (deve ter), Should (deveria ter), Could (poderia ter), Won’t (não terá agora).
Levantamento de RequisitosProcesso de descobrir tudo o que o sistema precisa fazer.
SRS (Software Requirements Specification)Documento formal que descreve todos os requisitos do sistema.
Framework ÁgilModelo de trabalho que permite fazer entregas rápidas e adaptáveis no desenvolvimento de software.
CI/CD (Integração Contínua/Entrega Contínua)Técnicas para automatizar testes e entregas de novos códigos em sistemas de forma rápida e segura.
WorkshopReunião prática e interativa para resolver problemas ou levantar informações.
ProtótipoModelo simples de um sistema feito para testar ideias antes de fazer a versão final.
Elicitação de RequisitosColeta de informações necessárias para definir o que o sistema precisa fazer.

Resumo Geral para Apresentação — Sistemas, Modelagem e Testes


1. Modelagem de Dados Relacionais

  • Conceitos-chave:
    Entidades (como “Cliente” ou “Produto”), Relacionamentos e Normalização (1ª, 2ª e 3ª Formas Normais)​.
  • Objetivo:
    Garantir organização dos dados, evitando redundância e melhorando a integridade.
  • Exemplos:
    Cadastro de clientes, pedidos em lojas virtuais.

2. Modelagem de Dados Não Relacionais

  • Tipos de bancos:
    • Documentos: Estruturam informações como JSON (ex: MongoDB).
    • Grafos: Representam conexões complexas (ex: Redes Sociais)​.
    • Chave-Valor: Para acesso ultra rápido de informações, como sessões de usuários​.
  • Importância:
    Usados onde precisamos de alta escalabilidade, consultas rápidas ou análise de redes.

3. Diagramas UML: Casos de Uso, Classes e Sequências

  • Casos de Uso:
    Mostram como usuários interagem com o sistema​.
  • Classes:
    Estruturam informações e métodos em sistemas​​.
  • Sequência:
    Representam o fluxo temporal de interações entre objetos​​.
  • Exemplos práticos:
    E-commerce (Cliente → Carrinho → Pagamento → Estoque).

4. Requisitos de Software

  • Funcionais:
    Definem o que o sistema faz (ex: “Cadastrar usuário”).
  • Não Funcionais:
    Definem qualidades do sistema (ex: “Tempo de resposta menor que 2 segundos”).
  • User Stories:
    Pequenas histórias que ajudam a entender melhor o que o usuário precisa.

5. Testes de Software

Testes Funcionais

  • O que são:
    Verificam se o sistema cumpre seus requisitos.
  • Técnicas:
    • Caixa Preta (testar sem saber o código).
    • Testes de equivalência, valor-limite.
    • Automação de testes (ex: usando pytest).
  • Importância:
    Garante que o sistema faça exatamente o que foi prometido.

Testes Não Funcionais ​

  • Tipos:
    • Desempenho:
      Avalia velocidade, escalabilidade e estabilidade.
    • Segurança:
      Testa vulnerabilidades e proteção de dados.
    • Usabilidade:
      Garante facilidade de uso e compatibilidade com vários dispositivos.
  • Exemplos reais:
    • Black Friday: Testes de carga para aguentar milhões de acessos​.
    • Aplicativos bancários: Testes de segurança e compatibilidade em vários celulares​.

6. Planejamento e Gestão de Testes

  • Planejamento de Testes:
    Definição de escopo, cronograma e recursos necessários​.
  • Gestão de Defeitos:
    • Identificar.
    • Registrar (documentar claramente).
    • Monitorar (corrigir e validar).
  • Testes Ágeis:
    Testar continuamente usando integração contínua (CI/CD).

Resumo Final para Aula

TemaFocoExemplos
Modelagem RelacionalOrganização e estruturação de dadosBanco de dados de vendas
Modelagem Não RelacionalEficiência e escalabilidadeMongoDB, Redis, Neo4j
Diagramas UMLEntender funcionamento e interaçõesSistema de Compras Online
RequisitosDefinir o que fazer e como se comportarCadastrar usuário rapidamente
Testes FuncionaisVerificar se tudo funciona como planejadoCadastro de clientes
Testes Não FuncionaisGarantir qualidade, segurança e desempenhoTeste de carga em Black Friday

💬 Sugestão de Introdução para Apresentação:

“Hoje vamos explorar como projetar sistemas, organizar dados, definir funções e testar tudo para garantir que a tecnologia funcione de maneira rápida, segura e fácil de usar no nosso dia a dia.”