Вы находитесь на странице: 1из 19

JOS ALCINO FURTADO LUIS RICARDO B.

DA SILVA

QUALIDADE DE CDIGO

Florianpolis, 2011.

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE SANTA CATARINA DEPARTAMENTO ACADMICO DE SADE E SERVIOS CURSO SUPERIOR DE TECNOLOGIA EM GTI

QUALIDADE DE CDIGO

Atividade da Disciplina de Qualidade Software na modalidade de seminrio.

de

JOS ALCINO FURTADO LUIS RICARDO B. DA SILVA

Florianpolis, 2011.

NDICE DE FIGURAS Figura 1 - Satirizando a mtrica de qualidade de cdigo ................................... 5 Figura 2 - Pirmide de tamanho e complexidade ............................................... 8 Figura 3 - Diagrama de toxicidade ..................................................................... 8 Figura 4 Codecrawler: Visualizador especial da complexidade do sistema .... 9 Figura 5 - Diagrama de mtricas de classes ...................................................... 9 Figura 6 - Teste de razo de cdigo................................................................. 10 Figura 7 - Exemplo de cdigo ineficiente e soluo ......................................... 16 Figura 8 - Exemplos de cdigos redundantes .................................................. 16 Figura 9 - Satirizando a resoluo de problemas com erros de cdigo............ 17

Sumrio
1 2 INTRODUO ................................................................................... 3 QUALIDADE DE CDIGO ................................................................. 4

3 FERRAMENTAS E MTRICAS PARA AVALIAO DE QUALIDADE DE CDIGO ....................................................................................................... 5 3.1 4 5 6 Exemplo de grficos de mtricas ................................................ 8 BOAS PRTICAS NA ANLISE DE SOFTWARE ........................... 10 CONCLUSO .................................................................................. 17 REFERNCIAS ............................................................................... 18

1 INTRODUO
A tecnologia da informao est associada diretamente com a capacidade de seus usurios poderem acessar seus sistemas de informao, inserir e consultar dados e obter resultados seguros e confiveis. Para isso so necessrios sistemas de informao que atendam essas expectativas. Logicamente, a qualidade dos sistemas de informao depende da qualidade dos cdigos com que so desenvolvidos. Cdigos mal escritos podem no atender corretamente aos requisitos funcionais e no funcionais do sistema, podem demandar maior tempo de processamento, travamentos e erros na manipulao dos dados pelo usurio. Neste trabalho descrito o que qualidade de cdigo e como julgar, ou testar, essa qualidade.

2 QUALIDADE DE CDIGO
Escrever cdigo de boa qualidade um requisito importante para os programadores. Mas o que isso de fato significa? Na prtica, uma definio clara do que seja cdigo fonte de qualidade pode variar bastante e depender de diversos fatores relacionados ao desenvolvimento de software, entre os quais pode-se considerar: ser seguro, rpido, enxuto, de fcil manuteno, possvel de estender e de ser entendido por outros desenvolvedores. Alm disso, a linguagem de programao utilizada no projeto fator importante nessa discusso. Entre os aspectos que podem ser considerados a fim de avaliar a qualidade de cdigo incluem-se: formatao consistente e facilidade de entendimento (indentao e espaamento), regras de nomeao consistentes, ausncia de erros de compilao, capacidade adequada e consistente de tratamento de erros de execuo, uso de boas prticas de programao e de projeto, e documentao abrangente e de fcil entendimento em todo o cdigo fonte. Naturalmente empresas e que algumas dessas caractersticas podem que ser os consideradas mais fceis de serem implementadas, mas no todas. Muitas organizaes possuem padres documentados desenvolvedores devem seguir. Na prtica, tem sido muito difcil para essas organizaes obterem sucesso nessa padronizao. A questo que, para se adequarem, os programadores precisam assimilar os padres adotados e reverem frequentemente o cdigo produzido para garantir a sua conformidade. Esse processo gasta tempo e complexo de ser conduzido manualmente. Uma alternativa mais racional o emprego de ferramentas capazes de automatizar o processo de avaliao da qualidade de cdigo. Certamente o processo torna-se ainda mais produtivo se tais ferramentas puderem ser utilizadas diretamente a partir de IDEs (IDE, do ingls Integrated Development Environment ou Ambiente de Desenvolvimento Integrado) disponveis.

3 FERRAMENTAS E MTRICAS PARA AVALIAO DE QUALIDADE DE CDIGO

Figura 1 - Satirizando a mtrica de qualidade de cdigo

Para se avaliar qual a ferramenta mais adequada para dar o suporte necessrio avaliao da qualidade de cdigo, preciso determinar quais caractersticas do cdigo se deseja avaliar, uma vez que no produtivo e nem aplicvel avaliar o cdigo como um todo. So os parmetros de avaliao que vo sugerir a ferramenta mais adequada. Esses parmetros podem ser obtidos por meio das mtricas de cdigo. Algumas mtricas j conhecidas: Quantidade de linhas de cdigo; Comprimento dos mtodos esse tamanho pode variar, mas algumas pessoas consideram que um mtodo com mais de 50 linhas de cdigo j um mtodo longo (alguns mais puristas chegam a dizer que um mtodo deve ter no mximo 10 linhas!); Classes grandes e complexas normalmente as que no seguiram o princpio de alta coeso;

6 Classes com intimidade com muitas outras classes as que no seguiram o princpio de baixo acoplamento; Classes preguiosas que no fazem muita coisa ou so executadas com pouca frequncia; Cdigo duplicado essa uma das maiores pragas que devem ser combatidas. Complexidade das expresses booleanas; Complexidade ciclomtica (Complexidade ciclomtica (ou complexidade condicional) uma mtrica de software usada para indicar a complexidade de um programa de computador. Desenvolvida por Thomas J. McCabe em 1976, ela mede a quantidade de caminhos de execuo independentes a partir dum cdigo fonte). As ferramentas utilizadas para avaliao das mtricas, bem como as usadas para outros parmetros so desenvolvidas de acordo com a especificidade de sua atuao e as linguagens de programao em que os cdigos so escritos. Por exemplo, h vrias ferramentas de avaliao de cdigo para Java. A IDE NetBeans pode ter incorporada a ela a ferramenta JUnit, a qual pode ser, inclusive, customizada. A maior parte dos autores que descrevem essas ferramentas e seus desenvolvedores citam ferramentas voltadas Orientao a Objetos. Esse trabalho no visa descrever e detalhar as ferramentas disponveis, at porque elas so muitas e isso se tornaria impraticvel. Como limitao da abrangncia desse texto, sero apenas citadas algumas ferramentas principais, sobre as quais sero tecidos breves comentrios. Um bom programador pode desenvolver, ele mesmo, suas prprias ferramentas de teste de cdigo. Mas as mais importantes para avaliao de um cdigo, no que diz respeito qualidade so as mtricas. Como exemplo de ferramentas citam-se: Checkstyle (http://checkstyle.sourceforge.net/) uma ferramenta de auxlio a programadores que desenvolvem cdigos em Java baseado em padres de cdigo. Esta ferramenta

7 automatiza o processo de checagem do cdigo Java tirando dos humanos essa tediosa, mas necessria, tarefa. Ela ideal para projetos que pretendem firmar-se em padres de cdigo. Checkstyle altamente configurvel e pode dar suporte a praticamente qualquer padro de codificao. Um exemplo de arquivo de configurao fornecido dando suporte s Convenes de Cdigo Sun; PMD (http://pmd.sourceforge.net/) checa cdigos fonte em Java a procura de problemas potenciais, como: o Possveis bugs instrues try/catch/finally/switch vazias; o Cdigo morto variveis locais no usadas, mtodos e parmetros privados; o Cdigo mal otimizado uso exagerado de String/StringBuffer; o Expresses excessivamente complicadas - instrues if desnecessrias, repeties while; o Cdigo duplicado cdigos copiados e colados representam erros copiados e colados. PMD integrado com JDeveloper, Eclipse, JEdit, JBuilder, BlueJ, CodeGuide, NetBeans/Sun Java Studio Enterprise/Creator, IntelliJ IDEA, TextPad, Maven, Ant, Gel, JCreator e Emacs; FindBugs (http://findbugs.sourceforge.net/) um programa que usa anlise esttica para procurar por bugs em cdigos Java. um software livre, distribudo sob os termos da Lesser GNU Public License. FindBugs requer JRE (ou JDK) 1.5.0 ou posterior para rodar. De qualquer modo, pode analisar programas compilados para qualquer verso de Java; Dependency Finder (http://sourceforge.net/projects/depfind/) extrai dependncias de mtricas OO de arquivos Java class produzidos para a maioria dos compiladores Java. Computa as diferenas entre as verses de API; Ckjm (http://sourceforge.net/search/?q=ckjm) o programa ckjm calcula mtricas OO de Chidamber e Kemerer pelo repeties for que poderiam ser

8 processamento do bytecode de arquivos Java compilados. O programa calcula para cada classe as seis mtricas seguintes propostas por Chidamber e Kemerer; Simian; Cobertura (http://sourceforge.net/search/?q=cobertura) uma ferramenta Java livre que calcula a porcentagem de cdigo acessado pelos testes. Pode ser usado para identificar quais partes do programa Java esto faltando serem cobertas pelos testes. baseada em jcoverage; Testability Explorer; SQE. Entretanto, bom ressaltar que h uma infinidade de ferramentas, sendo que o programador geralmente opta por aquela que melhor se adapta sua concepo de qualidade e s caractersticas de seu cdigo. 3.1 EXEMPLO DE GRFICOS DE MTRICAS

As figuras a seguir so exemplos de mtodos grficos de quantificar as mtricas. Alguns desses grficos podem ser feitos usando o Microsoft Excel, que, nesse caso, surge como uma das ferramentas de mtrica de qualidade de cdigo.

Figura 2 - Pirmide de tamanho e complexidade

Figura 3 - Diagrama de toxicidade

Figura 4 Codecrawler: Visualizador especial da complexidade do sistema

Figura 5 - Diagrama de mtricas de classes

10

Figura 6 - Teste de razo de cdigo

4 BOAS PRTICAS NA ANLISE DE SOFTWARE


medida que o software se torna mais complexo, aumenta exponencialmente a probabilidade de exposio dos utilizadores finais a problemas com as aplicaes. No passado costumava-se modificar o cdigo e submet-lo a outros programadores para reviso. No entanto, esta prtica deixava passar frequentemente problemas mais intrincados. Atualmente, mesmo os problemas sutis de qualidade podem provocar falhas inesperadas, conduzindo potencialmente a perdas de negcio e a danos na reputao em termos de qualidade de produto. Para se poder ir alm das revises efetuadas por outros programadores e para diminuir o tempo de disponibilizao ao mercado de aplicaes complexas, existem agora no mercado vrias ferramentas de anlise esttica, as quais podem detectar e corrigir automaticamente problemas comuns de cdigo. Evidentemente, as ferramentas de anlise esttica ainda podem ser melhoradas, mas j esto fazendo um bom trabalho na resoluo de problemas. Uma dessas ferramentas o IBM Rational Software Analyzer, que pode detectar automaticamente (com ressalvas) e corrigir, em muitos casos, os problemas de cdigo. Apresentam-se a seguir 10 estratgias simples para melhorar a anlise esttica de software. Boa prtica 1. Acompanhe os estudos que tm sido feitos

11 Uma pesquisa rpida na Internet permitir aceder a dezenas de estudos que corroboram a ideia de que a qualidade do software melhora com a utilizao de ferramentas de anlise esttica automatizada. Dependendo do estudo e do tipo de anlise utilizados, as ferramentas de anlise esttica podem encontrar entre 5% e 30% de todos os defeitos existentes no cdigo. Muitos estudos fiveis j provaram que quando se espera que sejam os clientes a encontrar um dos problemas de cdigo, a resoluo poder custar somas considerveis. Se estes problemas forem identificados durante o desenvolvimento, os custos sero muito menores. Mesmo que seja adotada uma posio mais conservadora, acreditando que as ferramentas de anlise esttica so capazes de detectar apenas um por cento dos defeitos, podemos contabilizar facilmente aquilo que pode ser economizado se for obtido um total de 1000 defeitos. No entanto, as redues de custos so apenas uma parte da equao. Tambm possvel melhorar a reputao da empresa fornecedora se esta tiver um histrico de disponibilizao de cdigo de baixa qualidade. No caso concreto da IBM, os ndices de defeitos foram reduzidos em 33%, graas introduo de ferramentas de anlise esttica em algumas das suas aplicaes chave. Segundo a prpria companhia, num dos seus produtos conseguiu reduzir custos superiores a 250 mil dlares. Boa prtica 2. Estabelea objetivos e expectativas No existem milagres na anlise de software. No se pode colocar cdigo mau numa caixa mgica e depois obter cdigo de alta qualidade. O mais certo que o cdigo nunca venha a ser perfeito, independentemente das tecnologias que sejam implementadas no processo de desenvolvimento. Para se estabelecerem expectativas realistas, ser importante estabelecer alguns objetivos e parmetros comuns que ajudem a garantir um nvel razovel de qualidade. Muitas ferramentas de anlise esttica foram os programadores a seguir um determinado fluxo de trabalho, obrigando-os a trabalhar de acordo com as regras da ferramenta. Outras, pelo contrrio, tm a flexibilidade necessria para se adequarem s organizaes, no obrigando os

12 programadores a modificarem o seu processo de desenvolvimento para beneficiarem da anlise esttica. Boa prtica 3. Utilize uma anlise orientada A ferramenta Rational Software Analyzer fornece cerca de mil regras para vrias formas de anlise. Apesar de existir a tendncia de as selecionar todas e realizar a anlise esttica de uma s vez, dever evitar-se este procedimento. Ser melhor concentrar num conjunto muito menor, de modo a que os resultados produzidos sejam mais fceis de gerir. Por exemplo, se estiver executando uma reviso de cdigo bsica, possvel selecionar o subconjunto de regras orientado para o desempenho, em vez de todo o conjunto de regras. Desta forma, obtm-se resultados que sero mais fceis de compreender, bem como resultados mais imediatos, uma vez que podero ajudar a eliminar cdigo que possa estar a introduzir problemas de desempenho. Alm de se obterem resultados mais orientados, a utilizao de pequenos subconjuntos de regras tambm exigir menos tempo para a realizao das verificaes do cdigo. Boa prtica 4. Comece com blocos de cdigo pequenos Pode-se ter milhes de linhas de cdigo e se desejar obter um conjunto completo de resultados. No entanto, deve-se evitar a verificao de todo o cdigo, sobretudo quando se comea a utilizar ferramentas de anlise esttica. Apesar da ferramenta poder verificar todas essas linhas de cdigo, ser muito complicado lidar com os resultados. Se o cdigo a verificar for cdigo j existente e nunca tiver sido exposto a uma ferramenta de anlise esttica, a verificao poder gerar enormes quantidades de dados, ao ponto de derrubar qualquer equipe de desenvolvimento. Ser melhor analisar um conjunto de cdigo menor por exemplo, o projeto, o pacote, ou mesmo o arquivo que est sendo modificado. A realizao de anlises de cdigo em mais de alguns milhares de linhas de cdigo de cada vez ser geralmente pouco exitosa. Consequentemente, ser melhor analisar apenas o cdigo que est a ser modificado, o que envolver normalmente entre 50 a 1000 linhas de cdigo.

13 Boa prtica 5. Tenha em conta os falsos positivos Quando se descrevem os resultados das anlises estticas, pode provocar alguma confuso a utilizao da expresso falso positivo. Os programadores podem afirmar que tm falsos positivos, mas o que querem dizer realmente que no gostam da resposta. Um falso positivo genuno aquele em que a ferramenta de anlise esttica reporta algo que no verdade. Por exemplo, falha em fechar um fluxo (stream) que est realmente fechado. Este cenrio s se verifica normalmente em anlises mais profundas, como as de fluxo de dados e fluxo de controle. A maior parte das formas de anlise esttica envolvem a deteco de padres no cdigo ou na execuo do fluxo, mas raramente reportam um verdadeiro falso positivo. Boa prtica 6. No se deixe escravizar pela ferramenta No seria muito sensato partir do princpio que qualquer anlise esttica ir encontrar e resolver todos os nossos problemas de cdigo. As anlises estticas so simplesmente ferramentas que podemos utilizar para melhorar a qualidade global do cdigo, atravs da identificao das partes do cdigo que requerem ateno. Os programadores devero verificar o cdigo medida que vo escrevendo e utilizar anlises completas para as suas construes dirias, de modo a garantirem uma qualidade contnua do cdigo. Tambm no possvel partir do princpio que qualquer ferramenta de anlise esttica compreendeu completamente o cdigo, os processos ou prticas, ou que todos os resultados produzidos pela mesma devem preocupar toda a equipe de desenvolvimento. Em vez disso, deve-se utilizar as ferramentas de anlise esttica como ajuda de aprendizagem para permitir evitar problemas de cdigo no futuro. Ser, portanto, importante gerir os esforos dos programadores de codificao e no deixar que sejam as ferramentas de anlise a controlar os programadores. Como regra bsica, pode-se assumir a seguinte postura. Se os resultados de uma dada regra no se aplicam ao projeto em questo ou no fazem sentido, o melhor ser desativar essa regra. Assim a ferramenta de anlise no perder tempo a destacar problemas que j compreendemos. As ferramentas de anlise no se destinam a substituir completamente as anlises

14 de cdigo efetuadas pelos humanos. Destinam-se antes a ajudar a melhorar as anlises de cdigo manuais, fornecendo anlises consistentes de problemas de cdigo comuns. Boa prtica 7. Prepare-se para uma grande quantidade de resultados As anlises estticas automatizadas envolvem um conjunto complexo de processos destinados a detectar problemas de cdigo comuns. Para se obter a melhor experincia com este tipo de anlise, deve-se assegurar que se comecem com cdigo razoavelmente limpo, de modo a que a ferramenta tenha a oportunidade de identificar os problemas reais. Recomenda-se assim que analise manualmente o cdigo e o limpe antes de utilizar qualquer ferramenta de anlise esttica. Quanto mais limpo estiver o cdigo antes da verificao, menores sero os resultados iniciais com que ser necessrio lidar. Um projeto e um cdigo relativamente limpos daro ferramenta de anlise maiores oportunidades para encontrarem os problemas reais, em vez de se limitarem a destacar problemas associados a um projeto pobre. A anlise de cdigo consome bastante tempo, e o cdigo excessivamente complexo tender a aumentar o tempo do processo de anlise. As primeiras verificaes do cdigo devero gerar maior quantidade de resultados. Boa prtica 8. Assegure-se de que presta ateno aos resultados Ser importante ter em conta todos os problemas medida que vo sendo descobertos, dado que um deles pode encobrir outros. Ao garantir que todos os resultados reportados que exigem correo so registados como defeitos, o programador pode reduzir o nmero de resultados reportados e a melhorar claramente a qualidade global do cdigo. Como resultado haver menos bugs reportados no futuro. aconselhvel fazer com que a anlise esttica seja parte integrante do trabalho dirio e produzir relatrios continuados que destaquem os resultados das anlises. sempre bom lembrar que a deteco e resoluo dos problemas de forma eficaz a chave para um desenvolvimento bem sucedido.

15 Boa prtica 9. Utilize a anlise esttica como uma ferramenta e no como arma Sempre que uma equipe de desenvolvimento impelida a utilizar uma ferramenta de anlise esttica, existe a tendncia para um enfoque nas suas potenciais implicaes negativas. Os programadores costumam olhar para este tipo de ferramentas como um cronmetro que utilizado para monitorar o progresso do seu trabalho e para penaliz-los quando algo corre mal. Os gestores que quiserem introduzir ferramentas de anlise esttica devero apresent-las de forma a encorajar a sua utilizao. importante enfatizar o objetivo de melhorar a qualidade global do software, e no o de monitorizar as capacidades de desenvolvimento individuais. Os programadores podem utilizar as ferramentas de anlise estticas para melhorarem as suas capacidades. Estas ferramentas fornecem muito conhecimento codificado num processo para reportarem problemas de software comuns. Os programadores podero assim utilizar esse conhecimento para melhorarem as suas tcnicas de codificao, algo que poder ser benfico para toda a equipe. Por um lado, os programadores passaro a escrever cdigo melhor e, por outro, passar a existir uma maior consistncia entre os vrios programadores. Boa prtica 10. Preste ateno s coisas simples muito fcil ignorar os problemas mais simples do cdigo, apesar destes poderem resultar em problemas srios aps a implementao. Boa prtica 11. Comece hoje mesmo a melhorar a qualidade do seu cdigo As vantagens da anlise esttica automatizada so bastante evidentes. Pode reduzir o esforo, melhorar a qualidade e poupar dinheiro. O desenvolvimento de software coloca bastantes desafios e os sistemas esto se tornando cada vez maiores e mais complexos. Neste contexto, o processo de escrever cdigo com qualidade e dentro dos prazos exigidos est se tornando cada vez mais difcil. As velhas tcnicas j no so suficientes e j no se pode concentrar apenas num aspecto da qualidade do cdigo.

16

Figura 7 - Exemplo de cdigo ineficiente e soluo

Figura 8 - Exemplos de cdigos redundantes

17

5 CONCLUSO

Figura 9 - Satirizando a resoluo de problemas com erros de cdigo

H, sem dvida, uma grande quantidade de ferramentas e mtodos de se medir qualitativa e quantitativamente a qualidade de cdigos, sendo que a grande maioria voltada Orientao a Objetos. Baseadas em padres de qualidade, essas ferramentas possibilitam aos programadores testar seus cdigos de maneira a diminuir exaustivos e dispendiosos esforos de manuteno, bem como recursos financeiros. A qualidade do cdigo deve ser uma premissa desde os primeiros aprendizados de programao, pois os cdigos podem durar por muito tempo e sua manuteno deve independer de seu criador.

18

6 REFERNCIAS
Revista Engenharia de Software 12. Disponvel em: <http://www.devmedia.com.br/articles/viewcomp.asp?comp=12558>. Acesso em: 03/08/2011, 14:30:00. PAPO, Jos. Qualidade interna e externa de um software e seu cdigo: Como garantir a entrega de um projeto de software com um bom nvel de manutenibilidade. Disponvel em: <http://josepaulopapo.blogspot.com/2008/04/qualidade-cdigomanutenibilidade.html>. Acesso em 03/08/2011, s 16:10:00. DOERNENBURG, Erik. Software Quality you know it when you see it. Disponvel em: <http://jaoo.com.au/dl/jaoo_aus2008/slides/Dornenburg_SoftwareQuality.pdf>. Acesso em: 03/08/2011 s 15:12:00. VALENTE, Wander Antunes Gaspar. Ferramentas para avaliao de qualidade de cdigo em projetos de desenvolvimento de software em java. Disponvel em: <http://web2.cesjf.br/sites/cesjf/revistas/cesrevista/edicoes/2009/SISTINFO200 9_ferramentas_avaliacao.pdf > Acesso em: 03/08/2011 s 13:45:00. Artigo: Programao Orientada a Gambiarras. Disponvel em <http://desciclopedia.ws/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Gam biarras#Exemplos_de_POG> Acesso em 07/08/2011 s 12:21:12. DOEDERLEIN, Osvaldo Pinalli. Qualidade de Cdigo Aplicada Aperfeioe seu cdigo com boas prticas, ferramentas e plug-ins. Disponvel em: <http://ravetrends.com/w/images/8/89/Aperfeicoamento_de_Codigo_com_Boas _Praticas.pdf> Acesso em 07/08/2011 s 13:33:00. Boas Prticas na Anlise de Software. Disponvel em: < http://www.sinfic.pt/SinficWeb/displayconteudo.do2?numero=25029> Acesso em 07/08/2011 s 14:49:00.

Вам также может понравиться