2015_ICSE_When and Why Your Code Starts to Smell Bad

覺(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筑凫,一起剝皮案震驚了整個(gè)濱河市滑沧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍实,老刑警劉巖滓技,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棚潦,居然都是意外死亡令漂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)丸边,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叠必,“玉大人,你說(shuō)我怎么就攤上這事妹窖∥吵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵骄呼,是天一觀的道長(zhǎng)共苛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蜓萄,這世上最難降的妖魔是什么隅茎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮嫉沽,結(jié)果婚禮上辟犀,老公的妹妹穿的比我還像新娘。我一直安慰自己绸硕,他們只是感情好堂竟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著臣咖,像睡著了一般跃捣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夺蛇,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天疚漆,我揣著相機(jī)與錄音,去河邊找鬼刁赦。 笑死娶聘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甚脉。 我是一名探鬼主播丸升,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牺氨!你這毒婦竟也來(lái)了狡耻?” 一聲冷哼從身側(cè)響起墩剖,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夷狰,沒(méi)想到半個(gè)月后岭皂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沼头,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年爷绘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片进倍。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡土至,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猾昆,到底是詐尸還是另有隱情陶因,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布毡庆,位于F島的核電站坑赡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏么抗。R本人自食惡果不足惜毅否,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝇刀。 院中可真熱鬧螟加,春花似錦、人聲如沸吞琐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)站粟。三九已至黍图,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奴烙,已是汗流浹背助被。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留切诀,地道東北人揩环。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像幅虑,于是被迫代替她去往敵國(guó)和親丰滑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容