Feeds:
Posts
Comentários

Archive for novembro \20\UTC 2008

Bem, demorei mais do que havia planejado para escrever esse post. Nesse post eu vou falar sobre TDD com Test Doubles.

Para começar a apresentar os conceitos de Test Doubles, pedi para eles desenvolverem uma aplicação simples que deveria se conectar a um web-service que eu estava disponibilizando. Todos desenvolveram a aplicação utilizando TDD, so far so good. Então eu alterei o código do meu web-service, em um momento dei um sleep de 180 segundos e depois fiz ele lançar uma exceção.

Utilizei essas duas situações para mostrar um exemplo onde a utilização de Test Doubles: quando o sistema/classe depende de um recurso externo e/ou lento (acesso a rede ou disco por exemplo). Em seguida, eles fizeram outros testes, agora utilizando um mock e outro utlizando um stub que nós criamos.

Continuando comentei com eles outros benefícios de se utilizar Test Doubles, como o fato de você poder testar uma classe, sem que todas as classes do qual ela depende já estejam implementadas. Por exemplo, utilizando a idéia do web-service, se você está implementando uma classe que irá utilizar um cliente do web-service para pegar uma lista de tags para apresentar quais são as tags mais utilizadas. Abaixo um pedaço de código, demonstrando como a classe utiliza o cliente do web-service.

class TagsGenerator {
	private $client;
	public function __construct(WebServiceClient $client){
		$this->client = $client;
	}
	private function buildTagList(){
		$list = $this->client->getTagList();
                // código omitido
	}
        // demais métodos omitidos
}

Claro que você está sempre programando para a interface, então WebServiceClient é uma interface e não uma classe. Veja então que eu vou poder testar essa minha classe, antes mesmo que haja alguma implementação para a interface WebServiceClient. Aproveitei também esse exemplo para comentar mais sobre inversão de controle(IoC). Abaixo um exemplo de um método de teste.

	public function testShouldReturnMusicAsTopOneTag(){
        $stub = $this->getMock('WebServiceClient');
        $stub->expects($this->any())
             ->method('getTagList')
             ->will($this->returnValue(array('Music','Games','Videos')));
        // aqui, usando IoC e um stub eu posso testar
        // minha classe que constrói a lista de tags
        $generator = new TagsGenerator($stub);
        // resto do teste abaixo
	}

Outro benefício que pode ser alcançado com uma boa OO e test doubles é o isolamento entre testes. Além disso, comentei sobre o Mocks Aren’t Stubs do Fowler, que fala sobre as diferentes formas de se utilizar TDD, classicist ou mockist e citei que na minha opinião a melhor abordagem é saber utilizar bem as duas formas de TDD.

Final se semana escreverei outro post, comentando como foi feito o TDD com banco de dados.

Read Full Post »

Continuando o assunto do post anterior, dessa vez Uncle Bob resolve dar sua opinião sobre o booom de projetos ágeis” que estão aparecendo (e falhando) por todo lado.

Uncle Bob em Dirty Rotten ScrumDrels.

Read Full Post »

James Shore pra mim é um daqueles autores que quando ele fala em Agile, ele leva em consideração o que Agile é e não quanto dinheiro ele pode ganhar em suas consultorias, então é uma opinião a ser respeitada.

No Brasil, as listas de discussões viraram local para se fazer propaganda do curso X, da consultoria Y ou site Z faz tempo, a única lista onde esse pessoal não se criou, foi a xp-rio (lá você pode fazer perguntas sabendo que o pessoal vai te responder sem pensar que você é um possível cliente). Opiniões são completamente baseadas em “quantos clientes eu posso conseguir afirmando que X é melhor que Y?”.

Toda semana vejo aparecer um curso de Scrum novo, ministrado por alguém certificado PMP e “Certified Scrum Master”, acho que isso acaba gerando uma boa parte do problema. Sua empresa quer Agile com CMMI ? Sem problemas tá cheio de consultor por aí pronto para quebrar os valores ágeis somente para ganhar um dinheiro da sua empresa.

Como o Milfont já havia previsto, o Scrum está se tornando cada vez mais o PMBoK de jeans.

Sinceramente, se você esta querendo iniciar com desenvolvimento ágil, Scrum, extreme programming, Lean, crystal… utilize as listas de discussão para fazer perguntar e tirar suas dúvidas. Contudo filtre bem as respostas, tenha em mente que tem muita gente ali que precisa de convencer que X é melhor que Y ou que X é perfeito para seu ambiente, muitos vão mentir deformar o movimento ágil o quanto for necessário, somente para conquistar seu dinheiro 🙂

Isso não quer dizer que você não deva contratar um coach para ajudar com o desenvolvimento ágil em sua empresa, isso com certeza é algo que vai acelerar bastante as coisas. Contudo, preste atenção em quem você está contratando.

Voltando agora para o James Shore, ele escreveu um post que relata muito bem um fato que vem acontecendo devido a toda essa fama do agile, não vou repetir o que ele escreveu lá, então o link é esse The Decline and Fall of Agile.

Read Full Post »

Achei duas apresentações que Miško Hevery fez no google (onde ele trabalha), estão no youtube com o título The Clean Code Talks (nome bastante sugestivo), por enquanto só assisti uma e achei boa, então ficam aqui os vídeos.

Read Full Post »