IA 368 - Tópicos em Engenharia de Computação V

Programação na Web


Grupo C5:

 
Ambiente "curso sob medida" + "prova virtual"
 
Proponha o mecanismo de programação mais adequado para a implementação.
 

1. Introdução

A expansão do espaço de informação global causado pelo surgimento da World Wide Web (WWW) permitiu a integração e ampliação dos serviços oferecidos pela Internet e outras redes. Um aspecto essencial nessa ampliação de serviços oferecidos foi o surgimento das chamadas "páginas dinâmicas" na Web. Essas páginas são criadas dinamicamente no servidor através de programas que têm como entrada dados recebidos do cliente (via preenchimento de formulários, por exemplo) e retornam ao cliente o resultado na forma de dados que ele é capaz de entender (uma página HTML ou outro tipo MIME) [1].

A possibilidade de dar dinamismo à WWW, seja através de programas executados no servidor (e.g., CGI scripts [1], [2], Java servlets [3]) ou executados no cliente (e.g., Java applets [4], [5], programas em JavaScript [6]) é o que denominamos "programação na Web".

A programação na Web é o tema principal deste trabalho, que discutirá as diversas formas de programação no contexto de educação à distância, mais precisamente em um ambiente capaz de fornecer "cursos sob medida" de acordo com o perfil do aluno e "provas virtuais", também de acordo com o mesmo perfil. A Seção 2 discutirá de maneira geral as várias formas de programação na Web. A Seção 3 apresentará o ambiente a ser estudado. A Seção 4 proporá a implementação do ambiente com o mecanismo de programação que achamos mais adequado. As conclusões serão apresentadas na Seção 5.
 

2. Mecanismos de Programação na Web

A forma mais "tradicional" de programação na Web é através de programas CGI (Common Gateway Interface) [1], [2]. O CGI é um padrão para que programas externos possam interagir com servidores de informação, determinando a maneira como os dados devem ser passados ao programa (a maioria é passada através de variáveis de ambiente) e a maneira que os programas devem gerar a saída para que eles sejam entendidos pelo servidor Web e pelo cliente. O CGI não impõe restrição quanto ao tipo de linguagem utilizada; desde que o padrão seja seguido e seja possível gerar um executável, qualquer linguagem pode ser utilizada na criação de programas CGI. A linguagem Perl [1] é a mais tradicionalmente utilizada, mas hoje em dia Java também começa a ser muito utilizado devido à sua popularidade [7].

Programas CGI só podem ser executados no servidor, e a cada requisição uma nova cópia do programa é criada. Isso pode sobrecarregar muito o servidor, especialmente em sites com grande número de acessos.

Uma alternativa aos programas CGI é a utilização de applets Java [4], [5]. Applets são programas Java embutidos em uma página HTML (através do tag <APPLET>), que são transmitidos para o cliente e executados no mesmo, a cada vez que a página é acessada. Os applets são transmitidos em byte-codes (conjunto de instruções pré-compiladas, semelhantes ao código de máquina, mas sem serem específicas de qualquer processador), que são verificados na máquina do cliente, garantindo a segurança do código recebido. Além do mais, applets têm outras restrições de segurança,  tais como não poderem fazer acesso a arquivos na máquina do cliente e nem se conectar a qualquer outro servidor que não o de sua origem.

Um dos problemas associados aos applets é a demora no tempo de carregamento. Cada vez que a página é acessada, há a necessidade de transferir todo o código para o cliente. Esse problema é agravado à medida que os applets vão crescendo em tamanho.

Uma das propostas que surgiram para compensar esse problema associado aos applets é a idéia de se criar uma "metáfora de canal" entre cliente e servidor Web [8]. Segundo essa proposta, os canais (uma hierarquia de diretório contendo arquivos) seriam copiados no disco dos clientes que os solicitassem. Com o armazenamento local, o usuário só teria que carregar os programas na primeira vez que solicitasse o canal. Depois disso, o cliente determina a freqüência com que ele solicita ao servidor a atualização do canal (e o servidor determina se há a necessidade de tal atualização). Essa implementação difere dos Web "pushers" [9], [10] porque estes últimos fazem a atualização via "broadcast" a partir do servidor  (com o objetivo mais voltado em facilitar com que as fontes de informação a atualizem através da Internet - exemplos típicos são revistas e jornais eletrônicos). A grande desvantagem dessa tecnologia é a utilização do espaço em disco do cliente.

Outra forma de se realizar o processamento no cliente é através de programas JavaScript [6]. Essa é uma solução proprietária e permite que se coloque programas embutidos nas páginas HTML, programas esses que o "browser" (Netscape) é capaz de interpretar. No entanto, JavaScript é uma linguagem com limitações e não tem obtido o sucesso esperado pelos seus idealizadores.

A execução de programas no cliente nem sempre é a melhor solução. Há casos, como por exemplo o acesso a base de dados localizada no servidor, em que é mais interessante que os programas sejam executados no próprio servidor. Além disso, programas que executam no servidor não dependem do tipo de browser e são mais seguros, pois são executados sob controle direto do administrador [3].

Uma solução promissora nesse sentido é a utilização de servlets [3], uma API padrão da linguagem Java e que pretende ser uma alternativa ao CGI. Basicamente, servlets são programas CGI escritos em Java, com a diferença que o programador não precisa se preocupar com as variáveis de ambiente especificadas pelo CGI e nem com detalhes do recebimento e envio dos dados (cabeçalho HTTP, por exemplo), já que existem métodos na API para realizar  facilmente tudo isso.

As vantagens de servlets sobre CGI são várias:

Por essas razões, acreditamos que a combinação servlets + applets seja a mais adequada para a implementação do ambiente descrito a seguir.
 

3. Ambiente de "curso sob medida" e "prova virtual"

O ambiente de "curso sob medida" provê ao aluno uma versão "personalizada" de um curso disponível na WWW. Um exemplo seria a adaptação de uma disciplina básica aos vários cursos universitários que a utilizam. Seria possível, por exemplo, disponibilizar a disciplina de Cálculo I para alunos de Engenharia Elétrica, enfocando tópicos diferentes daqueles que seriam enfocados para alunos de Matemática.

O ambiente também fornece "provas virtuais", i.e., a avaliação é feita online pelos alunos e as respostas são enviadas para serem corrigidas pelo professor ou são corrigidas automanticamente, se forem de múltipla escolha.

Podem ser estabelecidas nove funcionalidades para este ambiente [11]:
 

  1. Composição das disciplinas através de material, exercícios, provas, etc. (Processo de co-autoria.)
  2. Estabelecimento de perfis para cada curso, definindo diferentes visões.
  3. Cadastramento de usuários com diferentes perfis e níveis de acesso (instrutor, monitor, alunos).
  4. Disponibilização do material.
  5. Acompanhamento do andamento da disciplina.
  6. Fornecimento de feed-back para alunos e professores.
  7. Aplicação de provas e testes.
  8. Correção das provas e cálculo das notas.
  9. Disponibilização dos resultados para eventuais consultas.

4. Implementação por servlets e applets

Para a implementação do ambiente descrito na seção anterior, achamos que o mecanismo de servlets juntamente com os applets é o mais adequado. Essa escolha se justifica pelas vantagens descritas na Seção 2.

As tarefas de um servlet podem ser divididas em três etapas [3]:

Com base nessas três etapas, analisaremos o possível uso de servlets e applets para cada uma das funcionalidades descritas na seção anterior.

1. Composição da disciplina

Na colaboração entre autores é necessário um servlet para controlar a concorrência de escrita, evitando que mais de um autor edite o curso na mesma granularidade ao mesmo tempo. Por granularidade, entendemos uma página, um capítulo, ou outra segmentação qualquer definida pelo autor no momento da escrita. Dividimos esse processo em dois servlets, descritos a seguir:

Servlet para a requisição do material a ser editado:

Servlet para finalizar a edição: 2. Estabelecimento de perfis

Nessa etapa são estabelecidos os perfis de apresentação do material. A idéia é que um usuário especial (por exemplo o coordenador de graduação de Engenharia Elétrica) selecione dentro do material criado na etapa anterior os tópicos que seriam utilizados dentro do perfil que ele estabelece. O servlet para esta funcionalidade seria:

Essa funcionalidade é bastante simples, e para sua implementação poderia ser usado o CGI, ou o Mini-SQL, dentre outras ferramentas. Optamos pelo uso de servlets para manter a coerência em todo a implementação e também porque a linguagem Java facilitaria o acesso a base de dados distribuídas.

3. Cadastro de usuários

Essa etapa é semelhante à anterior do ponto de vista do servlet, que também fará apenas o armazenamento  na base de dados da informação passada pelo usuário.

4. Disponibilização do curso

Nessa etapa o aluno visualiza o curso segundo o seu perfil.

Para efeito de acompanhamento do curso (próxima funcionalidade), é interessante que junto com o material do curso seja enviado um applet que registraria o andamento do curso, enviando para o servidor dados como as páginas acessadas, o tempo gasto para leitura em cada uma delas, etc.

5. Acompanhamento do curso

Dividimos o acompanhamento do curso segundo o ponto de vista do aluno e o do professor. Para o aluno, o acompanhamento do curso significa apenas saber que partes do curso ele já leu, que exercícios foram feitos, etc. Para o professor, o acompanhamento é mais abrangente, e ele pode acompanhar o que cada aluno já leu, tempo gasto na leitura, etc.

O servlet que implementaria o acompanhamento do ponto de vista do aluno seria:

O servlet para o acompanhamento do professor é semelhante, apenas considerando que ele pode monitorar o acompanhamento de qualquer aluno: 6. Feed-back

De certa maneira, parte do feed-back está embutido no item anterior (o acompanhamento do curso é uma forma de feed-back). A outra parte do que entendemos como feed-back pode ser realizada por meio de ferramentas de comunicação já existentes, não havendo a necessidade de implementação específica para este ambiente.

7. Disponibilização da prova

Nesta etapa o aluno recebe e realiza a prova. Dividimos em duas sub-etapas: requisição da prova e conclusão da prova.

Servlet para a requisição da prova:

Após a conclusão da prova, um novo servlet é acionado: É válido ressaltar aqui que não nos preocupamos com outros problemas inerentes a uma "prova virtual", como problemas de queda da rede, possibilidade de outra pessoa fazer a prova em nome do aluno ,etc.

8. Correção

No caso de prova de múltipla escolha,  a correção seria automática, realizada pelo servlet:

Se a prova não for de múltipla escolha, uma possibilidade seria usar um "applet escaninho", para que o professor pudesse receber as provas realizadas pelos alunos e atribuir as notas após a correção.

9. Disponibilização dos resultados

Um simples servlet de acesso a base de dados em conjunto com um applet gráfico para a visualização das notas implementariam esta funcionalidade.

5. Conclusão

A criação de um "curso sob medida", assim como o ensino à distância de uma maneira geral, o comércio eletrônico e outras importantes atividades da WWW só se tornaram possíveis quando ela passou a ter um caráter dinâmico. A programação na Web permite que ela seja usada para a realização de uma ampla gama de tarefas, antes exclusivas de ambientes dotados de ferramentas específicas.

Mecanismos como CGI, applets, servlets e outros têm impulsionado o desenvolvimento e crescimento da WWW, fornecendo a ela as funcionalidades de todo tipo de aplicação. Com a combinação das diversas técnicas de programação na Web, há poucas coisas que um Web site não pode fazer!

6. Referências

[1] S. E. Brenner and E. Aoki. Introduction to CGI/Perl. M&T books, 1996.
[2] The Web Developer's Virtual Librabry. CGI: The Common Gateway Interface for
      Server-side Processing.1997. http://WWW.Stars.com/authoring/CGI
[3] B. Marchal. Dynamic Web Pages in Java - Servlet.  Digital Cat's Java Resource
      Center. Nov. 1997. http://www.javacats.com/US/articles/servlet.html
[4] M. Campione and K. Walrath. Overview of Applets. In The Java Tutorial:
      Object-Oriented Programming for the Internet, 2nd Ed.
      http://www.javasoft.com/docs/books/tutorial/index.html
[5] J. Gosling, B. Joy and G. Steele. The Java Language Specification. Java Series,
      Addison-Wesley, 1996. http://java.sun.com/doc/language_specification/index.html
[6] Netscape Communications Corp. JavaScript Language Specification. 1997.
      http://developer.netscape.com/library/documentation/index.html
[7] P. L. Durante. Write CGI Programs in Java. JavaWorld, 2(1) - Jan. 1997.
      http://www.javaworld.com/javaworld/jw-01-1997/jw-01-cgiscripts.html
[8] B. Venners. Java beyond the browser: The channel metaphor. JavaWorld, 1(10) -
      Dec. 1996. http://www.javaworld.com/javaworld/jw-12-1996/jw-12-channel.html
[9] NETdelivery Corp. Home Page. http://www.netdelivery.com
[10] Netscape Communications Corp. Frequently Asked Questions About In-Box
       Direct. http://form.netscape.com/cgi-bin/forms/misc/ibd_form/html/inboxfaq.html
[11] M. F. Pimenta e M. V. Soares. Formatos de Documentos na Web. Relatório de
       IA 368. http://www.dca.fee.unicamp.br/~ricarte/Courses/IA368/1s98/Xml/final.html