Olá, pessoal! Neste artigo vou comentar sobre como calcular métricas de código a partir de scripts que contenham stored procedures, funções ou instruções T-SQL. Saber calcular estas métricas é importante para ajudar a justificar prazos, recursos e implicações associadas com a manutenção de código fonte desenvolvido na linguagem T-SQL, o dialeto da linguagem SQL utilizada pelo SQL Server.
Em geral, é raro encontrar programadores que se preocupam muito com as medidas relacionadas com as métricas de código fonte. Infelizmente esta afirmação também é verdade para DBAs, pois geralmente os profissionais estão mais preocupados em fazer o código funcionar e atender a requisitos funcionais do que em realizar um levantamento qualitativo em relação ao código fonte.
Como foi citado no parágrafo que abre este artigo, as medidas obtidas por métricas específicas de código fonte podem ser úteis para quem está começando a trabalhar com código legado e, inclusive, já escrevi sobre isso em um artigo para o iMasters.
Em termos práticos, o uso dos valores de métricas do código fonte deve ser utilizado para ajudar a justificar, por exemplo, o tempo necessário para se efetuar uma mudança no código fonte. Agir desta maneira facilita a conversa com gerentes de projetos e clientes que querem um detalhamento melhor sobre a estimativa de tempo para a realização de uma tarefa que envolve, de uma maneira ou de outra, manutenção de código fonte independente da linguagem.
Se a coleta de medidas para métricas de código fonte já é rara para programadores, imagine para DBAs que trabalham programando stored procedures, funções, scripts e outros elementos no banco de dados. Como disse, não é muito comum encontrar este tipo de atitude entre DBAs.
Mas não precisa ser assim. Hoje em dia existem diversas ferramentas que automatizam o processo de coleta de medidas para métricas de código fonte, inclusive de dialetos da linguagem SQL. Neste artigo vou comentar como fazer isso para o SQL Server, mas tenham em mente que mesmo DBAs de diferentes bancos de dados que trabalham com o SQL podem se beneficiar desta coleta de métricas, mesmo que não haja muita regra de negócio, programa em stored procedures, scripts ou funções no banco de dados.
Umas das ferramentas que mais gosto para coletar métricas é o PMD, porém, infelizmente, não há suporte para a linguagem SQL. Já o CLOC é uma ferramenta de código livre interessante para contar a quantidade de linhas de código e comentários e ele trabalha com diversas linguagens, inclusive com o T-SQL. Como exemplo, gerei o código fonte de todas as system stored procedures criadas pela Microsoft armazenadas no banco de dados master de um servidor SQL Server 2008. Gravei cada uma destas system stored procedures (no total foram 795 arquivos separados) e rodei a ferramenta CLOC para coletar as medidas. O resultado pode ser visto na Figura 1.
O processo de coleta foi simples: bastou rodar o executável do CLOC na mesma pasta que continha os scripts e ele já calculou as estatísticas. O cálculo em si não demorou mais de trinta segundos e o trabalhoso mesmo foi gerar os arquivos com as system stored procedures. De qualquer maneira, recomendo a todos que trabalham com scritps que utilizem o CLOC para ter pelo menos a noção de quantas linhas em branco, com código e com comentários existem em seus scripts e objetos do SQL Server.
O Visual Studio.NET contém um framework muito interessante para que o desenvolvedor gere estatísticas e crie suas próprias métricas relacionadas ao código fonte. Neste artigo há um exemplo interessante de como criar regras para a análise estática de código fonte, inclusive de código T-SQL.
Outra ferramenta muito interessante para analisar código T-SQL é o SQL Code Guard. Esta ferramenta gratuita é um plug-in para o SQL Server Management Studio (SSMS) e permite calcular medidas para métricas de código, organizar os scripts, visualizar informações associadas aos dados e outras funcionalidades. A instalação é simples e um novo item de menu é adicionado ao SSMS que cria uma janela na parte de baixo da interface. Utilizei o SQL Code Guard para verificar ocorrências importantes (issues) nas system stored procedures do banco de dados master do SQL Server e o resultado pode ser visualizado na Figura 2.
Pode-se notar que o conteúdo das system stored procedures do SQL Server contém diversos pontos a serem observados. O SQL Code Guard identificou, por exemplo, diversas execuções dinâmicas de código com o EXECUTE(String) e estrutura IF sem BEGIN…END. Estas ocorrências não são erros e não geram problemas de compilação, porém elas não são recomendadas em código T-SQL por potencialmente gerarem problemas de segurança, dificultarem a leitura do código e outros fatores. Existem muitas ocorrências como esta que são documentadas pelo SQL Code Guard e que podem ajudar um profissional que trabalha com T-SQL a escrever um código mais legível e, de acordo com as ocorrências indicadas, melhor.
Para finalizar, econtrei um script interessante no Script Center da comunidade Technet. Este script calcula três métricas importantes em relação a todas as stored procedures e funções armazenadas em um banco de dados do SQL Server: a quantidade de linhas, o número de objetos referenciados e o número de parâmetros. O script também indica se a complexidade é simples, média ou alta, de acordo com um cálculo interno. A Figura 3 mostra o resultado parcial deste script que analisou as system stored procedures do banco de dados master de um SQL Server 2008.