Utlizando a FileHelpers para trocar o formato de arquivos csv

Aug 23
2010

No trabalho surgiu a necessidade de migrar o layout de um arquivo texto usado entre a Fenacor e as Seguradoras. O arquivo hoje é um txt simples com registros separados por “;” mais particularmente conhecido como formato CSV. O novo layout contempla mais informações e possui 3 tipos de registros distintos dentro do mesmo arquivo. Isso acabou com a compatibilidade que os sistemas mais antigos tinham com o arquivo. Resumo da brincadeira: tivemos que pensar numa solução genérica para resolver a situação.

Acabou que o mais prático e barato era receber o arquivo no formato novo, voltar ele pro antigo e permitir que os sistemas continuem trabalhando da mesma forma. Isso gera impacto zero de alteração e manutenção dos sistemas. Criamos então um aplicativo simples que permite mudar a versão do arquivo da Fenacor. Para tal utilizamos a FileHelpers para facilitar o trabalho. E realmente facilitou: quase não escrevi código para fazer isso.

Com a FileHelpers em ação foi necessário definir uma classe para cada tipo de registro  e uma classe orquestradora onde o código de leitura do arquivo novo já preenche um array de objetos todos tipados:

Daí ficou mais fácil ainda pois bastou fazer um “de – para” do formato novo para o antigo e usar o método engine.WriteFile(caminhoArquivoDestino, ListaRegistrosAntigos) . Pronto, está feito. A performance foi ótima poucos segundos para um arquivo com 250 mil registros). Portanto para manipular arquivos texto em .Net não conheço melhor, por isso mesmo recomendo. É open source, muito bem documentada com exemplos em código e com um wizard, testada com NUnit e em evolução constante. Muito boa.

Link: www.filehelpers.com

I Workshop Brasileiro de Otimização em Engenharia de Software

Jul 23
2010

No programa de mestrado é necessário atingir um número de publicações para conseguir o título de mestre. Além disso artigos e publicações contam como produção acadêmica e pesquisa. Então não tem jeito: tem que escrever! E como meu orientador costuma dizer: vamos escrever logo porque isso aqui é uma esteira de produção, temos que estar sempre produzindo no programa. Sendo assim resolvemos escrever um artigo técnico sobre o andamento da minha pesquisa de dissertação e tentar publicar em simpósios e congressos. Feliz foi a minha surpresa ao ser aceito logo de cara nos dois que tentei:

SSBSE: 2nd International Symposium on Search Based Software Engineering

WOES: XXIV Simpósio Brasileiro de Engenharia de Software (SBES´2010)

Portanto, setembro vai ser um mês cheio pra mim! Logo no início do mês vou à Itália apresentar o trabalho no SSBSE e esticar um pouco a estada, afinal ninguém é de ferro né! Na volta já me preparo para apresentar o trabalho de novo no WOES. Detalhe: em alguns dos comentários dos revisores eu tive um feedback muito positivo. Alguns dos pesquisadores que avaliaram a minha pesquisa lamentaram ela ainda estar num estágio inicial. Isso me deu mais força ainda para ir adiante e fechar esse estudo de caso. Num próximo post falarei do trabalho em si.

Estudo sobre Métodos Heurísticos com foco em testes de software

Jun 30
2010

Tenho uma amiga virtual, a Ananda Menali, que sempre me pergunta: “Por que os títulos das coisas que você escreve são tão esquisitos e complexos?”. Pois é, isso se deve porque na linha de pesquisa em que me encontro inscrito no PPGI (Programa de Pós-Graduação em Informática) na UniRio (Universidade Federal do Estado do Rio de Janeiro) o negócio é assim: complicado! Existe uma divisão na parte de Engenharia de Software onde temos o pessoal da área soft, que trata de processos e nós da área hard, que tratamos de desenvolvimento. Apesar da brincadeira o trabalho em ambos os campos é bem pesado. Numa pós graduação Strictu Senso em TI, não tem como os títulos dos trabalhos serem normais né Ananda? ;)

Na parte hard da coisa, que é a minha praia, temos um grupo de pesquisa em Engenharia de Software Orientada a Buscas (SBSE – Search Based Software Engineering), onde realizamos pesquisas de otimização combinatória. Todas as pesquisas são direcionadas à desenvolvimento de aplicações e gerência de projetos. Otimização combinatória é um “troço” de doido. Das pesquisas que estão em andamento, apenas duas já fecharam. Eu sou da terceira turma do programa e só o pessoal da primeira turma conseguiu defender. A pesquisa que eu acompanhei trata de um método para propor uma organização para a equipe de testes com o objetivo de atender à correção de bugs. Achei o assunto muito interessante afinal sou desenvolvedor e trabalho com isso  diariamente. Ela motivou meu trabalho no campo de otimização. Mas então: o que é otimização combinatória? Vamos falar português?

Para falar de otimização primeiro precisamos falar de problemas e suas classes. Existem duas classes de problemas que os dividem em tipo P e NP. Problemas do tipo P são aqueles para os quais existem soluções que podem ser encontradas num tempo exeqüível. Tempo exequível significa, de fato, viável. Matematicamente estamos falando de tempo polinomial, ou seja, o crescimento do tempo pode ser descrito por um polinômio. Dada uma instância (uma entrada) N do problema, o tempo para encontrar a solução é algum polinômio do tipo 2N.  Português: você leva duas vezes o tamanho da entrada para resolver o problema. Sendo assim se a entrada tem tamanho 3 a solução é encontrada em 6. Crescimento alto, sem dúvida. Porém exeqüível, polinomial.

Porém, esse é um grupo restrito de problemas. Problemas de otimização são problemas complexos por natureza, afinal o objetivo é melhorar uma solução, otimizar. É aí então que entram os problemas do tipo NP.  Problemas do tipo NP são aqueles para os quais não há solução em tempo polinomial, ou seja, não pode ser descrito por um polinômio. Esse tipo de problema possui características que fazem com que o tempo para encontrar uma solução cresça exponencialmente. Usando o mesmo exemplo se a equação que descreve o crescimento do tempo de um problema NP é 2N, então para uma entrada de tamanho 3 temos 23 que é 8. Conforme o tamanho da instância do problema cresce, o tempo para encontrar a solução vai se tornando inviável. Aplicações práticas de alguns problemas não permitem que eles demorem muito para encontrar uma resposta. Um exemplo clássico na área é o da Mochila binária.  Encher uma mochila com itens que tem peso e valor, sabendo que não pode ultrapassar a carga da mochila é fácil. Existem N métodos que podem fazer isso. Agora encontrar o melhor grupo de itens de forma que maximize o valor e minimize o peso já não é tão simples. Se permitirmos também colocar na mochila frações desses itens, o problema fica tão complexo que vai para um grupo específico de problemas chamado NP-Hard. Agora imaginem que seria necessário, por exemplo, 8 horas para encontrar a forma otimizada (solução ótima) de encher a mochila. Quem usaria uma solução dessas? Na prática você colocaria os melhores itens que coubessem e pronto, já está bom! Em geral uma solução boa (próxima da ótima) já atende bem ao problema.

Levando em consideração essas duas características podemos concluir que se existir um método que encontre uma solução boa num tempo melhor do que varrer todas as opções, podemos aplicá-lo. Esse raciocínio permitiu a criação de métodos quem encontram boas soluções com alguma garantia de distância da solução ótima. Esses métodos usam heurísticas para chegar nesses resultados. Através da implementação de algoritmos heurísticos é possível, por exemplo, que um roteador decida uma determinada rota boa num tempo bom. Determinar um rota tem que ser algo rápido e explorar todas as possibilidades é inviável. Portanto usa-se uma heurística e aceita-se um certo nível de qualidade da solução.

Acho que para esse post já está bom. Falamos dos tipos de problemas e sobre a SBSE. Num próximo falo da minha pesquisa e de como estou evoluindo com ela.

Alguns links relacionados:

SBSE Repository
Programa de Pós-Graduação em Informática – Unirio
2nd International Symposium on Search Based Software Engineering

Visit Our Friends!

A few highly recommended friends...

Archives

All entries, chronologically...

Pages List

General info about this blog...