Projeto de Programação 2

Imagem do Produto

Sistema de Delivery de Produtos (MyFood)

O projeto desse semestre será um sistema simples de delivery (baseado no iFood). Vocês deverão implementar esse sistema baseando-se na ideia de testes de aceitação. Para aqueles que não tentaram o projeto enviado para treino, os testes de aceitação são um modo de avaliar se a sua implimentação atende aos requesitos para o sistema que queremos que vocês desenvolvam. Mas não se mantenham somente a isso.

Informações indispensaveis:

Os testes de aceitação acessam apenas a lógica do negócio, não a interface com o usuário. Em um sistema qualquer, interfaces bonitas e fáceis de usar são uma característica muito importante. Entretanto, para facilitar a vida de vocês, só faremos a lógica de negócio do sistema, sem implementação alguma de interface visual com o usuário. Também é uma regra importante separar a interface com o usuário da lógica de negócio e fazer com que seu projeto não tenha interface com o usuário é uma forma de você sacar esse ponto arquitetural importante.

Como no projeto "teste", aqui vocês terão que projetar e implementar o sistema de uma forma incremental. Haverá alguns milestones e, em cada um, novas funcionalidades serão adicionadas ao sistema. As funcionalidades estão descritas dentro de User Stories. Uma User Story (us) consiste de duas partes:

Em cada um dos milestones no repositorio do GitHub, haverá um conjunto de user stories que deverá ser implementado.

Descrição do Projeto

Descrição geral

O propósito do projeto é de construir um sistema de delivery. O sistema consiste de um aplicativo onde seja possível realizar cadatro de empresas (restaurantes, mercados, farmacias, etc...), clientes (usuários) e entregadores. Além dos seus dados associados tais como produtos e pedidos. O sistema deve ser capaz de atender a demanda de usuários famintos.

User Stories

User Story Título Breve Descrição
1 Criação de contas Permita a um usuário criar uma conta no MyFood, O usuário poderá ser de dois tipos, Cliente e Dono de Empresa.
2 Criação de Restaurantes Permita que um usuário do tipo dono de empresa crie seu restaurante no MyFood.
3 Criação de Produtos Permita que um usuário do tipo dono de restaurante crie produtos para sua empresa.
4 Criação de Pedidos Permita que clientes adicionem produtos de uma empresa a seu carrinho e realizem a compra.
5 Criação de Mercados Permita que um usuário do tipo dono de empresa crie seu mercado, no MyFood.
6 Criação de Farmacia Permita que um usuário do tipo dono de empresa crie sua farmacia no MyFood.
7 Criação de Entregador Permita a um usuário criar uma conta no MyFood, O usuário poderá ser agora de tres tipos, Cliente e Dono de Empresa e Entregador.
8 Sistema de entregas Permita a um usuário receber seus produtos, e que os entregadores possam saber os pedidos existentes e iniciar o processo dce entrega.

Testes de Aceitação

Você pode baixar os testes de aceitação pelo repositorio do GitHub. Os quais você deve rodar para saber se o seu sistema está atendendo direitinho os requisitos. Você usará o EasyAccept para rodar os testes. Para poder rodar os testes, vocês precisarão criar uma Facade que acessa a logica do seu sistema segundo uma linguagem de script que foi criada para os testes de aceitação.

Milestone 1
Milestone 2

Persistencia de dados

Num sistema de informação real, a persistência dos dados usaria provavelmente um banco de dados. Não faremos isso aqui. A informação persistente pode ser feita em arquivo XML (vejam java.beans.XMLEncoder e java.beans.XMLDecoder).

Linguagem de Script

Para acessar a business logic de seu programa e poder realizar os testes de aceitação, você precisará implementar uma linguagem de script que consiste nos comandos abaixo. Esses são os comandos usados nos testes de aceitação. (us1.txt, us2.txt, etc.) Cada um deles deve corresponder a um método na sua facade. Observem que nos proprios testes existem algumas explicações sobre as variáveis, atributos e metodos correspondentes.

Obs: estão listados apenas os comandos usados nos testes das User Stories 1 a 4.

      <void> zerarSistema
      <void> encerrarSistema
      <void> criarUsuario nome=<String> email=<String> senha=<String> endereco=<String>
      <int> login email=<String> senha=<String>
      <String> getAtributoUsuario id=<int> atributo=<String>
      <int> criarEmpresa tipoEmpresa=<String> dono=<int> nome=<String> endereco=<String> tipoCozinha=<String>
      <List<List>> getEmpresasDoUsuario idDono=<int>
      <String> getAtributoEmpresa empresa=<int> atributo=<String>
      <int> getIdEmpresa idDono=<int> nome=<String> indice=<int>
      <int> criarProduto empresa=<int> nome=<String> valor=<Float> categoria=<String>
      <void> editarProduto produto=<int> nome=<String> valor=<Float> categoria=<String>
      <String> getProduto nome=<String> empresa=<int> atributo=<String>
      <List> listarProdutos empresa=<int>
      <int> criarPedido cliente=<int> empresa=<int>
      <void> adcionarProduto numero=<int> produto=<int>
      <String> getPedidos numero=<int> atributo=<String>
      <void> fecharPedido numero=<int>
      <void> removerProduto pedido=<int> produto=<String>
      <int> getNumeroPedido cliente=<int> empresa=<int> indice=<int>
    

Obs: estão listados apenas os comandos novos nos testes das User Stories 5 a 8.

      <int> criarEmpresa tipoEmpresa=<String> dono=<int> nome=<String> endereco=<String> tipoCozinha=<String> abre=<String> fecha=<String> tipoMercado=<String>
      <int> criarEmpresa tipoEmpresa=<String> dono=<int> nome=<String> aberto24Horas=<Boolean> numeroFuncionarios=<int>
      <void> alterarFuncionamento mercado=<int> abre=<String> fecha=<String>
      <void> cadastrarEntregador empresa=<int> entregador=<int>
      <int> criarUsuario nome=<String> email=<String> senha=<String> endereco=<String> veiculo=<String> endereco=<placa>
      <List> getEntregadores empresa=<int>
      <List> getEmpresas entregador=<int>
      <void> liberarPedido numero=<int>
      <int> obterPedido entregador=<int>
      <int> criarEntrega pedido=<int> entregador=<int> destino=<String>
      <String> getEntrega id=<int> atributo=<String>
      <int> getIdEntrega pedido=<int>
      <void> entregar entrega=<int>
    

Milestones

Teremos 2 milestones.
Vocês vão observar que não pedi interface gráfica (Swing ou Web). Tem dois motivos:

Instruções de Entrega do Projeto My Food

  1. Formato de Entrega:
  2. Testes em Máquina Diferente:
  3. Penalidade por Falha na Compilação:
  4. Conteúdo do Relatório::
  5. Critérios de Avaliação::
  6. Revisão do Projeto::
Certifique-se de seguir todas as instruções detalhadamente para garantir uma avaliação justa e completa do projeto.

Glossário