除錯,是程式開發的必經過程。有時甚至占據的時間比撰寫程式還要長。而 對於一個初學程式者而言,最常見的除錯方法就是仰賴在程式碼當中插入 printf() 這一類的輸出指令來將變數的值列印在螢幕上或者是檔案中,藉以觀察程式是否 符合期望的結果。隨著軟體需求的多樣化和複雜性的提升,程式設計師需要花費 比以往更多的心力在維護或開發新功能上。若僅使用簡易的輸出指令來除錯,對 大部分的程式設計師來說,得耗費更多時間在除錯上,因此進階的程式開發人員 通常會搭配輸出指令和使用除錯器來除錯軟體。除錯器是個複雜的系統程式,一 般只具備文字介面。隨著時代的發展,現在的 IDE 都提供一個內建的除錯器來 提高可用性。除錯器主要的功能是經由使用者設定中斷點來暫停程式的執行,然 後借此觀察程式狀態和變數的資訊。
舊有靠著插入輸出指令(如 printf())來幫助除錯的習慣是依然存在的。程式設 計人員通常這麼做的原因是為了將複雜的資料結構整理後列印在檔案或者螢幕 上,來幫助除錯,有經驗的程式設計師會搭配輸出指令和除錯器一起解決問題。
但無論是在文字模式下的除錯,或者是整合開發環境下除錯,資訊仍舊是文字模 式,當資料量龐大且複雜時,對於除錯的效率提升將有限。
11 名的就是 UML(Unified Modeling Language)[4]。UML 使用多種靜態的平面圖,
每一種只表達軟體中一個片面的特性。如類別圖來表示類別的關連性,循序圖來 獲得的統計資訊(通常是 software metrics)[7]以樹狀圖,長條圖等非文字模式 的圖表將結果呈現在螢幕上。使用者可以透過選擇自己偏好的圖形表達方式來增 進對該軟體的了解。但是這類的軟體僅能提供程式設計人員軟體品質的好壞的資 訊卻無法視覺化軟體執行當中的動態行為。
儘管有許多研究致力於軟體的視覺化,但它們只能針對特定的資料和架構做 一些統計性的運作,或者只能呈現一部分的視覺化,這類的軟體工具只有在少數
12
特殊的案例下才能呈現最佳的效果,一般都用在程式理解和教學用途,但在一般 程式專案的開發上則很難發揮功效。因此,我們提供出一個除錯視覺化雛形工具
xDIVA 的研究。目的著眼於視覺化軟體執行期間動態資料,以及處理無窮廣泛 的資料種類和 VM (Visualization Metaphor)的映對。xDIVA 導入物件導向的觀念,
使得 VM 可以相互溝通,組合,並且能和資料分離以達到最低耦合。而且一個 Mapping Engine 的概念,讓視覺化工具和 VM 的設計與實做是可以切開的構想。
意即,我們提供一個視覺化工具,而 VM 的開發可以交給第三方擔任。
我們的目標是把抽象且複雜的軟體結構及演算法概念利用圖形和動畫呈現 出來,來幫助程式設計師更快了解軟體的動態行為。而視覺物體的陳列方式(在 xDIVA 系統中,稱之為 Layout)深深地影響了一個畫面可傳達的資訊多寡、可被 理解的程度、以及美觀上的吸引力[2]。而作為一個除錯器的視覺化工具,xDIVA
13
14
與調整。
另外,xDIVA 的 Layout 系統不僅希望達成前述的彈性的 Layout 需求,也希 望我們的功能系統建立在彈性的程式架構上,以便未來參與 xDIVA 的開發者能 夠輕鬆的應付多變的使用者需求以及發展自己的陳列方法。我們的程式架構將讓 往後陳列方法的設計者只需要專注於思考物件之間的「如何變化」的行為,而不 用再去考量如何得到正確的連結物件以及變化的範圍。不僅提升了往後在系統中 增加一個陳列方法的效率,同時也整理並規範了陳列系統取得物件資訊的途徑,
降低各子系統程式碼間的相依性。
不同於以往的視覺化工具,xDIVA 的陳列系統面對的資料結構千千萬萬。
我們不限定每一個陳列方式所面對的資料結構對象,使用者可隨喜好決定,而不 必含有特定的資料結構,或者執行任何的資料對應工作。
本論文將詳細地敘述其中一項 Graph Layout 演算法的實做:一個強調參考 關係(Reference)又有生動趣味的物理方式演算法──彈簧演算法。這個演算法應 用了古典物理學的虎克定理以及牛頓三大運動定律,讓 VM 物件在 xDIVA 中的 互動能夠模擬自然界中彈簧的行為。並藉此演算法說明整個 Layout 的彈性架構。