From d01ae0027b00063b60c147d945265a999f2b4443 Mon Sep 17 00:00:00 2001 From: avlis-mat Date: Sun, 16 Nov 2025 18:45:17 -0300 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20especifica=C3=A7=C3=A3o=20dos=20cen?= =?UTF-8?q?=C3=A1rios=20BDD=20das=20issues=2012=20a=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- desktop.ini | 2 + .../cadastrar_usuarios_do_sistema_100.feature | 34 ++ .../criar_formulario_de_avaliacao_103.feature | 45 ++ .../criar_template_de_formulario_102.feature | 39 ++ features/desktop.ini | 2 + ...rar_relatorio_do_administrador_101.feature | 32 ++ features/importar_dados_do_sigaa_98.feature | 33 ++ features/responder_formulario.feature | 38 ++ wiki.md | 425 ++++++++++++++++++ 9 files changed, 650 insertions(+) create mode 100644 desktop.ini create mode 100644 features/cadastrar_usuarios_do_sistema_100.feature create mode 100644 features/criar_formulario_de_avaliacao_103.feature create mode 100644 features/criar_template_de_formulario_102.feature create mode 100644 features/desktop.ini create mode 100644 features/gerar_relatorio_do_administrador_101.feature create mode 100644 features/importar_dados_do_sigaa_98.feature create mode 100644 features/responder_formulario.feature create mode 100644 wiki.md diff --git a/desktop.ini b/desktop.ini new file mode 100644 index 0000000000..c7055a5543 --- /dev/null +++ b/desktop.ini @@ -0,0 +1,2 @@ +[.ShellClassInfo] +IconResource=C:\Program Files\Google\Drive File Stream\117.0.0.0\GoogleDriveFS.exe,26 diff --git a/features/cadastrar_usuarios_do_sistema_100.feature b/features/cadastrar_usuarios_do_sistema_100.feature new file mode 100644 index 0000000000..75f0a483aa --- /dev/null +++ b/features/cadastrar_usuarios_do_sistema_100.feature @@ -0,0 +1,34 @@ +# language: pt + +Funcionalidade: Cadastrar Usuários do Sistema + Como Administrador do sistema + Eu quero solicitar definição de senha para participantes importados do SIGAA + Para que eles possam acessar o sistema CAMAAR + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E foram importados os seguintes usuários do SIGAA: + | matricula | nome | email | tipo | + | 123456 | João Silva | joao@aluno.unb.br | aluno | + | 789012 | Maria Santos | maria@aluno.unb.br | aluno | + | 456789 | Prof. Carlos | carlos@unb.br | professor | + + # CENÁRIOS FELIZES + + Cenário: Enviar convite de cadastro para usuário importado + Dado que o usuário "João Silva" foi importado mas não definiu senha + Quando eu acesso a página de gerenciamento de usuários + E eu seleciono o usuário "João Silva" + E eu clico em "Enviar Convite de Cadastro" + Então eu devo ver "Convite enviado com sucesso para joao@aluno.unb.br" + E o usuário deve receber um email com link de definição de senha + E o link deve expirar em 48 horas + E o status do usuário deve mudar para "Convite Enviado" + + + # CENÁRIOS TRISTES + + Cenário: Tentar enviar convite para usuário já ativo + Dado que o usuário "Prof. Carlos" tem status "Ativo" + Quando eu tento enviar convite para este usuário + Então eu devo ver "Este usuário já possui cadastro ativo" \ No newline at end of file diff --git a/features/criar_formulario_de_avaliacao_103.feature b/features/criar_formulario_de_avaliacao_103.feature new file mode 100644 index 0000000000..8a1bf80258 --- /dev/null +++ b/features/criar_formulario_de_avaliacao_103.feature @@ -0,0 +1,45 @@ +# language: pt + +Funcionalidade: Criar Formulário de Avaliação + Como Administrador do sistema + Eu quero criar formulários de avaliação baseados em templates existentes + Para que eu possa avaliar o desempenho das turmas no semestre atual + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E existe um template chamado "Avaliação Semestral" com 5 questões + E existem as seguintes turmas cadastradas: + | codigo | nome | semestre | + | CIC0097 | BANCOS DE DADOS | 2021.2 | + | CIC0105 | ENGENHARIA DE SOFTWARE | 2021.2 | + | CIC0202 | PROGRAMAÇÃO CONCORRENTE | 2021.2 | + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Criar formulário para uma turma com sucesso + Dado que estou na página de gerenciamento + Quando eu clico no botão "Enviar Formulários" + E eu seleciono o template "Avaliação Semestral" + E eu seleciono a turma "CIC0097" + E ela tem o semestre "2021.2" + E eu clico no botão "Enviar" + Então eu devo ver a mensagem "Formulário de avaliação enviado com sucesso" + E o formulário deve estar disponível para a turma "CIC0097" + E o formulário deve conter as 5 questões do template + + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar criar formulário sem selecionar template + Dado que estou na página de gerenciamento + Quando clico no botão "Enviar Formulários" + E eu seleciono a turma "CIC0105" + E ela tem o semestre "2021.2" + E eu clico em "Enviar" + Então eu devo ver a mensagem de erro "Template é obrigatório" + E nenhum formulário deve ser criado + E eu devo permanecer na página de gerenciamento \ No newline at end of file diff --git a/features/criar_template_de_formulario_102.feature b/features/criar_template_de_formulario_102.feature new file mode 100644 index 0000000000..c55057ab6f --- /dev/null +++ b/features/criar_template_de_formulario_102.feature @@ -0,0 +1,39 @@ +# language: pt + +Funcionalidade: Criar Template de Formulário + Como Administrador do sistema + Eu quero criar templates de formulários com questões personalizadas + Para que eu possa gerar formulários de avaliação reutilizáveis para avaliar o desempenho das turmas + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E estou na página de gerenciamento de templates + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Criar template de formulário com sucesso + Quando eu clico no botão "Novo Template" + E eu preencho o campo "Nome do Template" com "Avaliação de Desempenho Docente 2025" + E eu clico em "Adicionar Questão" + E eu seleciono o tipo de questão "Dissertativa" + E eu preencho o enunciado da questão com "Como você avalia a didática do professor?" + E eu clico no botão "Criar" + Então eu devo ver a mensagem "Template criado com sucesso" + E eu devo ver "Avaliação de Desempenho Docente 2025" na lista de templates + E o template deve aparecer como disponível para uso + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar criar template sem nome + Quando eu clico no botão "Novo Template" + E eu deixo o campo "Nome do Template" vazio + E eu preencho o campo "Descrição" com "Template sem nome" + E eu adiciono uma questão dissertativa + E eu clico no botão "Criar" + Então eu devo ver a mensagem de erro "Nome do template é obrigatório" + E nenhum template deve ser criado + \ No newline at end of file diff --git a/features/desktop.ini b/features/desktop.ini new file mode 100644 index 0000000000..c7055a5543 --- /dev/null +++ b/features/desktop.ini @@ -0,0 +1,2 @@ +[.ShellClassInfo] +IconResource=C:\Program Files\Google\Drive File Stream\117.0.0.0\GoogleDriveFS.exe,26 diff --git a/features/gerar_relatorio_do_administrador_101.feature b/features/gerar_relatorio_do_administrador_101.feature new file mode 100644 index 0000000000..d590706476 --- /dev/null +++ b/features/gerar_relatorio_do_administrador_101.feature @@ -0,0 +1,32 @@ +# language: pt + +Funcionalidade: Gerar Relatório do Administrador + Como Administrador do sistema + Eu quero baixar um arquivo CSV contendo os resultados de um formulário + Para que eu possa avaliar o desempenho das turmas + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E existe um formulário "Avaliação Semestral" para a turma "CIC0097" + E o formulário possui 10 respostas de alunos + + # CENÁRIOS FELIZES + + Cenário: Baixar relatório em CSV com sucesso + Dado que estou na página de gerenciamento de resultados + Quando eu clico no formulário "Avaliação Semestral" + Então o download do arquivo "avaliacao-semestral-cic0097.csv" deve iniciar + E o arquivo deve conter os cabeçalhos das colunas + E o arquivo deve conter as 10 respostas dos alunos + E eu devo permanecer na página de gerenciamento de resultados + + # CENÁRIOS TRISTES + + Cenário: Tentar baixar relatório de formulário sem respostas + Dado que estou na página de gerenciamento de resultados + E existe um formulário "Avaliação Nova" sem respostas + Quando eu clico nesse formulário + Então eu devo ver a mensagem de aviso "Este formulário ainda não possui respostas" + E o download do arquivo "avaliacao-nova-CIC0097.csv" deve iniciar + E o arquivo deve conter os cabeçalhos das colunas + E eu devo permanecer na página de gerenciamento de resultados \ No newline at end of file diff --git a/features/importar_dados_do_sigaa_98.feature b/features/importar_dados_do_sigaa_98.feature new file mode 100644 index 0000000000..363c7be0a3 --- /dev/null +++ b/features/importar_dados_do_sigaa_98.feature @@ -0,0 +1,33 @@ +# language: pt + +Funcionalidade: Importar Dados do SIGAA + Como Administrador do sistema + Eu quero importar dados de turmas, matérias e participantes do SIGAA + Para que eu possa alimentar a base de dados do sistema + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E estou na página de gerenciamento + + # CENÁRIOS FELIZES + + Cenário: Importar turmas com sucesso + Quando eu seleciono clico no botão "Importar dados" + E eu seleciono o arquivo JSON "turmas.json" + E o arquivo contém 1 turma válidas + E nenhuma turma já existe na base de dados + E eu clico em "Importar" + Então eu devo ver a mensagem "1 turmas importadas com sucesso" + E a turma deve estar cadastrada no sistema + E devo ver o relatório de importação + + + # CENÁRIOS TRISTES + + Cenário: Tentar importar arquivo JSON inválido + Quando eu seleciono um arquivo "dados_invalidos.json" + E o arquivo não possui formato JSON válido + E eu clico em "Importar" + Então eu devo ver a mensagem de erro "Arquivo JSON inválido" + E devo ver "Verifique a sintaxe do arquivo" + E nenhum dado deve ser importado \ No newline at end of file diff --git a/features/responder_formulario.feature b/features/responder_formulario.feature new file mode 100644 index 0000000000..653482070c --- /dev/null +++ b/features/responder_formulario.feature @@ -0,0 +1,38 @@ +# language: pt + +Funcionalidade: Responder Formulário de Avaliação + Como Participante de uma turma + Eu quero responder o questionário sobre a turma em que estou matriculado + Para que eu possa submeter minha avaliação da turma + + Contexto: + Dado que estou logado como aluno com email "aluno@unb.br" + E estou matriculado na turma "CIC0097" + E existe um formulário ativo para minha turma + E o formulário contém 5 questões + + # CENÁRIOS FELIZES + + Cenário: Responder formulário com sucesso + Dado que estou na página de avaliações + Quando eu clico no formulário "Avaliação Semestral" + E eu respondo a questão 1 com "O professor tem boa didática" + E eu respondo a questão 2 com "Sim" + E eu respondo a questão 3 com nota "8" + E eu respondo a questão 4 com "O conteúdo foi relevante" + E eu respondo a questão 5 com "Não" + E eu clico no botão "Enviar Respostas" + Então eu devo ver a mensagem "Respostas enviadas com sucesso" + E eu devo ver esse formulário como "Respondido" + + # CENÁRIOS TRISTES + + Cenário: Tentar responder formulário sem preencher todas as questões obrigatórias + Dado que estou respondendo o formulário "Avaliação Semestral" + Quando eu respondo apenas a questão 1 com "Ótimo professor" + E eu deixo as questões 2, 3, 4 e 5 sem resposta + E eu clico em "Enviar Respostas" + Então eu devo ver a mensagem de erro "Por favor, responda todas as questões obrigatórias" + E as questões não respondidas devem estar destacadas + E o formulário não deve ser enviado + E eu devo permanecer na página do formulário \ No newline at end of file diff --git a/wiki.md b/wiki.md new file mode 100644 index 0000000000..4761717f52 --- /dev/null +++ b/wiki.md @@ -0,0 +1,425 @@ +# Sprint 1 - Sistema CAMAAR + +## 📋 Informações do Grupo + +**Grupo:** Grupo 3 +**Projeto:** CAMAAR - Sistema para Avaliação de Atividades Acadêmicas Remotas +**Escopo:** Avaliação de Atividades Acadêmicas + +### Integrantes + +| Nome | Matrícula | Email | GitHub | +|------|-----------|-------|--------| +| Mateus Santos da Silva | 190018011 | 190018011@aluno.unb.br | @avlis-mat | +| Cauet | [Matrícula 2] | [Email 2] | @[usuario-2] | +| Henrique | [Matrícula 3] | [Email 3] | @[usuario-3] | + +--- + +## 👥 Papéis da Sprint + +- **Scrum Master:** Mateus +- **Product Owner:** Henrique + +--- + +## 🎯 Funcionalidades Desenvolvidas + + +### Issue #103: Criar formulário de avaliação + +**Responsável:** Mateus +**Pontos:** 8 +**Status:** Cenários BDD especificados + +**História de Usuário:** +> **Como** Administrador do sistema +> **Eu quero** criar um formulário baseado em um template para as turmas que eu escolher +> **Para que** eu possa avaliar o desempenho das turmas no semestre atual + +**Regras de Negócio:** +- **RN01:** Apenas usuários com perfil de Administrador podem criar formulários +- **RN02:** Template é obrigatório e deve existir no sistema +- **RN03:** Pelo menos uma turma deve ser selecionada +- **RN04:** Período de disponibilidade é obrigatório (semestre) +- **RN05:** Professor é obrigatório +- **RN06:** Formulário herda todas as questões do template selecionado +- **RN07:** Título do formulário é definido como "[Avaliação] - [Nome_da_matéria] - [Semestre]" +- **RN08:** Respostas devem ser anônimas +- **RN09:** Usuário deve visualizar confirmação de resposta +- **RN10:** Usuário não deve virualizar resposta + +#### Dependências + +**Pré-requisitos:** +- Issue #102: Criar Template de Formulário (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar formulário para uma turma com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar formulário sem selecionar template + +**Total de cenários:** 2 +--- + +#### Campos do Formulário + +| Campo | Tipo | Obrigatório | Descrição | +|-------|------|-------------|-----------| +| Template | Seleção | Sim | Template base para o formulário | +| Turmas | Múltipla seleção | Sim | Uma ou mais turmas para avaliação | +| Semestre | Seleção | Sim | Semestre considerado | +| Professor | Seleção | Sim | Professo da Turma | +| Título | Texto | Sim | Título personalizado (padrão: nome do template) | + +#### Arquivo de Especificação + +📄 `features/criar_formulario_avaliacao.feature` + +--- + +### Issue #102: Criar Template de Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário (Padrão Connextra) + +> **Como** Administrador do sistema +> **Eu quero** criar templates de formulários contendo questões personalizadas +> **Para que** eu possa gerar formulários de avaliação reutilizáveis para avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas usuários com perfil de Administrador podem criar templates +- **RN02:** Nome do template é obrigatório e deve ter entre 3 e 100 caracteres +- **RN03:** Nome do template deve ser único no sistema +- **RN04:** Template deve conter pelo menos 1 questão +- **RN05:** Cada questão deve ter um enunciado obrigatório +- **RN06:** Questões de múltipla escolha devem ter no mínimo 2 alternativas + +#### Tipos de Questões Suportadas + +| Tipo | Descrição | +|------|-----------| +| Dissertativa | Resposta em texto livre | +| Múltipla Escolha | Seleção de uma alternativa entre várias opções | + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar template de formulário com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar template sem nome + +**Total de cenários:** 2 + +#### Arquivo de Especificação + +📄 `features/criar_template_formulario.feature` + +--- + +### Issue #101: Gerar Relatório do Administrador + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** baixar um arquivo CSV contendo os resultados de um formulário +> **Para que** eu possa avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem gerar relatórios +- **RN02:** Relatório deve ser gerado em formato CSV +- **RN03:** CSV deve conter cabeçalhos identificando as colunas +- **RN04:** Dados devem seguir padrão CSV (vírgula como separador, aspas para texto com vírgula) +- **RN05:** Nome do arquivo deve identificar o formulário e período +- **RN06:** Possível filtrar respostas por Nome da matéria +- **RN07:** Formulários não devem expor identificação dos respondentes +- **RN08:** Relatório sem respostas deve gerar arquivo apenas com cabeçalhos + +#### Estrutura do CSV +```csv +ID,Data,Turma,Questão,Resposta,Tipo +1,2025-03-10 14:30,Cálculo 1,Como você avalia?,Ótimo,Dissertativa +2,2025-03-10 15:45,Cálculo 1,Satisfeito?,Sim,Múltipla Escolha +3,2025-03-11 09:20,Cálculo 1,Nota de 1 a 10,8,Múltipla Escolha +``` + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Baixar relatório em CSV com sucesso + +**Cenários Tristes:** +- Tentar baixar relatório de formulário sem respostas + +**Total:** 2 cenários + +#### Dependências + +- Issue #03: Criar Formulário de avaliação (deve existir formulário) +- Issue #99: Responder Formulário (devem existir respostas) + +#### Arquivo + +📄 `features/gerar_relatorio_do_dministrador_101.feature` + +--- + +### Issue #100: Cadastrar Usuários do Sistema + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** cadastrar participantes de turmas do SIGAA ao importar dados de usuarios novos para o sistema +> **Para que** eles possam acessar o sistema CAMAAR + +**Observação Importante:** O cadastro do usuário só é efetivado após a definição da senha pelo próprio usuário. + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem enviar convites de cadastro +- **RN02:** Usuário só existe na base após importação (Issue #98) +- **RN03:** Cadastro é um processo em duas etapas: importação + definição de senha +- **RN04:** Link de convite expira em 48 horas +- **RN05:** Após definir senha, usuário está apto a fazer login +- **RN06:** Administrador pode reenviar convite (invalida link anterior) +- **RN07:** Sistema mantém histórico de convites enviados + +#### Status de Usuário + +| Status | Descrição | +|--------|-----------| +| Pendente | Importado, aguardando envio de convite | +| Convite Enviado | Convite enviado, aguardando definição de senha | +| Ativo | Senha definida, pode fazer login | +| Link Expirado | Convite expirou, precisa reenviar | + + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Enviar convite de cadastro para usuário importado + +**Cenários Tristes:** +- Tentar definir senha com formato inválido + +**Depende de:** +- Issue #17: Importar Dados do SIGAA (usuários devem ser importados primeiro) + +**Usado por:** +- Sistema de autenticação (login) + +#### Arquivo + +📄 `features/cadastrar_usuarios_do_sistema.feature` + +--- + +### Issue #99: Responder Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Participante de uma turma +> **Eu quero** responder o questionário sobre a turma em que estou matriculado +> **Para que** eu possa submeter minha avaliação da turma + +#### Regras de Negócio + +- **RN01:** Apenas alunos autenticados podem responder formulários +- **RN02:** Aluno só pode responder formulários das turmas em que está matriculado +- **RN03:** Todas as questões obrigatórias devem ser respondidas +- **RN04:** Formulário só pode ser respondido uma vez por aluno +- **RN05:** Sistema deve pedir confirmação antes de enviar +- **RN06:** Após envio, não é possível editar respostas +- **RN07:** Após envio, é possível visualizar confirmação de resposta +- **RN08:** Após envio, não é possível visualizar respostas + +#### Dependências + +**Pré-requisitos:** +- Issue #103: Criar formulário de avaliação (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Responder formulário com sucesso + +**Cenários Tristes:** +- Tentar responder sem preencher todas as questões obrigatórias + +**Total:** 2 cenários + +#### Arquivo + +📄 `features/responder_formulario.feature` + +--- + +### Issue #98: Importar Dados do SIGAA + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** importar dados de turmas, matérias e participantes do SIGAA +> **Para que** eu possa alimentar a base de dados do sistema + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem importar dados +- **RN02:** Arquivos devem estar em formato JSON válido +- **RN03:** Sistema deve verificar se dados já existem antes de importar +- **RN04:** Dados duplicados devem ser ignorados, não sobrescritos +- **RN05:** Campos obrigatórios devem ser validados +- **RN07:** Sistema deve gerar relatório de importação +- **RN08:** Tamanho máximo de arquivo: 5MB +- **RN09:** Ordem de importação: Matérias → Turmas → Participantes +- **RN10:** Erros não devem interromper toda a importação (processar o que for válido) + +#### Estrutura dos JSONs + +**turmas.json:** +```json +{ + "turmas": [ + { + "codigo": "CIC0097", + "nome": "BANCOS DE DADOS", + "turma_codigo": "TA", + "semestre": "2021.2", + "horario": "35T45" + } + ] +} +``` + + +**participantes.json:** +```json +{ + "participantes": [ + { + "matricula": "123456", + "nome": "Maria Santos", + "curso": "CIÊNCIA DA COMPUTAÇÃO/CIC", + "email": "maria@aluno.unb.br", + "formacao": "graduando", + "ocupacao": "discente", + "usuario": "123456", + "usuario_has_turma": "CIC0097" + } + ] +} +``` +| Entidade | Campos Obrigatórios | +|----------|---------------------| +| Turma | codigo, nome, turma_codigo, semestre, horario | +| Participante | matricula, nome, curso, email, formacao, ocupacao, usuario, usuario_has_turma | + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Importar turmas com sucesso + + +**Cenários Tristes:** +- Tentar importar arquivo JSON inválido + +#### Arquivo + +📄 `features/importar_dados_do_sigaa_98.feature` + +--- + +## 🔄 Política de Branching + +O grupo adota a seguinte estratégia de branches: +``` +main (branch protegida - código do repositório original) + └── sprint-1 (branch da sprint - usada para Pull Request) + ├── feature/criar-template-formulario + ├── feature/[outra-funcionalidade] + └── feature/[outra-funcionalidade] +``` + +### Regras de Branching + +1. A branch `main` é protegida e recebe apenas Pull Requests aprovados +2. Para cada sprint, criamos uma branch `sprint-N` +3. Cada desenvolvedor trabalha em sua feature branch individual +4. Features são nomeadas seguindo o padrão: `feature/nome-da-funcionalidade` +5. Após aprovação do PR, a branch `sprint-N` não recebe mais commits + +### Convenção de Commits +``` +feat: Adiciona cenários BDD para criar template de formulário - Issue #13 +test: Adiciona cenário de validação de nome duplicado - Issue #13 +docs: Atualiza Wiki com informações da Sprint 1 +fix: Corrige enunciado do cenário de múltipla escolha - Issue #13 +``` + +**Padrão:** +- `feat:` Nova funcionalidade ou cenário +- `test:` Adição ou modificação de testes +- `docs:` Documentação +- `fix:` Correção de erros +- Sempre referenciar a issue (#13, #14, etc.) + +--- + +## 📈 Velocity da Sprint + +**Pontos Planejados:** [Total de pontos de todas as issues] +**Pontos Concluídos:** [Total de pontos de todas as issues] +**Velocity da Sprint:** [Total] pontos + +### Distribuição de Pontos por Funcionalidade + +| Issue | Funcionalidade | Responsável | Pontos | Status | +|-------|----------------|-------------|--------|--------| +| #103 | Criar formulário de avaliação | Mateus | 8 | ✅ Especificado | +| #102 | Criar Template de Formulário | Mateus | 5 | ✅ Especificado | +| #101 | Gerar reltório do administrador | Mateus | 5 | ✅ Especificado | +| #100 | Cadastrar usuários do sistema | Mateus | 5 | ✅ Especificado | +| #99 | Responder formulário | Mateus | 5 | ✅ Especificado | +| #98 | Importar dados do SIGAA | Mateus | 5 | ✅ Especificado | +| **TOTAL** | | | **[Total]** | **100%** | + +--- \ No newline at end of file From 1ac6690b62800a2069168c25abe12863c4864159 Mon Sep 17 00:00:00 2001 From: cauet-code <211060577@aluno.unb.br> Date: Mon, 17 Nov 2025 16:50:37 -0300 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20especifica=C3=A7=C3=A3o=20BDD=20das?= =?UTF-8?q?=20issues=20248,=20113,=20112,=20111,=20110,=20109=20-=20Cauet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...o_formulario_docentes_dicentes_113.feature | 67 ++ features/edicao_delecao_templates_112.feature | 50 ++ features/nova_issue_de_exemplo_248.feature | 38 + ...alizacao_formularios_responder_109.feature | 71 ++ ...lizacao_resultados_formularios_110.feature | 61 ++ ...visualizacao_templates_criados_111.feature | 56 ++ wiki.md | 673 ++++++++++++++++++ 7 files changed, 1016 insertions(+) create mode 100644 features/criacao_formulario_docentes_dicentes_113.feature create mode 100644 features/edicao_delecao_templates_112.feature create mode 100644 features/nova_issue_de_exemplo_248.feature create mode 100644 features/visualizacao_formularios_responder_109.feature create mode 100644 features/visualizacao_resultados_formularios_110.feature create mode 100644 features/visualizacao_templates_criados_111.feature create mode 100644 wiki.md diff --git a/features/criacao_formulario_docentes_dicentes_113.feature b/features/criacao_formulario_docentes_dicentes_113.feature new file mode 100644 index 0000000000..de97cfc23a --- /dev/null +++ b/features/criacao_formulario_docentes_dicentes_113.feature @@ -0,0 +1,67 @@ +# language: pt + +Funcionalidade: Criação de formulário para docentes ou dicentes + Como um Administrador + Eu quero escolher criar um formulário para os docentes ou os dicentes de uma turma + De modo que avaliar o desempenho de uma matéria + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E existe uma turma cadastrada com código "CIC0004" e nome "Algoritmos e Programação" + E existe um template chamado "Avaliação Docente" + + # CENÁRIOS FELIZES + + Cenário: Criar formulário para docentes com sucesso + Dado que estou na página de gerenciamento de formulários + Quando eu clico no botão "Novo Formulário" + E eu seleciono o tipo "Docentes" + E eu seleciono a turma "CIC0004" + E eu seleciono o template "Avaliação Docente" + E eu clico no botão "Criar Formulário" + Então devo ver a mensagem "Formulário criado com sucesso" + E o formulário deve estar disponível para os docentes da turma + E o formulário deve conter as questões do template + + Cenário: Criar formulário para dicentes com sucesso + Dado que estou na página de gerenciamento de formulários + Quando eu clico no botão "Novo Formulário" + E eu seleciono o tipo "Dicentes" + E eu seleciono a turma "CIC0004" + E eu seleciono o template "Avaliação Docente" + E eu clico no botão "Criar Formulário" + Então devo ver a mensagem "Formulário criado com sucesso" + E o formulário deve estar disponível para os alunos da turma + E o formulário deve conter as questões do template + + # CENÁRIOS TRISTES + + Cenário: Tentar criar formulário sem selecionar tipo + Dado que estou na página de gerenciamento de formulários + Quando eu clico no botão "Novo Formulário" + E eu não seleciono o tipo de formulário + E eu seleciono a turma "CIC0004" + E eu seleciono o template "Avaliação Docente" + E eu clico no botão "Criar Formulário" + Então devo ver a mensagem de erro "É necessário selecionar o tipo de formulário" + E o formulário não deve ser criado + + Cenário: Tentar criar formulário sem selecionar turma + Dado que estou na página de gerenciamento de formulários + Quando eu clico no botão "Novo Formulário" + E eu seleciono o tipo "Docentes" + E eu não seleciono uma turma + E eu seleciono o template "Avaliação Docente" + E eu clico no botão "Criar Formulário" + Então devo ver a mensagem de erro "É necessário selecionar uma turma" + E o formulário não deve ser criado + + Cenário: Tentar criar formulário sem selecionar template + Dado que estou na página de gerenciamento de formulários + Quando eu clico no botão "Novo Formulário" + E eu seleciono o tipo "Dicentes" + E eu seleciono a turma "CIC0004" + E eu não seleciono um template + E eu clico no botão "Criar Formulário" + Então devo ver a mensagem de erro "É necessário selecionar um template" + E o formulário não deve ser criado diff --git a/features/edicao_delecao_templates_112.feature b/features/edicao_delecao_templates_112.feature new file mode 100644 index 0000000000..654c9be9e9 --- /dev/null +++ b/features/edicao_delecao_templates_112.feature @@ -0,0 +1,50 @@ +# language: pt + +Funcionalidade: Edição e deleção de templates + Como um Administrador + Eu quero editar e/ou deletar um template que eu criei sem afetar os formulários já criados + De modo que organizar os templates existentes + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E existe um template chamado "Avaliação Docente" criado por mim + E existem formulários criados baseados neste template + + # CENÁRIOS FELIZES + + Cenário: Editar template existente com sucesso + Dado que estou na página de gerenciamento de templates + Quando eu clico em "Editar" no template "Avaliação Docente" + E eu altero o nome para "Avaliação Docente V2" + E eu clico em "Adicionar Questão" + E eu preencho o texto da questão com "Qual sua opinião sobre a didática?" + E eu seleciono o tipo como "Dissertativa" + E eu clico no botão "Salvar Alterações" + Então devo ver a mensagem "Template atualizado com sucesso" + E o template deve aparecer com o nome "Avaliação Docente V2" + E os formulários já criados não devem ser afetados + + Cenário: Deletar template com sucesso + Dado que estou na página de gerenciamento de templates + Quando eu clico em "Deletar" no template "Avaliação Docente" + E eu confirmo a exclusão clicando em "Sim, deletar" + Então devo ver a mensagem "Template deletado com sucesso" + E o template não deve aparecer na lista de templates + E os formulários já criados baseados neste template devem continuar funcionando + + # CENÁRIOS TRISTES + + Cenário: Tentar deletar template sem confirmação + Dado que estou na página de gerenciamento de templates + Quando eu clico em "Deletar" no template "Avaliação Docente" + E eu cancelo a exclusão clicando em "Cancelar" + Então o template deve continuar existindo na lista de templates + E devo ver a mensagem "Exclusão cancelada" + + Cenário: Editar template removendo questões obrigatórias + Dado que estou na página de gerenciamento de templates + Quando eu clico em "Editar" no template "Avaliação Docente" + E eu removo uma questão obrigatória + E eu clico no botão "Salvar Alterações" + Então devo ver a mensagem "Template atualizado com sucesso" + E os formulários criados devem manter as questões originais diff --git a/features/nova_issue_de_exemplo_248.feature b/features/nova_issue_de_exemplo_248.feature new file mode 100644 index 0000000000..eca9b3b9ea --- /dev/null +++ b/features/nova_issue_de_exemplo_248.feature @@ -0,0 +1,38 @@ +# language: pt + +Funcionalidade: Nova issue de exemplo + Como um usuário + Eu quero criar uma nova issue + De modo que ela apareça no meu Projects to Github + + Contexto: + Dado que estou logado no sistema + + # CENÁRIOS FELIZES + + Cenário: Criar issue com sucesso + Dado que estou na página de criação de issues + Quando eu preencho o título com "Nova funcionalidade de teste" + E eu preencho a descrição com "Esta é uma descrição detalhada da issue" + E eu clico no botão "Criar Issue" + Então devo ver a mensagem "Issue criada com sucesso" + E a issue deve aparecer na lista de issues do projeto + E a issue deve estar visível no Projects do Github + + # CENÁRIOS TRISTES + + Cenário: Tentar criar issue sem título + Dado que estou na página de criação de issues + Quando eu deixo o campo título vazio + E eu preencho a descrição com "Descrição sem título" + E eu clico no botão "Criar Issue" + Então devo ver a mensagem de erro "O título é obrigatório" + E a issue não deve ser criada + + Cenário: Tentar criar issue sem descrição + Dado que estou na página de criação de issues + Quando eu preencho o título com "Issue sem descrição" + E eu deixo a descrição vazia + E eu clico no botão "Criar Issue" + Então devo ver a mensagem de erro "A descrição é obrigatória" + E a issue não deve ser criada diff --git a/features/visualizacao_formularios_responder_109.feature b/features/visualizacao_formularios_responder_109.feature new file mode 100644 index 0000000000..784e89d998 --- /dev/null +++ b/features/visualizacao_formularios_responder_109.feature @@ -0,0 +1,71 @@ +# language: pt + +Funcionalidade: Visualização de formulários para responder + Como um Participante de uma turma + Eu quero visualizar os formulários não respondidos das turmas em que estou matriculado + De modo que poder escolher qual irei responder + + Contexto: + Dado que estou logado como aluno com email "aluno@unb.br" + E estou matriculado na turma "CIC0004" + E estou matriculado na turma "CIC0097" + E estou na página de formulários disponíveis + + # CENÁRIOS FELIZES + + Cenário: Visualizar formulários pendentes para responder + Dado que existe um formulário não respondido para a turma "CIC0004" + E existe um formulário não respondido para a turma "CIC0097" + Quando eu acesso a página de formulários disponíveis + Então devo ver a lista de formulários pendentes + E devo ver o nome do formulário "Avaliação Semestral" + E devo ver o código da turma "CIC0004" + E devo ver a data limite para responder + E devo ver o botão "Responder" para cada formulário + E devo poder clicar para abrir o formulário + + Cenário: Não visualizar formulários já respondidos + Dado que já respondi o formulário da turma "CIC0004" + E o formulário não respondido da turma "CIC0097" está disponível + Quando eu acesso a página de formulários + Então não devo ver o formulário da turma "CIC0004" na lista de pendentes + E devo ver apenas o formulário da turma "CIC0097" como pendente + E devo poder acessar minha resposta anterior na aba "Respondidos" + + Cenário: Visualizar abas de formulários pendentes e respondidos + Dado que tenho formulários respondidos e pendentes + Quando eu acesso a página de formulários + Então devo ver a aba "Pendentes" com formulários não respondidos + E devo ver a aba "Respondidos" com formulários já respondidos + E devo poder clicar em cada aba para alternar + E a aba "Pendentes" deve estar selecionada por padrão + + Cenário: Filtrar formulários por turma + Dado que tenho formulários de várias turmas + Quando eu seleciono um filtro por turma "CIC0004" + E eu clico em "Filtrar" + Então devo ver apenas formulários da turma "CIC0004" + E os formulários de outras turmas devem desaparecer + + # CENÁRIOS TRISTES + + Cenário: Visualizar mensagem quando não há formulários pendentes + Dado que respondeu todos os formulários das minhas turmas + Quando eu acesso a página de formulários + Então devo ver a mensagem "Não há formulários pendentes" + E devo ver a aba "Respondidos" com meus formulários respondidos + E não devo ver o botão "Responder" + + Cenário: Tentar responder formulário com prazo expirado + Dado que existe um formulário cuja data limite já passou + Quando eu acesso a página de formulários + Então devo ver o formulário com status "Prazo expirado" + E o formulário não deve ter o botão "Responder" habilitado + E devo ver a mensagem "Este formulário já expirou" + + Cenário: Não visualizar formulários de turmas que não estou matriculado + Dado que não estou matriculado na turma "CIC0202" + E existe um formulário para a turma "CIC0202" + Quando eu acesso a página de formulários + Então não devo ver o formulário da turma "CIC0202" + E devo ver apenas formulários das turmas que estou matriculado diff --git a/features/visualizacao_resultados_formularios_110.feature b/features/visualizacao_resultados_formularios_110.feature new file mode 100644 index 0000000000..07081de83b --- /dev/null +++ b/features/visualizacao_resultados_formularios_110.feature @@ -0,0 +1,61 @@ +# language: pt + +Funcionalidade: Visualização de resultados dos formulários + Como um Administrador + Eu quero visualizar os formulários criados + De modo que poder gerar um relatório a partir das respostas + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E existe um formulário "Avaliação Semestral" para a turma "CIC0097" + E o formulário possui 10 respostas de alunos + E estou na página de gerenciamento de resultados + + # CENÁRIOS FELIZES + + Cenário: Visualizar lista de formulários com respostas + Quando eu acesso a página de gerenciamento de resultados + Então devo ver todos os formulários criados + E cada formulário deve mostrar a turma associada + E cada formulário deve mostrar o número de respostas + E cada formulário deve mostrar a data de criação + E devo ver a opção "Ver Respostas" para cada formulário + + Cenário: Visualizar detalhes das respostas de um formulário + Dado que eu clico em "Ver Respostas" no formulário "Avaliação Semestral" + Quando a página de resultados carrega + Então devo ver todas as 10 respostas do formulário + E devo ver o nome do aluno que respondeu + E devo ver a data de resposta + E devo ver as respostas de cada questão + E devo ver estatísticas das respostas (média, moda, etc) + + Cenário: Gerar relatório em CSV com sucesso + Dado que estou visualizando as respostas do formulário "Avaliação Semestral" + Quando eu clico no botão "Gerar Relatório" + E eu seleciono o formato "CSV" + E eu clico em "Download" + Então o download do arquivo "avaliacao_semestral_cic0097.csv" deve iniciar + E o arquivo deve conter os cabeçalhos das colunas + E o arquivo deve conter todas as 10 respostas + E o arquivo deve estar em formato CSV válido + + Cenário: Filtrar respostas por data + Dado que estou na página de resultados + Quando eu seleciono o filtro de data "De 10/11/2025 até 17/11/2025" + E eu clico em "Aplicar Filtro" + Então devo ver apenas as respostas dentro do período selecionado + E o número de respostas deve ser atualizado + + # CENÁRIOS TRISTES + + Cenário: Visualizar formulário sem respostas + Dado que existe um formulário "Avaliação Nova" sem respostas + Quando eu clico em "Ver Respostas" deste formulário + Então devo ver a mensagem "Este formulário ainda não possui respostas" + E o arquivo CSV pode ser gerado mesmo sem dados + + Cenário: Tentar acessar relatório de formulário inexistente + Quando eu tento acessar o relatório de um formulário que não existe + Então devo ver a mensagem de erro "Formulário não encontrado" + E devo ser redirecionado para a página de gerenciamento de resultados diff --git a/features/visualizacao_templates_criados_111.feature b/features/visualizacao_templates_criados_111.feature new file mode 100644 index 0000000000..c3ab2816b1 --- /dev/null +++ b/features/visualizacao_templates_criados_111.feature @@ -0,0 +1,56 @@ +# language: pt + +Funcionalidade: Visualização dos templates criados + Como um Administrador + Eu quero visualizar os templates criados + De modo que poder editar e/ou deletar um template que eu criei + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E estou na página de gerenciamento de templates + + # CENÁRIOS FELIZES + + Cenário: Visualizar lista de templates com sucesso + Dado que existem templates criados no sistema: + | nome | questoes | data_criacao | + | Avaliação Docente | 5 | 2025-11-10 | + | Avaliação de Infraestrutura | 3 | 2025-11-12 | + | Feedback da Turma | 4 | 2025-11-15 | + Quando eu acesso a página de gerenciamento de templates + Então devo ver a lista de todos os templates + E cada template deve mostrar seu nome + E cada template deve mostrar a quantidade de questões + E cada template deve mostrar sua data de criação + E cada template deve ter opções de "Editar" e "Deletar" + + Cenário: Visualizar detalhes de um template + Dado que existe um template com nome "Avaliação de Infraestrutura" e 3 questões + Quando eu clico em "Visualizar" no template "Avaliação de Infraestrutura" + Então devo ver os detalhes completos do template + E devo ver todas as questões do template + E devo ver o tipo de cada questão (Dissertativa, Múltipla Escolha, etc) + E devo ver a data de criação do template + + Cenário: Pesquisar templates por nome + Dado que existem vários templates no sistema + Quando eu preencho o campo de busca com "Avaliação" + E eu clico em "Pesquisar" + Então devo ver apenas os templates que contenham "Avaliação" no nome + E os templates que não correspondem devem desaparecer + + # CENÁRIOS TRISTES + + Cenário: Visualizar templates quando não há nenhum criado + Dado que não existem templates criados no sistema + Quando eu acesso a página de gerenciamento de templates + Então devo ver a mensagem "Nenhum template encontrado" + E devo ver a opção "Criar Novo Template" + E a lista de templates deve estar vazia + + Cenário: Tentar visualizar template deletado + Dado que existem templates no sistema + E um template foi deletado + Quando eu tento acessar o template deletado + Então devo ver a mensagem de erro "Template não encontrado" + E devo ser redirecionado para a página de gerenciamento de templates diff --git a/wiki.md b/wiki.md new file mode 100644 index 0000000000..9333c357e3 --- /dev/null +++ b/wiki.md @@ -0,0 +1,673 @@ +# Sprint 1 - Sistema CAMAAR + +## 📋 Informações do Grupo + +**Grupo:** Grupo 3 +**Projeto:** CAMAAR - Sistema para Avaliação de Atividades Acadêmicas Remotas +**Escopo:** Avaliação de Atividades Acadêmicas + +### Integrantes + +| Nome | Matrícula | Email | GitHub | +|------|-----------|-------|--------| +| Mateus Santos da Silva | 190018011 | 190018011@aluno.unb.br | @avlis-mat | +| Cauet Gabriel Dias Braga | 211060577 | 211060577@aluno.unb.br | @cauet-code | +| Henrique | [Matrícula 3] | [Email 3] | @[usuario-3] | + +--- + +## 👥 Papéis da Sprint + +- **Scrum Master:** Mateus +- **Product Owner:** Henrique + +--- + +## 🎯 Funcionalidades Desenvolvidas + + +### Issue #103: Criar formulário de avaliação + +**Responsável:** Mateus +**Pontos:** 8 +**Status:** Cenários BDD especificados + +**História de Usuário:** +> **Como** Administrador do sistema +> **Eu quero** criar um formulário baseado em um template para as turmas que eu escolher +> **Para que** eu possa avaliar o desempenho das turmas no semestre atual + +**Regras de Negócio:** +- **RN01:** Apenas usuários com perfil de Administrador podem criar formulários +- **RN02:** Template é obrigatório e deve existir no sistema +- **RN03:** Pelo menos uma turma deve ser selecionada +- **RN04:** Período de disponibilidade é obrigatório (semestre) +- **RN05:** Professor é obrigatório +- **RN06:** Formulário herda todas as questões do template selecionado +- **RN07:** Título do formulário é definido como "[Avaliação] - [Nome_da_matéria] - [Semestre]" +- **RN08:** Respostas devem ser anônimas +- **RN09:** Usuário deve visualizar confirmação de resposta +- **RN10:** Usuário não deve virualizar resposta + +#### Dependências + +**Pré-requisitos:** +- Issue #102: Criar Template de Formulário (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar formulário para uma turma com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar formulário sem selecionar template + +**Total de cenários:** 2 +--- + +#### Campos do Formulário + +| Campo | Tipo | Obrigatório | Descrição | +|-------|------|-------------|-----------| +| Template | Seleção | Sim | Template base para o formulário | +| Turmas | Múltipla seleção | Sim | Uma ou mais turmas para avaliação | +| Semestre | Seleção | Sim | Semestre considerado | +| Professor | Seleção | Sim | Professo da Turma | +| Título | Texto | Sim | Título personalizado (padrão: nome do template) | + +#### Arquivo de Especificação + +📄 `features/criar_formulario_avaliacao.feature` + +--- + +### Issue #102: Criar Template de Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário (Padrão Connextra) + +> **Como** Administrador do sistema +> **Eu quero** criar templates de formulários contendo questões personalizadas +> **Para que** eu possa gerar formulários de avaliação reutilizáveis para avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas usuários com perfil de Administrador podem criar templates +- **RN02:** Nome do template é obrigatório e deve ter entre 3 e 100 caracteres +- **RN03:** Nome do template deve ser único no sistema +- **RN04:** Template deve conter pelo menos 1 questão +- **RN05:** Cada questão deve ter um enunciado obrigatório +- **RN06:** Questões de múltipla escolha devem ter no mínimo 2 alternativas + +#### Tipos de Questões Suportadas + +| Tipo | Descrição | +|------|-----------| +| Dissertativa | Resposta em texto livre | +| Múltipla Escolha | Seleção de uma alternativa entre várias opções | + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar template de formulário com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar template sem nome + +**Total de cenários:** 2 + +#### Arquivo de Especificação + +📄 `features/criar_template_formulario.feature` + +--- + +### Issue #101: Gerar Relatório do Administrador + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** baixar um arquivo CSV contendo os resultados de um formulário +> **Para que** eu possa avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem gerar relatórios +- **RN02:** Relatório deve ser gerado em formato CSV +- **RN03:** CSV deve conter cabeçalhos identificando as colunas +- **RN04:** Dados devem seguir padrão CSV (vírgula como separador, aspas para texto com vírgula) +- **RN05:** Nome do arquivo deve identificar o formulário e período +- **RN06:** Possível filtrar respostas por Nome da matéria +- **RN07:** Formulários não devem expor identificação dos respondentes +- **RN08:** Relatório sem respostas deve gerar arquivo apenas com cabeçalhos + +#### Estrutura do CSV +```csv +ID,Data,Turma,Questão,Resposta,Tipo +1,2025-03-10 14:30,Cálculo 1,Como você avalia?,Ótimo,Dissertativa +2,2025-03-10 15:45,Cálculo 1,Satisfeito?,Sim,Múltipla Escolha +3,2025-03-11 09:20,Cálculo 1,Nota de 1 a 10,8,Múltipla Escolha +``` + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Baixar relatório em CSV com sucesso + +**Cenários Tristes:** +- Tentar baixar relatório de formulário sem respostas + +**Total:** 2 cenários + +#### Dependências + +- Issue #03: Criar Formulário de avaliação (deve existir formulário) +- Issue #99: Responder Formulário (devem existir respostas) + +#### Arquivo + +📄 `features/gerar_relatorio_do_dministrador_101.feature` + +--- + +### Issue #100: Cadastrar Usuários do Sistema + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** cadastrar participantes de turmas do SIGAA ao importar dados de usuarios novos para o sistema +> **Para que** eles possam acessar o sistema CAMAAR + +**Observação Importante:** O cadastro do usuário só é efetivado após a definição da senha pelo próprio usuário. + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem enviar convites de cadastro +- **RN02:** Usuário só existe na base após importação (Issue #98) +- **RN03:** Cadastro é um processo em duas etapas: importação + definição de senha +- **RN04:** Link de convite expira em 48 horas +- **RN05:** Após definir senha, usuário está apto a fazer login +- **RN06:** Administrador pode reenviar convite (invalida link anterior) +- **RN07:** Sistema mantém histórico de convites enviados + +#### Status de Usuário + +| Status | Descrição | +|--------|-----------| +| Pendente | Importado, aguardando envio de convite | +| Convite Enviado | Convite enviado, aguardando definição de senha | +| Ativo | Senha definida, pode fazer login | +| Link Expirado | Convite expirou, precisa reenviar | + + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Enviar convite de cadastro para usuário importado + +**Cenários Tristes:** +- Tentar definir senha com formato inválido + +**Depende de:** +- Issue #17: Importar Dados do SIGAA (usuários devem ser importados primeiro) + +**Usado por:** +- Sistema de autenticação (login) + +#### Arquivo + +📄 `features/cadastrar_usuarios_do_sistema.feature` + +--- + +### Issue #99: Responder Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Participante de uma turma +> **Eu quero** responder o questionário sobre a turma em que estou matriculado +> **Para que** eu possa submeter minha avaliação da turma + +#### Regras de Negócio + +- **RN01:** Apenas alunos autenticados podem responder formulários +- **RN02:** Aluno só pode responder formulários das turmas em que está matriculado +- **RN03:** Todas as questões obrigatórias devem ser respondidas +- **RN04:** Formulário só pode ser respondido uma vez por aluno +- **RN05:** Sistema deve pedir confirmação antes de enviar +- **RN06:** Após envio, não é possível editar respostas +- **RN07:** Após envio, é possível visualizar confirmação de resposta +- **RN08:** Após envio, não é possível visualizar respostas + +#### Dependências + +**Pré-requisitos:** +- Issue #103: Criar formulário de avaliação (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Responder formulário com sucesso + +**Cenários Tristes:** +- Tentar responder sem preencher todas as questões obrigatórias + +**Total:** 2 cenários + +#### Arquivo + +📄 `features/responder_formulario.feature` + +--- + +### Issue #98: Importar Dados do SIGAA + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** importar dados de turmas, matérias e participantes do SIGAA +> **Para que** eu possa alimentar a base de dados do sistema + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem importar dados +- **RN02:** Arquivos devem estar em formato JSON válido +- **RN03:** Sistema deve verificar se dados já existem antes de importar +- **RN04:** Dados duplicados devem ser ignorados, não sobrescritos +- **RN05:** Campos obrigatórios devem ser validados +- **RN07:** Sistema deve gerar relatório de importação +- **RN08:** Tamanho máximo de arquivo: 5MB +- **RN09:** Ordem de importação: Matérias → Turmas → Participantes +- **RN10:** Erros não devem interromper toda a importação (processar o que for válido) + +#### Estrutura dos JSONs + +**turmas.json:** +```json +{ + "turmas": [ + { + "codigo": "CIC0097", + "nome": "BANCOS DE DADOS", + "turma_codigo": "TA", + "semestre": "2021.2", + "horario": "35T45" + } + ] +} +``` + + +**participantes.json:** +```json +{ + "participantes": [ + { + "matricula": "123456", + "nome": "Maria Santos", + "curso": "CIÊNCIA DA COMPUTAÇÃO/CIC", + "email": "maria@aluno.unb.br", + "formacao": "graduando", + "ocupacao": "discente", + "usuario": "123456", + "usuario_has_turma": "CIC0097" + } + ] +} +``` +| Entidade | Campos Obrigatórios | +|----------|---------------------| +| Turma | codigo, nome, turma_codigo, semestre, horario | +| Participante | matricula, nome, curso, email, formacao, ocupacao, usuario, usuario_has_turma | + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Importar turmas com sucesso + + +**Cenários Tristes:** +- Tentar importar arquivo JSON inválido + +#### Arquivo + +📄 `features/importar_dados_do_sigaa_98.feature` + +--- + +### Issue #109: Visualização de formulários para responder + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Participante de uma turma +> **Eu quero** visualizar os formulários não respondidos das turmas em que estou matriculado +> **Para que** eu possa escolher qual irei responder + +#### Regras de Negócio + +- **RN01:** Apenas alunos autenticados podem visualizar formulários +- **RN02:** Aluno só pode visualizar formulários das turmas em que está matriculado +- **RN03:** Formulários já respondidos não devem aparecer na lista de pendentes +- **RN04:** Formulários com prazo expirado devem ser marcados como "Prazo expirado" +- **RN05:** Sistema deve separar formulários pendentes e respondidos em abas +- **RN06:** Sistema deve permitir filtrar formulários por turma +- **RN07:** Sistema deve mostrar data limite para responder cada formulário + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar formulários pendentes para responder +2. Não visualizar formulários já respondidos +3. Visualizar abas de formulários pendentes e respondidos +4. Filtrar formulários por turma + +**Cenários Tristes (Validações e Erros):** +1. Visualizar mensagem quando não há formulários pendentes +2. Tentar responder formulário com prazo expirado +3. Não visualizar formulários de turmas que não estou matriculado + +**Total de cenários:** 7 + +#### Arquivo de Especificação + +📄 `features/visualizacao_formularios_responder_109.feature` + +--- + +### Issue #110: Visualização de resultados dos formulários + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** visualizar os formulários criados +> **Para que** eu possa gerar um relatório a partir das respostas + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem visualizar resultados +- **RN02:** Sistema deve mostrar lista de todos os formulários criados +- **RN03:** Cada formulário deve exibir número de respostas recebidas +- **RN04:** Sistema deve permitir visualizar detalhes de cada resposta +- **RN05:** Sistema deve permitir gerar relatório em CSV +- **RN06:** Sistema deve permitir filtrar respostas por data +- **RN07:** Sistema deve exibir estatísticas das respostas (média, moda, etc) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar lista de formulários com respostas +2. Visualizar detalhes das respostas de um formulário +3. Gerar relatório em CSV com sucesso +4. Filtrar respostas por data + +**Cenários Tristes (Validações e Erros):** +1. Visualizar formulário sem respostas +2. Tentar acessar relatório de formulário inexistente + +**Total de cenários:** 6 + +#### Arquivo de Especificação + +📄 `features/visualizacao_resultados_formularios_110.feature` + +--- + +### Issue #111: Visualização dos templates criados + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** visualizar os templates criados +> **Para que** eu possa editar e/ou deletar um template que eu criei + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem visualizar templates +- **RN02:** Sistema deve exibir lista de todos os templates criados +- **RN03:** Cada template deve mostrar nome, quantidade de questões e data de criação +- **RN04:** Sistema deve permitir visualizar detalhes completos de um template +- **RN05:** Sistema deve permitir pesquisar templates por nome +- **RN06:** Sistema deve exibir opções de "Editar" e "Deletar" para cada template + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar lista de templates com sucesso +2. Visualizar detalhes de um template +3. Pesquisar templates por nome + +**Cenários Tristes (Validações e Erros):** +1. Visualizar templates quando não há nenhum criado +2. Tentar visualizar template deletado + +**Total de cenários:** 5 + +#### Arquivo de Especificação + +📄 `features/visualizacao_templates_criados_111.feature` + +--- + +### Issue #112: Edição e deleção de templates + +**Responsável:** Cauet +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** editar e/ou deletar um template que eu criei sem afetar os formulários já criados +> **Para que** eu possa organizar os templates existentes + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem editar/deletar templates +- **RN02:** Apenas o criador do template pode editá-lo/deletá-lo +- **RN03:** Edição de template não deve afetar formulários já criados +- **RN04:** Deleção de template não deve afetar formulários já criados +- **RN05:** Sistema deve solicitar confirmação antes de deletar +- **RN06:** Sistema deve permitir adicionar questões ao template durante edição +- **RN07:** Sistema deve permitir alterar nome do template + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Editar template existente com sucesso +2. Deletar template com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar deletar template sem confirmação +2. Editar template removendo questões obrigatórias + +**Total de cenários:** 4 + +#### Arquivo de Especificação + +📄 `features/edicao_delecao_templates_112.feature` + +--- + +### Issue #113: Criação de formulário para docentes ou dicentes + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** escolher criar um formulário para os docentes ou os dicentes de uma turma +> **Para que** eu possa avaliar o desempenho de uma matéria + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem criar formulários +- **RN02:** Tipo de formulário (Docentes/Dicentes) é obrigatório +- **RN03:** Turma é obrigatória +- **RN04:** Template é obrigatório +- **RN05:** Formulário para docentes deve estar disponível apenas para professores da turma +- **RN06:** Formulário para dicentes deve estar disponível apenas para alunos da turma +- **RN07:** Formulário deve conter todas as questões do template selecionado + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar formulário para docentes com sucesso +2. Criar formulário para dicentes com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar formulário sem selecionar tipo +2. Tentar criar formulário sem selecionar turma +3. Tentar criar formulário sem selecionar template + +**Total de cenários:** 5 + +#### Arquivo de Especificação + +📄 `features/criacao_formulario_docentes_dicentes_113.feature` + +--- + +### Issue #248: Nova issue de exemplo + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 3 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Usuário +> **Eu quero** criar uma nova issue +> **Para que** ela apareça no meu Projects do Github + +#### Regras de Negócio + +- **RN01:** Título da issue é obrigatório +- **RN02:** Descrição da issue é obrigatória +- **RN03:** Issue criada deve aparecer na lista de issues do projeto +- **RN04:** Issue deve estar visível no Projects do Github + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar issue com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar issue sem título +2. Tentar criar issue sem descrição + +**Total de cenários:** 3 + +#### Arquivo de Especificação + +📄 `features/nova_issue_de_exemplo_248.feature` + +--- + +## 🔄 Política de Branching + +O grupo adota a seguinte estratégia de branches: +``` +main (branch protegida - código do repositório original) + └── sprint-1 (branch da sprint - usada para Pull Request) + ├── feature/criar-template-formulario + ├── feature/[outra-funcionalidade] + └── feature/[outra-funcionalidade] +``` + +### Regras de Branching + +1. A branch `main` é protegida e recebe apenas Pull Requests aprovados +2. Para cada sprint, criamos uma branch `sprint-N` +3. Cada desenvolvedor trabalha em sua feature branch individual +4. Features são nomeadas seguindo o padrão: `feature/nome-da-funcionalidade` +5. Após aprovação do PR, a branch `sprint-N` não recebe mais commits + +### Convenção de Commits +``` +feat: Adiciona cenários BDD para criar template de formulário - Issue #13 +test: Adiciona cenário de validação de nome duplicado - Issue #13 +docs: Atualiza Wiki com informações da Sprint 1 +fix: Corrige enunciado do cenário de múltipla escolha - Issue #13 +``` + +**Padrão:** +- `feat:` Nova funcionalidade ou cenário +- `test:` Adição ou modificação de testes +- `docs:` Documentação +- `fix:` Correção de erros +- Sempre referenciar a issue (#13, #14, etc.) + +--- + +## 📈 Velocity da Sprint + +**Pontos Planejados:** [Total de pontos de todas as issues] +**Pontos Concluídos:** [Total de pontos de todas as issues] +**Velocity da Sprint:** [Total] pontos + +### Distribuição de Pontos por Funcionalidade + +| Issue | Funcionalidade | Responsável | Pontos | Status | +|-------|----------------|-------------|--------|--------| +| #103 | Criar formulário de avaliação | Mateus | 8 | ✅ Especificado | +| #102 | Criar Template de Formulário | Mateus | 5 | ✅ Especificado | +| #101 | Gerar reltório do administrador | Mateus | 5 | ✅ Especificado | +| #100 | Cadastrar usuários do sistema | Mateus | 5 | ✅ Especificado | +| #99 | Responder formulário | Mateus | 5 | ✅ Especificado | +| #98 | Importar dados do SIGAA | Mateus | 5 | ✅ Especificado | +| #109 | Visualização de formulários para responder | Cauet | 5 | ✅ Especificado | +| #110 | Visualização de resultados dos formulários | Cauet | 5 | ✅ Especificado | +| #111 | Visualização dos templates criados | Cauet | 5 | ✅ Especificado | +| #112 | Edição e deleção de templates | Cauet | 5 | ✅ Especificado | +| #113 | Criação de formulário para docentes ou dicentes | Cauet | 5 | ✅ Especificado | +| #248 | Nova issue de exemplo | Cauet | 3 | ✅ Especificado | +| **TOTAL** | | | **[Total]** | **100%** | + +--- \ No newline at end of file From 5511670de5e1099c132ce06e200d52f820da6bd5 Mon Sep 17 00:00:00 2001 From: Henrique Wolski Date: Mon, 17 Nov 2025 18:45:10 -0300 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20especifica=C3=A7=C3=A3o=20BDD=20das?= =?UTF-8?q?=20issues=207=20a=2011?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/atualizar_bd_SIGAA.feature | 64 ++ features/redefinir_senha.feature | 85 ++ features/sistema_definir_senha.feature | 88 ++ ...ema_gerenciamento_por_departamento.feature | 80 ++ features/sistema_login.feature | 90 ++ wiki.md | 961 ++++++++++++++++++ 6 files changed, 1368 insertions(+) create mode 100644 features/atualizar_bd_SIGAA.feature create mode 100644 features/redefinir_senha.feature create mode 100644 features/sistema_definir_senha.feature create mode 100644 features/sistema_gerenciamento_por_departamento.feature create mode 100644 features/sistema_login.feature create mode 100644 wiki.md diff --git a/features/atualizar_bd_SIGAA.feature b/features/atualizar_bd_SIGAA.feature new file mode 100644 index 0000000000..cd371cb141 --- /dev/null +++ b/features/atualizar_bd_SIGAA.feature @@ -0,0 +1,64 @@ +# language: pt + +Funcionalidade: Atualizar base de dados com os dados do SIGAA + Como Administrador do sistema + Eu quero atualizar a base de dados já existente com os dados atuais do SIGAA + Para que eu possa corrigir a base de dados do sistema + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E a base de dados já possui dados importados anteriormente + E estou na página de gerenciamento + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Atualizar base de dados com sucesso + Dado que o SIGAA está disponível e funcionando normalmente + E existem novos dados disponíveis no SIGAA + Quando eu clico no botão "Atualizar dados do SIGAA" + E eu confirmo a atualização + Então eu devo ver a mensagem "Base de dados atualizada com sucesso" + E os dados antigos devem ser atualizados com os dados atuais do SIGAA + E novos registros devem ser adicionados se existirem + E devo ver o relatório de atualização mostrando o que foi alterado + + Cenário: Atualizar base de dados sem alterações + Dado que o SIGAA está disponível e funcionando normalmente + E não existem alterações nos dados do SIGAA + Quando eu clico no botão "Atualizar dados do SIGAA" + E eu confirmo a atualização + Então eu devo ver a mensagem "Nenhuma alteração encontrada. Base de dados já está atualizada" + E nenhum dado deve ser modificado + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar atualizar quando SIGAA está indisponível + Dado que o SIGAA está indisponível ou fora do ar + Quando eu clico no botão "Atualizar dados do SIGAA" + E eu confirmo a atualização + Então eu devo ver a mensagem de erro "Erro: não foi possível conectar ao SIGAA. Tente novamente mais tarde" + E nenhum dado deve ser modificado + E eu devo permanecer na página de gerenciamento + + Cenário: Tentar atualizar sem confirmação + Dado que o SIGAA está disponível e funcionando normalmente + Quando eu clico no botão "Atualizar dados do SIGAA" + E eu cancelo a confirmação + Então nenhuma atualização deve ser realizada + E eu devo permanecer na página de gerenciamento + E nenhum dado deve ser modificado + + Cenário: Atualização parcial devido a dados inválidos + Dado que o SIGAA está disponível e funcionando normalmente + E alguns dados do SIGAA estão em formato inválido + Quando eu clico no botão "Atualizar dados do SIGAA" + E eu confirmo a atualização + Então eu devo ver a mensagem "Atualização parcial concluída. Alguns dados não puderam ser atualizados" + E os dados válidos devem ser atualizados + E devo ver um relatório indicando quais dados falharam + E os dados inválidos não devem ser inseridos na base de dados + diff --git a/features/redefinir_senha.feature b/features/redefinir_senha.feature new file mode 100644 index 0000000000..09cddc713b --- /dev/null +++ b/features/redefinir_senha.feature @@ -0,0 +1,85 @@ +# language: pt + +Funcionalidade: Redefinição de senha + Como Usuário do sistema + Eu quero redefinir uma senha para o meu usuário a partir do e-mail recebido após a solicitação da troca de senha + Para que eu possa recuperar o meu acesso ao sistema + + Contexto: + Dado que existe um usuário cadastrado com email "usuario@aluno.unb.br" + E o usuário possui uma senha cadastrada no sistema + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Solicitar redefinição de senha com email válido + Dado que estou na página de login + Quando eu clico no link "Esqueci minha senha" + E eu preencho o campo de email com "usuario@aluno.unb.br" + E eu clico no botão "Enviar solicitação" + Então eu devo ver a mensagem "Instruções para redefinir sua senha foram enviadas para seu e-mail" + E o usuário deve receber um email com link de redefinição de senha + E o link deve expirar em 24 horas + + Cenário: Redefinir senha com token válido + Dado que solicitei a redefinição de senha + E recebi o email com o link de redefinição + Quando eu clico no link de redefinição no email + E eu preencho o campo "Nova senha" com "NovaSenha123!" + E eu preencho o campo "Confirmar senha" com "NovaSenha123!" + E eu clico no botão "Redefinir senha" + Então eu devo ver a mensagem "Senha redefinida com sucesso" + E eu devo ser redirecionado para a página de login + E a nova senha deve estar ativa no sistema + + Cenário: Redefinir senha usando matrícula + Dado que estou na página de login + Quando eu clico no link "Esqueci minha senha" + E eu preencho o campo de identificação com "123456" + E eu clico no botão "Enviar solicitação" + Então eu devo ver a mensagem "Instruções para redefinir sua senha foram enviadas para seu e-mail" + E o email associado à matrícula deve receber o link de redefinição + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar solicitar redefinição com email inexistente + Dado que estou na página de login + Quando eu clico no link "Esqueci minha senha" + E eu preencho o campo de email com "email_inexistente@aluno.unb.br" + E eu clico no botão "Enviar solicitação" + Então eu devo ver a mensagem "Email não encontrado no sistema" + E nenhum email deve ser enviado + + Cenário: Tentar redefinir senha com token inválido + Dado que recebi um link de redefinição de senha + Quando eu acesso um link com token inválido ou expirado + Então eu devo ver a mensagem "Link inválido ou expirado. Solicite uma nova redefinição de senha" + E eu devo ser redirecionado para a página de solicitação de redefinição + + Cenário: Tentar redefinir senha com senhas não coincidentes + Dado que recebi o email com o link de redefinição + E eu clico no link de redefinição no email + Quando eu preencho o campo "Nova senha" com "NovaSenha123!" + E eu preencho o campo "Confirmar senha" com "SenhaDiferente456!" + E eu clico no botão "Redefinir senha" + Então eu devo ver a mensagem de erro "As senhas não coincidem" + E a senha não deve ser alterada + + Cenário: Tentar redefinir senha com senha fraca + Dado que recebi o email com o link de redefinição + E eu clico no link de redefinição no email + Quando eu preencho o campo "Nova senha" com "123" + E eu preencho o campo "Confirmar senha" com "123" + E eu clico no botão "Redefinir senha" + Então eu devo ver a mensagem de erro "A senha deve ter no mínimo 6 caracteres" + E a senha não deve ser alterada + + Cenário: Tentar usar link de redefinição expirado + Dado que solicitei a redefinição de senha há mais de 24 horas + Quando eu clico no link de redefinição no email + Então eu devo ver a mensagem "Link expirado. Solicite uma nova redefinição de senha" + E eu devo ser redirecionado para a página de solicitação de redefinição + diff --git a/features/sistema_definir_senha.feature b/features/sistema_definir_senha.feature new file mode 100644 index 0000000000..bd8f4e07c2 --- /dev/null +++ b/features/sistema_definir_senha.feature @@ -0,0 +1,88 @@ +# language: pt + +Funcionalidade: Sistema de definição de senha + Como Usuário do sistema + Eu quero definir uma senha para o meu usuário a partir do e-mail do sistema de solicitação de cadastro + Para que eu possa acessar o sistema + + Contexto: + Dado que fui importado do SIGAA com email "usuario@aluno.unb.br" + E recebi um email de convite para cadastro no sistema + E ainda não defini minha senha + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Definir senha com sucesso através do link do email + Dado que recebi o email de convite para cadastro + Quando eu clico no link de definição de senha no email + E eu preencho o campo "Senha" com "MinhaSenha123!" + E eu preencho o campo "Confirmar senha" com "MinhaSenha123!" + E eu clico no botão "Definir senha" + Então eu devo ver a mensagem "Senha definida com sucesso. Você já pode fazer login" + E eu devo ser redirecionado para a página de login + E minha conta deve estar ativa no sistema + E eu devo poder fazer login com o email e a senha definida + + Cenário: Definir senha usando matrícula no link + Dado que recebi o email de convite para cadastro + E o link contém minha matrícula "123456" + Quando eu clico no link de definição de senha no email + E eu preencho o campo "Senha" com "SenhaSegura456!" + E eu preencho o campo "Confirmar senha" com "SenhaSegura456!" + E eu clico no botão "Definir senha" + Então eu devo ver a mensagem "Senha definida com sucesso. Você já pode fazer login" + E minha conta deve estar ativa no sistema + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar definir senha com link inválido + Dado que recebi um link de definição de senha + Quando eu acesso um link com token inválido ou expirado + Então eu devo ver a mensagem "Link inválido ou expirado. Solicite um novo convite" + E eu devo ser redirecionado para uma página informando que preciso solicitar novo convite + + Cenário: Tentar definir senha com senhas não coincidentes + Dado que recebi o email de convite para cadastro + E eu clico no link de definição de senha no email + Quando eu preencho o campo "Senha" com "MinhaSenha123!" + E eu preencho o campo "Confirmar senha" com "SenhaDiferente456!" + E eu clico no botão "Definir senha" + Então eu devo ver a mensagem de erro "As senhas não coincidem" + E a senha não deve ser definida + E eu devo permanecer na página de definição de senha + + Cenário: Tentar definir senha com senha muito curta + Dado que recebi o email de convite para cadastro + E eu clico no link de definição de senha no email + Quando eu preencho o campo "Senha" com "123" + E eu preencho o campo "Confirmar senha" com "123" + E eu clico no botão "Definir senha" + Então eu devo ver a mensagem de erro "A senha deve ter no mínimo 6 caracteres" + E a senha não deve ser definida + + Cenário: Tentar definir senha com campos vazios + Dado que recebi o email de convite para cadastro + E eu clico no link de definição de senha no email + Quando eu deixo o campo "Senha" vazio + E eu deixo o campo "Confirmar senha" vazio + E eu clico no botão "Definir senha" + Então eu devo ver a mensagem de erro "Todos os campos são obrigatórios" + E a senha não deve ser definida + + Cenário: Tentar usar link de definição de senha expirado + Dado que recebi o email de convite há mais de 48 horas + Quando eu clico no link de definição de senha no email + Então eu devo ver a mensagem "Link expirado. Solicite um novo convite de cadastro" + E eu devo ser redirecionado para uma página informando que preciso solicitar novo convite + + Cenário: Tentar definir senha para usuário que já possui senha + Dado que já defini minha senha anteriormente + E recebi um novo email de convite + Quando eu clico no link de definição de senha no email + Então eu devo ver a mensagem "Este usuário já possui senha cadastrada. Faça login ou use a opção de redefinição de senha" + E eu devo ser redirecionado para a página de login + diff --git a/features/sistema_gerenciamento_por_departamento.feature b/features/sistema_gerenciamento_por_departamento.feature new file mode 100644 index 0000000000..87370fea72 --- /dev/null +++ b/features/sistema_gerenciamento_por_departamento.feature @@ -0,0 +1,80 @@ +# language: pt + +Funcionalidade: Sistema de gerenciamento por departamento + Como Administrador do sistema + Eu quero gerenciar somente as turmas do departamento o qual eu pertenço + Para que eu possa avaliar o desempenho das turmas no semestre atual + + Contexto: + Dado que estou logado como administrador com email "admin@unb.br" + E sou administrador do departamento "CIC" + E existem turmas de diferentes departamentos no sistema: + | codigo | nome | departamento | + | CIC0097 | BANCOS DE DADOS | CIC | + | CIC0105 | ENGENHARIA DE SOFTWARE | CIC | + | MAT0101 | CÁLCULO 1 | MAT | + | FIS0101 | FÍSICA 1 | FIS | + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Visualizar apenas turmas do meu departamento + Dado que estou na página de gerenciamento de turmas + Quando eu acesso a lista de turmas + Então eu devo ver apenas as turmas do departamento "CIC" + E devo ver a turma "CIC0097 - BANCOS DE DADOS" + E devo ver a turma "CIC0105 - ENGENHARIA DE SOFTWARE" + E não devo ver turmas de outros departamentos + E devo ver o filtro indicando "Departamento: CIC" + + Cenário: Criar formulário apenas para turmas do meu departamento + Dado que estou na página de criação de formulário + E existe um template "Avaliação Semestral" + Quando eu seleciono o template "Avaliação Semestral" + E eu acesso a lista de turmas para seleção + Então eu devo ver apenas as turmas do departamento "CIC" + E devo poder selecionar a turma "CIC0097" + E devo poder selecionar a turma "CIC0105" + E não devo ver turmas de outros departamentos na lista + + Cenário: Visualizar resultados apenas de turmas do meu departamento + Dado que estou na página de visualização de resultados + Quando eu acesso a lista de formulários + Então eu devo ver apenas formulários de turmas do departamento "CIC" + E devo ver os resultados da turma "CIC0097" + E devo ver os resultados da turma "CIC0105" + E não devo ver resultados de turmas de outros departamentos + + Cenário: Filtrar turmas por semestre dentro do meu departamento + Dado que existem turmas do departamento "CIC" em diferentes semestres + E estou na página de gerenciamento de turmas + Quando eu seleciono o filtro de semestre "2021.2" + E eu clico em "Filtrar" + Então eu devo ver apenas turmas do departamento "CIC" do semestre "2021.2" + E não devo ver turmas de outros semestres + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar acessar turma de outro departamento + Dado que estou na página de gerenciamento de turmas + Quando eu tento acessar diretamente a turma "MAT0101" de outro departamento + Então eu devo ver a mensagem "Você não tem permissão para acessar esta turma" + E eu devo ser redirecionado para a página de gerenciamento do meu departamento + + Cenário: Visualizar mensagem quando não há turmas no meu departamento + Dado que não existem turmas cadastradas para o departamento "CIC" + E estou na página de gerenciamento de turmas + Quando eu acesso a lista de turmas + Então eu devo ver a mensagem "Não há turmas cadastradas para o seu departamento" + E não devo ver nenhuma turma na lista + + Cenário: Tentar criar formulário para turma de outro departamento + Dado que estou na página de criação de formulário + E existe um template "Avaliação Semestral" + Quando eu tento selecionar uma turma de outro departamento através de manipulação de URL + Então eu devo ver a mensagem "Você não tem permissão para criar formulários para esta turma" + E o formulário não deve ser criado + diff --git a/features/sistema_login.feature b/features/sistema_login.feature new file mode 100644 index 0000000000..95753f80cd --- /dev/null +++ b/features/sistema_login.feature @@ -0,0 +1,90 @@ +# language: pt + +Funcionalidade: Sistema de Login + Como Usuário do sistema + Eu quero acessar o sistema utilizando um e-mail ou matrícula e uma senha já cadastrada + Para que eu possa responder formulários ou gerenciar o sistema + + Contexto: + Dado que existe um usuário cadastrado com email "usuario@aluno.unb.br" e matrícula "123456" + E o usuário possui a senha "MinhaSenha123!" cadastrada + E estou na página de login + + # ======================================== + # CENÁRIOS FELIZES + # ======================================== + + Cenário: Fazer login com email e senha corretos + Quando eu preencho o campo "Email ou Matrícula" com "usuario@aluno.unb.br" + E eu preencho o campo "Senha" com "MinhaSenha123!" + E eu clico no botão "Entrar" + Então eu devo ser redirecionado para a página inicial + E eu devo ver meu nome de usuário no menu + E eu devo estar autenticado no sistema + + Cenário: Fazer login com matrícula e senha corretos + Quando eu preencho o campo "Email ou Matrícula" com "123456" + E eu preencho o campo "Senha" com "MinhaSenha123!" + E eu clico no botão "Entrar" + Então eu devo ser redirecionado para a página inicial + E eu devo ver meu nome de usuário no menu + E eu devo estar autenticado no sistema + + Cenário: Administrador visualiza opção de gerenciamento no menu + Dado que existe um administrador com email "admin@unb.br" e senha "Admin123!" + Quando eu preencho o campo "Email ou Matrícula" com "admin@unb.br" + E eu preencho o campo "Senha" com "Admin123!" + E eu clico no botão "Entrar" + Então eu devo ser redirecionado para a página inicial + E eu devo ver a opção "Gerenciamento" no menu lateral + E eu devo poder acessar a página de gerenciamento + + Cenário: Usuário comum não visualiza opção de gerenciamento + Dado que o usuário não é administrador + Quando eu faço login com sucesso + Então eu devo ser redirecionado para a página inicial + E eu não devo ver a opção "Gerenciamento" no menu lateral + E eu devo ver apenas as opções disponíveis para usuários comuns + + # ======================================== + # CENÁRIOS TRISTES + # ======================================== + + Cenário: Tentar fazer login com email inexistente + Quando eu preencho o campo "Email ou Matrícula" com "email_inexistente@aluno.unb.br" + E eu preencho o campo "Senha" com "MinhaSenha123!" + E eu clico no botão "Entrar" + Então eu devo ver a mensagem de erro "Email ou senha inválidos" + E eu devo permanecer na página de login + E eu não devo estar autenticado no sistema + + Cenário: Tentar fazer login com senha incorreta + Quando eu preencho o campo "Email ou Matrícula" com "usuario@aluno.unb.br" + E eu preencho o campo "Senha" com "SenhaIncorreta123!" + E eu clico no botão "Entrar" + Então eu devo ver a mensagem de erro "Email ou senha inválidos" + E eu devo permanecer na página de login + E eu não devo estar autenticado no sistema + + Cenário: Tentar fazer login com matrícula inexistente + Quando eu preencho o campo "Email ou Matrícula" com "999999" + E eu preencho o campo "Senha" com "MinhaSenha123!" + E eu clico no botão "Entrar" + Então eu devo ver a mensagem de erro "Email ou senha inválidos" + E eu devo permanecer na página de login + + Cenário: Tentar fazer login com campos vazios + Quando eu deixo o campo "Email ou Matrícula" vazio + E eu deixo o campo "Senha" vazio + E eu clico no botão "Entrar" + Então eu devo ver a mensagem de erro "Preencha todos os campos" + E eu devo permanecer na página de login + + Cenário: Tentar fazer login com usuário que ainda não definiu senha + Dado que existe um usuário importado que ainda não definiu senha + Quando eu preencho o campo "Email ou Matrícula" com o email deste usuário + E eu preencho o campo "Senha" com qualquer senha + E eu clico no botão "Entrar" + Então eu devo ver a mensagem "Você ainda não definiu sua senha. Verifique seu email para o link de cadastro" + E eu devo permanecer na página de login + diff --git a/wiki.md b/wiki.md new file mode 100644 index 0000000000..8dddf3195c --- /dev/null +++ b/wiki.md @@ -0,0 +1,961 @@ +# Sprint 1 - Sistema CAMAAR + +## 📋 Informações do Grupo + +**Grupo:** Grupo 3 +**Projeto:** CAMAAR - Sistema para Avaliação de Atividades Acadêmicas Remotas +**Escopo:** Avaliação de Atividades Acadêmicas + +### Integrantes + +| Nome | Matrícula | Email | GitHub | +|------|-----------|-------|--------| +| Mateus Santos da Silva | 190018011 | 190018011@aluno.unb.br | @avlis-mat | +| Cauet Gabriel Dias Braga | 211060577 | 211060577@aluno.unb.br | @cauet-code | +| Henrique Carvalho Wolski | 231013627 | 231013627@aluno.unb.br | @Henrique-wolski | + +--- + +## 👥 Papéis da Sprint + +- **Scrum Master:** Mateus +- **Product Owner:** Henrique + +--- + +## 🎯 Funcionalidades Desenvolvidas + + +### Issue #103: Criar formulário de avaliação + +**Responsável:** Mateus +**Pontos:** 8 +**Status:** Cenários BDD especificados + +**História de Usuário:** +> **Como** Administrador do sistema +> **Eu quero** criar um formulário baseado em um template para as turmas que eu escolher +> **Para que** eu possa avaliar o desempenho das turmas no semestre atual + +**Regras de Negócio:** +- **RN01:** Apenas usuários com perfil de Administrador podem criar formulários +- **RN02:** Template é obrigatório e deve existir no sistema +- **RN03:** Pelo menos uma turma deve ser selecionada +- **RN04:** Período de disponibilidade é obrigatório (semestre) +- **RN05:** Professor é obrigatório +- **RN06:** Formulário herda todas as questões do template selecionado +- **RN07:** Título do formulário é definido como "[Avaliação] - [Nome_da_matéria] - [Semestre]" +- **RN08:** Respostas devem ser anônimas +- **RN09:** Usuário deve visualizar confirmação de resposta +- **RN10:** Usuário não deve virualizar resposta + +#### Dependências + +**Pré-requisitos:** +- Issue #102: Criar Template de Formulário (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar formulário para uma turma com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar formulário sem selecionar template + +**Total de cenários:** 2 +--- + +#### Campos do Formulário + +| Campo | Tipo | Obrigatório | Descrição | +|-------|------|-------------|-----------| +| Template | Seleção | Sim | Template base para o formulário | +| Turmas | Múltipla seleção | Sim | Uma ou mais turmas para avaliação | +| Semestre | Seleção | Sim | Semestre considerado | +| Professor | Seleção | Sim | Professo da Turma | +| Título | Texto | Sim | Título personalizado (padrão: nome do template) | + +#### Arquivo de Especificação + +📄 `features/criar_formulario_avaliacao.feature` + +--- + +### Issue #102: Criar Template de Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário (Padrão Connextra) + +> **Como** Administrador do sistema +> **Eu quero** criar templates de formulários contendo questões personalizadas +> **Para que** eu possa gerar formulários de avaliação reutilizáveis para avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas usuários com perfil de Administrador podem criar templates +- **RN02:** Nome do template é obrigatório e deve ter entre 3 e 100 caracteres +- **RN03:** Nome do template deve ser único no sistema +- **RN04:** Template deve conter pelo menos 1 questão +- **RN05:** Cada questão deve ter um enunciado obrigatório +- **RN06:** Questões de múltipla escolha devem ter no mínimo 2 alternativas + +#### Tipos de Questões Suportadas + +| Tipo | Descrição | +|------|-----------| +| Dissertativa | Resposta em texto livre | +| Múltipla Escolha | Seleção de uma alternativa entre várias opções | + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar template de formulário com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar template sem nome + +**Total de cenários:** 2 + +#### Arquivo de Especificação + +📄 `features/criar_template_formulario.feature` + +--- + +### Issue #101: Gerar Relatório do Administrador + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** baixar um arquivo CSV contendo os resultados de um formulário +> **Para que** eu possa avaliar o desempenho das turmas + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem gerar relatórios +- **RN02:** Relatório deve ser gerado em formato CSV +- **RN03:** CSV deve conter cabeçalhos identificando as colunas +- **RN04:** Dados devem seguir padrão CSV (vírgula como separador, aspas para texto com vírgula) +- **RN05:** Nome do arquivo deve identificar o formulário e período +- **RN06:** Possível filtrar respostas por Nome da matéria +- **RN07:** Formulários não devem expor identificação dos respondentes +- **RN08:** Relatório sem respostas deve gerar arquivo apenas com cabeçalhos + +#### Estrutura do CSV +```csv +ID,Data,Turma,Questão,Resposta,Tipo +1,2025-03-10 14:30,Cálculo 1,Como você avalia?,Ótimo,Dissertativa +2,2025-03-10 15:45,Cálculo 1,Satisfeito?,Sim,Múltipla Escolha +3,2025-03-11 09:20,Cálculo 1,Nota de 1 a 10,8,Múltipla Escolha +``` + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Baixar relatório em CSV com sucesso + +**Cenários Tristes:** +- Tentar baixar relatório de formulário sem respostas + +**Total:** 2 cenários + +#### Dependências + +- Issue #03: Criar Formulário de avaliação (deve existir formulário) +- Issue #99: Responder Formulário (devem existir respostas) + +#### Arquivo + +📄 `features/gerar_relatorio_do_dministrador_101.feature` + +--- + +### Issue #100: Cadastrar Usuários do Sistema + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** cadastrar participantes de turmas do SIGAA ao importar dados de usuarios novos para o sistema +> **Para que** eles possam acessar o sistema CAMAAR + +**Observação Importante:** O cadastro do usuário só é efetivado após a definição da senha pelo próprio usuário. + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem enviar convites de cadastro +- **RN02:** Usuário só existe na base após importação (Issue #98) +- **RN03:** Cadastro é um processo em duas etapas: importação + definição de senha +- **RN04:** Link de convite expira em 48 horas +- **RN05:** Após definir senha, usuário está apto a fazer login +- **RN06:** Administrador pode reenviar convite (invalida link anterior) +- **RN07:** Sistema mantém histórico de convites enviados + +#### Status de Usuário + +| Status | Descrição | +|--------|-----------| +| Pendente | Importado, aguardando envio de convite | +| Convite Enviado | Convite enviado, aguardando definição de senha | +| Ativo | Senha definida, pode fazer login | +| Link Expirado | Convite expirou, precisa reenviar | + + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Enviar convite de cadastro para usuário importado + +**Cenários Tristes:** +- Tentar definir senha com formato inválido + +**Depende de:** +- Issue #17: Importar Dados do SIGAA (usuários devem ser importados primeiro) + +**Usado por:** +- Sistema de autenticação (login) + +#### Arquivo + +📄 `features/cadastrar_usuarios_do_sistema.feature` + +--- + +### Issue #99: Responder Formulário + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Participante de uma turma +> **Eu quero** responder o questionário sobre a turma em que estou matriculado +> **Para que** eu possa submeter minha avaliação da turma + +#### Regras de Negócio + +- **RN01:** Apenas alunos autenticados podem responder formulários +- **RN02:** Aluno só pode responder formulários das turmas em que está matriculado +- **RN03:** Todas as questões obrigatórias devem ser respondidas +- **RN04:** Formulário só pode ser respondido uma vez por aluno +- **RN05:** Sistema deve pedir confirmação antes de enviar +- **RN06:** Após envio, não é possível editar respostas +- **RN07:** Após envio, é possível visualizar confirmação de resposta +- **RN08:** Após envio, não é possível visualizar respostas + +#### Dependências + +**Pré-requisitos:** +- Issue #103: Criar formulário de avaliação (deve ser implementado primeiro) +- Sistema de gerenciamento de turmas +- Sistema de autenticação de usuários + +**Integração com:** +- Templates de formulário (usa templates criados) +- Cadastro de turmas (seleciona turmas existentes) +- Sistema de permissões (valida acesso de administrador) + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Responder formulário com sucesso + +**Cenários Tristes:** +- Tentar responder sem preencher todas as questões obrigatórias + +**Total:** 2 cenários + +#### Arquivo + +📄 `features/responder_formulario.feature` + +--- + +### Issue #98: Importar Dados do SIGAA + +**Responsável:** Mateus +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** importar dados de turmas, matérias e participantes do SIGAA +> **Para que** eu possa alimentar a base de dados do sistema + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem importar dados +- **RN02:** Arquivos devem estar em formato JSON válido +- **RN03:** Sistema deve verificar se dados já existem antes de importar +- **RN04:** Dados duplicados devem ser ignorados, não sobrescritos +- **RN05:** Campos obrigatórios devem ser validados +- **RN07:** Sistema deve gerar relatório de importação +- **RN08:** Tamanho máximo de arquivo: 5MB +- **RN09:** Ordem de importação: Matérias → Turmas → Participantes +- **RN10:** Erros não devem interromper toda a importação (processar o que for válido) + +#### Estrutura dos JSONs + +**turmas.json:** +```json +{ + "turmas": [ + { + "codigo": "CIC0097", + "nome": "BANCOS DE DADOS", + "turma_codigo": "TA", + "semestre": "2021.2", + "horario": "35T45" + } + ] +} +``` + + +**participantes.json:** +```json +{ + "participantes": [ + { + "matricula": "123456", + "nome": "Maria Santos", + "curso": "CIÊNCIA DA COMPUTAÇÃO/CIC", + "email": "maria@aluno.unb.br", + "formacao": "graduando", + "ocupacao": "discente", + "usuario": "123456", + "usuario_has_turma": "CIC0097" + } + ] +} +``` +| Entidade | Campos Obrigatórios | +|----------|---------------------| +| Turma | codigo, nome, turma_codigo, semestre, horario | +| Participante | matricula, nome, curso, email, formacao, ocupacao, usuario, usuario_has_turma | + +#### Cenários BDD Implementados + +**Cenários Felizes:** +- Importar turmas com sucesso + + +**Cenários Tristes:** +- Tentar importar arquivo JSON inválido + +#### Arquivo + +📄 `features/importar_dados_do_sigaa_98.feature` + +--- + +### Issue #109: Visualização de formulários para responder + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Participante de uma turma +> **Eu quero** visualizar os formulários não respondidos das turmas em que estou matriculado +> **Para que** eu possa escolher qual irei responder + +#### Regras de Negócio + +- **RN01:** Apenas alunos autenticados podem visualizar formulários +- **RN02:** Aluno só pode visualizar formulários das turmas em que está matriculado +- **RN03:** Formulários já respondidos não devem aparecer na lista de pendentes +- **RN04:** Formulários com prazo expirado devem ser marcados como "Prazo expirado" +- **RN05:** Sistema deve separar formulários pendentes e respondidos em abas +- **RN06:** Sistema deve permitir filtrar formulários por turma +- **RN07:** Sistema deve mostrar data limite para responder cada formulário + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar formulários pendentes para responder +2. Não visualizar formulários já respondidos +3. Visualizar abas de formulários pendentes e respondidos +4. Filtrar formulários por turma + +**Cenários Tristes (Validações e Erros):** +1. Visualizar mensagem quando não há formulários pendentes +2. Tentar responder formulário com prazo expirado +3. Não visualizar formulários de turmas que não estou matriculado + +**Total de cenários:** 7 + +#### Arquivo de Especificação + +📄 `features/visualizacao_formularios_responder_109.feature` + +--- + +### Issue #110: Visualização de resultados dos formulários + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** visualizar os formulários criados +> **Para que** eu possa gerar um relatório a partir das respostas + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem visualizar resultados +- **RN02:** Sistema deve mostrar lista de todos os formulários criados +- **RN03:** Cada formulário deve exibir número de respostas recebidas +- **RN04:** Sistema deve permitir visualizar detalhes de cada resposta +- **RN05:** Sistema deve permitir gerar relatório em CSV +- **RN06:** Sistema deve permitir filtrar respostas por data +- **RN07:** Sistema deve exibir estatísticas das respostas (média, moda, etc) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar lista de formulários com respostas +2. Visualizar detalhes das respostas de um formulário +3. Gerar relatório em CSV com sucesso +4. Filtrar respostas por data + +**Cenários Tristes (Validações e Erros):** +1. Visualizar formulário sem respostas +2. Tentar acessar relatório de formulário inexistente + +**Total de cenários:** 6 + +#### Arquivo de Especificação + +📄 `features/visualizacao_resultados_formularios_110.feature` + +--- + +### Issue #111: Visualização dos templates criados + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** visualizar os templates criados +> **Para que** eu possa editar e/ou deletar um template que eu criei + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem visualizar templates +- **RN02:** Sistema deve exibir lista de todos os templates criados +- **RN03:** Cada template deve mostrar nome, quantidade de questões e data de criação +- **RN04:** Sistema deve permitir visualizar detalhes completos de um template +- **RN05:** Sistema deve permitir pesquisar templates por nome +- **RN06:** Sistema deve exibir opções de "Editar" e "Deletar" para cada template + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar lista de templates com sucesso +2. Visualizar detalhes de um template +3. Pesquisar templates por nome + +**Cenários Tristes (Validações e Erros):** +1. Visualizar templates quando não há nenhum criado +2. Tentar visualizar template deletado + +**Total de cenários:** 5 + +#### Arquivo de Especificação + +📄 `features/visualizacao_templates_criados_111.feature` + +--- + +### Issue #112: Edição e deleção de templates + +**Responsável:** Cauet +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** editar e/ou deletar um template que eu criei sem afetar os formulários já criados +> **Para que** eu possa organizar os templates existentes + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem editar/deletar templates +- **RN02:** Apenas o criador do template pode editá-lo/deletá-lo +- **RN03:** Edição de template não deve afetar formulários já criados +- **RN04:** Deleção de template não deve afetar formulários já criados +- **RN05:** Sistema deve solicitar confirmação antes de deletar +- **RN06:** Sistema deve permitir adicionar questões ao template durante edição +- **RN07:** Sistema deve permitir alterar nome do template + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Editar template existente com sucesso +2. Deletar template com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar deletar template sem confirmação +2. Editar template removendo questões obrigatórias + +**Total de cenários:** 4 + +#### Arquivo de Especificação + +📄 `features/edicao_delecao_templates_112.feature` + +--- + +### Issue #113: Criação de formulário para docentes ou dicentes + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador +> **Eu quero** escolher criar um formulário para os docentes ou os dicentes de uma turma +> **Para que** eu possa avaliar o desempenho de uma matéria + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem criar formulários +- **RN02:** Tipo de formulário (Docentes/Dicentes) é obrigatório +- **RN03:** Turma é obrigatória +- **RN04:** Template é obrigatório +- **RN05:** Formulário para docentes deve estar disponível apenas para professores da turma +- **RN06:** Formulário para dicentes deve estar disponível apenas para alunos da turma +- **RN07:** Formulário deve conter todas as questões do template selecionado + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar formulário para docentes com sucesso +2. Criar formulário para dicentes com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar formulário sem selecionar tipo +2. Tentar criar formulário sem selecionar turma +3. Tentar criar formulário sem selecionar template + +**Total de cenários:** 5 + +#### Arquivo de Especificação + +📄 `features/criacao_formulario_docentes_dicentes_113.feature` + +--- + +### Issue #248: Nova issue de exemplo + +**Responsável:** Cauet Gabriel Dias Braga +**Pontos:** 3 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Usuário +> **Eu quero** criar uma nova issue +> **Para que** ela apareça no meu Projects do Github + +#### Regras de Negócio + +- **RN01:** Título da issue é obrigatório +- **RN02:** Descrição da issue é obrigatória +- **RN03:** Issue criada deve aparecer na lista de issues do projeto +- **RN04:** Issue deve estar visível no Projects do Github + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Criar issue com sucesso + +**Cenários Tristes (Validações e Erros):** +1. Tentar criar issue sem título +2. Tentar criar issue sem descrição + +**Total de cenários:** 3 + +#### Arquivo de Especificação + +📄 `features/nova_issue_de_exemplo_248.feature` + +--- + +### Issue #108: Atualizar base de dados com os dados do SIGAA + +**Responsável:** Henrique +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** atualizar a base de dados já existente com os dados atuais do SIGAA +> **Para que** eu possa corrigir a base de dados do sistema + +#### Regras de Negócio + +- **RN01:** Apenas administradores podem atualizar a base de dados +- **RN02:** Sistema deve conectar ao SIGAA para obter dados atualizados +- **RN03:** Dados existentes devem ser atualizados com informações mais recentes +- **RN04:** Novos registros devem ser adicionados se existirem no SIGAA +- **RN05:** Sistema deve gerar relatório de atualização mostrando alterações +- **RN06:** Atualização deve solicitar confirmação antes de executar +- **RN07:** Dados inválidos não devem interromper toda a atualização +- **RN08:** Sistema deve tratar erros de conexão com SIGAA +- **RN09:** Link de atualização deve expirar após 24 horas (se aplicável) + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Atualizar base de dados com sucesso +2. Atualizar base de dados sem alterações + +**Cenários Tristes (Validações e Erros):** +1. Tentar atualizar quando SIGAA está indisponível +2. Tentar atualizar sem confirmação +3. Atualização parcial devido a dados inválidos + +**Total de cenários:** 5 + +#### Dependências + +**Pré-requisitos:** +- Issue #98: Importar Dados do SIGAA (deve existir base de dados inicial) +- Sistema de autenticação de administradores + +**Integração com:** +- Sistema de importação do SIGAA (usa mesma estrutura de dados) +- Base de dados do sistema (atualiza registros existentes) + +#### Arquivo de Especificação + +📄 `features/atualizar_bd_SIGAA.feature` + +--- + +### Issue #107: Redefinição de senha (Bonus) + +**Responsável:** Henrique +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Usuário do sistema +> **Eu quero** redefinir uma senha para o meu usuário a partir do e-mail recebido após a solicitação da troca de senha +> **Para que** eu possa recuperar o meu acesso ao sistema + +#### Regras de Negócio + +- **RN01:** Usuário deve solicitar redefinição através do link "Esqueci minha senha" +- **RN02:** Sistema deve validar se o email existe no sistema +- **RN03:** Link de redefinição deve ser enviado por email +- **RN04:** Link de redefinição expira em 24 horas +- **RN05:** Token de redefinição deve ser único e seguro +- **RN06:** Nova senha deve seguir critérios de segurança (mínimo 6 caracteres) +- **RN07:** Confirmação de senha deve coincidir com a nova senha +- **RN08:** Sistema deve permitir redefinição usando email ou matrícula +- **RN09:** Após redefinição bem-sucedida, usuário deve ser redirecionado para login + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Solicitar redefinição de senha com email válido +2. Redefinir senha com token válido +3. Redefinir senha usando matrícula + +**Cenários Tristes (Validações e Erros):** +1. Tentar solicitar redefinição com email inexistente +2. Tentar redefinir senha com token inválido +3. Tentar redefinir senha com senhas não coincidentes +4. Tentar redefinir senha com senha fraca +5. Tentar usar link de redefinição expirado + +**Total de cenários:** 8 + +#### Dependências + +**Pré-requisitos:** +- Sistema de cadastro de usuários +- Sistema de envio de emails +- Sistema de autenticação + +**Integração com:** +- Sistema de login (após redefinição, usuário pode fazer login) +- Sistema de cadastro (usa mesma estrutura de usuários) + +#### Arquivo de Especificação + +📄 `features/redefinir_senha.feature` + +--- + +### Issue #106: Sistema de gerenciamento por departamento (Bonus) + +**Responsável:** Henrique +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Administrador do sistema +> **Eu quero** gerenciar somente as turmas do departamento o qual eu pertenço +> **Para que** eu possa avaliar o desempenho das turmas no semestre atual + +#### Regras de Negócio + +- **RN01:** Administrador deve estar associado a um departamento +- **RN02:** Administrador só pode visualizar turmas do seu departamento +- **RN03:** Administrador só pode criar formulários para turmas do seu departamento +- **RN04:** Administrador só pode visualizar resultados de turmas do seu departamento +- **RN05:** Sistema deve filtrar automaticamente por departamento do administrador +- **RN06:** Tentativas de acesso a turmas de outros departamentos devem ser bloqueadas +- **RN07:** Sistema deve exibir filtro indicando o departamento atual +- **RN08:** Administrador pode filtrar turmas por semestre dentro do seu departamento + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Visualizar apenas turmas do meu departamento +2. Criar formulário apenas para turmas do meu departamento +3. Visualizar resultados apenas de turmas do meu departamento +4. Filtrar turmas por semestre dentro do meu departamento + +**Cenários Tristes (Validações e Erros):** +1. Tentar acessar turma de outro departamento +2. Visualizar mensagem quando não há turmas no meu departamento +3. Tentar criar formulário para turma de outro departamento + +**Total de cenários:** 7 + +#### Dependências + +**Pré-requisitos:** +- Sistema de autenticação de administradores +- Sistema de associação de administradores a departamentos +- Sistema de gerenciamento de turmas + +**Integração com:** +- Sistema de criação de formulários (filtra turmas por departamento) +- Sistema de visualização de resultados (filtra por departamento) +- Sistema de importação do SIGAA (associa departamentos) + +#### Arquivo de Especificação + +📄 `features/sistema_gerenciamento_por_departamento.feature` + +--- + +### Issue #105: Sistema de definição de senha + +**Responsável:** Henrique +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Usuário do sistema +> **Eu quero** definir uma senha para o meu usuário a partir do e-mail do sistema de solicitação de cadastro +> **Para que** eu possa acessar o sistema + +#### Regras de Negócio + +- **RN01:** Usuário deve ser importado do SIGAA antes de receber convite +- **RN02:** Link de definição de senha deve ser enviado por email após importação +- **RN03:** Link de definição de senha expira em 48 horas +- **RN04:** Token de definição deve ser único e seguro +- **RN05:** Senha deve seguir critérios de segurança (mínimo 6 caracteres) +- **RN06:** Confirmação de senha deve coincidir com a senha definida +- **RN07:** Após definir senha, usuário está apto a fazer login +- **RN08:** Usuário que já possui senha não pode usar link de definição +- **RN09:** Todos os campos são obrigatórios + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Definir senha com sucesso através do link do email +2. Definir senha usando matrícula no link + +**Cenários Tristes (Validações e Erros):** +1. Tentar definir senha com link inválido +2. Tentar definir senha com senhas não coincidentes +3. Tentar definir senha com senha muito curta +4. Tentar definir senha com campos vazios +5. Tentar usar link de definição de senha expirado +6. Tentar definir senha para usuário que já possui senha + +**Total de cenários:** 8 + +#### Dependências + +**Pré-requisitos:** +- Issue #98: Importar Dados do SIGAA (usuários devem ser importados primeiro) +- Issue #100: Cadastrar Usuários do Sistema (convite deve ser enviado) +- Sistema de envio de emails + +**Usado por:** +- Sistema de login (usuário precisa definir senha antes de fazer login) + +#### Arquivo de Especificação + +📄 `features/sistema_definir_senha.feature` + +--- + +### Issue #104: Sistema de Login + +**Responsável:** Henrique +**Pontos:** 5 +**Status:** Cenários BDD especificados + +#### História de Usuário + +> **Como** Usuário do sistema +> **Eu quero** acessar o sistema utilizando um e-mail ou matrícula e uma senha já cadastrada +> **Para que** eu possa responder formulários ou gerenciar o sistema + +**Observação:** Quando o Usuário logado for um admin, deve-se mostrar a opção de gerenciamento no menu lateral. + +#### Regras de Negócio + +- **RN01:** Usuário deve ter senha definida para fazer login +- **RN02:** Sistema deve aceitar email ou matrícula como identificador +- **RN03:** Senha deve ser validada corretamente +- **RN04:** Tentativas de login inválidas devem mostrar mensagem de erro genérica +- **RN05:** Após login bem-sucedido, usuário deve ser redirecionado para página inicial +- **RN06:** Administradores devem ver opção "Gerenciamento" no menu lateral +- **RN07:** Usuários comuns não devem ver opção "Gerenciamento" no menu lateral +- **RN08:** Todos os campos são obrigatórios +- **RN09:** Sistema deve manter sessão do usuário após login + +#### Cenários BDD Implementados + +**Cenários Felizes (Caminhos de Sucesso):** +1. Fazer login com email e senha corretos +2. Fazer login com matrícula e senha corretos +3. Administrador visualiza opção de gerenciamento no menu +4. Usuário comum não visualiza opção de gerenciamento + +**Cenários Tristes (Validações e Erros):** +1. Tentar fazer login com email inexistente +2. Tentar fazer login com senha incorreta +3. Tentar fazer login com matrícula inexistente +4. Tentar fazer login com campos vazios +5. Tentar fazer login com usuário que ainda não definiu senha + +**Total de cenários:** 9 + +#### Dependências + +**Pré-requisitos:** +- Issue #105: Sistema de definição de senha (usuário deve ter senha definida) +- Sistema de autenticação +- Sistema de sessões + +**Integração com:** +- Sistema de gerenciamento (mostra opção para administradores) +- Sistema de formulários (usuário precisa estar autenticado) +- Sistema de permissões (define acesso baseado em perfil) + +#### Arquivo de Especificação + +📄 `features/sistema_login.feature` + +--- + +## 🔄 Política de Branching + +O grupo adota a seguinte estratégia de branches: +``` +main (branch protegida - código do repositório original) + └── sprint-1 (branch da sprint - usada para Pull Request) + ├── feature/criar-template-formulario + ├── feature/[outra-funcionalidade] + └── feature/[outra-funcionalidade] +``` + +### Regras de Branching + +1. A branch `main` é protegida e recebe apenas Pull Requests aprovados +2. Para cada sprint, criamos uma branch `sprint-N` +3. Cada desenvolvedor trabalha em sua feature branch individual +4. Features são nomeadas seguindo o padrão: `feature/nome-da-funcionalidade` +5. Após aprovação do PR, a branch `sprint-N` não recebe mais commits + +### Convenção de Commits +``` +feat: Adiciona cenários BDD para criar template de formulário - Issue #13 +test: Adiciona cenário de validação de nome duplicado - Issue #13 +docs: Atualiza Wiki com informações da Sprint 1 +fix: Corrige enunciado do cenário de múltipla escolha - Issue #13 +``` + +**Padrão:** +- `feat:` Nova funcionalidade ou cenário +- `test:` Adição ou modificação de testes +- `docs:` Documentação +- `fix:` Correção de erros +- Sempre referenciar a issue (#13, #14, etc.) + +--- + +## 📈 Velocity da Sprint + +**Pontos Planejados:** 86 +**Pontos Concluídos:** 86 +**Velocity da Sprint:** 86 pontos + +### Distribuição de Pontos por Funcionalidade + +| Issue | Funcionalidade | Responsável | Pontos | Status | +|-------|----------------|-------------|--------|--------| +| #103 | Criar formulário de avaliação | Mateus | 8 | ✅ Especificado | +| #102 | Criar Template de Formulário | Mateus | 5 | ✅ Especificado | +| #101 | Gerar reltório do administrador | Mateus | 5 | ✅ Especificado | +| #100 | Cadastrar usuários do sistema | Mateus | 5 | ✅ Especificado | +| #99 | Responder formulário | Mateus | 5 | ✅ Especificado | +| #98 | Importar dados do SIGAA | Mateus | 5 | ✅ Especificado | +| #109 | Visualização de formulários para responder | Cauet | 5 | ✅ Especificado | +| #110 | Visualização de resultados dos formulários | Cauet | 5 | ✅ Especificado | +| #111 | Visualização dos templates criados | Cauet | 5 | ✅ Especificado | +| #112 | Edição e deleção de templates | Cauet | 5 | ✅ Especificado | +| #113 | Criação de formulário para docentes ou dicentes | Cauet | 5 | ✅ Especificado | +| #248 | Nova issue de exemplo | Cauet | 3 | ✅ Especificado | +| #108 | Atualizar base de dados com os dados do SIGAA | Henrique | 5 | ✅ Especificado | +| #107 | Redefinição de senha (Bonus) | Henrique | 5 | ✅ Especificado | +| #106 | Sistema de gerenciamento por departamento (Bonus) | Henrique | 5 | ✅ Especificado | +| #105 | Sistema de definição de senha | Henrique | 5 | ✅ Especificado | +| #104 | Sistema de Login | Henrique | 5 | ✅ Especificado | +| **TOTAL** | | | **86** | **100%** | + +--- \ No newline at end of file