Notícias
Testes automatizados no Expresso V3
Artigo
Quando a suíte de comunicação Expresso V3 foi criada, centenas de Testes de Integração1 desenvolvidos pela comunidade Tine202 foram incorporados ao sistema. Devido à urgência para implantação do novo sistema e a dificuldade inicial para explorar os vários aspectos do software, diversas customizações foram feitas na aplicação sem investimento no tempo necessário para adequação de seus respectivos testes, fato que demandou a desativação de todos esses. Isso desencadeou um gargalo na equipe responsável por executar testes não automatizados. Novas versões do software demoraram vários meses para serem disponibilizas em produção, correções ou melhorias foram devolvidas pela equipe de testes manuais para os desenvolvedores, frequentemente surgiam problemas que antes não existiam, e um número cada vez maior de bugs afetou o usuário final.
Duas iniciativas concomitantes e complementares surgiram nas equipes de desenvolvimento. Além da ação para recuperar os Testes de Integração, surgiu uma nova demanda de implementação de Testes Funcionais3 para a nova interface gráfica denominada Expresso Lite4 e posteriormente, uma terceira ação para implementar Testes Funcionais para a interface gráfica padrão.
Como primeiro passo, foi realizado um estudo para ativar a execução dos Testes de Integração nas estações dos desenvolvedores. Nesse estudo pode-se compreender o modelo de Personas5 adotado pela comunidade e utilizado como base para criar usuários fictícios no sistema. Foi então configurada a execução os testes PHPUnit6 a partir do IDE Netbeans. Criou-se uma arquitetura de testes plugáveis para compatibilizá-los com as customizações previamente feitas na aplicação que possibilitou estender os testes da comunidade adicionando, alterando ou removendo comportamentos. A arquitetura de customização possibilitará que novos testes criados pela comunidade possam ser absorvidos de forma simples. Manual, vídeos e cursos foram criados e um modelo de desenvolvimento de testes de forma colaborativa com a comunidade foi formalizado e repassada para todos desenvolvedores.
Quando os desenvolvedores já estavam executando mais de 500 testes em suas estações, como um segundo grande passo, a ferramenta de Integração Contínua Jenkins7 foi reativada possibilitando que estes testes fossem executados todas as vezes que ocorressem submissões de alterações ao repositório da ferramenta de gestão da configuração. Outras melhorias implementadas através do Jenkins não serão detalhadas nesse artigo.
Outra equipe, de forma paralela, implementou uma arquitetura para Testes Funcionais usando o PHPUnit e Selenium8 com foco em testar a nova interface denominada Expresso Lite. Como esta versão se especializa mais na interface gráfica, a utilização de Testes de Integração propriamente ditos não é suficiente, pois estes atuam nos componentes do código, e não na interface. Assim sendo, foram desenvolvidos Testes Funcionais, que verificam as entradas e saídas de dados diretamente a partir da interface do usuário utilizando o Selenium.
O PHPUnit tem uma extensão que permite a integração com o Selenium Server, proporcionando a criação de um framework para facilitar o desenvolvimento de testes automatizados dentro do contexto do Expresso. Neste modelo, cada passo dos testes (p. ex.: clicar no botão “escrever”, digitar “email@serpro.gov.br” no campo “Para:”) é implementado como uma instrução do PHPUnit que é executada pelo Selenium Server em uma tela de um navegador.
Os esforços atuais estão sendo direcionados para concluir a reativação de todos os testes da comunidade, criando Testes Funcionais e acompanhando os desenvolvedores para que seja “enraizada a cultura” de desenvolvimento orientando a testes. Até o presente momento, mais de 800 Testes de Integração, 40 Testes Funcionais do Expresso Lite e 8 Testes funcionais da interface gráfica padrão já estão em pleno funcionamento, diminuindo a quantidade de bugs do sistema e agilizando o lançamento de novas versões do software com correções e melhorias.
Notas:
- Teste de integração: Fase do teste de software em que os módulos são combinados e testados em conjunto.
- Tine20: Software livre que deu origem ao Expresso V3. https://github.com/tine20/
- Testes funcionais: São testes que reproduzem ações realizadas normalmente pelo usuário final do sistema.
- Expresso Lite: Interface simplificada do Expresso que, por ser responsiva, é bem visualizada tanto em ambientes desktop como em dispositivos móveis.
- Personas: Um método para melhorar a usabilidade enquanto se desenvolve um sistema. São personagens fictícios que desempenham diferentes funções dentro de uma organização. https://wiki.tine20.org/Personas
- PHPUnit: Framework de testes para linguagem PHP. https://phpunit.de
- Jenkins: Ferramenta de automatização de Integração Contínua de software. https://jenkins.io/
- Selenium: É uma tecnologia que permite automatizar navegadores para que executem sequências de ações (p. ex.: preencher um campo, clicar em um botão) de forma programática, e é hoje o padrão de facto para testes em navegadores.
Emerson Faria Nobre
Ingressou no Serpro em 2005, onde atua como desenvolvedor do Expresso V3. Antes trabalhou com suporte à infraestrutura de TI e gerência de projetos de software. É mestre em informática com ênfase em métodos formais pela Universidade Federal do Paraná (UFPR).
Charles Wust
Ingressou no Serpro em 2014, onde integra a equipe de desenvolvimento do Expresso V3. É bacharel em Ciências da Computação pela Universidade Federal de Santa Catarina (UFSC), e atua como desenvolvedor há mais de dez anos, com foco em sistemas para a gestão pública.