很有意思,如何把代碼看成一個(gè)犯罪現(xiàn)場
以近些年來涌現(xiàn)出的工具和相關(guān)文獻(xiàn)的數(shù)量來看,度量軟件的復(fù)雜度是軟件開發(fā)社區(qū)之中流行且常見的活動(dòng)。Adam Tornhill 從其工程和心理學(xué)背景出發(fā),在 QCon 倫敦上建議大家在版本控制工具的幫助下把代碼當(dāng)成一個(gè)犯罪現(xiàn)場看待。
Tornhill 認(rèn)為目前對(duì)軟件復(fù)雜度的度量是不***的。于是他轉(zhuǎn)向從心理學(xué)知識(shí)中尋找答案。地理罪犯分析(Geographical offender profiling)調(diào)查法基于了這樣一個(gè)原則:罪犯的老窩往往就在他/她作案地點(diǎn)的邊界之內(nèi)。
在諸如 CodeCity 等工具的幫助下,Tornhill 將這一原則應(yīng)用到代碼上。其背后的思想是為代碼創(chuàng)造地理呈現(xiàn)。區(qū)域和建筑物映射代碼的結(jié)構(gòu),如包或類。代碼屬性(如代碼行數(shù)或方法數(shù)量)決定區(qū)域和建筑物的尺寸。然后,Tornhill 借助于版本控制工具,將這些代碼結(jié)構(gòu)信息與代碼中他所謂的空間運(yùn)動(dòng)進(jìn)行了結(jié)合。
版本控制工具提供了大量取證細(xì)節(jié),諸如何人、何時(shí)、在版本庫的何處做了改變。將這一空間信息與代碼結(jié)構(gòu)相結(jié)合,則突出了熱點(diǎn)。Tornhill 宣稱在一個(gè)案例分析中(40 萬行代碼,89 名開發(fā)人員,18000+ 次提交)有 8 個(gè)缺陷集中區(qū)域,72% 的缺陷集中在4% 的代碼中,用熱點(diǎn)精確定位了其中的 7 個(gè)區(qū)域。
一個(gè)熱點(diǎn)被高亮的代碼城市。
使用版本控制信息可以做時(shí)空耦合分析。如果兩個(gè)代碼文件在同一時(shí)間發(fā)生改變,這意味著文件之間是物理耦合的,例如:一個(gè)類調(diào)用另一個(gè)。然而它們可能只是邏輯形式上的耦合,常見的拷貝-粘貼就會(huì)出現(xiàn)這樣的結(jié)果。如果沒有時(shí)空耦合分析的話,會(huì)很容易忽略掉這些問題。
時(shí)空耦合分析在其它方面也很有用。當(dāng)來自于不同團(tuán)隊(duì)的人在同一時(shí)間改變不同組件時(shí),它可以指出其變化模式。這個(gè)模式可以提示系統(tǒng)的體系結(jié)構(gòu)和團(tuán)隊(duì)結(jié)構(gòu)之間的不一致,而這種不一致會(huì)導(dǎo)致從提出變更請(qǐng)求到部署上線之間更長的周期時(shí)間。
版本控制信息也可以用于挖掘知識(shí)的所有者和組件的所有權(quán)。如果一個(gè)開發(fā)人員是一個(gè)給定代碼文件或組件的主要提交者,那么我們可以有把握地認(rèn)為他就是這個(gè)組件的知識(shí)所有者,哪怕他不在負(fù)責(zé)這個(gè)組件的團(tuán)隊(duì)中。這也意味著“撞車”將有跡可循并得以緩解。在更極端的案例中,知識(shí)所有者已經(jīng)不在公司里了,那么就會(huì)出現(xiàn)知識(shí)的缺口。這些技術(shù)幫助發(fā)現(xiàn)這些缺口并彌合它們。
版本控制取證顯示組件的有效所有權(quán)。
Tornhill 正就這一話題寫一本書,目前在 Beta 狀態(tài)。The Pragmatic Bookshelf 將于近期出版該書,預(yù)計(jì)出版日期是 2015 年 3 月 10 日。