Continuous Inspection - An effective approch towards Software Quality Product Improvement

77
Continuous Inspection Uma abordagem efetiva para melhoria contínua da qualidade de software Roberto Pepato Mellado @rpepato Gabriel Moreira @gspmoreira

description

Resumo: Métodos ágeis enfatizam a construção de produtos com alta qualidade, através da utilização de práticas de engenharia como refatoração, TDD e revisões de código.Entretanto, como podemos obter feedback das nossas refatorações no sistema? Como otimizar as revisões de código, nos pontos mais necessários? Como evitar a deterioração/entropia do código ao longo do tempo? Apresentaremos técnicas de Continuous Inspection que nos fornecem feedback objetivo da qualidade interna do software. Você aprenderá como reduzir a dívida técnica de seus projetos e a minimizar o risco e esforço no desenvolvimento e manutenção. Será demonstrada uma implementação de técnicas de Inspeção Contínua, que envolvem Integração Contínua, Testes de Unidade, Análise Estática de Código e extratores de métricas.Descrição: Há muitas décadas, a indústria de TI têm investido para melhorar a qualidade de software, através de otimização dos processos de desenvolvimento. A partir do despertar da comunidade ágil, maior importância tem sido dedicada à qualidade do produto de software e diversas práticas de engenharia de software têm sido promovidas. Reduzir complexidade, construir um design testável, reduzir duplicação, acoplamento e promover coesão entre classes, produzir testes de unidade efetivos e refatorar continuamente são exemplos de abordagens efetivas para produzir código limpo, que é mais barato de se manter e melhorar.Mau-cheiros (bad smells) são sintomas que possivelmente indicam um problema mais profundo na base de código. Como exemplo, podemos citar métodos grandes com excessiva quantidade de linhas, parâmetros ou complexidade ciclomática, classes com alto acoplamento e baixa coesão, poucos testes de unidade e baixa cobertura de código.Algumas questões então surgem em nossas mentes: Como evitar a deterioração/entropia de nosso código, ao longo do tempo? Como podemos encontrar bad smells na base de código e como lidar com eles? Como podemos obter feedback das nossas refatorações no sistema? Como otimizar as inspeções ou revisões de código, focando nos pontos mais necessários? Como obter tendências de métricas de qualidade para sistemas legados que serão evoluídos? Deveríamos continuar a investir esforço em qualidade interna? Em que proporção?A automatização das inspeções de código (Continuous Inspection) potencializa as inspeções tradicionais, feitas pelos engenheiros de software, pois é capaz de indicar os pontos no código que apresentam maiores indícios de anomalias e potenciais problemas de design. Além disso, essa técnica permite a extração e análise de tendência de métricas de qualidade de software em projetos de desenvolvimento em execução ou em software legado.Nesta sessão, apresentaremos um Framework para analisar a evolução da qualidade da base de código ao longo do tempo. Este framework é composto por modelos, métodos e técnicas aplicáveis em qualquer linguagem orientada à objeto de mercado. Será demonstrada uma implementação do framework em uma plataforma de desenvolvimento específica, utilizando um conjunto de ferramentas open-source para demonstrar o processo de Inspeção Contínua, que envolve Integração Contínua, Testes de Unidade, Análise Estática de Código e extratores de métricas. Serão apresentados os resultados que nossa empresa tem obtido e você poderá aprender como diminuir o débito técnico de seus projetos e, consequentemente, minimizar o risco e esforço no desenvolvimento e manutenção de aplicações.Você aprenderá como identificar débitos técnicos e bad smells no seu código-fonte, a partir da coleta sistemática e automatizada de métricas.Aprenderá a identificar o momento e o local do código onde se faz necessária refatoração, a fim de evitar muito esforço futuro na realização de manutenções de correção ou de melhoria.Saberá identificar qual a qualidade

Transcript of Continuous Inspection - An effective approch towards Software Quality Product Improvement

Page 1: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Continuous InspectionUma abordagem efetiva para melhoria contínua da qualidade de

software

Roberto Pepato Mellado@rpepato

Gabriel Moreira@gspmoreira

Page 2: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 3: Continuous Inspection - An effective approch towards Software Quality Product Improvement

James Q. Wilson

George L. Kelling

Page 4: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 5: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 6: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Production

Page 7: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 8: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Maintainability

Analisability

Modificability

Stability

Testability

?

[ISO 9126 / 25000]

Page 9: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Software Maintainability Maintenance Effort and Accuracy

Corrective AdaptativeImprovement

Preventive

Page 10: Continuous Inspection - An effective approch towards Software Quality Product Improvement

why?

Page 11: Continuous Inspection - An effective approch towards Software Quality Product Improvement

>50%

[Kemerer et. Al, 1999]

Page 12: Continuous Inspection - An effective approch towards Software Quality Product Improvement

>50%

[Jones, 2007]

Page 13: Continuous Inspection - An effective approch towards Software Quality Product Improvement

40% to 90%

[Bennet, 2002]

Page 14: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Not me!

Page 15: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Programmers are constantly in maintenance mode

“You are rarely writing original code.”

"I'm maintaining from day one."

“It's only the first 10 minutes that the code's original, when you type it in the first time. That's it.”

Page 16: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Don’t Make This Common Mistake

Page 17: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Technical Debt

Page 18: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 20: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 21: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 22: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 23: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 24: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 25: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 26: Continuous Inspection - An effective approch towards Software Quality Product Improvement

It’s not my fault, but it is still my problem

Page 27: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 28: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Dreaming and Planning Software Quality for his next project

Page 29: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 30: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Dijkstra

is Watching

[design by Philip Calçado]

Page 31: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Formal Inspection

Page 32: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Lightweight Inspection

Page 33: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Next, please!

Page 34: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Static Code Analysis

Page 35: Continuous Inspection - An effective approch towards Software Quality Product Improvement

What about tools?

http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

Page 36: Continuous Inspection - An effective approch towards Software Quality Product Improvement

FxCop (.NET)

Page 37: Continuous Inspection - An effective approch towards Software Quality Product Improvement

StyleCop (.NET)

Page 38: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Resharper (.NET)

Page 39: Continuous Inspection - An effective approch towards Software Quality Product Improvement

NDepend (.NET)

Page 40: Continuous Inspection - An effective approch towards Software Quality Product Improvement

JDepend (Java)

Page 41: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Find Bugs (Java)

Page 42: Continuous Inspection - An effective approch towards Software Quality Product Improvement

CCFinder (C#, Java, C++, VB)

Page 43: Continuous Inspection - An effective approch towards Software Quality Product Improvement

SimpleCov (Ruby)

Page 44: Continuous Inspection - An effective approch towards Software Quality Product Improvement

SimpleCov (Ruby)

Page 45: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metric-fu -- Churn (Ruby)

Page 46: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metric-fu -- Flog(Ruby)

Page 47: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metric-fu -- Reek(Ruby)

Page 48: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metric-fu -- Stats(Ruby)

Page 49: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metric-fu -- Hotspots(Ruby)

Page 50: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 51: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Continuous Inspection

CI + SCA

Page 52: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 53: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 54: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics

Bad Smells

Inspection

Refactoring

Continuous Improvement

Page 55: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Measure: Cyclomatic complexity

Tools• JavaNCSS• PMD• NDepend

Refactorings• Replace Conditional with

Polymorphism• Extract Method

Conditional Complexity

Page 56: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Duplicated Code

Measure: Code duplication

Tools: CheckStyle, PMD

Refactorings: • Extract Method• Pull Up Method• Form Template Method• Substitute Algorithm

Page 57: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Measure: Source lines of code (SLOC)

Tool: PMD, JavaNCSS, CheckStyle

Refactorings: Extract Method, Replace Temp with Query, Introduce Parameter Object, Preserve Whole Object, Replace Method with Method Object

Long Method / Class

Page 58: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Measure: Efferent coupling (fan-out per class)

Tool: CheckStyle, NDepend

Refactorings: • Move Method• Extract Class

Excessive Dependency

Page 59: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Inspection Automation in CI<target name="inspect" >

<exec program="${tools.fxcop}" commandline="/p:${reports.scripts}\Mineradores.fxcop /out:${reports.output}\ccnet-fxcop-results.xml" failonerror="false"/> <exec program="${tools.stylecopcmd}" commandline="-sf &quot;${libandunittest.buildfile.path}\LibAndUnitTest.sln&quot; -of &quot;${reports.output}\ccnet-libstylecop-output.xml&quot;" failonerror="false"/> <exec program="${tools.ndepend}" failonerror="false"> <arg value="${reports.scripts}\Mineradores-NDepend.xml" /> <arg value="/OutDir &quot;${reports.ndepend.output}&quot;" /> </exec>

</target>

Page 60: Continuous Inspection - An effective approch towards Software Quality Product Improvement

NDepend Report

Page 61: Continuous Inspection - An effective approch towards Software Quality Product Improvement

NDepend Report

Page 62: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Combination from measures of attributes belonging to a software product, or to its development process, which shows quantitatively some of its characteristics.

Page 63: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Métricas de Produto OO

Tamanho•LOC•N. Métodos•N. Atributos

Complexidade•CC - Complexidade Ciclomática

•Métricas de Halstead

•MCD - Max Conditional Depth

•MLD - Max Loop Depth

•DD - Decision Density

Acoplamento•AC – Aferent Coupling

•EC – Eferent Coupling

•ABC – Association Between Classes

Coesão•LCOM – Lack of Cohesion Methods

•LCOM-HS - Lack of Cohesion Of Methods Henderson-Sellers

Herança•NOC - Number of Children

•DIT - Depth of Inheritance Tree

Other Metrics•Churn•Program Vocabulary

• ...

Software Product Metrics

Page 64: Continuous Inspection - An effective approch towards Software Quality Product Improvement

How to Deal With Lots Of Data?

Page 65: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics Analysis – Dashboards (Sonar)

Page 66: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics Analysis – Temporal Series

Page 67: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics Analysis - Control Charts

Page 68: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics Analysis - OLAP

Page 69: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Metrics Analysis – Indicators from DW

Page 70: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Build Definition

Page 71: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Going Deeper

Page 72: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Transparency Adaptation

Inspection

Page 73: Continuous Inspection - An effective approch towards Software Quality Product Improvement
Page 74: Continuous Inspection - An effective approch towards Software Quality Product Improvement

I need some help!

Page 75: Continuous Inspection - An effective approch towards Software Quality Product Improvement

?

Page 76: Continuous Inspection - An effective approch towards Software Quality Product Improvement

Obrigado

Roberto Pepato [email protected]

@rpepato

Gabriel [email protected]

@gspmoreira

http://workingsweng.wordpress.com/

Page 77: Continuous Inspection - An effective approch towards Software Quality Product Improvement

19 e 20 de Agosto de 2011

http://www.agilevale.com.br/@agilevale#agilevale