Arquivo para junho \18\UTC 2009

1º Coding Dojo DotNetFloripa – Diário de Bordo

Salve pessoal!

Ontem ocorreu o primeiro Coding Dojo do grupo DotNetFloripa. Acabei não anunciando aqui no blog (a lista de dois grupos me pareceu uma audiência um pouco maior :)), mas ao menos os resultados ficarão registrados por aqui.

A idéia do dojo surgiu numa troca de e-mails em que discutíamos possíveis temas de futuros eventos do grupo e, como eu nunca havia ouvido falar da expressão (vcs realmente já haviam? :)), saí pesquisando pelo Google, seguindo links, aquele processo habitual. Também habitualmente metido, enviei algumas sugestões e acabei abraçando a organização desse primeiro encontro. Muito gratificante!

Coding Dojo: evento onde um grupo de programadores, utilizando TDD e baby steps, tenta resolver um problema proposto de lógica. Todos dão pitacos e revezam-se no teclado e como “co-pilotos”, o que torna a interação muito maior. O grande objetivo não está na resolução do problema, mas sim na troca de informações e contato com novas idéias, tecnologias e formas de programar, o que sempre acaba agregando.

Não compareceram muitas pessoas (8 no total), o que acabou mostrando-se positivo no final do encontro. A interação e participação de todos ocorreu acima do esperado (pelo menos por mim), o que foi um dos pontos fortes do evento. Estava com um pé atrás pois nas reuniões do grupo que participei a interação do pessoal com o palestrante, no geral, não era das mais eloquentes. Nesse encontro, entretanto, todos contribuíram com idéias para o código, dúvidas e tudo mais. Como boa parte do pessoal ainda não utiliza TDD no dia a dia, boa parte do tempo foi utilizada discutindo alguns conceitos, explicando outros, etc, etc. Por este motivo acabamos não tendo tempo para concluir o problema, mas espero que não faltem próximas oportunidades.

No final, chegamos a uma lista de pontos positivos e outros que podemos melhorar para os próximos encontros:

Pontos positivos:

  • Número de participantes: mesmo não plenejadamente, foi consenso entre todos que um número de participantes maior que 10 pode inviabilizar a interação no dojo;
  • Prova do TDD: mesmo não tendo codificado tanto quanto deveríamos (construímos 4 métodos de teste) já foi possível exemplificar o valor do TDD quando, devido à alteração para um teste, outro anteriormente “green” passou a falhar;
  • Participação do pessoal: todos interagiram e sentaram-se pra programar, sem medo de ser feliz. Dicas de VS, frameworks, TDD, lógica e dúvidas surgiram aos montes. Muito legal;

Pontos a melhorar:

  • Conceituação de TDD: pela pouca experiência de parte do pessoal com TDD, a maior parte do tempo foi utilizada em conceito ao invés de programação. Apesar de também ser positivo, o ideal seria fazermos uma palestra sobre TDD para que pudéssemos simplesmente praticá-lo no Dojo (obs.: a palestra já está sendo agendada);
  • Tempo de cada piloto: não houve um controle do tempo que cada um passava programando, o que dificultava as trocas num tempo “justo”. Foi sugerido que utilizemos uma abordagem “ping pong”, onde um desenvolvedor implementa um teste falho e o próximo faz o teste corrigir. Muito válido;
  • Piloto “type only”: em mais de uma situação a pessoa que estava programando simplesmente digitava o que os outros iam falando, não dando oportunidade ao piloto e ao co-piloto de decidirem por um passo antes de serem questionados. Talvez o ideal seja dar mais autonomia ao piloto/co-piloto (definição do próximo teste falho, por exemplo) para depois virem sugestões, questionamentos e tudo mais;
  • Resolução do problema: não conseguimos resolver o problema dentro do tempo previsto, se na próxima deixarmos ele sobreviver novamente vai virar questão de honra.. 🙂

Se alguém quiser ver o PPT com a descrição do problema que tentamos resolver + conceitos de Dojo e TDD + código desenvolvido, coloquei tudo no RapidShare pra baixar. É só clicar aqui. Abaixo segue uma das fotos tiradas por lá do pessoal interagindo:

1oCodingDojoDotNetFloripa

Gostaria de agradecer ao pessoal do DotNetFloripa que compareceu no encontro pela presença e interação, ao pessoal do DojoFloripa pelo feedback positivo e representação (1 dos participantes era de lá! :)) e ao Ivan Sanchez (ex-DojoFloripa, atualmente em Londres) que me ajudou a esclarecer várias dúvidas e tornar esse primeiro encontro possível.

Comentários de qualquer tipo são bem-vindos. Até o próximo Dojo!

José Filipe

Rollback automático com NUnit

A situação é comum: você constrói um conjunto de testes unitários baseado em registros que estão salvos em um banco de dados e tudo funciona bem. O problema é que assim que os dados são alterados/apagados/inseridos pelo primeiro ciclo de testes, seus Asserts simplesmente deixam de funcionar – e você precisa de alguma maneira voltar a base ao seu estado original.

Bom, antes de qualquer coisa vamos deixar algo claro: provavelmente você não devesse estar dependendo de um banco de dados. Se você estiver testando sua camada de domínio, o ideal é que suas suas classes de controle consumam uma interface de suas classes DAO cuja dependência tenha sido injetada. Isto permitirá que você construa stubs de suas classes de acesso a dados, garantindo que seus testes rodarão rapidamente (e que você sempre tenha coragem para rodá-los!) e não dependam de um banco de dados para serem rodados.

Mas suponhamos que você tenha uma razão muito forte para querer depender de um banco de dados. Você pode estar testando a camada de acesso a dados em si, stressar seu database através de testes unitários ou simplesmente já possuir um conjunto muito grande de testes prontos que desencorajam o refactor (não é algo que você deva se orgulhar, mas coisas assim acontecem). Em qualquer um desses casos, você tem algumas opções:

  1. Escrever seus testes para que eles sejam auto-suficientes: uma boa prática, seguindo a “metodologia” AAA de testes unitários: Arrange, Act, Assert. Para alguns casos (com muitos registros envolvidos), entretanto, isto pode ser bastante trabalhoso (e demorado);
  2. Criar um backup da base que você roda os testes e restaurá-lo constantemente: menos trabalhoso, mas longe do ideal. Mesmo automatizando o restore via código trabalho adicional associado sempre que os dados fossem efetivamente alterados (para adição de novos testes, por exemplo);
  3. Recarregar os dados do database a partir de XML, DBF ou algo que o valha: uma opção legal e até bem difundida. Arquivos XML ou de qualquer outro tipo, entretanto, não são minha representação ideal de dados relacionais;
  4. E por último, é claro, a opção que falaremos aqui: utilizar o XtUnit, framework desenvolvido pelo Roy Osherove (uma espécie de bam-bam-bam dos testes unitários) que permite um rollback nos seus dados com um simples attribute de [DataRollBack].

Continue lendo o post completo..

Transformando DataSet para Excel através de XSL

Desde a época que comecei a trabalhar com desenvolvimento (e lá se vão mais de 5 anos :-)) transformar informações carregadas do banco de dados em Excel é uma tarefa presente. Naquela época o sistema era feito em Delphi 5 e utilizávamos uma classe que encapsulava o objeto COM do próprio Excel. O programador que quisesse aquela funcionalidade em sua tela de exportação, com seu próprio layout de arquivo, tinha que realizar loops aninhados e desbravar o mundo dos objetos não tipados (tipo var no Delphi) pra conseguir setar cores, dados, fontes, formato de número e tudo mais.

Já não desenvolvo mais em Delphi há algum tempo e provavelmente hoje exista algo mais simples pra criar arquivos Excel a partir de DataSets ou algo que o valha na linguagem (talvez até já existisse aquela época e eu que não conhecesse), mas a questão é que a demanda permanece e, mesmo no mundo .NET, as soluções utilizadas, em sua maioria, não são exatamente simples. Com esse post pretendo mostrar como criar arquivos Excel a partir de DataSets com ASP.NET de uma maneira bastante simples e direta.

Continue lendo o post completo..


Perfil

Olá! Meu nome é José Filipe e sou o autor deste blog. Trabalho como Gerente de Desenvolvimento da todo! BPO, onde sou responsável pela manutenção e evolução de pessoas, processos e sistemas desenvolvidos em diferentes tecnologias. Atualmente curso uma especialização em Engenharia de Software pela PUCPR, em Curitiba, mas moro em Florianópolis, onde me graduei em Sistemas de Informação pela UFSC. Possuo o título de MCP e com base nas experiências do dia-a-dia espero trazer ao blog assuntos interessantes sobre arquitetura e desenvolvimento .NET..

Arquivos

Páginas

junho 2009
S T Q Q S S D
« maio    
1234567
891011121314
15161718192021
22232425262728
2930