$30 off During Our Annual Pro Sale. View Details »

Dealing With Duplicated Code

Dealing With Duplicated Code

Slides for my presentation at Bulgaria Web Summit 2015 about Code Duplication, what it is, problems, how to find and how to deal with it.

Evaldo Junior

April 18, 2015
Tweet

More Decks by Evaldo Junior

Other Decks in Programming

Transcript

  1. DealingWith
    DuplicatedCode
    Duplicated
    Duplicated
    BulgariaWebSummit
    April 2014
    Duplicated

    View Slide

  2. Evaldo Junior
    @InFog9
    evaldojunior.com
    #brazil #germany
    #php #linux #opensource

    View Slide

  3. BambergGermany
    We'reHiring!

    View Slide

  4. DéjàVu
    i.
    jBBZ2i .kBB:
    ,BBBBBBUi iFBBBBB
    BBZMMBBBBBZMBBBB88EBP
    ,BGNE0GZMMBBMG8EZqZBr
    ;B00NEqE0ZNGNEN0q0N8MZ7.
    BMZNEqENENEqEqZNZNEEOBBBBME0ZMMEGF5U15J7L7L7vLS25Uq0ZMBMBMBMBBBBBBBBBBBBBMBZPuLi,
    iB80ZNEN0qEqENEN0qZNENZE8OBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMBBBMMMMOMOM8M8MMBMBBBBBBBBBEU;.
    iBZZqENENEqEqZNZN0NEqENENE0ZNZ0G0GEG0Z0GEZEGEZ0ZEG0G0ZNZ0Z0Z0Z0ZNE0EqENENZ0ZNZEZEOGMMBBBBBGU,
    ;BONEq0N0NZNENENENENEqEN0qZNENEqEqZNEqENENZNEqEqENZqENEqZNEq0NEqZq0NENEq0NENZNENEqZ0Z0GZOOBBBBG7.
    B8GNEqENENENENENENEqZqZN0qZNENENZNENENEN0NEN0NZNENZNZNZNZqENZqZqZNEqEN0qENENENZNEqZqEqENZ0ZZMBBBM;
    XBZEN0q0qZqZNZNENEqENEN0NENZNEqENZNENEqEqEqEqZNENENZqEN0NENEqZNENENENENENEqENZNEqZqENENEq0NZNZZMBBB2
    BBGZN0NENGEO8G0ZNENEqENENZNEqZqENEq0NZNZqEN0NENEqENEqZNEqZqZN0qZqEqENENENEq0NENZNENZqENENENEN8BBBBBB1
    BBM8Z8OBBBBBBM0EqEqEqENZN0NENENENENENEN0NENEqENENEqEqENEN0q0qENENZNEN0NENENEqENZNENEqEqZN0NOMv5BBBBBBL
    2BBBBBMU: ;BOEEqEq0q0qEq0NEqENZqENENEqZNEq0qENENENZqENEN0qENZqZN0NENZNZNEq0NZqEN0NEq0qENGM8 .YBBBBO
    rvi YBO0ENEqENEN0N0N0NZqZNEqEqEqENENEqENZqENEq0qENENENEqENENZqENEqENZqZNEqENEN0N00BU 7BBBB:
    BBGNENEqZqEN0NENZqEqENZNENEN0NEN0qENEN0NENENENENEqZqENZN0q0NENENENZNEqEqEN0qGB7 XBBBi
    .BB8NEq0qZNEN0NZNZqEqZNENEqENEqENENEqENENEqENEqZNZqENENEqEN0NEqENENEqZNZN0N00Bi ;BBBY
    ;BBBEGNEEGNEN0NEN0N0NZNENENENEq0N0NEqENZq0NZNENENZqENENENZN0qENENEqZNZNEqENGBU .BBBj
    FBBBM88FGNENENZqENENENENENEq0NEqENENENEqENEN0NEqEN0NENENEqEqZqEqZNZNZqEqENBq BBBY
    rMBBrUGEN0NZNEqEN0NENEN0qENENEqEqENENENEN0qZNEq0NEN0NEq0N0qZNEqENENEN0NZOB BBBY
    :EYB8NZNENENZNZN0N0NZqENZ0ZNENENENZNEN0NENEqENENZNENEqENEqEN0NEN0NEN0q8B; BBBv
    BOEq0q0N0NENENENENZ0OOMZ8Z80ZEZ0Z0ENENENENENEqEN0NEqENENENEqZNEqENEEBM .BBBr
    qBNEqENEqENEqZNENGMBBBBBBBBBBBBBBBBBO8EZ0ZqENZNENEqEqENENEq0qENENENZZBr :BBBi
    MOZNENENZNE0ENENGBB: ,:7YS52LSqMBBBBBBOG0EqENENENENEqE0ENEN0NENENGMB vBBB:
    SB8NEq0qGZBMGNEqZMB .:7XBB8NZNEqENENENEN8O80ZqZN0NEqGBB 2BBB:
    ;BO0ZNENGMBq2BGN00B7 kBM0ZqEN0N0NEN8BMBBG80EN0N008BG XBBB
    ,BBEEqZEMBB7 BOE0OB 8BMEENENEqENGB7 :MBBBOO0ENE08BBj qBB
    BBEEqEEBBS NB0EOB FBBZZN0NENEEB .2MBBBBMZG08MBB qB
    NBZZNEEBBi 7BGNB0 ;BBGZ00NZN8B. :jMBBBBZG8B. S
    7BGZNE0BB. .BZZB0 OBGZN0qEEBL :UBBMOBU
    .BOGNZEMB, BM0Bq 2B8ZNENZMB iBBMB
    BBG0ZZBBj BMGB8 vBZENE0MB: BBB1
    OB8EOMBBi XBEBP YB0E08BB :BMB
    kBMGBBB7 FBMB: JBZ0OBB, BBBi
    SBM8BBr :BBBN YBMZBBX BMB2
    i:rYBBMMBJ OBBBBBB, MBMMBB, BBBE
    BBBBBBBBBr 5BBBZj : ,5BBBBBY 7BBBBBL
    YSNM8BMB5 iBBBBBBBBBB1 1BBBB2
    7BBBBBBBO;

    View Slide

  5. Wikipedia
    Duplicate code is a computer
    programming term for a sequence
    of source code that occurs more
    than once, either within a program
    or across different programs
    owned or maintained by the same
    entity.

    View Slide

  6. CodeSmells
    #1

    View Slide

  7. DRY
    Don't Repeat Yourself

    View Slide

  8. WET
    We Enjoy Typing
    Write Everything Twice

    View Slide

  9. Duplication is not only
    “DuplicatedCode”

    View Slide

  10. Why
    do we duplicate?

    View Slide

  11. Why?
    Copy/Paste is easy
    ctrl+c / ctrl+v

    View Slide

  12. Why?
    In a hurry to deliver
    You know, it's for yesterday!

    View Slide

  13. Why?
    Lack of codebase
    knowledge
    - Hm, I didn't know our codebase had this already.

    View Slide

  14. Duplication's
    Problems

    View Slide

  15. Problems
    Increase codebase's
    size
    Five thousand lines' controllers.

    View Slide

  16. Problems
    Fix the same bug more
    than once
    - Ok, now it works in that page, but not in this one.

    View Slide

  17. Problems
    Adding not standard
    new features
    - Why are the dates not formated using my preference?

    View Slide

  18. Is duplication always a
    bad thing?

    View Slide

  19. Example of duplication

    View Slide

  20. View Slide

  21. Hey! We need to
    support USA users!

    View Slide

  22. View Slide

  23. Support user defined
    date format

    View Slide

  24. View Slide

  25. One possible solution

    View Slide

  26. View Slide

  27. Should I actively
    search for
    duplications?

    View Slide

  28. PHPCPD

    View Slide

  29. PHPCPD

    View Slide

  30. I found some
    duplications!
    What should I do now?

    View Slide

  31. Apply Some
    Patterns

    View Slide

  32. Different methods

    View Slide

  33. Different methods

    View Slide

  34. Extract Method

    View Slide

  35. Extract Method

    View Slide

  36. Different classes

    View Slide

  37. Extract Class

    View Slide

  38. Different projects

    View Slide

  39. Extract Package

    View Slide

  40. Same attribute in
    different classes

    View Slide

  41. Pull Up Field

    View Slide

  42. Thank you!
    благодаря
    MEGF5U15J7L7L7vLS25Uq0ZMBMBMBMBBBBBBBBBBBBBMBZPuLi,
    BBBBBBBBBBBBBBBBBBBBBBBBBBMBBBMMMMOMOM8M8MMBMBBBBBBBBBEU;.
    G0GEG0Z0GEZEGEZ0ZEG0G0ZNZ0Z0Z0Z0ZNE0EqENENZ0ZNZEZEOGMMBBBBBGU,
    qEqZNEqENENZNEqEqENZqENEqZNEq0NEqZq0NENEq0NENZNENEqZ0Z0GZOOBBBBG7.
    ENZNENENEN0NEN0NZNENZNZNZNZqENZqZqZNEqEN0qENENENZNEqZqEqENZ0ZZMBBBM;
    qENZNENEqEqEqEqZNENENZqEN0NENEqZNENENENENENEqENZNEqZqENENEq0NZNZZMBBB2
    ZqENEq0NZNZqEN0NENEqENEqZNEqZqZN0qZqEqENENENEq0NENZNENZqENENENEN8BBBBBB1
    NENENENENEN0NENEqENENEqEqENEN0q0qENENZNEN0NENENEqENZNENEqEqZN0NOMv5BBBBBBL
    EqENZqENENEqZNEq0qENENENZqENEN0qENZqZN0NENZNZNEq0NZqEN0NEq0qENGM8 .YBBBBO
    N0NZqZNEqEqEqENENEqENZqENEq0qENENENEqENENZqENEqENZqZNEqENEN0N00BU 7BBBB:
    ENZqEqENZNENEN0NEN0qENEN0NENENENENEqZqENZN0q0NENENENZNEqEqEN0qGB7 XBBBi
    NZNZqEqZNENEqENEqENENEqENENEqENEqZNZqENENEqEN0NEqENENEqZNZN0N00Bi ;BBBY
    0NEN0N0NZNENENENEq0N0NEqENZq0NZNENENZqENENENZN0qENENEqZNZNEqENGBU .BBBj
    NENZqENENENENENEq0NEqENENENEqENEN0NEqEN0NENENEqEqZqEqZNZNZqEqENBq BBBY
    0NZNEqEN0NENEN0qENENEqEqENENENEN0qZNEq0NEN0NEq0N0qZNEqENENEN0NZOB BBBY
    NENENZNZN0N0NZqENZ0ZNENENENZNEN0NENEqENENZNENEqENEqEN0NEN0NEN0q8B; BBBv
    0q0N0NENENENENZ0OOMZ8Z80ZEZ0Z0ENENENENENEqEN0NEqENENENEqZNEqENEEBM .BBBr
    qENEqENEqZNENGMBBBBBBBBBBBBBBBBBO8EZ0ZqENZNENEqEqENENEq0qENENENZZBr :BBBi
    ENENZNE0ENENGBB: ,:7YS52LSqMBBBBBBOG0EqENENENENEqE0ENEN0NENENGMB vBBB:
    q0qGZBMGNEqZMB .:7XBB8NZNEqENENENEN8O80ZqZN0NEqGBB 2BBB:
    ENGMBq2BGN00B7 kBM0ZqEN0N0NEN8BMBBG80EN0N008BG XBBBi
    EMBB7 BOE0OB 8BMEENENEqENGB7 :MBBBOO0ENE08BBj qBBB;
    BBS NB0EOB FBBZZN0NENEEB .2MBBBBMZG08MBB qBBBv
    Bi 7BGNB0 ;BBGZ00NZN8B. :jMBBBBZG8B. SBBBq
    . .BZZB0 OBGZN0qEEBL :UBBMOBU ;BBBB7
    BM0Bq 2B8ZNENZMB iBBMB 2BBBB1i
    BMGB8 vBZENE0MB: BBB1 YBBBBBBq:
    XBEBP YB0E08BB :BMB :5BBBBB
    FBMB: JBZ0OBB, BBBi .ru7
    :BBBN YBMZBBX BMB2
    OBBBBBB, MBMMBB, BBBE
    @InFog9
    evaldojunior.com
    speakerdeck.com/infog
    github.com/InFog
    i.
    jBBZ2i .kBB:
    ,BBBBBBUi iFBBBBB
    BBZMMBBBBBZMBBBB88EBP
    ,BGNE0GZMMBBMG8EZqZBr
    ;B00NEqE0ZNGNEN0q0N8MZ7.
    BMZNEqENENEqEqZNZNEEOBBBBME0ZMMEGF5U15J7L
    iB80ZNEN0qEqENEN0qZNENZE8OBBBBBBBBBBBBBBBB
    iBZZqENENEqEqZNZN0NEqENENE0ZNZ0G0GEG0Z0GEZ
    ;BONEq0N0NZNENENENENEqEN0qZNENEqEqZNEqENEN
    B8GNEqENENENENENENEqZqZN0qZNENENZNENENEN0
    XBZEN0q0qZqZNZNENEqENEN0NENZNEqENZNENEqEq
    BBGZN0NENGEO8G0ZNENEqENENZNEqZqENEq0NZNZ
    BBM8Z8OBBBBBBM0EqEqEqENZN0NENENENENENEN
    2BBBBBMU: ;BOEEqEq0q0qEq0NEqENZqENENE
    rvi YBO0ENEqENEN0N0N0NZqZNEqEq
    BBGNENEqZqEN0NENZqEqENZNE
    .BB8NEq0qZNEN0NZNZqEqZNEN
    ;BBBEGNEEGNEN0NEN0N0NZNE
    FBBBM88FGNENENZqENENEN
    rMBBrUGEN0NZNEqEN0NE
    :EYB8NZNENENZNZN0N
    BOEq0q0N0NENENE
    qBNEqENEqENEqZN
    MOZNENENZNE0ENE
    SB8NEq0qGZBMGNEq
    ;BO0ZNENGMBq2BGN0
    ,BBEEqZEMBB7 BOE0
    BBEEqEEBBS NB0E
    NBZZNEEBBi 7BGN
    7BGZNE0BB. .BZZ
    .BOGNZEMB, BM0
    BBG0ZZBBj BMG
    OB8EOMBBi XBE
    kBMGBBB7 FBM
    SBM8BBr :BBB
    i:rYBBMMBJ OBBBBBB

    View Slide