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