"O futuro parece ser extremamente brilhante, com muitas possibilidades pela frente - grandes possibilidades. Como a canção diz: 'Nós precisamos apenas começar'." - Bruce Lee

PodcastProgramação orientada a aspectos é uma ótima saída para solução de requisitos ortogonais em projetos de software. Após algumas experiências e palestras sobre o tema, tive a oportunidade de participar da gravação de um podcast com a galera do .NET Architects: Alexandre Valente e Fábio Gouw.

Nos projetos em que usei AOP, trabalhei com o framework PostSharp, mas no podcast também abordamos Aspect.NET e AspectJ.

Vale muito a pena pesquisar sobre o tema.

Podcast

Post no DNA

http://podcast.dotnetarchitects.net/2010/05/podcast-13programacao-orientada-a-aspecto/

Tagged with:
 
"Seja como a água que abre caminho através das pedras: não se oponha ao obstáculo; contorne-o!" - Bruce Lee

Olá Pessoal! Para auxiliar quem está começando ou quer começar a utilizar o TDD, estou disponibilizando um vídeo com uma demostração da ténica. O objetivo do vídeo é apresentar a utilização do TDD e fornecer algumas dicas sobre como se sair bem na utilização da técnica. Espero que gostem do vídeo:

Dicas gerais sobre TDD

Sempre inicie com uma lista de testes : No TDD, não saímos codificando. Antes de iniciar a construção de qualquer coisa, elabore uma lista de testes inicial. Caso seja necessário, você poderá incluir mais itens na sua lista de testes mesmo depois de já ter iniciado a codificação;

Sempre inicie pelo teste mais simples : Após elaborar sua lista de testes, inicie a codificação pelo teste mais simples da sua lista. Desenvolvendo dessa forma, você não só ganha ritmo, mas também vai aprendendo de pouco a pouco sobre o problema que está resolvendo.

Comece a construção do seu código pela construção do seu teste : Desenvolvendo o teste primeiro (como preza o TDD) temos a oportunidade de tomar decisões de design das nossas classes antes mesmo de construí-las. Iniciar a construção do código pelo teste possibilita que você veja o seu código pela perspectiva de quem o utilizará, ou seja, você terá um feedback de utilização antes mesmo de codificar sua classe.

Comece o teste pela assertiva : Iniciar o teste pela assertiva é definir o objetivo do teste. Escrever a assertiva é definir onde você quer chegar no teste, qual objetivo quer alcançar, se isso não estiver bem definido não adianta escrever o teste.

Simule até construir realmente : Sempre que possível, construa implementações falsas. Deixe para construir as implementações reais só quando for realmente necessário.

Busque o verde o mais rápido possível : Quando o teste estiver vermelho, procure fazê-lo passar o mais rápido possível, mesmo que a implementação feita não seja a mais agradável de ver. Quando o teste estiver verde, substitua a implementação feita por uma implementação mais elegante, afinal, a fase de refatoração serve para isso. :)

Construa somente o necessário para o teste passar : Não construa nada além do que o seus testes pedirem. Se desejar realizar alguma codificação, escreve primeiro um teste e depois o código. TDD também exige muita disciplina.

Passos de bebê : Procure sempre dar passos pequenos durante a construção dos seus testes, evite assumir um teste muito difícil ou grande logo de cara, deixe sempre os testes mais complicados para o final.

Links

Faça download do projeto construído: ConversaoNumerosRomanos

Veja outros links sobre TDD no delicious: delicious.com/denisferrari/tdd

Abraços!

Tagged with:
 

Design By Contract (DbC) em .NET

"O homem, criatura viva e criador individual, é sempre mais importante do que qualquer estabelecido estilo ou sistema." - Bruce Lee

Design By Contract (DbC)Olá Pessoal! Estou escrevendo esse post no intuito de compartilhar com vocês o resultado de uma de minhas pesquisas: Como aplicar o Design By Contract usando os recursos do framework .NET.

O conceito DbC é usado para garantir o estado de seus objetos em tempo de execução. Basicamente, quando construímos nossa classe usando o conceito DbC, definimos acordos formais (o que chamamos de contratos) com quem a utiliza. Esses contratos visam garantir regras de utilização e estado, regras essas que são expressas através de pré-condições, pós-condições e invariantes.

Vamos explorar algumas situações do nosso dia-a-dia para fortalecer o conceito e aprender a utizar a classe Contract que se encontra no namespace System.Diagnostics.Contracts:

Como podem ver no código abaixo, estou criando uma classe chamada Cor que receberá no construtor uma string contendo o código hexadecimal. No teste, desejo garantir que caso a classe Cor seja instanciada com um parâmetro nulo, uma exceção do tipo ArgumentNullException seja lançada.

1
2
3
4
5
6
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Deve_rejeitar_parametros_nulos()
{
    var cor = new Cor(null);
}

Para fazer o nosso teste passar, poderíamos verificar se o parâmetro é nulo usando if e lançar a exceção, porém, quando pensamos em contratos, o que fazemos é criar uma pré-condição de utilização da nossa classe. Para construir pré-condições, utilizamos o método Requires da classe Contract informando qual tipo de exceção será lançada caso o contrato for quebrado. Vejam o código abaixo:

1
2
3
4
5
6
7
8
9
public class Cor
{
    public Cor(string pCodigoHexadecimal)
    {
        Contract.Requires<ArgumentNullException>(pCodigoHexadecimal != null);
 
        // Código que converte o hexadecimal...
    }
}

Como podem ver, o código fica bem mais limpo e expressivo. Sem falar que caso você tenha o plugin do Visual Studio instalado terá essas verificações de constrato em tempo de design, isso mesmo, enquanto você cria suas classes seu código será analisado para verificar possíveis quebras de contrato. Vejam a imagem abaixo:

validacaoContrato

Vamos para outra situação: Agora nossa classe Cor possui um construtor que recebe as taxas de vermelho, verde e azul. Construímos um método para adicionar tonalidades de vermelho na cor, porém, a taxa máxima permitida de vermelho é de 255.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[TestMethod]
public void Deve_garantir_taxa_de_vermelho_menor_ou_igual_255()
{
    var vermelho = 200;
    var verde = 200;
    var azul = 200;
    var cor = new Cor(vermelho, verde, azul);
 
    try
    {
        cor.AdicionarVermelho(56);
    }
    catch
    {
        // O método deve lançar a exceção pois 200 + 56 ultrapassa o limite de 255.
        Assert.AreEqual(vermelho + 56, cor.Vermelho);
    }
}

Para garantir o limite da taxa de vermelho no nosso objeto, precisamos que o nosso método seja executado para então verificar o estado. Em DbC podemos criar uma pós-condição para avaliar o estado do nosso objeto ao final da execução do nosso método/propriedade. No exemplo abaixo usamos o método Ensures para criar a pós-condição que verifica a taxa de vermelho do nosso objeto após a execução do nosso método. Os contratos sempre são definidos no início dos métodos/propriedades.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Cor
{
    public int Vermelho { get; private set; }
 
    public Cor(int pVermelho, int pVerde, int pAzul)
    {
        this.Vermelho = pVermelho;
        // Configurar as outras propriedades...
    }
 
    public void AdicionarVermelho(int pValor)
    {
        // Aqui estamos garantindo que ao final da execução desse método, a propriedade Vermelho deverá respeitar o limite de 255;
        Contract.Ensures(this.Vermelho <= 255);
 
        this.Vermelho += pValor;
    }
}

As pós-condições são tão simples de serem escritas quanto as pré-condições.

Outra forma de garantir o nosso limite de 255 é criar um contrato invariante, ou seja, uma regra que será mantida sempre, independente de quais método forem executados no objeto. Para criamos o contrato invariante no .net usamos o método Invariant da classe Contract. Métodos invariantes são verificados sempre após a execução de qualquer método público da sua classe, eles só devem ter declarações de contratos e não podem retornar valores.

1
2
3
4
5
[ContractInvariantMethod]
private void Invariant()
{
    Contract.Invariant(this.Vermelho <= 255);
}

Como vimos, DbC é uma obordagem muito interessante e pode nos auxiliar muito no dia-a-dia. O objeto desse post não é apresentar bons padrões para design de testes ou grandes soluções no trabalho com cores, os exemplos aqui mostrados visam apenas apresentar alguns recursos da classe Contract. Façam os devidos testes e contem o que acharam do recurso e dessa abordagem.

Separei alguns links interessantes sobre o assunto no delicious, veja no link: delicious.com/denisferrari/DbC.

Fico no aguardo do feedback de vocês.

Abraços!

Tagged with:
 

Mercado e Carreira em Desenvolvimento de Software

"Otimismo é a fé que conduz ao sucesso." - Bruce Lee

A pedido do Prof. Lourival Cristofoletti apresentei para uma turma e Ciência da Computação na Faculdade Faesa dicas sobre o mercado e a carreira de desenvolvimento de software. Essa palestra já foi há algum tempo, mas estava organizando as apresentações no meu computador e esbarrei com essa palestra.

Engraçado como as coisas acontecem, olhando as fotos da palestra vejo que um dos coordenadores do MSDev-ES e atual membro do time de desenvolvimento da Mindworks estava lá, o Rafael Hrasko. A foto também mostra o ponto onde iniciei algumas boas amizades, afinal, ainda sou formando na Faesa.

A idéia da palestra surgiu a partir de algumas conversas com o Prof. Lourival, que sempre foca nas suas aulas em dicas sobre a carreira e no desenvolvimento profissional dos alunos. Fiquei muito feliz com a confiança depositada em mim pelo Prof. Lourival, afinal de contas, não sou tão mais velho do que os alunos daquela turma, só iniciei na área mais cedo. Depois dessa palestra, decidi escrever algumas idéias sobre Mercado e Carreira, e ingressei no time de colaboradores do Portal Minha Carreira.

Decidi gravar a palestra no formato de screencast e disponibilizá-la aqui no entuito de ajudar quem estiver começando nessa área da qual me orgulho tanto trabalhar. Espero que gostem. Aguardo o Feedback de vocês.

Screencast

Fotos

Apresentação

Tagged with:
 
"Meus seguidores em Jeet Kune Do, atendem a isso: todas as normas fixas são incapazes de adaptabilidade ou flexibilidade; a verdade está fora de todas as normas fixas." - Bruce Lee

No dia 16/06 tive a oportunidade e a honra de palestrar na faculdade UNES em Cachoeiro-ES. O Evento foi organizado pelo MIC e marcou a inauguração do mais novo prédio da faculdade. A minha palestra representou a comunidade de desenvolvedores capixabas, o MSDev-ES. A segunda palestra foi realizada pelo Cleyton Santana do grupo MSInfraES.

Falar para pessoas que estão iniciando na área de desenvolvimento de software é uma extrema responsabilidade, por isso, ao invés de falar somente sobre TDD procurei mostrar alguns problemas da área e boas práticas através do case do meu primeiro projeto de software relevante (tinha 17 ou 18). Esse projeto foi realmente traumático, porém, definiu muitos dos meus paradigmas atuais sobre a carreira e o desenvolvimento de software em geral.

Troquei muitas informações com os profissionais locais após a minha palestra, fizemos tanto networking que acabei nem assistindo a segunda palestra do evento. Outro ponto relevante é que muitas pessoas que estavam lá tinham comparecido ao Maré-VIX, evento que organizei no CET-Faesa poucos dias antes.

Fotos

Slides da apresentação

Espero que os presentes tenham gostado do evento assim como eu gostei. Agradeço ao MIC e a UNES pela oportunidade e pela confiança.

Abraços!

Tagged with:
 

Podcast: Modelo Anêmico

"Quando a geração mais velha diz NÃO a algo, geralmente desaprova sem análise, peremptoriamente... só porque a tradição diz ser errado! Raros são os indivíduos que usam a mente para chegar à verdade e expressar sinceramente seus reais sentimentos." - Bruce Lee

Modelos anêmicosTive a oportunidade de participar do podcast sobre Modelos Anêmicos com a galera do .Net Architects: Giovanni Bassi, Alexandre Valente, Emmanuel Brandão e Fábio Margarito.

Esse podcast ficou muito legal, rolaram discussões muito bacanas sobre o assunto, sem falar que os comentários nos bastidores da gravacão são muito engraçados.

Espero que gostem dos tópicos apresentados no podcast.

Podcast

Post no DNA

http://podcast.dotnetarchitects.net/2010/03/podcast-11-modelo-anemico/

Tagged with:
 

I Fórum Microsoft para Gerentes de Sistemas em Vitória-ES

"A tradição nada mais é que uma fórmula imposta pela experiência anterior... mudem, precisamos reformular nossa fórmula!" - Bruce Lee

Na quarta-feira (14/07) tivemos o I Fórum Microsoft para Gerente de Sistemas em Vitória-ES. O evento foi realizado pela Mindworks a convite da Microsoft, e a equipe de desenvolvimento entrou em cena para apresentar as novidades do Visual Studio 2010, Scrum, TDD, Ferramentas de qualidade do VS2010 e por fim, o TFS.

Foi uma imensa responsabilidade apresentar novas ferramentas e principalmente novas idéias em desenvolvimento de software para representantes das empresas do mercado capixaba e para os desenvolvedores presentes. Vejam como foi cada parte do evento:

Novidades do Visual Studio 2010

Abri o evento apresentando as novidades do Visual Studio 2010, e não tinha como não ficar empolgado com tanta coisa boa! Queria mostrar exemplos de tudo, mas não havia tempo, e ainda assim atrasei “um pouco” a minha palestra para apresentar todos os recursos que tinha preparado. Alguns tópicos abordados:

  • IntelliTrace
  • Gráfico de dependências
  • Diagrama de camadas
  • Ferramentas para Deploy
  • Novidades do C# 4.0
  • Novidades do ASP.NET 4.0
  • Code Analysis
  • Performance Analysis
  • Biblioteca para Paralelismo
  • Novidades no desenvolvimento para SharePoint

Ao final da apresentação, quem já gostava do Visual Studio passou a gostar mais, e quem não conhecia viu o poder dessa IDE.

Scrum e Desenvolvimento Ágil

O André Pires apresentou muito bem a metodologia ágil e seus princípios.  Como de costume, a palestra dele foi muito interativa e divertida. Discutimos muito com os representantes do mercado e do governo o cenário atual dos nossos projetos de software e por que precisamos adotar novas estratégias se quisermos melhorar nossas estatísticas de sucesso.

Essa palestra foi praticamente em dupla, pois o André sempre solicitava relatos de experiências e complementações da minha parte. Aproveitei para explicar a importância do trabalho iterativo e por que projetos de software são tão difíceis de serem estimados.

Gosto muito do assunto e das discussões que rolam, mas a impressão que tive é que todos os presentes concordaram que a forma de trabalho que estávamos apresentando possuía práticas que facilitariam o desenvolvimento como um todo.

TDD e Ferramentas de garantia da qualidade no Visual Studio 2010

Tenho falado muito sobre TDD aqui em Vitória. Por questões de tempo, procurei não apresentar todas as dicas que geralmente dou e mostrar um exemplo prático de aplicação do TDD, uma espécie de TDD para iniciantes.

A segunda parte da palestra foi dedicada as ferramentas de Teste do Visual Studio. Gosto muito dessas ferramentas, a Microsoft acertou mais uma vez, apesar de ainda acreditar que eles podem melhorar a biblioteca Microsoft.VisualStudio.TestTools.UnitTesting para dar mais poder e semântica aos testes unitários.

TFS

Só o TFS daria um evento inteiro. O André apresentou a utilização do template Scrum e mais uma série de recursos do TFS, os presentes realmente ficaram impressionados com o nível de integração e as facilidades que os recursos apresentados geram para a equipe.

Fotos do evento

Apesar do trabalho que dá, não vejo a hora do próximo evento. :)

Agradeço a todos os presentes e a Mindworks pela oportunidade.

Abraços!

Tagged with: