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.