Desempenho

Testes unitários ASP.NET MVC

0

Fala Galera, ontem estava trabalhando em um dos meus projetos pessoais e me encontrei meio perdido, fiquei uns 10 minutos debuggando.. isso porque? bem neste projeto desenvolvemos usando testes unitários, testes são realmente uma ferramente essencial quando estamos falando de refatorações ou até mudanças comportamentais no código.

Eu participo de um grupo de arquitetura que está rolando uma thread sobre testes unitários, acho que a principal pergunta quando falamos de testes é sobre como vamos escrever testes, que comportamentos devemos testar.. Eu já pesquisei bastante sobre testes unitários e achei poucas dicas sobre como escrever testes, depois de um tempo aprendi que este conhecimento é obtido praticando! sim, praticando!

Meu início com os testes unitários não foi facil, eu escrevia testes me baseando no comportamento default esperado com o uso da função testada, acho que no início está é uma maneira eficiente de escrever testes. Depoisde um tempo vi que testes podem fazer mais, podem validar contratos definidos pelos métodos, sendo assim comecei a testar condições comuns que poderiam fazer o método quebrar, foi então que aprendi que testes podem esperar uma exceção.Hoje eu uso testes de maneira muito mais eficiente se comparado quando comecei, e olha que isso tem mais ou menos 1 ano.

Como foi dito no início do post, eu uso testes unitários no meu projeto. Este projeto usa ASP.NET MVC,  no MVC é realmente muito mais facil de testar a execução das  páginas pois na verdade testamos os controller(no WebForm é  melhor usar o selenium).  No ASP.NET MVC, é necessário usar objetos Fake para testar os controller de maneira simples, código para fazer é simples e já foi desenvolvido pelo stephenwalther. O código pode ser acessado aqui no meu projeto(Test->WebUI->FakeObjects), nesta pasta estão os arquivos necessários e aqui um exemplo de uso.

É isso galera, espero que a dica seja boa.. uma maneira facil de testar usando asp.net mvc

C# Yield

1

Fala Galera, depois de aprender a usar a keyword let fiquei um tanto quanto interessado em aprender keywords não tanto populares, eis achei a keyword Yield. Li posts super empolgados sobre a keyword e realmente ela é super legal.

Acho melhor ir mostrando o uso e falando das vantagens. A primeira coisa que devemos saber é que o Yield é uma keyword fundamental para trabalhar com Iteradores, veremos também qual é  a sua importacia por tras de tipos que utilizam Iteradores, principalmente os Enumerables.

Um exemplo comum de código é a filtragem de sublistas de acordo com um dado aspecto, estou querendo falar sobre casos como o exemplo abaixo:

ps:Desconsidere as muitas outras opções de realizar a mesma ação

Acho que a intenção do código de exemplo está ok, certo? sendo assim voltando  ao yield a idéia do mesmo é prover uma melhor maneira de trabalhar com iteradores,
então podemos reescrever nosso método da seguinte maneira:

Esta é uma das maneiras de usar o yield. Para entender a logica do funcionamento acima temos que recorrer ao funcionamento dos iteradores, basicamente temos que saber que os mesmos geralmente possui um método Next() ou também chamado de MoveNext(), o que o método next faz é mover o ponteiro para o proximo item a ser ‘retornado”. O que isso tem a ver com o yield? simples! quando nós usamos o yield return não estamos saindo da função, estamos falando que após o return haverá uma pausa, e quando o proximo item for requisitado(MoveNext)a execução continua de onde foi pausada.

Vantagens

  1. Quantidade menor de código
  2. Desempenho aprimorado
  3. Lazy Loading(ainda será explicado)
  4. Demonstrar conhecimento sobre a linguagem

1-Podemos representar o mesmo código de maneira mais simples

2-O codigo com yield tem quase 1/4 do tamanho do mesmo código com sublista quando representado em MSIL

3-O yield é fundamental para a execução postergada, pois o mesmo prove a opção de recuperar a informação apenas no momento de real utilização da mesma. O yield está por baixo de muita coisa do LINQ .

4-Por ultimo, o yield pode ser usado quando você estiver sem papo com a equipe de desenvolvimento :)

O yield ainda pode ser usado com a keyword break, que define o fim da enumeração, você pode encontrar mais informações aqui

fontes:

http://blogs.microsoft.co.il/blogs/shayf/archive/2008/06/06/give-way-to-the-yield-keyword.aspx

http://en.wikipedia.org/wiki/Coroutine

http://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/

http://www.ytechie.com/2009/02/using-c-yield-for-readability-and-performance.html

http://www.informit.com/articles/article.aspx?p=725693&seqNum=3

Processo de Interpretação

0

Fala galera, este post surgiu de uma questão comum em nossas vidas mas pouco comentada.Lendo sobre processos de execução refleti sobre um ponto legal relativo ao processo de interpretação.Bem,todos nós sabemos que o processo de interpretação executa comando a comando, por esta razão é mais fácil identificar erros durante este processo.Entretanto existe um pouco desvantajoso,Como a interpretação executa linha por linha se tivermos um código com um loop de 500 iterações o código dentro do loop será interpretado 500 vezes. Já a compilação executaria o código uma vez.Bem, também li que alguns interpretadores conseguem melhorar este numero mas mesmo assim o desempenho não é o mesmo. Portanto quem usa uma linguagem interpretativa deve atentar para essas peculariedades.

Go to Top