源代碼閱讀工具(understand)

源代碼閱讀工具(Scientific Toolworks Understand)的特色

1、支持多語言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合語言的project也支持
2、多平臺: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X
3、代碼語法高亮、代碼折迭、交叉跳轉、書籤等基本閱讀功能。
4、可以對整個project的architecture、metrics進行分析並輸出報表。
5、可以對代碼生成多種圖(butterfly graph、call graph、called by graph、control flow graph、UML class graph等),在圖上點擊節點可以跳轉到對應的源代碼位置。
6、提供Perl API便於擴展。作圖全部是用Perl插件實現的,直接讀取分析好的數據庫作圖。
7、內置的目錄和文件比較器。
8、支持project的snapshot,並能和自家的TrackBack集成便於監視project的變化。

軟件說明

       功能比sourceinsight多些(比如enum的值的顯示),而且#ifdef包含的比較多嵌套,sourceinsight如果太多嵌套,有bug. 流程圖之類也比sourceinsight完整.sourceinsight的顯示明顯好多了,而且體積比較小,編輯速度快,可能是用熟的關係,還是sourceinsight比較順手.
可惜sourceinsight太長時間沒有更新了. 現在我一般用sourceinsight,需要看某些SI沒有的用understand.另外好像兩個軟件都不太支持#if (defined(MACRO) || defined(MACRO1))這樣的解析.

導入項目

       導入項目有兩種方法,一種是從菜單欄點擊File–>New–>Project,另一種是點擊下面界面中間的New Project
點擊後,會進入到如下界面,你可以更改項目名稱爲你要導入的項目名稱,以便於以後查找,你可以直接導入你正在開發的項目,你的代碼更改後,這個項目也會自動更新,方便你快速開發,不需要每次導入。

更改名稱後點擊Next進入如下界面,這個界面是讓你選擇你要導入項目包含了哪幾種語言,注意,在C/C++後面有兩種模式,下面有註釋,其中Strict模式包含Object-C和Object—C++,還有Web的註釋,自己看看就好了,在此就不再解釋,

然後點擊Next進入下面界面:

在此界面點擊上面的「Add a Directory」,也就是添加你要導入項目的路徑,點擊後會彈出如下界面,此時有個奇葩就是彈出的界面會被上圖界面遮擋,此時你要移開該界面,然後會出現下面界面:

點擊後面的帶有三個點的按鈕選擇你要加入的項目文件夾,此處不用打開文件夾,只要點中文件夾點擊open按鈕:

此時只需要點擊OK即可,界面會跳轉到如下界面:

此時有兩個選項,一個是立即分析代碼,一個選擇配置,對於我們來說只需要默認即可,然後點擊OK按鈕,此時軟件開始分析代碼,分析完成後會出現如下界面:

左側會出你的項目結構,中間出現你項目的名稱,此時你可以操作左面項目來查看相關代碼,如下圖所示:

這麼多類和方法如何快速定位,那肯定是搜索,該軟件針對不同位置,不同屬性有不同的搜索方法,下面介紹搜索功能。

搜索功能

1.左側項目結構中搜索:在這個搜索中你可以快速搜索你要查看的類,快捷鍵,鼠標點擊左側上面項目結構窗口,然後按command + F鍵會出現如下圖所示的搜索框,在框中輸入你想要的類回車即可

2.類中方法搜索:將鼠標定位到右側代碼中,點擊command + F,會彈出搜索框,輸入方法回車即可:

3.在文件中搜索:也就是全局搜索,快捷鍵F5或者去上面菜單欄中的search欄中查找,輸入你想要的類或者方法,回車查找,下面會列出所有使用的地方:

4.實體類查找:軟件菜單欄search中最後一項–Find Entity,點擊輸入你要查找的實體類,回車查找:

快速搜索是軟件快速使用必備的技能,包括我們常用的idea一樣,快速定位類,方法,常量等,可以快速幫助我們解決問題。

上面我介紹改軟件時提到可以繪製流程圖等功能,下面就針對這個功能介紹一些一些圖形的繪製功能,幫助你快速分析代碼。

項目視圖

項目視圖包含很多的功能,能夠自動生成各種流程圖結構圖,幫助你快速理清代碼邏輯、結構等,以便快速理解項目流程,快速開發,視圖查看方式有兩種,一種是鼠標點擊你要查看的類或者方法等上面,然後右鍵彈出菜單,鼠標移動到Graphical Views,然後彈出二級菜單,如下圖所示:

另一種方式是點擊要查看的類或者方法,然後找到代碼上面菜單欄中的如下圖標:

然後點擊圖標右下角的下拉箭頭,彈出如下菜單,即可選擇查看相關視圖:

層級關係視圖分類:

1.Butterfly:如果兩個實體間存在關係,就顯示這兩個實體間的調用和被調用關係;如下圖爲Activity中的一個方法的關係圖:
2.Calls:展示從你選擇的這個方法開始的整個調用鏈條;
3.Called By:展示了這個實體被哪些代碼調用,這個結構圖是從底部向上看或者從右到左看;
4.Calls Relationship/Calledby Relationship:展示了兩個實體之間的調用和被調用關係,操作方法:首先右鍵你要選擇的第一個實體,然後點擊另一個你要選擇的實體,如果選擇錯誤,可以再次點擊其他正確即可,然後點擊ok;
5.Contains:展示一個實體中的層級圖,也可以是一個文件,一條連接線讀作」x includes y「;
6.Extended By:展示這個類被哪些類所繼承,
7.Extends:展示這個類繼承自那個類:

結構關係視圖分類:

1.Graph Architecture:展示一個框架節點的結構關係;
2.Declaration:展示一個實體的結構關係,例如:展示參數,則返回類型和被調用函數,對於類,則展示私有成員變量(誰繼承這個類,誰基於這個類)
3.Parent Declaration:展示這個實體在哪裏被聲明瞭的結構關係;
4.Declaration File:展示所選的文件中所有被定義的實體(例如函數,類型,變量,常量等);
5.Declaration Type:展示組成類型;
6.Class Declaration:展示定義類和父類的成員變量;
7.Data Members:展示類或者方法的組成,或者包含的類型;
8.Control Flow:展示一個實體的控制流程圖或者類似實體類型;
9.Cluster Control Flow:展示一個實體的流程圖或者類似實體類型,這個比上一個更具有交互性;
10.UML Class Diagram:展示這個項目中或者一個文件中定義的類以及與這個類關聯的類
11.UML Sequence Diagram:展示兩個實體之間的時序關係圖;
12.Package:展示給定包名中聲明的所有實體
13.Task:展示一個任務中的參數,調用,實體
14.Rename Declaration:展示實體中被重命名的所有實體

由於視圖比較多,所以就一一貼上代碼,主要還是需要自己去調試,查看各個功能視圖的展示結構以及作用,孰能生巧,多操作幾下就會了,所以不再做過多的解釋。最終希望這款軟件能夠幫助你快速開發,快速閱讀別人的或者自己的代碼。

一、術語 Terminology

Architecture 層級:
An architecture is a hierarchical aggregation of source code units (entities). An architecture can be user created or automatically generated. Architectures need not be complete (that is, an architecture’s flattened expansion need not reference every source entity in the database), nor unique (that is, an architecture’s flattened expansion need not maintain the set property).
層級表示代碼單元(或者實體)組成的層次結構,可以由用戶手動創建,也可由本
軟件自動生成。一個層級可以不完整(例如一個層級的扁平化擴展有可能不會關聯數據庫中的所
有代碼實體),也可能不唯一(扁平化擴展的層級可能不會處理其預設屬性)。

Database 數據庫
The database is where the results of the source code analysis, as well as project settings, are stored. By default, this is a project’s 「.udb」 file.
代碼經分析後產生的中間結果,以及工程設置保存在數據庫,其缺省擴展名爲「.udb」。

Entity 實體
An Understand 「entity」 is anything it has information about. In practice this means anything declared or used in your source code and the files that contain the project. Subroutines, variables, and source files are all examples of entities.
Understand 描述的「實體」表示任何包含信息的事物,具體來說,代碼中聲明或
者使用的標識、包含工程的文件、子程序、變量、源文件都可以被稱爲實體。

Project 工程
The set of source code you have analyzed and the settings and parameters chosen. A 「project file」 contains the list of source files and the project settings.
表示源代碼的集合以及相關的配置和參數,工程文件包含源文件清單和工程設置。

Relationship 關聯
A particular way that entities relate to one another. The names of relationships come from the syntax and semantics of a programming language. For instance, subroutine entities can have 「Call」 relationships and 「CalledBy」 relationships.
互作用的實體之間的關係,關聯的名稱來源於編程語言的語法和語義,例如過程式實體具有「調用」和「被調用」的關聯對象。

Script 腳本
Generally a Perl script. These can be run from within Understand’s GUI, or externally via the 「uperl」 command. The Understand Perl API provides easy and direct access to all information stored in an Understand database.
通常指perl腳本,腳本可以通過Understand 2.5的圖形用戶界面或者外部的腳本命令執行。Understand Perl API提供了快捷的訪問Understand數據庫所有信息的接口。

parts 部件
下面的圖形展示了一些Understand 圖形用戶界面(GUI) 中常用的部件:
在這裏插入圖片描述

常用詞彙

  1. 單詞    釋義
  2. Macros    宏
  3. Variables    變量
  4. Constants    常量
  5. Functions    函數
  6. Reference    引用
  7. Metrics    參數
  8. Architectures    架構
  9. parameters    參數
  10. Call    調用
  11. Compiler    編譯器
  12. component    組件、部件、元件
  13. portability    可移植性
  14. Cluster    集羣
  15. Function Static Variables    靜態函數變量
  16. case sensitive    區分大小寫
  17. Whole Words Only    整詞匹配
  18. layout    佈局
  19. summary    綜述、總論
  20. features    特徵
  21. control-flow graphs    控制流程圖

右鍵菜單

代碼編輯窗口的右鍵菜單提供了很多瀏覽編輯操作的快捷方式,也提供了相關實體的特定信息。

以下介紹了右鍵菜單包含的典型的瀏覽操作(與點擊對象有關):

View Information 信息查看(參見信息瀏覽器)

Graphic Views 圖形視圖(參見)

Edit Source/Definition 代碼編輯(參見)

User Tools 用戶工具(參見)

Explore 瀏覽(參見層級查看)

Find In… 查找(參見多文件查找)

Add Favorite 添加到收藏夾(參見收藏夾)

Metrics Chart 度量圖表(參見)

以下介紹了右鍵菜單包含的典型的編輯操作(與點擊對象有關):

Undo/Redo 撤銷/重做

Cut/Copy/Past 剪切/複製/粘貼(參見文本選擇和拷貝)

Select All 全選(參見文本選擇和拷貝)

Jump to Marching Brace 跳到塊末

Select Block 塊選擇

Hide/Show Inactive Lines 行顯示/隱藏

Fold All 摺疊所有分支

Soft Wrap 軟包裝

Comment Selection/Uncomment Selection 註釋選擇/代碼選擇

Change Case 大小寫切換

Revert 反轉

Add Bookmark 添加書籤活動

層級結構瀏覽器

層級結構節點(如文件系統目錄節點和本季度修改節點)的右鍵菜單包含了以下一些其他對象的右鍵菜單沒有提供的額外選項:

Graphical Views>Dependency Graphs: 顯示層級結構各節點的依賴關係,參見。

Metrics Summary:提供選中節點各實體的度量數據,這些度量數據基於當前節點下的實體,不包括子節點中的實體,參見。

Metrics Export:將度量總結導出到一個CSV 文件,參見。

XML Export:將層級結構中選中節點及子節點包含的實體以XML 格式導出,參見。

Edit Architecutre:爲用戶自己創建的層級結構打開一個層級結構構建器,Understand
自動構建的層級結構不能被修改,參見。

Rename
Architecture:爲用戶自己創建的層級結構或者節點打開一個層級結構重命名窗口供用戶對其中名稱進行修改,Understand 2.5
自動構建的層級結構不能被重命名,參見。

Duplicate Architecture:打開層級結構複製窗口對選中層級結構的副本進行命名,參見。

Manage Architecture:打開層級結構管理窗口,參見。

轉自:[1] http://www.cnblogs.com/hackerl/p/5749169.html

[2] http://blog.csdn.net/a731062834/article/details/50988966