0
ContinuousInspection<br />Uma abordagem efetiva para melhoria contínua da qualidade de software<br />Roberto PepatoMellado...
George L. Kelling<br />James Q. Wilson<br />
Production<br />
[ISO 9126 / 25000]<br />?<br />
Corrective<br />Adaptative<br />Improvement<br />Preventive<br />
why?<br />
>50%<br />[Kemerer et. Al, 1999]<br />
>50%<br />[Jones, 2007]<br />
40%  to  90%<br />[Bennet, 2002]<br />
Not me!<br />
Programmers are constantly in maintenance mode<br />“You are rarely writing original code.”<br />"I'm maintaining from day...
Don’t Make This Common Mistake<br />
TechnicalDebt<br />
Technical<br />Debt<br />
QualityorFast Delivery?<br />
It’snotmyfault, but it is still myproblem<br />
Dreamingand Planning  Software Qualityfor hisnextproject<br />
Dijkstra<br />[design byPhilip Calçado]<br />isWatching<br />
Formal Inspection<br />
LightweightInspection<br />
Next, please!<br />
StaticCodeAnalysis<br />
Whatabout tools?<br />http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis<br />
FxCop (.NET)<br />
StyleCop (.NET)<br />
Resharper (.NET)<br />
NDepend (.NET)<br />
JDepend (Java)<br />
Find Bugs (Java)<br />
CCFinder (C#, Java, C++, VB)<br />
SimpleCov (Ruby)<br />
SimpleCov (Ruby)<br />
Metric-fu -- Churn (Ruby)<br />
Metric-fu -- Flog(Ruby)<br />
Metric-fu -- Reek(Ruby)<br />
Metric-fu -- Stats(Ruby)<br />
Metric-fu -- Hotspots(Ruby)<br />
ContinuousInspection<br />CI + SCA<br />
ContinuousImprovement<br />Metrics<br />BadSmells<br />Inspection<br />Refactoring<br />
ConditionalComplexity<br />Measure: Cyclomaticcomplexity<br />Tools<br /><ul><li>JavaNCSS
PMD
NDepend</li></ul>Refactorings<br /><ul><li>Replace Conditional with Polymorphism
Extract Method</li></li></ul><li>DuplicatedCode<br />Measure: Code duplication<br />Tools: CheckStyle, PMD<br />Refactorin...
Pull Up Method
Form Template Method
Substitute Algorithm</li></li></ul><li>LongMethod / Class<br />Measure: Source lines of code (SLOC)<br />Tool: PMD, JavaNC...
ExcessiveDependency<br />Measure: Efferent coupling (fan-out per class)<br />Tool: CheckStyle, NDepend<br />Refactorings: ...
Extract Class</li></li></ul><li>Inspection Automation in CI<br /><targetname="inspect" ><br />  <execprogram="${tools.fxco...
NDependReport<br />
NDependReport<br />
Combination from measures of attributes belonging to a software product, or to its development process, which shows quanti...
Software ProductMetrics<br />Métricas de Produto OO<br />
HowtoDealWithLotsOf Data?<br />
MetricsAnalysis – Dashboards (Sonar)<br />
MetricsAnalysis– Temporal Series<br />
MetricsAnalysis - ControlCharts<br />
MetricsAnalysis - OLAP<br />
MetricsAnalysis – Indicatorsfrom DW<br />
Build Definition<br />
GoingDeeper<br />
Inspection<br />Adaptation<br />Transparency<br />
Upcoming SlideShare
Loading in...5
×

Continuous Inspection - An effective approch towards Software Quality Product Improvement

2,043

Published on

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

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
2,043
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
39
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. ContinuousInspection<br />Uma abordagem efetiva para melhoria contínua da qualidade de software<br />Roberto PepatoMellado<br />@rpepato<br />Gabriel Moreira<br />@gspmoreira<br />
  2. 2.
  3. 3. George L. Kelling<br />James Q. Wilson<br />
  4. 4.
  5. 5.
  6. 6. Production<br />
  7. 7.
  8. 8. [ISO 9126 / 25000]<br />?<br />
  9. 9. Corrective<br />Adaptative<br />Improvement<br />Preventive<br />
  10. 10. why?<br />
  11. 11. >50%<br />[Kemerer et. Al, 1999]<br />
  12. 12. >50%<br />[Jones, 2007]<br />
  13. 13. 40% to 90%<br />[Bennet, 2002]<br />
  14. 14. Not me!<br />
  15. 15. Programmers are constantly in maintenance mode<br />“You are rarely writing original code.”<br />"I'm maintaining from day one." <br />“It's only the first 10 minutes that the code's original, when you type it in the first time. That's it.”<br />
  16. 16. Don’t Make This Common Mistake<br />
  17. 17. TechnicalDebt<br />
  18. 18. Technical<br />Debt<br />
  19. 19. QualityorFast Delivery?<br />
  20. 20.
  21. 21.
  22. 22.
  23. 23.
  24. 24.
  25. 25.
  26. 26. It’snotmyfault, but it is still myproblem<br />
  27. 27.
  28. 28. Dreamingand Planning Software Qualityfor hisnextproject<br />
  29. 29.
  30. 30. Dijkstra<br />[design byPhilip Calçado]<br />isWatching<br />
  31. 31. Formal Inspection<br />
  32. 32. LightweightInspection<br />
  33. 33. Next, please!<br />
  34. 34. StaticCodeAnalysis<br />
  35. 35. Whatabout tools?<br />http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis<br />
  36. 36. FxCop (.NET)<br />
  37. 37. StyleCop (.NET)<br />
  38. 38. Resharper (.NET)<br />
  39. 39. NDepend (.NET)<br />
  40. 40. JDepend (Java)<br />
  41. 41. Find Bugs (Java)<br />
  42. 42. CCFinder (C#, Java, C++, VB)<br />
  43. 43. SimpleCov (Ruby)<br />
  44. 44. SimpleCov (Ruby)<br />
  45. 45. Metric-fu -- Churn (Ruby)<br />
  46. 46. Metric-fu -- Flog(Ruby)<br />
  47. 47. Metric-fu -- Reek(Ruby)<br />
  48. 48. Metric-fu -- Stats(Ruby)<br />
  49. 49. Metric-fu -- Hotspots(Ruby)<br />
  50. 50.
  51. 51. ContinuousInspection<br />CI + SCA<br />
  52. 52.
  53. 53.
  54. 54. ContinuousImprovement<br />Metrics<br />BadSmells<br />Inspection<br />Refactoring<br />
  55. 55. ConditionalComplexity<br />Measure: Cyclomaticcomplexity<br />Tools<br /><ul><li>JavaNCSS
  56. 56. PMD
  57. 57. NDepend</li></ul>Refactorings<br /><ul><li>Replace Conditional with Polymorphism
  58. 58. Extract Method</li></li></ul><li>DuplicatedCode<br />Measure: Code duplication<br />Tools: CheckStyle, PMD<br />Refactorings: <br /><ul><li>Extract Method
  59. 59. Pull Up Method
  60. 60. Form Template Method
  61. 61. Substitute Algorithm</li></li></ul><li>LongMethod / Class<br />Measure: Source lines of code (SLOC)<br />Tool: PMD, JavaNCSS, CheckStyle<br />Refactorings: Extract Method, Replace Temp with Query, Introduce Parameter Object, Preserve Whole Object, Replace Method with Method Object<br />
  62. 62. ExcessiveDependency<br />Measure: Efferent coupling (fan-out per class)<br />Tool: CheckStyle, NDepend<br />Refactorings: <br /><ul><li>Move Method
  63. 63. Extract Class</li></li></ul><li>Inspection Automation in CI<br /><targetname="inspect" ><br /> <execprogram="${tools.fxcop}" <br />commandline="/p:${reports.scripts}Mineradores.fxcop /out:${reports.output}ccnet-fxcop-results.xml" failonerror="false"/><br /> <execprogram="${tools.stylecopcmd}" <br />commandline="-sf &quot;${libandunittest.buildfile.path}LibAndUnitTest.sln&quot; -of &quot;${reports.output}ccnet-libstylecop-output.xml&quot;" failonerror="false"/><br /><execprogram="${tools.ndepend}" failonerror="false"><br /> <argvalue="${reports.scripts}Mineradores-NDepend.xml" /><br /> <argvalue="/OutDir &quot;${reports.ndepend.output}&quot;" /><br /> </exec> <br /> </target><br />
  64. 64. NDependReport<br />
  65. 65. NDependReport<br />
  66. 66. Combination from measures of attributes belonging to a software product, or to its development process, which shows quantitatively some of its characteristics. <br />
  67. 67. Software ProductMetrics<br />Métricas de Produto OO<br />
  68. 68. HowtoDealWithLotsOf Data?<br />
  69. 69. MetricsAnalysis – Dashboards (Sonar)<br />
  70. 70. MetricsAnalysis– Temporal Series<br />
  71. 71. MetricsAnalysis - ControlCharts<br />
  72. 72. MetricsAnalysis - OLAP<br />
  73. 73. MetricsAnalysis – Indicatorsfrom DW<br />
  74. 74. Build Definition<br />
  75. 75. GoingDeeper<br />
  76. 76. Inspection<br />Adaptation<br />Transparency<br />
  77. 77.
  78. 78. I need some help!<br />
  79. 79. ?<br />
  80. 80. Obrigado<br />Roberto PepatoMellado<br />rpepato@gmail.com<br />@rpepato<br />Gabriel Moreira<br />gabrielspmoreira@yahoo.com.br<br />@gspmoreira<br />http://workingsweng.wordpress.com/<br />
  81. 81. http://www.agilevale.com.br/<br />@agilevale<br />#agilevale<br />19 e 20 de Agosto de 2011<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×