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.
DealingWithDuplicatedCodeDuplicatedDuplicatedBulgariaWebSummitApril 2014Duplicated
View Slide
Evaldo Junior@InFog9evaldojunior.com#brazil #germany#php #linux #opensource
BambergGermanyWe'reHiring!
DéjàVui.jBBZ2i .kBB:,BBBBBBUi iFBBBBBBBZMMBBBBBZMBBBB88EBP,BGNE0GZMMBBMG8EZqZBr;B00NEqE0ZNGNEN0q0N8MZ7.BMZNEqENENEqEqZNZNEEOBBBBME0ZMMEGF5U15J7L7L7vLS25Uq0ZMBMBMBMBBBBBBBBBBBBBMBZPuLi,iB80ZNEN0qEqENEN0qZNENZE8OBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMBBBMMMMOMOM8M8MMBMBBBBBBBBBEU;.iBZZqENENEqEqZNZN0NEqENENE0ZNZ0G0GEG0Z0GEZEGEZ0ZEG0G0ZNZ0Z0Z0Z0ZNE0EqENENZ0ZNZEZEOGMMBBBBBGU,;BONEq0N0NZNENENENENEqEN0qZNENEqEqZNEqENENZNEqEqENZqENEqZNEq0NEqZq0NENEq0NENZNENEqZ0Z0GZOOBBBBG7.B8GNEqENENENENENENEqZqZN0qZNENENZNENENEN0NEN0NZNENZNZNZNZqENZqZqZNEqEN0qENENENZNEqZqEqENZ0ZZMBBBM;XBZEN0q0qZqZNZNENEqENEN0NENZNEqENZNENEqEqEqEqZNENENZqEN0NENEqZNENENENENENEqENZNEqZqENENEq0NZNZZMBBB2BBGZN0NENGEO8G0ZNENEqENENZNEqZqENEq0NZNZqEN0NENEqENEqZNEqZqZN0qZqEqENENENEq0NENZNENZqENENENEN8BBBBBB1BBM8Z8OBBBBBBM0EqEqEqENZN0NENENENENENEN0NENEqENENEqEqENEN0q0qENENZNEN0NENENEqENZNENEqEqZN0NOMv5BBBBBBL2BBBBBMU: ;BOEEqEq0q0qEq0NEqENZqENENEqZNEq0qENENENZqENEN0qENZqZN0NENZNZNEq0NZqEN0NEq0qENGM8 .YBBBBOrvi YBO0ENEqENEN0N0N0NZqZNEqEqEqENENEqENZqENEq0qENENENEqENENZqENEqENZqZNEqENEN0N00BU 7BBBB:BBGNENEqZqEN0NENZqEqENZNENEN0NEN0qENEN0NENENENENEqZqENZN0q0NENENENZNEqEqEN0qGB7 XBBBi.BB8NEq0qZNEN0NZNZqEqZNENEqENEqENENEqENENEqENEqZNZqENENEqEN0NEqENENEqZNZN0N00Bi ;BBBY;BBBEGNEEGNEN0NEN0N0NZNENENENEq0N0NEqENZq0NZNENENZqENENENZN0qENENEqZNZNEqENGBU .BBBjFBBBM88FGNENENZqENENENENENEq0NEqENENENEqENEN0NEqEN0NENENEqEqZqEqZNZNZqEqENBq BBBYrMBBrUGEN0NZNEqEN0NENEN0qENENEqEqENENENEN0qZNEq0NEN0NEq0N0qZNEqENENEN0NZOB BBBY:EYB8NZNENENZNZN0N0NZqENZ0ZNENENENZNEN0NENEqENENZNENEqENEqEN0NEN0NEN0q8B; BBBvBOEq0q0N0NENENENENZ0OOMZ8Z80ZEZ0Z0ENENENENENEqEN0NEqENENENEqZNEqENEEBM .BBBrqBNEqENEqENEqZNENGMBBBBBBBBBBBBBBBBBO8EZ0ZqENZNENEqEqENENEq0qENENENZZBr :BBBiMOZNENENZNE0ENENGBB: ,:7YS52LSqMBBBBBBOG0EqENENENENEqE0ENEN0NENENGMB vBBB:SB8NEq0qGZBMGNEqZMB .:7XBB8NZNEqENENENEN8O80ZqZN0NEqGBB 2BBB:;BO0ZNENGMBq2BGN00B7 kBM0ZqEN0N0NEN8BMBBG80EN0N008BG XBBB,BBEEqZEMBB7 BOE0OB 8BMEENENEqENGB7 :MBBBOO0ENE08BBj qBBBBEEqEEBBS NB0EOB FBBZZN0NENEEB .2MBBBBMZG08MBB qBNBZZNEEBBi 7BGNB0 ;BBGZ00NZN8B. :jMBBBBZG8B. S7BGZNE0BB. .BZZB0 OBGZN0qEEBL :UBBMOBU.BOGNZEMB, BM0Bq 2B8ZNENZMB iBBMBBBG0ZZBBj BMGB8 vBZENE0MB: BBB1OB8EOMBBi XBEBP YB0E08BB :BMBkBMGBBB7 FBMB: JBZ0OBB, BBBiSBM8BBr :BBBN YBMZBBX BMB2i:rYBBMMBJ OBBBBBB, MBMMBB, BBBEBBBBBBBBBr 5BBBZj : ,5BBBBBY 7BBBBBLYSNM8BMB5 iBBBBBBBBBB1 1BBBB27BBBBBBBO;
WikipediaDuplicate code is a computerprogramming term for a sequenceof source code that occurs morethan once, either within a programor across different programsowned or maintained by the sameentity.
CodeSmells#1
DRYDon't Repeat Yourself
WETWe Enjoy TypingWrite Everything Twice
Duplication is not only“DuplicatedCode”
Whydo we duplicate?
Why?Copy/Paste is easyctrl+c / ctrl+v
Why?In a hurry to deliverYou know, it's for yesterday!
Why?Lack of codebaseknowledge- Hm, I didn't know our codebase had this already.
Duplication'sProblems
ProblemsIncrease codebase'ssizeFive thousand lines' controllers.
ProblemsFix the same bug morethan once- Ok, now it works in that page, but not in this one.
ProblemsAdding not standardnew features- Why are the dates not formated using my preference?
Is duplication always abad thing?
Example of duplication
Hey! We need tosupport USA users!
Support user defineddate format
One possible solution
Should I activelysearch forduplications?
PHPCPD
I found someduplications!What should I do now?
Apply SomePatterns
Different methods
Extract Method
Different classes
Extract Class
Different projects
Extract Package
Same attribute indifferent classes
Pull Up Field
Thank you!благодаряMEGF5U15J7L7L7vLS25Uq0ZMBMBMBMBBBBBBBBBBBBBMBZPuLi,BBBBBBBBBBBBBBBBBBBBBBBBBBMBBBMMMMOMOM8M8MMBMBBBBBBBBBEU;.G0GEG0Z0GEZEGEZ0ZEG0G0ZNZ0Z0Z0Z0ZNE0EqENENZ0ZNZEZEOGMMBBBBBGU,qEqZNEqENENZNEqEqENZqENEqZNEq0NEqZq0NENEq0NENZNENEqZ0Z0GZOOBBBBG7.ENZNENENEN0NEN0NZNENZNZNZNZqENZqZqZNEqEN0qENENENZNEqZqEqENZ0ZZMBBBM;qENZNENEqEqEqEqZNENENZqEN0NENEqZNENENENENENEqENZNEqZqENENEq0NZNZZMBBB2ZqENEq0NZNZqEN0NENEqENEqZNEqZqZN0qZqEqENENENEq0NENZNENZqENENENEN8BBBBBB1NENENENENEN0NENEqENENEqEqENEN0q0qENENZNEN0NENENEqENZNENEqEqZN0NOMv5BBBBBBLEqENZqENENEqZNEq0qENENENZqENEN0qENZqZN0NENZNZNEq0NZqEN0NEq0qENGM8 .YBBBBON0NZqZNEqEqEqENENEqENZqENEq0qENENENEqENENZqENEqENZqZNEqENEN0N00BU 7BBBB:ENZqEqENZNENEN0NEN0qENEN0NENENENENEqZqENZN0q0NENENENZNEqEqEN0qGB7 XBBBiNZNZqEqZNENEqENEqENENEqENENEqENEqZNZqENENEqEN0NEqENENEqZNZN0N00Bi ;BBBY0NEN0N0NZNENENENEq0N0NEqENZq0NZNENENZqENENENZN0qENENEqZNZNEqENGBU .BBBjNENZqENENENENENEq0NEqENENENEqENEN0NEqEN0NENENEqEqZqEqZNZNZqEqENBq BBBY0NZNEqEN0NENEN0qENENEqEqENENENEN0qZNEq0NEN0NEq0N0qZNEqENENEN0NZOB BBBYNENENZNZN0N0NZqENZ0ZNENENENZNEN0NENEqENENZNENEqENEqEN0NEN0NEN0q8B; BBBv0q0N0NENENENENZ0OOMZ8Z80ZEZ0Z0ENENENENENEqEN0NEqENENENEqZNEqENEEBM .BBBrqENEqENEqZNENGMBBBBBBBBBBBBBBBBBO8EZ0ZqENZNENEqEqENENEq0qENENENZZBr :BBBiENENZNE0ENENGBB: ,:7YS52LSqMBBBBBBOG0EqENENENENEqE0ENEN0NENENGMB vBBB:q0qGZBMGNEqZMB .:7XBB8NZNEqENENENEN8O80ZqZN0NEqGBB 2BBB:ENGMBq2BGN00B7 kBM0ZqEN0N0NEN8BMBBG80EN0N008BG XBBBiEMBB7 BOE0OB 8BMEENENEqENGB7 :MBBBOO0ENE08BBj qBBB;BBS NB0EOB FBBZZN0NENEEB .2MBBBBMZG08MBB qBBBvBi 7BGNB0 ;BBGZ00NZN8B. :jMBBBBZG8B. SBBBq. .BZZB0 OBGZN0qEEBL :UBBMOBU ;BBBB7BM0Bq 2B8ZNENZMB iBBMB 2BBBB1iBMGB8 vBZENE0MB: BBB1 YBBBBBBq:XBEBP YB0E08BB :BMB :5BBBBBFBMB: JBZ0OBB, BBBi .ru7:BBBN YBMZBBX BMB2OBBBBBB, MBMMBB, BBBE@InFog9evaldojunior.comspeakerdeck.com/infoggithub.com/InFogi.jBBZ2i .kBB:,BBBBBBUi iFBBBBBBBZMMBBBBBZMBBBB88EBP,BGNE0GZMMBBMG8EZqZBr;B00NEqE0ZNGNEN0q0N8MZ7.BMZNEqENENEqEqZNZNEEOBBBBME0ZMMEGF5U15J7LiB80ZNEN0qEqENEN0qZNENZE8OBBBBBBBBBBBBBBBBiBZZqENENEqEqZNZN0NEqENENE0ZNZ0G0GEG0Z0GEZ;BONEq0N0NZNENENENENEqEN0qZNENEqEqZNEqENENB8GNEqENENENENENENEqZqZN0qZNENENZNENENEN0XBZEN0q0qZqZNZNENEqENEN0NENZNEqENZNENEqEqBBGZN0NENGEO8G0ZNENEqENENZNEqZqENEq0NZNZBBM8Z8OBBBBBBM0EqEqEqENZN0NENENENENENEN2BBBBBMU: ;BOEEqEq0q0qEq0NEqENZqENENErvi YBO0ENEqENEN0N0N0NZqZNEqEqBBGNENEqZqEN0NENZqEqENZNE.BB8NEq0qZNEN0NZNZqEqZNEN;BBBEGNEEGNEN0NEN0N0NZNEFBBBM88FGNENENZqENENENrMBBrUGEN0NZNEqEN0NE:EYB8NZNENENZNZN0NBOEq0q0N0NENENEqBNEqENEqENEqZNMOZNENENZNE0ENESB8NEq0qGZBMGNEq;BO0ZNENGMBq2BGN0,BBEEqZEMBB7 BOE0BBEEqEEBBS NB0ENBZZNEEBBi 7BGN7BGZNE0BB. .BZZ.BOGNZEMB, BM0BBG0ZZBBj BMGOB8EOMBBi XBEkBMGBBB7 FBMSBM8BBr :BBBi:rYBBMMBJ OBBBBBB