Exercício JSISFILA
Exercício JSISFILA
O SISFILA é uma aplicação web implementada em Ruby on Rails para gerenciar filas de atendimento. Ele foi usado para agilizar o atendimento de alunos na matrícula presencial de 3 cursos da UFBA para o semestre 2018.2. Seu nome é uma homenagem aos nomes de alguns sistemas criados pela STI-UFBA, como SISCON, SISBIC, SISBIEX, SISPER, SISAU, entre outros.
Neste exercício você desenvolverá e testará um sistema baseado no SISFILA, o JSISFILA, implementado em Java, a partir de uma especificação.
Durante a aula criaremos um design orientado a objetos a partir da especificação. Todos devem seguir esse design na hora de implementar e testar.
Exercício 1
Implemente os requisitos iniciais e crie testes automatizados para eles. Use como base o código em https://classroom.github.com/g/pcl40VAm. Você pode criar novos métodos e atributos se necessário. Para fins didáticos, sugere-se o uso de TDD.
Exercício 2
Partindo do código criado no exercício 1 (https://classroom.github.com/g/pcl40VAm), crie uma branch a partir do commit inicial do repositório, chamada spies
. Nessa branch, crie duas classes de teste, chamadas SituacaoTest
e EnfileiraTest
, nas quais você deve testar, respectivamente, os métodos situacaoNaFila()
e enfileira()
. Cada classe deve testar o método correspondente de forma isolada, criando spies do Mockito para garantir que nenhuma outra parte do código é exercitada pelos testes. Além disso, deve-se atingir 100% de cobertura nos dois métodos somente com os testes dessas classes. Ao usar spies, lembre-se de usar a forma doReturn(x).when(obj).metodo()
.
Requisitos iniciais
- Inicialmente, o sistema precisa atender a apenas um colegiado
- O colegiado é identificado unicamente por uma string formada por exclusivamente por letras maiúsculas (ex.: BCC, BSI, LC…), e por um nome (obrigatório)
- O sistema deve permitir que o usuário digite letras minúsculas, mas estas devem ser convertidas para maiúsculas
- O colegiado possui alunos
- Todo aluno possui um número de matrícula, que é um número de 9 dígitos que o identifica unicamente
- Durante a matrícula presencial, o aluno pode digitar seu número de matrícula em um telão, para entrar no final da fila de atendimento
- Se o número de matrícula for inválido, o sistema deve informar que a matrícula é inválida
- Se o número de matrícula for válido, mas não estiver na lista do colegiado, o sistema deve informar que não está na lista do colegiado
- Se o aluno estiver sendo atendido no momento, ele não pode entrar na fila (o sistema deve informar que ele já está sendo atendido)
- Se o aluno já estiver na fila e não tiver sido atendido ainda, ele não pode entrar na fila novamente
- Pode-se consultar a posição na fila de qualquer pessoa através de seu número de matrícula. Possíveis resultados:
- “Está na sua vez”
- “Você é o Xº da fila”
- “Você já foi atendido”
- “Você não está na fila”
- O sistema deve informar a quantidade de atendimentos realizados (ou em andamento) e o número de atendimentos a serem realizados.
- O sistema deve informar o total de alunos atendidos.
- O colegiado pode ver quem é o aluno atual na fila e chamar o próximo aluno da fila
Evolução: múltiplos colegiados
- O sistema possui múltiplos colegiados. Cada aluno pode estar em no máximo um colegiado.
- Cada colegiado possui uma fila
- Ao digitar o número de matrícula, o aluno deve ir para a fila do colegiado ao qual pertence.
Evolução: múltiplas filas e grupos
- Em um dado momento, um colegiado pode atender a múltiplas filas, sendo que cada possui um código (até 5 caracteres) e uma prioridade, que é um número inteiro positivo (quanto menor, mais prioritário)
- Não pode haver duas filas com a mesma prioridade.
- Se as filas A e B têm prioridades 1 e 2, respectivamente, e cria-se uma fila C com a prioridade 1, então as filas A e B passam a ter prioridade 2 e 3, respectivamente (shift down)
- Cada fila está associada a um grupo de alunos de um colegiado. Por exemplo, pode haver um grupo “alunos formandos”, um grupo “alunos com coeficiente de rendimento maior que 6,0” etc.
- Um aluno pode pertencer a mais de um grupo
- O grupo não pode conter alunos de múltiplos colegiados
- Ao digitar o número de matrícula, o aluno deve ir para a fila mais prioritária associada a um grupo ao qual ele pertence
- Quando o colegiado chama o próximo aluno, deve-se chamar o próximo aluno da fila mais prioritária que ainda tiver alunos a serem chamados.
- Naturalmente, todas as operações devem continuar funcionando