Sistema de Apoio à Geração e Automatização de Tarefas
Projeto para obtenção do grau de Mestre em Engenharia Informática e Sistemas Empresariais
Projeto realizado sob a orientação de Prof. Doutor Nuno Lopes EST/IPCA
Coorientador
Prof. Doutor João Carlos Silva EST/IPCA
Vítor Cristóvão Leal Machado - nº 2915
Escola Superior de Tecnologia Instituto Politécnico do Cávado e do Ave
21 Março 2016
Resumo
As tecnologias para automatização de tarefas são ferramentas valiosas para garantir a correta execução de processos bem como a obtenção dos resultados esperados.
Este projeto visa desenvolver uma solução para a automatização de tarefas recorrendo à captura de imagens do ecrã, à elaboração de uma sequência de ações/tarefas definidas pelo utilizador de modo a detetar falhas e garantir a obtenção dos resultados esperados no fim da execução da tarefa.
Este projeto pretende apoiar a realização de testes de software, servindo de apoio à
análise do nível de qualidade e fiabilidade de software, permitindo a redução do tempo
despendido por parte dos utilizadores/programadores na realização dos testes ou mesmo em
tarefas que se pretendam fazer.
Índice
1 Introdução ... 1
1.1 Objetivos ... 1
1.2 Perguntas de investigação ... 2
1.3 Estrutura do projeto ... 2
2 Estado da Arte ... 4
2.1 Tarefas na Interação Gráfica com o Utilizador (GUI) ... 4
2.2 Teste de Software ... 5
2.3 ConcurTaskTree (CTT) ... 7
2.4 SeleniumHQ ... 10
2.5 A Plataforma Sikuli ... 12
2.6 Automa ... 14
2.7 Cogitek RIATest 6 ... 15
2.8 Discussão ... 16
3 Sistema de apoio à criação do script ... 18
3.1 Gravação / Paragem... 19
3.2 Captura da Imagem ... 19
3.3 Execução da Script ... 20
3.4 Resultado Esperado ... 21
4 Implementação da Sistema de Apoio ... 22
4.1 Interface da Aplicação ... 22
4.2 Captura de ações de Utilizador ... 23
4.3 Funcionalidades "Espera" e "Pergunta" ... 29
4.4 Captura de Imagem e Criação do Ficheiro Computacional ... 29
4.5 Estrutura da Gravação da Imagem ... 37
4.6 Gravação do Ficheiro Computacional / Execução ... 38
4.7 Criação/Verificação das Pastas ... 39
5 Caso de Estudo ... 40
5.1 Introdução do “Post” ... 41
5.2 Inserir Informação ... 43
5.3 Verificação do "Post" ... 45
5.4 Eliminação do “Post” ... 47
5.5 Verificação da Eliminação do "Post" ... 48
6 Conclusões ... 50
6.1 Trabalho Futuro ... 51
Bibliografia ... 52
Figura 1 - Erro / Defeito / Falha (Salto na Computação, 2015) ... 6
Figura 2 - Exemplo de uma CTT (ConcurTaskTrees - Model-based User Interfaces Incubator, 2009)... 9
Figura 3 - Exemplo de uma script criada pelo SeleniumHQ ... 11
Figura 4 - Plataforma Sikuli ... 13
Figura 5 - Aplicação Automa ... 14
Figura 6 - Layout Aplicação RIATest 6 ... 15
Figura 7 - Arquitetura da Ferramenta de Apoio ... 18
Figura 8 - Layout da região de captura ... 19
Figura 9 - Janela para introdução de texto ... 20
Figura 10 - Interface gráfica da aplicação ... 22
Figura 11- Função de criação do evento para captura dos eventos Click e DoubleClick .... 24
Figura 12 - Função de criação do evento "escuta" para a capturar os eventos Click/DoubleClick ... 25
Figura 13 - Função de remover todos os eventos criados para a captura do Click/DoubleClick ... 26
Figura 14 - Função de criação dos eventos de captura do teclado ... 27
Figura 15 - Função de remover os eventos criados para a deteção dos eventos do teclado ... 28
Figura 16 - Função receção da captura dos eventos do rato ... 31
Figura 17 - Função de receção do evento Click/DoubleClick ... 32
Figura 18 - Função de tratamento do evento Click ... 33
Figura 19 - Função de abertura da região para captura da imagem ... 33
Figura 20 - Função de criação da Imagem recortada ... 35
Figura 21 - Função que simula o evento de rato invocado pelo utilizador e remove a região de captura ... 36
Figura 22 - Função de controlo do teclado aquando a captura da imagem ... 37
Figura 23 - Função responsável por efetuar o recorte da imagem ... 38
Figura 24 - Adiconar novo post no WordPress ... 40
Figura 25 - Script de introdução de novo "Post" ... 41
Figura 26 - Inserção do título do "Post" através da funcionalidade "Pergunta" ... 42
Figura 27 - Inserção do corpo do "Post" através da funcionalidade "Pergunta" ... 42
Figura 28 - Inserção do "Post", confirmação de tarefa terminada ... 43
Figura 30 - Inserção de um novo comentário ... 44
Figura 29 - Script para a criação de um novo comentário ... 44
Figura 31 - Tarefa de inserção de um comentário terminada ... 45
Figura 32 - Janela de escolha do tipo de verificação ... 45
Figura 34 - Verificação do texto do "Post" introduzido ... 46
Figura 33 - Script para validação do "Post" ... 46
Figura 35 - Tarefa de remover "Post" ... 47
Figura 36 - Script para remover o "Post"... 48
Figura 37 - Execução da verificação do "Post" ... 49
Tabela 1 - Operadores Temporais de um CTT ... 10
1
1 Introdução
A qualidade de software é uma área de conhecimento importante para o sucesso de um software, pois hoje em dia a qualificação de um produto de software significa muito para o consumidor final (Clovis, 2000).
As organizações têm alguma dificuldade em conseguir efetuar os testes necessários, pois a constante evolução tecnológica e o tempo existente para a construção de novos processos, muitas das vezes não permite empregar o tempo necessário para a execução dos devidos testes. Como os desenvolvimentos ocorrem em simultâneo com os testes, acontece que nem sempre é possível acompanhar a qualidade do software bem como os próprios desenvolvimentos efetuados.
Ferramentas para automatização de tarefas permitem às organizações executar os devidos testes para que seja detetado o maior número de defeitos possíveis de modo a que sejam corrigidos e aumentando assim a qualidade do mesmo. É muito importante que uma organização tenha um departamento de qualidade e testes de software para minimizar os impactos que possam existir quando existe uma falha de execução. Neste campo as ferramentas de automatização representam uma mais-valia (Jain, 2011).
1.1 Objetivos
Neste projeto pretende-se desenvolver um sistema que através da interpretação gráfica dos objetos escolhidos pelo utilizador criar um ficheiro computacional interpretável por uma ferramenta de reconhecimento de objetos, permitindo assim executar e validar tarefas.
A abordagem proposta pretende ser simples, útil e acima de tudo pretende apoiar à
geração e execução de tarefas efetuadas pelos utilizadores. Será uma abordagem que poderá
ser utilizada por utilizadores/organizações que pretendam gerar e automatizar tarefas de um
determinado software.
2 Esta aplicação irá recorrer às tecnologias existentes de interação com a interface gráfica (GUI) que permite através de uma aplicação ou ferramenta de âmbito "keylogger" captar as ações efetuadas pelo utilizador através de imagens/recortes.
Pretende-se que o utilizador de forma fácil, interativa e natural execute a tarefa pretendida de modo a obter um resultado rápido da tarefa a desempenhar.
Esta aplicação tem também como objetivo reduzir o tempo despendido pelo utilizador na realização da tarefa, para o utilizador possa realizar outra tarefa em simultâneo, desde que, o local seja diferente do local onde se executa a anterior tarefa.
1.2 Perguntas de investigação
Como perguntas de investigação para este projeto, pretende-se responder às seguintes questões de investigação:
• Será possível gerar e automatizar a execução de tarefas através de uma técnica de visão por computador?
• Será possível através destas técnicas garantir que as funcionalidades previstas de uma aplicação têm um comportamento correto?
1.3 Estrutura do projeto
O projeto que se apresenta está dividido em cinco capítulos.
O capítulo 2 descreve o estado da arte. Neste capítulo pretende-se abordar os conceitos aplicados nesta dissertação de forma sucinta, por forma a que o leitor se enquadre. Aqui será abordado o conceito de modelação de tarefas, testes de software, que aplicações existem e por fim uma discussão sobre as aplicações existentes vs. Sikuli.
No capítulo 3 será apresentada a arquitetura da aplicação, quais as suas funcionalidades e
seu funcionamento. Inicialmente será apresentado um esquema da arquitetura implementada
e de seguida será descrito quais as funções de cada componente da arquitetura.
3 O capítulo 4 descreve a implementação da aplicação de forma detalhada. Aqui serão apresentados todos os passos efetuados para obter a aplicação bem como serão apresentados pequenos excertos de código de forma a explicar a metodologia adotada.
No capítulo 5 será apresentado um caso de estudo. Serão demonstradas as funcionalidades desenvolvidas num contexto real, ilustrando com figuras das tarefas executadas.
Para terminar, o capítulo 6 apresenta as conclusões retiradas deste projeto e propostas para trabalho futuro.
4
2 Estado da Arte
Neste capítulo será apresentado os conceitos abordados por este projeto, de modo a ajudar a compreender melhor o que será abordado e implementado.
Pretende-se também efetuar um levantamento de aplicações existentes relacionadas com a abordagem seguida.
2.1 Tarefas na Interação Gráfica com o Utilizador (GUI)
A interação gráfica com o utilizador (GUI) pode dizer-se que é uma comunicação realizada entre o utilizador e o computador. Esta comunicação é muito importante, porque é aqui onde são produzidas as tarefas enviadas e pedidas de parte a parte e onde se obtém o resultado esperado por parte do utilizador (Prates & Barbosa, Jan. 2007). Torna-se fundamental garantir que a sua qualidade esteja bem presente. Para tal uma abordagem seguida consiste em efetuar testes adequados, para minimizar a presença de defeitos.
Os testes são a principal abordagem aplicada para avaliar o comportamento de uma aplicação, a forma mais óbvia de conseguir testar o GUI é por testes "manuais", isto é, o engenheiro de software interage manualmente com o sistema criando as suas próprias tarefas/ações. No entanto este método é bastante dispendioso porque ocupa demasiado tempo. Pelo exposto existe a necessidade de criar ferramentas que repitam estas tarefas e num curto espaço de tempo consigam apresentar o resultado da respetiva tarefa realizada (Bae, Rothermel, & Bae, 2014).
Ao nível gráfico a interação entre as duas partes, utilizador/computador, é efetuada por
widgets, que são nada mais que aplicativos adicionados ao sistema/software, que podem ser
janelas (Windows), botões, menus, ícones, grelhas, etc. Todo o tipo de representação gráfica
pode ser criada através de aplicações para criação de objetos gráficos. A interação com estes
aplicativos geralmente é realizada com o rato ou teclado. Novas tecnologias como, por
5 exemplo, os dispositivos táteis permitem interagir com o sistema fazer uso da abordagem tradicional com rato e teclado (Tablet, Smartphones, etc.) (Rodrigues, 2012).
Alguns dos widgets existentes podem ser utilizados para receber dados de entrada (input) ou dados de saída (output). O aspeto gráfico depende muito do Sistema Operativo (SO) ou do software utilizado (I. Antcheva, 2006).
As tarefas de interação com interface gráfica na perspetiva de utilizador são consideradas como um conjunto de sequências de ações discretas que pretendem obter um resultado.
Existem vários tipos de ações que nos permitem interagir com a camada gráfica como por exemplo click/duplo click no rato, inserção de texto, arrastar um objeto (Banerjee, Nguyen, Garousi, & Memon, 2013).
O resultado esperado será obtido através da utilização de aplicações computacionais, esta operação tem implícita o conceito de interação gráfica computacional. Estas tarefas de interação com o utilizador são quase sempre controladas pelo computador (Rouse, 2005).
2.2 Teste de Software
Entende-se por teste de software o processo de execução de uma determinada tarefa ou conjunto de tarefas com o objetivo de determinar, por um lado, se executando determinadas operações o resultado final é aquele que antes da sua execução foi delineado e, por outro lado, se o mesmo executou sem qualquer problema (Ammann & Offutt, 2008).
O objetivo é validar se todas as operações que foram desenvolvidas no produto funcionam corretamente sem nenhuma falha, permitindo assim certificar a qualidade do produto.
Os testes de software são uma mais-valia para organizações que pretendam desenvolver
produtos de qualidade e fiabilidade, pois os testes procuram encontrar possíveis falhas de
funcionamento (Ammann & Offutt, 2008).
Antes de mais nos testes de (Volte & Zabeu, Fev. 2004):
• Erro - significa que existe um defeito entre o resultado esperado versus obtido resultado de uma falha humana
• Defeito - significa que foi utilizado um método errado para executar a tarefa pretendida, acont
ou adicionar uma nova funcionalidade
• Falha - significa que pode ter sido originada por um erro ou erros sucessivos antes de obter o resultado esperado
uma falha no software Computação, 2015)
Figura 1 - Erro / Defeito / Falha
Ao nível da metodologia utilizada nos testes de cinco tipos de testes:
• Teste unitário -
este tipo de teste tende a efetuar testes a pequenos pedaços de código, funções, métodos, etc.;
Antes de mais nos testes de software existem diferenças entre erro, defeito e falhas
significa que existe um defeito entre o resultado esperado versus obtido resultado de uma falha humana;
significa que foi utilizado um método errado para executar a tarefa , acontece quando existe uma necessidade de corrigir algum problema ou adicionar uma nova funcionalidade;
significa que pode ter sido originada por um erro ou erros sucessivos antes de obter o resultado esperado, ocorre quando o erro e o defeito ocorrem e
software, ilustrado na Figura 1 - Erro / Defeito / Falha Computação, 2015)
Erro / Defeito / Falha (Salto na Computação, 2015)
todologia utilizada nos testes de software normalmente é constituída por
tem como objetivo descobrir erros e falhas de modo
teste tende a efetuar testes a pequenos pedaços de código, funções,
6 s entre erro, defeito e falhas
significa que existe um defeito entre o resultado esperado versus obtido, é o
significa que foi utilizado um método errado para executar a tarefa ece quando existe uma necessidade de corrigir algum problema
significa que pode ter sido originada por um erro ou erros sucessivos antes , ocorre quando o erro e o defeito ocorrem e origina Erro / Defeito / Falha. (Salto na
normalmente é constituída por
erros e falhas de modo aleatório,
teste tende a efetuar testes a pequenos pedaços de código, funções,
7
• Teste de Integração - tem como objetivo encontrar erros entre processos interligados, ou seja, se uma aplicação necessita de comunicar com um servidor remoto para executar outra operação, não pode iniciar a nova operação antes de obter a resposta. Se o software permite iniciar essa operação é considerada uma falha pois segundo o requisito só poderia iniciar a tarefa após obter a resposta do servidor. Este teste visa identificar possíveis falhas entre processos interligados;
• Teste de Sistema - visa simular o funcionamento normal do software introduzindo dados parcialmente reais para tentar identificar falhas de execução/resultado esperado. Este teste tem o objetivo de simular todas as funcionalidades do software;
• Teste de Aceitação - Este teste é semelhante ao teste de sistema, mas com uma particularidade que é apenas realizado por um grupo restrito de pessoas que pretende verificar se o produto responde às necessidades definidas inicialmente no projeto;
• Teste de Operação – Este tipo de teste é realizado por utilizadores/
administradores da organização e visa simular todo o processo de inicialização de um novo cliente final. Aqui pretende-se recriar o ambiente de instalação do produto, parametrizações necessárias do software, com o objetivo de minimizar os danos colaterais que possam acontecer no arranque de um novo projeto de implementação. (Ammann & Offutt, 2008) (Volte & Zabeu, Fev. 2004)
Neste projeto a metodologia utilizada será "Teste de Sistema", pois visa a criação de uma aplicação elaborando um script de automatização que permitirá identificar possíveis falhas e verificar se o resultado final é obtido conforme a tarefa programada.
2.3 ConcurTaskTree (CTT)
A notação ConcurTaskTree (CTT) permite modelar tarefas representando-as através de
árvore de nodos, onde o objetivo da tarefa representa a “raiz” da árvore e as "folhas" são
8 tarefas a desempenhar. Estes modelos são muitas vezes utilizados em software interativo e concebidos por especialistas (ConcurTaskTrees - Model-based User Interfaces Incubator, 2009).
Estes também podem ser utilizados em orientação de testes de tarefas. São criados perfis de operacionais cujo objetivo é representar as interações entre os utilizadores e a aplicação.
Existem quatro tipos diferentes para a representação das tarefas:
• Tarefas de Utilizador: são tarefas cuja interação com o sistema é quase nula, apenas representam uma atividade cognitiva interna, na prática é criado um input por parte do utilizador e um output por parte da Aplicação;
• Tarefas da Aplicação: representam os outputs criados pelo sistema, por exemplo resultado de uma determinada pesquisa efetuada pelo utilizador, onde não existe interação humana computador (HCI
1);
• Tarefas de Interação: estas tarefas são nodos/pontos de decisão por parte do utilizador. São tarefas que necessitam de ação do utilizador para com a tarefa, por exemplo, a elaboração de um documento de texto;
• Tarefas Abstratas: são tarefas que representam como nodo da árvore e nele contêm sub-tarefas.
1