Copa do Mundo de Testes de Software – Etapa América do Sul

A primeira etapa da copa do mundo de testes de software chegou ao seu final, após a realização de cada uma das eliminatórias continentais.

No último dia 19 de julho tive a oportunidade de participar da etapa da América do Sul e compartilho com vocês como foi a experiência.

Preparação:

Começamos nossa preparação através de uma rápida reunião um dia antes do evento, onde definimos nossa estratégia baseando-se nas informações que tínhamos até o momento e preparamos um “template” para o relatório de testes, que deveríamos mandar ao final da competição.

Já no dia do evento, 30 minutos antes do horário previsto para o início da competição recebemos as últimas instruções dos organizadores, que descreviam: 

Utilizamos esse tempo antes do horário de início para instalar o aplicativo, entender suas principais características e utilizando o quadro como apoio identificamos sub-áreas da aplicação e os tipos e técnicas de testes que gostaríamos de aplicar.

As 3 horas de competição:

Com o auxílio das informações no quadro direcionamos o nosso foco para maximizar a execução e identificação de falhas. Ao longo das 3 horas, que passaram voando, exploramos e reportamos diversas falhas de diferentes níveis de severidade, além de itens referentes a usabilidade da aplicação. 

Durante o tempo disponível para execução, priorizamos a comunicação entre os membros da equipe, com o objetivo de:

  1. Evitar duplicação de esforços;
  2. Compartilhar de maneira fácil e rápida informações relevantes e defeitos encontrados;
  3. Trabalharmos em conjunto na investigação e identificação de problemas.

Como nosso time possui 4 integrantes, definimos que 1 trabalharia com maior foco na elaboração do relatório que deveria ser entregue ao final do evento, enquanto os demais permaneceriam voltados para execução. Essa organização nos permitiu continuar com a execução até quase os últimos minutos disponíveis sem comprometer a elaboração e entrega do relatório.

Valeu a pena?

Com certeza! Todos da equipe gostaram da experiência e nos divertimos bastante trabalhando em conjunto para encontrar defeitos relevantes. Ao final das 3 horas podemos dizer que conseguimos atingir uma cobertura interessante das funcionalidades do sistema, mesmo enfrentando situações, como a inexistência de requisitos e a restrição de tempo.

Agora, só nos resta aguardar pelo resultado e por novas edições da competição!

Como capturar um screenshot no Selenium WebDriver

Capturar um screenshot é uma das ações frequentemente desejadas, quando automatizamos um teste com selenium.

A aplicação do screenshot, pode ser útil de diferentes maneiras, como provendo evidências de um problema encontrado ou servindo para análise e comparação do estado da interface, etc.

Abaixo, disponibilizo um exemplo, extremamente simples, utilizando o Selenium WebDriver com Java.

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SimpleScreenshot {
	private static WebDriver driver;

	/**
	 * Inicialização do driver do firefox
	 */
	@BeforeClass
	public static void beforeClass() {
		driver = new FirefoxDriver();

	}

	/**
	 * Navega para url do bytes don't bite
	 * Captura o Screenshot
	 */
	@Test
	public void testScreenshot() {
		driver.get("http://www.bytesdontbite.com");
		takeScreenshot("teste");
	}

	/**
	 * Método para capturar screenshot
	 * @param fileName - Nome do arquivo
	 */
	public static void takeScreenshot(String fileName){
		File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
		Date data = new Date();
	    try {
			FileUtils.copyFile(scrFile, new File("D:\\SeleniumScreenShots\\"+fileName+ data.getTime()+".jpeg"),true);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Encerra o driver
	 */
	@AfterClass
	public static void afterClass() {
		driver.quit();
	}

}

Como pudemos ver no código acima, a única coisa que precisamos fazer é implementar o método takesScreenshot, e utilizá-lo nos pontos em que julgarmos necessário. No exemplo, simplesmente iniciamos um FirefoxDriver e o nosso “teste” se resumiu a navegar para a url do bytes don’t bite e em seguida chamar a captura do screenshot.
Ainda não conhece o Selenium?
Uma das mais utilizadas ferramentas para automação de testes em aplicações web. Permite interagir com o navegador e simular as operações comumente encontradas nas páginas web.

Deseja conhecer mais sobre o Selenium?

— UPDATE —

Inscrições abertas

O curso de Automação de Testes Para Web com Selenium está disponível na modalidade de Ensino à distância. Contaremos com um material de vídeo-aulas, apostilas e exercícios, além do acompanhamento de um professor/tutor.

Valor: R$250,00 (Pode ser parcelado no cartão de crédito)

promo_banner

Copa do Mundo de Testes de Software – Inscrições Abertas

No mês passado apresentamos a Copa do Mundo de Testes aqui no blog. E hoje, recebi a notícia que as inscrições para a primeira copa do mundo de testes de software estão oficialmente abertas.  Abaixo, segue o resumo das principais informações.

Equipes:

Podem possuir de 1 a 4 integrantes. Não há limite de equipes por empresa.

Fase de Qualificação Continental:

Na primeira etapa, as disputas serão realizadas online. E apenas uma equipe será classificada por continente.

Fase Final:

Realizada presencialmente, durante o evento Agile Testing Days.

Critérios de Pontuação:

Os critérios não foram modificados, mantendo as informações do post anterior:

Diferentes aspectos levados em consideração, como: melhor bug report, melhor report de testes, bug mais valioso, etc.

O foco principal será o aspecto funcional de determinadas aplicações indicadas pelos avaliadores no início de cada etapa, podendo existir um tempo adicional alocado para aspectos não-funcionais.

O tempo para validação da aplicação sugerida será de aproximadamente 3 horas, podendo haver tempo adicional para aspectos não-funcionais.

Premiação:

Na etapa de classificação os vencedores continentais receberão:

– Entradas para os 3 dias do Agile Testing Days

– Passagens aéreas

– Shuttle aeroporto/hotel

– Hospedagem de 5 diárias

– Cópias autografadas do novo livro de Lisa Crispin e Janet Gregory 

Por fim, os grandes vencedores da etapa final receberão:

2014-03-11_0805

Link – Episódio de True Detective derruba HBO GO

Link – Episódio de True Detective derruba HBO GO

Sabemos ou pelo menos deveríamos saber, da importância dos testes de performance quando tratamos de aplicações Web. O tema que inclusive já abordamos aqui (Entendendo os testes de performance) é frequentemente deixado em segundo plano, o que acaba causando problemas graves, como o que vi nas notícias publicadas ontem e hoje sobre o HBO GO.

HBO GO Crashes

É impressionante a quantidade de aplicações web disponíveis, que continuam decepcionando seus usuários, pois de nada adianta estarem “funcionalmente” corretas se a medida que a quantidade de acessos cresce o serviço deixa de responder a tempo ou mesmo não responde. No exemplo do link sobre a HBO GO, como pode um serviço que custa o dobro do Netflix nos Estados Unidos conseguir apresentar tal nível de qualidade aos consumidores? Quanto irá custar a HBO essa publicidade negativa?

S.O.L.I.D – Coisas que todo programador deveria saber

Esse post é mais um da série “Coisas que todo programador deveria saber” (talvez o primeiro do BytesDontBite [BdB] com esse título na verdade :P).

Hoje vou falar um pouco sobre o S.O.L.I.D, que é na verdade um acrônimo onde cada letra representa um “princípio” de design de orientação a objetos.  A importância desses princípios é imensa. Então vamos lá:

  • S (Single Resposability Principle) – Toda classe deve ter uma única responsabilidade, e essa responsabilidade deve ser completamente encapsulada por essa classe. Parece uma coisa simples, mas a grande maioria dos problemas que vejo por aí, acontecem pelo simples motivo de termos classes (e métodos) gigantes que fazem tudo o que você pode imaginar. Talvez esse seja, ao meu ver, o mais importante (e o mais simples) desses princípios. Obviamente ele é muito relacionado aos conceitos de (alta) coesão e (baixo) acoplamento, e também é bem descrito e detalhado pelos princípios do GRASP (tópico para o próximo post dessa série)

    Arquitetando…
  • O (Open/Closed Principle) – Todas as entidades do software (classes. módulos, métodos, …) deveriam ser abertas  (open) para extensão e fechadas (closed) para modificação. Isso significa que essas entidades do software tem que permitir uma mudança de comportamento sem a alteração do seu próprio código fonte. Em uma conclusão bem óbvia e simplista, estamos falando de usar mais interfaces e classes/métodos abstratos, que podem facilitar a mudança não dolorosa de comportamento de algumas entidades.
  • L (Liskov Substitution Principle) – Qualquer objeto do tipo X (que é subtipo Y) deveria poder substituir um objeto de tipo Y sem alterar as propriedades básicas do sistema (corretude, etc).
  • I (Interface Segregation Principle) – Prega que as interfaces tenham somente os métodos que serão usados por quem vai implementar essa interface. Ou seja, separar (segregar) interfaces que contenham muitos métodos, em interfaces menores, de forma que, quem implemente a interface, não seja forçado a implementar métodos que não são usados naquele contexto.
  • D (Dependency Inversion Principle) – Esse princípio prega uma forma de desacoplamento, aonde os módulos tem que depender de abstrações (leia-se interfaces) ao invés de depender de classes concretas. Isso se aplica principalmente quando falamos das dependências entre as camadas arquiteturais de um determinado sistema. Uma forma de inversão de dependência é a Injeção de dependência.

Como você pode notar, todos esses princípios meio que se completam de forma a atingir o objetivo que é um design flexível e de fácil manutenção. Espero que tenha sido útil, e até o próximo post dessa série, onde falaremos sobre o GRASP 😉

Copa do Mundo de Testes de Software

A copa do mundo está chegando! E em 2014 não há dúvidas que esse será um dos principais tópicos discutidos em todos os lugares e mídias. Mas não é esse o tema desse post, afinal esse não é um blog sobre futebol.

Fiquei sabendo nesse final de semana a respeito da Copa do Mundo de Testes de Software. Isso mesmo que você acabou de ler, em 2014 teremos uma competição para descobrir os melhores testadores do mundo.

Ainda não temos as informações completas sobre como o evento vai funcionar, abaixo destaco alguns dos pontos já divulgados na página oficial.

Quem pode participar?

Testadores de qualquer localidade, formando equipes de 2 a 5 pessoas.

Como irá funcionar?

A competição será realizada em 2 etapas:

  • Fase de Classificação: Conduzida online e por continente, onde apenas o time vencedor de cada continente estará classificado para a etapa final.
  • Etapa Final: Realizada durante o evento Agile Testing Days 2014.

O que será analisado? 

Os critérios de pontuação durante todas as etapas levarão diferentes aspectos em consideração, como: melhor bug report, melhor report de testes, bug mais valioso, etc.

O foco principal será o aspecto funcional de determinadas aplicações indicadas pelos avaliadores no início de cada etapa, podendo existir um tempo adicional alocado para aspectos não-funcionais.

Inscrições:

Na página do evento há um formulário com nome e e-mail para os interessados no evento.

##UPDATE##

Prêmios:

Premiação da competição já foi divulgada, e a equipe vencedora levará 3.000,00 EUR.

 

Com certeza parece uma boa oportunidade para praticar suas habilidades como analista de testes e conhecer outros profissionais da área. Já solicitei mais detalhes para a inscrição de minha equipe na página do evento, e você?

Pensamentos sobre a aquisição da Motorola pela Lenovo

bntf9wjceaaoico-jpg-large

Para aqueles que ainda estão assimilando essa aquisição, se pensarmos bem, essa aquisição da Lenovo faz muito mais sentido do que a aquisicao da Nokia (comprada pela microsoft ano passado).

 Motorola mobility é uma empresa em ressurgimento[ou ressurgida] (depois de apostar pesado no android, fato esse que fez o google comprar em primeiro lugar). Enquanto a nokia, é uma empresa afundando (ou seria melhor dizer afundada? Mas também dá pra entender a sua aquisicao pela Microsoft, uma vez que a MS precisava de alguem pra usar o windows phone como plataforma principal, e só uma empresa “afundada” iria topar :P)
A moral da história é que quem quer entrar pesado pra competir com apple e samsung nao tem muita escolha, e a motorola podia ser considerada uma escolha clara ao meu ver. (ninguem vai apostar na tb afundada blackberry,  ou HTC, etc, etc… )
E o que você acha? Faz sentido pra você essa aquisição?
O mercado android x iOS x Windows Phone continua quente e tende a esquentar mais ainda!

Estatisticas do BdB no ano de 2013 (Antes tarde do que nunca :P)

Se você está curioso por algumas estatisticas sobre o ano de 2013, aqui está, basta clicar na figura abaixo e seguir o link 😉

Estatisticas do BdB no ano de 2013 (Antes tarde do que nunca :P)

Pedacinho de texto das estatisticas:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 22,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 8 sold-out performances for that many people to see it.

Click here to see the complete report.

Onde encontrar material sobre testes de software?

No primeiro post de 2014, compartilho com vocês uma lista com alguns dos blogs/sites, perfis do twitter e canais do You Tube, que acompanho (ou tento acompanhar) para me manter atualizado sobre testes de software.

Blogs/Sites:

Software Testing Club      Ministry of testing      Jmeter.com.br

Outros:

  

     

Sentiu falta de algum? Pode adicionar nos comentários =D

Elicitação de Requisitos de sistemas Safety-critical

Sistemas safety-critical são aqueles que, em caso de falha, podem causar danos severos ou morte de indivíduos e/ou danos significativos ao meio ambiente. Esses sistemas estão presentes em diversos equipamentos que fazem parte do nosso cotidiano, como, por exemplo, carros (e.g. sistema de controle de frenagem, controle de piloto automático, ajuste de tração), aviões (e.g. sistema de controle de porta, sistema de ajuste de rota, navegação), e equipamentos médicos (e.g. sistema de ajuste de radiação em maquinas de ressonância magnética, sistemas de gatilho de marca-passo).

 IEEE_logoVocê já se perguntou como os requisitos desses sistemas são elicitados e documentados? As regras para tratar requisitos de safety são um tanto quanto diferentes das praticas “tradicionais” de elicitição de requisitos. Para que os produtos sejam homologados, e então liberados para o mercado, os equipamentos tem que ser desenvolvido seguindo praticas descritas em padrões ISO/IEEE (e.g. ISO 26262, ISO 14971). Esses padrões cobrem práticas que vão da especificaçao até à implantação do sistema. Nesse post vamos tratar apenas dos itens que são comuns à fase de requisitos de sistemas safety-critical.

Processos de elicitação de requisitos de safety, em geral, seguem 5 passos:

1 – Identificação do ítem: Considerando o domínio automotivo, o item não é o carro em si; mas um sistema que, ao final, irá compor o automóvel, como, por exemplo, o sistema de controle de tração, o sistema de piloto automático, etc.

2 – Análise de riscos e ameaças (hazard and risk analysis): Nessa fase são analisados e documentados todos os riscos inerentes àquele sistema. Um exemplo de hazard é “Piloto automático não desativar quando requisitado pelo motorista”. A cada um desses eventos é associado um Safety Integrity Level ou SIL (isso é assunto para outro post), que corresponde a uma indicação do quão catastrófico esse evento pode ser cruise-control-traktor-headercaso aconteça.

3 – Estabelecer Safety Goal: Cada evento ameaçador é associado a um safety goal ou, traduzindo literalmente, meta de segurança. Por exemplo, o safety goal associado ao hazard “Piloto automático não desativar quando requisitado pelo motorista” pode ser “Piloto automático precisa ser desativado quando requisitado pelo motorista”.

4 – Requisitos funcionais de safety: Para cada safety goal, uma série de requisitos funcionais de safety são derivados. Exemplo: “Ao pisar pedal de freio, piloto automático deve ser desativado”.

5 – Requisitos técnicos de safety: Cada requisito funcional de safety deve ter detalhes técnicos de como ele será implementado. Essa especificação deve conter detalhes dos blocos funcionais que vão implementar a função (hardware e/ou software).

normas-iso

No processo de certificação do produto, todos os artefatos e documentos associados são analisados e avaliados quanto a consistência, detalhamento, de modo a julgar a eficácia e eficiência do produto. Uma vez homologado, o produto é liberado para o mercado.

Processos de engenharia de safety são muito complexos e rígidos. Muitas outras técnicas são usadas para assegurar que esses sistemas não falharão. E, caso falhem, que o efeito seja o menos trágico possível.

No próximo post irei escrever sobre o que vem sendo feito no Brasil na área de sistemas safety-critical; mais especificamente no que diz respeito a software embarcado em equipamentos médico-hospitalares.