May, 2009 | Fé no Caos

Archive

Archive for May, 2009

Phishing da Receita Federal

May 29th, 2009 1 comment

Acabei de receber um e-mail da Receita Federal na minha conta do MSN (uso um e-mail pra cada serviço/site/etc pra identificar a origem dos e-mails de spam):

Corpo do e-mail de phishing da Receita Federal

Corpo do e-mail de phishing da Receita Federal

Obviamente, ̩ um e-mail de phishing. Conhecido e at̩ registrado no CAIS РCentro de Atendimento a Incidentes e Seguran̤a.

O que eu achei curioso foi coincidir com o dia do pagamento de mais uma parcela dos impostos e terem se preocupado em usar a data do sistema no corpo e no assunto do e-mail (sexta-feira, 29 de maio de 2009 07:01:40). Tudo bem que o primeiro ponto é atribuido ao senhor Caos e que o segundo é só usar uma tag tipo %DATE% e substituir na hora do envio, mas mesmo assim…

Só esqueceram de uma coisa: revisar o português 😀

…a qual motivou a suspenção do mesmo…

Aproveitando que eu já tava lendo o e-mail com atenção, resolvi dar uma olhada no cabeçalho da mensagem, onde podemos ver algumas informações interessantes:

Received: from if04-mail-sr05-mia.mta.terra.com (if04-mail-sr05-mia.mta.terra.com [208.84.243.52])

Não foi enviado pelo servidor da Receita.

Received-SPF: none (carcros.tpn.terra.com: 208.84.242.62 is neither permitted nor denied by domain of fazenda.gov.br) client-ip=208.84.242.62; envelope-from=receitafederal@fazenda.gov.br;

O domínio da Receita permite que qualquer um configure o e-mail de retorno para um endereço @fazenda.gov.br. Deveriam fazer uma regra de SPF para diminuir ataques de phishing.

Received: from bitway (201-11-150-222.gnace702.dsl.brasiltelecom.net.br [201.11.150.222]) (authenticated user v.peres@terra.com.br)

Já sabemos a origem do e-mail. Se foi enviado propositalmente ou por um computador infectado, não vai fazer diferença, porque ninguém vai fazer NADA a respeito.

Arrumando o VirtualBox depois de atualizar o kernel

May 20th, 2009 1 comment

Então você também atualizou o kernel do Linux e o VirtualBox parou de funcionar?

Provavelmente você deve ter visto uma mensagem parecida com essa:

WARNING: The character device /dev/vboxdrv does not exist.
	 Please install the virtualbox-ose-source package and the appropriate
         headers, most likely  linux-headers-server.

	 You will not be able to start VMs until this problem is fixed.

No meu caso, o kernel atual é o 2.6.24-19-server (server para reconhecer os 4gb de RAM), então eu deveria executar o seguinte comando:

sudo apt-get install virtualbox-ose-modules-2.6.24-19-server

Mas e se o pacote não está disponível ainda no repositório? O jeito é compilar e ativar o módulo.

$ sudo apt-get install virtualbox-ose-source

E o resultado:

Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
Lendo informação de estado... Pronto
build-essential já é a versão mais nova.
Os NOVOS pacotes a seguir serão instalados:
  virtualbox-ose-source
0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.
É preciso baixar 328kB de arquivos.
Depois desta operação, 2097kB adicionais de espaço em disco serão usados.
AVISO: Os pacotes a seguir não podem ser autenticados!
  virtualbox-ose-source
Aviso de autenticação sobreposto.
Obter:1 http://archive.ubuntu.com intrepid/universe virtualbox-ose-source 2.0.4-dfsg-0ubuntu1 [328kB]
Baixados 328kB em 5s (57,3kB/s)               
Selecionando pacote previamente não selecionado virtualbox-ose-source.
(Lendo banco de dados ... 177235 arquivos e diretórios atualmente instalados).
Desempacotando virtualbox-ose-source (de .../virtualbox-ose-source_2.0.4-dfsg-0ubuntu1_all.deb) ...
Configurando virtualbox-ose-source (2.0.4-dfsg-0ubuntu1) ...
 * Reloading kernel event manager...                                     [ OK ] 
Adding Module to DKMS build system
Doing initial module build
Installing initial module
Done.
 * Stopping VirtualBox kernel module vboxdrv                             [ OK ] 
 * Starting VirtualBox kernel module vboxdrv                             [ OK ] 

Simples!

Instalando Ruby e Watir para automação

May 7th, 2009 5 comments

Primeiramente (e resumidamente), o que são essas coisas?

  1. Ruby é uma linguagem de programação que vem sido bastante adotada nos últimos anos, devido a uma série de características que não cabem a mim elencar aqui.
  2. Watir é uma biblioteca para a linguagem Ruby que permite interagir com o Internet Explorer, Firefox (a partir da versão 1.6, com a fusão da biblioteca FireWatir) e até o Safari (usando uma biblioteca derivada) para simular a experiência de navegação do usuário no sistema.

Apesar do desgosto que muitos de nós temos pelo Internet Explorer (alguns até pelo Windows), sabemos que tudo *deve* funcionar no Internet Explorer por dominar o mercado de browsers atualmente (por mais quanto tempo?).

Como instalar:

  1. Baixar o instalador para Windows aqui – está disponível um instalador que é só ficar apertando “Próximo” até acabar.
  2. Abrir uma janela do prompt de comando (Iniciar -> Executar -> cmd) e digitar “gem install watir -y”, sem as aspas. Após baixar a lista de bibliotecas e dependências, estaremos prontos para o primeiro exemplo de código.

O instalador do Ruby instala também o SciTE, um editor de código bem simples mas que faz o trabalho.

Todo guia de instalação do Ruby/Watir mostra como acessar o Google e fazer uma busca, bem simples assim. Que tal fazer um exemplo diferente, usando o site modinha de todo gadget freak muambeiro?

Abaixo veremos dois casos de teste para a funcionalidade “busca avançada” da loja Deal Extreme. Primeiramente, vamos procurar por sabres de luz e, depois, pela paz mundial. É só copiar e colar.

require "rubygems"
require "watir"
require "test/unit"
require "test/unit/assertions"
include Test::Unit::Assertions

class TC_DX_Search < Test::Unit::TestCase 
  def setup
    #Abre o Internet Explorer
    @ie = Watir::IE.new
    @ie.set_fast_speed
  end

  def test_adv_search
    #Abre o site da Deal Extreme
    @ie.goto "http://www.dealextreme.com/"
    
    #Confere se estamos na página certa
    assert(@ie.title.include?("DealExtreme: Cool Gadgets at the Right Price"))
    
    #Clica no link com o texto "advanced search"
    @ie.link(:text, /advanced search/).click
    
    #Confere se estamos na página certa
    assert(@ie.title, "DealExtreme: Advanced Search")
    
    #Preenche o campo de produto
    @ie.text_field(:id, "txtAdvSearchTerm").set "Lightsabre LED"
    
    #Seleciona a categoria do produto
    @ie.select_list(:id, "searchCategory").select "Flashlights, Lasers"
    
    #Marca a opção para buscar somente itens em estoque
    @ie.checkbox(:id, "InStockOnly").set
    
    #Clica no botão de busca
    @ie.button(:id, "searchbutton").click
    
    #Confere se retornou algum resultado
    assert(@ie.elements_by_xpath("//div[@id='olddiv']/div/h3/a").length > 0)
    
    #Mostra a lista de itens retornados
    @ie.elements_by_xpath("//div[@id='olddiv']/div/h3/a").each do |result|
      puts result.innerText
    end
  end
  
  def test_adv_search_no_results
    #Comentários no outro teste
    @ie.goto "http://www.dealextreme.com/"
    assert(@ie.title.include?("DealExtreme: Cool Gadgets at the Right Price"))
    @ie.link(:text, /advanced search/).click
    assert(@ie.title, "DealExtreme: Advanced Search")
    @ie.text_field(:id, "txtAdvSearchTerm").set "The world peace"
    @ie.select_list(:id, "searchCategory").select "- All Categories -"
    @ie.checkbox(:id, "InStockOnly").set
    @ie.button(:id, "searchbutton").click
    
    #Não podemos comprar a paz mundial...
    assert(@ie.text.include?("No product was found relating to your search"))
  end
end

Salve como demo.rb e rode o script (F5 no SciTE). Se tudo der certo, veremos o seguinte resultado:

Loaded suite demo
Started
Mini Lightsabre LED Keychain (4*AG3)
..
Finished in 68.328 seconds.

2 tests, 6 assertions, 0 failures, 0 errors

Imagino que o código seja autoexplicativo com a ajuda dos comentários. Em posts futuros veremos melhor sobre XPath, assertions, TestCase e mais.

Em caso de dúvidas, comente 🙂

Tirando o pó

May 6th, 2009 1 comment

Já ouvi muitas vezes desenvolvedores falarem mal da função dos testadores, alegando ser uma tarefa chata, caracterizada por ser “repetitiva” ou “pouco desafiadora”. No entanto, não é incomum ver desenvolvedores realizarem o seu trabalho através da repetição, seja por seguir uma “receita de bolo”, utilizando sempre as mesmas tecnologias e soluções, ou por tentarem aplicar a famosa técnica de reutilização de código através da sequência mágica universal: CTRL+C e CTRL+V.

Se considerarmos que “testar”, na concepção deles, é apenas a execução de testes manuais, temos que concordar, é uma tarefa repetitiva sim. Cabe ao testador ir além dos cenários de teste passados a ele pelo projetista de testes (caso exista) e ter uma visão geral do negócio, para pensar em novas formas de quebrar o sistema. Afinal, a garantia de qualidade através da ausência de bugs ainda é vista como teste “relaxado” por muitos gerentes. Renderia até um post só sobre isso.

Pensando em diminuir a repetição do trabalho de validar os mesmo cenários a cada ciclo de testes de regressão e, ao mesmo tempo, facilitar a minha vida agilizar o processo de testes, venho tentado usar ferramentas de automação há alguns anos, em especial a combinação Ruby/Watir, que serve até para algumas tarefas mais simples em casa 🙂

Na época em que comecei a estudar e usar a ferramenta, a iniciativa foi bem vista pela gerência, porém, acharam que a automação iria resolver todos os problemas que a equipe de testes enfrentava e, por conta disso, decidiram aproveitar a parceiria com a Mercury (hoje comprada pela HP) e “enfiar” o Quick Test Pro goela abaixo, promovendo até um treinamento para a equipe de testes.

Devido às restrições do QTP e a baixa testabilidade do sistema, o “projeto” de automação foi um fracasso. Se tivessemos continuado no nosso ritmo, fazendo as coisas do nosso jeito, provavelmente o resultado teria sido outro. Ou não.

Apesar do fracasso com o QTP, eu e mais um colega continuamos usando os nossos scripts, mantendo-os atualizados quando possível, para aproveitar um belo café toda vez que tinhamos que validar as funcionalidades automatizadas.

Quatro anos e duas empresas depois, finalmente consigo retomar os trabalhos de automação quase que em tempo integral. Aproveitando essa oportunidade, decidi recriar este blog para compartilhar alguns dos problemas enfrentados, inicialmente para documentar as soluções encontradas.

Além disso, também está na pauta alguns tutoriais para problemas menos corriqueiros, como o semi-brick do Wii e o que mais eu julgar interessante publicar.

Fé no Caos!

Categories: Geral Tags: