Bunch Tool and REportal

Bunch Tool [1] 是由 Software Engineering Research Group (SERG) 所建立的 reverse engineering tool, 可在此下載. 基本的原理是利用 graph-based source transformation, 以 module dependency graph (MDG) 為基礎, 以特定的 clustering algorithm 作不同 level 的 graph clustering. 並且基於 coupling / cohesion 計算各個 cluster 的 MQ value, 從中選出最佳的 clustering 結果作為對於 software architecture 的 best guess. 以下圖來說明的話, 左側的 MDG graph 有 4 個 nodes C1, C2, C3, 以及 C4. 其之間的 dependency 如圖所示, 同時 depedency 上有加註 weight, 經過計算可以得到各種組合的 MQ 值, 選出 MQ 值最高的. 詳細原理可以參考 [1]. 需注意其得到的結果為 partial view, 而非 complete view on architecture.


在使用上, Bunch Tool 提供 Swing-based GUI 介面, 還算容易使用, 但是對於原理或是 algorithm 不了解可能部太知道怎樣去對結果作 tuning, 但基本上不影響使用. 缺點是沒有 (或許是因為不能) 整合前端的 source code analysis components, 所以必須要自己找來用. SERG 另外有一個基於 Bunch Tool 提供 reverse engineering service 的 web-based tool, 叫做 REportal [2], 據網頁上所說, 目前僅支援 Java-based source code analysis, 但是我偷偷試過其實 C++ 也是可以. REportal 上就內建有 decompiler, code analyzer, bunch tool, graphiz dot viewer 等等, 話句話說它是一個完整的 Bunch Tool 使用環境, 如果懶得自己找相關 tools, 直接利用 Reportal 也是可以, 而且分析解果也可以打包下載.

Bunch Tool 相關的前端 code analysis 以及 module dependency graph generation 工具, 目前我試用過的有以下兩個

  1. depgraph : 給 python 用的
  2. cinclude2dot : 給 C / C++ 用的, 這個很容易操作, 可以產出 .dot 檔案. 因為產出的 .dot 檔案格式很接近 .mdg 格式, 因此寫小程式轉換也好, 手動轉換也好 (我是直接手動簡單的 editing / replace 就處理了), 很容易轉成 mdg 檔, 再用抓下來的 Bunch Tool 分析就 ok. 我用這個加上 Bunch Tool 成功地對 FileZilla 作了分析.

Java 的部份我就直接用 REportal 處理了. 其實 MDG 格式相當簡單, 如果有其他的格式, 只要能夠轉成 graph, 自己動手寫個小程式其實也不難, 因此其實很多 code analysis tool 都可以接到 Bunch Tool 使用, 重點在於使用 Bunch Tool 分析是否有意義.

後端的 visualization 由於是 dot 格式的 partitioned MDG graph, 因此只要能夠讀 dot 格式的 viewer 應該都 ok, 像是 Graphiz 內建的 dotviewer 就能用了. 但是觀看大型程式時的效果並不是很好. 不過我也找不到其他好用的 dot visualization tools, 真是有點奇怪. 下面是對於 jChecs 的分析結果之部分, 原始圖太大了, software 真的是很複雜的東西.


Bunch Tool 的另外一個缺點是, 沒有提供 source, 所以雖然理論上可以很容易地擴充其 clustering algorithm, 但是必須要 decompile 其 bytecode 才行, 同時又有 license 的考量, 所以想拿來自行修改並不是很容易的事情. 前不久因為出於 research 上的需求, 我偷偷做了一點 hacking, 也發現 Bunch Tool 內的 algorithm strategy architecture design 有點亂, 對照他們之前的 conference paper 到 journal paper 的內容, 應該是中間經過不同 maintainers 修改的緣故, 總之不是很容易 trace 就是了.

Bunch Tool 同時可以讓你自行指定那些 nodes 必定要在同一個 cluster 內, 這在他的 document 內有說, 但是他沒說該 configuration file 的 format 該是如何, 我從 source code 反向去推, 試出了一種寫法, 不過不確定是不是唯一寫法, 反正可以 work 就是了 :p , 寫法如下 :

1.(Cluster1)=C1,C4
2.(Cluster2)=C2,C3

前面的 1. 2. 是必須的, 表示是兩個分開的 equation indications. C1, C2, C3, 以及 C4 都是 node id.

目前對此 tool 的瞭解大概是這樣, 因為有個題目會利用此 tool, 估計會繼續深入研究, 甚至重新實做一個.


References
  1. B. S. Mitchell and S. Mancoridis,"On The Automatic Modularization of Software Systems Using The Bunch Tool", IEEE Transactions on Software Engineering, Vol. 32, No. 3, March 2005

  2. S. Mancoridis, T. S. Souder, Y-F. Chen, E. R. Gansner, J. L. Korn, "REportal: A Web-based Portal Site for Reverse Engineering," IEEE Proceedings of the 2001 Working Conference in Reverse Engineering (WCRE'01), pp. 221-230, October, 2001

0 意見:

Designed by Posicionamiento Web | Modified by seLain | Bloggerized by GosuBlogger | Blue Business Blogger