Esse vídeo foi gravado já faz um tempo pelo Fabio Akita e foi postado no blog dele. Eu acho este vídeo tão bom que resolvi colocá-lo aqui, talvez alguém ainda não tenha visto.
Tag Archives: programação
100% de Code Coverage?
De forma simplificada, o code coverage é uma métrica usada em testes automatizados que aponta o percentual de linhas de código que estão sendo cobertas pela suite de teste. Ter 100% de coverage significa que toda linha do seu código de produção está sendo executada pelo menos uma vez.
Sabendo disto, lhe pergunto, o que você ganha ao atingir 100%? 
Ter um software com 100% de cobertura de testes não significa que seu software é bug-free e muito menos que ele é melhor que um software que possui apenas 80%. Além disso, eu poderia até dizer que 100% de cobertura é quase impossível. Nos projetos em que eu tentei cobertura total, geralmente eu conseguia no máximo 95% usando testes um tanto quanto inúteis, apenas para aumentar o percentual. O maior problema ao estabelecer uma meta de 100% é que seu foco ao escrever um teste acaba se voltando para atender esta meta, e não mais para testar um requisito.
Um adepto de TDD geralmente terá perto de 90% de coverage. Porquê? Porque se você escreve o teste antes, ao codificar o código de produção você fará apenas o necessário para o teste passar, nem uma linha de código a mais, nem a menos, ou seja, 100%. Em todo caso, por algum motivo de seu framework ou linguagem, você é obrigado a escrever algumas linhas não esperadas no seu teste, e isso vai fazer seu coverage baixar, por isso o 90%.
Eu não tenho o costume de verificar o coverage constantemente, executo apenas uma vez ou outra para ter uma idéia de como está a situação. Se está muito baixo, e eu considero baixo até 80%, eu busco encontrar o que está baixando tanto assim minha coberturda. As vezes é porque um método que foi criado e que não é mais utilizado ainda está dentro de uma classe, ou então uma classe que por algum motivo eu esqueci de testar. Enfim, para mim, 80% ~ 100% é um valor aceitável.
Para quem nunca usou code coverage em C#, eu recomendo baixar o plugin TestDriven.Net que já vem com diversos frameworks de teste como MbUnit e NUnit além do NCover.
Veja abaixo uma imagem das informações mostradas pelo NCover. Aquele percentual vermelho ali mostra que apenas X% das linhas daquela classe estão sendo executadas no teste. Por exemplo a classe CodeUtil (0%), não possui teste nenhum.
CSharpista falando Javanês, minha opinião sobre o Java

Até duas semanas atrás, meu conhecimento de Java beirava o nulo. Eu já conhecia a sintaxe, afinal, é parecida com C#. Conhecia alguns frameworks famosos também, como o Hibernate e log4j, mas colocar a mão na massa, nunca.
O projeto em que eu iria iniciar tinha como pré-requisito ser escrito em Java, com isso, tive que aprender linguagem e alguns de seus frameworks. Foi e está sendo uma experiência bem legal, e por isso resolvi compartilhar ela, bem como falar um pouco da minha opinião sobre o Java.
Sintaxe e Padrões
Preciso adminir que sou fã da forma como é implementado o get/set em C#, acho o resultado muito mais legível e de fácil compreensão. Um pequeno comparativo:
Em C#:
//definição
public class Cliente
{
public string Nome { get; set; }
public int Idade { get; set; }
}
//uso
public class ClienteController
{
public void Adicionar()
{
Cliente cliente = new Cliente();
cliente.Nome = "João Salsa";
cliente.Idade = 23;
if (cliente.Idade > 20)
{
//stuff
}
}
}
Em Java:
//definição
public class Cliente {
private String nome;
private Integer idade;
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
public void setIdade(Integer idade) {
this.idade = idade;
}
public String getIdade() {
return this.idade;
}
}
//uso
public class ClienteController {
public void adicionar() {
Cliente cliente = new Cliente();
cliente.setNome("João Salsa");
cliente.setIdade(23);
if (cliente.getIdade() > 20) {
//stuff
}
}
}
Self-explanatory, além de menor, fica mais fluente, não?
A questão das chaves também me chamou a atenção. Tanto no PHP quanto no Java, o padrão é utilizar as chaves na mesma linha da instrução, já no C#, na linha abaixo. Neste ponto eu fico com o padrão do Java. Compare o if dos dois códigos acima, se no lugar do comentário “//stuff” tivesse realmente uma única instrução, no Java ficaria mais junto e fácil de ler. Eu sei que não há necessidade de se usar chaves nestes casos, mas eu gosto.
IDE (eclipse)
Algumas hotkeys do eclipse são interessantes, por exemplo, o CTRL+SHIFT+T. Este atalho abre uma janela para pesquisar classes pelo nome usando wildcards, * e ?. Vejam a imagem abaixo:

Imagem retirada de Java Place Blog
Existe isso no Visual Studio? Eu quero :D
Outro recurso do eclipse que gostei bastante foi o do highlight que ele faz quando você clica em alguma variável ou método, vejam só:

Imagem retirada de satukubik
Ah, outro detalhe importante. Levei menos de 2 minutos para “instalar” o eclipse contra as quase 1 hora que leva o Visual Studio. Copy and Paste definitivamente é melhor que Next, Next, Finish. E isso ocorreu com tudo o que eu precisei instalar de Java na máquina: Tomcat, Eclipse e JBoss. Apenas a JDK foi no instalador. Kick ass, definitivamente.
Frameworks
Até o momento tive pouco contato com os frameworks Java, mas é impossível não falar do maven. Caramba, que fantástico, é muito útil mesmo, e até o momento não tive nenhum problema com ele. De forma simplificada, é um framework onde você define quais são as dependências do seu projeto e ele se encarrega de montar seu projeto com todas as dependências definidas, fazendo download e adicionando as referências necessárias.
Outros frameworks que tive contato foram Struts2 e JSF. Pelo o que pudi perceber, o JSF é para o ASP.NET WebForms o que o Struts2 é para o ASP.NET MVC. Eu, sendo fã de ASP.NET MVC, optei por usar Struts2. De modo geral, eu estou gostando, alguns itens como model binding e configuração deixam a desejar. A configuração é toda feita em arquivos *.xml e cada dia que passa os xml estão ficando maiores. Saudade do ASP.NET MVC onde eu configurava as rotas via C# e com sintaxe fluente…
Tirando essa parte da configuração, achei bem fácil de customizar os filters, results e interceptor, não tive que ir em nenhum tutorial, descobri sozinho, e isso só mostra o quanto é fácil.
Quanto ao JSF, um dia foi suficiente para eu largá-lo. Muita semelhança com o ASP.NET WebForms me deixou com medo, a falta de controle no HTML foi um dos motivos maiores, além disso a curva de aprendizado do JSF foi maior que o Struts2. Não fui muito a fundo no JSF, posso ter me enganado, mas a primeira impressão não agradou.
Comunidade
Aqui é que geralmente a maior partes das intrigas são geradas. Conforme este meu post, acho o GUJ um excelente fórum de discussão de alto nível. Vejo que falta isso na comunidade .NET, as dúvidas que surgem em alguns fórum são geralmente relacionados às funções de wizard e drag and drop do Visual Studio. É mais fácil achar uma discussão de algum design pattern ou arquitetura em um grupo de Java do que em um de C#.
Felizmente as coisas estão mudando, a grande movimentação que há no grupo de discussão .Net Architects prova que existe muita gente interessada em aprender e discutir este tipo de assunto.
Conclusão
Cada linguagem/plataforma tem seu espaço e momento, nunca vi uma discussão entre duas linguagens que tivesse um fim. Além disso, cada pessoa tem sua preferência e sua opinião, e devemos saber respeitá-las. Eu, por exemplo, não me dou bem com Ruby, já tentei, mas não consigo, eu prefico ficar com PHP e Python. Não digo que Ruby é ruim ou qualquer coisa do tipo, apenas não gosto. Eu não gostava de Java até então, achava tudo muito complicado, agora já estou mudando de opinião, conforme eu fui aprendendo, fui vendo que não é um bixo de 7 cabeças.
Gostei de Java, adorei a oportunidade que estou tendo de aprender, consegui sair um pouco do meu mundinho csharpista e abriu algumas portas em minha mente, porém, minha preferência continua sendo C#, I love it <3 :D
