Friday, October 30, 2009

模組的關聯強度

模組的關聯強度
by thinker
2 Columns
關鍵字:
coding
不論是要 porting 或者改寫,甚至是切割一個軟體,一開始大都很快的陷入一團混沌。這時最重要的是,儘快的了解模組的個別功能。欲瞭解模組的個別功能,在反向工程中,必需透過釐清模組之間的訊息交換過程,從而瞭解模組在系統中所扮演的角色。

大部分人的做法,透過追蹤程式碼的呼叫情形,一步一步的組織出模組間的互動模式,從而猜測其功能。然而,模組間的互動往往是分散的,而非集中在一個程式碼區塊。再加上不同模組間呼叫是交錯,而非連續,使的追蹤更為困難。透過追蹤程式碼所得到的訊息是鎖碎而片段的,必需透過不斷的猜測、修正和驗證,才能讓模組的原貌慢慢現形。

模組之間的關係是錯綜複雜的,若能抓住其主要的脈絡,加以分析,卻能得到提網切領的功效,使其外貌浮現。但,脈絡的搜尋何其容易,往往是遍尋而不著。雖然如此困難,主要脈絡卻有其徵兆。越是重要的脈絡,其互動、重復的次數越是頻繁。基於這個原則,若能將分散的呼叫過程加以統計、分析,就能找出重要的脈絡。

其中,模組之間的關聯性,若能透過圖形加以表示。關聯性越強的模組之間,有更粗的連結,越強的兩個模組,位置上就更加接近。如此,我們可以很快的了解有哪些模組間的互動是重要的,而另外一些則是旁支末節。依此工具,進行有系統的分析,應該能更有效率的瞭解一系統。

Doxygen 一類的工具,其實已經幫我們建立出這些關連了。但卻沒加以統計,並以視覺的方式表現。若能在 doxygen 上加工,或利用其產出之資料,加以統計和分析。應該能快速的得到這些資訊,組出我們所需的工具。目前我還沒不知道有現成的工具可以做到這些分析,若有人知,還請捎一封信過來,或留個言。再不然,來日有空時,或許我會站在其它工具的肩膀上,做出這類的工具。

最後更新時間: 2007-04-24 01:29:44 CST | 引用
查詢:
COMMENTS:
on 2007-04-24 03:36:12 CST
Kuon said ..
Doxygen 這類可以建立 xref 的程式, 也算是一種 Source Code Analysis, 但是我印象中似乎並沒有Loop Emulation的實作, 也就是表達不出特定實作中的函數呼叫次數, 這可能還是得靠Run-time Profiling來補足.
on 2007-04-24 16:25:08 CST
Thinker said ..
我個人比較偏向靜態分析,透過靜態的資訊較不複雜。靜態資訊包括連結的數目,相對於動態的呼叫次數,或許更能表現模組之間的關連性。必竟從 programmer 的角度來看,靜態的關聯度才是造成系統複邏輯雜度的主要因素。

No comments: