Objetivo

Implementar a camada de apresentação client-side (frontend), testes end-to-end e testes de carga.

Instruções

Cada grupo continua a trabalhar no seu repositório privado.


Nota 1: Podem iniciar este terceiro sprint usando uma base fornecida pelos docentes da disciplina. Não é obrigatório fazê-lo, mas pode ser útil para os grupos que não têm uma base funcional. Para a obter, basta:

  1. Fazer download do código da solução (backend.zip)

  2. Substituir a pasta backend do vosso ramo master com o conteúdo do ficheiro disponibilizado

  3. Correr testes e verificar que está tudo funcional

  4. Verificar se há ficheiros novos ou com nome diferente que precisem de ser apagados

Fazer commit para o master (podem usar a mensagem ?update backend to provided base code?)

Nota 2: Se for útil, podem alterar atributos da execução de disciplina Demo (por exemplo, alterar a string academic term ou o atributo endDate). Mais detalhes na secção de testes end-to-end.


As principais tarefas desta parte são:

  1. Extensão da camada de apresentação (Vue.js)

    • Pretende-se estender a vista do dashboard do professor para que esta mostre as estatísticas da execução de disciplina actual e uma visão comparativa das últimas três. O objectivo é que o aspecto do dashboard do professor seja semelhante ao que é mostrado na imagem acima.

    • Será necessário rever/adaptar/estender os modelos actualmente definidos no frontend (ver pasta models), assim como as definições dos serviços remotos (RemoteServices.ts).

    • Do ponto de vista da visualização, será necessário alterar a vista TeacherStatsView.vue. Pretende-se que seja criado um novo componente que represente os gráficos de barras. Para a visualização dos gráficos, sugere-se a utilização da biblioteca vue-chartjs (https://vue-chartjs.org). Sugere-se também o estudo do exemplo oficial: https://stackblitz.com/github/apertureless/vue-chartjs/tree/main/sandboxes/bar?file=src%2FApp.vue 

    • Nota: os grupos podem efetuar alterações ao backend, conforme necessário, aquando da implementação do frontend. Por exemplo, pode ser necessário adicionar ou alterar atributos a DTOs, etc.

  2. Testes end-to-end (Cypress)

    • Pretende-se a implementação de testes end-to-end com o objectivo de demonstrar que os valores apresentados na página do dashboard do professor são os esperados.

    • Cada grupo terá de inicializar os dados usados nos seus testes. Pretende-se criar um estado onde existam três execuções de disciplina relativas aos anos 2023, 2022 e 2019. Pretende-se também que estas execuções tenham estatísticas diferentes. Isto pode ser feito adicionando novos comandos ao ficheiro database.js que manipulam a base de dados directamente (na pasta tests/e2e/support). Ver o exemplo disponível em: https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/5

      Também é possível alterar no backend o método populateDemo() para criar o estado desejado (ver os ficheiros DemoUtils.java e DemoService.java). Ver o exemplo disponível em: https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/4

    • Cada grupo terá de implementar os seguintes testes end-to-end (cada subgrupo implementa um):

      1. Testar se os valores mostrados no dashboard para a execução de 2023 estão correctos e verificar que os três gráficos com três barras relativos às execuções de 2023, 2022 e 2019 são mostrados.

      2. Testar se os valores mostrados no dashboard para a execução de 2022 estão correctos e verificar que os dois gráficos com duas barras relativos às execuções de 2022 e 2019 são mostrados.

      3. Testar se os valores mostrados no dashboard para a execução de 2019 estão correctos e verificar que não são mostrados gráficos (pois não existem execuções anteriores).

    • Para a parte dos testes com os gráficos, sugere-se a leitura do seguinte tutorial: https://glebbahmutov.com/blog/testing-a-chart

  3. Testes de carga (JMeter)

    • Cada grupo terá de implementar os seguintes testes de carga em JMeter (cada subgrupo implementa um):

      1. Fazer login como demo teacher e testar o get do dashboard de professor

      2. Fazer login como demo teacher e testar o update do dashboard de professor

      3. Fazer login como demo teacher e testar a sequência de uma chamada ao create seguida de uma chamada ao remove

    • Como ponto de partida, recomenda-se o estudo e adaptação dos scripts já disponíveis em backend/jmeter. Cada subgrupo deverá entregar o seu plano de teste na forma de um ficheiro .jmx num novo directório chamado teacherdashboard (dentro do directório backend/jmeter).

    • É necessário utilizar uma das versões mais recentes do JMeter. Recomenda-se a instalação da versão 5.5 (https://jmeter.apache.org/download_jmeter.cgi)


A carga de trabalho (quantidade e complexidade das tarefas) deve ser dividida de forma semelhante entre os membros de cada subgrupo. Isto será verificado pelos commits de cada grupo. A nota 0 (zero) será atribuída a alunos que não apresentem commits.

Sugestões de Planeamento

  1. Tal como sugerido nas aulas, começar com um Sprint Retrospective do sprint anterior. O objectivo é a equipa identificar o que correu bem e o que correu menos bem, de forma a tornar-se mais produtiva neste terceiro sprint.

  2. Ler com atenção o enunciado. Caso haja alguma dúvida, procurar esclarecê-la com um dos docentes o mais depressa possível.

  3. Participar nos laboratórios das semanas que iniciam nos dias 20 e 27 de Março, onde serão feitas apresentações sobre Vue.js, Cypress e JMeter.

  4. Os grupos que usarem como base o código disponibilizado devem analisar bem o código.

  5. Planear a divisão de tarefas o mais cedo possível. Em caso de dúvidas, falar com os docentes. Para o board do sprint, sugere-se um novo board com a estrutura usada nos sprints anteriores (sugere-se a criação de uma nova milestone). Tal como no sprint 2, os grupos têm liberdade para estruturar as histórias e tarefas da forma que lhes for mais produtiva.

Critérios de Avaliação

Para o critério "Markdown file with submission summary", basta preencher o template P3.md e colocá-lo numa pasta com nome "markdown". Link para template: https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/6. Versão "raw": https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/6/raw/master/P3.md


Prazo de Entrega

O prazo de entrega é às 17:00 do dia 14 de abril. Daremos 30 minutos de tolerância para resolver pequenos percalços de última hora. Às 17:30, os docentes irão executar um script que recolhe informação sobre todos os repositórios (tags, commits, hashes, e outra informação relevante para as correcções). As tags sprint-3 que forem encontradas pelo script serão as entregas finais que irão ser consideradas e corrigidas. Se não existir tag com esse nome, será usado o último commit do master e será aplicada uma penalização de 1 valor (por não haver tag). Nenhum commit feito depois da execução deste script será tido em conta.