Visual Studio Team System 2008 Database Edition

O Visual Studio Team System tem a capacidade de incorporar diversos papéis do processo de desenvolvimento de software nas organizações: desde o Arquiteto, passando pelo Designer, Gerente de Projeto, Tester e, é claro, o desenvolvedor. Ele faz isto fornecendo ferramentas que aumentam a produtividade, com um ambiente único de desenvolvimento e gerência do projeto de software. Desde a concepção do Visual Studio Team System (daqui em diante vou me referir a ele simplesmente por VSTS), no entanto, um dos principais papéis estava fora do ciclo de vida de desenvolvimento de software. Este papel é o do desenvolvedor em bancos de dados.

É este o cenário sobre o qual o VSTS 2008 Database Edition atua, o do desenvolvedor em banco de dados. Imagine ter todos os objetos do banco de dados sob controle de fontes, passando pelos mesmos fluxos de aprovação e colaboração de todo o seu código, e das funcionalidades de desenvolvimento offline fazendo check-in e check-out dos objetos do banco de dados. Imagine ainda ter ferramentas que façam teste de unit em código de banco de dados, ferramentas que geram dados de teste que realmente significam alguma coisa, ferramentas que fazem comparação entre schemas de banco de dados (desenvolvimento comparado com produção, por exemplo). Agora chega de imaginar - já é possível!

O objetivo deste post é descrever rapidamente alguns dos recursos do VSTS 2008 Database Edition. Na verdade, os meus recursos preferidos. Esta é uma ferramenta poderosíssima e assunto obrigatório para os desenvolvedores (e até mesmo para os DBAs).

O que é o VSTS 2008 Database Edition?

Trata-se de uma edição do VSTS 2008 que incorpora o profissional de banco de dados ao ciclo de vida de desenvolvimento de software. Na verdade, esta ferramenta já estava disponível no VSTS 2005, porém na forma de um add-in. Ele oferece os seguintes benefícios:

  • Desenvolvimento baseado em projeto
  • Aderência a processos de desenvolvimento de software
  • Colaboração em time com itens de trabalho (Work Item) e integração de processos com o Team Foundation Server
  • Reconstrução de nomes de objetos com a habilidade de prever as mudanças antes de realizá-las (Refactoring)
  • Ferramentas de comparação (de schemas e dados) permitem comparações e sincronização do schema e dos dados entre bancos de dados de desenvolvimento, teste e produção
  • Controle de fontes e de versões de todos os objetos do banco de dados com a possibilidade de se fazer engenharia reversa em um banco de dados a fim de se trazê-lo ao sistema de controle
  • Teste de Unit do banco de dados
  • Aproveita a infra estrutura de teste de projetos
  • Gera valores “Reais e Coerentes” através habilidade de importar informações como Row Counts e histogramas de um banco de dados reais
  • Gerador de Dados provê geração repetitiva de dados para testes baseados em configurações
  • Integração com MSBuild para Deployments/Builds de banco de dados baseando-se em projetos
  • Habilidade de enviar apenas as alterações realizadas em um banco de dados, ao invés de apagar o banco inteiro e reconstruí-lo a cada mudança

A lista de benefícios é extensa. A lista de recursos (features), também. Vou abordar neste post apenas alguns deles, se você tiver alguma dúvida em específico, por favor, poste um comentário.

Iniciando um Projeto

Existem três formas de iniciar um projeto de banco de dados pelo VSTS 2008 Database Edition:

  1. Iniciar um projeto em branco e criar cada objeto individualmente - O VSTS 2008 já tem os templates de projeto para banco de dados
  2. Iniciar um projeto utilizando um script T-SQL existente - se você tem um script de criação de um banco de dados e de seus objetos, pode importar este arquivo. O VSTS 2008 faz um processo de engenharia reversa no arquivo e cria os objetos em seu projeto
  3. Conectar-se a um banco de dados existente - minha preferida. Se você já tem um banco de dados na sua empresa, utilize este recurso. O VSTS 2008 se conecta ao banco de dados e gera os scripts de criação dos objetos. Isto permite que você comece a utilizar o VSTS 2008 Database Edition imediatamente, independente de ser um projeto novo ou um ambiente que já está em produção.

image

Figura 1: Janela com os templates de projeto para SQL Server

Observação: Perceba que neste instante você já pode colocar seu projeto em controle de fontes.

Para este exemplo, vou utilizar a opção número 3. O próprio assistente que cria o projeto já pergunta se você deseja importar o schema de outro banco de dados. Neste instante, você pode criar uma conexão com um banco de dados existente e o assistente se encarrega de ler seu schema e criar os objetos relevantes no projeto.

image

Figura 2: Opção por importar o schema de um banco de dados existente

O processo de importação de schema gera um arquivo .sql para cada objeto do seu banco de dados. Você pode visualizá-los pelo sistema de arquivos, ou pelo Schema View, no VSTS 2008. Cada um destes arquivos .sql irá fazer parte do seu controle de fontes e você pode fazer check-in e check-out nos arquivos, da mesma forma como faz com seus arquivos .cs, .vb ou outros. Por padrão, o nome destes arquivos é formado por [nomedoschema].[nomedoobjeto].[tipo].sql

image  image

Figuras 3 e 4: Visualização dos objetos gerados no Schema View e no Solution Explorer

Schema Refactoring (Reconstrução)

De acordo com Scott Ambler, autor de Agile Database Development, "Reconstrução do banco de dados é fazer uma alteração pequena no Schema que melhore o seu design sem alterar sua semântica". Por exemplo:

  • Renomear o nome de um objeto Schema para melhorar sua consistência, entendimento ou manutenção
  • Renomear TODAS referências deste schema
  • Renomear tabelas, views, stored procedures, user defined functions, etc.

É muito comum precisarmos alterar o nome de um objeto durante o processo de desenvolvimento. Com a funcionalidade de Refactoring, o VSTS 2008 atualiza todas as referências a este objeto no projeto com o nome novo. Ele ainda pode simular a alteração e emitir um mini-relatório de conclusão, para que você mesmo possa avaliar a mudança antes de efetivá-la.

Basta um clique com o botão direito para realizar o processo de refactoring. Após as alterações, se você estiver utilizando controle de fontes, o próprio processo de refactoring se preocupa em fazer o check-out dos arquivos necessários e fazer as alterações. Se você alterar o nome de uma coluna, como no exemplo abaixo, o VSTS atualiza quaisquer stored procedures que façam referência a esta coluna para refletir as alterações.

image 

Figura 5: Renomeando uma coluna no banco de dados.

image

Figura 6: Alterando o nome de uma coluna. Perceba a opção "Preview Changes"

Se mesmo após tiver feito as alterações você desejar desfazê-las, o Global Undo está disponível para desfazer tudo.

Build e Deploy

O VSTS 2008 Database Edition tem completa integração com o MSBUILD. Isto significa que você pode usufruir de todo o processo de build e entrega de versões de suas aplicações também em mudanças na camada de banco de dados.

Sempre que são feitas alterações no ambiente, sejam objetos novos ou a alteração de objetos existentes, é gerado um arquivo .sql com as alterações. Este arquivo pode ser enviado a um DBA para aprovação e execução, ou pode ser integrado ao seu processo de build diário.

image

Figura 7: Processo de Build e Deploy

Através do MSBuild é possível:

  • Utilização por linha de comando
  • Acesso por programação
  • Ligação entre as tarefas
  • Integração do time

Como já disse aqui, é possível enviar apenas alterações realizadas ou um banco de dados completo para o destino.

Em um deployment completo, todo o banco de dados é criado no destino. Este é o comportamento padrão, quando o destino não existe, mas também pode ser forçado pela opção de build “Always Recreate Database”

Em um deployment incremental, são enviadas apenas as diferenças entre o projeto e o banco de dados de destino.

Você pode ainda utilizar um script incremental que valida a versão do servidor de destino, nome do banco de dados e database compatibility level, entre outros atributos do servidor ou do banco de dados. Se a validação falhar em algum critério que voc6e especifique, o deploy pode ser abordado.

Mas se você não deseja utilizar o MSBUILD por linhas de comando, o VSTS 2008 pode enviar as alterações através de sua IDE.

Recursos para Teste

O VSTS 2008 oferece recursos para que você possa realizar testes em seu banco de dados. É possível fazer teste de unit e gerar dados de teste para popular suas bases.

Testes de Unit

O recurso de Unit Test disponível no VSTS 2008 funciona em conjunto com o Team Test do VSTS 2008. É possível utilizar código .NET para gerar os testes e também T-SQL. Pode-se, por exemplo, dizer se é esperado um tipo de resultado a partir de uma stored procedure e avaliar este resultado ao final da execução dos testes. O resultado pode ser um ResultSet, um RowCount ou valores escalares, por exemplo. Ou até mesmo um retorno sem conclusão determinada.

Dados de teste

Este é um dos meus recursos preferidos no VSTS 2008. O gerador que já vem embutido no VSTS 2008 (ele também permite que você plugue geradores de dados de terceiros) utiliza diferentes técnicas para gerar dados que são realmente relevantes para os seus testes. Pode-se pode exemplo utilizar expressões regulares para gerar expressões.

Aí vai um roteiro de exemplo para um gerador de testes em cima do banco de dados Northwind:

  1. Clique em dbo.Orders
  2. Clique no menu Data, Data Generator, e clique em Column Details.
  3. Em Column Details, selecione ShipCity, e defina o campo Generator com o valor Data Bound Generator. Isto indica que o gerador vai obter seus resultados a partir de uma query.
  4. No menu View, clique em Properties Window
  5. Na janela de propriedades, veja a sessão Generator. Na propriedade Connection Information, clique na conexão que corresponde ao banco de dados do qual você importou o schema. Esta opção se deve ao fato de consultarmos os dados em um banco de dados já existente.
  6. Na janela de propriedades, em Generator, na propriedade Query, defina a query string como "SELECT * FROM Orders".
  7. Em Column Details, no campo Generator Output para ShipCity, clique em [OutputTable1].[ShipCity].
  8. Salve o data generation plan.

Como sempre, fique a vontade para escrever seus comentários ou dúvidas.