Posts made in August, 2008

JUnit 4 em 60 Segundos

Posted by on Aug 22, 2008 in Agile, Software | 1 comment

Esse artigo que foi escrito por Abdullah Çetin ÇAVDAR em inglês, apresenta de forma simples e rápida como utilizar a nova API do JUnit. Veja também o artigo original.

Brinquei um pouco com JUnit 4  esse final final de semana, e aqui vai uma pequena introdução:

@Test

Anote seus testes com @Test. Você não precisa mais usar o prefixo test nos métodos de testes, e além disso, sua classe também não precisa mais extender TestCase.

@Test
public void addition() {
   assertEquals(12, simpleMath.add(7, 5));
}
 
@Test
public void subtraction() {
   assertEquals(9, simpleMath.substract(12, 3));
}

@Before e @After

Utilize as anottations @Before e @After para para “setup” e “tearDown” respectivamente. Eles serão executados antes e depois de cada um dos seus casos de testes.

@Before
public void runBeforeEveryTest() {
   simpleMath = new SimpleMath();
}
 
@After
public void runAfterEveryTest() {
   simpleMath = null;
}

Utilize as annotations @BeforeClass e @AfterClass para “setup” e “tearDown” a nível de classe. Pense neles como “setup” e “teardown” que são executados apenas uma vez. Eles são executados antes e depois dos testes.

@BeforeClass
public static void runBeforeClass() {
   // executado uma vez antes de todos os testes serem executados
}
 
@AfterClass
public static void runAfterClass() {
   // executado uma vez depois de todos os testes serem executados
}

Tratamento de Exceptions

Utilize o parâmetro “expected” da annotation @Test para casos de uso que esperam exceptions. Escreva o nome da classe da Exception que deverá ser lançada.

@Test(expected = ArithmeticException.class)
public void divisionWithException() {
   // divisao por zero
   simpleMath.divide(1, 0);
}

@Ignore

Use a annotation @Ignore para testes que você queira ignorar. Você pode adicionar um parâmetro String que defina o motivo pelo qual você está ignorando o teste.

@Ignore("Não está pronto para ser executado")
@Test
public void multiplication() {
   assertEquals(15, simpleMath.multiply(3, 5));
}

Timeout

O parâmetro “timeout” define o tempo máximo em milisegundos. O teste falha caso o período seja excedido.

@Test(timeout = 1000)
public void infinity() {
   while (true);
}

New Assertions

Compare arrays com os novos métodos de asserção. Dois arrays são iguais quando tem o mesmo tamanho e cada elemento é igual ao correspondente no outro array.

//public static void assertEquals(Object[] expected, Object[] actual);
//public static void assertEquals(String message, Object[] expected, Object[] actual);
 
@Test
public void listEquality() {
   List expected = new ArrayList();
   expected.add(5);
 
   List actual = new ArrayList();
   actual.add(5);
   assertEquals(expected, actual);
}

JUnit4Adapter

Rode os testes do JUnit 4 no JUnit 3 com o Junit4Adapter.

public static junit.framework.Test suite() {
   return new JUnit4TestAdapter(SimpleMathTest.class);
}

Boa Codificação!

Read More

Como arruinar com XP e Scrum

Posted by on Aug 8, 2008 in Agile | 2 comments

No inicio da semana fiz uma apresentação na Bluesoft baseado nos slides do Henrik Kniberg sobre “Como Arruinar com Scrum e XP”, foi extremamente proveitoso e já estamos colhendo frutos porque exergamos alguns problemas que precisamos solucionar.

Ontém, Kniberg, também autor do livro “Scrum and XP from the trenches”, que está sendo traduzido para o português fez essa apresentação no evento Agile 2008 em Toronto no Canadá.

O Guilherme Chapiewski da Globo.com está participando do evento e falou um pouco sobre a visão dele em relação a palestra.

Segundo o Gojko Adzic, Kniberg falou sobre sintomas e problemas comuns do dia-a-dia das equipes ágeis, e pediu para que platéia votasse naqueles problemas que mais os afetassem. A platéia votou através de cartões coloridos, um verde que sinalizava que o problema não era tão grave, um amarelo que sinalizava um problema que afetava um pouco, e um vermelho que sinalizava um problema grave. Isso ajudou que que fossem identificados os problemas mais comuns entre as equipes ágeis.

Os tópicos levantados foram os seguintes:

1. A Bala de Prata – Crenças Falsas (muitos cartões amarelos)

  • acreditar em mágica — “todos os nosso problemas serão magicamente resolvidos quando implementarmos XP”
  • Resistencia a mudança
  • Descartar coisas que funcionam
  • Focar demais na perfeição do processo
  • Tentar ter tudo certo desde o começo
  • Foco na ferramenta —”vamos comprar a ferramenta mais cara de XP”
  • Foco em coisas sem importância (Devemos utilizar post-its ou cartões)

2. Definição de Pronto – DoD (mais cartões amarelos e vermelhos)

  • não tê-la
  • não obedecê-la
  • foge do controle da equipe

3. Velocidade (empate)

  • não é medida
  • é medida porém, não é utilizada pra nada
  • marcha lenta
  • existe trapaça
  • velocidade io-io – muito inconstante

4. Retrospectiva (empate)

  • não acontece
  • não resulta em melhorias
  • mudanças não são executedas e verificadas
  • pessoas indesejáveis na reunião
  • faltam membros da equipe ou o product owner
  • equipe penalizada por mundanças negativas

5. Comprometimento (mais vermelhos e amarelos)

Equipe Unida

Equipe Unida

  • equipe pressionada – prazos, marcha lenta, gerentes agressivos
  • equipe desunida
  • equipe sem disposição para aprender
  • sempre pouco compromentimento
  • sempre muito comprometimento
  • velocidade zero — nada entregue

6. Débito Técnico (mais vermelhos)

  • não é gerenciado
  • nada nunca é resolvido
  • é ignorado
  • melhorias feitas no produto, mas nunca no processo

7. Trabalho em Equipe (amarelos e vermelhos)

  • papéis fixos — “eu nunca vou mexer nisso aí”
  • backlogs pessoais
  • pessoas não se ajudam
  • modelos de incentivo pessoal
  • implementação de várias estórias em paralelo
  • interferência do gerente

8. Product backlog e product owner (mais vermelhos)

  • não há backlog
  • o backlog não é visível
  • estórias grandes demais ou sem fim
  • product owner sem conhecimento de negócio
  • product owners demais
  • product owners conflitantes
  • product backlog sem manutenção
  • product owner surpreendido na demonstração do sprint

9. Medo de integrar código – “fazer merge” (empate)

  • sem branch pronto
  • sem regras de criação e integração de branches
  • regras pouco claras ou mal definidas
  • integração pouco frequente ou cedo demais

10. Sprint backlog/quadro de tarefas (empate)

  • não existe
  • muito longe da equipe
  • complicado — “colunas demais”
  • não usado na reunião diária
  • não pertence ao time
  • sem burndown chart
  • não é atualizado diariamente
  • sinais de alerta ignorados

De acordo com os votos da platéia o débito técnico, o product backlog e as tarefas do product owner são os principais problemas. Os slides da apresentação estão disponíveis do site do Kniberg.

Fiquem ligados no Blog do Guilherme para maiores informações sobre as palestras realizadas no evento.

Read More

The Developers Conference 2008

Posted by on Aug 1, 2008 in Agile, Eventos, Software | 1 comment

Complementando o que já falamos sobre o evento The Developers Conference (TDC) 2008 da Global Code, gostaria de expor com mais detalhes os assuntos que nos foram apresentados.

O Evento foi aberto na sexta-feira por uma apresentação do Burr Sutter (cuidado ao pronunciar) da JBoss sobre a JBoss Entrerpise SOA Plataform, Burr falou sobre Enterprise Service Bus (ESB), JBoss Rules (Drools) e Business Proccess Managment (BPM).

Burr Suter da JBoss

O Edgar Silva , também da JBoss, falou um pouco mais sobre SOA apresentando RestEasy e Drools e jBPM.

Pra mudar um pouco de assunto assisti a palestra do Renato Belia sobre persistencia com Java Persistence API (JPA).

O Vinícius Senger apresentou modularização e mundo OSGi de uma forma muito criativa, através de modelos criados no Google Sketchup. Comentou sobre as vantagens de se quebrar aplicações em partes menores, falou sobre como reduzir acomplamento e trabalhar com várias versões da mesma biblioteca em uma mesma JVM com as propostas das JSRs 291 e 297.

Vinicius Senger da Global Code

Vinícius Senger da Global Code

O palestrante internacional Reza Rahman da Tripod falou sobre as novidades que viram no Java Enterprise Edtion 6, como Profiles, EJB 3.1, Bean Validation (JSR 303), Web-beans (JSR 299) e JBoss Seam, JPA 2.0 (JSR 317), JAX-RS, JAX-WS, etc. Reza deixou bem claro que é muito importante que toda a comunidade Java participe com sugestões, codigo fonte e feedback. Achei muito util as novas annotations para agendamento de tarefas (@Schedule) no estilo Cron, as invocações assíncronas (@Asyncronous), os Singleton Beans Thread Safe, os wars simplicados, o web.xml opcional (graças as annotations), as novidades da Servlet 3.0 (JSR 315). Houve tradução simultanea para quem prefiriu ouvir a palestra em português.

Reza Rahman

Reza Rahman

Ed Burns, outro palestrante internacional, líder da especificação do JSF 2.0, que também esteve no Brasil no TDC 2007, fez uma apresentação muito parecida com a que havia feito no JavaOne em maio. Falou sobre as novidades que estão por vir no JSF 2.0, como melhor suporte a Facelets, Ajax, Annotation-Driven Features como @ResourceDependency, Data Validation (JSR 303), melhorias de performance, facilitadores para REST, Project Stages (como no Rails), e Convention over Configuration (CoC).

A Esquerda Reza Rahman e Ed Burns a Direita

Ed abriu o evento no sábado com uma palestra sobre seu novo livro “Secrets of the RockStar Programmers“. Foram apresentados trechos em áudio das entrevistas que foram feitas com grandes personalidades com mundo da tecnologia como James Gosling, o pai do Java, Rod Johnson, o criador do SpringFramwork, Adrian Colyer do AspectJ, os caras do JavaPosse, Andy Hurt, fundador da Agile Alliance e co-fundador do Pragmatic Programmers, entre outros.

O nosso querido Mister M também falou em sua palestra sobre as novidades do Java EE 6 e Java SE 7, comentou sobre o Swing Application Framework (JSR 296), Beans Binding (JSR  203) e NIO 2 (JSR 203). Apresentou com muita autoridade tudo sobre a Date and Time API (JSR 310), também, a final de contas, é ele quem põe a mão na massa…

Mister M

O Moacyr de Mello da IBM / Rational falou sobre a plataforma Jazz, e como modelar processos com a ferramenta, me pareceu algo muito interessante, porém confesso que ainda não consegui compreender bem como isso funciona… Achei muito interessante o template de Scrum.

Fomos almoçar em uma cantina bem tradicional proxima ao local do evento, feijoada excepcional!

Feijoada Ágil

Feijoada Ágil

E por falar em Scrum, falou-se muito sobre metodologias agéis no evento. A comunidade ágil estava em peso com seus representantes: Juan Bernabó da Teamware, Vinícius Teles da Improveit, Rodrigo Yoshima da Aspercom, Alexandra Magno da Caelum, o Heptaman da Heptagon, Jorge Diz da GlobalCode, André Piza da UOL, Enio Stein  da Paggo, José Papo da FIAP, Manoel Pimentel da Visão Ágil, Felipe Rodrigues da Fratec entre muitos outros. Houve um debate sobre metologias ágeis em que dentre muitos assuntos discutiu-se sobre CMMi com Metologias Ágeis, a briga foi boa, dado que contavamos também com a presença do Marcos Dorça da Borland que defendeu o lado do CMMi.

Debate sobre metodologias Ágeis

Debate sobre metodologias Ágeis

O Vínicus Teles da Improvit gravou várias entrevistas ao longo do evento e as está disponiblizando aos pouquinhos no blog da Improvit, recomendo a todos que assitam, material de ótima qualidade, garanto!

A GlobalCode também disponibilizou os PDFs das apresentações no site deles e as fotos do evento estão no Picassa.

Gostaria de agradecer ao Vínicus Senger e a Yara Senger, a toda a equipe da Global Code, aos Javistas e Agilistas, e a todos que estiveram presentes e ajudaram para que este fabuloso evento pudesse ser realizado. Um grande abraço também para o Mauricio Leal, e ao todo o pessoal do SouJava, e ao Bruno e todo o pessoal do GUJavaSC, e é claro quero também agradeço a Bluesoft por me permitir e apoiar à participar do evento. Fica um abraço para o Bolha e para o Junião que estiveram lá comigo.

Fiquem ligados vem aí USCS.java, Sun Tech Days, Just Java 2008, Rails Submit Latin America, entre outros eventos que prometem dar mais ainda o que falar…

Grande Abraço,
André Faria

Read More