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

Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Embed Size (px)

DESCRIPTION

Apresentação realizada no Agile Brazil em Fortaleza, 29/06/2011.

Citation preview

Page 1: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Uma abordagem efetiva para melhoria contínua da qualidade de software

Roberto Pepato Mellado @rpepato

Gabriel Moreira @gspmoreira

Page 2: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 3: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

James Q. Wilson

George L. Kelling

Page 4: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 5: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 6: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 7: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 8: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Maintainability

Analisability

Modificability

Stability

Testability

[ISO 9126 / 25000]

Page 9: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Software Maintainability Maintenance Effort and

Accuracy

Preventive

Page 10: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

why?

Page 11: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

[Kemerer et. Al, 1999]

Page 12: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

[Jones, 2007]

Page 13: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

[Bennet, 2002]

Page 14: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Not me!

Page 15: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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 - Uma abordagem efetiva para melhoria contínua da qualidade de software

Don’t Make This Common Mistake

Page 17: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Technical Debt

Page 18: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 20: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 21: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 22: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 23: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 24: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 25: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 26: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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

Page 27: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 28: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Dreaming and Planning Software Quality for his next project

Page 29: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 30: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Dijkstra

is Watching

[design by Philip Calçado]

Page 31: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Formal Inspection

Page 32: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Lightweight Inspection

Page 33: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Next, please!

Page 34: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Static Code Analysis

Page 35: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

What about tools?

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

Page 36: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

FxCop (.NET)

Page 37: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

StyleCop (.NET)

Page 38: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Resharper (.NET)

Page 39: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

NDepend (.NET)

Page 40: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

JDepend (Java)

Page 41: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Find Bugs (Java)

Page 42: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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

Page 43: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

SimpleCov (Ruby)

Page 44: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

SimpleCov (Ruby)

Page 45: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metric-fu -- Churn (Ruby)

Page 46: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metric-fu -- Flog(Ruby)

Page 47: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metric-fu -- Reek(Ruby)

Page 48: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metric-fu -- Stats(Ruby)

Page 49: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metric-fu -- Hotspots(Ruby)

Page 50: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 51: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Continuous

Inspection

CI + SCA

Page 52: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 53: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 54: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics

Bad Smells

Inspection

Refactoring

Continuous Improvement

Page 55: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Measure: Cyclomatic complexity Tools • JavaNCSS • PMD • NDepend Refactorings • Replace Conditional with

Polymorphism • Extract Method

Conditional Complexity

Page 56: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Duplicated Code

Measure: Code duplication Tools: CheckStyle, PMD Refactorings: • Extract Method • Pull Up Method • Form Template Method • Substitute Algorithm

Page 57: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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 - Uma abordagem efetiva para melhoria contínua da qualidade de software

Measure: Efferent coupling (fan-out per class) Tool: CheckStyle, NDepend Refactorings: • Move Method • Extract Class

Excessive Dependency

Page 59: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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 - Uma abordagem efetiva para melhoria contínua da qualidade de software

NDepend Report

Page 61: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

NDepend Report

Page 62: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

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 - Uma abordagem efetiva para melhoria contínua da qualidade de software

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 - Uma abordagem efetiva para melhoria contínua da qualidade de software

How to Deal With Lots Of Data?

Page 65: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics Analysis – Dashboards (Sonar)

Page 66: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics Analysis – Temporal Series

Page 67: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics Analysis - Control Charts

Page 68: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics Analysis - OLAP

Page 69: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Metrics Analysis – Indicators from DW

Page 70: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Build Definition

Page 71: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Going Deeper

Page 72: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 73: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 74: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

I need some help!

Page 75: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software
Page 76: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

Roberto Pepato Mellado [email protected]

@rpepato

Gabriel Moreira [email protected]

@gspmoreira

http://workingsweng.wordpress.com/

Page 77: Continuous Inspection - Uma abordagem efetiva para melhoria contínua da qualidade de software

19 e 20 de Agosto de 2011

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