terça-feira, 29 de junho de 2010

PDF do webcast de hoje sobre Master Data Services

Oi pessoal.
Hoje eu gravei um webcast sobre o Master Data Services para o MSDN, que em breve ficará disponível no Media Center do MSDN (atualizarei o post com o link). Ele foi moderado pelo Thiago Zavaschi (http://www.zavaschi.com/) que respondeu com extrema precisão as perguntas dos participantes.

A pedido do pessoal, disponibilizo o PDF da apresentação para consulta. Você pode baixar o arquivo aqui.



[]s

Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quinta-feira, 24 de junho de 2010

A busca sem fim: Qualidade dos dados

Prólogo: No último ano eu tenho trabalhado bastante com projetos de integração de bases e limpeza de dados, acumulando uma boa experiência com SQL Server e SSIS, além do processo de limpeza, integração, problemas mais comuns, falta de conhecimento do mercado sobre o assunto e miopia da gerência sobre o assunto, que se ainda não assombra, com certeza ainda trará sustos para a organização. As empresas estão cada vez mais cientes sobre processo de desenvolvimento, ALM, ferramentas, soluções de TI, etc. Mas a limpeza de dados e integração são assuntos extremamente delicados e muitos preferem não levantar o tapete para descobrir a poeira que está embaixo.

Dito isso comecei a escrever um artigo sobre qualidade de dados e, pelo andamento da carruagem e listagem dos tópicos, acredito que ele vai crescer muito. Então ao invés de esperar N dias para algo completo, resolvi publicar paulatinamente o texto em meu blog para apreciação. No fim vocês terão um artigo completo em PDF, mas até lá gostaria de ouvir a opinião de vocês sobre o assunto.

Espero que gostem...


A busca sem fim: Qualidade dos dados

 Durante meus últimos anos trabalhando com o SQL Server, uma constante de muitos lugares onde eu passei foi a qualidade, vamos dizer, duvidosa dos dados e a bagunça que vai se formando quando a empresa e o número de sistemas crescem. Começam a surgir “mini-sistemas” (e soluções departamentais) para atender a demandas pontuais de negócio, grandes sistemas com “puxadinhos” para atender novas regras de negócio ou tentar facilitar a vida do usuário final.

Dentro desse contexto de crescimento e evolução da tecnologia da informação, é natural que chegue um momento onde a alta gerência da empresa passe a demandar uma visão consolidada de toda empresa, seja implantando uma solução de BI, ERP, CRM, e outras tantas sopas de letrinhas.

É nesse momento, quando nas N bases isoladas nas mais diversas e esdrúxulas fontes de dados, precisam ser integradas, limpas e conformadas, para que a nova solução empresarial (usualmente iluminada pelos holofotes de toda organização, nascendo cheio de expectativa e promessas de maravilhas) consiga atender seu objetivo.

E esse processo de extração, transformação e carga dos dados (ELT – Extract, Transform, Load) ou ECCD (Extract, Clean, Conform, Deliver) – termo “roubado” dos jargões de DW, que precisa ser executado para garantir o nascimento de uma linda criança, e não um Frankstein cheio de remendos. Esse pequeno item, que de pequeno não têm nada, é onde as dificuldades aparecem e muitas vezes não é dada a devida atenção, tocando em um ponto crucial, a qualidade dos dados.

Notem que não estou restringindo o ETL a ser usado somente por um projeto de DW, se estou fazendo uma integração de bases terei que passar naturalmente por esses mesmos passos, só que não carregarei uma estrutura dimensional, mas talvez crie um único banco de dados centralizado ou um repositório para master data management.


Um repositório com 100% de qualidade de dados ... É possível?


SIM... Com um pequeno detalhe: desde que sejam acordadas pelo cliente e área de TI as exatas definições de qualidade (e este não seja 100% de limpeza e conformidade em todas as entidades). Realisticamente falando, essas definições nunca serão conseguidas durante a análise de requisitos, mas sim durante a limpeza dos dados e com a correta dimensão do tamanho do problema (profiling). Durante esse processo, o faxineiro (área de TI) e o patrão (negócio) podem concordar que manter uma poeira na estante é aceitável, mas é claro que a expectativa é sempre que a casa fique brilhando, mas para isso acontecer só embalando tudo a vácuo...

Agora, 100% de limpeza como normalmente está na cabeça do usuário final (nenhuma inconsistência em ponto algum), eu não acredito. Não por falta de ferramentas ou abordagens para fazer isso, mas porque os sistemas originais, os vícios do usuário final e todas as estruturas que geram as inconsistências não serão trocados no mesmo instante em que você acabou de fazer a melhor limpeza, digna dos deuses. Então eu consigo pensar em um conjunto de dados (estático) que seja completamente limpo e a qualidade garantida, mas quando esse trabalho acabar, um conjunto de novas inconsistências estarão esperando para serem tratadas.

É importante que o os stakeholders dos novos projetos estejam cientes da dificuldade e complexidade desse processo contínuo de limpeza. E aí eu acho que nós, como TI, falhamos em apresentar por completo as possíveis barreiras que devemos encontrar e tradicionalmente fazemos estimativas mais otimistas que o devido. O problema é que esse dimensionamento e exemplificação não é algo simples, e a experiência e calos passados contam muito na hora de fazer o próximo trabalho.

Meu conselho: se você está trabalhando ou vai participar de um projeto de integração e limpeza de bases, se prepare para um projeto desafiador... (Mas excelente para a alma geek e o bom profissional).


(Continua na parte 02...)



[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 23 de junho de 2010

MSDN Webcast: Padronize seus dados com o SQL Server 2008 R2 Master Data Services

Bom dia pessoal.
Na próxima semana eu volto a apoiar o MSDN com mais um webcast, dessa vez sobre o Master Data Services.

Se você já conhece o conceito de Master Data Management (ou que conhecer) e gostaria de ver a solução da Microsoft nesse âmbito, participe do webcast de introdução ao SQL Server 2008 R2 Master Data Services.
Eu já andei falando sobre o assunto em dois eventos presenciais da Microsoft, mas agora terei um porquinho mais de tempo para explorar em maiores detalhes (sem precisar explicar alguns conceitos correndo) dessa nova ferramenta.

A inscrição no evento pode ser feita pelo site: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032449964&EventCategory=4&culture=pt-BR&CountryCode=BR

Título: Padronize seus dados com o SQL Server 2008 R2 Master Data Services
Idioma(s): Português.
Produto(s): Microsoft SQL Server.
Público(s): Dev/Programador Pro.

Duração: 60 Minutos
Data de Início: terça-feira, 29 de junho de 2010 12:00 Brasília
Palestrante: Luciano Moreira
Visão Geral do Evento


O novo recurso do SQL Server 2008 R2 chamado de Master Data Services ajuda as empresas a padronizarem os dados críticos para o seu negócio. Com o Master Data Services, as organizações podem gerenciar de uma forma centralizada um grande volume de dados, possibilitando o acesso seguro e integridade das informações à diversos sistemas. Entenda neste WebCast o que é o Master Data Services e como ele pode ser utilizado em seu ambiente.

Espero vocês na próxima semana!

[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 22 de junho de 2010

Exceções em testes de unidade para banco de dados

Como todo bom geek que se preza, estou tentando usar os diversos recursos que temos disponíveis nas nossas ferramentas e que muitas vezes ficam em segundo plano, pois acabamos viciados no que nos é comum.

Com um extremo cuidado estou tentando criar testes para meus projetos e recursos auxiliares, para garantir um kit profissional, com garantia da qualidade e confiabilidade, então nada mais natural que recorrer aos testes de unidade.
 Ao invés de trabalhar com o nosso tradicional UnitTest.cs e codificar todos os setups e testes em C#, resolvi usar o velho e bom DataDude (AKA. Visual Studio Database Professional), que na versão do 2010 me parece somente estar incluso nas versões Premium e Ultimate (http://www.microsoft.com/visualstudio/en-us/products).

Usando meu projeto de teste eu adicionei o item "Database Unit Test" e codifiquei para a procedure chamada proc_CriaSnapshot, uma série de testes (bem como o setup destes) utilizando o Transact-SQL. Durante a codificação eu achei relativamente simples a criação dos testes, mas não gostei da maneira que foi fornecida para tratar os erros gerados pelo teste.

Segundo a documentação (com escassas referências na web - nenhuma que me ajudou) a maneira que temos para verificar se uma exceção foi gerada, é a mesma que utilizamos para os testes de unidade tradicionais, isto é, utilizando atributos sobre a declaração do método. Então temos que colocar a chamada do procedimento sem nenhuma validação (figura 01) e depois, diretamente no código fonte decorar o método com o atributo ExpectedSqlException, conforme script 01.


(Figura 01)

(Script 01)
[TestMethod(), ExpectedSqlException(MatchFirstError=true, MessageNumber=50000, Severity=16, State=1)]
public void TesteException() { ... }

Executei o teste e funcionou tudo beleza, mas não me agradou por dois motivos.
  1. Por ser um procedimento que vou utilizar em vários ambientes eu optei por não atribuir um número específico aos erros gerados dentro do procedimento, isso significa que todos os meus erros terão o 50000 como número.
    1. Então o meu teste unitário pode passar como certo (capturando a exceção), mesmo se a exceção gerada for relativa a um outro problema diferente do que eu espero. Esse não determinismo no teste não é nada interessante, concordam.
    2. Se eu forçar um número (suponha 50001), caso chegue em um ambiente que já exista esse número registrado, terei que alterar o procedimento e os meus testes, o que também não me agrada.
  2. Até esse momento todos os testes estavam com asserções definidas através da interface, e não no código fonte por debaixo dos panos. Alguém desavisado poderia olhar para o teste sem nenhuma condição de teste e apagá-lo.
    1. Ok, eu posso colocar um comentário direto no T-SQL dizendo: "-- Esse teste possui no code-behind um ExpectedSqlException...". Mas não gostei nem um pouco disso.
Alternativa ao ExpectedSqlException

Como alternativa para o problema eu pensei inicialmente em estender o Visual Studio criando meu próprio TestCondition, que é detalhado na documentação do produto: Define Custom Conditions for Database Unit Tests (http://msdn.microsoft.com/en-us/library/dd193282.aspx).

Além de ser uma abordagem mais trabalhosa (digna da metáfora canhão vs. mosca) analisando os passos que eles mostram no walkthrough, é utilizado como ponto de verificação o recebimento de uma conexão e resultado através do método Assert. Mas se uma exceção for gerada pelo código, possivelmente o Assert nunca será invocado, o que me pareceu claramente ser a razão de não existir já disponível no Visual Studio 2010 uma test condition para exceções. Acho que vale a pena depois aprofundar um pouco mais no assunto, mas não terei tempo para isso agora.

Por fim resolvi utilizar o seguinte código (script 02) na chamada ao procedimento:

(Script 02)
BEGIN TRY
        EXEC CleansingKit.dbo.proc_CriaSnapshot 'TesteSnapshot', 'C:\DiretorioInexistente\'
END TRY
BEGIN CATCH
        SELECT 'Exceção correta foi gerada.'
        WHERE ERROR_MESSAGE() LIKE 'Directory lookup for the file % failed with the operating system error 2(The system cannot find the file specified.).'
END CATCH

Com essa abordagem eu consigo verificar exatamente a mensagem do erro (poderia também testar o ERROR_NUMBER) e mostrar a string "Exceção correta foi gerada.". Então com uma simples condição para verificação de um valor escalar (figura 02), que deve ser a string retornada pelo SELECT, conseguimos verificar se a exceção correta foi recebida.


(Figura 02)
Nessa abordagem fica claro o que estamos tentando fazer com o teste, podemos verificar exatamente qual é a mensagem de erro (inclusive usando wildcards como o "%" para informações que variam) e caso nenhuma exceção seja gerada o catch não é invocado e o teste não passa na asserção feita pelo Visual Studio.

O que você acha dessa abordagem? Como faz seus testes unitários para procedures?
[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 18 de junho de 2010

SQL Server 2008, CLR, .NET Framework 4.0 e erro 6218

Bom dia pessoal. Vamos de um post rápido?

Estou eu trabalhando alegremente com o Visual Studio 2010 e após criar uma função simples, fui registrar o assembly no SQL Server 2008 com o seguinte comando:

CREATE ASSEMBLY [SrNimbus.CleansingKit]
FROM 'C:\Teste\SrNimbus.CleansingKit.dll'
WITH PERMISSION_SET = SAFE
go

Aí apareceu o seguinte erro: "Msg 6218, Level 16, State 3, Line 1
CREATE ASSEMBLY for assembly 'SrNimbus.CleansingKit' failed because assembly 'SrNimbus.CleansingKit' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
"


Adoro esses erros que efetivamente não dizem coisa alguma. A validação falhou, mas qual o motivo? Pensei em algumas possibilidades e tive uma idéia básica, vou compilar a minha DLL definindo no projeto compatibilidade com o .NET Framework 3.5.
Com a DLL recompilada eu tentei criar o assembly e tudo funcionou perfeitamente, como esperado.

O curioso é que se você tentar fazer o mesmo usando o SQL Server 2008 R2 a mensagem de erro já é outra: "Msg 6257, Level 16, State 1, Line 1
CREATE ASSEMBLY for assembly 'SrNimbus.CleansingKit' failed because the assembly is built for an unsupported version of the Common Language Runtime.
". Beeeeeemmmm melhor que o SQL Server 2008 SP1.


Sem querer entrar no mérito do R2 não suportar o .NET Framework 4.0, no SQL Server 2008 (e possivelmente no 2005), quando você estiver tendo um erro genérico de validação do seu assembly, pode ser que você esteja tentando utilizar uma DLL compilada para uma versão do .NET framework não suportada pelo SQL Server.
Do R2 para frente eu espero que a mensagem seja sempre a 6257, clara e direta.

Falei que ia ser um post rápido...
[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 11 de junho de 2010

Quer ser um mentee na Sr. Nimbus?

Por definição mentee em inglês significa "a person who has a mentor", então podemos chamar essa pessoa de pupilo ou aprendiz. Dito isso, complemento...

As últimas semanas/meses têm sido um bom desafio para a Sr. Nimbus, estamos com novos projetos, tentando criar nosso ritmo de trabalho e acredito que tenho aprendido bastante desempenhando um duplo papel, o de profissional de TI e empresário.

Diferente de muitas empresas fizemos uma escolha clara na Sr. Nimbus que é nos preparar para um crescimento controlado e a passos pequenos, procurando nos consolidar através da excelência técnica ao invés da excelência comercial (sim, somos péssimos vendedores). Trabalhando nessa linha queremos que os processos internos sejam responsáveis e maduros, de forma a superar expectativa daqueles que trabalham na empresa e dos futuros integrantes desse time.

Dentro desse ensejo e para evitar fazer as coisas às pressas, estou iniciando uma busca por um profissional que deseje ser meu mentee na Sr. Nimbus e que no futuro possa compor o quadro da empresa. Trocando em miúdos:

A Sr. Nimbus procura um profissional com valores semelhantes aos da empresa e com potencial para crescer profissionalmente, sob orientação do Luti e eventualmente de outro consultor sênior.

Hoje nosso "foco" é a plataforma de desenvolvimento da Microsoft, que é uma gama muito ampla de possibilidades, então poderia restringir ao .NET Framework, Visual Studio, Sharepoint, Azure e, não podia ficar de fora, SQL Server. Muita coisa, impossível saber tudo e, claro, que sendo meu mentee e pela características das ofertas atuais da empresa, existe uma maior possibilidade de brincarmos por mais tempo com o SQL Server.

No fim é uma boa chance para todos aprendermos e, quem sabe, criarmos um futuro consultor e expert na Sr. Nimbus. Como toda empresa startup, temos caixa pequeno e muita vontade, então se você é um geek de carteirinha, quem sabe não se encontra na nossa empresa?

Interessado?
Mande seu CV para luciano.moreira@srnimbus.com.br.

[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm