Escolar Documentos
Profissional Documentos
Cultura Documentos
Departamento de Informática
Curso de Especialização em
Desenvolvimento de Sistemas para
Web
TCC-2012
Maringá - Paraná
2012
Universidade Estadual de Maringá
Departamento de Informática
Curso de Especialização em
Desenvolvimento de Sistemas para
Web
TCC-2012
Maringá - Paraná
2012
i
Diego Varussa Pereira
________________________________________
Orientador: Prof. Ms. Flávio Rogério Uber
Departamento de Informática, CTC, DIN
________________________________________
Prof. Ms. Munif Gebara Junior
Departamento de Informática, CTC, DIN
________________________________________
Prof. Dr. Dante Alves Medeiros Filho
Departamento de Informática, CTC, DIN
Maringá - Paraná
2012
ii
Agradecimentos
Agradeço a Deus, por mais do que me criar, deu propósito à minha vida. Vem dele tudo
o que sou, o que tenho e o que espero.
Aos meus pais Valdir José Pereira e Assunta Donizeti Varussa Pereira pela educação
dada, incentivo e esforços realizados para que eu chegasse a esta etapa da minha vida.
Aos colegas e amigos por todas as contribuições tanto diretas quanto indiretas para a
construção deste trabalho.
iii
Resumo
Palavras chaves
Testes de software; Teste de Regressão; Aplicação Web;
iv
Abstract
The necessity to develop high quality software is of paramount importance for the
current market, where developments in this sector occur extremely fast. The practice of
software testing is a step in the process of software development which aims to detect
faults before the product reaches the customer, being a crucial element in order to be
sure that the product meets its expectations. This paper demonstrates that the use of
automated testing with Selenium IDE tool allows to reduce the time spent in the
development and maintenance of web applications.
Keywords
v
Índice
vi
Índice de Tabelas
vii
Índice de Figuras
viii
Introdução
A necessidade da informatização dos dados e de se aperfeiçoar os serviços de controle
dentro das empresas, aumenta o índice de empresas e organizações que estão recorrendo
à utilização de softwares. Nos processos de desenvolvimento de software, a prática de
testes exerce um papel de extrema importância quando integrado desde o início nas
fases de desenvolvimento do software. A redução de custos de desenvolvimento e
manutenção são alguns dos benefícios dessa etapa, porém pode-se destacar o aumento
de falhas encontradas no sistema antes de chegar aos clientes, pois a escala de uma falha
em um sistema que controla uma empresa podem ser imensa.
Como a aplicação de testes de maneira manual é muito trabalhosa, muitas vezes sendo
mal estruturada, há a necessidade de se empregar ferramentas ao apoio nas atividades de
teste. São inúmeras as ferramentas de testes gratuitas ou pagas, simples ou complexas,
cada uma com suas particularidades.
1
1. Revisão Bibliográfica
Serão descritos os conceitos de engenharia de software, além de um detalhamento dos
tipos, técnicas e níveis de testes de software.
Pressman (2006) se baseia na definição de Fritz Bauer (1969). Bauer dizia que “a
Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a
fim de obter software de maneira econômica, que seja confiável e que trabalhe
eficientemente em máquinas reais”. Ainda Pressman (2006) afirma que os métodos da
engenharia de software detalham como construir o sistema, destacando as tarefas como:
planejamento e estimativa de projeto, análise de requisitos de software, projeto da
estrutura de dados, arquitetura de programa, codificação, testes e manutenção.
Por fim Rocha (2001), afirma que a engenharia de software pode ser vista de forma
objetiva, como o estabelecimento e o uso dos princípios básicos da engenharia, com a
finalidade de desenvolver software de maneira sistemática e econômica, resultando em
um produto confiável e eficiente. Ela abrange um conjunto de três elementos
fundamentais: métodos, ferramentas e procedimentos, que possibilitam o controle do
processo de desenvolvimento do software e oferece uma base para construção de
software de alta qualidade.
Pressman (2006) define três objetivos dos testes com base em Fritz Bauer (1990). O
primeiro é definido que “a atividade de teste é o processo de executar um programa com
intenção de descobrir um erro”. Outra definição diz que “um bom caso de teste é aquele
que tem uma elevada probabilidade de revelar um erro ainda não descoberto”. O último
2
objetivo é definido como “um teste bem-sucedido é aquele que tem uma elevada
probabilidade de revelar um erro ainda não descoberto.”.
Segundo Myers (2004), o custo da correção de defeitos tende a subir quanto mais tarde
o mesmo é encontrado, isto é, a etapa de testes deve ser realizada desde as primeiras
fases do ciclo de desenvolvimento do software, garantindo dessa forma que os custos
evidenciados pelos erros encontrados sejam minimizados.
Rex Black (1999), afirmava que o defeito tinha seu custo aumentado em uma proporção
de 10 para cada fase passada, então o quanto antes o defeito é encontrado, mais barato
será o custo desta correção.
Algumas etapas são fundamentais para a realização dos testes. Podemos citar duas delas
que influenciam diretamente para o sucesso dos testes: a estratégia e planejamento dos
testes. A estratégia dos testes segundo Caetano (2010) é onde se define quais tipos de
testes devem ser testados, quais técnicas serão utilizadas e em quais níveis serão
testados. Algumas atividades são realizadas nessa etapa:
3
A outra etapa, o planejamento dos testes, é definida por Caetano (2010) como etapa que
descreve todos os testes requeridos, os recursos e os prazos necessários para realizá-los.
O plano de teste deve estar alinhado com a estratégia de testes. As atividades realizadas
para o desenvolvimento do plano de teste são:
Os testes podem ser classificados em diversas formas, abaixo serão detalhadas essas
classificações por tipos, níveis e técnicas:
Peters et al. (2001) se baseia na definição de Coward (1997) para classificar as diversas
formas de testes. Coward (1997) separa o teste em dois grupos, o teste de caixa preta e
teste de caixa branca. O teste de caixa preta, também chamado de teste funcional que
tem como foco avaliar o comportamento externo do programa sem se preocupar com
código fonte. O objetivo desse teste é fornecer uma entrada e analisar se a saída é a
esperada. Esse teste enfatiza as entradas, saídas e princípios funcionais de um módulo
de software. Segundo Pressman (2006), o teste de caixa preta “possibilita que o
engenheiro de software derive conjuntos de condições de entrada que exercitem
completamente todos os requisitos funcionais para um programa”. Pressman (2006) diz
que esse teste tem como finalidade descobrir erros de funções incorretas ou ausentes,
erros de interface, erros nas estruturas de dados ou no acesso a banco de dados externos,
erros de desempenho e erros de inicialização e término. Já o teste de caixa branca,
também chamado de teste estrutural, é definido segundo Coward (1997), como teste que
trata da estrutura de código para um módulo de software, e enfatiza o projeto detalhado
do software em vez das funções (caixas pretas). O foco desse teste é técnico, visando
que o programa funcione de forma estruturalmente correta e o objetivo está em realizar
testes se baseando no código fonte. Segundo Pressman (2006) “usando métodos de teste
4
de caixa branca, o engenheiro de testes pode derivar os casos de teste que (1) garantam
que todos os caminhos independentes dentro de um módulo tenham sido exercitados
pelo menos uma vez; (2) exercitem todas as decisões lógicas para valores falsos ou
verdadeiros; (3) executem todos os laços em suas fronteiras e dentro de seus limites
operacionais; (4) exercitem as estruturas de dados internas para garantir a sua
validade.”.
5
esteja de acordo sistema.
com os requisitos
operacionais
correspondentes.
Nível de integração:
6
• Normalmente feito pelo analista de sistemas para um módulo ou conjunto de
programas.
Nível de sistema:
Nível de aceitação:
• Verifica se o sistema tem condições de ser colocado em produção, com base nos
seus critérios de aceitação.
• Objetiva verificar se o software está pronto e pode ser usado por usuários finais
para executar as funções e tarefas para as quais foi construído.
São inúmeras as técnicas de testes, e cada técnica pode ser aplicada em vários dos níveis
de testes. De acordo com a classificação de Pressman (2006), foi construída uma tabela
que mostra a relação das técnicas de testes aplicadas por nível de testes, como pode ser
observado na Tabela 2:
7
Teste de Integridade X
Teste de Interface X
Teste de Regressão X X
Teste de Segurança X X
Teste de Volume X X
Teste Funcional X X X
Teste Unitário X
Tabela 2 – Técnicas de testes aplicadas por nível de teste.
• Teste Funcional - Teste que foca a validação das funções do elemento a ser
testado.
8
• Teste de Segurança - Teste para garantir que os dados (ou sistemas) possam ser
acessados apenas por autorizados.
A técnica de teste de interface classificada por Bastos et al. (2007) como modelo de
usabilidade, é definida por Caetano (2010) como:
9
insuficiente, hardware e serviços indisponíveis ou recursos compartilhados
limitados.
• Teste de carga - Teste usado para validar e avaliar a aceitabilidade dos limites
operacionais de um sistema de acordo com cargas de trabalho variáveis,
enquanto o sistema em teste permanece constante.
10
• Teste de configuração - Teste para garantir que o item de teste funcione
conforme o esperado em diferentes configurações de hardware e/ou software.
Segundo Pressman (2006), “ferramentas que podem reduzir tempo de teste (sem reduzir
a eficácia) são muito valiosas.”. Bastos et al. (2007) definem que é necessária a
utilização de uma ferramenta de teste quando existirem fortes pressões para melhorar a
qualidade, quando o projeto tiver situações que não possam ser testadas adequadamente
pelos métodos tradicionais ou quando o perfil dos softwares desenvolvidos for
complexo e com impacto no negócio. Delamaro et al. (2007) complementam dizendo
que a aplicação de critérios de teste sem o apoio de ferramentas automatizadas tende a
ser uma atividade propensa a erros e limitadas a programas muitos simples.
São várias as categorias das ferramentas de testes, Miller (1979) descreve uma série
delas que podemos destacar: analisadores estáticos, auditores de código, processadores
de asserção, geradores de arquivos de teste, geradores de dados de teste, verificadores
de teste, bancadas de teste e comparadores de saída, cada ferramenta com seus
objetivos.
Os ganhos com a utilização de ferramentas de testes são diversos. Uma das vantagens
mais evidentes com o uso de ferramentas de testes é a redução de tempo. Um
comparativo em horas entre testes manuais e automatizados pode ser visto mais
claramente na Tabela 3 segundo Bartié (2002):
11
Tabela 3 – Testes manuais vs. testes automatizados.
A automação de testes trás consigo muitos benéficos, porém, segundo Caetano (2010),
nem sempre uma técnica de teste pode ser automatizada, por exemplo, a técnica de teste
que objetiva testar a usabilidade do sistema, não se pode substituir a sensibilidade
humana por uma ferramenta.
12
2. Selenium
Segundo SeleniumHQ (2012), Selenium é um conjunto robusto de ferramentas open
source que apóia o desenvolvimento rápido de automação de teste, oferecendo um rico
conjunto de funções de teste de aplicações baseadas na Web. Estas operações são muito
flexíveis, permitindo muitas opções para a localização de elementos da interface do
usuário e comparar os resultados dos testes esperado contra o comportamento obtido. É
uma ferramenta de fácil uso e eficiente para desenvolver casos de teste, permitindo os
testes de aceitação ou funcional, regressão e de desempenho.
Vários fatores influenciaram na escolha da ferramenta Selenium IDE, alguns deles são:
• Seu recurso de gravação das ações do usuário na página agiliza muito na criação
dos casos de teste.
2.2 Plataformas
2.3 Screenshot
13
Figura 1 – Screenshot da ferramenta Selenium.
2.4 Características
14
É um conjunto de quatro ferramentas open source: Selenium IDE, Selenium
RC/Selenium WebDrive e Selenium GRID.
Suporte as linguagens Java, C#, Perl, PHP, Python, Ruby, entre outras.
Open source.
Teste de regressão.
Teste de desempenho.
15
2.5 Suporte
2.7 Diferencial
O que diferencia o Selenium de outras ferramentas é que além de ela permitir testes
funcionais, de regressão e desempenho, ela é open source. Ela se destaca entre as
demais ferramentas gratuitas pelo fato de ser a mais completa, permitindo integração
com várias linguagens, outros frameworks, além de suportar inúmeros navegadores e
sistemas operacionais.
16
também deve ser salva, pois salvando somente o caso de teste, ao fechar a ferramenta
ele será perdido.
2.9 Recursos
17
2.9.4 Selenium GRID
18
3. Utilização da Ferramenta Selenium IDE
O Selenium IDE possibilita salvar vários casos de teste em um suíte de testes, onde é
possível executar todos os casos de teste automaticamente um após o outro, assim o
teste de regressão pode ser facilmente executado com essa ferramenta, pois quando se
for desenvolver uma nova funcionalidade pode-se testar muito facilmente todos as
outras desenvolvidas anteriormente, desse jeito verificando se essa nova funcionalidade
causou algum erro nas outras ou não. A seguir será demonstrado o processo de
utilização da ferramenta Selenium IDE.
19
Figura 2 – URL Base.
Ao observar a Figura 2 pode-se ver destacado a URL Base, que serve para definir o
caminho do sistema ou site que se pretende fazer os testes.
Logo abaixo da URL Base, pode-se observar na Figura 3 que existe uma barra onde à
possibilidade de definir a velocidade que os testes sejam executados, isso é muito útil, já
que as vezes precisa-se visualizar os testes ao mesmo tempo que estão rodando.
20
Figura 4 – Botões de manipulação dos testes.
21
Figura 5 – Botão de gravação das ações executadas.
A Figura 5 mostra com destaque o botão de gravação, que fica alinhado à direita e serve
para gravar todos os passos que são feitos na página.
22
Figura 6 – Abas tabela e código-fonte.
Observando a Figura 6, pode-se ver que na primeira aba se consegue criar o teste com o
uso do assistente, na segunda aba se pode editar o teste pelo seu código-fonte. Esse
código-fonte pode ser o padrão HTML, ou ser modificado pelo menu da ferramenta. As
linguagens disponíveis são: Java, C#, Perl, PHP, Python e Ruby, além do HTML.
23
Figura 7 – Comandos.
24
Figura 8 – Campos de interação.
25
campo de entrada é chamado de “valor” e serve para quando uma ação tem mais de um
parâmetro, normalmente serve para definir algum valor em um campo, como por
exemplo, preencher um input.
Na Figura 9, a área marcada serve para acompanhar os logs de informações e erros dos
testes, ou ter uma referência de comandos do Selenium, para caso se esqueça quais
parâmetros são passados para algum comando ou saber o formato do tipo de entrada.
26
Figura 10 – Casos de teste.
A Figura 10 possui um destaque na área onde ficam todos os testes abertos ou uma suíte
de testes, que são conjuntos de testes inteiros para um módulo ou sistema.
27
4. Processos Realizados
Nesta seção é demonstrado o ambiente utilizado para a elaboração dos testes, o sistema
utilizado para isso e a análise dos resultados obtidos através dos mesmos.
• Hardware
• Software
No processo de criação dos casos de teste foram analisadas 10 páginas que compõe a
área administrativa de um site e uma página que é site em si. Todos o dados são salvos
em um banco de dados MySQL e o sistema é feito na linguagem PHP.
A área administrativa desse site só pode acessada através de um login e senha de acesso,
também nessa área existe um local para alteração de senha caso necessário, e através
dessa área administrativa se pode gerenciar todo o conteúdo dinâmico que aparece no
site. Também há a possibilidade de gerenciar contas de novos usuários para acesso.
A maioria dos cadastros desse site é composto por uma tela onde mostra uma lista de
todos os itens cadastrados até o momento, junto com a opção de excluí-lo caso
necessário, uma tela onde se pode cadastrar um novo item, e uma última que permite a
edição do mesmo. Somente as telas de alteração de senha e configurações permitem a
edição dos dados.
28
Já o site em si, consiste de uma única página trabalhada com JavaScript, CSS e HTML
que mostra o conteúdo dinâmico inserido pela área administrativa.
Para a criação dos casos de teste, a ferramenta tem um recurso que grava todas as ações
realizadas, assim gerando vários casos de teste que podem ser agrupados em uma suíte
de testes.
29
A Figura 11 mostra a janela da ferramenta com vários casos de teste gerados. Se por
algum motivo a ferramenta não consiga gravar alguma parte mais específica do teste
através do botão de gravação, o mesmo pode ser configurado manualmente através da
interface da ferramenta.
Para cada página, foram obtidos os tempos da elaboração do testes com o uso da
ferramenta e efetuado o teste de forma manual. Na Tabela 5 são demonstrados os
tempos de criação destes casos de teste, e um comparativo do tempo entre o teste
manual e o teste utilizando a ferramenta:
Com as informações de tempo gasto por execução dos testes, foi feito uma previsão dos
mesmos comparando teste manual e teste com a ferramenta como pode ser visto na
Tabela 6.
30
Vezes MANUAL SELENIUM IDE Diferença
Tempo Soma Tempo Soma
1 00:07:08 00:07:08 00:46:43 00:46:43 00:39:35
2 00:07:08 00:14:16 00:01:25 00:48:08 00:33:52
3 00:07:08 00:21:24 00:01:25 00:49:33 00:28:09
4 00:07:08 00:28:32 00:01:25 00:50:58 00:22:26
5 00:07:08 00:35:40 00:01:25 00:52:23 00:16:43
6 00:07:08 00:42:48 00:01:25 00:53:48 00:11:00
7 00:07:08 00:49:56 00:01:25 00:55:13 00:05:17
8 00:07:08 00:57:04 00:01:25 00:56:38 -00:00:26
Observa-se também na Tabela 6 que conforme a quantidade de vezes que os testes são
executados a diferença vai diminuindo.
O tempo para execução dos testes manuais são os mesmos, pois leva em consideração
apenas o tempo necessário para realização dos testes no sistema. Já o tempo do
Selenium IDE na primeira vez considera os tempos de criação dos casos de teste e
execução dos testes, as demais vezes consideram somente o tempo de execução dos
testes com a ferramenta.
Pode-se verificar de forma clara que há uma diferença considerável de tempo entre os
testes manuais e com a ferramenta. Analisando os valores de tempo gasto, podemos ver
que em apenas 8 vezes que executamos os testes, a ferramenta consegue superar os
testes manuais em questão de tempo, assim a partir deste ponto começa a ser vantagem
a utilização ferramenta Selenium IDE.
Uma falha descoberta no teste manual, na maioria das vezes se tem dificuldade de fazer
uma nova simulação desse erro, além de ser necessário uma documentação desse erro
para ser encaminhado a uma equipe de desenvolvimento. Mas a extensão Selenium IDE
possibilita que se possa adicionar mais funcionalidades com a adição de plugins, um
deles é o “ScreenShot of Fail”, que possibilita que a ferramenta salve uma screenshot da
tela onde o erro ocorreu. Na Figura 12 pode ser visto esse plugin em funcionamento.
31
Figura 12 – Plugin para captura de tela quando houver erro.
Ao instalar o plugin aparecerá um novo botão na interface do Selenium IDE, que pode
ser visto na área marcada da Figura 12, quando o mesmo for ativado, passará a salvar
uma screenshot dos os erros encontrados pela ferramenta.
32
Figura 13 – Screenshot de erro gerada pelo plugin.
Um exemplo da screenshot gerada pelo plugin pode ser visto na Figura 13, o plugin
quanto encontra um erro salva a screenshot em uma pasta nomeada com a data e hora
que o mesmo acorreu.
33
5. Conclusão
O tempo gasto com testes manuais e com a manutenção de aplicações web sem testes
adequados (normalmente por falta de tempo da equipe responsável) é muito alto de
modo que se faz necessário a busca por ferramentas que permitam, além de reduzir este
tempo, melhorar a qualidade dos testes aplicados. Neste contexto o estudo da ferramenta
Selenium IDE visou identificar suas características para avaliar a possibilidade de
diminuir esse tempo com o auxilio da mesma. E nesse trabalho também foram
apresentados os conceitos de testes, seus níveis, tipos e técnicas.
Mas essa barreira foi ultrapassada ao pesquisar e encontrar outra ferramenta para
automação de testes, o Selenium IDE que, em vez de efetuar testes de caixa branca,
seria testes de caixa preta, e nesse tipo de teste o conhecimento prévio já era suficiente
para completude do trabalho no tempo programado.
Outro ponto levantado é a questão dos conceitos dos testes. São inúmeros os autores que
detalham os testes, seus conceitos e suas divisões de maneira diferenciada. Alguns os
classificam como tipos de testes, outros, como técnicas, outros ainda como níveis de
teste, porém essas definições não seguem um padrão, dificultando o entendimento e
estruturação dos mesmos.
34
O tempo dedicado ao estudo da ferramenta PHPUnit não foi perdido, pois foi
descoberto que e mesma pode ser integrada com o Selenium WebDrive. Utilizando o
Selenium IDE, com o plugin “Selenium IDE: PHP Formatters” ele pode exportar os
casos de teste para linguagem PHP e assim pode ser usado com a ferramenta PHPUnit,
possibilitando que o os testes possam ser executados em outros navegadores que o
Selenium WebDrive suporta e não somente o Firefox. Mas essa integração e analise será
deixada para uma próxima oportunidade de pesquisa, pois esse não é o foco desse
trabalho.
35
6. Referências Bibliográficas
BARTIÉ, A Garantia da qualidade de Software. São Paulo: Campus, 2002.
BASTOS, Aderson; et al. Base de conhecimento em teste de software. São Paulo:
Martins, 2007.
CAETANO, Cristiano. Base de Conhecimento em Teste de Software: Módulo 2 -
Planejando os Testes, 2010.
COWARD, P. D. A review of software testing. In Software Engineering, M. Dorfma, R.
DELAMARO, Eduardo Márcio; et al. Introdução ao teste de software. Rio de Janeiro:
Elsevier, 2007. 359 p.
MASIERO, Paulo Cesar, et al. Teste de Software Orientado a Objetos e a Aspectos:
Teoria e Prática, 2006.
MYERS, G. The Art of Software Testing. John Wiley & Sons, 2nd Edition, 2004.
PETERS, James F., et al. Engenharia de Software: teoria e prática. 1ª ed. Rio de Janeiro:
CAMPUS, 2001.
BLACK, Rex. Managing the Testing Process, 1e, “Best Practices” series. New York:
Microsoft Press, 1999.
ROCHA, Ana Regina Cavalcanti da; MALDONADO, José Carlos; WEBER, Kival
Chaves. Qualidade de Software – Teoria e Prática. São Paulo: Prentice Hall, 2001.
36
7. Referências Consultadas
BERGMANN, Sebastian. PHPUnit Manual. Disponível em:
http://www.phpunit.de/manual/3.7/en/index.html. Acesso em jan. 2012.
37