Suporte às atividades iniciais de Engenharia de Software com utilização de Software Livre

Renata Pontin Fortes 
Daniel Cárnio Junqueira 
André Pimenta Freire 

{renata@icmc.usp.br, danielcj@sc.usp.br, 
apfreire@grad.icmc.usp.br} 

Universidade de São Paulo
Instituto de Ciências Matemáticas e de Computação
Caixa Postal 6680 CEP 13560-970
São Carlos, SP - Brasil

Resumo
No presente artigo, é reportada a experiência adquirida com a introdução de recursos de Linux em disciplinas regulares de graduação do Bacharelado em Ciência de Computação do ICMC-USP e disciplinas do programa de pós-graduação, assim como a utilização de outros recursos de Linux em projetos de pesquisa.  Os resultados dessas experiências são discutidos e são apresentadas propostas de continuidade na utilização de Linux e software livre nas atividades de ensino e pesquisa. 

1.  Introdução

Durante os cursos de graduação e de pós-graduação, todos os estudantes de disciplinas relacionadas com Computação se deparam, em algum momento, com a necessidade de utilização de computadores com seus respectivos Sistemas Operacionais, visando o desenvolvimento de programas e atuando em atividades relacionadas com a área de Engenharia de Software.  Considerando-se as diferenças dos Sistemas Operacionais, aos estudantes novatos principalmente, deve ser oferecido o poder de escolha de utilização de um Sistema Operacional que lhes forneça subsídios adequados, confiáveis e que lhes proporcione o potencial tanto para prosseguir o desenvolvimento de suas pesquisas, quanto para utilizar os recursos de outros aplicativos já desenvolvidos.
Dessa forma, é interessante que aos alunos iniciantes, sejam apresentados, logo no início de seus cursos, os recursos de Linux e exploradas algumas de suas potencialidades, de maneira que os estudantes adquiram conhecimentos, possam se envolver com a utilização e o desenvolvimento desses recursos, e de forma geral se familiarizem com o potencial de Linux para seu próprio desenvolvimento em futuros desafios.
Neste projeto, em particular, visamos proporcionar aos estudantes, tanto de graduação, quanto de pós-graduação, a realização das atividades de Engenharia de Software, apoiadas pelos recursos disponíveis em Linux.
O presente artigo reporta a experiência que temos adquirido com a introdução de recursos de Linux em disciplinas regulares de Bacharelado em Ciência de Computação do ICMC-USP, com a utilização de outros recursos de Linux em projetos de pesquisa, tanto em nível de Iniciação Científica quanto de Mestrado, assim como a adoção de recursos de Linux em uma disciplina de pós-graduação (Engenharia de Software). Tecemos considerações sobre essa prática e apresentamos nosso projeto, de continuidade dessa prática e de disseminação aos estudantes iniciantes em Engenharia de Software, do suporte às suas atividades adotando-se os recursos de Linux.

2.  Atividades de Engenharia de Software suportadas com utilização de software livre

Um grande número de softwares de Projetos de Software Livre (Open Source Software - OSS) encontra-se disponível, desde Sistemas Operacionais, com especial destaque para o sistema Linux, até navegadores Web como o Mozilla e suítes completas para escritório, como OpenOffice.org. As principais ferramentas que estão sendo utilizadas e disseminadas por este grupo de pesquisa, além do próprio Linux e seus recursos (na forma de ferramentas utilizadas cotidianamente), são as ferramentas para suporte às atividades de Engenharia de Software.  Neste projeto as atividades de Engenharia de Software que têm sido realizadas com o suporte de Linux são:  controle de versão de software, armazenamento em base de dados, programação (principalmente de aplicativos web) e arquitetura cliente-servidor de software, para a construção das ferramentas.
Para a atividade de controle de versões é utilizado o sistema CVS (Concurrent Version System)  em conjunto com uma interface gráfica (web) licenciada sob a GPL, na forma de uma ferramenta, denominada VersionWeb  [Moreira et~al., 2002,Soares et~al., 2001,Soares and Fortes, 1999,Soares et~al., 2000,Soares and Fortes, 2001], que é desenvolvida por este grupo de pesquisa, no ICMC-USP. O sistema CVS é utilizado como um serviço e portanto um servidor cvs é necessário para que por meio da ferramenta Versionweb se tenha acesso ao repositório dos artefatos de software sob controle de versões, e acesso a suas respectivas versões.
Ainda para acompanhamento do progresso do desenvolvimento da ferramenta Versionweb, dos processos de manutenção da mesma e rastreamento de seus bugs, a ferramenta Bugzilla  foi instalada.
Outra importante atividade, relacionada com a tarefa de persistência de dados das aplicações, é realizada com o suporte de um Sistema de Gerenciamento de Bases de Dados (SGBD), o MySQL, que tem sido especialmente facilitado seu emprego, devido aos recursos providos para as tarefas de gerência de dados e de esquemas das tabelas de dados.  A utilização do MySQL é fundamental nas ferramentas No Risk Planning  [Ribeiro et~al., 2003] e Doc Rationale [Francisco et~al., 2003,Francisco, 2002], que têm sido também desenvolvidas como OSS por este grupo de pesquisa, no ICMC-USP.
Finalmente, e não menos importante, a atividade de Engenharia de Software suportada é a implementação (codificação) das ferramentas (programação). Utiliza-se a linguagem PHP 4.3 em No Risk Planning e em Doc Rationale, e também as linguagens C (compilador gcc) e Python  em VersionWeb. Além disso, No Risk Planning contém código em JSP e assim o servidor de páginas em Java, Tomcat, também tem sido utilizado.
Essa três ferramentas, suas funcionalidades e algumas características de seu desenvolvimento, serão descritas de forma mais detalhada na seção 2.1.
Um aspecto comum dessas três ferramentas é que elas foram projetadas para serem aplicativos que rodam na World Wide Web, e para tanto é utilizado também o servidor web Apache 2.0, e assim a arquitetura cliente-servidor tornou-se imprescindível.
As principais distribuições Linux utilizadas nas atividades didáticas e de pesquisa têm sido:  Mandrake 9.1, RedHat 7.2, RedHat 8, Conectiva 9, e, pelos alunos de graduação, há um laboratório de graduação, do programa Pró-aluno da USP, com 22 computadores com Slackware 9 instalado.

2.1  Ferramentas e pesquisas em desenvolvimento 

Dentre as pesquisas em desenvolvimento por este grupo no ICMC-USP, três delas estão bastante relacionadas com implementação de ferramentas de suporte a atividades de Engenharia de Software de alguma forma. Elas estão fundamentalmente relacionadas com a utilização de software OSS e são denominadas DocRationale, VersionWeb e No Risk Planning. As duas primeiras estão diretamente relacionadas ao suporte das atividades de documentação e controle de versões, respectivamente, da Engenharia de Software, e a No Risk Planning, na forma de uma agenda para grupos baseada na web, propicia que desenvolvedores possam se comunicar, em um espaço comum de armazenamento, de forma assíncrona e síncrona.
A ferramenta DocRationale [Francisco et~al., 2003] permite a captura, estruturação, armazenamento e recuperação de design rationale relacionados aos artefatos de software na Web, dando ênfase ao fator de colaboração entre os membros da equipe.  A ferramenta visa redução da arbitrariedade das decisões e melhor avaliação das consequências de alterações; a recuperação das decisões feitas e uso das mesmas para beneficiar outros projetos; e, finalmente, como um auxílio na manutenção dos sistemas, possibilidades de se encontrar erros no desenvolvimento e melhorar a comunicação dos envolvidos no projeto.  Para tanto, ela combina as perspectivas de comunicação e de argumentação para armazenar as razões de projeto.  Ela foi desenvolvida utilizando a linguagem PHP e o SGBD MySQL. Seu desenvolvimento teve início no ano de 2001 e um aspecto importante é de que ela foi integrada à CoTeia [Arruda Jr. et~al., 2002,Arruda Jr. and Pimentel, 2001] e ao GroupNote para possibilitar que anotações colaborativas na Web fossem possíveis de serem feitas.
A VersionWeb é uma ferramenta para suporte ao controle de versões que foi desenvolvida em 2000. Ela foi originalmente codificada em linguagem de programação C, com a função de oferecer suporte ao controle de versões a desenvolvedores de páginas web.  Desde fevereiro de 2002, a ferramenta está sendo alterada, na forma de uma manutenção evolutiva, para oferecer suporte ao desenvolvimento de software em geral, e, em particular, de software livre (OSS).
O código original da ferramenta VersionWeb está sendo reimplementado em linguagem Python, por possibilitar a produção de código com melhor manutenibilidade e expansibilidade.  Este trabalho vem sendo feito com apoio da Fapesp, e novas funcionalidades estão sendo implementadas. Além de funcionar como uma interface web para o CVS, que permite as principais operações (checkout, commit, diff, log, entre outras), a ferramenta deve funcionar como uma camada extra do CVS, que incorpore um bom serviço de gerenciamento de grupos.
As principais funcionalidades de grupo que devem ser oferecidas na nova versão são:  organização dos usuários em grupos, hierarquia de usuários dentro dos grupos, divisão dos projetos em áreas, cada uma com permissão específica para cada usuário ou grupo de usuários, integração com ferramentas que auxiliem o trabalho em grupo, como chat, quadro de mensagens, atribuição de tarefas para os usuários, estabelecimento de metas, e integração com ferramentas de acompanhamento de bugs, como Bugzilla.
Estuda-se também a possibilidade de, futuramente, ser feita a utilização de módulos da ferramenta ViewCVS , que é desenvolvida como projeto de software livre.  É relevante o fato de que a ferramenta tem sido utilizada por um número considerável de usuários, dentro do próprio ICMC-USP, por mais de um ano.  Os dados de utilização estão sendo estudados, e, entre outras coisas, devem ser utilizados para uma melhor modelagem da nova versão da ferramenta que está sendo implementada, já tendo sido utilizados para auxílio na fase de levantamento de requisitos.
A ferramenta No Risk Planning [Ribeiro et~al., 2003] é um sistema de suporte a agendas para grupos baseada na Web, desenvolvida utilizando a linguagem PHP e o SGBD MySQL. Seu desenvolvimento teve início no ano de 2001, e o seu principal objetivo é fornecer recursos para o agendamento de tarefas cotidianas do meio acadêmico, e oferecer suporte para o agendamento de tarefas de grupos.
Atualmente a ferramenta No Risk Planning é utilizada para o suporte de agendas de disciplinas, integrada à ferramenta de edição colaborativa CoTeia[Arruda Jr. et~al., 2002,Arruda Jr. and Pimentel, 2001], que oferece suporte às disciplinas oferecidas pelo ICMC-USP. A No Risk Planning também está integrada à Intranet do ICMC-USP, efetuando o controle sobre as reservas de salas de aula, de salas de seminários, auditórios e etc.  [Freire and Fortes, 2003], sendo utilizada por mais de 60 docentes e 30 funcionários que fazem uso do sistema de alocação das salas.
A evolução da ferramenta está sendo continuada, e atualmente encontra-se na sua versão 3.1. Uma nova versão da ferramenta, que utilizará XML, está recentemente sendo o alvo principal de desenvolvimento, visando a interoperabilidade e acessibilidade.  Além disso, está sendo desenvolvida, paralelamente, uma versão da ferramenta em JSP e que utiliza Java Applets na sua interface, objetivando alcançar melhorias na usabilidade das interações requeridas pelso usuário para agendamento de seus compromissos no calendário semanal, que pictoricamente representa a agenda.  Esses dois trabalhos de pesquisas que estão sendo desenvolvidos sobre a ferramenta No Risk Planning estão sendo efetuados com o apoio da Fapesp.

2.2  Cursos Ministrados

Como apresentado na seção 1, estamos trabalhando com a apresentação e introdução de recursos Linux aos estudantes dos cursos de graduação e pós-graduação em Bacharelado em Ciência de Computação do ICMC-USP.
Até o momento, os principais cursos ministrados pela orientadora deste projeto (profa.  Renata Pontin de Mattos Fortes), alvo deste projeto de iniciação das atividades de Engenharia de Software usando Linux, foram ministrados para turmas de graduação e uma turma de estudantes de pós-graduação, conforme descritos a seguir.
A disciplina ’Introdução à Ciência de Computação II’ (sigla sce-181) possui ementa de curso que visa a apresentação e análise de técnicas de desenvolvimento de programas corretos e bem estruturados.  Esta disciplina é responsável pela iniciação dos conceitos de Engenharia de Software no desenvolvimento de programas empregando estruturas de dados especiais e de programas cujos algoritmos são as soluções clássicas para os problemas de ordenação e busca.  Nesta disciplina é usualmente adotada a linguagem de Programação C. Portanto, foram utilizados os softwares gnu:  o compilador gcc e o depurador gdb, de forma intensiva.
Durante o curso de ’Introdução à Ciência de Computação II’ foram propostos 5 programas que deveriam ser implementados em equipes de até 3 alunos durante o semestre, além de aulas práticas em laboratório em que lhes eram solicitadas implementações menores, mas que se mostraram essenciais para trocas de experiências sobre os recursos de Linux.  A disciplina foi ministrada nas seguintes vezes: 
1.	em 2001 para uma turma do Bacharelado em Ciência de Computação, com 53 alunos; 
2.	em 2002 para uma turma do Bacharelado em Ciência de Computação, com 67 alunos; 
3.	em 2002 para uma turma do Bacharelado em Matemática Aplicada e Computação Científica, com 25 alunos. 
Vale observar que as três turmas eram de alunos de segundo período, ou seja, estavam cursando o segundo semestre de seu curso.  Eles tinham tido contato com a linguagem Pascal em um curso incial de apresentação de algoritmos no primeiro período e como novatos, eram em minoria os alunos que tinham alguma experiência com Linux previamente.  As turmas, de maneira geral, se mostraram receptivas ao aprendizado e utilização de Linux no curso.
A disciplina ’Programação Orientada a Objetos’ (sigla sce-213) possui ementa de curso que visa a introdução dos conceitos fundamentais do paradigma de orientação a objetos e a sua aplicação à programação orientada a objetos.  Esta disciplina é responsável pela iniciação dos conceitos de Engenharia de Software no desenvolvimento de programas orientados a objetos, uma vez que o curso de Análise e Projeto Orientado a Objetos é não obrigatório.  Nesta disciplina é usualmente adotada uma linguagem de Programação orientada a objetos.  No entanto, para que os conceitos de orientação a objetos fossem mais facilmente assimilados pelos alunos foi adotada a linguagem Python, e a seguir foi estudada a linguagem Java.  A disciplina foi ministrada no primeiro semestre de 2003 para uma turma de Bacharelado em Ciência de Computação, com 55 alunos.  Foram propostos cinco exercícios práticos de programas que deveriam ser codificados em Python, e implementados em grupos de até 4 alunos, durante o semestre.
A disciplina ’Engenharia de Software’ (sigla sce-5764) possui ementa de curso que visa o oferecimento de uma visão abrangente do processo de desenvolvimento de software, baseando-se no seu ciclo de vida e visando aos vários domínios de aplicação.  Esta disciplina é também responsável por apresentar os métodos, técnicas e ferramentas dentro de um contexto de engenharia e não de uma abordagem meramente intuitiva. Nesta disciplina é usualmente adotado algum suporte automatizado para algumas das fases do ciclo de vida de desenvolvimento de um software. Assim foi adotado a ferramneta Bugzilla para apoiar a obtenção das razões de projeto das equipes durante a elaboração dos diversos artefatos de software que foram desenvolvidos durante o curso.
A disciplina ’Engenharia de Software’ foi ministrada no primeiro semestre de 2003 para uma turma com 13 alunos do Programa de Mestrado e Doutorado em Computação e Matemática Computacional do ICMC-USP. Em Bugzilla foram discutidos e tiveram acompanhamento das discussões durante o desenvolvimento de cinco artefatos (especificação de requisitos, modelo conceitual de dados, projeto modular, projeto de interface e plano de testes) que foram projetados por três grupos de 4 alunos, durante o semestre.  Além de Bugzilla, os alunos adotaram de forma bem sucedida a ferramenta VersionWeb, para controle de versões dos artefatos que eram elaborados, apresentados e corrigidos durante o curso.
Observou-se que o resultado desses cursos, sob a perspectiva de iniciação dos recursos e do uso de Linux, adotados para as atividades de Engenharia de Software foi muito bom, pois houve uma motivação importante, a de que eles teriam condições de prosseguimento e envolvimento com os recursos de Linux, e tais recursos se apresentavam com grande potencial exploratório para a maioria dos alunos.  De forma geral, os alunos se mostravam apreensivos e inseguros nas primeiras tarefas que lhes eram solicitadas.  Mas a familiaridade, a partir da terceira tarefa solicitada, e a troca de experiências com os colegas sobre as potencialidades facilitaram as tarefas específicas dos cursos.  Uma possível justificativa sobre este tipo de comportamento seja a de que esses alunos, durante a fase de aprendizado, apreciam o desafio que aos poucos percebem que conseguem superar.
Deve ainda ser ressaltado o uso de uma swiki para comunicação e acompanhamento das aulas:  http: //coweb.icmc.usp.br, denominada CoTeia[Arruda Jr. et~al., 2002,Arruda Jr. and Pimentel, 2001], a qual também foi incorporado um aplicativo para entrega de trabalhos, desenvolvidos em PHP  

3.  Continuidade do Projeto 

Como o principal objetivo deste projeto é adotar, para a realização das atividades de Engenharia de Software, os recursos de Linux, visando a familiarização e envolvimento dos estudantes novatos com o potencial exploratório oferecido em Linux, muitas etapas ainda deverão ser realizadas.
Assim, planeja-se dar continuidade às atividades de ensino que vêm sendo desenvolvidas de apoio e incentivo ao uso de Linux e software livre em geral, além de pesquisas com utilização de ferramentas OSS bem como de desenvolvimento e participação no desenvolvimento de outras ferramentas.
Especialmente nos cursos de graduação e de pós-graduação, devem continuar a ser utilizadas as ferramentas que foram descritas na seção 2.2. Atualmente, o curso de Hipermídia (sigla sce-225) tem sido ministrado com o suporte de DocRationale . Além desta iniciativa, outros professores do ICMC-USP também têm se sentido motivados a utilizar e adotar software livre nos seus cursos, sempre que possível.  Por exemplo, podemos mencionar os cursos de ’Algoritmos e Estruturas de Dados’ (profs.  L.G.Nonato e A.Delbem). Uma repercussão direta da iniciativa deste projeto é de que essa disciplina, ’Algoritmos e Estruturas de Dados’, que é cursada em paralelo à disciplina ’Introdução à Ciência de Computação II’, mencionada na seção anterior, tem sofrido mudanças no sentido de que os alunos passaram a requerer o uso da linguagem C, em sua maioria.
Também pretende-se adotar novas ferramentas nos cursos ministrados, e devem ser feitas propostas de utilização de ferramentas OSS em outros cursos de graduação, como Computação Gráfica, Inteligência Artificial, Sistemas Operacionais, entre outros.
No âmbito das atividades de pesquisa, a meta é de que todos os iniciantes adquiram familiaridade com o Sistema Operacional Linux e seus recursos para apoio às atividades de Engenharia de Software assim que ingressem em seus programas de pós-gradução ou de iniciação científica.  As atividades de pesquisa devem continuar a utilização de software livre, e novas pesquisas devem ser iniciadas com o objetivo de suportar e auxiliar desenvolvimento de software livre.

4.  Considerações Finais

Em algum momento, os estudantes de disciplinas de Computação se deparam com a necessidade de utilização de computadores com seus respectivos Sistemas Operacionais, visando o desenvolvimento de programas e apoio às atividades relacionadas à Engenharia de Software. A partir do momento que consideramos que existem diferenças relevantes entre os diversos Sistemas Operacionais, os estudantes novatos devem ter subsídios para analisar qual Sistema Operacional lhe é mais conveniente. Dessa forma, é interessante que os ingressantes estudem e utilizem os recursos de Linux, e que explorem suas potencialidades, de maneira que eles obtenham conhecimentos e se familiarizem com a realização de atividades iniciais de Engenharia de Software, com base nos recursos de Linux.
A experiência reportada neste projeto foi aplicada em mais de 200 alunos, que venceram as dificuldades iniciais, e serviu de estímulo para que ocorresse a disseminação dos conhecimentos adquiridos. Assim, foi reportada a experiência adquirida com a introdução de recursos de Linux em disciplinas regulares de Computação do ICMC-USP, de graduação e de pós-graduação com a utilização de outros recursos de Linux.  Além disso, foram descritos os projetos de pesquisa, tanto em nível de Iniciação Científica quanto de Mestrado, que envolviam o desenvolvimento de OSS. Neste projeto, em particular, visamos proporcionar aos estudantes, tanto de graduação, quanto os de pós-graduação, a realização das atividades de Engenharia de Software, apoiadas pelos recursos disponíveis em Linux.
Visando a familiarização e o evolvimento dos estudantes novatos com o potencial de crescimento dos projetos de software livre (OSS), este projeto ainda tem metas a cumprir.  Como por exemplo, identificando-se e obtendo melhor compreensão do processo de desenvolvimento de software livre [Reis, 2001], pretendemos viabilizar que as ferramentas desenvolvidas por este grupo tenham pontos de integração com ferramentas estáveis de projetos OSS.
Vale destacar que as diferenças entre as diversas instalações de Linux que têm sido utilizadas en nossos projetos não se apresenta como um empecilho para a portabilidade das ferramentas, e assim, um grau de confiança em Linux favorece ainda mais a sua divulgação.
Algumas considerações foram observadas para que as próximas etapas do projeto seja viável.  Assim, planeja-se dar continuidade às atividades de ensino que vêm sendo desenvolvidas de apoio e incentivo ao uso de Linux e software livre em geral, além de pesquisas com utilização de ferramentas OSS bem como de desenvolvimento e participação no desenvolvimento de outras ferramentas.

Referências
[Arruda Jr. and Pimentel, 2001]	 Arruda Jr., C. R. E. and Pimentel, M. G. C. (2001). Projeto e implementação de um sistema colaborativo de edição. Revista Eletrônica de Iniciação Científica - REIC, 1(2).
[Arruda Jr. et al., 2002]	 Arruda Jr., C. R. E., Pimentel, M. G. C., and Izeki, C. A. (2002). CoTeia:  Uma ferramenta colaborativa de edição baseada na web. Workshop de Ferramentas e Aplicações do VIII SBMIDIA, pages 371–375.
[Francisco, 2002]	 Francisco, S. D. (2002). Uma ferramenta para suporte a Design Rationale em documentos de engenharia de software. Qualificação de Mestrado, Instituto de Ciências Matemáticas e de Computação.
[Francisco et al., 2003]	 Francisco, S. D., Izeki, C. A., Paiva, D. M. B., and Fortes, R. P. M. (2003). Docrationale:  Um auxílio a design rationale na documentação de software. X Sessão de Ferramentas, XVII Simpósio Brasileiro de Engenharia de Software (SBES2003), pages 61–66.
[Freire and Fortes, 2003]	 Freire, A. P. and Fortes, R. P. M. (2003). Manual de uso do sistema de reserva de salas da intranet do icmc-usp. Technical report, ICMC-USP. Relatórios Técnicos do ICMC, 213.
[Moreira et al., 2002]	 Moreira, D. A., Soares, M. D., and Fortes, R. P. M. (2002). Versionweb:  A tool for helping web page version control. Linux Journal.
[Reis, 2001]	 Reis, C. R. (2001). Caracterização de um modelo de processo para projetos de software livre. Master’s thesis, Universidade de São Paulo, São Carlos. Dissertação de Mestrado no ICMC-USP.
[Ribeiro et al., 2003]	 Ribeiro, T. M., Fortes, R. P. M., and Freire, A. P. (2003). Documentação do software agenda no risk planning. Technical report, ICMC-USP, São Carlos-SP, Brasil.
[Soares and Fortes, 1999]	 Soares, M. D. and Fortes, R. P. M. (1999). Gerenciamento de controle de versões de páginas web. In Anais do IV Workshop de Teses em Engenharia de Software do Simpósio Brasileiro de Engenharia de Software (SBES’1999), pages 33–37, Florianópolis, Santa Catarina.
[Soares and Fortes, 2001]	 Soares, M. D. and Fortes, R. P. M. (2001). Um suporte ao controle de versões na web. In Anais do Cadernos de Ferramentas do Simpósio Brasileiro de Engenharia de Software (SBES’2001), Rio de Janeiro, Rio de Janeiro. [Aceito para publicação].
[Soares et al., 2000]	 Soares, M. D., Fortes, R. P. M., and Moreira, D. A. (2000). VersionWeb:  A tool for helping web pages version control. In Proceedings of the International Conference on Internet Multimedia Systems and Applications (IMSA 2000), pages 275–280, Las Vegas USA.
[Soares et al., 2001]	 Soares, M. D., Fortes, R. P. M., and Moreira, D. A. (2001). VersionWeb:  A tool for helping web pages version control. Cadernos de Computação do ICMC-USP, 2(1): 59–68.