Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
Uma arquitetura de um sistema para interação entre alunos e professores
na aprendizagem de programação
An architecture of a system for interaction between students and
teachers in programming learning
DOI:10.34117/bjdv6n6-577
Recebimento dos originais:08/05/2020 Aceitação para publicação:26/06/2020
Emerson de Oliveira Andrade
Estudante do curso de Bacharelado Interdisciplinar em Tecnologia da Informação pela Universidade Federal Rural do Semi-Árido
Instituição: Universidade Federal Rural do Semi-Árido
Endereço:Departamento de Engenharias e Tecnologia. Universidade Federal Rural do Semi-Árido (UFERSA), Rodovia BR-226, KM 405, s/n - São Geraldo, Pau dos Ferros – RN,
Brasil, 59900-000
E-mail: [email protected]
Reudismam Rolim de Sousa
Doutor em Ciência da Computação pela Universidade Federal de Campina Grande (UFCG) Instituição: Universidade Federal Rural do Semi-Árido
Endereço: Departamento de Engenharias e Tecnologia. Universidade Federal Rural do Semi-Árido (UFERSA), Rodovia BR-226, KM 405, s/n - São Geraldo, Pau dos Ferros – RN,
Brasil, 59900-000
E-mail: [email protected]
RESUMO
As disciplinas de introdução à programação podem apresentar alto índice de reprovações e desistências, nos cursos na área de computação, o que pode ter como consequência um índice baixo de formandos. Os alunos podem apresentar dificuldades para acompanhar os conteúdos abordados nos componentes curriculares. Além da dificuldade inerente a qualquer disciplinas cursada em um curso de graduação, as disciplinas de introdução à programação costumam se tornarem um desafio, devido a falta de uma base prévia dos alunos. Diante deste contexto, propõe-se uma arquitetura de um sistema de tutorial inteligente com o intuito de ajudar os estudantes ingressantes em cursos na área de computação a resolverem problemas por meio de programação. Como forma de avaliar a arquitetura, foram utilizados três cenários importantes no sistema para validar a aplicabilidade da arquitetura proposta.
Palavras-chave: Arquitetura, Algoritmos, Educação, Feedback. ABSTRACT
The subjects presented in the introduction to programming classes can present a high rate of failures and dropouts in courses in the area of computing, which can result in a low rate of graduated students. Students may find it difficult to follow the content covered in the curriculum of these classes. In addition to the difficulty inherent in any subjects taken in an undergraduate course, the subjects of introduction to programming usually become a
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 challenge, due to the lack of a previous base of students. Given this context, an architecture of an intelligent tutorial system is proposed in order to help students entering courses in the field of computing to solve problems by means of programming. As a way of evaluating the architecture, three important scenarios were used in the system to validate the applicability of the proposed architecture.
Keywords: Architecture, Algorithms, Education, Feedback. 1 INTRODUÇÃO
Os componentes curriculares voltados para o ensino de introdução à programação, na área de computação, podem apresentar uma alta taxa de retenção. Por exemplo, no curso de Bacharelado em Tecnologia da Informação (BTI) da Universidade Federal Rural do Semi-Árido - Centro Multidisciplinar de Pau dos Ferros (UFERSA-PDF), a taxa de insucessos foi de 70 % no semestre 2017.1 e 66 % no semestre 2017.2 [Rolim et al. 2020]. Algumas das causas para esses insucessos é o pouco ou a falta de contato com disciplinas voltadas para o desenvolvimento do pensamento computacional no ensino básico, isto pode causar um grande impacto para os ingressantes desses cursos para assimilar o conteúdo abordado em sala de aula [Rolim et al. 2020]. Como consequência, isto pode acarretar na desestimulação e também na evasão do estudante, em busca de realidades que estão mais próximas do contexto do ensino básico. Nestes componentes curriculares ou em seus, respectivos, laboratório, os alunos devem solucionar problemas de programação usando uma linguagem de programação. Além da dificuldade de desenvolver a lógica necessária para resolver os desafios propostos, os alunos também podem cometer erros sintáticos, na escrita de programas na própria linguagem. Neste sentido, os alunos precisam receber auxílio imediato para superar as suas dificuldades.
Os componentes curriculares em introdução à programação são responsáveis por introduzir a lógica de programação aos alunos ingressantes nos cursos na área de computação, além de ser a disciplina base para todo o resto do curso. Dessa forma, esses componentes curriculares são importantes para que o aluno avance no curso e obtenham um bom desempenho nas próximas disciplinas que têm a mesma como pré-requisito, direto ou indireto. Como os temas abordados na disciplina são novos para a maioria dos alunos ingressantes nos cursos na área de computação, a disciplina pode apresentar um nível de dificuldade elevado para o primeiro contato com os alunos, causando alguns problemas, conforme destaca Rodrigues (2002) : i) dificuldade de adaptação dos alunos a desenvolverem o raciocínio lógico, uma vez que muitos vêm de um ensino médio onde eram acostumados a decorar o conteúdo; ii) falta de motivação do aluno ocasionada pelo despreparo e o desânimo quando ele acredita
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 que a disciplina é um obstáculo impossível de ser superado. Por consequência, isso acaba gerando altos índices de reprovação e consequentemente um alto índice de evasão na disciplina durante o período, chegando a casos mais extremos de alunos desistirem do curso por este motivo.
Esses componentes curriculares também se tornam um desafio para os professores para preparar os alunos de forma a obterem um bom desempenho também nas disciplinas que são dependentes do conhecimento desenvolvido na disciplina de introdução à programação. Um desempenho abaixo do esperado acabaria prejudicando os alunos nas próximas disciplinas que têm algoritmos como pré-requisito. Por outro lado, o alto índice de reprovação acaba causando outro problema, o acúmulo de alunos na disciplina, ocasionando a falta de vagas na disciplina, turmas quase vazias de disciplinas que têm a mesma como pré-requisito e consequentemente um baixo índice de formandos no curso.
Segundo Borges (2020) o modo tradicional de ensino de programação no nível superior não consegue atrair com facilidade o interesse dos alunos para a disciplina, pois não é muito motivador para os alunos desenvolverem programas sem uma interface gráfica bem elaborada, levando em consideração que os mesmos normalmente são familiarizados com programas de interfaces bem feitas e atraentes como o sistema operacional Windows, sites e aplicativos. Borges (2020) também destaca que muitos exemplos de programas utilizados por professores na disciplina são baseados em conceitos matemáticos como a série de Fibonacci e fatorial, que segundo ele não são muito motivacionais para os alunos, principalmente, para alunos que não vem com uma base matemática muito boa do ensino médio.
Para ajudar a resolver esse problema, propõe-se uma arquitetura de um sistema de tutorial inteligente para com o intuito de ajudar os estudantes ingressantes em cursos na área de computação a resolverem problemas por meio de programação. O sistema proposto trata-se de um aplicação Web para viabilizar uma maior interação entre alunos e professores no ensino de programação e funciona como uma sala de aula virtual. O sistema é dividido em vários módulos, dentre eles o módulo do professor e o módulo do estudante.
No módulo professor, o sistema permitirá que os professores cadastrem suas turmas de programação. Para cadastrar uma turma, o professor fornecerá todas as informações necessárias e será gerado um código único para identificação da turma, que pode ser disponibilizado para o estudante. O professor fornece esse código para os estudantes, permitindo que eles se cadastrem na turma. Os professores poderão cadastrar questões de programação para os seus alunos praticarem os assuntos vistos em sala de aula e através das
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 correções do sistema ajudar a tirar as dúvidas dos seus alunos, além de possibilitar que o professor consiga acompanhar melhor o desenvolvimento da sua turma durante o semestre.
O módulo estudante permite que o estudante crie uma conta e também se cadastre em uma turma virtual fornecendo o código da turma disponibilizado pelo professor. Os alunos poderão submeter resoluções de questões para o sistema que gera um feedback como resposta, informando se o código foi aceito, incorreto ou com erro de apresentação, similar a um juiz
online tradicional, como o URI.
O sistema também fornece um ambiente em que o estudante pode submeter uma questão que está incorreta e o sistema fornece um feedback sobre o porquê a questão apresenta um problema, usando um sistema de tutorial inteligente. A geração de feedback é baseada na resolução de outros estudantes que apresentaram problemas similares em seus códigos. Caso nenhum estudante tenha submetido uma questão que apresenta erro similar a questão do estudante, o professor é notificado e pode fornecer feedback para o estudante.
2 ARQUITETURA
Nesta seção, descreve-se a arquitetura para o sistema. O sistema foi denominado de SolutionCode, uma vez que auxilia os estudantes a solucionarem suas questões de programação, e tem por objetivo fornecer dicas para os estudantes que possuem dificuldade em resolver problemas de programação, buscando facilitar a interação entre o professor e os alunos na disciplina de algoritmos, para com isso tentar fazer que o aluno tenha mais facilidades de aprendizagem durante a disciplina, como também incentivá-lo através de uma competição saudável entre seus colegas de turma, onde conforme os alunos vão resolvendo questões no sistema, mais eles irão pontuar e consequentemente subirão no ranking da turma no sistema.
2.1 REQUISITOS DO SISTEMA
A definição dos requisitos são importantes para determinar os elementos da arquitetura e tem por objetivo coletar, analisar e definir as necessidades, características e restrições do sistema SolutionCode, focando nas potencialidades requeridas pelos afetados e usuários-alvo, e como estes requisitos foram abordados no sistema. O sistema consiste em uma aplicação Web, que disponibiliza funcionalidades de correção de questões e códigos de programação. Através do sistema, será possível realizar o envio de códigos pelos alunos, bem como a
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 correção por parte dos professores. Os usuários do sistema consistem dos professores, alunos e monitores. Os detalhes de cada usuário é descrito na Tabela 1.
Tabela 1. Usuário do sistema SolutionCode
Ator Descrição
Professor O professor terá grande importância no sistema, será responsável por cadastrar as turmas, questões e as dicas.
Monitor O monitor poderá cadastrar questões e dicas no sistema.
Aluno O aluno responderá as questões que foram cadastradas pelo professor.
2.2 REQUISITOS FUNCIONAIS
No tocante aos requisitos funcionais do sistema, na versão corrente do sistema, foram elencados 30 requisitos funcionais, dispostos na Quadro 1.
Quadro 1: Lista de requisitos do sistema
Requisito Descrição
RF001 - Cadastrar Professor O sistema deverá permitir o cadastro de professor, mediante
a solicitação e a inserção dos dados referentes ao professor.
RF002 - Editar Professor O sistema deverá permitir a edição dos dados de professores já cadastrados.
RF003 - Excluir Cadastro do Professor
O sistema deverá permitir a exclusão dos dados de professores cadastrados mediante a solicitação e confirmação do mesmo.
RF004 - Cadastrar Turma O sistema deverá permitir o cadastro de turmas mediante a solicitação do usuário e a inserção do campo nome da turma, o sistema gerará um código de identificação da turma, cujo os alunos utilizarão este código que será disponibilizado pelo professor para ter acesso a turma.
RF005 - Editar Turma O sistema deverá permitir a edição de informações de turmas cadastradas mediante a solicitação do usuário.
RF006 - Excluir Turma O sistema deverá permitir a exclusão de turma cadastradas mediante a solicitação do usuário.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
RF007 - Cadastrar Questões O sistema deverá permitir que professores e monitores cadastrem questões, mediante a solicitação e inserção das informações das questões, como o assunto ao qual a questão está relacionada.
RF008 - Editar Questões O sistema deverá permitir a edição das informações das questões já cadastradas.
RF009 - Excluir Questões O sistema deverá permitir a exclusão dos dados referentes a questões já cadastradas.
RF010 - Cadastrar Assuntos O sistema deverá permitir que o professor cadastre os assuntos que serão ministrados por ele na disciplina.
RF011 - Editar Assuntos O sistema deverá permitir que o professor edite os assuntos já cadastrados no sistema.
RF012 - Excluir Assuntos O sistema deverá permitir que o professor exclua assuntos já cadastrados no sistema.
RF013 - Cadastrar Dicas O sistema deverá permitir que o professor e o monitor cadastre dicas por categoria de lógica e sintaxe, essas dicas serão genéricas e servirão para qualquer questão relacionada com o assunto da dica.
RF014 - Editar Dicas O sistema deve permitir a edição de dicas.
RF015 - Remover Dicas O sistema deve permitir a remoção de dicas.
RF016 - Cadastrar Aluno O sistema deverá permitir o cadastro de alunos mediante a solicitação do usuário e a inserção dos dados referentes ao aluno.
RF017 - Editar Aluno O sistema deverá permitir a edição dos dados de alunos já cadastrados.
RF018 - Excluir Cadastro do Aluno
O sistema deverá permitir a exclusão dos dados de alunos cadastrados, mediante a solicitação e confirmação do mesmo.
RF019 - Cadastrar Monitor O sistema deverá permitir o cadastro de monitores da disciplina de algoritmo mediante a solicitação do usuário e a inserção dos dados referentes ao monitor.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
RF020 - Editar Monitor O sistema deverá permitir a edição dos dados de monitores já cadastrados.
RF021 - Excluir Cadastro do Monitor
O sistema deverá permitir a exclusão dos dados de monitores cadastrados, mediante a solicitação e confirmação do mesmo.
RF022 - Responder Questões O sistema deverá permitir que o aluno responda às questões cadastradas pelo professor.
RF023 - Utilizar Dicas O sistema deverá disponibilizar dicas cadastradas pelo professor para o aluno utilizar caso tenha dúvidas de como resolver a questão.
RF024 - Pontuação O sistema deverá pontuar um aluno com 5 pontos por cada questão correta.
RF025 - Realizar Login (Professor)
O sistema deverá permitir que um professor realize o login, mediante a inserção dos dados referentes ao processo (ex.: login, senha).
RF026 - Realizar Login (Aluno)
O sistema deverá permitir que um aluno realize o login, mediante a inserção dos dados referentes ao processo (ex.: login, senha).
RF027 - Realizar Logout (Professor)
O sistema deverá permitir que um professor realize o logout.
RF028 - Realizar Logout (Aluno)
O sistema deverá permitir que um aluno realize o logout.
RF029 - Adicionar alunos na turma
O sistema deve permitir que o professor possa adicionar alunos na turma.
RF030 - Remover alunos na turma
O sistema deve permitir que o professor possa remover alunos na turma.
2.3 REQUISITOS NÃO FUNCIONAIS
Os requisitos não funcionais do sistema foram especificados seguindo o modelo da formulação de atributos de qualidade definidos por Bass (2012) para a definição das propriedades requeridas de uma arquitetura de software. Essa especificação consiste de seis elementos, são eles: fonte, estímulo, resposta, métrica, ambiente e artefato. Os quatro primeiros elementos formam os elementos principais da modelagem dos atributos de
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 qualidade/requisitos não funcionais e os dois últimos elementos complementares, mas importantes para a definição da arquitetura.
A fonte indica quem produz o estímulo, podendo ser um usuário ou um subsistema e pode afetar como um sistema se comporta (e.g., o sistema deve se comportar diferentemente para o usuário normal ou alguém que tenta ataca o sistema). Por sua vez, o estímulo define um evento que chega ao sistema e pode ser usado para descrever ações motivantes, tanto com relação a execução do sistema ou a construção do sistema, por exemplo, uma requisição para modificar o sistema. De outra forma, a resposta específica como um sistema deve reagir a estímulos. Já a métrica determina se a resposta é satisfatória. De outro modo, o ambiente determina o conjunto de circunstância em que o sistema deve operar e o artefato denota a porção do sistema a qual os requisitos se aplicam.
Tabela 2. RNF001 - 01 - Usabilidade - Aumentar tamanho da fonte
Característica Descrição
fonte O usuário deseja alterar o tamanho da fonte.
estímulo O usuário seleciona o menu visualização >zoom ou digita ctr+/ctr-
resposta O sistema deve aumentar ou diminuir o tamanho da fonte conforme especificado.
métrica A fonte do sistema é modificado para o tamanho especificado pelo usuário.
ambiente O sistema executa em condições normais de uso em um sistema com configurações padrões (e.g., 4GB+, Processador Celeron+ )
artefato Tela de edição de código
Tabela 3. RNF001 - 02 - Usabilidade - Mudar a cor de fundo Característica Descrição
fonte O usuário deseja mudar a cor de fundo do sistema
estímulo O usuário seleciona o menu preferências >tema
resposta O sistema deve se apresentar da cor de fundo especificada pelo usuário
métrica A fonte do sistema é modificado para o tema especificado pelo usuário (e.g., dark, light, mono)
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
ambiente O sistema executa em condições normais de uso em um sistema com configurações padrões (e.g., 4GB+, Processador Celeron+ )
artefato Tela de edição de código.
Tabela 4. RNF001 -03 - Usabilidade - Interface amigável Característica Descrição
fonte O usuário deseja interagir com o sistema
estímulo O usuário deseja navegar no sistema
resposta O sistema deve permitir a navegação, conforme o usuário desejar
métrica O sistema deve apresentar ícones para todos os menus de navegação, o sistema deve apresentar menus padrões, tais como Arquivos, Editar, Preferências, Inserir, etc.
ambiente O sistema executa em condições normais de uso em um sistema com configurações padrões (e.g., 4GB+, Processador Celeron+ ).
artefato Todo o sistema.
Tabela 5. RNF004 - Segurança de acesso
Característica Descrição
fonte O usuário deseja acessar o sistema
estímulo O usuário informa os seus dados e clica no botão de login.
resposta Se a senha e o nome do usuário estão associados a um usuário cadastrado, o sistema apresenta a tela inicial do sistema, conforme o tipo de usuário. Caso o usuário ou a senha estejam incorretos, o sistema informa ao usuário que os seus dados estão incorretos.
métrica O sistema deve fornecer a resposta correta, permitir que o usuário tenha acesso ao sistema no seu perfil adequado ou informar que os dados do usuário estão incorretos. Essa resposta deve ser fornecida dentro de no máximo 5 segundos.
ambiente O sistema executa em condições normais de uso em um sistema com configurações padrões (e.g., 4GB+, Processador Celeron+ )
artefato Todo o sistema.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 Tabela 6. RNF005 - Manutenabilidade
Característica Descrição
fonte O desenvolvedor deseja adicionar uma nova funcionalidade ao sistema.
estímulo Uma solicitação para o desenvolvimento de uma nova funcionalidade chega a equipe de desenvolvimento.
resposta A equipe de desenvolvimento inicia imediatamente o desenvolvimento da funcionalidade.
métrica A nova funcionalidade deve ser integrada ao sistema dentro de no máximo uma semana.
ambiente A entrega do sistema está sob condições normais, com no mínimo 10 dias para entregar o sistema ao cliente.
artefato Todo o sistema.
2.4 RESTRIÇÕES
O sistema foi projetado para ser utilizado na Web, uma vez que deve ficar disponível para um maior número de usuários. Dessa forma, algumas restrições estão presentes, em que no contexto do projeto de arquiteturas de software, uma restrição define uma decisão que foi tomada e não pode ser alterada, devendo ser considerada durante a elaboração da arquitetura do software. As seguintes restrições foram estabelecidas:
● O sistema deve ser projetado usando HTML, CSS e JavaScript para o
front-end, juntamente com os frameworks React.js e Bootstrap;
● O sistema deverá ser projetado usando Node.js e MongoDB para o back-end.
No contexto de aplicações WEB, o front-end é área de desenvolvimento que estuda tecnologias voltadas a interação como o usuário da aplicação. Como exemplo de tecnologias empregadas para o desenvolvimento do lado front-end da aplicação, inclui-se o HTML (uma linguagem de marcação usada para definir a estrutura da página), o CSS (que trabalha com a aparência dos elementos, por exemplo posicionamento dos elementos, cores, fontes, etc) e o JavaScript (tecnologia utilizada para fornecer dinamicidade as páginas) [W3Schools 2019a]. Além dessas tecnologias, vários frameworks podem ser utilizados para auxiliar no desenvolvimento front-end, tais como o Bootstrap [W3Schools 2019b].
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 Por outro lado, o back-end, em contraste com as tecnologias front-end, estuda tecnologias usadas para o desenvolvimento da modelo de negócio da aplicação. Trabalha também a interação com o modelo de dados da aplicação. Várias tecnologias podem ser usadas no desenvolvimento back-end da aplicação, dentre as tecnologias mais comuns, pode-se incluir o PHP, Node.js e tecnologias que usam a linguagem Java, tais como Servlets, JSP e JSF [W3Schools 2019b]. No tocante ao modelo de dados, vários bancos de dados podem ser empregados para armazenar os dados da aplicação, tais como MySQL e MongoDB (definido posteriormente) [W3Schools 2019b].
De outra forma, o Node.js é um framework back-end para o desenvolvimento de aplicações WEB que usa uma linguagem, tipicamente, empregada para o desenvolvimento da parte front-end de aplicações WEB, o JavaScript. Trata-se de um framework grátis que pode rodar em diferentes plataformas, tais como Windows, Linux, Unix, Mac OS X [W3Schools 2019a]. Dentre as facilidades oferecidas pelo framework, ele permite gerar páginas e conteúdos dinamicamente, pode manipular arquivos do lado servidor, com ações tais como criar, abrir, ler, escrever e deletar arquivos do lado servidor. Além disso, o Node.js permite manipular dados oriundos de formulários e interagir com informações armazenadas em banco de dados [W3Schools 2019a].
Diferentemente, o React.js é um framework para o desenvolvimento de interfaces, em que se destacam três conceitos principais: desenvolvimento declarativo, aplicações baseadas em componentes e multi-plataformas [React.js 2019]. No tocante ao desenvolvimento declarativo, o framework permite que o desenvolvedor crie interfaces para os diferentes estados a aplicação e ao invés de mudar toda a interface de usuário, o React.js atualiza os componentes necessários apenas quando há uma mudança nos dados. Por outro lado, no tocante ao desenvolvimento de aplicações baseadas em componentes, o React.js permite criar componentes individuais que podem ser compostos para criar interfaces de usuário mais complexas. Toda a lógica da aplicação é escrita em JavaScript. Por outro lado, o desenvolvimento multi-plataforma permite que o React.js seja renderizado em um servidor ou, alternativamente, usado para construir aplicações móveis, a partir do React Native [React.js 2019].
Para adicionar responsividade de forma rápida, o sistema utilizará o framework Bootstrap. Como definido pelo criadores do framework [Bootstrap 2019], o Bootstrap é o
framework mais popular para o desenvolvimento de aplicações as quais se destina. O
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 que usam HTML, CSS e JavaScript. Uma das características do Bootstrap é que ele permite o desenvolvimento de aplicações com responsividade, isto é a criação de aplicações que se adaptem a diferentes tipos de telas, tais como computadores desktops, celulares e tablets. Por meio de um conjunto de classes pré-definidas pelo framework, é possível definir como o sistema será apresentado, considerando o tamanho da tela [Bootstrap 2019].
Por outro lado, segundo os proponentes do framework [MongoDB 2019], o MongoDB é o banco de dados que oferece a maior produtividade para o desenvolvimento de aplicações. Trata-se de um banco de dados flexível e escalável que permite a realização de consultas por documentos de interesse e também indexação desses documentos. O MongoDB pode ser acessado por diferentes diferentes linguagens de programação, atualmente, ele oferece suporte para mais de 10 linguagens distintas. O MongoDB armazena os dados usando um tipo de arquivo similar ao JSON, o que fornece flexibilidade para variação de campos entre documentos e permite que os documentos evoluam ao longo do tempo [MongoDB 2019].
2.5 VISÕES ARQUITETURAIS
Assim como é comum em outras áreas, o software pode se tornar uma estrutura complexa, por isso precisa-se representá-lo de diferentes formas [Bass et al. 2012]. Por exemplo, na área de saúde, diferentes visões do corpo humano são usadas para se tomar decisões da forma adequada. No contexto de arquitetura de software, uma visão denota uma representação do software, documentada seguindo um template, usando uma notação e utilizada por alguém interessado no projeto. Basicamente, existem três tipos de visões, a saber a visão de módulos, a visão componente & conector e a visão de implantação.
A visão de módulo apresenta os principais elementos que definem a estrutura do sistema. Por sua vez, uma visão componente & conector representa os elementos de mais alto nível, com caráter reutilizável, que define como os elementos se comportam em tempo de execução. Por sua vez, a visão de implantação detalha onde os elementos de software são implantados ou atribuídos a membros da equipe de desenvolvimento [Bass et al. 2012].
2.6 VISÃO DE MÓDULO
Nesta seção descreve-se a visão de módulo do sistema. Essa visão define os principais elementos do sistema. Para descrever essa visão, utilizou-se o diagrama de classe da Figura 1. Nesse diagrama, as propriedades e os métodos foram omitidos de forma a permitir uma melhor visualização dos elementos do sistema.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 Para identificação das classes foi utilizada a técnica ATA (Análise textual de Abbot), utilizando-se como fonte de informação principal o documento de requisitos definido anteriormente.
Figura 1. Diagrama de Classes
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
2.6.1 Módulo Professor
O módulo professor permite que os professores cadastrem suas turmas. Para cadastrar uma turma, o professor fornecerá todas as informações necessárias e será gerado um código único para identificação da turma, que pode ser disponibilizado para o estudante. O professor fornece esse código para os estudantes, permitindo que eles se cadastrem na turma. Os professores poderão cadastrar questões de programação para os seus alunos praticarem os assuntos vistos em sala de aula e através das correções do sistema ajudar a tirar as dúvidas dos seus alunos, além de possibilitar que o professor consiga acompanhar melhor o desenvolvimento da sua turma durante o semestre.
O módulo professor é composto por vários elementos, dentre eles: O elemento
Professor representa o professor da turma. O professor possui uma relação por herança com o
elemento Usuário, por ser um usuário do sistema. Além disso, o professor possui uma relação de agregação com o elemento Turma, que define a turma que é ministrada por ele. O professor pode fornecer quantas dicas desejar e se comunica diretamente com o elemento Turma. O elemento ControleProfessor é o responsável por gerenciar o professor. Elementos desse tipo são comuns em arquiteturas que seguem o padrão arquitetural Model-View-Controller (MVC). Dessa forma, cada módulo possui um controlador que o gerencia. O controlador do módulo professor (ControleProfessor) permite buscar professores, por meio do elemento
BuscaProfessor, cadastrar professor, por meio do elemento FormularioProfessor, gerenciar
turma por meio do elemento ControleTurma e gerenciar questões por meio do elemento
ControleQuestao. Por sua vez, o elemento BuscaProfessor é responsável pela busca de um
professor específico no sistema. Esse elemento se comunica diretamente com o elemento
RemoveProfessor. Por outro lado, o elemento RemoveProfessor é responsável pela remoção
de um professor específico do sistema.
2.6.2 Módulo Monitor
O módulo monitor permite que os monitores gerenciem as questões de programação respondidas pelos alunos que praticam os assuntos vistos em sala de aula. O monitor pode auxiliar a tirar dúvidas dos alunos ao longo da resolução de questões, auxiliando dessa forma o professor no acompanhamento do desenvolvimento da sua turma durante o semestre. Esse módulo é composto por vários elementos, dentre eles o elemento Monitor que representa o monitor da turma. O monitor possui uma relação por herança com o elemento Usuário, uma vez que é um usuário do sistema. Adicionalmente, o monitor possui uma relação de agregação
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 com o elemento Turma, que define a turma que ele acompanha. O elemento ControleMonitor é o responsável por gerenciar o monitor. O controlador do módulo monitor permite remover um monitor, por meio do elemento RemoveMonitor, cadastrar monitor, por meio do elemento
FormularioMonitor. Diferentemente, do professor, o monitor não pode gerenciar turmas, mas
pode gerenciar questões por meio do elemento ControleQuestao. Por sua vez, o elemento
RemoveMonitor é responsável pela remoção de um professor específico do sistema.
2.6.3 Módulo Aluno
O módulo estudante permite que o estudante crie uma conta e também se cadastre em uma turma virtual fornecendo o código da turma disponibilizado pelo professor. Os alunos poderão submeter resoluções de questões para o sistema que gera um feedback como resposta, informando se o código foi aceito, incorreto ou com erro de apresentação, similar a um juiz online tradicional como o URI.
O uso de questões de juízes online foram escolhidos porque os sistemas de juízes online são bastante utilizados no ensino de programação por realizarem o processo de avaliação automático. Os juízes online geralmente possuem um repositório de problemas de programação divididos por tema e dificuldade. Nesse tipo de sistema, o usuário envia o código-fonte e o sistema compila e executa o mesmo utilizando dados de entrada pré-definidos, em seguida os dados são processados realizando uma comparação dos resultados obtidos com os resultados esperados, fornecendo ao final uma resposta ao usuário com base comparação realizada pelo sistema, como por exemplo (certo, errado, erro de compilação) [Chaves et al. 2013].
Os juízes online são facilmente encontrados na internet e são bastante utilizados em competições de programação como a maratona de programação organizada pela Sociedade Brasileira de Computação (SBC), como também vem sendo muito utilizados por alguns professores nas disciplinas de introdução à programação por facilitar a correção dos programas [Francisco et al. 2016]. Um dos juízes online mais conhecido é o Online Judge URI [BEZ and TONIN 2014], no qual o mesmo também permite que o professor faça listas de exercícios com base nas questões presente em seu repositório de questões, podendo assim disponibilizar a lista em sala de aula para seus alunos.
O módulo aluno é composto por vários elementos, dentre eles, o elemento Aluno representa o discente que participa da turma. O aluno, assim como os demais usuários, possui uma relação por herança com o elemento Usuário. Além disso, o aluno possui uma relação de
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 agregação com o elemento Turma, que define a turma que ele faz parte. O aluno pode receber várias dicas, dependendo dos problemas apresentados em sua submissão e se comunica diretamente com o elemento Turma, que faz parte. O elemento ControleAluno é o responsável por gerenciar o aluno e permite buscar alunos, por meio do elemento BuscaAluno, cadastrar aluno, por meio do elemento FormularioAluno, acessar turma por meio do elemento
ControleTurma e acessar questões por meio do elemento ControleQuestao. Por sua vez, o
elemento BuscaAluno é responsável pela busca de um aluno específico no sistema. Esse elemento se comunica diretamente com o elemento RemoveAluno. Por outro lado, o elemento
RemoveAluno é responsável pela remoção de um aluno do sistema.
2.7 MÓDULO QUESTÃO E MÓDULO AUTENTICAÇÃO
Outro módulo do sistema é o módulo questão, que é formado por vários elementos, dentre eles, o elemento Questao, que representa a questão em si. Uma questão pode possuir uma lista de dicas. Dessa forma, o módulo questão possui uma associação com o elemento
Dica. Da mesma forma, uma questão está relacionada a um assunto em particular,
estabelecendo dessa forma uma relação com o elemento Assunto. Uma questão é gerenciada pelo controlador, ControleQuestao, que possui várias funções, dentre elas, cadastrar uma questão por meio do elemento FormularioQuestao, cadastrar uma dica à uma questão em particular pelo elemento FormularioDica, cadastrar um assunto pelo elemento
FormularioAssunto. Além dessas atribuições, o elemento ControleQuestao permite adicionar
uma resposta para uma questão pelo elemento RespostaQuestao, assim como, remover um assunto pelo elemento RemoveAssunto e remover uma questão pelo módulo RemoveQuestao.
Para garantir o controle de acesso ao sistema, a arquitetura também dispõe de um módulo de autenticação. Esse módulo é composto por vários elementos, dentre eles o elemento
Autenticacao, que é responsável pela autenticação dos usuários do sistema. Adicionalmente,
o módulo é composto pelo elemento SistemaAutentica, que dentre outras funcionalidades realiza a validação dos dados informados pelos usuários.
2.8 VISÃO COMPONENTE & CONECTOR
Nesta seção, descreve-se a visão Componente & Conector do sistema. Essa visão é usualmente representada pelo diagrama de componente disponível na notação UML.
Com relação a visão Componente & Conector, o módulo professor é composto por vários componentes, que podem ser vistos na Figura 2. Dentre esses elementos, o componente
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
GerenciarMonitor permite ao professor gerenciar o monitor que o auxilia ao longo da
disciplina. Para gerenciar um monitor, o professor precisa está autenticado. Por isso, esse componente se conecta diretamente com o componente AutenticaUsuario, que promove o controle de acesso para permitir que apenas usuários autenticados e autorizados possam acessar determinadas capacidades do sistema. Esse módulo também se conecta com o módulo responsável Banco de Dados, que lida com o banco de dados do sistema. Por outro lado, o componente CadastrarProfessor permite o cadastro dos professores. Além disso, o professor pode lidar com as turmas por meio do módulo GerenciarTurma e gerenciar temas de aula por meio do módulo GerenciarAssunto. Adicionalmente, o professor pode gerenciar questões por meio do módulo GerenciarQuestao.
Figura 2. Visão Componente & Conector para o Módulo Professor
Fonte: Autoria própria
No tocante à visão componente & conector do módulo monitor, os elementos são mostrados na Figura 3. Do mesmo modo que o módulo professor, o monitor pode controlar as questões por meio do módulo GerenciarQuestao. Da mesma forma, para propiciar controle de acesso, os monitores são autenticados por meio do módulo Autenticausuario. O monitor também controla suas informações por meio do módulo GerenciarMonitor e gere os alunos por meio do módulo GerenciarAluno. Para gerir essas informações, os módulos possuem acesso ao componente Banco de Dados.
De outra forma, com relação à visão componente & conector do módulo aluno, os elementos são mostrados na Figura 4. Esse módulo é composto pelos elementos
GerenciarAluno, que realiza operações relacionadas ao controle dos alunos do sistema. Para
serem gerenciados, os alunos precisam estar cadastrados no sistema, dessa forma esse módulo possui uma conexão com o elemento Banco de Dados, que representa o banco de dados do
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 sistema. O cadastro dos alunos é realizado pelo elemento CadastrodeAluno. De forma, a gerir as questões cadastradas para ele no sistema, o módulo aluno possui o elemento
GerenciarQuestao, que para ser utilizado precisa que o aluno esteja autenticado, dessa forma,
torna-se necessário uma conexão com o elemento AutenticaUsuario.
Figura 3. Visão Componente & Conector para o Módulo Monitor
Fonte: Autoria própria
Figura 4. Visão Componente & Conector para o Módulo Aluno
Fonte: Autoria própria
2.9 VISÃO DE ALOCAÇÃO
O terceiro e último tipo de visão é a visão de alocação ou visão de implantação, que descreve dentre outros elementos como o sistema será implantado. A visão de alocação pode ser vista na Figura 5. No tocante à arquitetura do sistema proposto, o mesmo será implantado
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 em um servidor remoto, que possibilitará o acesso a qualquer momento e de qualquer lugar pelos alunos. Os usuários acessam o sistema usando qualquer sistema operacional e qualquer navegador a sua disposição. Adicionalmente, o banco de dados estará separado logicamente e fisicamente do módulo do sistema proposto.
Figura 5. Visão de Alocação do Sistema
Fonte: Autoria própria
2.10 AVALIAÇÃO DA ARQUITETURA
Uma arquitetura de software, comumente, é validada utilizando o método Architecture
Tradeoff Analysis Method (ATAM) [Bass et al. 2012]. O ATAM revela o quão bem uma
arquitetura atende a objetivos específicos de qualidade e fornece informações sobre como esses objetivos de qualidade interagem entre si (tradeoff). No contexto industrial, o ATAM é realizado com vários grupos de usuários, dentre eles. O primeiro grupo de avaliadores externos ao projeto cuja arquitetura está sendo avaliada. Um segundo grupo de tomadores, que possuem o poder de falar pelo projeto de desenvolvimento ou têm autoridade para exigir mudanças nele e um terceiro grupo das partes interessadas têm interesse próprio na arquitetura funcionando como anunciada. Adicionalmente, todo o processo ATAM pode ser dividido em nove etapas. Por se tratar de um projeto acadêmico e não industrial, não tornou-se viável incluir todos os envolvidos, assim como realizar todas as etapas do ATAM. Por isso, neste trabalho, utilizou-se apenas uma das práticas do ATAM que é a utilização de cenários de forma a exercitar as partes importantes da arquitetura de forma a descrever como o sistema se comporta em tempo de execução. Os modelos para descrever o comportamento do sistema são úteis para a análise de algumas propriedades, tais como latência desejada, que necessita que a arquitetura
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 inclua informações sobre o elemento e a interação dele com outros elementos. Para isso, foram selecionados três cenários principais, representados na forma de diagrama de sequência, para cadastrar uma questão, para cadastrar uma turma e para o aluno utilizar uma dica.
Na Figura 6 pode ser visto o diagrama de sequência para o professor cadastra uma questão. Para cadastrar uma questão, o professor realiza uma conexão com o elemento
FormularioQuestao, este por sua vez apresenta um formulário, em que o usuário preenche
todos os campos. Estas informações são fornecidas para o elemento ControleQuestao para realizar o cadastro da questão. O elemento ControleQuestao realiza a verificação dos dados e realiza o cadastro da questão. Em caso da questão ser cadastrada com sucesso, uma mensagem é informada ao professor.
Figura 6. Diagrama de Sequência para Cadastrar uma Questão
Fonte: Autoria própria
De forma similar, na Figura 7 pode ser visto o diagrama de sequência para o cenário em que o professor cadastra uma turma. Para cadastrar uma turma, o professor se conecta com o elemento FormularioTurma, este por sua vez apresenta um formulário, em que o professor preenche todos os campos. Estas informações são fornecidas para o elemento ControleTurma para que o cadastro da turma seja realizado. O elemento ControleTurma verifica dados e realiza o cadastro da turma. Em caso da turma ser cadastrada com sucesso, uma mensagem é informada ao professor.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 Figura 7. Diagrama de Sequência para Cadastrar uma Turma
Fonte: Autoria própria
Diferentemente, na Figura 8 pode ser visto o diagrama de sequência para o cenário para um aluno utilizar dicas. Para isso, o aluno se conecta ao elemento FormularioDica. Este por sua vez, se conecta ao elemento ControleQuestao, que realiza uma busca de uma lista de dicas para o aluno, que é retornada para o aluno. O aluno, por sua vez, seleciona a dica de interesse e a utiliza para o auxiliar na resolução da questão.
Figura 8. Diagrama de Sequência para Utilizar Uma Dica
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761
3 CONCLUSÃO
Neste trabalho foi proposta uma arquitetura de um sistema de tutorial inteligente para com o intuito de ajudar os estudantes ingressantes em cursos na área de computação a resolverem problemas por meio de programação. O trabalho foi motivado pelo alto índice de reprovações e desistências dos alunos na disciplina em disciplinas de introdução à programação pode ter como consequência um índice baixo de formandos. Nessas disciplinas, os alunos podem apresentar dificuldade para acompanhar o conteúdo abordado no componentes curricular. Além da dificuldade inerente a qualquer disciplinas cursada em um curso de graduação, as disciplinas de introdução à programação costumam se tornarem um desafio, devido a falta de uma base prévia dos alunos. Muitos alunos nunca tiveram contato antes com o ensino de lógica de programação durante o ensino básico e o estilo de ensino tradicional da disciplina não consegue atrair suficientemente os alunos. No ensino tradicional, os professores costumam apresentar o conteúdo, geralmente com resoluções de questões envolvendo problemas matemáticos. Dessa forma, além da dificuldade do aluno de desenvolver a lógica de programação para resolver a questão, o aluno precisa entender alguns conceitos matemáticos para chegar a uma solução. Como resultado esperado desse trabalho, tem-se o desenvolvimento de um sistema Web com o objetivo de promover uma maior interação entre os alunos e os professores das disciplinas de introdução à programação (componente curricular Algoritmos em BTI na UFERSA-PDF), como também motivar os alunos para a disciplina, deixando o processo de aprendizagem mais divertido, através de uma competição saudável entre eles, onde ao resolver às questões propostas pelo professor, os alunos irão pontuar no ranking da turma no sistema, como também desenvolver um ambiente dentro do sistema SolutionCode com dicas e exemplos de programas clássicos na área da programação com suas devidas soluções.
REFERÊNCIAS
[Bass et al. 2012] Bass, L., Clements, P., and Kazman, R. (2012). Software Architecture in
Practice. Addison-Wesley Professional, 3rd edition.
[BEZ and TONIN 2014] BEZ, J. L. and TONIN, N. A. (2014). URI online judge e a
internacionalização da universidade. Disponı́vel em https://scratch.mit.edu/ Acessado em 15 de abril de 2019.
Braz. J. of Develop.,Curitiba, v. 6, n.6, p.40868-40890 jun. 2020. ISSN 2525-8761 library in the world. Disponı́vel em https://getbootstrap.com/ Acessado
em 13 de outubro de 2019.
[Borges 2020] Borges, M. A. F. (2020). Avaliação de uma metodologia alternativa para a aprendizagem de programação. In Proceedings of the VIII Workshop de Educação em
Computação, WEI ’20, pages 1–15. WEI.
[Chaves et al. 2013] Chaves, J. O., Angélica Castro, R. L., Lima, M. V., and Ferreira, K. H. A. (2013). Uma ferramenta baseada em juı́zes online para apoio às atividades de programação de computadores no moodle. Renote – Revista Novas Tecnologias na
Educação, 11(3):1–10.
[Francisco et al. 2016] Francisco, R., Júnior, C. P., and Ambrósio, A. P. (2016). Juiz online no ensino de programação introdutória - uma revisão sistemática da literatura. In Proceedings
of the Brazilian symposium on computers in education (simpósio brasileiro de informática na educação), SBIE ’16, pages 11–20. SBIE.
[MongoDB 2019] MongoDB (2019). What is MongoDB. Disponı́vel em https://www.
mongodb.com/what-is-mongodb Acessado em 13 de outubro de 2019.
[React.js 2019] React.js (2019). React - Uma biblioteca JavaScript para criar interfaces de usuário. Disponı́vel em https://pt-br.reactjs.org/ Acessado em 13 de outubro de 2019.
[Rodrigues 2002] Rodrigues, Junior, M. C. (2002). Como ensinar programação? informática.
Boletim Informativo, (1).
[Rolim et al. 2020] Rolim, R., Leite, F. T., de Oliveira Guimarães, A., and de Oliveira, A. R. (2020). Pré-algoritmos - ações de apoio à melhoria do ensino de graduação. Brazilian Journal
of Development, 6(3):12625–12635.
[W3Schools 2019a] W3Schools (2019a). Node.js Introduction. Disponı́vel em https: //www.w3schools.com/nodejs/nodejs_intro.asp Acessado em 13 de outubro de 2019. [W3Schools 2019b] W3Schools (2019b). Web Development. Disponı́vel em https:// www.w3schools.com/whatis/ Acessado em 13 de outubro de 2019.