Uma das conhecidas vantagens do TDD é que ele “diminui o acoplamento”, ou “ajuda a diminuir o acoplamento”. Entretanto, alguns estudos (como os que comentei nesse post) mostram que, quando medidos, a diferença de acoplamento entre projetos feitos com TDD e projetos não feitos com TDD não é tão grande assim. Por que isso acontece?

Suponha o seguinte código:

public class Copiadora {
  public void copiar() {
    var leitor = new LeitorDeXML();
    var escritor = new EscritorPelaSerial();
    while (leitor.TemCaracteres()) {
      escritor.Escreve(leitor.LeCaracteres());
    }
  }
}

Veja que essa classe é fortemente acoplada com duas classes: LeitorDeXML e EscritorPelaSerial. Se quantificarmos isso, podemos dizer que o acoplamento dessa classe é igual a “2″ (já que ela está acoplada a 2 classes).

Mas, ao fazer TDD, você naturalmente criaria um código parecido com isso:

public interface ILeitor {
  bool TemCaracteres();
  string LeCaracteres();
}
public interface IEscritor {
  void Escreve(string conteudo);
}
public class Copiadora {
  private ILeitor leitor;
  private IEscritor escritor;
  public Copiadora(ILeitor leitor, IEscritor escritor) {
    this.leitor = leitor;
    this.escritor = escritor;
  }
  public void Copiar() {
    while (leitor.TemCaracteres()) {
      escritor.Escreve(leitor.LeCaracteres());
    }
  }
}

Veja que agora a classe é acoplada com as interfaces ILeitor e IEscritor. Ainda assim, a métrica de acoplamento nos informaria “2″.

Qual a diferença? A diferença agora é que a classe está acoplada com módulos (classes, interfaces) mais estáveis. A estabilidade, segundo Bob Martin [1], mede o quão difícil (ou improvável) é realizar uma mudança na classe.

As classes LeitorDeXML e EscritorPelaSerial muito provavelmente são acopladas com outras classes (a classe EscritorPelaSerial, por exemplo, deve ser acoplada com alguma outra classe que auxilia na troca de mensagens pela porta serial) e isso faz com que elas possam eventualmente sofrer alterações; são classes mais voláteis. Já as interfaces ILeitor e IEscritor não dependem de nada, são independentes. Além disso, essas interfaces serão implementadas por várias outras classes, e isso faz com que essas interfaces sejam ainda mais difíceis de mudar (afinal, se você mudar uma delas, você vai ter que mudar a implementação em N classes que as implementam), tornando-as assim altamente estáveis.

Podemos dizer então que uma boa dependência é uma dependência com um módulo (ou classe) estável, e uma má dependência é uma dependência com um módulo (ou classe) instável. TDD faz com que o programador acople suas classes com módulos geralmente mais estáveis! Por quê? Porque TDD obriga você a pensar apenas no que você espera das outras classes, sem pensar ainda em uma implementação concreta. Esses comportamentos esperados acabam geralmente se transformando em interfaces, que frequentemente se tornam estáveis.

Para garantir um design de qualidade não basta apenas reduzir o acoplamento, mas sim acoplar com boas dependências! E para medir qualidade de design, também não bastam apenas métricas de acoplamento! :-)

Referências

Esse post é fortemente baseado no trabalho do Bob Martin sobre princípios e métricas de qualidade em design de sistemas orientados à objetos.

[1] Martin, Robert C. Stability (http://www.objectmentor.com/resources/articles/stability.pdf)
[2] Martin, Robert C. Agile Principles, Patterns and Practices in C#

Share

O Encontro Ágil já está entre os maiores eventos de métodos ágeis do Brasil. Este ano serão dois dias de encontro, com a participação de centenas de profissionais e estudantes. O evento reunirá alguns dos principais nomes brasileiros do desenvolvimento ágil de software, e desta vez com convidados internacionais de destaque mundial na comunidade ágil.

O evento acontecerá dentro da Universidade de São Paulo (USP). Os dias 10 e 11 de outubro estão reservados para discussões, trocas de experiências e palestras de especialistas em Programação eXtrema, Scrum, Crystal e nas metodologias mais produtivas do mercado.

Conheça os profissionais que já usam métodos ágeis. Junte-se ao grupo que está revolucionando a maneira de produzir software. Participe das discussões mais atuais do mercado, tire suas dúvidas e descubra como as técnicas ágeis podem ajudá-lo a aumentar a produtividade da sua equipe e a qualidade do seu software.

Este ano, nossos convidados especiais são Jutta Eckstein e Joe Yoder, que ministrarão keynotes e tutoriais durante o evento.

Mais informações em http://www.encontroagil.com.br

Espero vocês lá!

Share

Esse fim de semana estive em Porto Alegre para assistir ao Agile Weekend 2009, que aconteceu nas dependências da PUC-RS. A faculdade lá é muito bonita, o prédio do FACIN (Faculdade de Informática) é moderno. O auditório e as salas disponibilizadas para as palestras são confortáveis.

A palestra inaugural foi dada pelo Daniel Wildt e pelo Luiz Parzianello, e o tema foi “Os desafios da cultura Lean no desenvolvimento de software”, e como o próprio título diz, eles nos contaram muito da experiência deles com Lean. A palestra foi muito interessante!

A partir daí, começou a parte difícil: escolher uma das três palestras simultâneas. Todas elas pareciam excelentes. Optei por assistir a “Java Meets Agile” do Giovani Salvador (Dell/RS) e do Guilherme Elias (FUJA). Um detalhe interessante é que a palestra “Introdução ao Scrum” do Samuel Crescêncio (OnCast/SC) lotou, tiveram que fechar a porta da sala porque não cabia mais ninguém! Voltando a palestra do Giovani, ela foi muito interessante, a primeira parte da apresentação sobre conceitos de métodos ágeis, ele pulou, não era necessário repetir tudo de novo para quem estava ali. Em seguida, falou um pouco da perspectiva do arquiteto de software, onde, segundo ele, os arquitetos não devem utilizar arquiteturas genéricas demais quando não necessário, devem “sujar as mãos” e provar a arquitetura, e não devem fazer do projeto do cliente um verdadeiro laboratório de tecnologias! Da perspectiva do desenvolvedor, ele disse que o desenvolvedor deve sempre desenvolver as atividades de maior prioridade antes (e com isso, os problemas aparecerão antes), escrever testes automatizados junto com alguma ferramenta de cobertura de código e constante refatoração. Sugeriu também alguma técnica de pair programming ou peer review. Os slides dessa apresentação podem ser encontradas aqui.

Após a palestra. fomos almoçar em um restaurante dentro da própria PUC-RS. Barato e bom, aprovado!

Na volta, optei por ver a palestra “Anti-Práticas e Anti-Valores Ágeis” do José Peleteiro (Globo.com). A palestra foi bacana também pra ver que todos podemos errar utilizando métodos ágeis, e inclusive grandes empresas como o Globo.com! Houveram muitas perguntas dos participantes, tornando a palestra ainda mais dinâmica. Detalhe aos slides, que foram muito bem trabalhados. Ao final, o ótimo apelo do “salvem os bebês-foca” rendeu palmas dos participantes! :P

No último horário do dia, optei por ver o workshop de “Simulação de um Projeto Scrum com uma Mini-Fábrica de Aviões”, feita pelo Flávio Steffens (W3Haus/RS) e pelo professor da PUC, Rafael Prikladnicki. A idéia deles foi bem interessante, onde todos nó, em equipes de cinco pessoas, tínhamos que fazer aviões. Mostrou também como nós fazemos coisas sem perguntar primeiro ao cliente, e depois “ficamos bravos” por isso! Mostrou também como nossas estimativas tendem a melhorar depois de alguns sprints.

No segundo dia, a palestra de abertura “A agilidade está no ar – um case na força aérea brasileira” foi dada pelo Alexandre Gomes, Bruno Pedroso e Renato Willi, todos da SEA Tecnologia. A palestra apresentou o case de um aplicativo GED que eles desenvolveram para a aeronáutica brasileira. Muito interessante que eles aplicaram Scrum aos poucos no projeto, mostraram os erros e depois como fizeram para corrigir os mesmos. Mais um exemplo que métodos ágeis só se aprende na prática. Na minha opinião, essa foi a melhor palestra de todo o evento. Os slides estavam muito bem feitos, todos eles com fotos relacionados a aeronáutica!

Em seguida, fui assistir a palestra “Scrum com Soluções simples e de baixo custo”, dada pelo Luiz Faias Jr. (Bluesoft/SP). Muito motivadora também, eles mostraram como eles aplicam Scrum. Detalhe para a tinta magnética junto com os imãs que eles usam para “colar” as histórias na parede, ao invés de usar o tradicional quadro branco. A única partequa não foi tão baixo custo assim, foi quando ele disse que uma tela de plasma avisa quando o build falhou! O problema é que telas de plasma ainda não são de baixo custo! :)

Fui direto para a palestra do Gustavo Casarotto (Metadados/RS) sobre “Métodos Ágeis x Gestão do Negócio”, onde ele abordou como gerenciar uma empresa que utiliza métodos ágeis. Falou dos principais problemas que temos com isso, e como tentar evitá-los.

Acho que a única parte mal organizada do Agile Weekend ocorreu no almoço de domingo, pois todos os restaurantes da faculdade estavam fechados e tivemos que comer na lanchonete do próprio prédio. Essa, por sinal não suportou 400 pessoas pedindo ao mesmo tempo, e eu levei quase 1h pra conseguir meu X-Frango!

Fui correndo então para a sessão livre sobre “Métodos Ágeis no Ensino Superior”, liderada pelo Daniel Wildt (professor da FACENSA) e pelo Rafael Prikladnicki. Tinham poucas pessoas na sala (por volta de umas 6, 7), e a discussão girou muito em torno de como ensinar e embutir métodos ágeis nas atuais disciplinas dos cursos de computação. Alguns tópicos foram levantados, anotados e farão parte das próximas reuniões.

A última sessão livre “Eu Odeio Métodos Ágeis!”, dada pelo Daniel Wildt também foi legal. Ele discutiu muito sobre pessoas que não aceitam métodos ágeis, sem nem ao menos terem lido ou experimentado. E que após algum uso, acabam mudando de idéia e gostando da metodologia. Pena que ele estava sem conectividade na sala, pois iria mostrar posts e artigos relacionados.

Esse foi o Agile Weekend 2009. Considero uma experiência super positiva, pude ouvir várias experiências pessoais sobre implantação métodos ágeis, cada um com seu problema e solução específicos. Foi muito legal também estar perto de entusiastas de métodos ágeis e ver que o Rio Grande do Sul está realmente interessado no assunto também!

A maioria dos slides ainda não foram disponibilizados, mas irei colocando os links assim que receber.

Pedi também ao Paulo Henrique Martins, amigo que me acompanhou no evento, para dar a opinião dele também. E aí vai:

<Paulo Henrique Martins>

Fui com o Mauricio no evento e posso dizer que ele foi bastante interessante, especialmente para mim, que não tenho um conhecimento muito aprofundado sobre o tema.
Sobre as palestras que o Mauricio não conseguiu assistir:

Enquanto ele assistia a palestra do Jose Peleteiro, da Globo.com, eu assisti uma verdadeira aula, muito interessante, do Luiz Parzianello e do Rafael Prikladnicki – “Jogos Estatísticos para a Promoção de Práticas Ágeis”. Assim como a palestra seguinte, de “simulação de scrum em uma mini-fábrica de aviões”, foi muito interativa e divertida, mostrando na prática situações que os métodos ágeis realmente funcionam. Um dos jogos usados inclusive gerou uma interessante discussão confrontando a necessidade de um time contra a ambição pessoal, tocando no assunto de que as equipes precisam se comportar cada vez mais como times onde todos se dispõem a fazer qualquer tarefa, não especificando radicalmente a função de cada um. Assim, um analista deve ter o bom senso de, quando necessário, “se rebaixar” e programar, fazer testes, colocar a mão em todo o sistema visando o bem geral do grupo.

Outra palestra que eu vi foi o case de “Desenvolvimento Ágil num projeto Global”, de Giovani Salvador, da Dell Computer, enquanto o Mauricio assisita a palestra da Bluesoft. Foi também uma interessante demonstração de métodos ágeis, desta vez em um gigantesco projeto que envolvia 3 equipes de tamanho médio em 3 cidades diferentes. Giovani provou com essa palestra que é possível usar métodos ágeis em projetos de longa distância, mantendo a equipe sempre em comunicação por conferências e revezando o papel de Scrum master entre as equipes a cada sprint.

Por fim, ao invés de assistir a palestra “Métodos Ágeis no Ensino Superior”, acompanhei “Agilizando seu Projeto de Software”, do Bruno Pedroso, da SEA Tecnologia. Ele passou algumas dicas para iniciar a implementação de métodos ágeis nos projetos. Foi interessante e o pessoal da SEA Tecnologia comprovou que realmente sabe dar palestras interessantes e divertidas – a primeira palestra (“A agilidade está no ar – um case na força aérea brasileira”) foi muito bem apresentada, com uma divertida seqüência de slides.

Como desenvolvedor, já estou começando a tentar introduzir algumas técnicas aprendidas aqui na empresa. Foi um evento onde eu realmente aprendi bastante. Parabéns à organização, e, devo dizer que a PUC-RS é uma faculdade muito bonita e moderna.

</Paulo Henrique Martins>

E que venha o Agile Weekend 2010! (ou será Agile Week 2010?)

Share

Amanhã estarei embarcando para Porto Alegre, aonde vou assistir ao Agile Weekend, na PUC-RS. Serão 2 dias de métodos ágeis, e imagino que as palestras serão muito boas e proveitosas!

Assim que voltar, postarei sobre a conferência!:)

Share
© 2011 Mauricio Aniche Suffusion theme by Sayontan Sinha