CPD, Copy Paste Detector
Predošlý článok obsahoval krátke zhrnutie nástroja na detekciu špiny v kóde. Project Mess Detector (PMD) detekuje rôzne druhy špiny, od malej, cez stredne veľkú až po hrubú špinu. Jeho kolega Copy Paste Detector (CPD) je tiež kus dobrého nástroja. CPD detekuje duplicitný kód [1].
Čo je to duplicitný kód?
Úsek kódu, ktorého výskyt v množine zdrojového kódu je väčší ako jedna nazývame duplicitný kód. Názory sa rôznia [2] avšak vo všeobecnosti sa duplicitný kód považuje za nežiadúci [3].
copy paste code means copy paste bugs
neznámy autor
Ako vzniká duplicitný kód?
- Copy and paste programming - spôsob programovania, ktorý za sebou zanecháva často sa opakujúci kus kódu vytvorený technikou Copy/Paste.
- Vývojár nezávisle a nič netušiac napíše kód podobný tomu, ktorý už niekde v zdrojovom kóde existuje.
- Plagiátorstvo, kedy sa kód kopíruje bez autorovho súhlasu [4].
Aké sú dôsledky?
Zrozumiteľnosť kódu: kopírovanie zvyčajne vytvára dlhé, opakujúce sa úseky kódu, ktoré sa líšia pár riadkami alebo len pár znakmi. Pochopiť takýto kód je časovo a kapacitne náročnejšie.
Maskovanie skutočného účelu: opakovanie prevažne identických častí kódu skrýva rozdiely medzi nimi a teda ich skutočný účel. Často sa rozdiel nachádza napr. len v hodnote parametra.
Údržba kódu: každý duplikát musí byť aktualizovaný zvlášť, čo má za následok zvýšenie výdavkov za udržiavanie softvéru. Pri najlepšom, čas údržby kódu a testovania je vynásobený počtom duplikátov. V najhoršom prípade prehliadneme niektoré duplikáty a chyby ktoré by mali byť opravené hnijú na svojich miestach mesiace až roky [4].
duplicitný kód = cesta do pekiel
Juraj Michálek
FlexCPD
Copy/Paste detektor a FlexPMD slovník tvoria spolu nástroj FlexCPD určený na detekciu duplicitného as/mxml kódu. FlexCPD sa podobne ako FlexPMD spúšťa cez príkazový riadok, ako Ant target, Maven alebo priamo z IDE (Eclipse) [5]. FlexPMD a FlexCPD tvoria skvelú dvojku pri pátraní po menej kvalitnom či duplicitnom kóde.
Spustenie FlexCPD z IDE.
Výstupom FlexCPD je XML súbor interpretovaný či už cez IDE alebo pomocou nástroja kontinuálnej integrácie.
Výsledky vyhľadávania duplicitného kódu.
Historický report duplicitného kódu pomocou kontinuálnej integrácie (hudson)
Citácie:
- [1] http://pmd.sourceforge.net/cpd.html
- [2] http://www.codinghorror.com/blog/2009/04/a-modest-proposal-for-the-copy-and-paste-school-of-code-reuse.html
- [3] http://en.wikipedia.org/wiki/Code_smell
- [4] http://en.wikipedia.org/wiki/Duplicate_code
- [5] http://opensource.adobe.com/wiki/display/flexpmd/FlexCPD
Literatúra:
- http://en.wikipedia.org/wiki/Copy_and_paste_programming
- http://www.secretgeek.net/open_code_sharing.asp
- http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html
Pre fajnšmekrov:
- The Karp-Rabin string matching algorithm, http://www.itl.nist.gov/div897/sqg/dads/HTML/karpRabin.html.
Blog comments powered by Disqus