• Nenhum resultado encontrado

Teste de Interface de Usuário

No documento Padrões de testes automatizados (páginas 53-56)

3.3 Tipos de Testes Automatizados

3.3.3 Teste de Interface de Usuário

A interface de usuário (Graphical User Interface (GUI) ou Web User Interface (WUI)) é um módulo peculiar de um sistema de software, pois é o único que mantém contato direto e constante com os usuários finais do sistema e é a partir dela que o usuário normalmente julga se o software é de qualidade. Por isso, qualquer não conformidade dessa camada pode ofuscar todo interior do software, que pode ser de boa qualidade.

Os testes automatizados de interface verificam a correção por meio da simulação de eventos de usuários, como se uma pessoa estivesse controlando dispositivos como mouse e teclado. A partir dos efeitos colaterais dos eventos, são feitas verificações na interface e em outras camadas para se certificar que a interface está funcionando apropriadamente.

A Figura 3.2 contém um exemplo de teste de interface Web, uma página que contém um formulário de login. O exemplo é escrito em Java e utiliza as ferramentas TestNG para definir os casos de testes (Test), o JUnit para fazer as verificações (assertEquals) e o WebDriver para criação dos eventos de

usuário. FirefoxDriver cria um driver que representa o navegador, e é ele que cria os eventos de usuário, tais como cliques do mouse (linha 17) e digitação de teclas do teclado (linhas 15 e 16). A linha 18 faz uma verificação para certificar se a interface foi atualizada corretamente após a autenticação.

1 // referências do WebDriver 2 import org.openqa.selenium.By;

3 import org.openqa.selenium.WebDriver;

4 // referências do TestNG

5 import org.testng.annotations.Test; 6 // referências do JUnit

7 import static org.junit.Assert.assertEquals;

8

9 public class LoginInterfaceTests {

10

11 @Test

12 public void loginComSucessoHabilitaLinkDeLogout() {

13 WebDriver browser = new FirefoxDriver() ;

14 browser.get("http://umsite.net");

15 browser.findElement(By.id("username_field")).sendKeys("fulano");

16 browser.findElement(By.id("password_field")).sendKeys("abracadabra");

17 browser.findElement(By.name("login_button")).click() ;

18 assertEquals("Logout", browser.findElement(By.id("logout_link")).getText() );

19 } 20 21 }

Figura 3.2: Exemplo de teste de interface Web com Java.

Como a interface de usuário é o “cartão de visita” do programa, não basta apenas ela estar correta, é necessário que ela seja organizada, atraente e que permita que diferentes grupos de usuários consigam utilizá-la, por isso é importante os testes de leiaute, usabilidade e acessibilidade.

Teste de Leiaute

Os testes de leiaute buscam avaliar a beleza da interface, assim como verificar a presença de erros após a renderização, que são erros difíceis de se identificar com testes comuns de interface. Por exemplo, um teste de interface básico pode facilmente verificar que um módulo da interface foi carregado cor- retamente, mas não é garantido que o módulo está bem desenhado ou mesmo visível para o usuário final.

Além disso, o leiaute pode variar significativamente entre diversas plataformas, tais como em difer- entes gerenciadores de janelas e navegadores Web. Cada plataforma pode possuir suas particularidades, já que as funcionalidades e algoritmos de renderização podem variar consideravelmente, por isso uma bateria de testes de leiaute também é importante para verificar a portabilidade do sistema.

Ainda há uma carência de ferramentas que facilitem a automação para estes tipos de testes, prin- cipalmente porque a grande subjetividade na interpretação do que é certo ou errado dificulta a criação de ferramentas completas e flexíveis. No entanto, muito pode ser feito com auxílio das ferramentas dos testes de interface, nem que seja para facilitar os testes manuais.

A Figura 3.3 apresenta um exemplo de teste de leiaute semiautomatizado, escrito em Java com auxílio das ferramentas Selenium e Util4Selenium. O script automatizado de testes contém os métodos visitaPaginaPrincipal, visitaPaginaInformacoes e visitaPaginaResultadosDeBusca que têm instruções da ferramenta Selenium que enviam comandos para o navegador para iteragir com deter- minadas páginas do sistema.

1 // Classe base pra todas clases de teste de layout 2

3 // referências do TestNG

4 import org.testng.annotations.AfterSuite;

5 import org.testng.annotations.BeforeSuite;

6 // referências do Util4Selenium

7 import utilities.util4selenium.annotations.Screenshot;

8 import utilities.util4selenium.annotations.Screenshot.ScreenshotPolicy; 9 // referências do Selenium-RC/Java

10 import com.thoughtworks.selenium.DefaultSelenium;

11 import com.thoughtworks.selenium.Selenium;

12

13 @Screenshot(policy = ScreenshotPolicy.ALWAYS)

14 public class SeleniumTestCase {

15 public Selenium browser; 16

17 @BeforeSuite

18 public void abreNavegador() {

19 browser = new DefaultSelenium("localhost", 4444 , "*chrome", "http://localhost

:8080");

20 browser.start() ;

21 } 22

23 @AfterSuite

24 public void fechaNavegador() {

25 browser.stop() ;

26 } 27 }

28

29 // Classe de teste de layout 30

31 import org.testng.annotations.Test;

32

33 public class PaginasPublicasLayoutTests extends SeleniumTestCase {

34

35 @Test public void visitaPaginaPrincipal() {

36 browser.open("/");

37 } 38

39 @Test public void visitaPaginaInformacoes() {

40 browser.open("/about");

41 }

42

43 @Test public void visitaPaginaResultadosDeBusca() {

44 browser.open("/search");

45 browser.type("word", "open source");

46 browser.submit("search_form");

47 } 48 49 }

O resto do trabalho é realizado pela ferramenta Util4Selenium, através da anotação Screenshot, que captura a imagem da tela após o término da execução do método (a política ScreenshotPolicy.ALWAYS determina que sempre um screenshot será capturado, sem exceções).

No final da execução temos uma lista de imagens, que alguma pessoa pode observar visualmente em busca de falhas do leiaute, eliminando as tarefas de navegar entre as páginas e preencher formulários repetidamente para diferentes navegadores e a cada mudança de leiaute.

Usabilidade e Acessibilidade

Os testes de usabilidade verificam a facilidade de aprendizado e de uso de um sistema. O requisito básico para uma boa usabilidade é a correção do sistema e da interface mas, para uma melhor organização, a correção deve ser verificada em outras baterias de testes, como as de unidade e interface. Seguindo esse padrão organizacional, os testes de usabilidade devem verificar outras características, como organização, padronização e clareza da interface, assim como a documentação de ajuda para o usuário.

Para uma boa usabilidade, a organização da interface deve levar em consideração quais as funcional- idades mais importantes e as mais utilizadas, o tipo de programa e também o público alvo. Por isso, também é importante os testes de acessibilidade, que são um tipo de teste de usabilidade específico para usuários com alguma limitação da visão, audição ou motora. Geralmente, esse grupo de usuários é composto por idosos, deficientes ou pessoas com doenças específicas, tais como mal de Parkinson, síndrome do encarceramento etc. As limitações destes usuários os impedem de utilizar com êxito alguns dispositivos do computador, como o monitor, mouse e teclado.

Os testes de acessibilidade devem verificar se é possível utilizar o sistema com facilidade usando apenas alguns dos dispositivos. Eles podem verificar os tamanhos e cores e contrastes dos textos e das imagens, a existência de atalhos de teclado para os comandos, opções de áudio para componentes de CAPTCHA1etc.

Entretanto, apesar da automação também ser útil para verificar a usabilidade dos sistemas, muitas vezes eles precisam ser realizados manualmente por causa da grande dificuldade de automatizá-los. A relação custo-benefício da criação de algoritmos e heurísticas de verificação pode ser maior do que a repetição manual dos testes.

No documento Padrões de testes automatizados (páginas 53-56)