覺(jué)得這個(gè)文章還不錯(cuò)绍坝,無(wú)論從試驗(yàn)的規(guī)模碰辅,從github上搞來(lái)了從屬于3個(gè)ecosystem(Android采郎,Apache千所,Eclipse)的200個(gè)projects。從commit history中抽出了50多萬(wàn)的commit蒜埋,用DECOR分析了那些bad smell commit淫痰。這里的bad smell文章就從已有定義的多種bad smells中選擇了5種,分別是實(shí)現(xiàn)各種功能class整份,沒(méi)有參數(shù)的很長(zhǎng)的函數(shù)待错,很多屬性被公開(kāi)訪問(wèn)的類,屬性很多但函數(shù)很少的類烈评,高復(fù)雜度的火俄。對(duì)這些bad smells,就去分析when and why these bad smells are introduced础倍。
對(duì)于when烛占,作者首先用DECOR加一些啟發(fā)式規(guī)則,找出導(dǎo)致smelly bad的commit沟启,這里有注意的是因?yàn)橐粋€(gè)code變得smell bad可能是由多個(gè)commit逐漸導(dǎo)致的,比如一些很復(fù)雜的類犹菇。好像因?yàn)檫@些德迹,所以才加了一些啟發(fā)式規(guī)則,不能直接使用DECOR的結(jié)果揭芍,不過(guò)工具本身的使用胳搞,就要考慮到工具的precision和recall如何,這里,作者在threats to validity里提到了這點(diǎn)肌毅,說(shuō)到了其P和R筷转,以及講到了人為去check,所以數(shù)據(jù)估計(jì)還是蠻可靠的悬而。通過(guò)分析呜舒,發(fā)現(xiàn)對(duì)于when bad smells are introduced這個(gè)問(wèn)題,作者得出的結(jié)論是笨奠,很多bad smells在files一被創(chuàng)建出來(lái)的時(shí)候就被introduced了袭蝗,當(dāng)然對(duì)于一些比較復(fù)雜的類等,是會(huì)經(jīng)過(guò)好幾次commit才會(huì)形成bad smell般婆。
對(duì)于Why到腥,這里的也就是考慮bad smells被introduced的原因了,我感覺(jué)一說(shuō)到原因這一塊蔚袍,差不多就2類乡范,一類大家都不知道原因,自己通過(guò)人為去看數(shù)據(jù)啤咽,然后分析總結(jié)出一些原因篓足。另一類,就是前人通過(guò)一些努力已經(jīng)發(fā)現(xiàn)了一些可能導(dǎo)致某一現(xiàn)象的原因闰蚕,然后栈拖,我們呢,就是利用前人已有的研究没陡,用我們自己大量的數(shù)據(jù)去驗(yàn)證下涩哟,看是不是的確如此。本文就屬于后者盼玄,作者借用前人說(shuō)的一些原因贴彼,將其分為3類tag給commit貼上,一類是commit-goal(bug fixing埃儿,enhancement器仗,new features,refactor)童番,一類是project status(一個(gè)是release壓力精钮,用commit引入的時(shí)間是release前1天,前1周剃斧,前1個(gè)月還是more轨香,另一個(gè)是project start up的時(shí)間,用commit在project正式開(kāi)啟后多久引入的幼东,是1周臂容,1個(gè)月科雳,1年還是更久),最后一類是developer本身的狀態(tài)(是否是new developer脓杉,其對(duì)code的ownership如何糟秘,工作負(fù)載workload如何)。將所有的bad smell commit貼上標(biāo)簽后球散,通過(guò)統(tǒng)計(jì)數(shù)目尿赚,給出結(jié)論。結(jié)果發(fā)現(xiàn):
1)很多bad smells是在做enhancement和newfeatures引入的沛婴,refactors本身居然也有很多吼畏,這有點(diǎn)讓人意外,一般以為refactor都算improve code quality的嘁灯。所以作者覺(jué)得可能需要更好地工具來(lái)支持refactor泻蚊。當(dāng)然,最大的大頭還是enhancement(第1位)和new features(第2位)丑婿。
2)很多bad smells在project release前1個(gè)月引入的可能性最大性雄,且在項(xiàng)目開(kāi)始1年后引入比較多。
3)new developers并不會(huì)引入大量的bad smells code羹奉,反而是那些比較experienced和對(duì)code ownership比較高的developer引入的bad smells code多秒旋,當(dāng)然,作者并沒(méi)有說(shuō)experienced developer更會(huì)引入bad smell code诀拭,因?yàn)閆eller原來(lái)在why system fails的書(shū)里就說(shuō)過(guò)迁筛,所謂能者多勞,越牛逼的人承擔(dān)的任務(wù)更重也更艱巨耕挨,所以犯錯(cuò)的可能性也許就越大细卧,但畢竟作者沒(méi)有去深挖,為什么筒占,所以贪庙,估計(jì)也就不好意思對(duì)experienced developers做一定的結(jié)論,只能通過(guò)數(shù)據(jù)說(shuō)一句很多bad smells code并不是由新手引入滴翰苫。
4)還有一個(gè)結(jié)論是止邮,作者發(fā)現(xiàn)對(duì)于clean和bad smell code,其在一些metrics上還是會(huì)有顯著的不同的奏窑。具體的作者搞了個(gè)Mann-Whitney Test导披。不夠這個(gè)具體怎么搞得就不懂了。
以上良哲!
覺(jué)得還不錯(cuò)盛卡,文章。
2015-07-17
zou@Home