Silva LGL TCC Soro
Silva LGL TCC Soro
Sorocaba
2024
LUCAS GABRIEL DE LIMA SILVA
Sorocaba
2024
S586d
Silva, Lucas Gabriel de Lima
Desenvolvimento de um software Web para auxiliar o processo de ensino-aprendiza-
gem da disciplina de Introdução à Ciência da Computação (ICC) da
UNESP - Instituto de Ciência e Tecnologia de Sorocaba / Lucas Gabriel de Lima Silva. -
- Sorocaba, 2024
76 p. : il., fotos
Sistema de geração automática de fichas catalográficas da Unesp. Biblioteca do Instituto de Ciência e Tecnologia, Sorocaba.
Dados fornecidos pelo autor(a).
BANCA EXAMINADORA:
Maio de 2024
AGRADECIMENTOS
Agradeço aos meus pais, Nelson e Maria, por todo apoio, confiança e incentivo
proporcionados durante a graduação e aos meus irmãos, Letícia e Leonardo, por serem
exemplos de dedicação e grandes inspirações para mim ao longo da trajetória acadêmica.
Agradeço à minha namorada, Érika Dantas, por sempre estar ao meu lado, me apoiando
nas minhas decisões e não deixando que eu desista dos meus objetivos.
Agradeço ao meu orientador, Prof. Dr. Márcio Alexandre Marques, por sua orientação,
confiança e auxílio. Seu conhecimento e apoio foram fundamentais para o desenvolvimento
deste trabalho.
Agradeço aos meus amigos, em especial ao Guilherme Doubek, Giovanni Dotta, Matheus
Nunes e Willian Saito pela parceria em todos os momentos bons e ruins vivenciados no decorrer
da graduação, inclusive durante o desenvolvimento deste trabalho. Vocês fazem parte da minha
história e das minhas conquistas e tudo o que vivemos juntos ficará guardado para sempre em
minha memória.
Minha eterna gratidão a todos vocês que fizeram parte da minha trajetória acadêmica,
sem a ajuda fornecida não teria chegado até aqui.
RESUMO
Nos cursos de graduação da área de tecnologia, grande parte dos discentes vêm apresentando
dificuldades no aprendizado de disciplinas introdutórias de programação, tanto por conta da
complexidade inerente ao seu conteúdo, quanto pela ausência de formas alternativas de ensino
que estimulem o interesse pelo assunto e mantenham os alunos em um ritmo constante de
estudo. Esta situação tem levado ao uso de Softwares Educacionais (SE) para auxiliar no
processo de construção da aprendizagem. Embora existam Softwares Educacionais disponíveis,
como o Codecademy e HackerRank, eles carecem de uma solução unificada que integre os
recursos de material didático, exercícios práticos com feedback automático e monitoramento
das atividades pelo docente. Diante disso, o presente trabalho propõe desenvolver um protótipo
de Software Educacional que integre os recursos supracitados de forma personalizada para a
disciplina de Introdução à Ciência da Computação (ICC) do curso de graduação em Engenharia
de Controle e Automação da UNESP Câmpus de Sorocaba. Para o desenvolvimento do
protótipo, utilizou-se a ferramenta Figma na elaboração do layout, o Trello na definição das
regras de negócio em formato de tarefas, o DB Designer na estruturação do banco de dados e o
Visual Studio Code na construção dos códigos do front-end e do back-end. Foi possível
desenvolver a aplicação e disponibilizá-la na internet para ser acessada por meio de um link. A
ferramenta foi testada por ex-alunos da disciplina de ICC e ao final do período de validação,
eles responderam um formulário, fornecendo apreciações e avaliações pertinentes. As respostas
obtidas demonstraram um alto nível de satisfação dos participantes com o protótipo, destacando
a sua fácil usabilidade, a relevância do material didático, o valor dos exercícios com feedback
automático e a importância do acompanhamento do docente. A análise dos resultados
evidenciou não só a eficácia de cada um dos recursos individualmente, mas também do
protótipo como um todo em relação à usabilidade e à relevância destes para a disciplina. Com
base nos resultados obtidos, foi possível concluir que o protótipo de Software Educacional,
desenvolvido de forma personalizada para a disciplina de ICC, integra com sucesso os recursos
de material didático, exercícios com feedback automático e monitoramento das atividades pelo
docente.
In undergraduate courses in the technology field, a large portion of students have been facing
difficulties in learning introductory programming disciplines, both due to the inherent
complexity of their content and the absence of alternative teaching methods that stimulate
interest in the subject and keep students in a constant study rhythm. This situation has led to the
use of Educational Software (ES) to assist in the learning process. Although there are available
Educational Software such as Codecademy and HackerRank, they lack a unified solution that
integrates resources such as educational material, practical exercises with automatic feedback,
and monitoring of activities by the teacher. Therefore, this work proposes to develop an
Educational Software prototype that integrates the aforementioned resources in a personalized
way for the Introduction to Computer Science (ICC) discipline of the Control and Automation
Engineering course at UNESP Sorocaba. For the development of the prototype, the Figma tool
was used for layout design, Trello for defining business rules in task format, DB Designer for
structuring the database, and Visual Studio Code for building front-end and back-end codes. It
was possible to develop the application and make it available on the internet to be accessed
through a link. The tool was tested by former ICC students, and at the end of the validation
period, they responded to a form, providing relevant feedback and evaluations. The responses
obtained demonstrated a high level of satisfaction from participants with the prototype,
highlighting its easy usability, the relevance of the educational material, the value of exercises
with automatic feedback, and the importance of teacher monitoring. The analysis of the results
not only evidenced the effectiveness of each resource individually but also the prototype as a
whole regarding usability and relevance for the discipline. Based on the results obtained, it was
possible to conclude that the prototype of Educational Software, developed specifically for the
ICC discipline, successfully integrates the resources of educational materials, exercises with
automatic feedback, and monitoring of activities by the professor.
1 INTRODUÇÃO ........................................................................................................ 12
2 REVISÃO BIBLIOGRÁFICA ............................................................................... 14
2.1 Desenvolvimento Web .............................................................................................. 14
2.2 Linguagem de programação ................................................................................... 14
2.3 Typescript ................................................................................................................. 15
2.4 Tecnologias para desenvolvimento de front-end ................................................... 16
2.4.1 React .......................................................................................................................... 16
2.5 Tecnologias para desenvolvimento de back-end .................................................... 16
2.5.1 Node.js ....................................................................................................................... 17
2.5.2 Express ...................................................................................................................... 17
2.5.3 Prisma ........................................................................................................................ 18
2.5.4 PostgreSQL................................................................................................................ 18
2.6 Sistemas de controle de versão ............................................................................... 19
2.6.1 Git ............................................................................................................................ 19
2.6.2 GitHub ....................................................................................................................... 20
2.7 Ferramentas auxiliares utilizadas durante o desenvolvimento do projeto ......... 20
2.7.1 Figma......................................................................................................................... 20
2.7.2 DB Designer .............................................................................................................. 20
2.7.3 Trello.......................................................................................................................... 21
2.7.4 VS Code ..................................................................................................................... 21
2.7.5 Notion ........................................................................................................................ 22
3 MATERIAIS E MÉTODOS .................................................................................... 23
3.1 Materiais ................................................................................................................... 23
3.2 Métodos ..................................................................................................................... 23
3.2.1 Infraestrutura geral da aplicação............................................................................. 23
3.2.2 Estruturação da interface do usuário ...................................................................... 25
3.2.2.1 Páginas de login e cadastro ....................................................................................... 25
3.2.2.2 Página de módulos ..................................................................................................... 26
3.2.2.3 Páginas de cadastro e edição de módulo .................................................................. 27
3.2.2.4 Página de aula ........................................................................................................... 29
3.2.2.5 Páginas de cadastro e edição de aula ....................................................................... 31
3.2.2.6 Páginas de videoaula e resumo ................................................................................. 32
3.2.2.7 Página de exercícios .................................................................................................. 33
3.2.2.8 Páginas de dashboard e dashboard do aluno............................................................ 34
3.2.3 Definição das regras de negócio ............................................................................... 36
3.2.3.1 Autenticação do usuário ............................................................................................ 37
3.2.3.2 Módulos...................................................................................................................... 38
3.2.3.3 Cadastro e edição de módulo .................................................................................... 38
3.2.3.4 Aulas ........................................................................................................................ 39
3.2.3.5 Cadastro e edição de aula ......................................................................................... 39
3.2.3.6 Vídeo ........................................................................................................................ 40
3.2.3.7 Resumo ....................................................................................................................... 40
3.2.3.8 Exercícios e envio de resoluções ............................................................................... 40
3.2.3.9 Dashboard.................................................................................................................. 41
3.2.4 Estruturação das tabelas do banco de dados ........................................................... 42
3.2.5 Arquiteturas............................................................................................................... 44
3.2.5.1 Arquitetura do back-end ............................................................................................ 44
3.2.5.2 Arquitetura do front-end ............................................................................................ 45
3.2.6 Usabilidade do usuário ............................................................................................. 46
3.2.7 Compilação do código em C ..................................................................................... 47
3.2.8 Implementação do processo de validação do protótipo ........................................... 48
4 RESULTADOS E DISCUSSÕES ........................................................................... 49
4.1 Apresentação da interface do protótipo ................................................................. 49
4.2 Apresentação e discussão das respostas do formulário de validação do protótipo
................................................................................................................................... 58
4.2.1 Caracterização dos participantes no processo de validação .................................... 58
4.2.2 Usabilidade do protótipo ........................................................................................... 59
4.2.2.1 Recurso de material didático ..................................................................................... 59
4.2.2.2 Recurso de exercícios com feedback automático....................................................... 60
4.2.2.3 Usabilidade geral do protótipo.................................................................................. 61
4.2.3 Relevância do protótipo para a disciplina de ICC ................................................... 62
4.2.3.1 Recurso de material didático ..................................................................................... 62
4.2.3.2 Recurso de exercícios com feedback automático....................................................... 63
4.2.3.3 Relevância geral do protótipo ................................................................................... 65
4.2.4 Apresentação do recurso de monitoramento do docente ......................................... 66
5 CONCLUSÃO .......................................................................................................... 69
REFERÊNCIAS ..................................................................................................................... 71
APÊNDICE A – VISÃO GERAL DO QUADRO DO TRELLO CONTENDO AS
REGRAS DE NEGÓCIO DEFINIDAS PARA O PROTÓTIPO ....................................... 74
APÊNDICE B – LINK DO DEPLOY DO PROTÓTIPO .................................................... 76
12
1 INTRODUÇÃO
Ademais, Raposo e Dantas (2016) acrescentam dois fatores que prejudicam o ensino de
programação introdutória: conteúdos de caráter acumulativo, levando alunos que não se
dedicam a terem dificuldade de acompanhar a disciplina; a ausência de formas alternativas que
estimulem o interesse pelo conteúdo e mantenham os discentes em um ritmo constante de
estudo (RAPOSO; DANTAS, 2016).
Diante desse cenário, uma das estratégias bastante comum atualmente e que tem sido
utilizada para auxiliar no processo de construção da aprendizagem é o uso do Software
Educacional (SE). O Software Educacional é uma categoria de software projetada
especificamente para auxiliar no processo de ensino-aprendizagem em ambientes educacionais
(ALMEIDA et al., 2018). Esses softwares são desenvolvidos com o objetivo de oferecer suporte
pedagógico em diversas áreas do conhecimento, proporcionando recursos interativos,
exercícios práticos, feedback automático e material didático complementar. O SE visa
aprimorar a experiência de aprendizagem dos estudantes, promovendo a compreensão de
conceitos complexos, o desenvolvimento de habilidades específicas e a autonomia no estudo.
2 REVISÃO BIBLIOGRÁFICA
O front-end corresponde a toda a parte visível de um site, com a qual o usuário é capaz
de interagir. Sendo assim, seu desenvolvimento não só envolve as linguagens de programação
voltadas à construção da interface gráfica apresentada pelo navegador ao acessar um
determinado site, como o HTML, CSS e JavaScript, mas também pode envolver bibliotecas que
facilitam esse processo, como React, Angular, Vue, jQuery, entre outras (ROVEDA, 2020).
Já o back-end envolve a programação de toda a parte interna de um site, isto é, tudo que
diz respeito ao seu funcionamento e armazenamento de dados e informações. Ao interagir com
um site, por meio de sua interface visível (front-end), o usuário pode inserir informações que
serão processadas por um servidor e/ou armazenadas por um banco de dados, logo, os dois
últimos representam o back-end da aplicação. Dentre as linguagens de programação utilizadas
no back-end, pode-se citar: JavaScript, Python, Java, Ruby e PHP (ROVEDA, 2020).
2.3 Typescript
O JavaScript possui uma tipagem dinâmica, ou seja, o tipo de dado de uma variável só é
definido após ser atribuído a ela um valor em tempo de execução. Assim, a variável pode
receber um novo valor de tipo diferente sem a ocorrência de erros ou avisos, podendo resultar
em bugs (termo usado para descrever erros, falhas ou comportamentos inesperados em um site)
que passem despercebidos, especialmente em aplicações grandes (LEASE, 2018).
Já o TypeScript utiliza a tipagem estática, isto é, as variáveis recebem um tipo quando são
declaradas. Dessa forma, o TypeScript verifica os tipos adotados em tempo de compilação e
dispara um erro caso seja atribuído um valor de tipo diferente à variável em questão. Contudo,
o disparo do erro não impede a execução do código, pois ele continua sendo “transpilado”
(processo de tradução de código de uma linguagem de programação para outra similar,
mantendo a mesma funcionalidade) para JavaScript e executado normalmente. Em suma, o
TypeScript avisa o desenvolvedor quando há algo errado, envolvendo a tipagem, mas não
modifica a forma como ele é executado (LEASE, 2018).
Dentre elas, o React possui grandes vantagens na sua utilização, pois permite a adição de
outras bibliotecas e garante a construção de sites complexos e performáticos, conforme é
explicitado no tópico a seguir.
2.4.1 React
React é uma biblioteca JavaScript criada pela empresa Meta, cujo foco é facilitar o
processo de criação de interfaces de usuário interativas (META PLATFORMS, 2024). Trata-se
de uma das tecnologias JavaScript mais populares nos dias de hoje. Segundo Greif, Benitte e
Rambeau (2018), 64,8% dos desenvolvedores já a utilizaram e voltariam a utilizá-la (GREIF;
BENITTE; RAMBEAU, 2018).
Ela trabalha com o conceito de “componentização”, que nada mais é do que dividir a
interface que se deseja construir em pequenos componentes, cada um com a sua estrutura,
estilização e comportamento. Dessa forma, é possível tanto reaproveitá-los em partes do layout
que possuem um mesmo padrão de estilo, modificando apenas alguma informação exibida em
tela, como também utilizá-los para compor componentes maiores e mais complexos (META
PLATFORMS, 2024).
O React também permite que sejam adicionadas outras bibliotecas (ou pacotes) durante
o desenvolvimento da interface, de forma a atenderem objetivos específicos, como por
exemplo, facilitar a execução de requisições HTTP, descrever a funcionalidade de certos
elementos, por meio de ícones intuitivos, entre outros (META PLATFORMS, 2024).
Da mesma forma que a construção de interfaces de aplicações web tem sido auxiliada por
diversos tipos de tecnologias, o back-end também possui ferramentas que visam acelerar o
processo de desenvolvimento de um servidor. No contexto da linguagem de programação
17
2.5.1 Node.js
As características supracitadas fazem com que essa tecnologia seja extremamente rápida
e eficiente, tornando-a na ferramenta de desenvolvimento back-end em JavaScript mais popular
atualmente (ARORA, 2022).
2.5.2 Express
Desenvolver um servidor com Node.js, utilizando somente suas funções nativas, pode ser
um trabalho muito verboso, confuso e limitado em recursos, além de fazer com que os
18
Nesse contexto, o Express existe para reduzir esse código padrão, simplificando a API do
Node.js e adicionando novos recursos úteis (HAHN, 2016).
2.5.3 Prisma
Uma das técnicas que tem sido cada vez mais utilizada nos dias de hoje é a de ORM
(Object-Relational Mapping ou Mapeamento Objeto-Relacional), que consiste em aproximar o
paradigma de programação de orientação a objetos ao paradigma do banco de dados relacional.
A tecnologia que utiliza essa técnica é chamada de “mapeador” objeto-relacional (recebendo
também a sigla ORM), a qual geralmente consiste em uma biblioteca ou framework que permite
relacionar objetos a nível de código com os dados que os mesmos representam no banco de
dados, auxiliando no próprio uso do banco (FONSECA, 2019).
Nesse contexto, o Prisma é um ORM de código aberto, cuja arquitetura é formada por
três partes: Prisma Client, ferramenta que permite a construção de queries (instruções utilizadas
para interagir com um banco de dados) de forma automática, sem a necessidade de utilizar a
linguagem SQL, além de prevenir erros relacionados à tipagem quando utilizado com Node.js
e TypeScript; Prisma Migrate, um sistema de migração que permite o versionamento das
modificações feitas nas tabelas do banco de dados; Prisma Studio, uma interface do usuário, na
qual é possível visualizar e editar os dados armazenados no banco (PRISMA DATA, 2024).
2.5.4 PostgreSQL
solicitado por outras aplicações e efetuando tais operações por meio da linguagem SQL. Além
disso, essa tecnologia consegue lidar bem com altos volumes de solicitações e cargas de
trabalho, funcionando muito bem para sites que são utilizados de forma simultânea por vários
usuários (DEVMEDIA, 2015).
Nesse contexto, os sistemas de controle de versão existem para que seja possível gerenciar
diferentes versões de um documento. Assim, é possível organizar o projeto de forma inteligente
e eficaz, podendo acompanhar o histórico de desenvolvimento, desenvolver paralelamente com
outros programadores, customizar uma certa versão sem alterar o projeto principal, resgatar a
aplicação em um ponto em que ela estava estável, entre outras vantagens (SOARES, 2012).
Dentre as ferramentas utilizadas para controle de versão de código, estão o Git e o GitHub,
os quais são explicitados a seguir.
2.6.1 Git
2.6.2 GitHub
2.7.1 Figma
O Figma é uma ferramenta online de design e prototipagem utilizada para criar interfaces
de usuário para sites, aplicativos e outros produtos digitais. Além disso, ela oferece recursos
para desenvolvimento de protótipos interativos de alta fidelidade, sistemas de design e
colaboração entre designers e desenvolvedores. Entre suas vantagens estão o fato de ser baseado
na web, permitindo acesso de qualquer lugar com conexão à internet, a colaboração em tempo
real, uma interface intuitiva, recursos poderosos como ferramentas de vetor e texto, uma
comunidade ativa que contribui com plugins e tutoriais, e uma versão gratuita com muitos
recursos disponíveis (VILLAIN; SILVEIRA, 2023).
2.7.2 DB Designer
PostgreSQL, Oracle, Microsoft SQL Server, entre outros), colaboração em equipe em tempo
real, exportação de modelos para SQL e importação de modelos existentes (DB DESIGNER,
2023).
Dentre suas vantagens, destacam-se sua facilidade de uso, gratuidade para utilização não
comercial, suporte a funcionalidades avançadas de modelagem de dados, versatilidade,
capacidade de colaboração em equipe e acessibilidade de qualquer lugar com acesso à internet.
(DB DESIGNER, 2023).
2.7.3 Trello
2.7.4 VS Code
Utilizado para escrever e depurar projetos de software, o VS Code é valorizado por sua
gratuidade, performance ágil, alta capacidade de personalização e expansão através de
extensões, além de uma comunidade ativa e engajada (MIR, 2023).
22
2.7.5 Notion
3 MATERIAIS E MÉTODOS
3.1 Materiais
• Trello;
• DB Designer;
• Figma;
3.2 Métodos
Já as etapas apresentadas na Figura 2 são abordadas com mais detalhes ao longo dos
tópicos subsequentes.
25
Após realizar o login ou o cadastro, o usuário é encaminhado para a página em que são
exibidos os módulos cadastrados, organizados em cards (elementos visuais usados para
representar uma entidade) contendo informações como nome, descrição e a imagem do módulo
(Figura 5).
Ao clicar no card de um módulo, o usuário é encaminhado para a página onde são exibidas
todas as aulas do módulo em questão, também organizadas em cards com informações
pertinentes. No caso do administrador, é exibido também o botão “Nova Aula” e cada card
possui um menu meatballs com as opções “Desabilitar/habilitar aula”, “Editar aula” e “Deletar
aula”. Os layouts da página de aulas projetados para o usuário comum e o administrador são
mostrados na Figura 9 e na Figura 10, respectivamente.
30
Ao clicar no botão "Nova aula", o usuário é direcionado para a página de cadastro de aula,
a qual possui uma estrutura similar à seção “Aulas” da tela de cadastro de módulo. Essa página
também foi elaborada para ser acessível somente ao administrador e seu layout é mostrado na
Figura 11.
Cada card de aula possui um link que redireciona o usuário para a página da videoaula
correspondente, exibindo um player de vídeo do YouTube e botões para acessar o resumo da
aula, os exercícios ou voltar para a página anterior. O layout da página de videoaula é
apresentado na Figura 13.
33
Já a página de resumo da aula apresenta o link deste no centro, além de botões para
retornar à videoaula ou acessar os exercícios, conforme mostra a Figura 14.
Após clicar no botão “Checar exercício”, é exibido um modal (janela que fica sobreposta
ao conteúdo principal de uma página da web) informando a porcentagem de acertos dos testes
realizados no exercício (Figura 16).
A estruturação das regras de negócio da aplicação web foi concebida visando garantir um
fluxo consistente ao longo de toda a sua utilização. Para documentar tais regras, optou-se pela
utilização da ferramenta Trello, que permitiu o registro delas no formato de tarefas relacionadas
a cada página e/ou funcionalidade do sistema, englobando tanto o back-end quanto o front-end.
Foram criadas listas de tarefas segmentadas por funcionalidade da aplicação. Cada tarefa,
representada por um cartão (elemento do Trello), incluiu um título conciso descrevendo sua
natureza, uma checklist detalhando etapas menores e etiquetas "Back" ou "Front", para indicar
em qual lado da aplicação (servidor ou cliente) a tarefa deveria ser desenvolvida. Um exemplo
de tarefa no Trello contendo as regras de negócio de uma determinada funcionalidade é exibido
na Figura 19. Já a visão geral do quadro do Trello pode ser consultada no apêndice A.
Foi estabelecido que o usuário deve fornecer seu nome completo, e-mail e senha para se
cadastrar na plataforma. Caso ele tente enviar campos em branco, o sistema deve exibir um
alerta solicitando o preenchimento adequado. Da mesma forma, caso haja erro de
preenchimento, como um e-mail inválido, senha fora do padrão (no mínimo 6 caracteres e no
máximo 12) ou nome com estrutura inválida (no mínimo 3 caracteres), o sistema deve informar
ao usuário sobre o campo incorreto.
Além disso, se o e-mail fornecido já estiver em uso, deve ser exibido um alerta ao usuário.
Em caso de erro no servidor, o usuário deve ser notificado e o cadastro não deve ser efetuado.
Após um cadastro bem-sucedido, o sistema deve realizar o login automaticamente e
redirecionar o usuário para a página de módulos, armazenando as informações de login no Local
Storage (forma de armazenamento de dados persistente disponível para aplicativos web) do
navegador. Por fim, foi determinado que o usuário pode navegar da página de cadastro para a
de login por meio de um link.
Já na página de login, foi definido que o usuário deve fornecer seu e-mail e senha para
acessar a plataforma. Da mesma forma que na página de cadastro, caso seja enviado algum
campo em branco ou haja erro de preenchimento, o usuário deve ser notificado e o login não
deve ser efetuado. Em caso de e-mail e/ou senha incorretos, o sistema deve exibir um alerta
indicando a invalidez das credenciais. Após um login bem-sucedido, o usuário deve ser
redirecionado para a página de módulos, com as informações de login armazenadas no Local
Storage e, por último, o usuário deve poder navegar da página de login para a de cadastro por
meio de um link.
Por fim, ao fechar e reabrir o navegador, a aplicação deve manter o usuário logado,
utilizando as credenciais armazenadas no Local Storage. Para efetuar logout, o usuário deve
selecionar o botão "Sair" no cabeçalho, o que deve resultar na remoção das credenciais do Local
Storage e no redirecionamento automático para a página de login.
38
3.2.3.2 Módulos
Ao desabilitar um módulo, deve haver alguma indicação visual sobre seu card que indique
o seu status e, caso um módulo esteja desabilitado, este não deve ser exibido para o usuário
comum.
Por fim, ao clicar em um módulo, o usuário deve ser redirecionado para a página das aulas
referentes ao mesmo.
Nas páginas de criação e edição de módulo, foi definido que o campo “Link do Vídeo”
deve receber um link do YouTube, e o “Link do Resumo”, um link do Notion.
Já no campo "Arquivo dos exercícios" deve ser possível anexar somente um arquivo no
formato JSON e ao lado do título deste campo deve haver um ícone que, ao ser clicado, exiba
um card contendo informações de como deve ser a estrutura do JSON. Ademais, após anexar
um arquivo, suas informações, como nome e tamanho do arquivo, devem ser exibidas em um
elemento visual. Neste elemento, deve haver algum ícone perto das informações do arquivo
que, ao ser clicado, limpe o campo do arquivo e, consequentemente, “esconda” o elemento.
Também foi estabelecido que no formulário de cadastro de módulo, os campos devem ser
obrigatórios e inicializados vazios, enquanto que no de edição, os campos devem ser opcionais
39
No formulário de cadastro, ao clicar no botão "+" ao final da seção "Aulas", deve ser
exibida uma nova seção com todos os campos em branco.
Por fim, ao clicar no botão "Cadastrar" ou “Editar”, as informações devem ser enviadas
para a API e o administrador deve ser direcionado para a página de módulos, onde o novo
módulo ou o módulo editado deve ser exibido.
3.2.3.4 Aulas
Assim como foi definido para os módulos, na página de aulas, o usuário administrador
deve visualizar todas as aulas cadastradas, independente de estarem habilitadas ou não. Já o
usuário comum deve visualizar apenas as aulas habilitadas. Cada aula deve apresentar um nome
e uma imagem.
O administrador deve visualizar o menu meatballs no card de aula, o qual deve exibir as
opções "Desabilitar/habilitar aula", "Editar aula" e "Deletar aula".
Ao desabilitar uma aula, deve haver alguma indicação visual sobre o seu card que indique
o seu status. Caso uma aula esteja desabilitada, esta não deve ser exibida para o usuário comum.
Ao editar uma aula, o administrador deve ser redirecionado para a página de edição de
aula. Já ao deletar uma aula, esta deve ser removida da página de aulas, tanto para o usuário
administrador quanto para o comum.
Por fim, ao clicar em uma aula, o administrador deve ser redirecionado para a página da
videoaula referente à mesma.
As regras de negócio relacionadas aos campos da seção “Aulas” nas páginas de cadastro
e edição de módulo também se aplicam às de cadastro e edição de aula.
40
Dessa forma, foi estabelecido que no formulário de cadastro de aula, os campos devem
ser obrigatórios e inicializados vazios, enquanto que no de edição, os campos devem ser
opcionais e inicializados com as informações salvas no banco de dados.
3.2.3.6 Vídeo
3.2.3.7 Resumo
Caso o aluno opte por não enviar a resolução, a porcentagem de acerto não deve ser
persistida no banco de dados, nem enviada à API, e o status do exercício deve ser definido como
“Não enviado”. Por outro lado, se o aluno optar por enviar, a resolução deve ser persistida, o
41
status do exercício deve ser alterado para “Enviado” e os resultados dos testes devem ser
exibidos no terminal.
Se o aluno sair da página e a resolução tiver sido enviada, ao retornar, a mesma deve ser
exibida no editor de código, bem como a porcentagem de acerto e o status do exercício na
página.
O aluno deve poder enviar uma nova resolução enquanto o prazo de entrega não tiver
expirado, independentemente de já ter enviado uma resolução anteriormente e de ter passado
em todos os testes ou não. Em contrapartida, caso o prazo de entrega tenha expirado, o aluno
não deve poder enviar uma nova resolução.
Por fim, o aluno deve poder navegar entre os exercícios por meio de um Segment Control
(componente que permite aos usuários selecionar uma aba dentre um conjunto de abas
mutuamente exclusivas), o qual também deve apresentar um elemento visual que identifique
quais exercícios foram enviados.
3.2.3.9 Dashboard
O botão “Dashboard” deve ser exibido no cabeçalho apenas para o administrador e deve
ser acessível de qualquer página que o usuário esteja.
Na tabela “users”, o campo “email” deve ser único. Esta tabela possui um relacionamento
de 1:N (lê-se, de um para N) com a tabela “resolutions”, utilizando os campos “id” da tabela
“users” e “userId” da tabela “resolutions”, uma vez que cada usuário pode ter várias resoluções.
Já na tabela “modules”, os campos “name” e “sequence” devem ser únicos, pois não deve
haver repetição de nomes e sequências de módulos. Além disso, há um relacionamento de 1:N
com a tabela “classes”, utilizando os campos “id” da tabela “modules” e “moduleId” da tabela
“classes”, pois um módulo poder conter múltiplas aulas.
A tabela “tests” possui campos para armazenar valores do tipo JSON, como "inputs" e
"result", que representam as entradas e saídas esperadas dos testes, respectivamente. Além
disso, há campos do tipo string, como "inputDataType" e "resultDataType", que armazenam os
tipos de dados das entradas e saídas dos testes, respectivamente, auxiliando assim na lógica de
geração dos testes no front-end.
Por fim, a tabela “resolutions” possui uma restrição que garante que a combinação dos
campos "userId" e "exerciseId" seja sempre única, certificando que cada aluno tenha apenas
44
uma resolução associada a ele por exercício. O campo "resolution" da tabela armazena a
resolução em si, representada no formato JSON, enquanto o campo "grade", do tipo float,
armazena a nota da resolução.
3.2.5 Arquiteturas
Além dessas camadas, no back-end também são utilizados diretórios como Schemas, que
armazenam modelos representando a estrutura dos bodys das requisições para serem utilizados
nas validações realizadas pelos Middlewares. Similarmente, o diretório Types armazena
interfaces e tipos utilizados em toda a aplicação.
No front-end, optou-se por uma estrutura baseada em diversos diretórios distintos, cada
um com uma função específica, sendo eles: assets, components, contexts, hooks, layouts, pages,
services e utils.
Em pages estão as páginas desenvolvidas, cada uma sendo uma composição dos
componentes mencionados anteriormente, também com sua própria estrutura, estilização e
lógica.
O diretório services é responsável por lidar com as chamadas HTTP, desde o envio até o
recebimento, manipulação dos dados e tratamento de erros.
Por fim, o diretório utils contém funções auxiliares da aplicação, como a que valida a
estrutura do arquivo JSON e a que gera os testes a serem executados nos exercícios.
A primeira delas foi o armazenamento dos dados de autenticação. Após realizar login na
plataforma, o token de autenticação e o nível de acesso do usuário (administrador ou usuário
comum) são armazenados no Local Storage do navegador. Isso evita a necessidade de
autenticação a cada acesso à plataforma. Ao clicar no botão "Sair", essas informações são
apagadas do Local Storage e o usuário é redirecionado automaticamente para a página de login,
oferecendo assim a opção de logout.
exercícios, um modal com fundo escuro informa ao usuário a porcentagem de testes executados
com sucesso e oferece as opções de enviar ou não a resolução, dando ao usuário o poder de
escolha e o impedindo de executar outras ações na interface enquanto não escolher uma opção.
Os testes são exibidos no terminal, sendo que os casos de falha são destacados em vermelho e
os de sucesso em verde, facilitando a diferenciação destes por parte do usuário. Além disso,
após o envio de um exercício, a aba correspondente no Segment Control muda para a cor azul,
indicando visualmente que o exercício foi enviado sem que o usuário precise clicar na aba para
visualizar seu status.
Já em relação aos testes, ao clicar em "Checar exercício", o código fornecido pelo aluno
é agregado a um código em C gerado automaticamente pela interface. Esse código contém a
lógica de execução de cada teste e a exibição dos resultados no terminal. O código resultante é
48
então enviado para a API, que realiza a compilação e retorna os resultados dos testes no formato
esperado para exibição no terminal. O fluxo referente à compilação do exercício e execução
dos testes é apresentado no diagrama da Figura 22.
4 RESULTADOS E DISCUSSÕES
Figura 25 - Visualização que o usuário comum tem da página de módulos desenvolvida para o protótipo
Figura 26 - Visualização que o administrador tem da página de módulos desenvolvida para o protótipo
Figura 27 - Página de cadastro de módulo desenvolvida para o protótipo, acessível somente ao administrador
Figura 28 - Página de edição de módulo desenvolvida para o protótipo, acessível somente ao administrador
Assim como a página de módulos, a página de aulas foi elaborada considerando variações
no layout, conforme o nível de acesso do usuário (administrador ou usuário comum), e que foi
detalhado na seção 3.2.3.4 (Regras de negócio - Aulas). A página de aulas visualizada pelo
usuário comum é mostrada na Figura 29, e a pelo administrador é apresentada na Figura 30.
Figura 29 - Visualização que o usuário comum tem da página de aulas desenvolvida para o protótipo
Figura 30 - Visualização que o administrador tem da página de aulas desenvolvida para o protótipo
Figura 31 - Página de cadastro de aula desenvolvida para o protótipo, acessível somente ao administrador
Figura 32 - Página de edição de aula desenvolvida para o protótipo, acessível somente ao administrador
Figura 37 - Estado da página de exercícios do protótipo após o envio da resolução pelo discente, considerando
um caso de sucesso no resultado dos testes
Figura 38 - Estado da página de exercícios do protótipo após o envio da resolução pelo discente, considerando
um cenário de falha nos resultados de alguns testes
Considerando a Figura 37 e a Figura 38, pode-se observar que o resultado de cada teste
no terminal é composto pelo número de sua sequência (número do teste), o seu status final
57
(“PASSOU” ou “FALHOU”), o valor que era esperado como retorno da função desenvolvida e
o valor que de fato foi retornado por ela.
Por fim, a página de dashboard do aluno foi desenvolvida em consonância com as regras
de negócio descritas na seção 3.2.3.9 (Regras de negócio - Dashboard) (Figura 40).
Figura 40 - Página de dashboard do aluno desenvolvida para o protótipo, acessível somente ao administrador
As páginas supracitadas podem ser visualizadas por meio do link de deploy da aplicação
contido no apêndice B.
A questão 1 é exibida a seguir e suas respostas são apresentadas no gráfico da Figura 41.
A partir da Figura 41, pode-se perceber que 60% dos participantes cursaram a disciplina
de ICC no ano de 2020, enquanto 40% cursaram no ano de 2017, evidenciando uma diferença
significativa entre os mesmos com relação ao ano de ingresso, o qual corresponde ao ano em
que a disciplina supracitada é ministrada. Tal diferença pode resultar em perspectivas, opiniões
e respostas diferentes para as perguntas do formulário.
59
O recurso de material didático consiste nas páginas que contêm a videoaula e o resumo
da aula. Nesse contexto, as questões relacionadas à usabilidade deste recurso são mostradas a
seguir e suas respostas são apresentadas na Figura 42 e na Figura 43, respectivamente.
Na Figura 42, nota-se que, exceto pela resposta de um indivíduo que presenciou uma
alteração temporária na exibição da videoaula, a maioria dos participantes não enfrentou
problemas técnicos com o recurso de material didático. Ademais, pode-se observar que apesar
de ter sido constatado um problema técnico temporário no recurso de material didático, a sua
usabilidade não foi comprometida, já que todos os participantes concordaram que este recurso
está bem-organizado e que foi possível acessá-lo de forma bem-sucedida e com facilidade,
conforme mostra a Figura 43.
• Questão 5: “Os exercícios são de fácil acesso dentro do protótipo e a forma de envio
dos mesmos é intuitiva”?
Com base nos dados da Figura 47 e da Figura 48, pode-se perceber que, mesmo tratando-
se de discentes com anos de ingresso e, eventualmente, perspectivas diferentes, todos
concordaram que o recurso de material didático estava alinhado e pode ser relevante para o
ensino de ICC, de forma que tanto com relação ao alinhamento quanto com relação à relevância,
apenas 20% não concordaram totalmente com as afirmações feitas.
• Questão 10: “O feedback automático fornecido após a resolução dos exercícios é útil
para corrigir erros e melhorar o entendimento do aluno”?
A partir dos dados da Figura 49 e da Figura 50, é possível observar que, todos os
participantes concordam com a relevância e contribuição dos exercícios com feedback
65
As questões sobre a relevância geral do protótipo para a disciplina de ICC são mostradas
a seguir e as respostas obtidas são apresentadas na Figura 51 e na Figura 52, respectivamente.
• Questão 11: “Qual é o seu nível geral de satisfação com o protótipo de Software
Educacional para a disciplina de ICC?”
• Questão 12: “Considerando sua experiência com o protótipo, você acredita que ele seria
uma ferramenta útil para os alunos que estão começando a aprender programação na
disciplina de ICC? Por quê?”
De forma geral, o nível de satisfação com o protótipo foi alto, já que 80% das respostas
foram “Muito bom” e 20% foram “Bom”, conforme mostra a Figura 51. Já a partir das respostas
da Figura 52 observa-se que, no geral, os participantes consideraram o protótipo relevante.
Além disso, a unificação dos recursos supracitados em uma única ferramenta e o foco na
revisão e no reforço dos conhecimentos foram pontos adicionais destacados como relevantes
no protótipo.
5 CONCLUSÃO
Com relação a interface da ferramenta, ela teve um alto nível de satisfação relatada pelos
ex-alunos de ICC no processo de sua validação, pois, foram exaltadas características relativas
à organização das páginas, relevância das funcionalidades implementadas e boa usabilidade,
não só de todos os recursos apresentados individualmente, mas também da interação entre os
mesmos, mostrando que a aplicação funciona bem como um todo.
Trabalhos futuros
do usuário, o seu uso também pode ser ampliado e aplicado para outras disciplinas, como Física,
Cálculo Diferencial e Integral, Álgebra Linear, entre outras. Além disso, este projeto pode servir
de referência para futuros estudos ou trabalhos que desejem aprimorar e/ou incrementar as
funcionalidades da aplicação desenvolvida.
71
REFERÊNCIAS
ALMEIDA, A. et al. Indicadores para avaliaçao de software educacional com base no guia
gdsm (goal driven software measurement). In: Brazilian Symposium on Computers in
Education (Simpósio Brasileiro de Informática na Educação-SBIE), 2018. v. 29, n. 1, p. 21.
Disponível em:
https://www.researchgate.net/publication/328735886_Indicadores_para_Avaliacao_de_Softwa
re_Educacional_com_base_no_guia_GDSM_Goal_Driven_Software_Measurement. Acesso
em: 30 jan. 2024.
ARORA, A. How to Get Started with Node.js – Beginner’s Guide to Node. 2022. Disponível
em: https://www.freecodecamp.org/news/introduction-to-nodejs/. Acesso em: 31 jan. 2024.
ATLASSIAN. O que é o Trello: conheça recursos, usos e muito mais. 2023. Disponível em:
https://trello.com/tour. Acesso em: 15 jan. 2024.
CHACON, S.; STRAUB, B. Pro git. [S.l.]: Springer Nature, 2014. Disponível em: https://git-
scm.com/book/en/v2. Acesso em: 15 jan. 2024.
DB DESIGNER. DB Designer: Online Database Schema Design and Modeling Tool. 2023.
Disponível em: https://www.dbdesigner.net/. Acesso em: 21 jan. 2024.
https://www.academia.edu/25554061/LIVRO_PROPRIETARIO_Linguagem_de_Programa.
Acesso em: 16 jan. 2024.
GREIF, S.; BENITTE, R.; RAMBEAU, M. The state of JavaScript 2018: Front-end
frameworks – Overview, 2018. Disponível em: https://2018.stateofjs.com/front-end-
frameworks/overview/. Acesso em: 19 jan. 2024.
HAHN, E. Express in Action: Writing, building, and testing Node. js applications. [S.l.]:
Simon and Schuster, 2016. Disponível em:
https://books.google.com.br/books?id=czkzEAAAQBAJ&printsec=frontcover&hl=pt-
BR&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false. Acesso em: 02 fev. 2024.
JÚNIOR, J. et al. Ensino de algoritmos e programação: uma experiência no nível médio. In:
XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil, 2005.
Disponível em:
https://www.researchgate.net/publication/301292800_Ensino_de_Algoritmos_e_Programacao
_Uma_Experiencia_no_Nivel_Medio. Acesso em: 15 jan. 2024.
META PLATFORMS. React - A JavaScript library for building user interfaces. 2024.
Disponível em: https://legacy.reactjs.org/. Acesso em: 06 fev. 2024.
MICROSOFT. Visual Studio Code - Code Editing. Redefined. 2024. Disponível em:
https://code.visualstudio.com/. Acesso em: 18 jan. 2024.
MIR, M. A. What are the advantages and disadvantages of using Visual Studio Code or
Atom?. 2023. Disponível em: https://medium.com/@ssc.ahmed.926748/what-are-the-
advantages-and-disadvantages-of-using-visual-studio-code-or-atom-d3132bf1af85. Acesso
em: 18 jan. 2024.
NOTION LABS. Notion - The next gen of notes docs. 2024. Disponível em:
https://www.notion.so/product/docs. Acesso em: 21 jan. 2024.
73
STRONGLOOP; IBM. Express - Fast, unopinionated, minimalist web framework for Node.js.
2017. Disponível em: https://expressjs.com/. Acesso em: 31 jan. 2024.
(a)
(b)
75
(c)
(d)
76