automação de testes de regressão - selenium

155
UNIVERSIDADE DO SUL DE SANTA CATARINA MAIELE PEROSA RANZAN RODRIGO SUSIN DE OLIVEIRA AUTOMAÇÃO DE TESTES DE REGRESSÃO: UM ESTUDO DE CASO UTILIZANDO O FRAMEWORK SELENIUM Palhoça 2013

Upload: maiele-ranzan

Post on 16-Jan-2017

423 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Automação de Testes de Regressão - Selenium

UNIVERSIDADE DO SUL DE SANTA CATARINA

MAIELE PEROSA RANZAN

RODRIGO SUSIN DE OLIVEIRA

AUTOMAÇÃO DE TESTES DE REGRESSÃO:

UM ESTUDO DE CASO UTILIZANDO O FRAMEWORK SELENIUM

Palhoça

2013

Page 2: Automação de Testes de Regressão - Selenium

MAIELE PEROSA RANZAN

RODRIGO SUSIN DE OLIVEIRA

AUTOMAÇÃO DE TESTES DE REGRESSÃO:

UM ESTUDO DE CASO UTILIZANDO O FRAMEWORK SELENIUM

Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em Sistemas de Informação da Universidade do Sul de Santa Catarina, como requisito parcial à obtenção do título de Bacharel em Sistemas de Informação.

Orientador: Prof. Flavio Ceci, M.Eng.

Palhoça

2013

Page 3: Automação de Testes de Regressão - Selenium

MAIELE PEROSA RANZAN

RODRIGO SUSIN DE OLIVEIRA

AUTOMAÇÃO DE TESTES DE REGRESSÃO:

UM ESTUDO DE CASO UTILIZANDO O FRAMEWORK SELENIUM

Este Trabalho de Conclusão de Curso foi julgado adequado à obtenção do título de Bacharel em Sistemas de Informação e aprovado em sua forma final pelo Curso de Graduação em Sistemas de Informação da Universidade do Sul de Santa Catarina.

Palhoça, 29 de junho de 2013.

______________________________________________________ Professor e orientador Flavio Ceci, M.Eng.

Universidade do Sul de Santa Catarina

______________________________________________________ Prof. Prof. Jean Carlo Rossa Hauck, Dr. Universidade do Sul de Santa Catarina

______________________________________________________

Alessandra Mohr. Convidada

Page 4: Automação de Testes de Regressão - Selenium

Dedico esse trabalho à minha família que

sempre me apoiou. Ao meu namorado Rafael

que com seu amor me manteve motivada nessa

etapa da minha vida. Ao nosso orientador

Flávio que foi prestativo e nos ajudou em

todos os momentos.

Maiele Perosa Ranzan

Dedico, com muito carinho, essa monografia à

minha família e, principalmente, à minha

namorada Adriana e à minha mãe Carla

Beatriz que não mediram esforços para a

realização desse trabalho e pela compreensão

que tiveram comigo nos momentos de

dificuldade. E a todos meus amigos que me

apoiaram e me acompanharam na minha vida

acadêmica.

Rodrigo Susin de Oliveira

Page 5: Automação de Testes de Regressão - Selenium

AGRADECIMENTOS

Maiele Perosa Ranzan agradece

Essa monografia foi elaborada, acima de tudo, com muita dedicação e força de

vontade minha e do meu amigo Rodrigo; porém, muitas pessoas participaram direta ou

indiretamente dela. Nesse espaço, quero agradecer a todos que ajudaram a concluí-la.

Primeiramente, agradeço aos meus pais que sempre me apoiaram em toda a minha

caminhada e que nesse momento foram fundamentais como ponto de equilíbrio e força.

Ao meu namorado Rafael que, com toda sua paciência, compreensão e amor,

tornou-se essencial para que eu conseguisse seguir em frente, perdoando muitos momentos

em que tive que ficar ausente em função desse projeto.

Meus agradecimentos sinceros ao amigo e parceiro dessa jornada, Rodrigo, que

me acompanhou em diversos trabalhos acadêmicos e na presente monografia. Acredito que

sem sua ajuda esse ciclo teria sido muito mais difícil.

Ao nosso Orientador Prof. Flávio Ceci pelo incentivo, simpatia e presteza no

auxílio às atividades e discussões sobre o andamento desse estudo de caso. Com certeza, seu

apoio foi imprescindível e jamais esqueceremos.

A Profª Maria Inês pela tarefa de multiplicar seus conhecimentos ministrando a

disciplina que nos conduziu a essa obra.

Aos colegas que nos forneceram o protótipo para que utilizássemos como base

para a construção do estudo de caso e aos testadores que disponibilizaram seu tempo para

realização dos testes manuais do protótipo.

E, por fim, o meu muito obrigada aos membros da banca por terem aceito nosso

convite, agregando seus conhecimentos.

Page 6: Automação de Testes de Regressão - Selenium

Rodrigo Susin de Oliveira agradece

A toda minha família pelo apoio dado nessa empreitada, principalmente, a meu

pai, minha mãe, minha irmã e minha namorada que sempre me incentivaram e estiveram ao

meu lado nos momentos difíceis.

Aos meus colegas, José Fernando e Giovani Brunel Paes, que permitiram a

divulgação do protótipo Projector dessa monografia.

Aos colegas, Rodrigo Veleda e Luiz Santana, por disponibilizar a modelagem do

protótipo Projector.

Agradeço aos Testadores que foram prestativos na execução do estudo de caso.

Novamente, agradeço à minha mãe, Carla Beatriz Susin de Oliveira, por fazer a

correção desse trabalho.

À Banda Infinito Restrito que me liberou dos ensaios para trabalhar na

monografia e que, também, me compreendeu nos dias de estresse.

À minha colega e amiga Maiele Perosa Ranzan por ser tão paciente no

desenvolvimento do trabalho e por estar sempre motivada ao longo dessa jornada.

Ao meu amigo e Profº Orientador Flávio Ceci, pelos ensinamentos, estímulo,

apoio e dedicação nessa trajetória.

Enfim, agradeço a todos que direta ou indiretamente participaram do

desenvolvimento da presente monografia.

Page 7: Automação de Testes de Regressão - Selenium

“Você pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que

aponta uma nova direção.” (Steve Jobs).

Page 8: Automação de Testes de Regressão - Selenium

RESUMO

A área de testes está ocupando um espaço cada vez maior nas organizações de

desenvolvimento de software, pois se observa que com a mesma é possível aumentar a

qualidade de uma aplicação, gerando maior satisfação para seu cliente final. Existem diversas

técnicas e tipos que classificam os testes de software, dentre os quais o de regressão. Este, por

sua vez, costumeiramente é manual; sendo assim, suscetível a falhas em sua execução. Como

forma de minimizar esse problema, surgiu o conceito de automação de teste, onde existe um

ferramental vasto para sua concepção. Nesse estudo de caso, adotou-se o framework Selenium

que automatizou uma rotina de testes regressivos em um protótipo web, desenvolvido durante

a graduação, por acadêmicos do curso de Sistemas de Informação da Unisul. Os mesmos

testes foram executados manualmente com o apoio de dois participantes que responderam a

um questionário. Os resultados obtidos depois de feita a comparação entre a prática manual e

a automatizada foram satisfatórios, uma vez que se notou um ganho, principalmente, nas

questões de tempo e qualidade do teste aplicando a técnica automática.

Palavras-chave: Teste de software, Automação, Framework Selenium.

Page 9: Automação de Testes de Regressão - Selenium

ABSTRACT, RÉSUMÉ OU RESUMEN

The test area is occupying a growing space on the software development organization,

because we note that with that it is possible to increase the quality of an application,

generating greater satisfaction to your final client. There are many techniques and kinds of

regression. This, on the other hand, customarily is manual; thus, where there is a vast tooling

to its conception. In this case studies, was adopted the “framework Selenium” which

automated a regression tests routine in a prototype web, developed during graduation, by the

course of Information System Unisul academics. The same tests were manually executed with

the help of two participants that answered a survey. The obtained results after the comparison

was made between the manual practice and the automated were satisfactory results, since a

gain was noted, manly, in things like time and test quality applied the automated technique.

Keywords: Software test, Automation, Framework Selenium.

Page 10: Automação de Testes de Regressão - Selenium

LISTA DE ILUSTRAÇÕES

Figura 1 – Atividades do modelo cascata ................................................................................. 26 Figura 2 - Custo de modificação .............................................................................................. 26 Figura 3 - Modelo Incremental ................................................................................................. 28 Figura 4 - Atividades da Prototipação ...................................................................................... 29 Figura 5 - Iterações do modelo espiral ..................................................................................... 30 Figura 6 - Custo de mudanças nas metodologias ágeis ............................................................ 32 Figura 7 - Funcionamento do Scrum ........................................................................................ 35 Figura 8 - Custo de correção dos problemas ............................................................................ 38 Figura 9 - Visão do teste caixa-preta ........................................................................................ 43 Figura 10 - Visão do teste caixa-branca ................................................................................... 46 Figura 11 - Etapas metodológicas ............................................................................................ 57 Figura 12 - Esboço da Solução ................................................................................................. 59 Figura 13 - Etapas do questionário ........................................................................................... 61 Figura 14 - Visão geral do ICONIX ......................................................................................... 66 Figura 15 - Diagrama de Atores ............................................................................................... 68 Figura 16 - Requisitos Funcionais ............................................................................................ 70 Figura 17 - Requisitos não funcionais ...................................................................................... 72 Figura 18 - Tela de cadastro dos projetos ................................................................................. 73 Figura 19 - Tela de cadastro das atividades .............................................................................. 74 Figura 20 - Casos de Uso .......................................................................................................... 75 Figura 21 - Cadastrar Projeto ................................................................................................... 76 Figura 22 - Cadastrar Atividade ............................................................................................... 77 Figura 23 - Diagrama de Domínio ............................................................................................ 78 Figura 24 - Diagrama de Robustez ........................................................................................... 79 Figura 25 - Diagrama de Sequência - Login............................................................................. 80 Figura 26 - Cadastrar Perfil ...................................................................................................... 81 Figura 27 - Cadastrar Usuário .................................................................................................. 82 Figura 28 - Cadastrar clientes ................................................................................................... 83 Figura 29 - Emissão de relatórios ............................................................................................. 84 Figura 30 - Cadastro de marco ................................................................................................. 85 Figura 31 - Cadastrar projeto .................................................................................................... 86 Figura 32 - Cadastro de cronograma ........................................................................................ 87 Figura 33 - Cadastrar atividade ................................................................................................ 88 Figura 34 - Cadastro de status .................................................................................................. 89 Figura 35 - Registro de hora da atividade ................................................................................ 90 Figura 36 - Consultar andamento do projeto ............................................................................ 91 Figura 37 - Diagrama de Classes .............................................................................................. 92 Figura 38 - Arquitetura do Projector ........................................................................................ 94 Figura 39 - Cadastrar projeto no Projector ............................................................................... 97 Figura 40 - Listagem de projetos no Projector ......................................................................... 98 Figura 41 - Cadastro de cronograma no Projector .................................................................... 98 Figura 42 - Cadastro de atividade no Projector ........................................................................ 99 Figura 43 - Listagem das atividades no Projector .................................................................... 99 Figura 44 - Fluxograma da elaboração do teste ...................................................................... 101 Figura 45 - Funcionamento Selenium RC .............................................................................. 109

Page 11: Automação de Testes de Regressão - Selenium

Figura 46 - Exemplo WebDriver em Java .............................................................................. 111 Figura 47 - Pacote de entidades .............................................................................................. 113 Figura 48 - Pacote core ........................................................................................................... 114 Figura 49 - Arquivos de configuração .................................................................................... 115 Figura 50 - Pacote testcase ..................................................................................................... 116 Figura 51 - Pacote util ............................................................................................................ 117 Figura 52 - Cadastro de Atividade .......................................................................................... 119 Figura 53 - Cadastro de atividade campos obrigatórios ......................................................... 120 Figura 54 - Grid de atividades ................................................................................................ 120 Figura 55 - Início da execução ............................................................................................... 123 Figura 56 - Acesso ao sistema ................................................................................................ 124 Figura 57 - Execução incorreta ............................................................................................... 125 Figura 58 - Detecção do bug pelo Testador X ........................................................................ 126 Figura 59 - Testador X finaliza o teste ................................................................................... 127 Figura 60 - Testador Y conclui o teste manual ....................................................................... 128 Figura 61 - Início da execução automatizada ......................................................................... 129 Figura 62 – Abertura automática no navegador ..................................................................... 130 Figura 63 - Componente calendário ....................................................................................... 131 Figura 64 - Automação encontra bug ..................................................................................... 132 Figura 65 - Teste automatizado de salvar cronograma ........................................................... 132 Figura 66 - Fim do teste automatizado ................................................................................... 133 Figura 67 - Log da automação ................................................................................................ 134 Figura 68 - Log da automação apresentando o bug ................................................................ 135

Page 12: Automação de Testes de Regressão - Selenium

LISTA DE QUADROS

Quadro 1 - Ferramentas comerciais .......................................................................................... 50 Quadro 2 - Ferramentas acadêmicas ......................................................................................... 51 Quadro 3 - Comparações entre manual e automatizado ......................................................... 136 Quadro 4 - Prós e contras da automação ................................................................................ 138 Quadro 5 - Prós e contras do teste manual ............................................................................. 138

Page 13: Automação de Testes de Regressão - Selenium

SUMÁRIO

1 INTRODUÇÃO ............................................................................................................................. 16

1.1 PROBLEMÁTICA .......................................................................................................................17 1.2 OBJETIVOS .................................................................................................................................19 1.2.1 Objetivo geral ...........................................................................................................................19 1.2.2 Objetivos específicos ................................................................................................................19 1.3 JUSTIFICATIVA .........................................................................................................................19 1.4 ESTRUTURA DA MONOGRAFIA ............................................................................................21

2 REVISÃO BIBLIOGRÁFICA ..................................................................................................... 22

2.1 A CRISE DE SOFTWARE ............................................................................................................22 2.2 ENGENHARIA DE SOFTWARE ...............................................................................................23 2.2.1 Metodologias de Desenvolvimento ..........................................................................................24 2.2.1.1 Metodologias Tradicionais ..................................................................................................... 25 2.2.1.1.1 Modelo clássico ...................................................................................................................25 2.2.1.1.2 Modelo Incremental .............................................................................................................27 2.2.1.1.3 Prototipação ........................................................................................................................28 2.2.1.1.4 Modelo espiral .....................................................................................................................30 2.2.1.2 Metodologias Ágeis................................................................................................................ 31 2.2.1.2.1 Extreme Programming (XP) ................................................................................................32 2.2.1.2.2 Scrum ...................................................................................................................................34 2.3 TESTES DE SOFTWARE ...........................................................................................................36 2.3.1 Técnicas para Teste de Software ............................................................................................39 2.3.1.1 Teste de unidade ..................................................................................................................... 40 2.3.1.2 Teste de integração ................................................................................................................. 40 2.3.1.3 Teste de sistema ..................................................................................................................... 41 2.3.1.4 Teste de aceitação................................................................................................................... 41 2.3.1.5 Tipos de teste .......................................................................................................................... 42 2.3.1.5.1 Testes de caixa-preta ...........................................................................................................42 2.3.1.5.1.1 Testes de requisitos .......................................................................................................... 43 2.3.1.5.1.2 Testes de regressão ........................................................................................................... 44 2.3.1.5.1.3 Testes de tratamento de erros ........................................................................................... 45 2.3.1.5.1.4 Testes de interconexão ..................................................................................................... 45 2.3.1.5.2 Teste de caixa branca ..........................................................................................................45 2.3.1.5.2.1 Testes de estresse ............................................................................................................. 46 2.3.1.5.2.2 Testes de performance ...................................................................................................... 47 2.3.1.5.2.3 Testes de recuperação ....................................................................................................... 47 2.3.1.5.2.4 Testes de segurança .......................................................................................................... 47 2.3.1.5.3 Testes não-funcionais...........................................................................................................48 2.3.1.5.3.1 Testes de usabilidade ........................................................................................................ 48 2.3.1.5.3.2 Teste de instalação ........................................................................................................... 48 2.3.2 Automatização de Testes de Software ....................................................................................49 2.3.2.1 Ferramentas para automação de teste ..................................................................................... 50 2.3.2.2 Tendências para as ferramentas de automação ....................................................................... 52 2.3.2.3 Automação de Teste x Teste de Regressão ............................................................................ 53

3 MÉTODO....................................................................................................................................... 55

3.1 CARACTERIZAÇÃO DO TIPO DE PESQUISA .......................................................................55 3.2 ETAPAS METODOLÓGICAS ....................................................................................................56 3.3 DESENHO DA SOLUÇÃO .........................................................................................................58 3.4 CARACTERÍSTICAS DO ESTUDO DE CASO .........................................................................59

Page 14: Automação de Testes de Regressão - Selenium

3.4.1 Cenário proposto ......................................................................................................................60 3.4.2 Objetivos ...................................................................................................................................60 3.4.3 Ferramentas utilizadas ............................................................................................................61 3.4.4 Perfil dos profissionais envolvidos ..........................................................................................62 3.4.5 Avaliação dos resultados .........................................................................................................62 3.5 DELIMITAÇÕES .........................................................................................................................62

4 PROJETO DE SOLUÇÃO DO PROTÓTIPO ........................................................................... 64

4.1 DEFINIÇÃO DE TÉCNICA E METODOLOGIA ......................................................................64 4.1.1 Unified modeling language (UML) .........................................................................................64 4.1.2 Iconix .........................................................................................................................................65 4.1.3 Orientação a Objetos (OO) .....................................................................................................66 4.2 DESCRIÇÃO DO PROTÓTIPO UTILIZADO NO ESTUDO DE CASO ..................................67 4.2.1 Atores ........................................................................................................................................68 4.2.2 Requisitos ..................................................................................................................................69 4.2.2.1 Requisitos Funcionais ............................................................................................................ 69 4.2.2.2 Requisitos Não Funcionais ..................................................................................................... 71 4.2.3 Protótipos de Interface ............................................................................................................72 4.2.4 Casos de Uso .............................................................................................................................74 4.2.5 Modelo de Domínio ..................................................................................................................78 4.2.6 Diagramas de Robustez ...........................................................................................................78 4.2.7 Diagramas de Sequência..........................................................................................................79 4.2.8 Diagrama de Classe..................................................................................................................91 4.3 RESUMO DO CAPÍTULO ..........................................................................................................92

5 AUTOMATIZAÇÃO DE TESTES DE SOFTWARE ............................................................... 93

5.1 SISTEMA DESENVOLVIDO PARA O ESTUDO DE CASO ...................................................93 5.1.1 Tecnologias utilizadas ..............................................................................................................93 5.1.1.1 Enterprise Architect................................................................................................................ 95 5.1.1.2 Eclipse .................................................................................................................................... 95 5.1.1.3 Hibernate ................................................................................................................................ 95 5.1.1.4 Java ......................................................................................................................................... 96 5.1.1.5 Java Server Faces ................................................................................................................... 96 5.1.1.6 MySQL ................................................................................................................................... 96 5.1.1.7 Apache Tomcat ...................................................................................................................... 97 5.1.2 Descrição do sistema ................................................................................................................97 5.2 CASOS DE TESTE ....................................................................................................................100 5.2.1 Método ....................................................................................................................................100 5.2.2 Ferramentas utilizadas ..........................................................................................................102 5.2.3 Roteiro de teste .......................................................................................................................102 5.2.3.1 Teste Salvar Projeto ............................................................................................................. 102 5.2.3.2 Teste salvar projeto com cliente ........................................................................................... 103 5.2.3.3 Teste editar projeto ............................................................................................................... 103 5.2.3.4 Teste excluir projeto ............................................................................................................. 104 5.2.3.5 Teste cadastrar atividade ...................................................................................................... 105 5.2.3.6 Teste cadastrar atividade com cronograma .......................................................................... 105 5.2.3.7 Teste cadastrar atividade completo ...................................................................................... 106 5.2.3.8 Teste de efetuar login com usuário válido ............................................................................ 107 5.2.3.9 Teste de efetuar login com usuário inválido ........................................................................ 107 5.2.3.10 Teste de salvar cronograma ................................................................................................ 108 5.3 AUTOMATIZAÇÃO DE TESTES ............................................................................................108 5.3.1 Ferramentas utilizadas ..........................................................................................................112 5.3.2 Automação dos casos de teste ................................................................................................112 5.4 ESTUDO DE CASO ...................................................................................................................118 5.4.1 Bugs inseridos no sistema ......................................................................................................119 5.4.2 Seleção dos atores ...................................................................................................................121

Page 15: Automação de Testes de Regressão - Selenium

5.4.3 Execução manual dos casos de teste .....................................................................................121 5.4.4 Execução automatizada dos casos de teste ...........................................................................128 5.4.5 Resultados obtidos .................................................................................................................135 5.5 AVALIAÇÃO DOS RESULTADOS .........................................................................................137

6 CONCLUSÕES E TRABALHOS FUTUROS.......................................................................... 140

6.1 CONCLUSÕES ..........................................................................................................................140 6.2 TRABALHOS FUTUROS .........................................................................................................141

REFERÊNCIAS ................................................................................................................................ 142

APÊNDICES ...................................................................................................................................... 146

APÊNDICE A – QUESTIONÁRIO ................................................................................................. 147

ANEXOS ............................................................................................................................................ 149

ANEXO A – QUESTIONÁRIO DO TESTADOR X ..................................................................... 150

ANEXO B – QUESTIONÁRIO DO TESTADOR Y ..................................................................... 153

Page 16: Automação de Testes de Regressão - Selenium

16

1 INTRODUÇÃO

No desenvolvimento de software ocorrem situações em que o sistema é entregue

ao cliente com qualidade baixa, ou seja, mesmo respeitando e seguindo corretamente as etapas

de desenvolvimento de software, análise, construção, testes, correções de defeitos e reteste, o

mesmo ainda pode conter erros.

Um problema bastante comum na rotina das organizações são os curtos prazos nos

projetos. Deste modo o sistema acaba sendo entregue às pressas e com poucos testes, não

garantindo sua qualidade e eficiência.

De acordo com o autor de diversos livros na área de qualidade de software,

Molinari (2003), os defeitos encontrados na fase de implantação podem ser até cem vezes

mais caros do que se tivessem sido descobertos antes do software ser entregue ao cliente final.

Para Inthurn (2001, p. 21), desenvolver softwares com qualidade significa:

“alinhamento total entre as necessidades/expectativas dos usuários e especificações geradas.

Alinhamento total entre as especificações aprovadas e o produto construído, e o produto final

com a menor quantidade de erros possíveis.”.

Segundo Hetzel (1987), através do teste consegue-se adquirir confiança no fato de

que um sistema pode ser usado com uma margem de risco aceitável, descobrir erros e

deficiências de um sistema, determinar os recursos do sistema e fornecer informações sobre a

qualidade de um software.

Segundo Casimiro (2011), investindo em teste de software pode-se reduzir em

70% o índice de retrabalho de correções de falhas de produção, reduzir em 50% do tempo de

homologação de uma nova versão, aumentar em 90% o índice de falhas detectadas antes da

produção, diminuir em 95% a terminação anormal de um processo, e aumentar a abrangência

dos testes.

O investimento em teste é de suma importância para garantir uma boa qualidade

no software, porém os testes manuais nem sempre atendem com rapidez e eficácia as

expectativas. Contudo, automatizar alguns processos e etapas do teste pode agilizar a

execução do mesmo, tendo em vista que o teste manual estará sempre exposto a falhas pelo

fato de serem executados por seres humanos.

Para Bartié (2002), a automação de testes requer um esforço inicial, porém

fornece eficiência, rapidez e confiabilidade que pode não ser atingida com procedimentos

manuais.

Page 17: Automação de Testes de Regressão - Selenium

17

No processo de desenvolvimento de software a automatização funciona como

recurso para a redução no esforço em atividades de testes manuais, que, por muitas vezes, são

repetitivas. Por fim, permite a execução automática de rotinas de teste com o objetivo de

aumentar a qualidade do produto e minimizar falhas humanas.

As seções seguintes explanam a respeito da problemática levantada para o estudo

de caso, os objetivos que se pretende alcançar, uma justificativa para a escolha do tema e a

estrutura da presente monografia.

1.1 PROBLEMÁTICA

Na década de 60, os softwares eram desenvolvidos de forma primitiva não

havendo organização ou planejamento. No processo de construção de uma aplicação havia

muitas dificuldades, pois a demanda e a complexidade dos sistemas cresciam. De acordo com

o engenheiro de software norte-americano Pressman (2004), os problemas que ocorriam

tinham relação com a organização das equipes, uma vez que estas não possuíam total

conhecimento técnico para desenvolver, prestar suporte e dar manutenção em uma solução.

Faltava uma correta análise de requisitos somada a poucos investimentos na questão da

qualidade do sistema.

Apesar das práticas errôneas serem reconhecidas e apontadas, muitas delas ainda

perduram nos tempos atuais. Segundo Koscianski e Soares (2007, p. 172), “sem uma

definição precisa daquilo que se pretende construir, perde-se tempo, mais erros são cometidos

e a qualidade do produto final é incerta”.

Como forma de sanar os problemas e buscar uma solução para a crise, os

princípios da Engenharia de Software foram criados e difundidos. De acordo com Pressman

(2004), todas as deficiências na elaboração e construção de um sistema começaram a ser

sanadas com o surgimento do conceito de Engenharia de Software que trouxe consigo a

oportunidade de novos rumos para as pesquisas em tecnologia.

Segundo o especialista na área e autor de diversos livros, Sérgio Luiz Tonsig

(2008), no ano de 1968, foi realizada uma conferência internacional na Alemanha cujo

objetivo era encontrar soluções para os problemas que assolavam o desenvolvimento de

software; foi a partir desta que o termo “Engenharia de Software” ficou conhecido.

Page 18: Automação de Testes de Regressão - Selenium

18

Com a criação dos métodos, o desenvolvimento começou a ser executado e

construído em etapas. O primeiro modelo criado foi o Cascata que, segundo Pressman (2001),

é um modelo pesado e composto de atividades sequenciais para levantamento de requisitos,

análise, projeto, implementação, teste, implantação e manutenção.

Pode-se perceber que em grande parte dos métodos existe uma etapa de testes. O

escritor Pressman (2002) destacou que a prática de teste é um fator de extrema importância na

qualidade de uma aplicação, uma vez que representa a revisão das especificações.

Devido à importância dos testes, nas etapas de desenvolvimento, criou-se um

ciclo para o mesmo que é composto por procedimentos iniciais, planejamento, preparação,

especificação, execução e entrega.

No ciclo de execução do teste, o procedimento a ser seguido, geralmente, é

manual. O diretor da Associação Latino-Americana de Teste de Software (ALATS),

Anderson Bastos et al. , destacou em seu livro Base de conhecimento em teste de software

(2007), que os testes devem ser executados por regressão ou por partes toda vez que surgirem

alterações nas aplicações ou novas versões e devem possuir ambiente preparado para tal

rotina.

O teste de regressão tem a necessidade de ser repetitivo e executado a cada

correção de erro ou em caso de novas implementações no sistema. De acordo com Pressman

(2006), o software é modificado cada vez que um novo módulo ou uma nova funcionalidade é

adicionado. Essa modificação pode gerar problemas que não existiam. Por isso, há a

necessidade de executar testes novamente após a realização de modificações para garantir que

não existam efeitos colaterais indesejáveis. Para este tipo de rotina dá-se o nome de testes de

regressão.

Como visto, a quantidade de testes que precisam ser efetuados, muitas vezes, de

forma manual e a necessidade de executar o teste de regressão a cada nova implementação,

transforma a atividade em algo repetitivo. Outros problemas podem ser apontados, tais como:

repetição das mesmas rotinas de teste que torna o serviço oneroso e lento, o tempo gasto na

sua execução e as falhas humanas que podem ocorrer.

Para diminuir a quantidade (custo) dos esforços e minimizar o tempo de execução

dos testes, faz-se necessário a automatização dos testes de regressão.

Em função do que foi exposto, a seguinte pergunta é apresentada: É possível

minimizar custo/esforço e economizar tempo automatizando os testes de software?

Page 19: Automação de Testes de Regressão - Selenium

19

1.2 OBJETIVOS

Serão apresentados a seguir os objetivos gerais e específicos dessa monografia.

1.2.1 Objetivo geral

Verificar as contribuições dadas pelo uso do framework Selenium ao processo de

automação de testes de regressão a partir de um estudo de caso.

1.2.2 Objetivos específicos

Os objetivos específicos estão descritos a seguir:

• Utilizar uma aplicação web, já existente, como cenário para o estudo de

caso;

• Elaborar os casos de teste para efetuar o teste de regressão de maneira

manual;

• Desenvolver os testes automatizados para atender o cenário proposto;

• Comparar os resultados obtidos a partir do teste de regressão de maneira

manual e automatizado utilizando o framework Selenium.

1.3 JUSTIFICATIVA

A crise de software tornou-se um marco na história do desenvolvimento de

softwares, pois até então essa tarefa era executada de maneira desorganizada, com

Page 20: Automação de Testes de Regressão - Selenium

20

pouquíssima documentação e sem planejamento, o que culminava em um produto final de

baixa qualidade.

Foi nesse contexto que surgiu a necessidade de modificar esse processo de

desenvolvimento de aplicações, tornando-o mais estruturado, padronizado, documentado e

com um planejamento coerente para que, dessa forma, as necessidades do cliente fossem

atendidas corretamente.

Os testes de software ocorriam integrados ao desenvolvimento, conforme Bastos

et al. (2007, p.11), “Durante as décadas de 1970, 1980 e 1990, os testes eram efetuados pelos

próprios desenvolvedores do software, cobrindo aquilo que hoje chamamos de testes unitários

e testes de integração”.

A qualidade do produto não era assegurada, pois muitos problemas eram

encontrados somente quando os sistemas já se encontravam em produção, tornando sua

correção muito mais cara e onerosa. Ainda de acordo com Bastos et al. (2007), os defeitos de

um software representam um risco para uma organização e pode afetar diretamente a sua

imagem perante seus clientes. Devido a esses fatores os testes começaram a ter uma

importância maior, contribuindo diretamente na qualidade dos produtos.

Como forma de garantir a eficácia de uma aplicação, os testes precisaram ser um

processo paralelo e executado por especialistas na área.

Com o passar dos anos e a adoção cada vez maior dessa prática, diversas

ferramentas surgiram para auxiliar no procedimento dos testes. Notou-se que, em

determinados tipos de teste, a rotina era onerosa e repetitiva e que em algumas situações nem

todos os defeitos do produto eram encontrados previamente, devido à falha humana no

processo de testar. Uma das formas de sanar essa lacuna é o uso de ferramentas que

automatizem as rotinas.

Conforme Bastos et al. (2007) existem recursos computacionais para criação de

dados para testes. Eles apuram tanto as variáveis normais para cada elemento de dado quanto

às variáveis anormais e possíveis erros. É nesse contexto que os autores desse trabalho

pretendem apresentar o framework 1Selenium, com intuito de utilizá-lo para automatização do

teste de regressão.

O presente trabalho possui uma relevância tanto do ponto de vista pessoal para

seus autores, uma vez que lhes agrega conhecimento a respeito de um tema que é do interesse

1 Para Fayad et al (1999), um framework é um conjunto de classes que constitui um projeto abstrato para a

solução de uma família de problemas.

Page 21: Automação de Testes de Regressão - Selenium

21

de ambos, quanto para a empresa em que trabalham, pois irá aprimorar e otimizar as rotinas

de teste.

1.4 ESTRUTURA DA MONOGRAFIA

O trabalho é apresentado sistematicamente na seguinte estrutura:

Capítulo 1 – Apresenta uma introdução do assunto com uma problemática, os

objetivos e a justificativa.

Capítulo 2 – Contém uma revisão bibliográfica que possui como foco principal a

área de testes de software e sua automatização.

Capítulo 3 – Nesse é descrito o método utilizado, as etapas e delimitações.

Capitulo 4 – Esse capítulo tem como função apresentar as informações sobre a

modelagem do protótipo de software desenvolvido para a aplicação dos testes automatizados

e manuais.

Capítulo 5 - Desenvolvimento da aplicação de automação de testes utilizando o

framework Selenium e elaboração dos casos de teste para o mesmo. Nessa etapa também será

apresentada a modelagem para o software que será testado.

E, por fim, o Capítulo 6 que possui as conclusões da monografia e ideias para

trabalhos futuros.

Page 22: Automação de Testes de Regressão - Selenium

22

2 REVISÃO BIBLIOGRÁFICA

Esse capítulo dedica-se a apresentar a fundamentação teórica a respeito dos temas

que cercam a Engenharia de Software, dentre eles serão abordados: a crise de software, os

métodos de desenvolvimento, a prática e os tipos de testes e a automatização dos mesmos.

2.1 A CRISE DE SOFTWARE

Após o surgimento dos sistemas operacionais, que dentre suas inúmeras vantagens

trouxe a possibilidade de integração entre hardware e software, a atividade de programação

de aplicativos tornou-se mais viável, uma vez que ambos foram mais amplamente difundidos.

As interfaces começaram a ficar mais amigáveis para os usuários e os computadores pessoais

tornaram-se mais acessíveis, fazendo parte da rotina tanto das empresas quanto das pessoas

em suas casas.

A evolução dos computadores aconteceu de maneira rápida e isto gerou alguns

problemas, já que o desenvolvimento de software não acompanhou da forma mais correta esta

nova realidade.

Segundo Dijkstra (1972):

A maior causa da crise do software é que as máquinas tornaram-se várias ordens de magnitude mais potentes! Em termos diretos, enquanto não havia máquinas, programar não era um problema; quando tivemos computadores fracos, isso se tornou um problema pequeno e agora que temos computadores gigantescos, programar tornou-se um problema gigantesco. (DIJIKSTRA, 1972 apud KOSCIANSKI; SOARES, 2007, p. 21).

O termo “crise do software” surgiu por volta da década de 60 e abrange todo o

conjunto de problemas e deficiências no processo de desenvolvimento de um aplicativo

(definição, codificação, implantação e manutenção). (MAFFEO, 1992).

Na época as aplicações eram desenvolvidas sem um método que as guiasse, ou

seja, a construção do software era desorganizada e não seguia padrões de boas práticas,

tampouco havia a preocupação com a qualidade do que estava sendo entregue ao cliente final.

Isto acarretou em problemas diversos, tais como: a baixa qualidade, os atrasos frequentes no

Page 23: Automação de Testes de Regressão - Selenium

23

projeto, a falta de atendimento aos requisitos do cliente, que gerava manutenções constantes,

dentre outros.

Segundo Deek et al (2005), os fracassos de projeto; as perdas econômicas; os

atrasos na entrega; o mercados competitivos e uma exigência crescente para a qualidade e

confiabilidade de um aplicativo sem custos abusivos impulsionaram a criação de diversas

práticas para tentar solucionar estes gargalos. A partir dessas necessidades surgiu o que

conhecemos atualmente como “Engenharia de Software”.

2.2 ENGENHARIA DE SOFTWARE

O termo ficou conhecido a partir da década de 60 e segundo Koscianski e Soares

(2007) uma das primeiras vezes que se utilizou o tema “Engenharia de Software”, foi em uma

conferência realizada em 1968, na Alemanha, por uma entidade que a princípio não possuía

relação com a área e que se chamava Comitê de Ciência da NATO (North Atlantic Treaty

Organisation – Organização do Tratado do Atlântico Norte).

Segundo Pressman (1995, p.31):

A engenharia de software é um rebento da engenharia de sistemas e de hardware. Ela abrange um conjunto de três elementos fundamentais – métodos, ferramentas e procedimentos – que possibilita ao gerente o controle do processo de desenvolvimento do software e oferece ao profissional uma base para a construção de software de alta qualidade produtivamente.

A fim de associar o termo Engenharia ao conceito de desenvolvimento das

aplicações, o IEEE (Institute of Electrical and Electronics Engineers – Instituto de

Engenheiros Elétricos e Eletrônicos), que é a maior associação profissional do mundo

dedicada a avanços tecnológicos, no ano de 1990, destacou que a Engenharia de Software

possuía uma abordagem sistemática, disciplinada e quantificada ao desenvolvimento,

operação e manutenção de software.

Esta engenharia é dividida em camadas, que possuem como foco principal a

qualidade final do produto. O meio para se chegar até esse objetivo é o constante

aperfeiçoamento do processo de desenvolvimento, que consiste na criação de documentos,

artefatos e marcos que são capazes de representar o contexto do software, levando em

Page 24: Automação de Testes de Regressão - Selenium

24

consideração recursos, ferramentas, prazos, restrições e outros aspectos que envolvem o

desenvolvimento de uma aplicação (PRESSMAN, 2002).

Como ferramental da Engenharia de Software, elaborou-se as metodologias de

desenvolvimento de software, que são apresentadas com mais detalhes na próxima seção.

2.2.1 Metodologias de Desenvolvimento

O uso de metodologias de desenvolvimento de software pelas organizações

representa uma resposta aos problemas encontrados na concepção de sistemas e também

busca atender às camadas de controle da Engenharia de Software. Conceitualmente, elas são

um conjunto de atividades que apoiam a produção de aplicações. Outra definição dada pelo

autor, acadêmico e consultor na área Ian Sommerville (2003) é a de que modelar um processo

pode ser entendido como “uma representação abstrata [...]. Cada modelo de processo

representa um processo a partir de uma perspectiva particular, de uma maneira que

proporciona apenas informações parciais sobre o processo” (SOMMERVILLE, 2003, p.36).

Segundo Koscianski e Soares (2007), as metodologias podem ser classificadas em

dois grupos: as metodologias tradicionais, que possuem como foco a documentação de cada

etapa do desenvolvimento do software e as metodologias ágeis que são adequadas nos casos

em que a mudança dos requisitos é frequente.

O autor Ian Sommerville (2003) destaca que, mesmo existindo diversas

metodologias para o desenvolvimento, algumas etapas são comuns a todas elas, tais como:

• Especificação: trata-se da definição do funcionamento e características

da aplicação;

• Projeto e Implementação: esta etapa contempla a produção de

diagramas, de acordo com as especificações feitas pelo cliente, que serão

implementados através de linguagens de programação;

• Validação: fase de testes no produto e revisão dos requisitos;

• Evolução: atividades de manutenção na aplicação. Nesse passo ocorre a

adaptação às novas necessidades solicitadas pelo cliente.

As principais metodologias serão apresentadas, de maneira mais detalhada, nas

seções seguintes.

Page 25: Automação de Testes de Regressão - Selenium

25

2.2.1.1 Metodologias Tradicionais

As metodologias tradicionais também são conhecidas como orientadas à

documentação, pois surgiram de um paradigma de desenvolvimento de software distinto do

que vivemos atualmente, uma vez que eram baseados apenas em mainframes e terminais

(ROYCE, 1970).

Na época, o custo de fazer alterações e correções era muito alto, uma vez que o acesso aos computadores era limitado e não existiam ferramentas de apoio ao desenvolvimento do software, como depuradores e analisadores de código. Em razão disso, o software era todo planejado e documentado antes de ser implementado. (KOSCIANSKI; SOARES, 2007, p. 191).

Para Pressman (2002), as metodologias tradicionais são aplicadas aos casos em

que os requisitos não sofrem alterações no decorrer do projeto de software.

Dentre os modelos tradicionais encontram-se o clássico ou cascata, o incremental,

a prototipação e o espiral.

2.2.1.1.1 Modelo clássico

O modelo clássico, que também ficou conhecido como cascata, é o mais antigo e

difundido na engenharia de software (PRESSMAN, 1995). Ele traz consigo um paradigma de

desenvolvimento sequencial e possui uma abordagem sistemática.

Na figura 1, pode-se observar o ciclo de desenvolvimento clássico com suas

atividades.

Page 26: Automação de Testes de Regressão - Selenium

26

Figura 1 – Atividades do modelo cascata

Fonte: Adaptado de Pressman (1995, p. 33)

Para Pressman (1995), este modelo, com o passar dos anos, sofreu severas críticas

e foi colocado em dúvida a sua aplicabilidade, já que os projetos raramente seguem o fluxo

sequencial que o modelo propõe. De acordo com Koscianski e Soares (2007), quanto maior

for a progressão do desenvolvimento do projeto, maior será também o custo das alterações no

mesmo. A figura 2 exemplifica essa situação.

Figura 2 - Custo de modificação

Fonte: http://imasters.com.br/artigo/18732/agile/sem-boas-praticas-de-engenharia-nao-ha-agilidade

Page 27: Automação de Testes de Regressão - Selenium

27

Segundo Koscianski e Soares (2007, p.192), “o modelo clássico dominou a forma

de desenvolvimento de software até o início da década de 1990, apesar das advertências dos

pesquisadores da área e dos desenvolvedores, que identificaram os problemas gerados ao se

adotar essa visão sequencial de tarefas”.

Embora esse modelo possua alguns pontos negativos, serviu como base para

diversos paradigmas, que surgiram na sequência além de ser uma solução para a abordagem

informal de desenvolvimento que culminou na crise.

2.2.1.1.2 Modelo Incremental

O modelo incremental derivou do modelo cascata. Esse modelo possui como

conceito principal o desenvolvimento de forma incremental, onde em cada incremento novas

funcionalidades serão adicionadas e modificações podem ser inseridas até que o produto seja

finalizado.

Para Sommerville (2003):

Uma vez identificados os incrementos, os requisitos para as funções a serem entregues no primeiro incremento são definidos em detalhes, e esse incremento é desenvolvido [...] Durante esse desenvolvimento, outras análises de requisitos para os incrementos seguintes podem ocorrer, mas as mudanças nos requisitos para o incremento atual não são aceitas (SOMMERVILLE, 2003, p.44).

A cada conclusão de um incremento uma prévia é enviada ao cliente, que pode

colocar o sistema em operação.

A figura 3 ilustra o método de desenvolvimento incremental.

Page 28: Automação de Testes de Regressão - Selenium

28

Figura 3 - Modelo Incremental

Fonte: http://inf.unisul.br/~vera/egs/aula01.htm

De acordo com Sommerville (2003, p.44), “os incrementos dever ser

relativamente pequenos” onde em cada um deve haver uma funcionalidade. Nesse modelo os

requisitos não são detalhados até que a implementação esteja concluída, o que dificulta o

mapeamento dos requisitos solicitados pelo cliente.

2.2.1.1.3 Prototipação

A prototipação é um processo que possibilita ao desenvolvedor criar um modelo

da aplicação que será implementada. (PRESSMAN, 1995).

O mesmo autor ainda afirma que esse modelo pode assumir três formas:

1. O protótipo em papel que apresenta a interação homem-máquina para que

o usuário entenda o processo de interações que irão ocorrer no projeto;

2. Um protótipo de trabalho que mostra uma parte do software;

3. Uma aplicação que executa uma prévia da funcionalidade solicitada pelo

cliente.

A figura 4 apresenta a sequência de atividades para o modelo de prototipação.

Page 29: Automação de Testes de Regressão - Selenium

29

Figura 4 - Atividades da Prototipação

Fonte: Pressman (1995, p. 36)

O protótipo geralmente serve como uma visão prévia do sistema e se torna muito

útil na identificação de requisitos. (PRESSMAN, 1995).

Assim como o modelo cascata, esse também possui fragilidades e uma delas, na

opinião de Pressman (1995), é a de que o cliente geralmente confunde o protótipo com uma

versão de trabalho e acaba exigindo que o mesmo se torne o produto final.

Ainda que possam ocorrer problemas, a prototipação é um paradigma eficiente da engenharia de software. A chave é definir-se as regras do jogo logo no começo; ou seja, o cliente e o desenvolvedor devem ambos concordar que o protótipo seja construído para servir como um mecanismo a fim de definir os requisitos. Ele será depois descartado [...] (PRESSMAN, 1995, p.38)

Na seção seguinte, será apresentado o modelo espiral, que surgiu como forma de

unir os pontos positivos tanto do modelo cascata quanto do modelo de prototipação.

Page 30: Automação de Testes de Regressão - Selenium

30

2.2.1.1.4 Modelo espiral

O modelo espiral surgiu como solução às fragilidades de seus antecessores. Ele

representa o processo como uma espiral, onde cada volta indica uma fase do projeto. Nesse

modelo há um novo elemento: a análise de risco.

De acordo com Sommerville (2003), “os riscos resultam em problemas no projeto,

como a possibilidade de exceder no prazo e no custo previstos; portanto, minimizar riscos é

uma atividade de gerenciamento de projeto muito importante”. (SOMMERVILLE, 2003,

p.46).

Na figura 5 observam-se as iterações do modelo em questão.

Figura 5 - Iterações do modelo espiral

Fonte: Pressman (1995, p.39)

As iterações nesse modelo iniciam-se no centro e avançam para fora da espiral,

sendo que em qualquer etapa da evolução é possível obter protótipos.

Page 31: Automação de Testes de Regressão - Selenium

31

De acordo com Pressman (1995), o modelo espiral pode ser utilizado como forma

de refinar os requisitos, simulações e o auxílio de outros modelos de desenvolvimento.

Segundo Sommerville (2003):

Não há fases fixas, como especificação ou projeto, no modelo em espiral. [...] A prototipação pode ser utilizada em uma espiral para resolver dúvidas relativas aos requisitos e, portanto, reduzir riscos. Essa fase pode ser seguida por um desenvolvimento em cascata convencional. (SOMMERVILLE, 2003, p.46).

Na próxima seção será apresentada a definição e as principais metodologias ágeis

de desenvolvimento.

2.2.1.2 Metodologias Ágeis

Em fevereiro de 2001, um grupo denominado Aliança Ágil, que era formado por

dezessete pesquisadores dentre eles praticantes de diversas metodologias de desenvolvimento,

assinou em Utah, nos EUA, o Manifesto para o Desenvolvimento Ágil de Software.

De acordo com Ambler (2004, p.23), esse manifesto continha quatro declarações:

Indivíduos e iterações valem mais que processos e ferramentas; um software funcionando vale mais que documentação extensa; a colaboração do cliente vale mais que negociação de contrato; responder às mudanças vale mais que seguir um plano.

Para Koscianski e Soares (2007, p.194):

O Manifesto Ágil não rejeita processos e ferramentas, documentação, negociação de contratos nem planejamento, mas simplesmente mostra que estes tem importância secundária quando comparados com os indivíduos, com o software executável, com a colaboração dos clientes e as respostas rápidas às mudanças.

Esse novo conceito de gestão e desenvolvimento de software possui dentre suas

características a divisão do problema em produtos menores, uma maior interação entre equipe

e cliente e são mais adaptáveis a mudanças. De acordo com Koscianski e Soares (2007,

p.193), “As metodologias ágeis são adequadas para situações em que a mudança de requisitos

é frequente. Para ser realmente considerada ágil, a metodologia deve aceitar a mudança em

vez de tentar prever o futuro”. Dessa forma, o foco da metodologia não é a mudança em si,

Page 32: Automação de Testes de Regressão - Selenium

32

mas, sim como a equipe irá responder às modificações dos requisitos de um software que

serão frequentes durante o processo de desenvolvimento.

O custo das mudanças no decorrer do projeto de uma aplicação é inferior quando

se utilizam metodologias ágeis. A curva da figura 6 cresce menos ao longo do tempo se

comparada com a da figura 2, que expressava os custos de modificação no modelo cascata. De

acordo com Soares (2004), as metodologias ágeis “... incentivam a mudança nos requisitos,

pois dessa forma é possível realmente entregar ao cliente o produto que ele precisa”.

Figura 6 - Custo de mudanças nas metodologias ágeis

Fonte: Soares (2004)

Na opinião de Koscianski e Soares (2007), as metodologias ágeis mais conhecidas

são a Extreme Programming e a Scrum, ambas serão descritas a seguir:

2.2.1.2.1 Extreme Programming (XP)

A Extreme Programming (XP) possui como foco equipes de desenvolvimento

pequenas e médias e são utilizadas nos casos em que os requisitos sofrem diversas

modificações.

Page 33: Automação de Testes de Regressão - Selenium

33

Para Koscianski e Soares (2007), as principais características que diferem a XP

das demais metodologias são:

• Comunicação entre os envolvidos é constante;

• O Feedback está sempre presente;

• Abordagem incremental.

A XP utiliza práticas que, à primeira vista, podem parecer incomuns e elas devem

ser aplicadas em forma de conjunto, pois isoladamente não possuem o mesmo efeito.

Para Astels, Miller e Novak (2002), as principais atividades ou “princípios

extremos” da Extreme Programming são:

• Cliente sempre presente: O cliente deve participar ativamente do projeto,

sanando as dúvidas referentes aos requisitos, tomando decisões e

fornecendo o feedback sobre o produto;

• Uso de metáforas: Trata-se de uma representação de um recurso ou

conceito no desenvolvimento do produto, minimizando o uso de alguns

termos técnicos, tornando mais simples o entendimento do problema.

• Planejamento: Os projetos necessitam de um planejamento inicial. A

princípio ele não necessita de muito detalhamento, basta que se tenha

conhecimento dos riscos, o caminho a ser percorrido e o que será feito

para que se alcance o objetivo. O cliente fica responsável pela tomada de

decisões sobre os problemas dos negócios e a equipe de desenvolvimento

possui como responsabilidade a parte técnica.

• Reuniões curtas: As reuniões devem ser breves e diárias, onde o que será

discutido são as atividades que cada membro desempenhou no dia

anterior.

• Testes: A validação do projeto ocorre durante todo o processo. Os testes

são escritos antes do código e uma tarefa não pode ser concluída até que

não haja um conjunto de casos de teste para a mesma.

• Projeto simplificado: A aplicação deve atender aos requisitos atuais. O

projeto deve ser compreensível e o código sucinto.

• Programação em pares: O software deve ser desenvolvido por uma dupla

de programadores, ou seja, ambos trabalharão no mesmo computador.

Page 34: Automação de Testes de Regressão - Selenium

34

• Código padronizado: A equipe deve adotar um conjunto de padrões para

o código, onde todos os membros devem concordar e seguir.

• Propriedade coletiva: O código da aplicação pertence a todos os

membros da equipe. Dessa forma, todos possuem acesso e são

responsáveis pelo mesmo.

• Integração contínua: o código produzido, depois de ser testado e validado,

será integrado ao sistema que, por sua vez, deve ser testado a cada nova

integração. Assim, o produto é construído de forma gradativa.

• Refatoração: É a melhoria do software internamente sem afetar a estrutura

externa. É uma forma de simplificar o código e minimizar a chance de

defeitos.

• Releases em incrementos pequenos: São versões pequenas do produto

que serão entregues ao cliente. Desse modo, ele fornece o feedback

constante a respeito do software.

• Trabalho semanal de 40 horas: Para a XP o funcionário deve trabalhar

até 40 horas por semana, evitando horas extras.

• Alterações: A equipe deve ser flexível às mudanças que irão ocorrer nos

requisitos do projeto.

A XP, assim como as demais metodologias, possui características positivas e

negativas que deverão ser levadas em consideração pelos gestores no momento de sua

implantação.

Na seção seguinte, será apresentada outra metodologia ágil bastante difundida

atualmente: o Scrum.

2.2.1.2.2 Scrum

O Scrum surgiu em 1990 e foi criado por Jeff Sutherland e sua equipe. De acordo

com Pressman (2006), essa metodologia, assim como o XP, é ideal para projetos que possuam

alterações constantes e prazos curtos.

Page 35: Automação de Testes de Regressão - Selenium

35

Para Soares (2004, p.5) “a Scrum apresenta uma abordagem empírica que aplica

algumas ideias da teoria de controle de processos industriais para o desenvolvimento de

softwares, reintroduzindo as ideias de flexibilidade, adaptabilidade e produtividade”.

Essa metodologia é semelhante ao XP no que diz respeito ao tamanho das equipes

e a instabilidade dos requisitos.

Dentre os itens característicos do Scrum, está o backlog que seria uma lista com as

pendências, requisitos ou características do projeto. O gerente do projeto avalia quais são as

prioridades, à medida que novos itens são inseridos no escopo. (PRESSMAN, 2006).

O desenvolvimento é feito em ciclos iterativos chamados de sprints, que possuem

duração de até trinta dias com a definição das tarefas de cada membro. As equipes são

chamadas de times e possuem até dez pessoas. As reuniões são curtas, com no máximo 15

minutos, e devem ser executadas diariamente. (KOSCIANSKI; SOARES, 2007).

Dentro de cada time existe um Scrum Master que possui como responsabilidades:

a aplicação dos conceitos do Scrum, conduzir as reuniões, incentivar a colaboração dos

colaboradores dentro do time e minimizar os impedimentos.

A figura 7 ilustra o funcionamento do Scrum.

Figura 7 - Funcionamento do Scrum

Fonte: http://www.heptagon.com.br/scrum

De acordo com Koscianski e Soares (2007), o Scrum possui três fases principais:

Page 36: Automação de Testes de Regressão - Selenium

36

• Pré-planejamento (pre-game phase): os requisitos encontram-se

ordenados por prioridade no backlog. Nessa fase será definida a equipe de

desenvolvimento, as ferramentas para o mesmo, a identificação das

ameaças para o projeto e possíveis treinamentos.

• Desenvolvimento (game phase): É a fase de construção do software em

sprints onde são controlados os riscos e novas funcionalidades serão

inseridas. O desenvolvimento segue uma métrica: análise, projeto,

implementação e testes.

• Pós-planejamento (post-game phase): Na etapa de pós-planejamento são

executados os testes finais, a integração da aplicação e a documentação

que será entregue ao usuário. Nessa fase são realizadas reuniões para

finalizar o sprint e apresentar o projeto atual para o cliente.

O Scrum fornece uma divisão de tarefas de forma clara, prioriza a comunicação

entre os membros do time, fornece soluções rápidas aos impedimentos que possam surgir,

dentre outras características.

2.3 TESTES DE SOFTWARE

O desenvolvimento de software não é uma tarefa simples de se desempenhar,

dependendo do tamanho e dimensão do problema essa atividade pode se tornar complexa e

custosa. Segundo os autores Delamaro, Jino e Maldonado (2007, p.1), a atividade de

desenvolvimento “[...] pode se tornar bastante complexa, dependendo das características e

dimensões do sistema a ser criado.”.

Além da complexidade na criação dos softwares, existe outro fator importante que

deve ser levado em consideração: a qualidade.

Segundo Pressman:

“Qualidade de software é a satisfação de requisitos funcionais e de desempenho explicitamente declarados, normas de desenvolvimento explicitamente documentadas e características implícitas que são esperadas em todo o software desenvolvido profissionalmente.” (PRESSMAN, 2006, p. 349).

Page 37: Automação de Testes de Regressão - Selenium

37

A qualidade é uma sequência metódica que possui etapas e ferramentas para que

se tenha um processo ou produto dentro de uma conformidade com a intenção de evitar e

eliminar falhas. (BARTIÉ, 2002).

Para obter qualidade no software desde o início de sua construção são necessários

investimentos. Para Molinari (2003, p. 22 e 23) “o custo total efetivo do gerenciamento de

qualidade é a soma dos quatro fatores: prevenção + inspeção + falha interna + falha externa.”.

A prevenção é o ato de identificar os erros antes que eles apareçam; já o custo de

inspeção tem como foco a medição, avaliação e auditoria dos produtos conforme os padrões e

especificações. O custo de falhas internas é identificado a partir dos testes. O custo de falhas

externa são falhas identificadas pelos clientes, que necessitam de correção.

De acordo com Müller et al (2007), os testes devem fornecer dados que possam

auxiliar a tomada de decisão dentro do projeto, para as fases seguintes do desenvolvimento de

um software ou até mesmo da sua implantação. Portanto, o êxito de um processo de testes

baseia-se em encontrar um defeito e corrigi-lo o quanto antes, assim, os custos de correção

serão menores.

Conforme ilustra a figura 8, o custo da correção de um erro é imensamente maior

quando o software já está em fase de produção.

Page 38: Automação de Testes de Regressão - Selenium

38

Figura 8 - Custo de correção dos problemas

Fonte: Bastos et al. (2007, p. 19)

O conceito de qualidade está diretamente ligado à prática de testes, conforme

Bartié (2002, p.18) “na verdade, o processo de qualidade de software utiliza-se dos testes em

todo o ciclo de desenvolvimento, de forma a garantir tanto o processo de engenharia quanto o

produto de software desenvolvido.”.

Bartié (2002) afirma que durante o processo de desenvolvimento de software

existem duas fases principais. A primeira consiste em planejar e levantar as informações sobre

o sistema; nesse caso, aplicam-se os testes de verificação, e na segunda fase, onde já existe

um produto em construção executam-se os testes de validação.

A função da verificação é observar se o sistema está de acordo basicamente com

os requisitos funcionais e não funcionais já a validação é a etapa de verificar se a aplicação

está sendo construída da forma correta. Nesse caso, a mesma será avaliada e uma bateria de

testes será executada. (SOMMERVILLE, 2003).

“Os testes de verificação podem ser entendidos como um processo de auditoria de atividades e avaliação de documentos gerados durante todas as fases do processo de engenharia de software. As verificações devem ser aplicadas a todos os produtos (documentos, gráficos, manuais, código-fonte) que são produzidas em cada etapa do

Page 39: Automação de Testes de Regressão - Selenium

39

processo [...] A principal característica dos testes de verificação é o fato de não envolver o processamento de softwares.” (BARTIÉ, 2002, p.37). Os testes de validação podem ser entendidos como um processo formal de avaliação de produtos tecnológicos que podem ser aplicados em componentes isolados, módulos existentes ou mesmo nos sistemas como um todo [...] A característica dos testes de validação é a presença física do software e de seu processamento em um ambiente [...]. (BARTIÉ, 2002, p.38)

De acordo com Glen Myers citado por Pressman (1995, p. 788), existem três

regras que são os objetivos do teste:

1. A atividade de teste procura descobrir um erro na aplicação;

2. Para um caso de teste ser visto como bom ele deve ter uma grande probabilidade de

achar um erro ainda desconhecido;

3. Um teste que revela um erro ainda não descoberto é chamado de bem sucedido.

Nota-se com base nos objetivos acima citados que para uma atividade de teste ser

considerada bem sucedida, deve reportar o maior número possível de erros. Para Koscianski e

Soares (2007, p. 337) “o objetivo do teste é encontrar defeitos, revelando que o

funcionamento do software em uma determinada situação não está de acordo com o

esperado.”.

Müller et al (2007) defende que a rigorosidade nos testes em sistemas e nas

documentações colaboram para a redução dos riscos causados pela ocorrência de um

comportamento indesejado em ambiente operacional.

Na opinião de Rezende (1999, p.252), a prática de testes “[...] é de fundamental

importância no desenvolvimento de sistemas [...], ela pode garantir o sucesso do mesmo, pois

se todos os requisitos funcionais forem testados, provavelmente o cliente e/ou usuário estará

satisfeito”.

2.3.1 Técnicas para Teste de Software

Em algum momento do projeto de desenvolvimento de uma aplicação os

requisitos serão implementados e deverão estar de acordo com o que foi solicitado pelo

cliente. Nesse momento, os testes, para que essa validação seja feita, são colocados em prática

(BARTIÉ, 2002).

Page 40: Automação de Testes de Regressão - Selenium

40

De acordo com Pezzè e Young (2008, p.30), “a escolha do conjunto de técnicas de

teste e análise depende das restrições de qualidade, custo, prazo e recursos no

desenvolvimento de um produto em particular”.

As técnicas para teste de software serão apresentadas nas seções seguintes.

2.3.1.1 Teste de unidade

Segundo Bartié (2002), a etapa de testes de unidade é a primeira a ser executada,

pois possui como meta testar partes individuais do sistema.

Esse tipo de teste está relacionado com a estrutura interna do software. Portanto, o

profissional que fará essa etapa deve possuir conhecimento do código; geralmente, são

realizados pelo próprio desenvolvedor.

Nessa estratégia de testes, o objetivo é executar o software de forma a exercitar adequadamente toda a estrutura interna de um componente, como os desvios condicionais, os laços de processamento e todos os possíveis caminhos alternativos de execução. Desta forma, estaremos validando a estrutura interna do componente e atestando a capacidade de processamento sob os mais variados cenários de execução. (BARTIÉ, 2002, p.140)

O teste de unidade avalia algumas partes do código-fonte, buscando a validação

dos dados que serão armazenados, bem como a verificação do comportamento que a aplicação

apresentará no momento em que dados incorretos sejam inseridos. (INTHURN, 2001).

2.3.1.2 Teste de integração

Os testes de integração representam a continuidade dos testes unitários. Nessa

etapa, a função principal é avaliar a compatibilidade e integração entre os componentes do

sistema, pois, cada vez que uma alteração é feita, pode comprometer as demais partes da

aplicação. (BARTIÉ, 2002).

Para Molinari (2003) os testes de integração garantem o funcionamento da

aplicação como um conjunto das funcionalidades.

Page 41: Automação de Testes de Regressão - Selenium

41

Bartié (2002, p.149) ainda afirma que esse tipo de teste valida “as interfaces entre

componentes da mesma arquitetura tecnológica. Essas [...] representam as trocas dinâmicas de

informações que ocorrem entre componentes durante a execução de um software”.

2.3.1.3 Teste de sistema

Os testes de sistema iniciam-se logo após o término dos testes de integração e

devem simular o ambiente, no qual essa aplicação irá ser instalada e validar todas as suas

funcionalidades.

De acordo com Bartié (2002, p.154), “como os testes de sistemas contam com

uma infraestrutura mais complexa de hardware (mais próximo do ambiente real de produção)

[...] deveriam concentrar-se mais nos aspectos de performance, segurança, disponibilidade,

instalação, recuperação, entre outros”.

Para Bastos et al. (2007) esta etapa só poderá ser finalizada quando a equipe de

testes aprovar a ida do software para a produção.

2.3.1.4 Teste de aceitação

Os testes de aceitação representam o último passo do processo de testes. Segundo

Bartié (2002), nessa parte o aplicativo será disponibilizado para o usuário que poderá verificar

se todas as funcionalidades previstas no planejamento inicial encontram-se no produto final.

O mesmo autor ainda faz uma ressalva: “assim como nos testes de sistema, os procedimentos

de aceite deverão ser realizados a cada ciclo de implementação da solução, permitindo

correções antecipadas [...]” (BARTIÉ, 2002, p.157).

Page 42: Automação de Testes de Regressão - Selenium

42

2.3.1.5 Tipos de teste

Para a execução dos testes existem diversas técnicas, tais como: testes funcionais

ou caixa-preta que compreendem os testes de requisitos, testes de regressão, teste de

tratamento de erro e teste de interconexão; teste estrutural ou caixa-branca que abrangem o

teste de estresse, o teste de performance, o teste de recuperação e o de segurança; por fim,

existem os testes não funcionais que fazem parte destes o teste de usabilidade e o de

instalação.

A seguir são abordados os principais conceitos sobre estes tipos de testes.

2.3.1.5.1 Testes de caixa-preta

Segundo Rios e Trayahú (2006), os testes funcionais ou caixa-preta são realizados

sem que haja necessidade de ter conhecimento do código-fonte e se atentam apenas a

verificação dos requisitos.

Para Bartié (2002, p.105) “não é seu objetivo verificar como ocorrem

internamente os processamentos no software, mas se o algoritmo inserido [...] produz os

resultados esperados”.

A figura 9 ilustra a visão desse tipo de teste.

Page 43: Automação de Testes de Regressão - Selenium

43

Figura 9 - Visão do teste caixa-preta

Fonte: adaptado de Bartié (2002, p. 107)

Fazem parte dos testes de caixa-preta: os testes de requisitos, testes de regressão,

testes de tratamento de erros e os de interconexão.

2.3.1.5.1.1 Testes de requisitos

Os testes de requisitos, como o próprio nome já diz, atentam-se exclusivamente

aos requisitos solicitados pelo cliente ou usuário final do sistema. Para Bartié (2002, p.107)

“são baseados nos documentos de requisitos e modelados através de especificações funcionais

e suplementares”.

Por pertencerem ao grupo dos testes funcionais não necessitam de conhecimento

da estrutura interna da aplicação.

Page 44: Automação de Testes de Regressão - Selenium

44

2.3.1.5.1.2 Testes de regressão

As aplicações sofrem constantes modificações, novos módulos são inseridos e

funcionalidades são adicionadas. Cada alteração dessas podem gerar problemas no software.

Nesse caso, há a necessidade da execução de testes após cada nova implementação, como

forma de prevenção para efeitos colaterais indesejáveis. Os testes de regressão são aplicados

toda vez que o produto é modificado.

Segundo Young (2008, p. 454), “algumas vezes mesmo uma pequena alteração

pode produzir resultados inesperados que levam a falhas”. O mesmo autor ainda destaca que a

regressão basicamente é o processo de executar repetidamente os casos de teste que foram

criados para o software.

Esse tipo de teste pode ser subdivido em dois subgrupos: regressão total e

regressão parcial.

Segundo Alexandre Bartié (2002), os testes de regressão total são realizados sem

exceções, trata-se de um processo sem riscos, porém com custo elevado “[...] Essa escolha

deve estar baseada em uma análise crítica na relação custos versus riscos e em um bom

processo de rastreabilidade de requisitos” (BARTIÉ, 2002, p.197).

Os testes de regressão parcial são executados a partir de um subconjunto dos

casos de teste. Para Bartié “esse subconjunto deve ser identificado através de uma afinidade

de negócio existente entre os casos de teste e as alterações realizadas”. (BARTIÉ, 2002,

p.197). Esse tipo de teste possui custos menores, porém o risco de algum caso de teste

importante deixar de ser selecionado é alto, tornando o processo frágil.

Segundo Young (2008, p. 454), destaca uma característica importante quando são

utilizados os testes de regressão:

Alterações na versão do software podem influenciar no formato das entradas e saídas e os casos de teste podem não ser executáveis sem as alterações correspondentes. Mesmo modificações simples nas estruturas de dados [...] podem invalidar os casos iniciais ou os resultados comparáveis com os novos. Além disso, alguns casos de teste podem ficar obsoletos uma vez que testam funcionalidades do software que foram modificadas, substituídas ou removidas na nova versão.

Por se tratar de uma atividade repetitiva, nos últimos anos tem-se falado em

automação dos testes de regressão. Esse tema será explicado na seção 2.3.2.

Page 45: Automação de Testes de Regressão - Selenium

45

2.3.1.5.1.3 Testes de tratamento de erros

Os testes de tratamento de erros, como o próprio nome indica, é a capacidade que

a aplicação possui para tratar e prevenir os possíveis erros que ocorram.

De acordo com Bastos et al. (2007), o responsável por esse tipo de teste deve

possuir como foco: verificar se as condições de erro são reconhecidas pelo sistema, observar

se a responsabilidade pelo processamento do erro foi atribuída ao componente correto e

visualizar o controle que o software possui sobre os erros que surgem no decorrer do

processo.

2.3.1.5.1.4 Testes de interconexão

Os testes de interconexão garantem o funcionamento de aplicações conectadas a

outros softwares. De acordo com Bastos et al. (2007, p. 64), “Os testes de interconexão

devem ser conduzidos sempre que existir uma mudança nos parâmetros entre softwares de

aplicações.”.

2.3.1.5.2 Teste de caixa branca

De acordo com Pressman (1995, p. 793), “o teste de caixa branca é um método de

projeto de casos de teste que usa a estrutura de controle do projeto procedimental para derivar

casos de teste.”.

Esse tipo de teste também é conhecido como estrutural e, nesse caso, o analista

possui conhecimento do software e de suas estruturas internas. Dessa forma, ele pode escolher

quais componentes serão testados, agregando mais precisão ao teste. (KOSCIANSKI;

SOARES, 2007, p. 343).

A figura 10 apresenta uma visão dos testes de caixa-branca.

Page 46: Automação de Testes de Regressão - Selenium

46

Figura 10 - Visão do teste caixa-branca

Fonte: Adaptado de Bartié (2002, p. 107)

Os testes de caixa-branca englobam: testes de estresse, teste de performance, teste

de recuperação e o teste de segurança.

2.3.1.5.2.1 Testes de estresse

De acordo com Koscianski e Soares (2007, p. 347), “O teste de estresse é

realizado para submeter o software a situações extremas.”. O mesmo autor afirma que esse

tipo de teste é muito utilizado em aplicações onde a eficiência seja um requisito importante

como nos seguintes casos, por exemplo:

Page 47: Automação de Testes de Regressão - Selenium

47

• Servidores web que recebem solicitação de diversos usuários;

• Na indústria;

• Jogos para computador.

2.3.1.5.2.2 Testes de performance

Nesse tipo de teste ocorre uma comparação entre a quantidade de transações

efetuadas e o tempo de resposta do sistema em condições extremas. O cenário deve ser

especificado com bastante atenção. Para Bartié (2002) os testes são executados, verificando-se

alguns itens:

• Levantar os requisitos de desempenho;

• Simular uma quantidade de usuários executando a mesma tarefa

simultaneamente;

• Simular a porcentagem de tráfego na rede.

2.3.1.5.2.3 Testes de recuperação

Os testes de recuperação “tem por objetivo avaliar o comportamento do software

após a ocorrência de um erro ou de determinadas condições anormais”. (BARTIÉ, 2002,

p.118). O mesmo autor destaca que uma maneira de simular erros, para esse caso, seria

interromper o acesso à rede ou ao processamento desligando o servidor, por exemplo. Isso

simula qual será a capacidade da aplicação recuperar os dados que estavam sendo processados

naquele momento.

2.3.1.5.2.4 Testes de segurança

Para Bartié (2002, p.116) os testes de segurança “tem por objetivo detectar falhas

de segurança que podem comprometer o sigilo e a fidelidade das informações, bem como

provocar perdas de dados ou interrupções de processamento”.

Page 48: Automação de Testes de Regressão - Selenium

48

Nesse passo ocorre uma avaliação do software para que se possa saber qual o

nível de segurança para os dados que o mesmo oferece. Um exemplo disso seria tentar acessar

dados de nível gerencial com um perfil de usuário comum. A tentativa de descobrir senhas e

obter backups de informações sigilosas também são técnicas do teste de segurança.

2.3.1.5.3 Testes não-funcionais

Trata-se de outra categoria para teste, o International Software Testing

Qualifications Board (2007) não possui como objetivo a verificação de funcionalidades ou

requisitos, como nos testes de caixa preta ou branca. Nesse caso, observa-se itens como

usabilidade do sistema e o processo de instalação do mesmo.

2.3.1.5.3.1 Testes de usabilidade

O teste de usabilidade analisa os itens do software de acordo com a perspectiva do

usuário final.

Dessa forma, esses testes focalizam a facilidade de navegação entre as telas da aplicação, a clareza de textos e mensagens que são apresentados ao usuário, o volume reduzido de interações para realizar uma determinada função, padronização visual, entre outros aspectos. (BARTIÉ, 2002, p.114).

O objetivo principal é mensurar a facilidade que o usuário terá em manipular o

software de modo intuitivo e simples. Para Bartié (2002) oferecer telas de ajuda também é

uma característica importante de usabilidade.

2.3.1.5.3.2 Teste de instalação

Como o próprio nome já descreve, deve-se verificar o processo de instalação da

aplicação. O ideal seria que o cliente também validasse esse processo.

Para Bartié (2002) pode ser interessante aplicar diversos tipos de instalação

simulando várias situações:

Page 49: Automação de Testes de Regressão - Selenium

49

• Realizar a instalação pela primeira vez;

• Instalar o software em ambientes diferentes;

• Realizar a instalação da aplicação após a mesma já ter sido instalada;

• Verificar se a instalação atende os requisitos do cliente.

2.3.2 Automatização de Testes de Software

Testar um software é uma sequência de passos minuciosa que pode se tornar

cansativa. Uma alternativa para proporcionar a entrega de produtos confiáveis em menor

tempo é a realização de teste de software de maneira automatizada. (DUSTIN, 2002).

Segundo Pezzè e Young (2008), a automação pode melhorar a eficiência de

algumas das atividades de qualidade, como também se tonar uma necessidade para

implementações de futuras melhorias no processo de testes de software.

Assim, é necessário saber quando automatizar. Molinari (2003) cita que a

automação de teste faz-se necessário nas seguintes situações:

• Quando os testes que utilizam as técnicas de regressão ou de confirmação

repetem constantemente;

• Quando há o uso de testes aleatórios (testes “random” ou “monkey”) que

utilizam caminhos aleatórios gravados por dentro da aplicação e de grande

quantidade de dados de teste;

• Quando os testes de carga, volume, capacidade exigem muita gente para

simular e efetuar o teste;

• Quando se faz teste de componentes (unidade) os quais devem ser retestado

várias vezes.

Para efetuar a automação de testes, investimentos são imprescindíveis; esforços

como análise e planejamento são precisos para conseguir atingir esse objetivo. Molinari

(2003) destaca que automação de teste é um investimento alto, onde existe uma combinação

de pessoas, técnicas, processos, tempo e foco. Por conta desses investimentos, muitas

Page 50: Automação de Testes de Regressão - Selenium

50

organizações não veem a automação de teste com bons olhos e, muitas vezes, essa alternativa

é descartada.

No mercado atual, existem ferramentas que auxiliam na automação de teste e que

visam diminuir o investimento na prática da automação. Molinari (2003), destaca que

investimentos empregados em automação consistem em escolha do tipo de ferramenta,

verificação na licença da ferramenta, hardware gasto na instalação das ferramentas,

treinamentos, manutenção nos scripts de teste e suporte ao fornecedor.

A seguir, serão expostas algumas ferramentas de automação existentes no âmbito

comercial, acadêmico e após serão exibidos as novas tendências de ferramentas.

2.3.2.1 Ferramentas para automação de teste

De acordo com Molinari (2003), existem ferramentas para automação de testes e

as mesmas são classificadas em dois grupos: as ferramentas comerciais e as acadêmicas.

Uma ferramenta comercial, para Molinari (2003, p.107), “[...] foca as

funcionalidades”. Abaixo, pode-se observar, no quadro 1, uma lista com sua classificação:

Quadro 1 - Ferramentas comerciais Tipo Descrição

Test Design Ajuda na decisão da escolha do teste que

precisa ser executado

GUI Test Drivers & Capture/Replay Ajudam na execução de teste que façam uso

de uma “graphical user interface”,

independente se a aplicação será Web,

Client-Server, Java, dentre outros.

Load & Performance Ferramentas especializadas em dar “uma

carga pesada de dados” ao sistema, também

conhecido como ferramenta do “test-driver”.

Non-GUI Test Drivers & Test Managers Ferramentas de automação de execução dos

testes com uma interface gráfica. Podem

trabalhar com grandes suítes de testes.

Page 51: Automação de Testes de Regressão - Selenium

51

Test Implementation Ferramentas que ajudam na implementação

dos testes. Um exemplo típico seria a geração

automática de sub-rotinas para tratamento de

falhas óbvias no programa.

Test Evaluation Ferramentas que ajuda a avaliar a qualidade

dos seus testes. A ferramenta de análise de

cobertura de código. (“code coverage”) seria

um exemplo.

Static Analysis Ferramentas que analisam o programa sem

executá-lo. Ferramentas de métricas

pertencem a esta categoria.

Defect Tracking Ferramentas que ajudam a gerenciar um

“banco de dados” com os defeitos

encontrados.

Fonte: Baseado em Molinari, 2002.

No caso da ferramenta acadêmica, Molinari (2003, p. 107) afirma que a mesma

“[...] foca a sua forma básica de concepção”. Sendo assim, no quadro 2, pode-se observar a

classificação da mesma:

Quadro 2 - Ferramentas acadêmicas Tipo Descrição

Capture/Replay Captura os comandos executados por

usuários e os executam.

Code Auditors Análise e auditoria de código que está sendo

testado.

Debuggers Ferramentas típicas dos programadores, que

visam retirar erros básicos do código

desenvolvido.

Standards Checkers Ferramentas que permitem verificar padrões

de interface.

Structural Analyzers Ferramentas que permitem analisar a

Page 52: Automação de Testes de Regressão - Selenium

52

estrutura de aplicação-alvo teste.

Test Coverage Analyzer Análises de cobertura de código.

Test Data Extraction Ferramenta de extração e verificação de

dados para teste.

Test Data Generators Ferramentas de geração de massas de dados

para teste.

Test Management Ferramenta de gerenciamento de teste.

Fonte: Baseado em Molinari, 2002.

2.3.2.2 Tendências para as ferramentas de automação

Segundo Molinari (2003), as novas tendências de ferramentas de automação de

testes estarão focadas em testes funcional, testes de regressão, testes de performance, testes de

carga, ferramentas que atende o planejamento de testes, testes de monitoração e ferramentas

de teste estrutural.

Segundo Fernandes (2006), no mercado, não existem ferramentas que suportam

todos os ambientes de operação de programas. É provável que nenhuma delas seja capaz de

atender todos os requisitos de uma organização, visto que múltiplas tecnologias são

empregadas em diversos projetos.

Conforme a evolução dos sistemas, novos mercados e ferramentas surgirão a

partir de uma boa análise das necessidades de testes e um bom planejamento, tornando-se

possível agregar valores e exibir ganhos efetivo para a organização. Segundo Foote e Yoder

apud Molinari (2003), “Se você pensa que uma arquitetura boa é cara, tente então uma má

arquitetura”.

Segundo Pezzè e Young (2008):

“O foco não está na escolha de um conjunto particular de “melhores” ferramentas para todos os momentos e situações, mas na continuidade de um processo racional de identificação e instalação de automações visando obter o melhor resultado à medida que a organização, o processo e a tecnologia evoluem.”.

Page 53: Automação de Testes de Regressão - Selenium

53

2.3.2.3 Automação de Teste x Teste de Regressão

Segundo Oliveira (2007, p.46), “um teste de regressão corresponde à re-execução

de um teste outrora realizado com sucesso sob um conjunto de funcionalidades do sistema.”.

A execução de testes de regressão tem o propósito de reavaliar o comportamento

do software, quando ocorrem modificações e a automatização do teste permite a identificação

rápida de defeitos, além de agilizar o processo de depuração e permitir a captura e análise dos

resultados de teste de forma consistente. (BINDER 1999).

Fernandes (2006) afirma que é comum presenciar a falsa expectativa de que todo

teste poderá ser automatizado mediante a compra de determinada ferramenta. Há casos em

que a automação não é possível ou é mais cara que a execução manual dos testes.

Os autores Pezzè e Young (2008) destacam que o julgamento e solução criativa de

problemas permanecem fora do domínio da automação, enquanto tarefas simples e repetitivas

normalmente são fáceis de automatizar.

É preciso, então, analisar e planejar quais os testes automatizar. Segundo Black

(2007) apud Oliveira (2007, p.47), existe algumas técnicas para selecionar subconjuntos de

testes de regressão e são elas:

• Uso de Rastreabilidade: identificar testes relacionados a descrições do

comportamento do sistema, como elementos de especificação de

requisitos, elementos de especificação de projeto ou análise de riscos;

• Uso de Análise de Mudança: nesse caso, devem ser analisadas descrições

estruturadas do sistema para descobrir como os efeitos de mudança se

propagariam através do sistema;

• Uso de Análise de Risco de Qualidade: priorizar testes que verificam áreas

de maior risco.

Para Dustin (2002) o conjunto de teste de regressão necessita ser automatizado e

deve ser executado em um ambiente estável para que sua execução seja aprimorada com o

mínimo possível de recursos. Caso os testes não sejam automatizados, a atividade de testes de

regressão torna-se excessivamente detalhada e repetitiva.

Page 54: Automação de Testes de Regressão - Selenium

54

Um conjunto ou suíte de teste de regressão pode compreender tanto testes de

caixa-branca quanto testes caixa-preta. Uma prática comum quando se trabalha com

Integração Contínua é automatizar testes de caixa-branca, garantindo uma maior

confiabilidade ao código desenvolvido. (GOIS, 2007).

A automação de teste é um investimento que visa economizar custos futuros no

processo de desenvolvimento de software. Sabe-se que, para automatizar testes, são

necessários esforços. Contudo, o desafio da automação consiste em verificar custos,

identificar os benefícios e, principalmente, efetuar a escolha certa de quais testes serão

automatizados.

Page 55: Automação de Testes de Regressão - Selenium

55

3 MÉTODO

Esse capítulo aborda a metodologia presente nessa monografia, apresentando o

tipo de pesquisa que será adotado, as etapas metodológicas da pesquisa, um esboço da solução

e as delimitações da pesquisa.

De acordo com Menezes e Silva (2005, p. 25), a metodologia científica pode ser

definida como “[...] o conjunto de processo ou operações mentais que se devem empregar na

investigação. É a linha de raciocínio adotada no processo de pesquisa”.

3.1 CARACTERIZAÇÃO DO TIPO DE PESQUISA

De acordo com Menezes e Silva (2005, p. 20), “pesquisa é um conjunto de ações,

propostas para encontrar a solução para um problema, que têm por base procedimento

racionais e sistemáticos. A pesquisa é realizada quando se tem um problema e não se têm

informações para solucioná-lo”.

Existem diversas formas de se definir os tipos de pesquisas, dentre elas temos: a

pesquisa básica, aplicada, quantitativa, qualitativa, exploratória, descritiva, explicativa,

bibliográfica documental, experimental, levantamento, estudo de caso, expost-facto, ação e

participante. (MENEZES E SILVA, 2005, p. 20).

Esse trabalho classifica-se quanto à sua natureza como uma pesquisa aplicada,

quanto sua abordagem como pesquisa qualitativa, tendo como objetivos uma pesquisa

exploratória e de acordo com os procedimentos técnicos, classifica-se como pesquisa

bibliográfica e estudo de caso.

Segundo Menezes e Silva (2001, p. 20) “pesquisa aplicada objetiva gerar

conhecimento para aplicação prática dirigidos à solução de problemas específicos."

Gil (1999, p.42) ainda coloca que a pesquisa “Tem um caráter pragmático, é um

processo formal e sistemático de desenvolvimento do método científico. O objetivo

fundamental da pesquisa é descobrir respostas para problemas mediante o emprego de

procedimentos científicos”.

Page 56: Automação de Testes de Regressão - Selenium

56

De acordo com Menezes e Silva (2005, p. 20), pesquisa qualitativa significa:

[...] um vínculo indissociável entre o mundo objetivo e a subjetividade do sujeito que não pode ser traduzido em números. A interpretação dos fenômenos e a atribuição de significados são básicas no processo de pesquisa qualitativa. Não requer o uso de métodos e técnicas estatísticas. O ambiente natural é a fonte direta para coleta de dados e o pesquisador é o instrumento-chave. É descritiva. Os pesquisadores tendem a analisar seus dados indutivamente. O processo e seu significado são os focos principais de abordagem.

Do ponto de vista dos objetivos, a presente monografia apresenta uma pesquisa

exploratória que, segundo Menezes e Silva (2005), visa proporcionar maior familiaridade com

o problema, tendo como objetivo torná-lo explícito ou construir hipóteses. Essa pesquisa

envolve levantamento bibliográfico, entrevistas com pessoas com experiências práticas e

análise de exemplos que auxiliem a compreensão do problema.

De acordo com o ponto de vista dos procedimentos técnicos, essa monografia

apresenta duas características: a pesquisa bibliográfica e o estudo de caso. Menezes e Silva

(2005) afirmam que uma pesquisa bibliográfica é aquela que foi elaborada a partir de um

material previamente publicado, sendo exemplos deste: livros, artigos e publicações

disponibilizadas na internet. Os mesmos autores destacam que um estudo de caso pode ser

definido como uma pesquisa que envolve um estudo profundo e exaustivo de um ou poucos

objetos, permitindo o seu amplo e detalhado conhecimento.

3.2 ETAPAS METODOLÓGICAS

Uma das etapas metodológicas iniciais representa a revisão bibliográfica que

serve de base para todo o trabalho. Após, será efetuado em paralelo às tarefas de

desenvolvimento dos testes automatizados e de estudo de uma aplicação web já existente

chamada Projector, que servirá de base, tanto para execução dos testes de regressão manual,

quanto para o teste automatizado. Em seguida, serão colocados em prática os testes manuais e

os automatizados, para que se possa fazer uma análise comparativa. Por fim, serão extraídas

as conclusões de ambos os procedimentos de teste.

A figura 11 ilustra esse processo.

Page 57: Automação de Testes de Regressão - Selenium

57

Figura 11 - Etapas metodológicas

Fonte: Elaborado pelos autores, 2013

Page 58: Automação de Testes de Regressão - Selenium

58

3.3 DESENHO DA SOLUÇÃO

Esse projeto utilizará um sistema web chamado Projector, que foi desenvolvido

durante o curso de graduação em Sistemas de Informação como trabalho final da disciplina de

Engenharia de Software, não sendo, portanto, um produto comercial. Essa aplicação consiste

em uma solução para gestão de projetos da área de TI.

O objetivo será aplicar os testes de regressão manuais e automatizados com o

apoio de profissionais da área, a fim de comparar as duas abordagens. Os testes elaborados

pertencem a algumas funcionalidades do Projector.

A rotina manual será escrita em um documento e entregue aos participantes

envolvidos para que os mesmos a executem em um primeiro momento. Em seguida, eles

acompanharão os mesmos testes feitos anteriormente de maneira automática.

Os casos automatizados são criados a partir de um script na ferramenta Selenium.

A figura 12 irá ilustrar essa proposta de solução.

Page 59: Automação de Testes de Regressão - Selenium

59

Figura 12 - Esboço da Solução

Fonte: Elaborado pelos autores, 2013

3.4 CARACTERÍSTICAS DO ESTUDO DE CASO

Para que se possa avaliar o uso do teste automatizado sobre o uso dos testes

manuais, formulou-se um estudo de caso. Essa seção tem como função apresentar mais

informações sobre o mesmo.

Page 60: Automação de Testes de Regressão - Selenium

60

3.4.1 Cenário proposto

Como forma de aplicar os conceitos da automação, foi utilizado o protótipo de

sistema web denominado Projector, que possui seu foco em gerenciamento de projetos. Essa

aplicação servirá de base para o desenvolvimento dos testes de regressão automatizados. Nela

foram introduzidos alguns bugs2 propositalmente para que seja possível visualizar dois casos:

• Caso 1: Onde alguma funcionalidade está operando de forma incorreta ao

esperado;

• Caso 2: Quando não ocorre nenhum problema e a funcionalidade está de

acordo com os requisitos.

Haverá a criação de casos de testes manuais, a fim de validar algumas funções do

Projector e as mesmas rotinas serão testadas, utilizando um sistema de automação, de modo

que se possam identificar pontos positivos e negativos de cada abordagem.

3.4.2 Objetivos

O estudo de caso possui os seguintes objetivos:

• Identificar as diferenças entre testes manuais e automatizados, levantando

suas vantagens e desvantagens;

• Colher as informações dos profissionais que utilizarão o sistema através de

um questionário;

• Verificar no contexto dos testes de regressão automatizados qual caso de

teste apresenta maior vantagem utilizando esse procedimento.

2 Bug é um “[...] defeito no software que, caso mantido, pode provocar falhas no sistema.” (HETZEL, 1987, p.

15).

Page 61: Automação de Testes de Regressão - Selenium

61

3.4.3 Ferramentas utilizadas

Os softwares que aqui estão descritos servem como ferramenta para o estudo e

execução da proposta.

Os casos de teste são documentados com o auxílio do Microsoft Office Word

2010.

A automação dos testes no Projector é concebida com o apoio do Selenium.

A modelagem do sistema Projector já havia sido criada com a utilização da

ferramenta Entreprise Architect, onde é possível visualizar maiores detalhes de sua estrutura

interna.

Para apoio no comparativo entre a proposta de automação e a manual, há a

aplicação de um questionário para alguns profissionais da área de teste, como forma de

levantar a percepção dos envolvidos. O mesmo estrutura-se em duas partes e a figura 13

demonstra de forma meramente ilustrativa as etapas.

Figura 13 - Etapas do questionário

Fonte: Elaborado pelos autores

Pode-se identificar duas partes:

1. Identificação de dados pessoais dos participantes, tais como: idade, nível

de escolaridade, cargo que ocupa na área de teste e há quanto tempo está

nessa área;

2. Levantamento das percepções que os participantes obtiveram após

execução do teste manual;

Esse questionário encontra-se no Apêndice A, no final do trabalho.

Page 62: Automação de Testes de Regressão - Selenium

62

3.4.4 Perfil dos profissionais envolvidos

Para auxiliar no estudo de caso, haverá o apoio de alguns profissionais graduados

em cursos da área de Tecnologia da Informação e que atuam profissionalmente como analistas

de teste, possuindo, portanto, a experiência necessária para a função.

O papel deles é executar os testes de regressão manuais e automatizados criados

para a aplicação Projector, resultando em uma coleta de opiniões a respeito desses cenários.

Essas concepções serão extraídas do questionário, servindo como apoio nas considerações

finais sobre a proposta do trabalho.

3.4.5 Avaliação dos resultados

A avaliação dos resultados obtidos no estudo de caso dar-se-á através do

questionário, onde serão feitas planilhas com dados que servirão de base para uma análise dos

resultados. O questionário será aplicado aos indivíduos envolvidos nas rotinas de teste e suas

percepções e opiniões a respeito da proposta, como também serão utilizadas no resultado

final.

3.5 DELIMITAÇÕES

Esse trabalho apresenta delimitações, que são descritas a seguir.

Profissionais da área: serão utilizados como base apenas profissionais da área de

teste, ou seja, não se aplica a usuários leigos no assunto.

• Não será desenvolvida uma aplicação web. A presente monografia utilizará

uma já existente como estudo de caso;

Page 63: Automação de Testes de Regressão - Selenium

63

• O teste automatizado será exclusivo da aplicação web que será utilizada de

base;

• Toda e qualquer alteração no sistema poderá intervir diretamente nos

testes;

• Não serão apresentados os logs específicos da execução dos testes.

Page 64: Automação de Testes de Regressão - Selenium

64

4 PROJETO DE SOLUÇÃO DO PROTÓTIPO

Nesse capítulo haverá uma breve descrição do sistema web que será utilizado no

estudo de caso, bem como os diagramas principais que o compõe. Com base nessa aplicação

serão executados os casos de teste manuais e automatizados. Ambos estarão descritos nas

próximas seções.

4.1 DEFINIÇÃO DE TÉCNICA E METODOLOGIA

De acordo com Fachin (2001, p. 29), os métodos e as técnicas possuem uma

relação, mas são conceitos distintos em alguns aspectos.

A técnica é um “modo de fazer de forma mais hábil, mais seguro, mais perfeito,

algum tipo de atividade, arte ou ofício” (GALLIANO, 1986, p. 6).

Já o método, conforme Garcia (1998, p. 44), apresenta um procedimento racional

e ordenado, constituído por instrumentos básicos, que implica utilizar a reflexão e a

experimentação, para proceder ao longo do caminho e alcançar os objetivos preestabelecidos

no planejamento da pesquisa.

4.1.1 Unified modeling language (UML)

A UML (Unified Modeling Language), segundo Rezende (1999, p. 201), é “uma

notação ou uma padronização unificada de modelagem (diagramação e desenvolvimento) de

software”. O mesmo autor ainda acrescenta que se trata de uma linguagem para modelagem

não sendo, portanto, uma metodologia de desenvolvimento.

Bell (tradução nossa, 2003) afirma que os diagramas UML mais utilizados são:

diagrama de casos de uso, diagrama de classe, diagrama de sequência, diagrama de estados,

diagrama de atividade, diagrama de componentes e diagrama de implantação.

Page 65: Automação de Testes de Regressão - Selenium

65

• Diagrama de caso de uso - Para Rumbaugh et al. (2000, p.217), esse diagrama é

responsável por “captar o comportamento pretendido do sistema que está sendo

desenvolvido, sem ser necessário especificar como esse comportamento é

implementado”.

• Diagrama de classe - São usados para exibir as classes e interfaces de um sistema, bem

como suas relações. (RUMBAUGH et al. , 2000).

• Diagrama de sequência - De acordo com Eriksson e Penker (2000), eles são usados

para explorar e visualizar a sequência de objetos em interações uns com os outros.

• Diagrama de estado - A ideia é de estudar certos tipos de lógicas que envolvem

transições possíveis entre diferentes estados. (FURLAN, 1998)

• Diagrama de atividade – Nesse caso serão apresentados os fluxos das atividades de

controle do sistema. (RUMBAUGH et al., 2000)

• Diagrama de componentes – Analisam e gerenciam dependências entre componentes

ou entre interfaces de componentes. Podem ser arquivos de código-fonte, bibliotecas

ou programas executáveis. (ERIKSSON; PENKER, 2000)

• Diagrama de implantação – Furlan (1998) explica que esse diagrama tem como

propósito mostrar a organização de hardware e a ligação do software aos dispositivos

físicos.

4.1.2 Iconix

Segundo Guimarães et al., (2007) o ICONIX pode ser definido como um processo

de desenvolvimento de software cuja metodologia utilizada é simples e prática, tendo um

componente de análise e representação de problemas sólido e eficaz.

Para Rosenberg (tradução nossa, 2005, p. 58) dentro do ICONIX tudo tem um

propósito primordial. O mesmo autor ainda explica alguns elementos que compõem o

ICONIX:

• Diagrama de Robustez: Explica as exigências de comportamento, relacionando-as ao

modelo de objeto;

• Diagrama de Sequência: Atribui funções para as classes, mostrando seu

comportamento;

Page 66: Automação de Testes de Regressão - Selenium

66

• Modelo de domínio: Descreve os objetos do mundo real e os relacionamentos;

• Modelo de casos de uso: Define os requisitos de comportamento.

A seguir será ilustrado na figura 14 o processo do ICONIX.

Figura 14 - Visão geral do ICONIX

Fonte: Baseado em Rosenberg (2005, p. 45).

4.1.3 Orientação a Objetos (OO)

A orientação a objetos (OO) pode ser entendida como uma junção de objetos que

integram-se à estrutura de dados e possuem um comportamento. (BLAHA; RUMBAUGH,

2006, p.1).

De acordo com Bezerra (2002, p.6), “O paradigma da orientação a objetos

visualiza um sistema de software como uma coleção de agentes interconectados chamados

objetos. Cada objeto é responsável por realizar tarefas específicas”. O mesmo autor ainda

destaca que é essa interação que executa uma tarefa computacional.

Page 67: Automação de Testes de Regressão - Selenium

67

Para Sommerville (2003), o processo de uma orientação a objetos compreende o

projeto das classes dos objetos e as relações entre elas.

Um projeto que possua esse mecanismo compreende três etapas que juntas

formam um processo de desenvolvimento. (SOMMERVILLE, 2003, p. 221). São elas:

• A análise: compreende a fase de modelagem do sistema OO. Os objetos que serão

identificados possuem relação com as entidades e operações do problema a ser

implementado;

• O projeto: desenvolve um modelo OO para implementar os requisitos levantados. Os

objetos, nesse caso, possuem relação com a solução;

• A programação: codifica o projeto com o apoio de uma linguagem de programação

OO.

4.2 DESCRIÇÃO DO PROTÓTIPO UTILIZADO NO ESTUDO DE CASO

Para o estudo de caso, será utilizado um protótipo de uma aplicação web que foi

desenvolvida por um grupo de acadêmicos do curso de graduação em Sistemas de

Informação, cuja modelagem foi construída por Luiz Henrique Sant’ana e Rodrigo Veleda e a

programação do sistema por Rodrigo Susin de Oliveira, Giovani Brunel Paes e José Fernando

Meyer. O protótipo foi construído para atender o trabalho final da disciplina de Engenharia de

Software III.

O sistema consiste numa aplicação para gestão de projetos, onde são possíveis:

• Cadastro, edição e exclusão de um projeto;

• Apontamento de horas gastas em cada projeto;

• Cadastro de usuários do sistema;

• Cadastro, edição e exclusão de uma atividade.

Page 68: Automação de Testes de Regressão - Selenium

68

4.2.1 Atores

O sistema possui cinco atores, conforme ilustra a figura 15.

Figura 15 - Diagrama de Atores

Fonte: Elaborado pelos autores do sistema

No sistema que será utilizado, existem cinco atores, são eles:

• Usuário: é um ator padrão que manipula o sistema. Possui a permissão de

logar no sistema e atualizar o andamento das atividades de um projeto;

• Gerente: possui privilégio do usuário, pois herda suas funções. Possui

permissão para cadastrar projetos, cronograma, marcos, status e

atividades;

• Administrador (Admin): usuário root da aplicação que possui todos os

privilégios do gerente e do usuário. Possui como responsabilidade os

cadastros de perfil, usuário e cliente;

• Cliente: possui um login no sistema para poder acompanhar o andamento

das atividades;

• Sistema: possui o conjunto das funcionalidades do próprio.

Page 69: Automação de Testes de Regressão - Selenium

69

4.2.2 Requisitos

Segundo Sommerville (2003, p. 82), “os requisitos do usuário devem ser escritos

para gerentes do cliente e dos fornecedores, que não tenham um conhecimento técnico

detalhado do sistema”.

As próximas seções especificam os dois tipos de requisitos do sistema: os

funcionais e os não funcionais.

4.2.2.1 Requisitos Funcionais

Os requisitos funcionais, segundo Sommerville (2003), contêm as declarações de

serviço que o sistema deve fornecer, o comportamento que o mesmo deve ter em

determinadas situações e como deve reagir a entrada de dados específicos.

A figura 16 ilustra os requisitos funcionais do sistema.

Page 70: Automação de Testes de Regressão - Selenium

70

Figura 16 - Requisitos Funcionais

Fonte: Elaborado pelos autores do sistema

Abaixo serão apresentados os requisitos funcionais do sistema:

• RF001 - O sistema deve permitir o cadastro de projetos;

• RF002 - O sistema deve permitir o cadastro de atividades relacionadas a

um projeto;

Page 71: Automação de Testes de Regressão - Selenium

71

• RF003 - O sistema deve permitir o cadastro de marcos relacionados a um

projeto;

• RF004 - O sistema deve permitir o registro diário da realização das

atividades;

• RF005 - O sistema deve emitir relatórios de acompanhamento dos

projetos;

• RF006 - O sistema deve permitir o cadastro de usuários;

• RF007 - O sistema deve permitir o cadastro de clientes;

• RF008 - O sistema deve restringir o acesso através de um login e senha;

• RF009 - O sistema deve ter um usuário master cadastrado por padrão;

• RF010 - O sistema deve permitir o cadastro de cronogramas;

• RF011 - O sistema deve permitir o cadastro de perfis de usuários;

• RF012 - O sistema deve permitir o cadastro de status.

4.2.2.2 Requisitos Não Funcionais

De acordo com Sommerville (2003, p.80), os requisitos não funcionais “são

restrições sobre os serviços ou as funções oferecidas pelo sistema. Eles incluem restrições de

timing, restrições sobre o processo de desenvolvimento e padrões”.

A figura 17 ilustra os requisitos não funcionais do sistema.

Page 72: Automação de Testes de Regressão - Selenium

72

Figura 17 - Requisitos não funcionais

Fonte: Elaborado pelos autores do sistema

Abaixo serão apresentados os requisitos não funcionais do sistema:

• RNF001 - Sistema deve ter senhas criptografadas;

• RNF002 - Sistema deve possuir tempo de resposta inferior a 5 segundos -

Para Windows e Linux;

• RNF003 - Sistema deve ser web;

• RNF004 - Sistema deve ser compatível com o browser Google Chrome 6

ou superior;

• RNF005 - Sistema deve ser compatível com o browser Microsoft Internet

Explorer 8 ou superior;

• RNF006 - Sistema deve ser compatível com o browser Mozilla Firefox 4

ou superior.

4.2.3 Protótipos de Interface

A figura 18 demonstra o protótipo da tela de cadastro dos projetos.

Page 73: Automação de Testes de Regressão - Selenium

73

Figura 18 - Tela de cadastro dos projetos

Fonte: Elaborado pelos autores do sistema

Na figura 19, é possível observar o protótipo da tela de cadastro das atividades

que o projeto possui.

Page 74: Automação de Testes de Regressão - Selenium

74

Figura 19 - Tela de cadastro das atividades

Fonte: Elaborado pelos autores do sistema

4.2.4 Casos de Uso

A figura 20 ilustra a modelagem dos casos de uso do sistema.

Page 75: Automação de Testes de Regressão - Selenium

75

Figura 20 - Casos de Uso

Fonte: Elaborado pelos autores do sistema

Abaixo, a figura 21 ilustra o fluxo principal e os fluxos alternativos para o caso de

uso cadastrar projeto:

Page 76: Automação de Testes de Regressão - Selenium

76

Figura 21 - Cadastrar Projeto act US001 - Cadastrar projeto_Activ ityGraph

Start

Sistema mostra tela: TEL025 - Login - Gerente

Gerente clica em Gerenciar Projetos

Alternate1

Gerente clica em Adicionar

Sistema mostra formulário: TEL001 - Cadastrar projetos -

Adicionar

Gerente preenche dados

Sistema mostra tela de cadastrado com sucesso:

TEL036 - Salv o com sucesso

FlowEnd1

Gerente seleciona projeto

Gerente clica em Editar selecionado

Sistema mostra formulário: TEL002 -

Cadastrar projeto - Editar

Gerente edita dados

Sistema mostra tela de dados salv os com

sucesso: TEL036 - Salv o com sucesso

FlowEnd2

Gerente seleciona linha

Sistema mostra tela de confirmar exclusão: TEL027 - Confirmar

Exclusão

Gerente confirma

Sistema mostra tela de excluido com sucesso: TEL028 - Excluir com

sucesso

FlowEnd3

Sistema mostra tela: TEL003 - Cadastrar projeto

- Listar

End

[Adicionar] [Editar] [Excluir]

Fonte: Elaborado pelos autores do sistema

Page 77: Automação de Testes de Regressão - Selenium

77

A figura 22 ilustra o fluxo principal e os fluxos alternativos do caso de uso

cadastrar atividades.

Figura 22 - Cadastrar Atividade act US003 - Cadastrar ativ idades_Activ ityGraph

Start

Sistema mostra tela: TEL025 - Login - Gerente

Gerente clica em Gerenciar ativ idades

Alternate1

Gerente seleciona linha

Gerente clica em Excluir selecionado

Sistema mostra tela de confirmar exclusão: TEL027 - Confirmar

Exclusão

Gerente confirma exclusão

Sistema mostra tela de excluido com sucesso: TEL028 - Excluir com

sucesso

FlowEnd1

Gerente seleciona linha

Gerente clica em Editar selecionado

Sistema mostra formulário: TEL005 -

Cadastrar Ativ idades - Editar

Gerente edita dados

Sistema mostra tela de salv o com sucesso: TEL036 - Salv o com

sucesso

FlowEnd2

Gerente clica em Adicionar

Sistema mostra formulário: TEL004 -

Cadastrar ativ idades - Adicionar

Gerente edita dados

Sistema mostra tela de salv o com sucesso: TEL036 - Salvo com

sucesso

FlowEnd3

Sistema lista as ativ idades de um

cronograma selecionado: TEL006 - Cadastrar ativ idades - Listar

End

[Excluir] [Editar] [Adicionar]

Fonte: Elaborado pelos autores do sistema

Page 78: Automação de Testes de Regressão - Selenium

78

4.2.5 Modelo de Domínio

A figura 23 ilustra o diagrama de domínio do sistema.

Figura 23 - Diagrama de Domínio

Fonte: Elaborado pelos autores do sistema

4.2.6 Diagramas de Robustez

A figura 24 apresenta o Diagrama de Robustez do software.

Page 79: Automação de Testes de Regressão - Selenium

79

Fonte: Elaborado pelos autores do sistema

4.2.7 Diagramas de Sequência

A figura 25 demonstra o diagrama de sequência de login na aplicação.

Figura 24 - Diagrama de Robustez

Page 80: Automação de Testes de Regressão - Selenium

80

Fonte: Elaborado pelos autores do sistema

Figura 25 - Diagrama de Sequência - Login

Page 81: Automação de Testes de Regressão - Selenium

81

A imagem 26 apresenta o diagrama de sequência da ação de cadastrar perfis na

aplicação.

Figura 26 - Cadastrar Perfil

Fonte: Elaborado pelos autores do sistema

A figura 27 apresenta o diagrama de sequência da ação de cadastrar usuário na

aplicação.

Page 82: Automação de Testes de Regressão - Selenium

82

Figura 27 - Cadastrar Usuário

Fonte: Elaborado pelos autores do sistema

A figura 28 apresenta o diagrama de sequência da ação de cadastrar clientes na

aplicação.

Page 83: Automação de Testes de Regressão - Selenium

83

Figura 28 - Cadastrar clientes

Fonte: Elaborado pelos autores do sistema

A figura 29 apresenta o diagrama de sequência da emissão de relatórios do

Projector.

Page 84: Automação de Testes de Regressão - Selenium

84

Figura 29 - Emissão de relatórios

Fonte: Elaborado pelos autores do sistema

A figura 30 ilustra o diagrama de sequência para cadastro de marco dos projetos.

Page 85: Automação de Testes de Regressão - Selenium

85

Figura 30 - Cadastro de marco

Fonte: Elaborado pelos autores do sistema

A figura 31 demonstra o diagrama de sequência para cadastro de projetos.

Page 86: Automação de Testes de Regressão - Selenium

86

Figura 31 - Cadastrar projeto

Fonte: Elaborado pelos autores do sistema

A figura 32 apresenta o diagrama de sequência do cadastro de um cronograma.

Page 87: Automação de Testes de Regressão - Selenium

87

Figura 32 - Cadastro de cronograma

Fonte: Elaborado pelos autores do sistema

A figura 33 apresenta o diagrama de sequência do cadastro das atividades para um

projeto.

Page 88: Automação de Testes de Regressão - Selenium

88

Figura 33 - Cadastrar atividade

Fonte: Elaborado pelos autores do sistema

A figura 34 ilustra o diagrama de sequência do cadastro de status para um projeto.

Page 89: Automação de Testes de Regressão - Selenium

89

Figura 34 - Cadastro de status

Fonte: Elaborado pelos autores do sistema

A figura 35 demonstra o diagrama de sequência da atualização de horas de uma

atividade.

Page 90: Automação de Testes de Regressão - Selenium

90

Figura 35 - Registro de hora da atividade

Fonte: Elaborado pelos autores do sistema

A figura 36 apresenta o diagrama de sequência para a ação de consultar o

andamento de um projeto.

Page 91: Automação de Testes de Regressão - Selenium

91

Figura 36 - Consultar andamento do projeto

Fonte: Elaborado pelos autores do sistema

4.2.8 Diagrama de Classe

A figura 37 mostra o diagrama de classe do sistema.

Page 92: Automação de Testes de Regressão - Selenium

92

Figura 37 - Diagrama de Classes

Fonte: Elaborado pelos autores do sistema

4.3 RESUMO DO CAPÍTULO

Nesse capítulo foi apresentada a diferenciação entre técnica e metodologia, os

principais conceitos sobre a UML e seus diagramas mais comuns, uma visão geral do Iconix

citando seus elementos e um embasamento teórico sobre orientação a objetos.

Além desses temas, também foi exposto uma explicação sobre o protótipo

utilizado no estudo de caso e sua modelagem utilizando a UML.

A seção seguinte aborda os detalhes sobre o desenvolvimento da solução proposta

de automatização para os testes do protótipo estudado.

Page 93: Automação de Testes de Regressão - Selenium

93

5 AUTOMATIZAÇÃO DE TESTES DE SOFTWARE

Nesse capítulo são apresentados os detalhes sobre o desenvolvimento da

automação dos testes do protótipo, contendo uma descrição sobre o sistema envolvido no

estudo de caso.

Nas seções que seguem é descrito o ferramental utilizado no protótipo, bem como

a explicação de seu funcionamento. Posteriormente, serão mostrados os casos de testes

manuais criados para o protótipo incluindo o diagrama dos mesmos.

Após o levantamento das características anteriores, haverá uma explanação sobre

a automação de testes realizada nesse estudo de caso.

Por fim, será apresentada a avaliação dos resultados obtidos.

5.1 SISTEMA DESENVOLVIDO PARA O ESTUDO DE CASO

O protótipo utilizado para o estudo de caso é um sistema web e foi concebido para

gerenciar projetos. Nele são possíveis as ações referentes ao cadastro de projetos, atividades e

cronograma havendo uma associação entre eles.

O sistema possui outras ações como o cadastro de usuários e seus perfis, a

emissão de relatórios gerenciais, o cadastro de marco do projeto e o status.

5.1.1 Tecnologias utilizadas

Para o desenvolvimento do protótipo foi utilizada a linguagem de programação

Java, a implementação web foi concebida, utilizando-se a tecnologia Java Server Faces (JSF),

o banco de dados utilizado foi o MySQL, um framework de persistência chamado Hibernate e

o servidor Apache Tomcat.

Page 94: Automação de Testes de Regressão - Selenium

94

A seguir, estão descritas as ferramentas utilizadas durante o desenvolvimento.

• Enterprise Architect – Ferramenta de desenvolvimento em UML;

• Eclipse Indigo - Ferramenta utilizada na edição do código fonte da

linguagem de programação (Java, JSF);

• Hibernate – Framework para persistência dos dados;

• Java – Linguagem de programação;

• JSF – Framework para implementação web, baseado em Java;

• MySQL – Banco de dados do protótipo;

• Servidor Tomcat – Servidor utilizado para conexão do sistema via Web.

A figura 38 mostra um desenho esquemático da arquitetura do protótipo Projector.

Figura 38 - Arquitetura do Projector

Fonte: Elaborado pelos autores do sistema

Nas subseções que seguem, estarão descritas as ferramentas utilizadas no

Projector, de maneira mais detalhada.

Page 95: Automação de Testes de Regressão - Selenium

95

5.1.1.1 Enterprise Architect

De acordo com o Sparx System (2013), a ferramenta Enterprise Architect (EA)

possui os recursos da linguagem UML para criação de modelos na arquitetura de sistemas.

O EA disponibiliza, dentre seus diversos recursos, a modelagem para o ciclo de

vida de softwares e Engenharia de Sistemas, além de gerar relatórios e documentos detalhados

dos projetos.

Com este software foi possível realizar a modelagem do protótipo utilizado para o

estudo de caso e com base nesses modelos a solução foi codificada.

5.1.1.2 Eclipse

O Eclipse é uma ferramenta IDE (Integrated Development Environment), ou seja,

um ambiente integrado para desenvolvimento de software.

5.1.1.3 Hibernate

Segundo o site oficial do Hibernate (2013), o mesmo trata-se de um framework

que permite o desenvolvimento de classes persistentes do sistema.

Ele possui tecnologia Java e efetua o mapeamento de objetos relacionais em

bancos que utilizam linguagem HQL e SQL.

Page 96: Automação de Testes de Regressão - Selenium

96

5.1.1.4 Java

O Java é uma tecnologia criada pela Sun e, atualmente, pertencente a Oracle.

Segundo o site oficial da Oracle (2013), o Java “é a base de praticamente todos os tipos de

aplicativos em rede, e é o padrão global para desenvolvimento e fornecimento de aplicativos

para celular, jogos, conteúdo on-line e software corporativo”.

5.1.1.5 Java Server Faces

O framework utilizado para o desenvolvimento web foi o JSF (Java Server

Faces), pois é incorporado ao J2EE (Java 2 Enterprise Edition), onde é possível o

desenvolvimento na linguagem Java.

5.1.1.6 MySQL

O sistema para gerenciamento de banco de dados utilizado foi o MySQL

Enterprise Edition. Ele possui código aberto e fornece todo apoio à linguagem SQL e modelo

Entidade-Relacionamento.

Segundo o site oficial (2013), esse produto inclui o mais completo conjunto de

funcionalidades avançadas, ferramentas de gestão e apoio técnico para gerenciamento de

banco de dados.

Page 97: Automação de Testes de Regressão - Selenium

97

5.1.1.7 Apache Tomcat

O Tomcat, de acordo com seu site oficial (2013), é uma ferramenta de código

aberto para servir de container às tecnologias Java Servlet e Java Server Pages.

No caso do protótipo Projector, o Tomcat foi o servidor web HTTP do mesmo.

5.1.2 Descrição do sistema

O Projector é um protótipo para gerenciamento de projetos. Suas principais

funcionalidades são:

• Cadastro de Projeto – o usuário pode cadastrar, editar ou excluir um

projeto. Os campos disponíveis para o cadastro são: nome, o gerente

responsável, a data de entrega, a data prevista para conclusão, o cliente e o

status conforme demonstra a figura 39.

Figura 39 - Cadastrar projeto no Projector

Fonte: Elaborado pelos autores do sistema Projector

• Na imagem 40 é possível visualizar a tela de listagem dos projetos, onde são encontradas informações do nome do projeto, o gerente, a data de entrega e data prevista, o cliente e o status em que o mesmo se encontra.

Page 98: Automação de Testes de Regressão - Selenium

98

Figura 40 - Listagem de projetos no Projector

Fonte: Elaborado pelos autores do sistema Projector

• Cadastro de Cronograma – Nessa etapa é possível selecionar um projeto e

adicionar um comentário. Com isso, o cronograma fica associado ao

projeto.

A figura 41 apresenta a tela desse processo.

Figura 41 - Cadastro de cronograma no Projector

Fonte: Elaborado pelos autores do sistema Projector

Page 99: Automação de Testes de Regressão - Selenium

99

• Cadastro de Atividade – Cada projeto pode possuir uma ou mais atividades

associadas. Os campos do cadastro são: o cronograma, o título, uma

descrição, a data inicial e final e o responsável.

A imagem 42 mostra a tela desse funcionamento.

Figura 42 - Cadastro de atividade no Projector

Fonte: Elaborado pelos autores do sistema Projector

• Na figura 43 é possível visualizar a tela de listagem das atividades, podendo editar e excluir as mesmas. Na listagem é apresentado o título da atividade, uma descrição, o responsável, a data inicial e final, o progresso atual, a quantidade de horas gastas e o status da mesma.

Figura 43 - Listagem das atividades no Projector

Page 100: Automação de Testes de Regressão - Selenium

100

Fonte: Elaborado pelos autores do sistema Projector

As informações a respeito do responsável pelas atividades e do cliente que cada

projeto possui são inseridas na base de dados, não havendo, portanto, uma interface para o

cadastro das mesmas.

5.2 CASOS DE TESTE

Os casos de teste manuais foram criados com base nas principais funcionalidades

do Projector. Foram analisados casos de uso, diagrama de sequência e as regras de negócio do

sistema e a partir dos mesmos criaram-se os testes de regressão.

Nas subseções que seguem, serão apresentados: o método utilizado para a criação

dos casos de teste, o ferramental escolhido para apoiar e uma modelagem dos casos de teste.

5.2.1 Método

Foi feito um estudo do sistema com base na modelagem do mesmo. A partir disto,

elaborou-se um teste de regressão para cada uma das seguintes funcionalidades:

• Cadastrar, editar e excluir projeto;

• Cadastrar um projeto selecionando um cliente;

• Cadastrar cronograma;

• Cadastrar atividade preenchendo apenas campos obrigatórios;

• Cadastrar atividade preenchendo, além dos campos obrigatórios, o

cronograma;

• Cadastrar atividade com todos os campos;

• Efetuar login com um usuário válido para o sistema;

Page 101: Automação de Testes de Regressão - Selenium

101

A figura 44 demonstra um fluxograma com as etapas envolvidas na elaboração

dos casos de teste de regressão.

Figura 44 - Fluxograma da elaboração do teste

Fonte: Elaborado pelos autores

Esses testes de regressão foram feitos a partir da interface do protótipo e

documentados. O documento contém uma breve descrição do teste, os casos de teste que

serão executados para cada funcionalidade e o resultado esperado. Esse arquivo serve de

roteiro para a execução do teste manual e será utilizado como regra para a automação.

Page 102: Automação de Testes de Regressão - Selenium

102

5.2.2 Ferramentas utilizadas

O Enterprise Architect serviu como apoio para a visualização da modelagem do

protótipo Projector e a partir dela foi possível elaborar as rotinas para teste.

Na criação do roteiro para o teste manual utilizou-se a ferramenta Microsoft

Office Word versão 2010, que de acordo com seu site oficial (2013), trata-se de “um

processador de texto que apresenta um conjunto de recursos”. A partir dele, foi gerado um

documento de texto contendo as informações pertinentes à rotina de teste.

5.2.3 Roteiro de teste

Para execução do teste manual elaborou-se um roteiro contendo a quantidade de

dez casos de teste, conforme apresentados nas seções seguintes.

5.2.3.1 Teste Salvar Projeto

O Teste de salvar projeto consiste em efetuar login no sistema, cadastrar um novo

projeto preenchendo apenas os campos obrigatórios e verificar se o projeto cadastrado é

listado na grid de projetos cadastrados. Seguem os passos para sua execução:

1) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

2) Logar com o usuário administrador do sistema, (Login: root e senha:

root);

3) Acessar o menu “Gerenciar Projetos”;

4) Clicar no item menu “Cadastrar”;

5) Preencher os campos obrigatórios “Nome” e “Data Prevista”;

Page 103: Automação de Testes de Regressão - Selenium

103

6) Clicar no botão salvar;

7) Clicar no botão continuar na tela de feedback do cadastro;

8) Verificar projeto exibido na grid;

9) Apagar dados na base de teste.

5.2.3.2 Teste salvar projeto com cliente

O Teste para salvar projeto inserindo um cliente consiste em efetuar login no

sistema, cadastrar um novo projeto preenchendo os campos obrigatórios e selecionando um

cliente. Após verificar se o projeto cadastrado é listado na grid de projetos cadastrados:

1) Inserir um registro na tabela “cliente”;

2) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

3) Logar com o usuário administrador do sistema, (Login: root e senha:

root);

4) Acessar o menu “Gerenciar Projetos”;

5) Clicar no item menu “Cadastrar”;

6) Preencher os campos obrigatórios “Nome” e “Data Prevista”;

7) Clicar no botão salvar;

8) Clicar no botão continuar na tela de feedback do cadastro;

9) Verificar projeto exibido na grid;

10) Apagar dados na base de teste.

5.2.3.3 Teste editar projeto

O teste de editar um projeto consiste em inserir um registro na tabela “projeto”,

efetuar login no sistema, editar projeto cadastrado na base de dados através da interface do

Page 104: Automação de Testes de Regressão - Selenium

104

sistema, alterar apenas os campos obrigatórios e verificar se o projeto editado é listado na grid

corretamente.

1) Inserir registro na base de dados na tabela “projeto”;

2) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

3) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

4) Acessar o menu “Gerenciar Projetos”;

5) Clicar no item menu “Listar”;

6) Selecionar o projeto que foi inserido na base de dados na grid;

7) Clicar no botão “Editar Selecionado”;

8) Alterar e preencher os campos obrigatórios “Nome” e “Data Prevista”;

9) Clicar no botão salvar;

10) Clicar no botão continuar na tela de feedback do cadastro;

11) Verificar se o projeto editado é exibido na grid;

12) Apagar dados na base de teste.

5.2.3.4 Teste excluir projeto

O teste de exclusão de um projeto consiste em inserir um registro na tabela

“projeto”, efetuar login no sistema, excluir projeto cadastrado na base de dados através da

interface do sistema e verificar se o projeto excluído não é listado na grid.

1) Inserir registro na base de dados na tabela “projeto”;

2) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

3) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

4) Acessar o menu “Gerenciar Projetos”;

5) Clicar no item menu “Listar”;

6) Selecionar o projeto que foi inserido na base de dados na grid;

Page 105: Automação de Testes de Regressão - Selenium

105

7) Clicar no botão “Excluir Selecionado”;

8) Clicar no botão “Sim” da tela de confirmação de exclusão de projetos;

9) Visualizar mensagem de exclusão do projeto;

10) Verificar se o projeto excluído não está sendo exibido na grid.

5.2.3.5 Teste cadastrar atividade

O teste de cadastrar atividade consiste em efetuar login no sistema, cadastrar uma

nova atividade preenchendo apenas os campos obrigatórios e verificar se a atividade

cadastrada é listada na grid de atividades cadastradas.

1) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

2) Logar com o usuário administrador do sistema, (Login: root e senha: root);

3) Acessar o menu “Gerenciar Atividades”;

4) Clicar no item menu “Cadastrar”;

5) Preencher os campos obrigatórios “Título”, “Descrição”, “Data inicial” e

“Data Final”;

6) Clicar no botão salvar;

7) Clicar no botão continuar na tela de feedback do cadastro;

8) Verificar se a atividade está sendo listada na grid de atividades;

9) Apagar dados na base de teste.

5.2.3.6 Teste cadastrar atividade com cronograma

O teste para cadastro de uma atividade inserindo o cronograma consiste em

efetuar login no sistema, cadastrar uma nova atividade preenchendo os campos obrigatórios e

Page 106: Automação de Testes de Regressão - Selenium

106

selecionando um cronograma. Após verificar se a atividade cadastrada é listada na grid de

atividades cadastradas:

1) Inserir registro na base de dados na tabela “cronograma”;

2) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

3) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

4) Acessar o menu “Gerenciar Atividades”;

5) Clicar no item menu “Cadastrar”;

6) Selecionar cronograma inserido na base de dados;

7) Preencher os campos obrigatórios “Título”, “Descrição”, “Data inicial” e

“Data Final”;

8) Clicar no botão salvar;

9) Clicar no botão continuar na tela de feedback do cadastro;

10) Verificar se a atividade está sendo listada na grid de atividades;

11) Apagar dados na base de teste.

5.2.3.7 Teste cadastrar atividade completo

O teste de cadastro de atividade preenchendo todos os campos consiste em efetuar

login no sistema, cadastrar uma nova atividade preenchendo os campos obrigatórios,

selecionando um cronograma e selecionando um responsável. Em seguida, verificar se a

atividade cadastrada é listada na grid de atividades cadastradas.

1) Inserir registro na base de dados na tabela “cronograma”;

2) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

3) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

4) Acessar o menu “Gerenciar Atividades”;

5) Clicar no item menu “Cadastrar”;

6) Selecionar cronograma inserido na base de dados;

Page 107: Automação de Testes de Regressão - Selenium

107

7) Preencher os campos obrigatórios “Título”, “Descrição”, “Data inicial” e

“Data Final”;

8) Selecionar um responsável;

9) Clicar no botão salvar;

10) Clicar no botão continuar na tela de feedback do cadastro;

11) Verificar se a atividade está sendo listada na grid de atividades;

12) Apagar dados na base de teste.

5.2.3.8 Teste de efetuar login com usuário válido

O teste para efetuar login com um usuário válido baseia-se em entrar no sistema

com o usuário administrador do mesmo, através dos seguintes passos:

1) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

2) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

3) Verificar se o login foi válido.

5.2.3.9 Teste de efetuar login com usuário inválido

O teste para efetuar login com um usuário inválido consiste em tentar entrar no

sistema inserindo dados incorretos no login, através dos seguintes passos:

1) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

2) Logar com um usuário incorreto, (Login: usuario e senha: usuario);

3) Verificar se apresenta mensagem de login inválido.

Page 108: Automação de Testes de Regressão - Selenium

108

5.2.3.10 Teste de salvar cronograma

O teste para salvar um cronograma consiste em efetuar login no sistema, cadastrar

um novo cronograma preenchendo apenas os campos obrigatórios e verificar se a tela

principal do sistema é exibida. Seguem os passos para sua execução:

1) Acessar aplicação através do navegador Chrome -

http://localhost:8080/Projector/login.jsf;

2) Logar com o usuário administrador do sistema , (Login: root e senha:

root);

3) Acessar o menu “Gerenciar Cronograma”;

4) Clicar no item menu “Cadastrar”;

5) Preencher os campo obrigatório “Comentários”;

6) Clicar no botão salvar;

7) Clicar no botão continuar na tela de feedback do cadastro;

8) Verificar se a tela principal do sistema é exibida;

9) Apagar dados na base de teste.

5.3 AUTOMATIZAÇÃO DE TESTES

O Selenium, de acordo com seu site oficial (2013), “é um conjunto de ferramentas

para automatizar navegadores em várias plataformas”. É um framework gratuito e suporta

diversas linguagens de programação, dentre elas: Java, PHP, Phyton, Ruby, e outras.

O Selenium versão 2.0 ou Selenium WebDriver é uma junção da versão 1.0 com a

API3 WebDriver.

A versão do Selenium 1.0 é conhecida como projeto Selenium Remote Control

(RC). Nele é possível escrever testes automatizados de interface de sistemas web em diversas

linguagens de programação, em sites HTTP que utilizam navegadores que possuem Javascript

3 A API (Application Programming Interface), é uma interface com conjunto de padrões de programação que

permite a construção de aplicativos e a sua utilização. (http://www.tecmundo.com.br/programacao/1807-o-que-e-api-.htm)

Page 109: Automação de Testes de Regressão - Selenium

109

mainstream. Abaixo, na figura 45, é apresentada a estrutura de funcionamento dessa

ferramenta.

Figura 45 - Funcionamento Selenium RC

Fonte: Site Oficial do Selenium (2013)

Como mostrou a figura 45, o Selenium versão 1.0 é dividido em duas partes

principais:

1. Um servidor que inicia automaticamente e atua como um proxy HTTP para

solicitações da Web a partir deles;

2. Bibliotecas para utilização em diversas linguagens para diferentes tipos de

navegadores.

Page 110: Automação de Testes de Regressão - Selenium

110

O Selenium versão 2.0 surgiu com o objetivo de incorporar junto ao navegador

suporte à automatização de teste, onde não é preciso haver um servidor que atue como proxy

HTTP.

Foi adicionada uma biblioteca WebDriver junto ao Selenium 1.0 para que o

navegador ficasse responsável em dar suporte à automatização de teste. Com essa junção

surgiu o projeto Selenium versão 2.0 ou Selenium WebDriver.

De acordo com o site oficial (2013), “dirigir um navegador de forma nativa como

um usuário local ou em uma máquina remota usando o Selenium servidor marca um salto em

frente em termos de automação de browsers”.

“[...] A integração da API WebDriver é projetada para fornecer uma interface de programação simples, mais concisa, além de abordar algumas limitações na API do Selenium-RC. Selenium-WebDriver foi desenvolvido para melhor e apoiar páginas web dinâmicas, onde os elementos de uma página podem ser alteradas sem a própria página que está sendo recarregada. O objetivo do WebDriver é fornecer uma API orientada a objeto bem projetada que fornece suporte melhorado para os modernos problemas avançados de testes web-app”. (Site Oficial, tradução nossa, 2013).

O Selenium-WebDriver faz chamadas diretas para o navegador usando o suporte

nativo de cada um para automação. Na linguagem de programação Java, utilizam-se classes

de aplicação específicas para cada navegador ou plataforma, sendo necessário o uso da

interface WebDriver. Segue a descrição de algumas dessas classes:

• AndroidDriver – Classe específica para a plataforma móvel Android;

• ChromeDriver – Classe para o navegador Google Chrome;

• EventFiringWebDriver – Wrapper que suporta registrar uma

WebDriverEventListener;

• FirefoxDriver - Utilizado para o navegador Mozilla Firefox;

• HtmlUnitDriver - Implementação do WebDriver baseado no framework

HtmlUnit para aplicações web de teste;

• InternetExplorerDriver - Utilizado para o navegador Internet Explorer;

• IPhoneDriver – Classe para a plataforma móvel IOS da Apple;

• PhantomJSDriver - Fornece uma maneira de acessar PhantomJS para

executar os testes através da criação de uma instância PhantomJSDriver;

• RemoteWebDriver – Implementação do WebDriver Remoto;

• SafariDriver - Utilizado para o navegador Safari.

Page 111: Automação de Testes de Regressão - Selenium

111

A figura 46 representa um exemplo de codificação do WebDriver na linguagem

Java.

Figura 46 - Exemplo WebDriver em Java

Fonte: Site oficial do Selenium, 2013

Conforme o exemplo acima, primeiro é necessário criar a instância do WebDriver

do navegador. Nesse caso, utilizou-se o Mozilla Firefox, com ela criada é possível acessar

uma página web através do método “get” do controlador. Após o acesso da página é possível

encontrar elementos da página utilizando o método “findElement” do controlador em

Page 112: Automação de Testes de Regressão - Selenium

112

conjunto com a interface “By”. Encontrado o elemento, é possível enviar textos através do

método sendKeys da interface WebElement. Com a interface WebDriverWait é possível

estipular um tempo para aguardar a condição desejada. É possível exibir título da página a

partir do controlador e, por fim, fechar o browser através do método “quit”.

5.3.1 Ferramentas utilizadas

As ferramentas utilizadas na automatização dos testes foram as mesmas citadas na

seção 5.1.1. Além dessas, foi utilizado um plugin para o navegador Mozilla Firefox, o

Selenium IDE, outro plugin chamado FireBug, onde é possível inspecionar componentes web

com a intenção de descobrir a estrutura do componente para conseguir efetuar a manipulação

com o Selenium, utilizou-se o WebDriver do Google Chrome e o JUnit como framework para

executar a automação.

5.3.2 Automação dos casos de teste

Para elaborar e desenvolver os casos de testes automatizados foi necessário

efetuar estudos e análises nos casos de uso do sistema Projector e no framework Selenium.

Após essas análises, foi possível implementar uma base do projeto de automação,

optando-se por utilizar frameworks e APIs gratuitas como forma de suprir as necessidades que

surgiram com a integração juntamente ao Projector. Os frameworks escolhidos foram:

• JPA;

• Hibernate;

• JUnit;

• WebDriver.

Page 113: Automação de Testes de Regressão - Selenium

113

O projeto base da automação tem como objetivo auditar os logs de teste,

estabelecer conexões com o banco de dados, gerenciar o EntityManager e executar sua rotina

de teste através do framework JUnit.

Na figura 47, é apresentada a estrutura hierárquica do projeto de automação

denominado “Automacao”; nela é exibida a relação com o protótipo Projector.

Figura 47 - Pacote de entidades

Fonte: Elaborado pelos autores, 2013.

Conforme exibido na figura acima, o pacote “br.com.projector.entities” utiliza o

framework Hibernate que é responsável por efetuar o mapeamento dos atributos para o

modelo relacional da aplicação Projector. Sendo assim, é possível com o projeto da

automação criar, manipular e excluir objetos que representam as entidades do Projector.

Na figura 48, é exibida a estrutura base do projeto de automação que gerencia e

configura uma seção de teste. Nessa figura, pode-se observar que o pacote “br.com.tcc.core”

contém as classes responsáveis em criar toda a infraestrutura da automação. A classe

“TestRunner.java” é a principal desse pacote, pois através dela é possível executar o caso de

teste sobrescrevendo o método “testRunner” da super classe “Runner” que pertence ao

framework JUnit. Essa classe também é responsável por configurar o ambiente de teste,

executar os testes escolhidos pelo usuário, imprimir o log, dentre outras funções.

Page 114: Automação de Testes de Regressão - Selenium

114

Figura 48 - Pacote core

Fonte: Elaborado pelos autores, 2013.

Com objetivo de facilitar algumas configurações e tornar possível a execução de

mais de um teste, foram criados dois arquivos que auxiliam nesse processo de configuração

dos mesmos.

A partir do arquivo “testeframework.properties” o usuário consegue escolher qual

navegador web deseja executar a automação, o usuário e senha que efetuará o login no

sistema e definição da página principal que é aberta pela automação no browser. O segundo

arquivo chamado “testList.txt” contém o caminho absoluto de cada classe de teste. Com ele é

possível inserir o caminho completo dos testes desenvolvidos, para serem executados na

ordem em que foram escritos no mesmo.

A figura 49 exibe essa estrutura de pacote que contém esses dois arquivos de

configuração.

Page 115: Automação de Testes de Regressão - Selenium

115

Figura 49 - Arquivos de configuração

Fonte: Elaborado pelos autores, 2013.

Após essa base criada para automação, foi necessário apenas implementar classes

que contém a rotina de testes.

A figura 50 exibe o pacote “br.com.tcc.testcase” que contém rotinas de testes.

Page 116: Automação de Testes de Regressão - Selenium

116

Figura 50 - Pacote testcase

Fonte: Elaborado pelos autores, 2013.

Para criar uma rotina de teste que será gerenciada pelo projeto base da automação

faz-se necessário seguir a seguinte estrutura:

• A classe de teste deve estender a classe “BaseCasoDeTeste”;

• Implementar os métodos “configure”, “execute” e “cleanup”.

A classe “BaseCasoDeTeste” possui os métodos abstratos “configure”, “execute”

e “cleanup”. Ela é abstrata e utilizada pela classe “TestRunner”. Esta, por sua vez, é a

principal da automação.

Toda classe de teste que herda a classe abstrata é encarregada em implementar

esse três métodos, os quais devem ser desenvolvidos com os seguintes conceitos:

• Método configure: Nesse método deve-se efetuar toda a configuração do

ambiente para o caso de teste, como, por exemplo, popular uma entidade e

Page 117: Automação de Testes de Regressão - Selenium

117

persisti-la na base de dados, a partir disto é possível manipular esse objeto

na execução de um caso de teste;

• Método execute: Nesse método é necessário executar toda a rotina de teste.

Nele todas as interações com a interface do sistema precisam ser

desenvolvidas;

• Método cleanup: Com esse método é possível limpar todos os dados da

base de dados criados pelo teste que foi executado. Isto se dá através do

Entity Manager, que efetua a remoção desses registros criados pela rotina

do teste.

Para auxiliar e melhor organizar a implementação dos casos de teste, criou-se um

pacote chamado “br.com.tcc.util”, onde é possível criar classes utilitárias dos seus casos de

teste. A figura 51 exibe a estrutura do pacote.

Figura 51 - Pacote util

Fonte: Elaborado pelos autores, 2013.

Page 118: Automação de Testes de Regressão - Selenium

118

Seguindo os conceitos descritos acima e utilizando a base da automação, foi

possível automatizar os seguintes casos de testes:

• Cadastrar, editar e excluir projeto;

• Cadastrar um projeto selecionando um cliente;

• Cadastrar cronograma;

• Cadastrar atividade preenchendo apenas campos obrigatórios;

• Cadastrar atividade preenchendo, além dos campos obrigatórios, o

cronograma;

• Cadastrar atividade com todos os campos;

• Efetuar login com um usuário válido para o sistema;

• Tentativa de login com usuário inválido no sistema.

Depois de todos os testes automatizados, sua execução é feita a partir do JUnit.

Caso se trate de uma lista de teste, é necessário especificar o caminho do arquivo que será lido

nos argumentos da JVM (Java Virtual Machine), com o comando “-DtestList=

C:\workspace\Automacao\resource\testList.txt”.

5.4 ESTUDO DE CASO

O estudo de caso foi idealizado para comparar a automação de testes de regressão

versus a prática manual. Sabe-se que, quando ocorrem alterações no código-fonte do sistema,

existe a necessidade de um teste de regressão como auxílio na garantia da integridade do

mesmo. Partindo desse princípio, nas seções que seguem, apresentam-se as mudanças feitas

no sistema, a execução do teste automático e manual de regressão, o perfil dos participantes

escolhidos para executar o teste manualmente e os resultados obtidos a partir desses estudos.

Page 119: Automação de Testes de Regressão - Selenium

119

5.4.1 Bugs inseridos no sistema

Para simular um cenário onde o teste encontra um bug no sistema, foi inserido um

erro propositalmente em uma rotina do protótipo Projector.

Implementou-se uma lógica que altera o fluxo básico do cadastro de uma

atividade preenchendo apenas os campos obrigatórios. O problema consiste em o sistema

informar que a atividade foi cadastrada com sucesso, porém a mesma não é persistida no

banco e tampouco apresentada na interface de listagem das atividades.

A figura 52 apresenta a tela de cadastro de uma atividade onde o usuário

preencheu os campos obrigatórios e clicou no botão “salvar”.

Figura 52 - Cadastro de Atividade

Fonte: Elaborado pelos autores, 2013.

Na figura 53, é possível perceber que apesar da mensagem de “Cadastro efetuado

com sucesso”, o sistema retorna para a tela de cadastro e a listagem não é exibida. O correto

seria apresentar a tela contendo a listagem das atividades.

Page 120: Automação de Testes de Regressão - Selenium

120

Figura 53 - Cadastro de atividade campos obrigatórios

Fonte: Elaborado pelos autores, 2013.

A figura 54 demonstra a confirmação do bug, onde o usuário acessa a listagem

das atividades para se certificar de que a mesma não foi cadastrada, pois na interface a

atividade cadastrada anteriormente não é apresentada.

Figura 54 - Grid de atividades

Fonte: Elaborado pelos autores, 2013.

Page 121: Automação de Testes de Regressão - Selenium

121

5.4.2 Seleção dos atores

Para a execução dos testes manuais, foram escolhidas duas pessoas que atuam na

área de teste e qualidade de software. Para o estudo de caso, tratar-se-á com nomes fictícios,

tais como “Testador X” e “Testador Y”.

O Testador X tem 24 anos de idade, possui grau superior incompleto em Ciência

da Computação, atua há três anos, em uma empresa na região da grande Florianópolis, com o

cargo de Analista de Testes e possuindo o papel de Scrum Master de sua equipe.

O Testador Y possui 25 anos de idade, graduação incompleta em um curso de

Telecomunicações, atua há dois anos na área de teste. Atualmente, desempenha o cargo de

Testador na mesma empresa do outro participante.

Ambos aceitaram participar do estudo de caso, permitiram, também, uma

filmagem enquanto executaram os testes manuais, porém para obter sigilo de suas

identidades, seus rostos e nomes não foram apresentados no vídeo, no questionário aplicado e

na presente monografia. Após a confirmação de suas participações, receberam a modelagem e

os casos de teste do Projector para estudo.

O questionário respondido por ambos os participantes encontra-se nos Anexos A e

B, no final do trabalho.

5.4.3 Execução manual dos casos de teste

Para efetuar os testes manuais foram configurados dois computadores que

possuíam o sistema Projector executando localmente, o Enterprise Architect com a

modelagem do mesmo, o MySQL Workbench 5.2 contendo as instruções SQL para execução

do teste e um documento de texto com os casos de teste.

Os dois testadores não sabiam da existência de um bug no protótipo, pois foi o

primeiro contato com a interface do protótipo que tiveram, até então só haviam visualizado os

diagramas da modelagem do Projector e os casos de teste. Eles foram filmados durante a

Page 122: Automação de Testes de Regressão - Selenium

122

ação, no dia 07 de maio de 2013. O vídeo4 possui dezesseis minutos e oito segundos, e é

possível visualizar todas as ações de testes manuais.

O Testador X executou os testes da maneira correta encontrando um bug no

sistema, conforme previsto. O mesmo seguiu corretamente a sequência de passos do

documento disponibilizado com os casos de teste manuais.

No início do teste, o Testador Y conseguiu executar corretamente os dois

primeiros casos de teste. Através do vídeo, é possível visualizar que o mesmo consulta os

casos de teste a cada ação efetuada na interface do Projector. Entretanto, no terceiro teste, ele

cometeu um equívoco, excluindo o registro na base de dados e depois tentou apagar

novamente o mesmo na interface. Essa ação não seguiu a ordem estipulada no documento dos

casos de teste e devido a isso, o sistema não estava preparado para tratar a sequência

executada pelo Testador Y. Dessa forma, os problemas reportados por ele na verdade tratam-

se de comportamentos que não foram previstos no desenvolvimento do protótipo e tampouco

na elaboração dos casos de teste.

A figura 55 apresenta o início do procedimento, onde os testadores encontram-se

lendo os casos de teste no documento de texto.

4 O vídeo está disponível através de um serviço de armazenamento de arquivos conhecido como Dropbox. Pode

ser visualizado através do link: https://dl.dropboxusercontent.com/u/44381684/TestesManuais.MPG

Page 123: Automação de Testes de Regressão - Selenium

123

Figura 55 - Início da execução

Fonte: Elaborado pelos autores, 2013.

Na figura 56, é possível perceber o momento em que ambos abrem a aplicação

Projector para iniciar os testes.

Page 124: Automação de Testes de Regressão - Selenium

124

Figura 56 - Acesso ao sistema

Fonte: Elaborado pelos autores, 2013.

A figura 57 apresenta o momento em que o Testador Y realiza a rotina incorreta

do teste, que desencadeou em resultados inconsistentes no protótipo. A ação ocorreu em um

minuto e trinta e nove segundos após o início dos testes.

Page 125: Automação de Testes de Regressão - Selenium

125

Figura 57 - Execução incorreta

Fonte: Elaborado pelos autores, 2013.

Na figura 58, é apresentado o momento que o Testador X, posicionado na

esquerda do vídeo, encontrou o bug no teste de “Cadastrar atividade com campos

obrigatórios”. A operação durou doze minutos e treze segundos após o teste ser iniciado.

Page 126: Automação de Testes de Regressão - Selenium

126

Figura 58 - Detecção do bug pelo Testador X

Fonte: Elaborado pelos autores, 2013.

A figura 59 demonstra o momento em que o Testador X conclui o teste com

duração de quinze minutos e trinta de nove segundos após o início da rotina de execução.

Page 127: Automação de Testes de Regressão - Selenium

127

Figura 59 - Testador X finaliza o teste

Fonte: Elaborado pelos autores, 2013.

A figura 60 mostra o momento em que o Testador Y finaliza seu teste, que

ocorreu em dezesseis minutos e oito segundos após o início da rotina de teste manual.

Page 128: Automação de Testes de Regressão - Selenium

128

Figura 60 - Testador Y conclui o teste manual

Fonte: Elaborado pelos autores, 2013.

5.4.4 Execução automatizada dos casos de teste

A execução dos testes automatizados deu-se através da ferramenta Eclipse. Foram

executados dez testes em sequência utilizando a opção de execução em lista, que foi explicado

na seção 5.2.3. O tempo total gasto na execução do teste foi de dois minutos e quarenta e três

segundos. Ao final, foi gerado um log no navegador com o resultado para cada teste

juntamente com a captura da tela no momento em que se efetua a validação do mesmo.

Existem duas classificações de resultado. Assim, cada teste pode ser definido em:

• Passou: Quando o caso de teste automatizado atendeu a rotina desejada

e não foram encontrados bugs na funcionalidade.

Page 129: Automação de Testes de Regressão - Selenium

129

• Falhou: Quando o caso de teste automatizado encontrou algum

problema em sua execução. Caso ocorra um problema, o caso de teste

trata a execução do mesmo como um bug do sistema.

Através do resultado exibido no fim do teste, tornou-se possível verificar a

classificação de cada teste, sendo possível identificar problemas em sua execução.

Com base nesse resultado, identificou-se um bug no “Teste Cadastrar Atividade”.

O erro ocorreu na validação da rotina de teste, pois a mesma necessitava da confirmação do

cadastro da atividade. Essa validação não foi positiva após seu cadastro, uma vez que a

atividade cadastrada deveria ser exibida na tela de listagem das atividades. Sendo assim, a

execução da rotina de teste obteve um problema.

A fim de exibir a execução da automação, foi gravado um vídeo5 com duração de

três minutos e vinte e oito segundos, que expõe a execução da lista de teste. Nele é possível

garantir a integridade da automação, pois se consegue visualizar o notebook e mouse em que o

roteiro de teste foi executado.

A figura 61 exibe o início da execução da automação.

Figura 61 - Início da execução automatizada

Fonte: Elaborado pelos autores, 2013.

5 O vídeo está disponível no Dropbox através do link:

https://dl.dropboxusercontent.com/u/44381684/ExecucaoAutomacao2.AVI

Page 130: Automação de Testes de Regressão - Selenium

130

Após a execução através da ferramenta Eclipse, uma instância do navegador é

carregada, nela o Selenium WebDriver acessa a página principal do sistema Projector,

conforme visualizado na figura 62.

Figura 62 – Abertura automática no navegador

Fonte: Elaborado pelos autores, 2013.

Aos vinte e dois segundos do vídeo é possível visualizar o Selenium WebDriver

acessando e interagindo com o componente Calendário do framework JSF.

A figura 63 apresenta o momento dessa interação.

Page 131: Automação de Testes de Regressão - Selenium

131

Figura 63 - Componente calendário

Fonte: Elaborado pelos autores, 2013.

A figura 64 exibe o momento em que a automação executa o teste que contém o

bug. Nela o Selenium WebDriver executa a ação que salva o cadastro do

“TesteSalvarAtividade” e efetua a validação do mesmo, aguardando a listagem que contém as

atividades. A automação executa essa rotina no período de um minuto e vinte e nove

segundos após o início da gravação.

Page 132: Automação de Testes de Regressão - Selenium

132

Figura 64 - Automação encontra bug

Fonte: Elaborado pelos autores, 2013.

Mesmo após uma rotina de teste falhar a automação continua executando os

próximos casos de teste.

A figura 65 exibe o “TesteSalvarCronograma”, o mesmo é um teste subsequente

ao que contém o bug.

Figura 65 - Teste automatizado de salvar cronograma

Fonte: Elaborado pelos autores, 2013.

Page 133: Automação de Testes de Regressão - Selenium

133

Nota-se que no período de dois minutos e quarenta e sete segundos a execução de

teste chega ao fim.

A figura 66 exibe esse momento.

Figura 66 - Fim do teste automatizado

Fonte: Elaborado pelos autores, 2013.

Após toda execução do teste automatizado é exibido o resultado de cada rotina

executada.

A figura 67 exibe o log do primeiro caso de teste executado, seu status “Passou”

informa que o teste foi executado com sucesso e nenhum bug foi detectado no mesmo.

Page 134: Automação de Testes de Regressão - Selenium

134

Figura 67 - Log da automação

Fonte: Elaborado pelos autores, 2013.

Na figura 68 é possível visualizar o log do “TesteCadastrarAtividade” que contém

o status “Falhou”, ou seja, houve um problema na execução da rotina. Esse problema foi

tratado como bug pela automação. Nela é possível visualizar a captura da tela no momento em

que o Selenium WebDriver aguarda que a listagem das atividades seja exibida com o registro

da mesma.

Page 135: Automação de Testes de Regressão - Selenium

135

Figura 68 - Log da automação apresentando o bug

Fonte: Elaborado pelos autores, 2013.

Por fim, foi possível verificar que a automação conseguiu interagir de forma

prática e rápida com o sistema Projector, a execução da rotina de teste foi um sucesso e o bug

previsto no sistema foi detectado pela automação.

5.4.5 Resultados obtidos

Os resultados foram obtidos com base em três fatores que seguem.

1. Elaboração e execução dos testes manuais;

2. Respostas do questionário aplicado;

3. Automatização dos testes e execução dos mesmos.

Os dados foram levantados a partir da filmagem de ambos os testes, onde foram

analisados o tempo decorrido em cada execução, a comparação dos resultados nos dois casos

e a eficácia na execução dos mesmos.

As respostas do questionário contribuíram para obter as percepções dos

envolvidos no teste manual.

Page 136: Automação de Testes de Regressão - Selenium

136

O quadro 03 apresenta a comparação entre as duas situações.

Quadro 3 - Comparações entre manual e automatizado

Métricas Teste Manual Teste Automatizado

Tempo gasto para elaboração 6 horas 32 horas

Tempo de Execução 16:08:00 02:43:00

Eficácia do Teste Bom Ótimo

Quantidade de Bugs encontrados

Testador X: 1 bug Testador Y: 3 bugs

1 bug

Tempo gasto no estudo do Projector pelos testadores

4 horas Não se aplica

Total de horas 10:16:08 32:02:43

Fonte: Elaborado pelos autores, 2013.

O tempo gasto na elaboração do teste manual envolve quatro horas no estudo da

modelagem mais duas horas para escrever os casos de teste.

O tempo gasto na criação do teste automatizado compreende as quatro horas de

estudo da modelagem, vinte horas para desenvolvimento da estrutura básica do projeto de

automação, seis horas para implementação dos casos de teste automatizados e duas horas para

escrever o documento de texto que contém os casos de testes.

Os resultados foram coletados através do questionário contendo a percepção dos

envolvidos e a análise feita pelos autores da presente monografia. Com isso, foi possível

definir a eficácia e eficiência do teste. Para correlacionar, ambas foram utilizadas quatro

métricas de avaliação, são elas:

� Ruim: Nesse caso o teste foi mal sucedido, ou por falta de compreensão do

mesmo, ou por possíveis falhas na execução do teste;

� Regular: Foi atendido parcialmente o escopo de teste previsto;

� Bom: O escopo de teste foi atendido, mas com alguma falha na sua

execução;

� Ótimo: Escopo de teste foi totalmente atendido.

Page 137: Automação de Testes de Regressão - Selenium

137

Com base na tabela, a próxima seção aborda as avaliações dos resultados.

5.5 AVALIAÇÃO DOS RESULTADOS

Conforme quadro 3, pode-se perceber uma discrepância no tempo de execução

dos dois testes. Analisando a tabela, o tempo total gasto incluindo o estudo, construção e

desenvolvimento da automatização foi de trinta e duas horas e dois minutos, já a execução e

elaboração do teste manual foi de dez horas e dezesseis minutos.

Comparando as duas situações, em primeiro momento, o teste manual apresenta

menor tempo para chegar ao seu objetivo de um teste de regressão. Porém, sempre que houver

mudanças no código-fonte do sistema, será necessário executar outra bateria de testes para

garantir qualidade e integridade do mesmo.

Na situação do estudo de caso onde se envolveu dois profissionais na área, em

situações que houvesse a necessidade de mais bateria de testes de regressão, os mesmos

resultados, diferenças de experiência e execução diferente continuariam a existir. Como o

teste manual é executado por seres humanos, dificilmente há cem por cento de garantia na sua

execução. Em contra partida, após o desenvolvimento da automação, o mesmo teste sempre

será executado. O tempo de sua execução sempre será o mesmo e existe a garantia de que a

bateria de teste está sendo executada corretamente.

Em situações da necessidade de execução de mais baterias de teste, a automação

tem menos custo que o teste manual. O teste manual tem gastos com a hora do profissional

que executa e valida o teste, tem um tempo maior para ser desempenhado e não possui cem

por cento de garantia de teste. A automação tem um custo maior no início para ser

desenvolvida, porém o custo dela é apenas com manutenção. Seu tempo de execução é

sempre menor que o tempo de execução manual.

O quadro 04 apresenta um levantamento das vantagens e desvantagens

encontradas na execução do teste automatizado.

Page 138: Automação de Testes de Regressão - Selenium

138

Quadro 4 - Prós e contras da automação Teste Automatizado

Prós Contras

Tempo de execução Investimentos iniciais

Quantidade de repetições Manutenções

Agilidade na detecção de bugs Não é tão abrangente quanto o manual

Garantia na execução correta do roteiro do teste Menor percepção de bugs

Fonte: Elaborado pelos autores, 2013.

Conforme o quadro 04, levantou-se como vantagens o tempo curto na execução

do teste, a quantidade de repetições, a agilidade na detecção do bug, pois a automação executa

a sequência definida na sua implementação.

Como desvantagem dessa prática, existem manutenções no caso de teste, caso

haja mudanças no sistema. Os investimentos iniciais podem ser altos, uma vez que depende

de um estudo da linguagem utilizada na automação e de tempo no desenvolvimento de seu

código-fonte. Algumas questões sobre usabilidade da interface são melhor percebidas em

testes manuais, já que a automação executa um roteiro pré-definido e não se atenta a questões

de qualidade do software.

Quadro 5 - Prós e contras do teste manual Teste Manual

Prós Contras

Abrangência do teste Maiores investimentos

Melhores análises de usabilidade Desgastes na execução do mesmo teste

Maiores validações dos bugs Tempo de execução é alto

Grandes percepções de bugs Não há 100% de garantia no teste

Fonte: Elaborado pelos autores, 2013.

Conforme o quadro 05, levantou-se como vantagens a abrangência que o teste

manual pode alcançar, pois é possível verificar a usabilidade do sistema, por exemplo, que no

caso da automação isso não é possível e a validação de bugs já encontrados previamente. As

desvantagens encontradas foram os investimentos em pessoas capacitadas para execução

manual dos testes, o desgaste que há na execução dos mesmos pois, há diversas repetições das

rotinas de teste durante o processo de homologação, o tempo de execução é mais alto que o da

automação, uma vez que depende de matéria humana para ser executado e não há uma total

garantia de que o teste foi executado conforme o esperado.

Nesse estudo de caso, a automação, a partir do framework Selenium, foi a solução

mais adequada, pois se verificou que com os testes manuais houve erros na execução

Page 139: Automação de Testes de Regressão - Selenium

139

realizada por um dos participantes e esse é um fato que pode ocorrer com frequência em uma

equipe de teste. A automação garantiu a eficiência e eficácia do teste, pois detectou o bug em

menor tempo e executou a lista em um período menor que o teste manual.

Page 140: Automação de Testes de Regressão - Selenium

140

6 CONCLUSÕES E TRABALHOS FUTUROS

Para atender o estudo de caso foi necessário criar e aplicar os testes manuais e

automatizados, utilizando como base um protótipo de um sistema web. Com base nisso, foram

levantadas as conclusões da presente monografia, bem como sugestões de trabalho futuros.

6.1 CONCLUSÕES

Qualquer alteração que ocorra no desenvolvimento de um sistema, faz-se

necessário a aplicação de um teste de regressão como forma de minimizar problemas que

venham a ser encontrados pelo usuário final. Esses testes, dependendo do tamanho do

sistema, podem ser onerosos tanto para quem irá executar quanto para a empresa que terá um

custo com o tempo gasto em tal tarefa.

Na tentativa de diminuir os custos e esforços, foi aplicado um estudo de caso que

visa encontrar um método de teste que realize o mesmo trabalho de maneira rápida e precisa.

Isso se deu através da automatização dos testes de regressão utilizando o framework

Selenium. A partir desse estudo, aplicaram-se os mesmos testes de regressão de forma manual

e automática, comparando os resultados obtidos em ambos.

Notou-se que na execução manual houve falhas humanas que comprometeram o

resultado final bem como a qualidade e eficácia do teste. Executando o teste automatizado, os

esforços e custos foram superados, uma vez que a automação executa o mesmo teste de forma

rápida e consegue garantir uma precisão maior.

Os custos da automação são maiores na sua fase de implantação, por causa de

estudos do framework e o próprio desenvolvimento, porém é possível reverter esses custos.

Os testes automatizados não possuem limites de execução depois de desenvolvidos. Pode-se

aplicar essa rotina de teste quantas vezes forem necessárias, já que o teste manual cada vez

que é executado, possui um custo de tempo e esforço. Com isso, o custo da automação

torna-se menor em comparação ao teste manual.

Page 141: Automação de Testes de Regressão - Selenium

141

Em casos de mudanças na aplicação a ser testada, existe um custo adicional para

automação, pois se faz necessário a manutenção do mesmo. Contudo, esses custos não

superam os custos da aplicação de testes manuais, já que a execução automatizada é mais

rápida e economiza tempo e esforços em testes repetitivos.

Utilizando o framework Selenium, foi possível atender ao estudo de caso, uma

vez que o mesmo possui uma documentação completa em seu site oficial e também possui

uma comunidade ativa na internet, tornando fácil sua implantação. Por ser um software livres

não há custos para sua utilização. Isso foi possível através do mesmo diminuir o tempo de

execuções de testes, obter repetições na execução dos mesmos, ser ágil na detecção de bugs e

garantir a execução correta do roteiro de teste.

A aplicação do teste automático é abrangente, pois se consegue capturar bugs de

forma mais precisa, agindo como ferramenta de auxílio na qualidade de um software. Sua

manutenção não é algo complexo e os desenvolvimentos de novos casos de teste seguem o

mesmo caminho de testes já implementados. Ao contrário do ser humano, a automação

consegue executar atividades repetitivas sem que haja oneração e cansaço na execução dos

mesmos. Com isso os testadores podem se dedicar a atividades de análise as tarefas que

envolvam análises e reflexões.

6.2 TRABALHOS FUTUROS

Para a presente monografia foi apresentado um estudo de caso de teste de

regressão que foram executados manual e automaticamente. Após a automação, podem ser

abertas diversas vertentes para estudos futuros.

Existem outros tipos de teste que pode ser aplicada a automação; porém, nesse

estudo de caso utilizou-se o de regressão.

Sugere-se, também, que se desenvolva a criação de logs mais específicos para o

teste, onde a cada ação executada pela automação seja auditada, bem como logs mais

detalhados dos erros encontrados, e que se aplique o framework Selenium com outras

linguagens de programação, utilizando outros navegadores além do Google Chrome. E para

finalizar, que seja implantada a automação em uma empresa como forma de analisar seus

resultados no cotidiano organizacional.

Page 142: Automação de Testes de Regressão - Selenium

142

REFERÊNCIAS

AMBLER, Scott W. Modelagem ágil: Práticas eficazes para a programação extrema e o processo unificado. Porto Alegre: Bookman, 2004. APACHE TOMCAT. Apache Tomcat. Disponível em: <http://tomcat.apache.org/> Acesso em: 22 abr. 2013 ASTELS, David; MILLER, Granville; NOVAK Miroslav. Extreme Programming: guia prático. Rio de Janeiro: Campus, 2002. BARTIÉ, Alexandre. Garantia da qualidade de software: As melhores práticas de Engenharia de Software aplicadas à sua empresa. Rio de Janeiro: Campus, 2002. BASTOS, Anderson et al. Base de conhecimento em teste de software. 2. ed. São Paulo: Martins, 2007. BELL, Donald. UML basics: An introduction to the Unified Modeling Language. 2003. Disponível em: <http://www.ibm.com/developerworks/rational/library/769.html>. Acesso em: 21 mai. 2011. BEZERRA, Eduardo. Princípios de análise e projetos de sistemas com UML. Rio de Janeiro: Campus, 2002. BINDER, R. V. Testing Object-Oriented Systems: Models, Patterns, and Tools. 1ª Ed. Massachusetts: Addison Wesley, 1999. BLACK, Rex. Pragmatic Software Testing: Becoming an Effective and Efficient Test Professional. John Wiley & Sons. 2007. BLAHA, Michael; RUMBAUGH, James. Modelagem e projetos baseados em objetos com UML 2. 2. Ed. Rio de Janeiro: Campus, 2006. CASIMIRO, Rebeca. Fundamentos de Teste de Software. 2011. Disponível em: <http://pt.scribd.com/doc/54571508/Fundamentos-de-Teste-de-Software>. Acesso em: 16 ago. 2012. DEEK, F. P.; MCHUGH, J. A.; ELJABIRI, O. M. Strategic software engineering: an

interdisciplinary approach. Auerbach, 2005, pp.173-188.

DELAMARO, Márcio Eduardo; JINO, Mario; MALDONADO, Carlos José. Introdução do Teste de Software. Rio de Janeiro: Elsevier, 2007. DUSTIN, Elfried. Effective Software Testing: 50 Specific Ways to Improve Your Testing. Addison Wesley Professional; 1 st edition, 2002.

Page 143: Automação de Testes de Regressão - Selenium

143

ERIKSSON, Hans-Erik; PENKER, Magnus. Business Modeling with UML. Estados Unidos: Wiley & Sons, 2000. 459p. FACHIN, Odília. Fundamentos de metodologia. 3. ed. São Paulo: Saraiva, 2001. FAYAD, M. E.; Schimidt & D. C.; Johnson, R. E. Implementing application frameworks: object-oriented frameworks at work. New York: J. Wiley, 1999. FERNANDES, Ricardo Silva Melo. Automação de Testes Baseada em Palavras-Chave Utilizando a Ferramenta Rational Functional Tester. 2006. 50 p. Trabalho de Conclusão de Curso – Universidade Federal de Pernambuco, Recife. FURLAN, José David. Modelagem de objetos através da UML. São Paulo: Makron Books,1998 GALLIANO, A. G. O método científico: teoria e prática. São Paulo: Harbra, 1986.

GARCIA, E. A. C. Manual de sistematização e normalização de documentos técnicos.São Paulo: Atlas, 1998. GIL, Antonio Carlos. Métodos e técnicas de pesquisa social. São Paulo: Atlas, 1999

GÓIS, Francisco Nauber Bernardo, OLIVEIRA, Rafael Braga de, FARIAS, Pedro Porfírio Muniz. Desenvolvimento de Software Utilizando Integração Contínua. ERCEMAPI 2007 - Escola Regional de Computação - Ceará Maranhão – Piauí. GUIMARÃES, Gabriel; MEDEIROS, Rodrigo; ROSSINI, Tiago; SILVA, George; SILVA, Gilbert. Utilizando ICONIX no desenvolvimento de aplicações delphi. In: CONGRESSO DE PESQUISA E INOVAÇÃO DA REDE NORTE NORDESTE DE EDUCAÇÃO TECNOLÓGICA, 2., 2007, João Pessoa. Anais eletrônicos... Disponível em: <http://www.redenet.edu.br/publicacoes/publicacoes.php?tipo=1&area2=Inform%E1tica#>. Acesso em: 20 maio 2011.

HETZEL, Willian. Guia completo ao teste de software. Rio de Janeiro: Campus, 1987. HIBERNATE. Por que o Hibernate. disponível em: <http://www.hibernate.org/about/why-

hibernate> Acesso em 22 de abril de 2013.

IEEE. IEEE standard glossary of software engineering terminology. Standard 610.12,

IEEE Computer Society Press, 1990

INTERNATIONAL SOFTWARE TESTING QUALIFICATIONS BOARD. Base de conhecimento para certificação em teste. Versão 2007. INTHURN, Cândida. Qualidade & teste de software. Florianópolis: Visual Books, 2001.

Page 144: Automação de Testes de Regressão - Selenium

144

KOSCIANSKI, André; SOARES, Michel dos Santos. Qualidade de Software: Aprenda as metodologias e técnicas mais modernas para o desenvolvimento de software. 2. ed. São Paulo: Novatec, 2007 MAFFEO, Bruno. Engenharia de software e especificação de sistemas. 1 ed. Rio de Janeiro: Campus, 1992 MENEZES, Estera Muszkat; SILVA, Edna Lúcia da. Metodologia da pesquisa e elaboração de dissertação. 4. ed. ver. atual. Florianópolis: UFSC, 2005.

_________. Metodologia da Pesquisa e Elaboração de Dissertação. Universidade Federal de Santa Catarina, Florianópolis, 2001.

MICROSOFT. Microsoft Office Word 2010. Disponível em: <http://www.microsoft.com/portugal/educacao/suiteaprendizagem/msWord.html> Acesso em: 29 abr. 2013.

MOLINARI, Leonardo. Testes de Software: Produzindo sistemas melhores e mais confiáveis. São Paulo: Érica, 2003. MÜLLER, Thomas et al. Base de conhecimento para Certificação em Teste: Foundation Level Syllabus. Comissão Internacional para Qualificação de Teste de Software, 2007. p.77 MYSQL. MySQL Enterprise Edition. Disponível em: < http://www.mysql.com/products/enterprise/ > Acesso em: 22 abr. 2013 OLIVEIRA, Rafael Braga de. Framework Functest: Aplicando padrões de Software na Automação de Testes Funcionais. Fortaleza, 2007. ORACLE. Por que Java. Disponível em: <http://www.oracle.com/br/technologies/java/overview/index.html> Acesso em: 22 abr. 2013. PEZZÈ, Mauro; YOUNG, Michal. Teste e análise de software: processos, princípios e técnicas. Porto Alegre: Bookman, 2008. PRESSMAN, Roger S. Engenharia de software. Roger S. Pressman; tradução José Carlos Barbosa dos Santos; revisão técnica José Carlos Maldonado, Paulo Cesar Masiero, Rosely Sanches. São Paulo: Pearson Makron Books, 1995. PRESSMAN, Roger S. Engenharia de software. 5 ed. São Paulo: McGraw Hill, 2001. _________. Engenharia de Software. 5 ed. São Paulo: McGraw Hill, 2002. _________. Software Engineering: A Practitioner’s Approach, 6 ed, São Paulo: McGraw-Hill, 2004. _________. Engenharia de Software. 6. ed, São Paulo: McGrawHill, 2006.

Page 145: Automação de Testes de Regressão - Selenium

145

REZENDE, Denis A. Engenharia de Software e Sistemas de Informação. Rio de Janeiro: Brasport, 1999. RIOS, Emerson; TRAYAHÚ FILHO, Moreira. Teste de software. 2a ed. Rio de Janeiro: Alta Books, 2006. ROSENBERG, Doug; STEPHENS, Matt; COPE, Mark Collins-. Agile Development with ICONIX Process: People, Process, and Pragmatism. New York: Apress , 2005.

ROYCE, W. Managing the Development of Large Software Systems: Concepts and Techniques. Proc. IEEE Westcon, Los Angeles, 1970 RUMBAUGH, James; BOOCH, Grady; JACOBSON, Ivar. UML: Guia do usuário. Rio de Janeiro: Campus, 2000. SANTIAGO, Israel; Automação de Testes Funcionais. PMP: 02 de maio de 2010. Disponível em: <http://www.slideshare.net/powerirs/automao-de-teste-funcionais-selenium-3936751>. Acesso em: 16 ago. 2012. SOARES, Michel dos Santos. Metodologias Ágeis Extreme Proggamming e Scrum para desenvolvimento de software. Revista Eletrônica de Sistemas de Informação, Conselheiro Lafaiete, v.3, n.1, 2004. Disponível em: <http://revistas.facecla.com.br/index.php/reinfo/issue/archive> . Acessado em: 08 out. 2012. SOMMERVILLE, Ian. Engenharia de Software. 6. ed. São Paulo: Addison Wesley, 2003. SPARX SYSTEMS. Enterprise Architect. Disponível em: <http://www.sparxsystems.com.au/products/ea/index.html> Acesso em 22 abril de 2013. TONSIG, Sérgio Luiz. Engenharia de Software: Análise e Projetos de Sistemas. 2a ed. Rio de Janeiro: Editora Ciência Moderna Ltda, 2008.

Page 146: Automação de Testes de Regressão - Selenium

146

APÊNDICES

Page 147: Automação de Testes de Regressão - Selenium

147

APÊNDICE A – QUESTIONÁRIO

UNIVERSIDADE DO SUL DE SANTA CATARINA Título do Trabalho: AUTOMAÇÃO DE TESTES DE REGRESSÃO: UM ESTUDO DE CASO

UTILIZANDO O FRAMEWORK SELENIUM.

Alunos: Maiele Perosa Ranzan e Rodrigo Susin de Oliveira

Orientador: Flávio Ceci QUESTIONÁRIO – TESTES MANUAIS Informações: Este questionário tem por objetivo levantar as percepções dos participantes sobre o

teste manual aplicado no protótipo Projector, bem como suas opiniões a respeito das rotinas de teste

e ferramentas utilizadas.

Solicitamos a sua colaboração no preenchimento das questões.

IDENTIFICAÇÃO DO PARTICIPANTE

Qual é a sua idade?

____________________________________________________________________________

Qual é a sua escolaridade?

____________________________________________________________________________

____________________________________________________________________________

Atua na área de testes e/ou qualidade de software? Se a resposta for positiva, qual é o seu cargo e

há quanto tempo atua nesta área?

____________________________________________________________________________

____________________________________________________________________________

____________________________________________________________________________

ROTINA DE TESTE

A modelagem disponibilizada na ferramenta Enterprise Architect lhe auxiliou na execução dos casos

de teste?

( ) A modelagem auxiliou o entendimento.

( ) A modelagem auxiliou parcialmente.

( ) A modelagem não auxiliou.

Os casos de teste disponibilizados são de fácil entendimento? Justifique sua resposta.

( ) Os casos de teste são de fácil compreensão.

( ) Alguns pontos não foram compreendidos.

( ) Os casos de teste não são de fácil entendimento.

____________________________________________________________________________

____________________________________________________________________________

Page 148: Automação de Testes de Regressão - Selenium

148

Qual foi a quantidade de bugs que você encontrou e em qual (is) caso (s) de teste?

( ) Nenhum bug foi encontrado

( ) 1 a 2 bug (s)

( ) 3 ou mais bugs

____________________________________________________________________________

____________________________________________________________________________

A infraestrutura disponibilizada para o ambiente de teste foi suficiente para a execução?

( ) Suficiente.

( ) Parcialmente suficiente.

( ) Não foi suficiente.

A rotina de teste elaborada (casos de teste, modelagem e infraestrutura) atende o teste de

regressão?

( ) Atende completamente.

( ) Atende parcialmente.

( ) Não atende.

Das alternativas abaixo qual melhor define a seguinte pergunta: A automação dos testes de

regressão auxilia na prevenção e detecção de erros?

( ) É de grande valia para o auxílio e detecção de erros.

( ) Em poucos casos.

( ) Não auxilia ou Não se aplica.

Das alterativas abaixo, qual melhor se encaixa no tempo gasto em estudo e execução do teste?

( ) O tempo gasto foi conforme esperado.

( ) O tempo gasto foi conforme esperado, mas poderia ser otimizado.

( ) Gastou-se muito tempo para estudo e execução dos testes.

( ) O tempo gasto superou as expectativas positivamente.

Page 149: Automação de Testes de Regressão - Selenium

149

ANEXOS

Page 150: Automação de Testes de Regressão - Selenium

150

ANEXO A – Questionário do Testador X

Page 151: Automação de Testes de Regressão - Selenium

151

Page 152: Automação de Testes de Regressão - Selenium

152

Page 153: Automação de Testes de Regressão - Selenium

153

ANEXO B – Questionário do Testador Y

Page 154: Automação de Testes de Regressão - Selenium

154

Page 155: Automação de Testes de Regressão - Selenium

155