UNIVERSIDADEDOSULDESANTACATARINA EDUARDO CORRÊA DE SÁ
RODRIGO SILVA
AUTOMAÇÃODETESTEPARADISPOSITIVOSMÓVEISEEXECUÇÃODOS SCRIPTSDETESTEAUTOMATIZADOSNANUVEM
Florianópolis 2016
2
EDUARDO CORRÊA DE SÁ
RODRIGO SILVA
AUTOMAÇÃODETESTEPARADISPOSITIVOSMÓVEISEEXECUÇÃODOS SCRIPTSDETESTEAUTOMATIZADOSNANUVEM
Trabalho de Conclusão de Curso apresentado ao Curso de Sistema 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. Saulo Popov Zambiasi, Dr.
Florianópolis 2016
3
EDUARDO CORRÊA DE SÁ
RODRIGO SILVA
AUTOMAÇÃODETESTEPARADISPOSITIVOSMÓVEISEEXECUÇÃODOS SCRIPTSDETESTEAUTOMATIZADOSNANUVEM
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.
4
AGRADECIMENTOS
A Deus por nos ter proferido paciência e dedicação, assim como saúde e força para superar as adversidades.
A nossa família pelo amor, incentivo e apoio incondicional.
Ao nosso orientador professor Dr. Saulo Popov Zambiasi, que prontamente se prontificou em nos guiar e nortear em nosso projeto.
Aos convidados da banca julgadora por aceitarem o convite e por dispor de seu tempo para contribuir com sua experiência e conhecimento.
Aos professores que contribuíram com paciência e dedicação em nossa busca por conhecimento e aprendizado ao longo de toda jornada acadêmica.
Aos colegas acadêmicos e amigos, presentes em momentos de felicidade, companheirismo, ajuda e motivação.
5
RESUMO
Diante da crescente ascensão dos smartphones no mercado, os desenvolvedores de software têm buscado formas de garantir o desempenho dos produtos os quais são desenvolvidos para esta plataforma, nos diversos modelos de smartphones presentes atualmente no mercado. Em função disso, os desenvolvedores de software deparam-se com seguinte situação: garantir o desempenho de seus aplicativos desenvolvidos para esta plataforma, nos diversos modelos de smartphones presentes atualmente em uso. Perante a esse cenário, o presente estudo teve como objetivo realizar um levantamento de ferramentas de automação e execução de teste para dispositivos móveis, técnicas e conceitos que visam garantir a qualidade do software desenvolvido para esta plataforma, além de avaliar as principais ferramentas disponíveis no mercado para este fim. Esta avaliação foi realizada por meio de um comparativo prévio entre as ferramentas pesquisadas, e após isso, realizada a escolha das ferramentas utilizadas para desenvolvimento deste trabalho, conforme os requisitos pré-definidos no estudo, a fim de realizar a implementação de scripts de teste automatizados sobre um aplicativo, conforme o plano de teste elaborado. A execução destes scripts foi efetuada por meio de em um serviço de emulação de dispositivos móveis utilizando a tecnologia de computação em nuvem, o que possibilitou a execução destes em diversos modelos de dispositivos móveis presentes no mercado. Os instrumentos utilizados neste estudo foram ferramentas como Selenium (Framework de automação de testes), Appium (Framework de automação de testes mobile), TestNG (Framework de execução de testes), SauceLabs (Serviço de emulação de dispositivos móveis na nuvem) e linguagem de programação JAVA. Diante da metodologia utilizada, o presente estudo proporcionou a identificação da possibilidade da execução dos scripts teste em diversos modelos de dispositivos móveis, bem como uma implementação simples e facilitada desses scripts. No entanto, percebeu-se que a execução em um dispositivo emulado é um tanto quanto lenta quando comparado à execução em um dispositivo real. Entretanto, essa prática mostrou-se uma alternativa viável no auxílio de testadores e interessados, nas tarefas de execuções de testes nestes aparelhos.
Palavras-chave: Automação de teste. Dispositivos móveis. Computação em nuvem. Ferramentas de teste para dispositivos móveis.
6 ABSTRACT
Face of the increasing rise of smartphones on the market, software developers have sought ways to ensure the products performance which are developed for this platform, in many different smartphones present currently on the market. As a result, software developers are faced with the following situation: ensure the developed applications performance for this platform, in many different smartphones present currently in use. Given this background, the present study aimed to carry out a survey of automation test tools for mobile devices, techniques and concepts that aim to ensure the quality of the developed software for this platform, besides evaluating the main available tools on the market for this purpose. This evaluation was conducted by comparison between a previous search tools, and following this, was performed the choice of the tools used for the study development, according to the pre-defined requirements in this study, in order to perform the implementation of automated test scripts on an application, as the prepared test plan. The implementation of these scripts was done through in an emulation service of mobile devices using cloud computing technology, allowing the execution of these in many different mobile devices present in the market. The instruments used in this study were tools like Selenium (Framework of test automation), Appium (Framework of automation mobile testing), TestNG (Framework of test execution), SauceLabs (Emulation service of mobile device in cloud) and JAVA programming.language. Given the methodology, this study provided the identification of the possibility of test scripts execution in many different mobile devices as well as a simple and facilitated scripts implementation. Though, it was realized that the execution in an emulated device is somewhat slow when compared to the execution on a real device. However, this practice showed to be a viable alternative in aid testers and interested in the test execution tasks on these devices.
7
LISTA DE QUADROS
Quadro 1 - Principais normas nacionais e internacionais de qualidade ... 19
Quadro 2 - Definições de teste de software ... 22
Quadro 3 - Priorização das categorias de teste ... 30
Quadro 4 - Sequência de execução de teste ... 55
Quadro 5 - Caso de teste ... 56
Quadro 6 - Critérios de teste ... 57
8
LISTA DE FIGURAS
Figura 1 - Camadas da Engenharia de Software... 21
Figura 2 - Visões dos testes por perspectivas diferentes ... 23
Figura 3 - Defeito, erro e falha ... 24
Figura 4 - Processo de Teste de Software... 25
Figura 5 - Logo Robotium ... 33
Figura 6 - Logo Calabash ... 35
Figura 7- Logo Appium ... 36
Figura 8- Logo SauceLabs ... 41
Figura 9- Logo Xamarim ... 42
Figura 10 - Logo Testdoid ... 43
Figura 11 - Etapas metodológicas ... 46
Figura 12 - Arquivo de configuração de testes TestNG ... 50
Figura 13 - Classe de testes JAVA com anotação do TestNG ... 51
Figura 14 - Feedback de execução TestNG ... 52
Figura 15 - Integração Maven ... 59
Figura 16 - Detalhamento arquivo pom.xml ... 60
Figura 17 - Padrão de Projeto PageObjects ... 61
Figura 18 - Método Touch Button ... 62
Figura 19 - Classe Home ... 63
Figura 20 - Configuração Ambiente de Teste ... 65
Figura 21 - Método ConfigureDevice ... 66
Figura 22 - Implementação CT_001 ... 67
Figura 23 - Classe XML FuncionalTest ... 68
Figura 24 - Dashboard SauceLabs ... 69
Figura 25 - Commands SauceLabs ... 70
Figura 26 - Resultado Execução TestNG ... 71
Figura 27- Sucesso Execução SauceLabs ... 72
9 SUMÁRIO SUMÁRIO ... 9 1 INTRODUÇÃO ... 12 1.1 PROBLEMÁTICA ... 13 1.2 OBJETIVOS ... 14 1.2.1 Objetivo geral ... 14 1.2.2 Objetivos específicos ... 14 1.3 JUSTIFICATIVA ... 15 1.4 ESTRUTURA DA MONOGRAFIA ... 16
2 AUTOMAÇÃO DE TESTES DE SOFTWARE EM DISPOSITIVOS MÓVEIS ... 17
2.1 QUALIDADE DE SOFTWARE ... 17
2.2 ENGENHARIA DE SOFTWARE E GESTÃO DE QUALIDADE ... 20
2.3 TESTE DE SOFTWARE ... 21
2.3.1 Conceitos associados ao teste de software ... 23
2.3.2 Processo de teste de software ... 24
2.3.3 Categorias de teste de software ... 26
2.3.3.1 Priorização das categorias de teste ... 29
2.4 AUTOMAÇÃO DE TESTE DE SOFTWARE ... 30
2.4.1 Testabilidade ... 32
2.5 FERRAMENTAS DE AUTOMAÇÃO DE TESTE DE SOFTWARE ... 32
2.5.1 Robotium ... 33
2.5.2 Calabash ... 35
2.5.3 Appium ... 36
2.5.4 Comparativo entre ferramentas ... 37
2.6 NUVEM ... 37
2.6.1 Serviços na nuvem ... 39
2.6.2 Teste na nuvem ... 40
2.6.3 Serviços emuladores de dispositivos móveis na nuvem ... 40
2.6.3.1 SauceLabs ... 41
2.6.3.2 Xamarin ... 42
2.6.3.3 Testdroid ... 42
3 MÉTODO ... 44
3.1 CARACTERIZAÇÃO DO TIPO DE PESQUISA ... 44
3.2 ETAPAS METODOLÓGICAS ... 45
10
4 PROPOSTA, MODELAGEM E APRESENTAÇÃO DO PROCESSO DE TESTE
DE SOFTWARE AUTOMATIZADO ... 49
4.1 FERRAMENTAS ESCOLHIDAS, ESSENCIAIS E DE SUPORTE ... 49
4.1.2 Selenium ... 49
4.1.3 TestNG ... 50
4.1.4 Appium ... 52
4.1.5 Page Object ... 53
4.1.5.1 Linguagem de programação JAVA ... 53
4.1.6 Sauce Labs ... 53
4.2 DESCRIÇÃO DO APLICATIVO A SER TESTADO ... 54
4.2.1 Motivo da escolha do aplicativo ... 54
4.3 PLANO DE TESTE ... 54
4.3.1 Propósito ... 55
4.3.2 Escopo e estratégia de teste ... 55
4.3.3 Casos de teste ... 56
4.3.4 Ambiente de execução dos testes ... 57
4.3.5 Critérios de teste ... 57
5 IMPLEMENTAÇÃO E EXECUÇÃO DOS SCRIPTS DE AUTOMAÇÃO DE TESTE MOBILE ... 59
5 .1 IMPLEMENTAÇÃO DOS SCRIPTS DE AUTOMAÇÃO DE TESTE MOBILE .. 59
5.1.1 Estrutura do Projeto ... 61 5.1.1.1 Pacote Components ... 61 5.1.1.2 Pacote Pages ... 62 5.1.1.2.1 Utilizando o emulador ... 64 5.1.1.3 Pacote Tools ... 64 5.1.1.4 Pacote Tests ... 66
5 .2 EXECUÇÃO DOS SCRIPTS DE AUTOMAÇÃO DE TESTES ... 69
6 CONCLUSÃO ... 74
6.1 SUGESTÕES PARA TRABALHOS FUTUROS ... 75
REFERÊNCIAS ... 76
APÊNDICES ... 81
APÊNDICE A – CASOS DE TESTE ... 82
APÊNDICE B – AUTORIZAÇÃO PARA REALIZAÇÃO DE TESTES AUTOMATIZADOS NO APP MINHAS ECONOMIAS ... 88
11
ANEXO A – Quadro comparativo entre as ferramentas Appium, Calabash e
12 1 INTRODUÇÃO
A evolução do desenvolvimento de software, alinhado com a garantia da qualidade, faz com que as organizações procurem e invistam cada vez mais na automatização do processo de testes. Segundo Bartié (2002), isso deixou de ser uma opção a ser estudada, mas sim parte de uma estratégia de sobrevivência em um mercado cada vez mais competitivo. Com o aumento da demanda dos dispositivos móveis e seus aplicativos, o desafio é minimizar a quantidade de erros presentes nestes softwares e, assim, aumentar a qualidade da aplicação.
Partindo dessa premissa, a atividade de teste deve ser orientada e praticada durante todo o ciclo de desenvolvimento de software, no entanto, esta é uma atividade maçante e onerosa para uma organização, necessitando de uma equipe capacitada e dedicada para este fim. Conforme Inthurn (2001, p. 52):
Um dos principais propósitos para a realização de testes pode ser considerado como sendo a busca por reduzir o risco envolvido na construção e no uso de software com erros. Apesar de não se conseguir eliminar todo o risco de desenvolver produtos com defeitos, torna-se muito importante aumentar o grau de confiança de que se está construindo um produto com o comportamento desejado.
Segundo Inthurn (2001), a alta demanda de mão de obra sem ter um pessoal qualificado faz com que, frequentemente, se gaste muito tempo e dinheiro em testes e na correção dos erros encontrados, devido especialmente ao fato de vários erros somente virem a ser detectados no final do processo de desenvolvimento.
Dentro da ótica pela qual muitos pensam em entregar o mais rápido o software, sem se preocupar com a qualidade, Janones (2010) enfatiza que isso faz com que o software volte com diversos erros encontrados, muitas vezes, pelos clientes, o que é péssimo. Desta forma, é melhor colocar um prazo real e entregar com qualidade do que correr para entregar rápido.
Partindo do pressuposto que, conforme Whittaker (2012, apud NEGRINI, 2013), “A automação é útil, quando: os resultados podem ser verificados por uma máquina, sem julgamento humano ou esperteza necessária, ou para casos onde os testes são repetitivos”. A automatização de testes, seja para diferentes plataformas, é uma alternativa viável para que com agilidade seja garantido a qualidade dos testes de software.
Diante dos desafios para as organizações, Pezzè e Young (2008) salientam que a automação é uma alavanca importante para reduzir custos e melhorar a eficiência do teste e
13
análise, mas somente se as ferramentas e abordagens se ajustarem com o esquema de desenvolvimento, processo, domínio de aplicação e técnicas de teste e análise adequados.
Perante ao advento do mercado dos dispositivos móveis nos dias presentes, conforme estudo apontado pela eMarketer (2014), cada vez mais se faz necessário garantir a qualidade dos aplicativos produzidos. Tal necessidade impulsiona com mais força a utilidade das ferramentas de teste, em especial as que permitem automação de testes voltadas para esta plataforma.
Alinhado com a busca pela qualidade das aplicações desenvolvidas, o termo Cloud Computing (computação na nuvem) está se tornando uma das palavras chave na indústria de tecnologia da informação, o que Taurion (2009, p. 2) define basicamente como “um conjunto de recursos como capacidade de processamento, armazenamento, conectividade, plataformas, aplicações e serviços disponibilizados na internet”. Partindo desse princípio, Caetano (2012) afirma que o uso da nuvem, como laboratório virtual de testes, potencializa a profundidade, amplitude e a escala do teste de software, podendo fazer o uso de diversas combinações de infraestrutura e dispositivos.
1.1 PROBLEMÁTICA
Compreende-se que, para ter um software de qualidade, é necessário planejamento e pessoas qualificadas e que conheçam as metodologias dos processos de testes para atender o seu maior objetivo, conforme destaca Bartié (2002, p. 54), “encontrar falhas em todo o ciclo de desenvolvimento do projeto de software”, assim como as empresas precisam estar dispostas e equiparadas para aprimorar e desenvolver um setor de qualidade, conforme cita Bartié (2002).
Seguindo a linha da garantia da qualidade em desenvolvimento de software nos dias atuais, como as organizações poderão manter a premissa de desenvolver e entregar software para os usuários de forma ágil e respeitando o que foi requisitado para dispositivos móveis, com o universo e a grande variedade de modelos de dispositivos móveis no mercado?
De acordo com Lobão (2014), os recursos necessários para abranger a gama de diferentes dispositivos da forma convencional seriam inviáveis, o que demandaria uma grande equipe e financiamento que possivelmente as empresas não teriam, como consequência disso a garantia da qualidade não tem uma atuação tão influente. Imagine de forma rápida e objetiva, o custo e investimento anual das empresas na compra dos novos dispositivos que são lançados
14
no mercado, como também demandaria o apoio e contratação de mais colaboradores para operar estes dispositivos.
De acordo com artigo publicado pela eMarketer (2014), o número de usuários de smartphones em todo o mundo irá superar 2 bilhões em 2016, ou seja, mais de um quarto da população mundial irá utilizar smartphones nesse período. Previsões, segundo a eMarketer, indicam que, em 2018, mais de 2,56 bilhões de pessoas irão utilizar esse tipo de aparelho.
Diante desta crescente ascensão dos smartphones, a pergunta que permeia a pesquisa é como é possível garantir a qualidade dos softwares desenvolvidos para esta plataforma, através de técnicas de automatização de testes funcionais, garantindo desta forma o real desempenho das funcionalidades implementadas perante a grande variedade de modelos de smartphones presentes no mercado?
1.2 OBJETIVOS
Os objetivos desta monografia são divididos em objetivo geral e específicos.
1.2.1 Objetivo geral
O objetivo deste trabalho é apresentar uma alternativa para uma melhoria da qualidade do software desenvolvido em diversos modelos de smartphones, utilizando técnicas de elaboração e execução de scripts de teste automatizados emulando diferentes modelos de smartphones através de serviços na nuvem.
1.2.2 Objetivos específicos
Como objetivos específicos, tem-se:
● estudar metodologias e processos de teste automatizado;
● pesquisar e apresentar ferramenta de desenvolvimento de testes automatizados para smartphones;
● pesquisar e apresentar serviços na nuvem de execução dos scripts de testes automatizados para smartphones, sob a perspectiva da experiência do dispositivo alvo a ser testado;
15
● demostrar a integração entre a execução de scripts de teste automatizados e serviços na nuvem;
● apresentar as considerações dos autores sobre a automação de testes realizadas.
1.3 JUSTIFICATIVA
A medida que a demanda crescente de novos e diferentes modelos de smartphones, alinhado aos objetivos competitivos de cada organização para garantia da qualidade de suas aplicações, faz com que as empresas empenham-se em buscar novas tecnologias para a solução dos testes de suas aplicações, que, para Campos (2008), a constante procura pela qualidade se tornou um atividade essencial dentro das empresas.
Bernardo e Kon (2008) afirmam que a automação dos testes dá segurança à equipe para fazer alterações no código, seja por manutenção, refatoração ou até mesmo para adição de novas funcionalidades. Além disso, representar casos de teste, através de programas, possibilita a criação de testes mais elaborados e complexos, que poderão ser repetidos identicamente inúmeras vezes e a qualquer momento.
Equivalente a este pensamento, Bartié (2002, p.51) ampara a automação de teste da seguinte maneira:
Apesar de sabermos que um processo 100% automatizado é difícil de se alcançar, devemos investir o máximo que pudermos na automação dos processos de teste. Isso porque a utilização de procedimentos manuais durante o processo de teste não é recomendada, já que se trata de um modelo extenuante e “não confiável”.
As vantagens para utilização da automação de testes junto aos serviços na nuvem, de acordo com Lobão (2014), tem demostrado um interessante e atrativo custo-benefício, com enfoque na economia de tempo e nos recursos utilizados na execução dos testes, uma vez que é possível emular diferentes dispositivos em larga escala, possuindo uma gama de inúmeras possibilidades viáveis para execução de testes através dos serviços de simulação na nuvem. Desta forma, é possível realizar a execução dos scripts de teste repetidas as vezes em um número diversificado de dispositivos.
Diferentemente da prática em que o testador deve dispor de uma carteira de dispositivos reais, e que quando necessitar executar algum teste, deverá instalar tal dispositivo no seu ambiente de testes e assim iniciar a execução. Essa prática torna a atividade de configuração onerosa, custosa e demanda tempo sempre que for exercida. Também, há a
16
possibilidade da emulação do dispositivo localmente no computador do testador, porém deve-se dispor de um bom equipamento de hardware, dado que a emulação de um dispositivo, é algo que demanda de um bom processamento.
Por tanto caminhando na vertente da economia de recursos e tempo, investir em automação de testes e apostar na utilização de serviços de emulação de dispositivos móveis na nuvem para os produtos de uma organização, tem se mostrado uma boa prática que deve ser olhada com uma perspectiva propícia e favorável à garantia da qualidade.
1.4 ESTRUTURADAMONOGRAFIA
Este trabalho está dividido em seis capítulos. A seguir, é apresentada a sua estrutura:
● Capítulo 1 – Introdução: apresenta a introdução, problemática, os objetivos e a justificativa do trabalho;
● Capítulo 2 – Revisão bibliográfica: este capítulo apresentará temas relacionados à Qualidade, Processos, Testes de software e automação de testes;
● Capítulo 3 – Metodologia: apresentação da metodologia de pesquisa, a proposta da solução e as delimitações do projeto;
● Capítulo 4 – Modelagem: este capítulo apresentará a proposta de teste, modelagem dos casos de teste, definição do processo de teste e escolha das ferramentas utilizadas neste trabalho; ● Capítulo 5 - Desenvolvimento: este capítulo apresentará o desenvolvimento dos scripts de teste e execução da proposta de teste;
● Capítulo 6 – Conclusões finais: este capítulo apresenta as conclusões deste trabalho e sugestões para trabalhos futuros.
17
2 AUTOMAÇÃODETESTESDESOFTWAREEMDISPOSITIVOSMÓVEIS
Como parte efetiva deste capítulo, será demonstrada a fundamentação teórica sobre os temas de domínio como qualidade de software, engenharia de software, automação de testes e serviços na nuvem.
2.1 QUALIDADEDESOFTWARE
Testes de software nem sempre foram vistos com bons olhos e como uma alternativa relevante para a garantia da qualidade. Observando o processo de testes que, após a codificação, que, por sua vez, é uma tarefa árdua e que demanda esforço por parte de quem executa, os desenvolvedores, encima do que havia de codificado, simulavam diversos testes a fim de estressar e mitigar o software desenvolvido, chegando a conclusão de que o que foi codificado é o que realmente foi concebido e desejado. Nas décadas passadas, os programadores desenvolvedores de software demandavam na maior parte do tempo na codificação dos programas e nos testes de unidade. (PRESSMAN, 2011).
Na linha que tange o que é qualidade e seu conceito, a NBR ISO 8402 diz que "A totalidade das características de uma entidade que lhe confere a capacidade de satisfazer às necessidades explícitas e implícitas", é sempre um desafio para as organizações, conciliar e determinarem juntos o que de real necessidade para o cliente. Muitas vezes, nas entrelinhas, são omitidos requisitos e necessidades do cliente pelo motivo que as informações não estavam claras e de bom entendimento. Como definição, satisfazer as necessidades explícitas são como os requisitos, que, por sua vez, são bem estruturados e elaborados de forma que norteiem quem vai atender as demandas. Já as implícitas, que precisam de mais atenção e esforço por parte de quem desenvolverá, tendo em vista que é de necessidade do cliente, mas que por algum motivo não foi abstraído para a forma explicita.
Para Pressman (2011), para que a qualidade de software seja garantida e não somente uma idéia ou desejo que uma organização venha a ter, o autor descreve alguns ofícios sobre qualidade de software:
1- Definir explicitamente o termo qualidade de software, quando o mesmo é dito; 2- Criar um conjunto de atividades que irão ajudar a garantir que cada produto de trabalho da engenharia de software exiba alta qualidade; 3 - Realizar atividades de segurança da qualidade em cada projeto de software; 4- Usar métricas para
18
desenvolver estratégias para a melhoria de processo de software e, como conseqüência, a qualidade no produto final. (PRESSMAN, 2011, p. 193)
Sendo assim, a busca constante e objetiva pela qualidade não se faz apenas no início do projeto ou no final realizando testes, mas sim em um processo que visa e tem como objetivo e produto abranger toda a engenharia de software, bem como a colaboração de todos os membros do time do projeto.
Já para Bartié (2002, p.16), "Qualidade de software é um processo sistemático que focaliza todas as etapas e artefatos produzidos com o objetivo de garantir a conformidade de processos e produtos, prevenindo e eliminando defeitos". Bartié (2002), ainda, reforça que, para se produzir softwares com qualidade, é necessário investir em qualidade em todos os pontos do processo de produção de software, tornando dessa forma para o autor impossível de obter qualidade com processos de desenvolvimento frágeis e deficientes.
Enquanto Inthurn (2001, p. 22) aborda de forma mais ampla a qualidade de software como “um conjunto de propriedade a serem satisfeitas de modo que o software atenda às necessidades de seus usuários”, a autora defende também que a qualidade é um fator de competividade e se mostra cada vez mais presente no plano estratégico das organizações.
No contexto do desenvolvimento de software, Morais(2010) entende qualidade como:
[...] um conjunto de características a serem satisfeitas, de modo que o produto de software atenda às necessidades de seus usuários. Entretanto, tal nível de satisfação nem sempre é alcançado de forma espontânea, devendo ser continuamente construído.
Segundo Morais(2010) atualmente, muitas instituições têm se preocupado em criar normas para permitir o desenvolvimento de softwares de qualidade. O Quadro 1 a seguir demonstra uma visão geral com as principais normas nacionais e internacionais nesta área.
19
Quadro 1 - Principais normas nacionais e internacionais de qualidade
Fonte: Morais, 2010.
Para cada autor, tem-se diversas definições e formas de assimilar a definição de qualidade de software, tornando o conceito de qualidade um conjunto de variáveis, de como desenvolver e conceber um produto que esteja de acordo com o que foi solicitado, mesmo que tais requisitos tenham se estabelecido por meio implícito, mas que de alguma forma precisam que sejam desenvolvidos e atendidos, atendendo a expectativa do cliente dentro do que foi acordado inicialmente.
20
2.2 ENGENHARIADESOFTWAREEGESTÃODEQUALIDADE
A Engenharia de Software, definido por Pressman (2011, p. 39), "é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em máquinas reais". Tal definição é semelhante e pode-se assimilar com a garantia da qualidade de software que diversos autores propõem, igualando-se nas atribuições de que o produto desenvolvido deva seguir o que foi acordado entre cliente e desenvolvedor.
A Engenharia de Software visa à criação de produtos de software que atendam as necessidades de pessoas e instituições e, portanto, tenham valor econômico. Para isso, usa conhecimentos científicos, técnicos e gerenciais, tanto teóricos quanto empíricos. Ela atinge seus objetivos de produzir software com alta qualidade e produtividade quanto é praticada por profissionais treinados e bem informados, utilizando tecnologias adequadas, dentro de processos que tirem proveito tanto da
criatividade quando da racionalização do trabalho. Filho (2008).
Para Sommerville (2003, p.5), Engenharia de Software é “uma disciplina da engenharia que se ocupa de todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até a manutenção desse sistema, depois que ele entrou em operação”.
Rohden (2009) demonstra em seu artigo que a qualidade é o que motiva os desenvolvedores usarem dos processos expostos pela área da Engenharia de Software. Esses processos, segundo o autor, buscam o mesmo objetivo, a qualidade do software. Esta qualidade vai desde a fase de desenvolvimento até a entrega do software. É fundamental, segundo Falbo (2005, apud ROHDEN, 2009) “[...], que a qualidade seja incorporada ao produto ao longo de seu processo de desenvolvimento. E que, de fato, a qualidade dos produtos de software depende fortemente da qualidade dos processos usados para desenvolvê-los e mantê-los.”.
Através dessas afirmações, é possível observar a relação proximidade entre as áreas de engenharia de software e gestão da qualidade dos produtos de softwares desenvolvidos.
No que diz respeito à gestão da qualidade, Pressman (2011, p. 39) aborda o seguinte:
A gestão da qualidade ajudam a promover uma cultura de aperfeiçoamento contínuo de processos, sendo esta a cultura que no final das contas sempre leva ao desenvolvimento de abordagens cada vez mais efetivas na engenharia de software. Portanto, podemos notar que a parte fundamental que sustenta a engenharia de software é o foco na qualidade, como mostrado na figura 1 abaixo.
21 Figura 1 - Camadas da Engenharia de Software
Fonte: Pressman, 2011.
Deixando claro e evidenciado de forma objetiva, Pressman (2011, p. 39) cita que “A engenharia de software está fortemente ligada com a noção de qualidade.” Sendo assim, percebemos tanto nas afirmações como na imagem acima, que a qualidade de software e engenharia de Software estão fortemente acopladas, e que a função de uma é o objetivo de outra.
Na figura 1 acima, Pressman (2011, p. 39) apresenta:
Uma camada de processos que é a responsável por manter as camadas de tecnologia coesas e também é quem possibilita o desenvolvimento de software de forma racional e dentro do prazo. O processo define uma metodologia que deve ser estabelecida para que possamos ter uma entrega efetiva. O processo também é a base para o controle do gerenciamento de projetos de software, permite aplicar métodos técnicos, produzir diferentes produtos como modelos, documentos, mudanças, etc, e por fim estabelece marcos, garantia da qualidade e gerir mudanças de forma apropriada.
Temos também uma camada de métodos que é responsável por fornecer informações técnicas para desenvolver software. Os métodos envolvem diversas tarefas como: comunicação, análise de requisitos, modelagem de projeto, construção de software, testes e suporte.
Por fim, as ferramentas são responsáveis por fornecer suporte automatizado ou semi-automatizado para o processo e os métodos.
Desta forma, para cada processo na engenharia de software em sua forma genérica, é de importância para a organização e controle no desenvolvimento do produto para que os resultados desejados sejam alcançados com efetividade.
2.3TESTEDESOFTWARE
Para Bartié (2002, p.22), “Teste é um processo sistemático e planejado que tem por finalidade única a identificação de erros”. Entretanto, Bartié (2002, p.22) ressalta que os “[...] testes podem ser usados para mostrar a presença de erros, mas nunca a sua ausência.”. Dessa
22
forma, por mais bem feito que o teste seja feito, ele jamais conseguirá cobrir todas as infinitas combinações presentes em um ambiente de execução real.
Teste de software é definido por Inthun (2003, p. 51) como:
[...] uma das áreas da Engenharia de Software e tem como objetivo aprimorar a produtividade e fornecer evidências da confiabilidade e da qualidade do software em completo a outras atividades de garantia ao longo processo de desenvolvimento de software.
Rios e Moreira (2013, p. 10) apresentam algumas definições sobre o que é teste de software, conforme o quadro a seguir:
Quadro 2 - Definições de teste de software
Verificar se o software está fazendo o que deveria fazer, de acordo com seus requisitos, e não o que não deveria fazer. (Rios e Moreira, 2013);
Processo de executar um programa ou sistema com a intenção de encontrar defeitos (teste negativo) (Glen Myers,1979);
Qualquer atividade que a partir da avaliação de um atributo ou capacidade de um programa ou sistema seja possível determinar se ele alcança os resultados desejados (Bill Hetzel,1988);
Fonte: Rios e Moreira, 2013.
Para Dias Neto (2008), “Teste de software é o processo de execução de um produto para determinar se ele atingiu suas especificações e funcionou corretamente no ambiente para o qual foi projetado”. Dessa forma, Dias Neto (2008) menciona que o objetivo do teste de software é revelar falhas em um produto e, assim, possam ser reparadas pela equipe de desenvolvimento antes da entrega do produto.
Conforme observado por diferentes visões do teste de software, é mais fácil provar que algo funciona do que provar que algo não funciona, logo, é mais fácil provar o funcionamento do software do que o contrário. (Bartié ,2002). A Figura 2, a seguir, demostra essa afirmação:
23 Figura 2 - Visões dos testes por perspectivas diferentes
Fonte: Bartié, 2002.
Ao tratar de teste de software, é possível observar também uma forte relação com os conceitos de Qualidade de Software. Não que esses conceitos sejam sinônimos, porém o nível da qualidade dos testes é importante para definir o nível de qualidade do produto final, influenciando no processo de desenvolvimento de software. (RIOS e MOREIRA, 2013).
Diferentes definições de teste de software poderiam ser mencionadas, no entanto observa-se, nas referências acima, que a essência do teste de software é o processo que visa a sua execução de forma gerenciável, com o objetivo de avaliar o comportamento do produto com base no que foi especificado.
2.3.1 Conceitos associados ao teste de software
Para compreender os conceitos de Testes em software, é necessário esclarecer alguns dos principais conceitos referente a esta atividade, como defeitos, erros e falhas. Embora evoquem ideias similares, a diferença entre estes conceitos segue abaixo, conforme a nomenclatura padrão para engenharia de software do IEEE - Institute of Electrical and Electronics Engineers – (IEEE 610, 1990, apud DIAS NETO, 2008).
- Defeito é um ato inconsistente cometido por um indivíduo ao tentar entender uma determinada informação, resolver um problema ou utilizar um método ou uma ferramenta. Por exemplo, uma instrução ou comando incorreto.
24
- Erro é uma manifestação concreta de um defeito num artefato de software. Diferença entre o valor obtido e o valor esperado, ou seja, qualquer estado intermediário incorreto ou resultado inesperado na execução de um programa constitui um erro. - Falha é o comportamento operacional do software diferente do esperado pelo usuário. Uma falha pode ter sido causada por diversos erros e alguns erros podem nunca causar uma falha.
Na Figura 3 abaixo, o detalhamento gráfico apresenta de forma simplificada a identificação dos casos.
Figura 3 - Defeito, erro e falha
Fonte: Neto, 2008.
Desta forma, a Figura 3 isola em segmentos cada identificação, tem-se que defeito é caracterizado por uma instrução ou comando incorreto, já para o erro exemplificado pelo desvio da especificação e a falha decorrente de um processamento incorreto ou comportamento inconsistente.
2.3.2 Processo de teste de software
De acordo Eliza e Lagares (2012), um Processo de Teste de Software tem como objetivo “[...] estruturar as etapas, as atividades, os artefatos, os papéis e as responsabilidades do teste, permitindo organização e controle de todo o ciclo do teste, minimizando os riscos e agregando valor ao software.”
Conforme Crespo et al., (2010, p.5), o processo de teste de software, é um conjunto de passos, preferencialmente ordenados, compostos por atividades, métodos e práticas usadas para testar um produto.
25
Bartié (2007) defende a representação do processo de teste de software como “Uma estruturação de etapas, atividades, artefatos, papéis e responsabilidades que buscam a padronização dos trabalhos e ampliar a organização e controle dos projetos de testes.”. Essa estruturação do processo de testes de software, é detalhada na Figura 4, na qual especifica as etapas em colunas e os balões cada processo dentro do macro processo de teste de Software.
Figura 4 - Processo de Teste de Software
Fonte: Bartié ,2007.
Assim, a estruturação do processo tem como intuito diminuir a quantidade de erros apresentados durante o projeto de software. Porém, para que isso seja possível, a definição dos objetivos do que deve ser testado deve ser bem preciso. Durante processo, as melhores técnicas devem ser escolhidas, e a equipe que irá desempenhar os respectivos papeis dento desse processo deverá estar qualificada para executá-lo. (ELIZA e LAGARES ,2012).
Para Bartié (2007), o Processo de Teste, assim como qualquer outro processo, deve passar por constantes avaliações, possibilitando ampliar sua atuação e uma maior visibilidade
26
aos profissionais de organização dos seus trabalhos, resultando em uma maior agilidade e controle operacional dos projetos de testes.
Pezzè e Young (2008, p.36) consideram os seguintes benefícios na aplicação de um processo de software:
Melhorar um produto de software (através da prevenção, detecção e remoção de erros), avaliar a qualidade de um produto de software (em relação a metas explícitas de qualidade) e melhorar a qualidade e rentabilidade a longo prazo do processo da qualidade em si. Cada objetivo requer a integração de atividades de garantia da qualidade e de melhoria no processo de desenvolvimento como um todo, desde a concepção do produto e ao longo de sua instalação, evolução e remoção.
Embora o processo de teste seja de extrema importância para o desenvolvimento de software, Inthurn (2001) ressalta que a detecção de erros somente no processo final de desenvolvimento ocasiona muito gasto de tempo e dinheiro para as organizações desenvolvedoras de software para corrigir esses erros. Dessa forma, faz-se necessário aplicar processos de teste em diferentes fases de desenvolvimento, a fim de que o produto alcance o nível de qualidade desejado. Tozelli (2008) cita que a medida que o processo de desenvolvimento de software avança, o processo de teste avança conforme o desenvolvimento da das atividades de requisitos, protótipos, modelo de dados lógico, modelo de dados físico, código-fonte, módulos funcionais e finalmente um sistema.
Através desses conceitos, é possível perceber que a implantação deste processo permite que o teste deixe de ser considerado uma atividade secundária, passando a ser um processo próprio, possuindo atividades específicas geradoras de artefatos, tornado possível avaliar da qualidade do software desenvolvido. (ELIZA e LAGARES, 2012).
2.3.3 Categorias de teste de software
Durante a etapa de planejamento do processo de teste software faz-se necessário analisar quais categorias de testes serão aplicadas no produto a ser testado, proporcionando assim a equipe de teste gerir o seu trabalho de maneira mais objetiva. Cada categoria de teste possui um objetivo específico a ser alcançado, Bartié (2002) classifica as categorias de teste da seguinte forma:
27
Também conhecido como teste funcional, esta categoria de teste é tida como “Caixa Preta”, pois se baseia somente nas funcionalidades, não se preocupando como as mesmos foram implementadas, tratando basicamente os dados de entrada e os resultados produzidos. Meira (2011).
Segundo Bartié (2002, p.113), esta categoria tem por objetivo “simular todos os cenários de negócio e garantir que todos os requisitos funcionais sejam implementados”, ou seja, esta categoria de teste define o que a aplicação deveria fazer. RIOS e MOREIRA (2013) citam ainda que, nesta categoria de teste, os valores extremos que examinam as delimitações do software devem ser considerados;
b. Teste de Usabilidade
Para RUB (94, apud Ferreira 2002 p.11) “O teste de usabilidade é um processo no qual participantes representativos avaliam o grau em que um produto se encontra em relação a critérios específicos de usabilidade”. Assim, essa categoria busca simular as condições de utilização sobre a visão do usuário final, visando questões como navegabilidade e entendimento da interface;
c. Teste de Carga (stress)
Para Rousse (2007), o teste de carga tem como função simular e determinar a capacidade da utilização do software, promovendo oscilações nas transações de dados, analisando com a estrutura se comporta em tais condições. Bartié (2002) demostra que a ideia principal de teste é aferir como todo o conjunto da solução se comporta com estas variações de processamento;
d. Teste de Volume
Conforme Meira (2011), esta categoria busca verificar a capacidade do software “em manipular quantidades massivas de dados, seja em conexões de rede ou em acessos a sistemas gerenciadores de banco de dados, além de testes de processamento massivo de informações em memória”. Oposto ao teste de carga, este teste busca o aumento constante dos parâmetros de execução, a fim de verificar a proximidade na qual estes parâmetros estão do que foi especificado para o software;
28 e. Teste de Performance (desempenho)
Através desta categoria é possível analisar o comportamento do sistema sob a carga esperada e a carga suportada pelo sistema, prevendo sua capacidade máxima, além de planejar o ambiente para atender as demandas futuras, conforme Teixeira (2013) explica.
Assim, Bartié (2002) comenta que através dessa categoria é possível comparar o desempenho em situações na qual ocorrem picos máximos de acesso e concorrência, verificando se está plausível com os requisitos especificados para o projeto;
f. Teste de Configuração
Essa categoria de teste é considerada por Bartié (2002, p.15) como tendo como objetivo “executar o software sobre diversas configurações de softwares e hardwares”. O conceito, segundo Rios e Moreira (2013), é garantir que o software funcione adequadamente em diferente ambientes como sistemas operacionais, browsers, smartphones e tamanhos de tela;
g. Teste de Compatibilidade (versionamento)
Essa categoria de teste visa analisar a comunicação do software com outros dispositivos (software ou hardware). A ideia é garantir, conforme Bartié (2002, p.116) “[...], que as novas versões estão suportando antigas interfaces, submetendo a aplicação a trocar informações com componentes que utilizam os protocolos de versões anteriores”;
h. Teste de Segurança
Esta categoria tal qual Rios e Moreira (2013) evidenciam visa validar a eficácia de proteção do software contra acessos internos e externos não permitidos. Assim, conforme Bartié (2002), este teste tem como objetivo “[...] detectar as 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”;
i. Teste de Instalação
Para Meira (2011) e Rios e Moreira (2013), os testes de instalação possuem objetivo de verificar se o software será instalado conforme previsto em configurações de hardware e software distintas e em diferentes condições, conferindo o processo de instalação parcialmente, totalmente ou de alguma atualização do sistema;
29
j. Teste de Confiabilidade e Disponibilidade
Na opinião de Rios e Moreira (2013), esta categoria de teste busca avaliar o comportamento de um software em continuar operacional após algum elemento ficar inoperante ou parar de funcionar. Para Bartié (2002, p. 118), “Esse teste visa detectar quando uma interrupção foi produzida por uma falha da infraestrutura (confiabilidade) e contabilizando o tempo necessário para resolução deste problema (disponibilidade)”;
k. Teste de Recuperação
Conforme Rios e Moreira (2013, p. 19), este tipo de teste “Valida a capacidade e qualidade da recuperação após crashes, falhas de hardware ou outros problemas catastróficos”. Desse modo, esta categoria tem por foco aferir o comportamento do software após um incidente de erro ou de situações anormais, tal qual Bartié (2002) instrui;
l. Teste de Contingência
Esta categoria de teste visa validar as medidas de contingência que serão utilizadas em determinadas situações previstas durante o planejamento do software. Assim, o teste busca verificar a eficácia destes procedimentos. (Bartié, 2002);
2.3.3.1 Priorização das categorias de teste
Durante o processo de execução dos testes de software, é necessário compreender sobre a existência da relação entre custo x benefício dos testes realizados. Conforme Bartié (2005), as categorias mais importantes são aquelas que devem garantir as funcionalidades indispensáveis do software. Desta forma, é necessário decidir onde aplicar os esforços nas categorias de teste software propostas. Todos os esforços do trabalho de teste devem se concentrar nas categorias de maior importância, enquanto os testes nas outras categorias devem ser realizados em um segundo momento, quando possuir tempo e recursos para tal execução. O Quadro 3 abaixo, descreve um paralelo entre as características da aplicação versus o seu grau de importância.
30
Quadro 3 - Priorização das categorias de teste
Fonte: Bartié, 2005.
2.4AUTOMAÇÃODETESTEDESOFTWARE
Há diversos fatores envolvidos na prática de automação de testes de software, muitos entendem que automação de testes é uma metodologia de processo e tentam implementar tal prática a todo custo na organizações a fim de garantir qualidade. Porém, quando se deparam e entendem melhor a ótica da questão, começam a priorizar e decidir o que realmente é viável. (COLLINS, 2015).
A automação de testes de software é algo novo, mas que está em plena ascensão, conforme cita Caetano (2015), “Muitos dos sucessos nos projetos de automação de testes são decorrentes de processos empíricos de tentativa e erro.” Nem sempre o que as organizações buscam é o que precisam ou o que estão esforçadas a seguirem tal visão.
Se bem utilizado e aplicado, a automação de testes traz diversos benefícios e agilidades, tornando o desenvolvimento de software algo mais preciso e de acordo com o que foi requisitado e concebido. Segundo Martini (2015),
A automação de testes traz diversas vantagens: é mais rápido, diminui a chance de erro humano (mas é preciso atentar para que os scripts não apresentem falhas) e reduz o esforço com tarefas repetitivas, liberando os testadores para atividades que exijam raciocínio humano.
Vale lembrar que, não é comum que os casos de testes manuais que sejam eficiente sejam direcionados aos scripts de testes para automação, as dinâmica e os
31
comportamentos entre as duas técnicas de testes são distintas e não possuem relações ambíguas, no entanto, é possível e factível a criação de scripts de testes tão complexos quanto aos testes manuais, conforme cita Caetano (2015).
A ausência de procedimentos de testes automatizados no desenvolvimento de software acaba tornando o trabalho do testador extenuante. Segundo Bartié (2002), toda vez que uma funcionalidade é modificada, as outras funcionalidades devem ser testadas, exigindo um grande esforço de repetição. Isso acaba ocasionando na redução de cenários testados e na diminuição do nível de cobertura. Decorrente disso, a probabilidade de identificar novos erros acaba diminuindo, refletindo no custo e na confiabilidade do processo.
Ainda que diligentes e bem-intencionados, os humanos são lentos e sujeitos a erros quando lidam com tarefas repetidas. Por outro lado, tarefas simples e repedidas normalmente são fáceis de automatizar, enquanto que julgamento e solução criativa de problemas permanecem fora do domínio da automação. [...] Automatizar as partes repetidas de uma tarefa não apenas reduz custos, mas melhora a precisão. Pezzè e Young (2008, p. 468).
Um ponto importante na automação de testes, é o que automatizar, essa questão engloba diversas vertentes e que se bem aplicados possuem um retorno promissor e de sucesso, porém, pelo contrário, o erro e o mau planejamento na decisão dos pontos do que automatizar pode comprometer o sucesso da aplicação. Não apenas no sucesso da aplicação, mas também nos gastos e esforços desnecessários investidos na tarefa. (COLLINS, 2015).
A decisão do que automatizar deve ser tomada encima do que é mais crítico, para melhor organização, foram agrupados em áreas conforme Caetano (2015):
Smoke Tests: Um conjunto mínimo de testes é selecionado com o objetivo de validar um Build ou liberação antes do início de um ciclo de testes;
Testes de Regressão: Os testes são selecionados com o objetivo de executar o re-teste de uma funcionalidade ou da aplicação inteira;
Funcionalidades Críticas: Os testes são selecionados com o objetivo de validar as funcionalidades críticas que podem trazer riscos ao negócio;
Tarefas Repetitivas: Os testes são selecionados com o objetivo de reduzir o envolvimento dos testadores em atividades manuais repetitivas e suscetíveis a erros, tais como cálculos matemáticos, simulações, processamentos, comparações de arquivos ou dados, etc.
Dentre as áreas, conforme citado acima, há os tipos de testes que podem ser realizados através da automação, como testes funcionais de interface, testes de desempenho, testes de estresse, testes de segurança, segundo elucida Crowd (2015).
32 2.4.1 Testabilidade
A automação de testes de software não possui suas competências isoladas, é preciso que, para o sucesso e bom uso da automação de testes seja efetiva, deve haver a testabilidade no software, conforme cita Tannouri(2015): “A Testabilidade examina as diferentes probabilidades e características comportamentais que levam o código a falhar se alguma coisa estiver incorreta.”. Sendo assim, para o autor desta afirmação, a testabilidade está alinhado e engajado com a qualidade da aplicação.
Os níveis de testabilidade de uma aplicação podem ser definidas e entendidas conforme a apresentação de falhas durante a execução de testes. Conforme Tannouri(2015),
Um programa tem alta testabilidade se ele tende a expor suas falhas durante os testes com entradas que geram defeitos. Um programa tem baixa testabilidade se ele tende a ocultar as falhas detectadas durante os testes, produzindo saídas corretas para entradas que geram defeitos.
Seja por execuções manuais ou execuções automatizadas de testes, é importante e indispensável requisitos bem documentados, detalhados, objetivos e que estão alinhados e de acordo com o que se espera de produto final para o software. É com esses requisitos e documentos que o testador ou automatizador de testes irá desenvolver os testes manuais e os scripts de testes automatizados. (MIGUEL, 2015).
Tanto em aplicações já desenvolvidas quanto em novas a serem desenvolvidas, algumas alterações serão pertinentes e necessárias, para que tenha uma testabilidade alcançada. Como cita Caetano (2015), “Normalmente é necessário realizar modificações na aplicação para torná-la mais fácil de testar. Essas modificações têm o objetivo de incorporar um conjunto de mecanismos que facilitam a observação e o controle do estado dos componentes internos da aplicação.”.
2.5FERRAMENTASDEAUTOMAÇÃODETESTEDESOFTWARE
Existem diferenças significativas e peculiares no contexto da automação de testes de software para smartphones e aplicações desktop ou web. Grande parte dos smartphones possuem recursos que os tornam mais robustos e que engrandecem suas funções, no entanto, isso tem-se tornado um desafio para a automação de testes para smartphones, umas vez que os aplicativos, nativos ou híbridos, vêm utilizado desses recursos e que tais ferramentas
33
de automação devem ser capazes utilizar as funcionalidades da aplicação, a fim de garantir uma maior cobertura de testes. (Farto e Endo, 2015).
Conforme Pezzè e Young (2008), a automação de teste é uma recurso importante para reduzir custos e melhorar a eficiência no processo de teste. Todavia deve ser analisado se as ferramentas utilizadas para a automação de teste se enquadram com o processo de desenvolvimento, com domínio da aplicação e com as técnicas de teste e análise adequada.
Atualmente, existem diversas ferramentas para automação de testes para smartphones, dentre elas, foram selecionadas três ferramentas que atendem os princípios de automação de testes para smartphones.
2.5.1 Robotium
Segundo o próprio fabricante desenvolvedor, Robotium foi desenvolvido em 2010 por Renas Reda, uma autoridade internacional no processo de automação de teste.
Existem diversos frameworks de automação para Android. Entre os que estão em destaque existe o Robotium que tem uma API muito clara e objetiva, além de proporcionar a criação e execução de testes quando possuímos ou não acesso ao
código-fonte da aplicação. Nogueira (2015).
O Robotium teve o seu desenvolvimento e foi apoiado por diversos desenvolvedores, tendo como suporte a documentação dedicada a ele altamente ativa. Conferindo e por se tratar de um projeto consolidado, atualmente diversas empresas pelo mundo o utilizam, segundo o próprio fabricante Robotium.
Figura 5 - Logo Robotium
Fonte: Robotium, 2015.
Ainda conforme Nogueira (2015), Robotium "é um framework de automação de teste para a plataforma Android que suporta aplicações híbridas e nativas". Lembrando que a capacidade de testes desse framework é do tipo caixa preta ou caixa branca, com interface
34
amigável o que torna possível de utilização para usuários sem um conhecimento avançado em programação de scripts de testes.
Elucidando os pontos positivos, Luzzi (2015) cita que há uma comunidade de suporte dispostos a compartilharem experiências e, caso seja necessário, contar com esses recursos para possíveis deficiências na utilização. Outro fato, ainda, o Robotium não demanda de instalação e utiliza da linguagem de programação JAVA, permitindo um universo de possibilidades.
As possibilidades com o Robotium são bem arrojadas e robustas, atendendo as necessidades do dia a dia da criação de scripts de automação de testes. Como elucida NOGUEIRA (2015), com esta ferramenta é possível:
- testar aplicações Android nativas e híbridas;
- requer um mínimo de conhecimento da app alvo dos testes; - trabalhar com múltiplas apps automaticamente;
- escrever scripts automatizados de forma rápida;
- entender melhor o scripts automatizado, uma vez que dispõe de comandos mas legíveis;
- execução mais rápida em comparação com o Android Testing Framework;
- integrar o código com ferramentas de build como Maven, Gradle ou Ant para execução em integração contínua.
A Partir dessas potencialidades que esta ferramenta permite realizar, é notável a gama de possibilidades que está à disposição dos testadores, analistas de qualidade e, entre outros. Não parando por aqui, ainda há algumas outras aplicabilidades em que é possível utilizar o Robotium, como evidencia Nogueira (2015):
- captura de Screenshot: isso só pode ser feito se existir uma permissão de escrita no app alvo dos testes e, se o dispositivo for virtual, possuir um SDCard montado; - suporte a aplicações híbridas: desde a versão 4.0 do Robotium é possível interagir com elementos web;
- testes em aplicativos pré-instalados: é possível testes aplicativos que já estejam instalados na plataforma Android.
O Robotium é um dos diversos frameworks disponíveis para implementação de scripts de testes automatizados, assim como o Calabash a seguir.
35 2.5.2 Calabash
Está é mais uma ferramenta de automatização de testes para smartphones, com enfoque no open source, é totalmente gratuito. Calabash, Figura 6, foi desenvolvida e é mantida pela Xamarin, que também detém um leque de outras ferramentas e serviços na nuvem para tal finalidade.
Figura 6 - Logo Calabash
Fonte: Calabash, 2015.
Seguindo a premissa de ser versátil e garantir uma série de possibilidades, é possível automatizar testes para iOS ou Android, para aplicativos nativos ou híbridos. De acordo com Nogueira (2015), “O Calabash utiliza a técnica de BDD - Behavior Driven Development para viabilizar a criação e execução dos scripts de teste.”
Alinhado ao BDD, a ferramenta faz com que a interação e a troca de informações entre o time de desenvolvimento seja dinâmico e claro, de modo simples e preciso. Ainda, Nogueira (2015) cita outros pontos positivos ao Calabash em conjunto ao BDD:
- trabalha com os moldes de teste de aceitação, que é uma documentação clara do que deve ser desenvolvido e entregue;
- é ligado com a especificação da funcionalidade, sendo esta uma especificação executável apresentando os pontos de falha na execução do teste de forma clara e direta.
Segundo a Xamarin, Calabash tem integração com Cucumber, isso faz com que a linguagem dos scripts sejam facilmente entendida e assimilada por pessoas que não sejam os testadores ou técnicos na área. Além disso, por ser baseado na linguagem de programação Ruby, é possível ser utilizado para escrever testes funcionais e de aceitação automatizados, usando qualquer outro framework de mesma linguagem.
36 2.5.3 Appium
Desde 2012, assim como as outras ferramentas demonstradas acima, Appium, Figura 7, também é uma ferramenta de automatização de testes para dispositivos móveis. É uma ferramenta de código aberto e pode ser utilizada para automação de aplicações híbridas ou nativas em dispositivos com as plataformas iOS e Android, segundo o próprio fabricante desenvolvedor Appium (2015).
Um destaque que a Appium (2015) apresenta é a característica de cross-platform que, segundo eles, tal tecnologia permite desenvolver scripts de automação para as duas plataformas iOS e Android, utilizando a mesma API, desonerando a necessidade de ter que desenvolver tipos diferentes de scripts de automação conforme cada plataforma.
Figura 7- Logo Appium
Fonte: Appium, 2015.
Nogueira (2015) diz que “O Appium utiliza os próprios frameworks de teste de cada plataforma. Isso nos traz uma facilidade na escrita de código e a necessidade de não compilar com uma biblioteca específica ou não depender de nenhuma outra biblioteca.”
A arquitetura que o Appium utiliza é do tipo cliente/servidor, segundo NOGUEIRA (2015),
Appium é um servidor web que expõe uma API REST. Ele recebe conexões de um cliente (comandos de uma linguagem de programação), interpreta os comandos recebidos e executa estes comandos no aplicativo móvel (ou site mobile). Ao final uma resposta HTTP é recebida representando o resultado da execução do comando.
Os ganhos com a arquitetura que a Appium disponibiliza são os testes na nuvem, executando os scripts de automação e executar os scripts de automação de testes em outra máquina física.
Segundo Avram (2015),
Não é necessário recompilar a aplicação para testar com o Appium. Os testes podem ser escritos em diversas linguagens suportadas pelo WebDriver do Selenium, incluindo Java, Objective-C, JavaScript, PHP, Python, Ruby, C#, Clojure, Perl, Haskell, e em alguns frameworks de testes como:JUnit, RSpec, PHPUnit, Nose, Mocha, Cucumber, Capybara, Vows, entre outros.
37
Diante dessas características, o Appium tem demonstrado grande robustez e eficiência em sua finalidade, possibilitando a criação de scripts de automação de forma objetiva e útil para diversas finalidades a que se propõe.
2.5.4 Comparativo entre ferramentas
Perante as análises e breve descritivo das ferramentas de automatização de testes apresentadas acima, encontra-se no Anexo A – Quadro comparativo entre as ferramentas Appium, Calabash e Robotium, um quadro representativo com tal comparativo. Apenas uma breve síntese do quadro comparativo, que relaciona as ferramentas Appium, Calabash e Robotium, traçando um plano cartesiano entre elas elencando quesitos como, linguagem de desenvolvimento dos scripts de testes, informações de comunidades de suporte e outras informações pertinentes.
2.6NUVEM
O termo computação em nuvem (Cloud Computing), segundo (Taurion, 2009), surgiu em 2006 em uma palestra de Eric Schmidt, da Google, sobre como sua empresa gerenciava seus data centers. Atualmente, computação em nuvem se mostra como um paradigma essencial para a indústria da Tecnologia da Informação, conforme Caetano (2012) relata.
Para o National Institute of Standards and Technology, o NIST, Cloud Computing pode ser definida como:
Cloud computing é um modelo para permitir que, conveniente, acesso à rede ubíqua on-demand para um compartilhamento de pool de recursos computacionais configuráveis (por exemplo, redes, servidores, armazenamento, aplicações e serviços) que podem ser rapidamente fornecidos e liberados com um esforço mínimo de gerenciamento ou interação com o provedor de serviços. NIST (2011, p.2, tradução nossa).
Computação em nuvem pode ser definido, conforme Taurion (2009, p. 2), como “um conjunto de recursos como capacidade de processamento, armazenamento, conectividade, plataformas, aplicações e serviços disponibilizados na internet”. Para Alecrim (2008), o termo Cloud Computing pode ser definido basicamente como a possibilidade de utilizar aplicações,
38
independentemente de sua plataforma, por meio da internet com a mesma facilidade possuir elas instaladas em dispositivos localmente. Assim, a infraestrutura computacional é alocada na internet, tornando os dados, hardware e aplicações, serviços fornecidos através da internet, reduzindo custos para o usuário final, que tem a opção de optar pelo serviço apenas quando é necessário de acordo com Caetano (2012).
Conforme a NIST (2011), o modelo de nuvem é composto de cinco características essenciais, são elas:
a. Autosserviço sob demanda
Neste modelo, o consumidor deve ser capaz de alocar novos recursos automaticamente para atender suas necessidades específicas, sem interação humana com o provedor de serviços;
b. Acesso amplo via rede
Os serviços são oferecidos através da rede e devem ser acessíveis por mecanismos padrão, permitindo seu uso por diferentes dispositivos, tais como computadores pessoais, smartphones e tablets;
c. Agrupamento de recursos
Esta característica prevê que os recursos computacionais do provedor de serviços sejam utilizados com o máximo de eficácia. Assim, os serviços devem ser agrupados para servir a múltiplos clientes, arranjando e rearranjado os recursos dinamicamente, conforme a necessidade específica de cada um destes consumidores, permitindo atingir um grande número de recursos para atender as necessidade de diversos consumidores ao mesmo tempo;
d. Elasticidade rápida
Este serviço deve ter a capacidade de provisionar os recursos que devem ser alocados e liberados de forma elástica e de forma automática, em alguns casos, de acordo com a demanda do consumidor, possibilitando alocar a quantidade de recursos desejada a qualquer momento;
e. Serviços mensurados
Esse modelo de serviço de computação em nuvem deve gerenciar os recursos disponibilizados de forma automática, concedendo mecanismos para medir o consumo do recurso utilizado pelo cliente, por exemplo, quantidade de espaço de armazenamento, velocidade de comunicação, capacidade de processamento, número de usuários ativos, etc. O
39
consumidor deve poder monitorar, controlar e consultar o uso dos recursos e pegar pelo uso do serviço;
2.6.1 Serviços na nuvem
No que diz respeito a distribuição dos serviços da Computação em Nuvem, existem basicamente três tipos que são ofertados pelos fornecedores, conforme o documento apresentado pelo NIST (2011).
a. Software como Serviço – SaaS (Software as a Service - SaaS)
Pode-se dizer que o SaaS, conforme Caetano (2012) elucida, “[...] representa os serviços de mais alto nível disponibilizados em uma nuvem”. Estes serviços são as aplicações ofertadas aos clientes na camada de aplicação, que são processadas inteiramente na nuvem, tornando-se uma alternativa a execução de uma aplicação em uma máquina local.
b. Plataforma como serviço - PaaS (Platform as a Service - PaaS)
Conforme o NIST (2011), o PaaS tem como objetivo fornecer, através desta plataforma, a hospedagem e implementação de hardware e software em estrutura de nuvem.
O PaaS oferece uma infraestrutura de alto nível de integração para implementar e testar aplicações na nuvem. Também fornece um sistema operacional, linguagens de programação e ambientes de desenvolvimento para as aplicações, auxiliando a implementação de softwares, já que contém ferramentas de desenvolvimento e colaboração entre desenvolvedores. (CAETANO, 2012).
c. Infraestrutura como serviço – IaaS (Infrastructure as a Service - IaaS)
O IaaS, em conformidade com NIST (2011), oferece ao consumidor serviços disponíveis na camada de infraestrutura como armazenamento, recursos de rede e outros serviços computacionais, que garantem suporte para o PaaS e SaaS. Nesse modelo, o consumidor não gerencia a infraestrutura da nuvem, no entanto, ele tem controle sobre as aplicações hospedadas nela.
40
2.6.2 Teste na nuvem
A capacidade de processamento computacional e a infraestrutura disponibilizada pelo modelo de computação na nuvem, eleva o teste de software a outro patamar. Através destes serviços disponibilizados, uma equipe de teste pode criar um laboratório de testes virtual dispondo de centenas de dispositivos, realizar testes de desempenho simulando diferentes usuários virtuais em regiões geográficas distintas, de forma rápida e com um baixo custo de investimento. Em virtude disso, tem crescido o interesse das organizações e profissionais de testes em busca destes serviços para potencializar o teste de software. Caetano (2012).
Segundo Caetano (2012), esse novo conceito de teste de software é definido como
Cloud Testing (teste nas nuvens), e tem como objetivo usar serviços na nuvem para aumentar a
cobertura de testes ou testar as aplicações hospedados na nuvem. Para Hazrati (2011), “O Cloud
Testing é uma abordagem de testes que tira o máximo proveito das tecnologias de Cloud Computing. A técnica permite diminuir o tempo gasto na execução dos testes e simular um
nível de tráfego realista para as aplicações. ”
Conforme Caetano (2012), os testes nas nuvens podem ser classificados em duas categorias:
Teste usando a nuvem:
Nesta categoria, os recursos computacionais da nuvem são utilizados como um laboratório virtual de teste, afim de aumentar a profundidade, amplitude e a escala do teste de software.
Teste da nuvem:
Nesta categoria são compreendidos os testes em aplicações residentes nas nuvens.
2.6.3 Serviços emuladores de dispositivos móveis na nuvem
Considerado muitas vezes por ser um obstáculo e que gera uma certa vulnerabilidade nos testes, é onde encontrar e poder utilizar os diversos tipos de dispositivos móveis de forma objetiva e eficiente. Para isso, existem serviços emuladores de dispositivos móveis na nuvem, disponíveis para utilização e execução de scripts de testes automatizados. (DANTAS, 2015).