以近些年來湧現出的工具和相關文獻的數量來看,度量軟體的複雜度是軟體開發社群之中流行且常見的活動。adam tornhill 從其工程和心理學背景出發,在 qcon 倫敦上建議大家在版本控制工具的幫助下把代碼當成一個犯罪現場看待。
tornhill 認為目前對軟體複雜度的度量是不完美的。于是他轉向從心理學知識中尋找答案。地理罪犯分析(geographical offender profiling)調查法基于了這樣一個原則:罪犯的老窩往往就在他/她作案地點的邊界之内。
在諸如 codecity 等工具的幫助下,tornhill 将這一原則應用到代碼上。其背後的思想是為代碼創造地理呈現。區域和建築物映射代碼的結構,如包或類。代碼屬性(如代碼行數或方法數量)決定區域和建築物的尺寸。然後,tornhill 借助于版本控制工具,将這些代碼結構資訊與代碼中他所謂的空間運動進行了結合。
版本控制工具提供了大量驗證細節,諸如何人、何時、在版本庫的何處做了改變。将這一空間資訊與代碼結構相結合,則突出了熱點。tornhill 宣稱在一個案例分析中(40 萬行代碼,89 名開發人員,18000+ 次送出)有 8 個缺陷集中區域,72% 的缺陷集中在4% 的代碼中,用熱點精确定位了其中的 7 個區域。

https://yqfile.alicdn.com/f2249e6c1f036836c4224662931a622571c5d863.png" >
一個熱點被高亮的代碼城市。
使用版本控制資訊可以做時空耦合分析。如果兩個代碼檔案在同一時間發生改變,這意味着檔案之間是實體耦合的,例如:一個類調用另一個。然而它們可能隻是邏輯形式上的耦合,常見的拷貝-粘貼就會出現這樣的結果。如果沒有時空耦合分析的話,會很容易忽略掉這些問題。
時空耦合分析在其它方面也很有用。當來自于不同團隊的人在同一時間改變不同元件時,它可以指出其變化模式。這個模式可以提示系統的體系結構和團隊結構之間的不一緻,而這種不一緻會導緻從提出變更請求到部署上線之間更長的周期時間。
版本控制資訊也可以用于挖掘知識的所有者群組件的所有權。如果一個開發人員是一個給定代碼檔案或元件的主要送出者,那麼我們可以有把握地認為他就是 這個元件的知識所有者,哪怕他不在負責這個元件的團隊中。這也意味着“撞車”将有迹可循并得以緩解。在更極端的案例中,知識所有者已經不在公司裡了,那麼 就會出現知識的缺口。這些技術幫助發現這些缺口并彌合它們。
版本控制驗證顯示元件的有效所有權。