Ferramenta de Auditoria para Códigos SQL de Banco de

Transcrição

Ferramenta de Auditoria para Códigos SQL de Banco de
Ferramenta de Auditoria para Códigos SQL de Banco de
Dados Relacionais.
Delaney M. Borges1, Ricardo T. Júnior1, Marcos Lopes 1, Sônia A. Santana1, Hélio
R. Soares1
1
Instituto de Informática- Centro Universitário do Triângulo - Campus Unitri Caixa
Postal 02-83.346-060 – Uberlândia – MG – Brasil
{delaneymaciel, malopes21, sonia.ap.santana}@gmail.com,
[email protected], [email protected]
Abstract. In corporate environments where there is a code pattern to be
followed, a tool that can assist in the validation of this pattern would be of
great help. This article describes a tool that aims to validate the SQL
language codes. Tables are validated name (prefix and suffix of the tables), the
presence of an asterisk in the query field, Select without where clause and Join
among many table with the configuration option according to business need.
After analyzing a text file it will issue a report stating met any of these
situations. It is able to evaluate text files containing PL-SQL and T-SQL.
Resumo. Em ambientes corporativos onde existe um padrão de código a ser
seguido, uma ferramenta que possa auxiliar na validação deste padrão seria
de grande ajuda. Este artigo descreve uma ferramenta que tem como objetivo
validar códigos da linguagem SQL. São validados nome de tabelas (prefixo e
sufixo das tabelas), presença de asterisco no campo da consulta, Select sem
clausula where e Join entre muitas tabela com a opção de configuração de
acordo com a necessidade da empresa. Após analisar um arquivo texto ele
emitirá um relatório informando se encontrou alguma destas situações. Ela é
capaz de avaliar arquivos texto contendo códigos PL-SQL e T-SQL.
1. Introdução
O processo de desenvolvimento de software é muito novo no mundo, considerando
outros ramos de atividades como engenharia, medicina, geografia entre outros. São
áreas que estão há séculos num processo de amadurecimento e aperfeiçoamento de seus
métodos de pesquisa e trabalho. A área de tecnologia também vem amadurecendo muito
com o passar dos anos, mesmo sendo recente, o amadurecimento está ocorrendo de
forma muito rápida. Há cem anos não existia nenhum computador digital, então não era
possível ter um software.
Nos dias atuais os softwares estão cada dia mais presentes nas empresas, seja ela
grande, média ou pequena. A demanda para profissionais especializados em
desenvolvimento para atender às necessidades específicas aumenta a cada dia.
Independente de qual seja a linguagem de programação utilizada, se a empresa usa um
banco de dados relacional, em algum momento vai trabalhar com SQL (Structured
Query Language ou Linguagem de Consulta Estruturada), que é a linguagem de
pesquisa declarativa padrão para banco de dados relacionais.
O objetivo deste artigo é apresentar o Quire. É uma ferramenta capaz de auditar
alguns padrões de desenvolvimento em SQL validando os Selects em arquivos textos no
padrão da Oracle (PL-SQL), MS SQL Server (T-SQL) ou PostGre (PostgreSQL), entre
outros. A ferramenta contém validações básicas que podem ser configuradas de forma a
atender melhor a necessidade de cada empresa.
2. Conceitos Fundamentais
Considerando que para a maioria das empresas o fato do desenvolvimento de
software não é sua atividade fim, muitas foram levadas a terceirizar determinados
serviços (em alguns casos, inclusive para mais de uma empresa) entre eles, os serviços
relacionados à qualidade - Quality Assurance, (QA), que é responsável por manter a
padronização do código, auditar e validar os códigos enviados pela equipe de
desenvolvimento e QoS (Qualidade de Serviço). Segundo Dolla (2001, p. 13) com a
padronização do código fonte ou metodologia de qualidade para auditar e formatar
pode-se melhorar os resultados no processo de manutenção e correção. Sendo assim, se
obtém uma produtividade maior e respostas mais rápidas na correção de erros
publicados para a avaliação da qualidade e padronização do desenvolvimento.
O QoS inicialmente foi desenvolvido para medir a qualidade de serviço de redes
de computadores para garantir, principalmente, desempenho em transmissão de dados
[FIROIU et al., 2002; LI; NAHRSTEDT, 1998; COCCOLI; BONDAVALLI;
GIANDOMENICO, 2001], Segundo Fernandes (2006 p. 18) com o sucesso da
utilização de QoS nos serviços de rede, muitas empresas passaram a utilizar o serviço
para garantir o desempenho, qualidade, integridade entre outros, dos serviços e
softwares que a empresa utiliza, tendo assim um resultado melhor das atividades
desenvolvidas.
As regras para o QA são variadas, ficando a cargo da empresa que presta o
serviço ou da empresa contratante suas definições, cujo serviço poderá ser otimizado
utilizando-se ferramentas que possam auxiliar no processo de validação desses códigos
SQL e metodologias desenvolvidas com o decorrer do amadurecimento da ferramenta.
Existem produtos que fazem validações de códigos, como por exemplo, o Sonar
(SonarSource, 2013). O pacote básico desta ferramenta não possui validações de
códigos SQL, mas ela possui um plug-in que permite validar códigos PL-SQL.
3. Motivação
O grande crescimento pela demanda desenvolvimento/customização,
amadurecimento da área de qualidade das empresas, redução de custo tendo em vista
que uma ferramenta pode agilizar o serviço são alguns pontos que dão indício da
necessidade de novas ferramentas.
As empresas estão sempre buscando uma ferramenta que tenha custo zero ou um
custo mais acessível. Existem no mercado várias ferramentas, entretanto, de custo
elevado. Assim, a proposta envolve a apresentação de uma ferramenta de baixo custo
para validação de códigos SQL que serve para todos os bancos relacionais que seguem o
padrão SQL e poderá ser usada para validar padrões em ferramentas com grande fatia de
mercado, como é o caso do Oracle, MS SQL Server, PostGre, entre outros.
Num momento que as ferramentas freeware e open source (conhecido por
software livre) estão ganhando muito mercado, o Quire surge como alternativa para uma
fatia de mercado ainda pouco explorada, que é o caso da validação de padrões SQL.
4. Trabalhos correlatos
O Sonar é uma ferramenta utilizada para validar códigos de linguagens de
programação tais como Java, C#, C/C++, PL-SQL, Cobol, entre outras, e é utilizada
para manter a qualidade e padrão de desenvolvimento que a empresa deseja, sendo que
existe algumas regras de validações já definidas pelo fabricante e também a
possibilidade de criar a sua própria regra de validação dos códigos desenvolvidos para
garantir que a entrega para o ambiente de produção, esteja com o mínimo de qualidade (
SonarSource, 2013).
Para utilizar a validação PL-SQL no Sonar, é necessário adquirir o plug-in,
conforme já mencionado, e a versão profissional do Sonar, sendo que as mesmas
possuem licença valida por 1 ano. As validações que o plug-in faz em seu código fonte é
verificar se existe comentários nas funções, existência de limite de linhas para consultas
feitas em loop, existência de clausula Where, entre outras. Estas avaliações feitas
resultam em validações de regras o que pode afetar na nota do projeto que por sua vez é
a finalidade do Sonar, mostrar como está o nível de desenvolvimento do projeto.
5. A ferramenta
O Quire é uma ferramenta que consegue atender a vários bancos de dados
relacionais e tem como sua principal vantagem o fato de ser Freeware e configurável.
Podendo atender o cenário de cada usuário, onde o mesmo define seus padrões de
desenvolvimento. É um ferramenta que executa na web e a mesma pode ser usada com
Windows, Linux, MacOs e UNIX, Android, iOS ou qualquer outro sistema operacional
que tenha acesso a internet utilizando um navegador com suporte ao Java (1.6 ou
superior).
Com uma interface com poucos botões o usuário poderá submeter seu código de
uma maneira fácil. Para isto basta entrar no sistema e informar o caminho do arquivo
que será validado para o mesmo carregar o arquivo e depois processar. A ferramenta vai
buscar todos os Selects que existam no arquivo e validar conforme as regras definidas
na mesma.
As regras que podem ser aplicadas são:
Uso de asterisco nos Selects, com isto o banco busca todas as colunas das tabelas
que compõem o Select, assim gerando perda de desempenho e maior necessidade de
memória. Na maioria das vezes o desenvolvedor só precisa de algumas colunas e não de
todas.
Quantidade de tabelas em um Join. Embora não exista uma unanimidade sobre a
quantidade de tabelas que podem compor o mesmo Select, para se obter melhores
resultados em consultas, convém utilizar poucas tabelas nas mesmas.
Falta da cláusula Where: a ferramenta vai validar se existe algum Select sem
Where. A cláusula Where não é obrigatória, porém se faltar devido ao fato do
desenvolvedor ter esquecido, pode gerar transtorno no ambiente de produção.
Validação de prefixo e sufixo: verifica se o prefixo e o sufixo para criação de
tabelas da empresa estão conforme o padrão configurado. É uma opção customizável
que a empresa pode ou não usar, e acaso ela opte por usar poderá cadastrar seus prefixos
e sufixos.
A ferramenta tem como objetivo fazer estas validações para auxiliar no padrão
de desenvolvimento seguido pela empresa, atribuindo notas a cada arquivo submetido,
conforme regras pré-estabelecidas. Após a avaliação é gerado um relatório onde
verifica-se alguma regra foi violada. O Quire não altera o código que foi submetido,
gera o relatório com as notas para que algum desenvolvedor possa analisar e corrigir, se
for necessário.
6. Estudo de caso
O ambiente utilizado para executar o estudo de caso foi um servidor com sistema
operacional CentOS 5.8 x86_64, servidor web Jboss-As-6.1.0, Mysql Server 5 (para as
configurações), Java versão 1.6.0_45. No este estudo de caso foi validado Select que
estivesse usando asterisco, Join com no máximo 5 tabelas, a falta da clausula Where em
Selects, tabelas sem prefixo sis_ e sufixo _tbb e delimitador de linhas ponto e vírgula. O
objeto utilizado neste estudo contém códigos PL-SQL padrão da Oracle. (Conforme
figura 1)
Figura 1 – Configuração das validações.
Esta é a configuração padrão que foi definida para a execução dos testes, mas
não representa exatamente o cenário ideal para todas as empresas, por isto a ferramenta
permite a configuração de forma a atender o melhor cenário para cada empresa.
A figura 2 mostra alguns arquivos que foram adicionados à ferramenta para
serem validados. Para estudo de caso foi utilizado o arquivo Prova.sql que contém
apenas um Select.
Figura 2 – Lista de arquivos
Após escolher o arquivo foi necessário aguardar o processamento do mesmo, e
após o processamento a ferramenta gerou um relatório (conforme figura 3) demostrando
o resultado da análise do código.
Figura 3 – Trecho de relatório
Os relatórios que são gerados pelo sistema seguem o critério do número de
violações encontradas durante o processo de validação das consultas (queries)
referenciando o número total de regras que foram violadas. As notas seguem o padrão
de porcentagem onde nota A somente será dada caso as regras sejam atendidas em
100%, B 90% - 99%, C 80% - 90%, D 60% - 80%, E 40% - 60%, F 20% - 40% e G para
notas inferiores a 20%. Sendo que as regras de validações podem ser selecionadas pelo
usuário, de acordo com seu padrão de trabalho, a ferramenta.
7. Conclusão
Através desse artigo foi possível observar que a ferramenta Quire demonstrada
auxilia nos padrões da empresa, onde foram analisados textos com códigos criados no
padrão de desenvolvimento do Oracle (PL-SQL), avaliando conforme regras definidas.
Ao final do processamento foi possível observar um relatório contendo as
informações analisadas e a nota que o código recebeu, com isto o desenvolvedor será
informado da necessidade de melhoria no código.
Para trabalhos futuros pode-se implementar a validação em códigos de
aplicações Java, .NET, C, C++, onde será extraído as consultas de banco de dados, para
a realização de análises. Outra sugestão é a avaliação da necessidade de criação de
índice, verificação da utilização de parâmetros sem índice para consultas muito
utilizadas, verificação das consultas mais utilizadas no banco através de estatísticas.
Estes são todos fatorem que podem contribuir para melhorar a desempenho de um
Select.
8. Referências
DOLLA, Dyckson D. Ferramenta de apoio a reestruturação de código fonte em
linguagem PL\SQL baseado em padrões de legibilidade. Blumenau: Universidade
Regional de Blumenau – Ciência da Computação, 2001.72p (Tese, Bacharel).
FIROIU, V. et al. Theories and models for internet quality of service. Proceedings of the
IEEE, Vol.90, 2002. 1565-1591p.
FERNANDES, Pedro R. Neto. Mecanismos de Qualidade de Serviços para o
Gerenciamento de Dados e Transações em Tempo-Real. Campina Grande:
Universidade Regional de Campina Grande - Pós graduação em Engenharia ElétricaUniversidade Federal de Campina Grande, 2006. 156p. (Tese, Doutorado).
LEITÃO, Plínio de Sá Júnior. Teste baseado na interação entre regras ativas escritas em
SQL. Campinas: Universidade Estadual de Campinas, Faculdade de Engenharia
Elétrica e de Computação, 2005. 3p (Tese, Doutorado).
MCLAUGHLIN, Michael. Oracle Database 11g PL-SQL Programming: Develop
Robust, Database-Driven PL-SQL Aplications (Oracle Press). 1ª ed. McGraw-Hill,
2008.
BEAULIEU, Alan. Learning SQL, 2ª Ed. O’Reilly, 2009.
NATARAJAN, Jay, SHAW, Scott, BRUCHEZ, Rudi et tal. Pro T-SQL 2012
Programmer's Guide, 3ª Ed. Apress, 2013.
RIGGS, Simon, HANNU, Krosing. PostgreSQL 9 Administration Cookbook. Packt
Publising Ltd. 2010.
FERGUSON, Paul, HOUSTON, Geoff. Quality of Service: Delivering QoS on the
Internet and in Corporate Networks, 1ª ed. Wiley, 1998.
TAHAGHOGHI, Seyed, WILLIAMS, Hugh. Learning MYSQL. O’Reilly, 2006.
BELL, Charles. Expert MYSQL, 2ªend. Apress, 2013.
SHAW, Scott, KELLENBERGER, Kathi. Beginning T-SQL 2012, 2ª ed. Apress, 2012.
PREECE, Linda. Oracle SQL and Introductory PL-SQL, 1ª ed. McGraw-Hill/Irwin,
2003.
BUANI, Bruna Elisa Zanchetta. Aplicação da lógica fuzzy KNN e análises estatísticas
para seleção de característica e classificação de abelhas. São Paulo: Escola
Politécnica da Universidade de São Paulo, 2010. 114-116p. (Tese, Mestrado).
Disponível
na
internet.
www.teses.usp.br/teses/.../Dissertacao_Bruna_Elisa_Zanchetta_Buani.pdf. 15 Junho
2013.
DEITEL, Paul, DEITEL, Harvey. Java - Como programar. Tradução por Edson
Furmankiewicz.8ª ed. São Paulo: Pearson, 2010.
SIERRA, Kathy. Use a cabeça! Java. Tradução por Aldir José Coelho. 2ª ed. Rio de
Janeiro: Alta Books, 2009.
SONARSOURCE, Ferramenta de analise de código fonte. Endereço BBS:
http://www.sonarqube.org/, login: 08 junho 2013.