MÉTRICAS ASSOCIADAS AO DESENVOLVIMENTO DE Faculdade Cenecista Nossa Senhora dos Anjos FACENSA Sistemas de Informação MÉTRICAS ASSOCIADAS AO DESENVOLVIMENTO DE SOFTWARE USANDO MÉTODOS ÁGEIS por Guilherme da Silveira Elias - guilherme.elias@gmail.com Monografia apresentada na disciplina de Trabalho de Conclusão de Curso II, sob orientação do Prof. Daniel Wildt e Co-orientação do Prof. Guilherme Lacerda
Métricas de Qualidade de Código Ferramentas de Apoio AGENDA Motivação Objetivos Métricas de Qualidade de Código Ferramentas de Apoio Trabalhos Relacionados Estudo de Caso Considerações Finais Perguntas
Motivação Como você mede a qualidade de seu código? Você Mede?
Métricas de forma pró-ativa; Objetivos Métricas de forma pró-ativa; Maior qualidade de código fonte gerado.
Métricas de Qualidade de Código Testes Unitários – Funcionais - Testar até não conseguir pensar em mais nenhum possível teste. (BECK, 2004) - Ambiente Automatizado Cobertura de Código - Garantir maior abrangência dos testes - Buscando qualidade nos teste
Métricas de Qualidade de Código TAMANHO - SLOC, LOC, KLOC - Mensurar métodos, classes, módulos etc.. (KOSCIANSKI, 2006) COMPLEXIDADE - Sinônimo de Legibilidade!! OO - Acoplamento, Abstração (LANZA, 2006) REFACTORING - Instrumento de otimização C.I. (Integração Contínua) - Agir de forma preventiva
Ferramentas de Apoio JUnit - NUnit Selenium IDE NCover EMMA Ant - NAnt
Ferramentas de Apoio PMD/CPD Simian/FxCop Checkstyle Metrics .NET Reflector
Ferramentas de Apoio Visual Studio Netbeans Cruise Control Continuum
Trabalhos Relacionados Métricas para melhoria contínua de código – Um estudo de caso com Java (SILVEIRA; WILDT, 2008) Artigo e Pôster aceitos na SEMINFO 2008.
Trabalhos Relacionados Experimento usando Java http://classdiary.dev.java.net
Estudo de Caso Projeto Class Diary FUJA Projeto Social Program https://classdiary.dev.java.net Projeto Class Diary FUJA http://code.google.com/p/spm-net-br Projeto Social Program Management FACENSA.NET
Estudo de Caso “Detector de Reuso de Código” Projeto: Classdiary Solução: - Adotado reuso de código; - Criado método publico(public) em classe base. Situação Adversa - CPD (Copy Paste Detector) - 12 incidências do trecho de código: Automatização: Refatoração de código (IDE Netbeans) If (rs != null){ rs.close(); } If(st != null){ st.close(); If(c != null){ c.close(); Beneficios Trazidos: Redução de mais 75 LOC; Reducão do % da Complexidade (Métodos e Classes); Novo teste unitário específico; Aumento cobertura para: Bloco refatorado Método refatorado
Estudo de Caso “Pós e Pré-Condições Para Testes” Projeto: SPM Situação Adversa Testes Unitários e Funcionais; Ao rodar falhavam no ambiente de Integração Contínua!! Dependências entre os métodos; Solução: Criado Classe publica(public) para execução de Statements (Insert, Update, Delete) Uso dos métodos Initialize() e CleanUp() Automatização: IDE VSTS 2008 Beneficios Trazidos: Testes Coesos;
Estudo de Caso SPM (Social Program Management) http://code.google.com/p/spm-net-br
Considerações Finais Grande desafio utilizar os grupos; Projetos em desenvolvimento mas já funcionais, através de versões beta.
Referências Sites Livros EMMA – http://emma.sourceforge.net ChecStyle – http://checkstyle.sourceforge.net/ Junit – http://www.junit.org Cruise Control Java http://cruisecontrol.sourceforge.net Selenium IDE - http://selenium-ide.openqa.org Ant Apache - http://ant.apache.org PMD / CPD – http://pmd.sourceforge.net Metrics – http://metrics.sourceforge.net Netbeans – http://www.netbeans.org Eclipse – http://www.eclipse.org Continuum - http://continuum.apache.org Livros BECK, Kent. Extreme Programming Explaned. Bookman, Porto Alegre, 2004; LANZA, Michele. Object-Oriented Metrics in Pratice, using software metrics to characterize, evaluate, and improve the design of object-oriented systems. Springer, 2006. KOSCIANSKI , André e dos Santos Soares, Michel. Qualidade de Software. São Paulo: Novatec, 2006; - SILVEIRA, Guilherme Elias; WILDT, Daniel. Métricas de Qualidade de Codigo. Um estudo de caso usando Java, FACENSA, 2008.
PERGUNTAS ?
http://fuja.dev.java.net http://furor.dev.java.net http://groups.google.com/group/fuphp http://groups.google.com/group/FacensaNET