41
Ola.

Thoughtworks Brazil, Code Quality

Embed Size (px)

DESCRIPTION

Talk to TW'ers in Brazil, focussing on code quality and understanding what that means.

Citation preview

Page 1: Thoughtworks Brazil, Code Quality

Ola.  

Page 2: Thoughtworks Brazil, Code Quality

You’re  making  me    refactor.  

You  won’t  like  me  when  I  refactor  

Page 3: Thoughtworks Brazil, Code Quality
Page 4: Thoughtworks Brazil, Code Quality

Refactoring?  

Page 5: Thoughtworks Brazil, Code Quality

ThoughtWorks  

a  change  made  to  the  internal  structure  of  so=ware  to  make  it  easier  to  understand  and  cheaper  

to  modify  without  changing  its  observable  behavior  

Page 6: Thoughtworks Brazil, Code Quality
Page 7: Thoughtworks Brazil, Code Quality

 Don't  touch  anything  that  doesn't  have  coverage.  

Otherwise,  you're  not  refactoring;  you're  just  changing  shit  

Page 8: Thoughtworks Brazil, Code Quality

ThoughtWorks  

a  change  made  to  the  internal  structure  of  so=ware  to  make  it  

easier  to  understand  and  cheaper  to  modify  without  changing  its  observable  behavior  

Page 9: Thoughtworks Brazil, Code Quality

SomeHmes  it  just  feels  right.  

Page 10: Thoughtworks Brazil, Code Quality
Page 11: Thoughtworks Brazil, Code Quality
Page 12: Thoughtworks Brazil, Code Quality
Page 13: Thoughtworks Brazil, Code Quality

Step  1:  Measure  the  

toxicity.  

Page 14: Thoughtworks Brazil, Code Quality
Page 15: Thoughtworks Brazil, Code Quality

Smells  in  the  code  

Page 16: Thoughtworks Brazil, Code Quality

CyclomaHc  Complexity  

5  to  7  is  decent  for  most  ruby  code  

Page 17: Thoughtworks Brazil, Code Quality

Saikuro  

Page 18: Thoughtworks Brazil, Code Quality

Assignments,  Branches,  Calls    with  Flog  

Watch  for  scores  greater  than  40  

Page 19: Thoughtworks Brazil, Code Quality

Flog  

Page 20: Thoughtworks Brazil, Code Quality

DuplicaHon  with  Flay  

Watch  for  scores  greater  than  30  

Page 21: Thoughtworks Brazil, Code Quality
Page 22: Thoughtworks Brazil, Code Quality

Control  Couples  and  more    with  Reek  

Simulated  Polymorphism  Feature  Envy  UHlity  Methods  

Page 23: Thoughtworks Brazil, Code Quality

LinHng  with  Dust/Nitpick  

JSLint  for  Ruby  

Page 24: Thoughtworks Brazil, Code Quality

Common  smells    in  Ruby    

Page 25: Thoughtworks Brazil, Code Quality

PrimiHve  Obsession  

Page 26: Thoughtworks Brazil, Code Quality

Feature  Envy  

Page 27: Thoughtworks Brazil, Code Quality

Meta-­‐programming  

Keep  it  simple.    Keep  it  declaraHve  

Page 28: Thoughtworks Brazil, Code Quality
Page 29: Thoughtworks Brazil, Code Quality

Toxicity  is  more  than  code  smells  

Page 30: Thoughtworks Brazil, Code Quality

“The  real  problem  I  have  with  the  CK  suite  and  similar  metrics  is  that  they  only  measure  a  single  module  (or  class  in  this  case).    I  claim  that  the  quality  of  the  design  of  a  system  is  not  something  that  can  be  determined  by  looking  at  individual  classes.    It  is  conceivable  that  every  class  in  a  system  could  be  considered  reasonable  by  whatever  single-­‐class  metrics  are  being  used,  but  the  overall  design  is  considered  bad.”  

hDp://www.cs.auckland.ac.nz/~ewan/  

Ewan  Tempero:  A  Research  Agenda  

Page 31: Thoughtworks Brazil, Code Quality

DEPENDENCY  

Page 32: Thoughtworks Brazil, Code Quality

Tangles  

Page 33: Thoughtworks Brazil, Code Quality

Step  2:  Make  it  visible  

Page 34: Thoughtworks Brazil, Code Quality

Treemaps  (Max  CC)  

hbp://mbostock.github.com/protovis/  

Page 35: Thoughtworks Brazil, Code Quality

Treemaps  

Page 36: Thoughtworks Brazil, Code Quality

Dependency  matrix  

Page 37: Thoughtworks Brazil, Code Quality

Step  3:  Agree  on  the  fix  

Page 38: Thoughtworks Brazil, Code Quality
Page 39: Thoughtworks Brazil, Code Quality
Page 40: Thoughtworks Brazil, Code Quality

Step  4:      Go  fix  it  

Page 41: Thoughtworks Brazil, Code Quality

Obrigado