paulovittor23 — Blog do PV

Author Archive

Posted by paulovittor23 at 7 Fevereiro 2012

Category: Git, Java, Ruby

Tags:, , , , ,

Logo GitHooks, que podem ser traduzidos como “ganchos”, são pequenos scripts que podem ser adicionados dentro do diretório “.git/hooks/”, existente em todo projeto que utilize o Git como ferramenta de controle de versão, para efetuar ações disparadas por alguns eventos, como pre-commit, post-commit etc (para conhecer todos os eventos visite o Git Community Book).

Quando executamos o comando “git init”, alguns scripts são copiados no diretório de hooks do projeto, porém por padrão ficam desabilitados. Para ativar um script de hook basta remover o sufixo “.sample” do nome dos scripts. Obviamente, não basta apenas ativar o script, é necessário que o desenvolvedor customize o script para realizar alguma ação desejada.

Bom, a principal intenção deste post é demonstrar uma das possibilidades de aplicação deste recurso do Git, a efetivação de commits que não quebrem os testes unitários (JUnit, no caso do Java, e RSpec, no caso do Ruby). Isso é muito útil pois evita que builds nos servidores de Integração Contínua (como o Jenkins) sejam quebrados, pois qualquer commit local dos desenvolvedores estará sendo, mesmo que forçadamente, validados. É, eu sei, no mundo ideal isso não deveria ser necessário, pois todos os desenvolvedores deveriam ter noção de que mesmo alterações ínfimas no código podem ter resultados catastróficos e, por livre e espontânea vontade, deveriam executar com frequência os testes unitários, mesmo porque são rápidos e não causam qualquer tipo de overhead no dia-a-dia do desenvolvedor, aliás, muito pelo contrário!

Bom, recentemente escrevi dois hooks para validação dos commits, um para projetos Java que rodem os testes através do Maven e outro para projetos Ruby que utilizem o RSpec. Ombos os scripts são muito simples e podem ser facilmente adaptados para projetos que usam Gradle, Test-Unit, TestNG, Shoulda etc.

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Java com Maven:

#!/usr/bin/env ruby

puts "Git hook pre-commit: #{__FILE__}"
puts "Executing maven tests: mvn clean test"

output_filename="#{Time.now.strftime("%Y-%m-%d_%H-%M")}_git_precommit_tests_result.log"
output=`mvn clean test > /tmp/#{output_filename}`  

if $?.success?
  puts "#################################################################"
  puts "No errors were found o/"
  puts "#################################################################"
else
  puts "#################################################################"
  puts "Commit aborted!"
  puts "WTF are you doing? Sorry, but some errors were found, dude!"
  puts "For more informations, read the file: #{output_filename}"
  puts "#################################################################"
  exit 1
end

Download Git hook pre-commit para Java

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Ruby com RSpec:

#!/usr/bin/env ruby

puts "Git hook pre-commit: #{__FILE__}"
puts "Executing RSpec tests..."

html_path = "tmp/spec_results.html"
`spec -f h:#{html_path} -f l spec` # run the spec. save html results to html_path

# find out how many errors were found
html = open(html_path).read
examples = html.match(/(d+) example/)[0].to_i rescue 0
failures = html.match(/(d+) failure/)[0].to_i rescue 0
pending = html.match(/(d+) pending/)[0].to_i rescue 0  

if failures.zero?
  puts "#################################################################"
  puts "No errors were found o/"
  puts "0 failures! #{examples} run, #{pending} pending"
  puts "#################################################################"
else
  puts "#################################################################"
  puts "Commit aborted!"
  puts "WTF are you doing? Sorry, but some errors were found, dude!"
  puts "#{failures} failures! #{examples} run, #{pending} pending"
  puts "View tests results at #{File.expand_path(html_path)}"
  puts "#################################################################"
  exit 1
end

Download Git hook pre-commit para Ruby

Bom é isso, para quem quiser conhecer mais sobre o recurso de Hooks do Git, vale a leitura do Capítulo 5 do Git Community Book, exclusivamente dedicado aos Hooks.

Posted by paulovittor23 at 31 Outubro 2011

Category: Utilidades

Iniciando os posts da categoria “Utilidades”, onde pretendo escrever sobre ferramentas que facilitam a vida dos desenvolvedores, hoje irei escrever sobre o uso do firewall Iptables para o bloqueio de acesso de e para determinados IP’s.

Ok, mas isso é importante no cotidiano de um desenvolvedor?
A resposta é simples, SIM!

Os desenvolvedores precisam sair do seus mundinhos de “IDE sofisticada” e entender um pouco mais do mundo que os cercam, principalmente quando o assunto for infra-estrutura! Pois é lá que sua aplicação irá “viver”!

(mais…)

Posted by paulovittor23 at 28 Outubro 2011

Category: Matemática, Project Euler

Inicialmente, para quem ainda não conhece, o Project Euler é um site que visa encorajar, desafiar e ajudar os desenvolvedores a melhorar suas habilidades técnicas de uma forma divertida e muito relacionada com o mundo da matemática.

Existem atualmente 356 desafios, sendo que destes, até o momento, resolvi 23. Não considero este último o mais difícil dentre os já resolvidos, mas, como possui o menor número de pessoas que solucionaram, achei interessante deixar exposta a forma como resolvi..

Primeiramente, vamos ao enunciado do problema 23:

Um número perfeito é um número cuja coma de seus divisores é exatamente igual ao próprio número. Por exemplo: a soma dos divisores de 28 é 1 + 2 + 4 + 7 + 14 = 28, o que significa que 28 é um número perfeito.
Um número n é chamado de deficiente quando a soma de seus divisores é menor do que n e é chamado de abundante se a soma exceder o número n.
Como 12 é o menor número abundante, 1 + 2 + 3 + 4 + 6 = 16, o menor número abundante que pode ser escrito com a soma de dois números abundantes é 24.
Por análise matemática, é sabido que todos os inteiros maiores que 28123 podem ser formados através da soma de dois números abundantes.
No entanto, este limite não pode ser reduzido através de análise, embora seja sabido que o maior número que não pode ser expresso como a soma de dois números abundantes é inferior a este limite.
Encontre a soma de todos os números inteiros positivos que não podem ser formados através da soma de dois números abundantes.

(mais…)

Posted by paulovittor23 at 1 Maio 2010

Category: Engenharia de Software

Em muitas organizações, o custo com teste de software é de 30 a 50% do custo de desenvolvimento do software. Ainda assim, a maioria das pessoas acredita que o software não é bem testado. Esta contradição é causada por dois fatores: primeiro, teste de software é uma tarefa difícil; segundo, testes são feitos sem nenhuma metodologia clara. Neste artigo, discutiremos como usar casos de uso para gerar casos de teste, e como estes podem ser utilizados para iniciar os procedimentos de teste mais cedo no ciclo de vida de desenvolvimento.

Casos de uso, de uma forma geral, dizem ao cliente o que esperar, ao desenvolvedor o que deve ser codificado, ao escritor técnico o que documentar e ao testador o que testar.
(mais…)

Posted by paulovittor23 at 12 Abril 2010

Category: Engenharia de Software

Uma análise de requisitos baseada em casos de uso é uma técnica bem empregada para captura e apresentação dos requisitos de software. O sucesso desta técnica pode ser justificado pela habilidade nos dar uma visão coesa dos requisitos do sistema para todos os stakeholders.

Este artigo visa explorar as necessidades de cada um destes stakeholders e destacar as características de casos de uso bem escritos, ou seja, apresentando os seus recursos, mensagens de fluxos de erro excepcionais, dependências, pré e pós condições de processamento etc.

(mais…)