A possibilidade de integração de ferramentas externas a ambientes educacionais é um aspecto relevante no que diz respeito ao processo de ensino, aprendizado e treinamento.
Nessa perspectiva, um dos trabalhos realizados dentro do contexto da disciplina Projeto de Objetos Educacionais (ver Seção 2.1.4), no segundo semestre de 1999, consistiu na definição e implementação de um mecanismo para possibilitar a utilização de ferramentas externas a partir do CALM.
Do ponto de vista do aluno, a idéia é que este ao estudar, resolver um exercício prático ou realizar um teste de avaliação possa fazer uso de ferramentas externas ao ambiente CALM, específicas para o ensino/aprendizado do tópico abordado. Sob a ótica do autor, pretende-se manter uma base de dados a respeito das ferramentas integradas ao ambiente, de modo que, durante a autoria, este possa utilizá-las na elaboração de um material didático mais rico e interessante. Com isso o aluno, além de estudar a teoria relacionada a determinado tópico, também pode desenvolver atividades práticas a partir das ferramentas integradas. A Figura 2.11 ilustra a interação entre aluno e autor com ferramentas externas integradas ao ambiente CALM.
Basicamente, alunos e autores interagem com um servidor, via applet, o qual é responsável por consultar uma base de dados contendo informações a respeito das ferramentas integradas. Quanto ao servidor, observa-se que este pode ser dedicado ou não, dependendo da sobrecarga de processamento que a execução de determinada ferramenta poderá causar. Ainda, deve-se ressaltar que, em geral, as ferramentas são dependentes de plataforma e, desse modo, faz-se necessária a presença de servidores que possibilitem a execução remota dos diversos tipos de ferramentas. Quanto à base de dados, embora esta a princípio possa ser omitida, posteriormente, com a adição de um maior número de ferramentas ao ambiente, sua presença torna-se um recurso fundamental permitindo armazenar informações específicas de cada ferramenta tais como: parâmetros específicos, sistema operacional, arquivos gerados, perfil de utilização, etc. Com isso, durante a autoria, o autor pode saber quais informações devem ser fornecidas para a execução de determinada ferramenta, evitando que parâmetros importantes sejam omitidos. Além disso, a partir de uma consulta à base de dados, pode-se estabelecer um filtro de modo que somente ferramentas que possuam relação com o tópico abordado possam ser utilizadas.
O primeiro passo na direção de integrar de ferramentas externas ao CALM foi realizado com a ferramenta de teste POKE-TOOL (Potential Uses Criteria Tool for Program Testing) (Maldonado et al., 1989; Chaim, 1991), que apóia a aplicação de critérios estruturais no teste de programas C. As principais operações realizadas pela POKE-TOOL são:
Basicamente, o usuário entra com o programa a ser testado, com o conjunto de casos de teste e seleciona todos ou alguns dos critérios disponíveis (Todos-Potenciais- Usos, Todos-Potenciais-Usos/Du, Todos-Potenciais-Du-Caminhos, Todos-Nós e Todos- Arcos). Como saída, a ferramenta fornece ao usuário o conjunto de arcos primitivos (Chusho, 1987), o Grafo Def obtido do programa em teste, o programa instrumentado para teste, o conjunto de associações necessárias para satisfazer o critério selecionado e o conjunto de associações ainda não exercitadas. O conjunto de arcos primitivos consiste de arcos que uma vez executados garantem a execução de todos os demais arcos do grafo de programa.
A POKE-TOOL encontra-se disponível para os ambientes DOS e Unix. A versão para DOS possui interface simples, baseada em menus. A versão para Unix possui módulos funcionais cuja utilização se dá através de interface gráfica ou linha de comando (shell scripts). A interface gráfica permite ao usuário iniciante explorar e aprender os conceitos do teste estrutural e da própria ferramenta e oferece melhores recursos para a visualização dos casos de teste e dos requisitos a serem satisfeitos para cada critério. Entretanto, além de ser menos flexível do que os scripts de teste, requer constante interação do testador com a ferramenta, dificultando a realização de estudos empíricos. Quanto aos scripts, embora exijam esforço de programação e completo domínio tanto dos conceitos de teste quanto dos próprios programas que compõem a ferramenta, sua utilização possibilita a execução de longas sessões de teste em batch: o usuário pode construir um programa especificando o teste a ser realizado e a ferramenta simplesmente executa esse programa, permitindo que se economize tempo na atividade de teste devido à redução do número de interações com a ferramenta.
Embora a POKE-TOOL apóie a aplicação de vários critérios estruturais, em uma primeira etapa optou-se por utilizar apenas os critérios baseados em fluxo de controle: Todos-Nós e Todos-Arcos. Tais critérios, além de serem os mais utilizados da técnica estrutural, apresentam conceitos que servem como base para o entendimento de outros critérios de teste.
Para permitir a integração entre o CALM e a POKE-TOOL foi necessário definir um meio de comunicação (interface) entre ambos. Ressalta-se que tal interface deve ser o mais genérica possível de modo a possibilitar que outras ferramentas, além da POKE-TOOL, também possam ser utilizadas a partir do CALM. Nesse sentido, três aspectos foram considerados: o acesso ao código-fonte, a necessidade de um protocolo de comunicação e a forma de interação entre aluno e sistema.
Uma vez que o acesso ao código-fonte nem sempre é possível (e nem desejado), a solução encontrada foi lidar com os arquivos de saída produzidos pela ferramenta. Tal solução exige alguns esforços com respeito à decodificação de tais arquivos. A abordagem adotada -- baseada em arquivos -- requer que os dados produzidos pela ferramenta sejam padronizados conforme uma formatação pré-estabelecida. Visto que a plataforma escolhida é o CALM, a integração foi baseada em componentes de software -- caixas pretas com interface pública que permitem o acesso às funcionalidades do componente. Uniformidade e padronização são aspectos desejáveis na troca de dados, facilitando com isso qualquer eventual intervenção humana ou discussão sobre resultados de entrada e saída. Desse modo, optou-se pela formatação dos dados em XML (eXtensible Markup Language). No caso específico de teste de software, foi definido um conjunto de tags XML tais como Nó, Arco, Requisito e Critério.
Quanto à forma de interação entre aluno e sistema, definiu-se que as interfaces fossem completamente integradas ao CALM. Uma vez que o CALM pode ser visto como um sistema baseado na Web, uma forma natural de integração seria por meio de applets, responsáveis por invocar os comandos da POKE-TOOL e apresentar os resultados ao aluno.
Basicamente, a arquitetura de integração entre o CALM e a POKE-TOOL é composta por dois componentes de software (Figura 2.12). O componente CALM-Converter é responsável por encapsular os dados necessários à execução da POKE-TOOL. O componente POKE-Converter é responsável por receber tais dados e ativar os scripts da ferramenta. Toda saída é processada pelo POKE-Converter e devolvida ao CALM-Converter que, por sua vez, extrai tais dados e os apresenta ao aluno. Todos os dados são transmitidos por meio de invocação a métodos remotos (RMI) e estão em conformidade com o protocolo XML estabelecido.
Como trabalhos futuros, destacam-se a definição de mecanismos que possibilitem a utilização da POKE-TOOL via scripts de teste e a aplicação de outros critérios estruturais apoiados pela ferramenta, além dos critérios baseados em fluxo de controle. Pretende-se ainda investigar a dificuldade na integração de outras ferramentas de teste ao CALM, avaliando o quão genérica é a interface desenvolvida, sugerindo possíveis modificações.
O trabalho resultou na elaboração do artigo ``Fostering Theoretical, Empirical and Tool Specific Knowledge in a Software Testing Learning Scenario'' (Barbosa et al., 2000a), publicado nos anais da International Conference on Engineering and Computer Education (ICECE'2000).