posts - 11, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          C++ Test 之 RuleWizard 使用心得

          Posted on 2005-11-22 17:43 -=Kinohl=- 閱讀(4039) 評論(9)  編輯  收藏 所屬分類: 軟件評測

          C++  Test  之 RuleWizard 使用心得
          ***************************************
          關鍵字:C++Test    Rulewizard    Python
          難易度:中

          軟件版本:Parasoft  C++ Test  6.5
          時間:2005-11-23
          Author:Kino
          ********************************

          一.介紹一下C++Test吧(這一部分請允許我ctrl + c/v )

          是單元測試和靜態分析工具,自動測試CC++類別、功能或組件,而無需編寫單個測試實例、測試驅動程序或樁調用。只需點擊按鈕,C++Test即會采用業內編碼標準執行代碼的靜態分析,測試代碼構造(白盒測試),測試代碼功能性(黑盒測試),并保持代碼完整性(回歸測試)。可以巡行在Windows 2000/XP Linux Solaris 7, 8, 9平臺之上。她的主要功能可以參見下邊的鏈接網頁:

          http://www.superinst.com/cn/products/software_engineering/unit_testing/parasoft/ctest.html

          這里我想說明的不是C++Test有多么好用,而是要說明她內置的RuleWizard?定制編碼機能。那么什么才是RuleWizard呢?他到底能干什么?

          二.RuleWizard

          C++Test內置了300多個靜態測試項,一般的情況下其實也就夠用了。但是如果有特殊的測試要求,動輒幾十K的代碼,用眼睛看,腦子想,太辛苦,也不“安全”。那么使用rulewizard定制自己的規則還是很有用的。

          我們首先要明確,rulewizard定制的是 不成功 的情況。也就是應該被排除的。

          Rule的創建有2種方式,一種是手工寫規則,另一種是寫入需要剔除的代碼,讓rulewizard去幫你生成規則(最好別用,弱弱的autocreate)。我這里主要重點放在自己寫規則方面。

          Rulewizard的界面如下圖:


          o_Rulewizard001.JPG*******

          圖1。RuleWizard界面

           

           

          右邊的就是我們寫的規則。

          那么我們先來大概的介紹一下rulewizard定義的基本組成部分吧。(實在不太會翻譯,那么就沿用英文名字了,請大家多多包涵)

          Node:規則的基本組成部分,通過Node你可以很清楚的知道它的功能。比如表達式a=b、變量的類型測試。。。分為:

          parentNode:規則中的主分支Node或者次分支的主Node。內容可以是表達式、變量、函數等

          childNode:規則的組成單元。

          Commands用來在NodeNodes之間建立關聯關系。形象一點就是點中一個Node然后右鍵顯示出的快捷菜單的上半部分。如下圖:

           o_Rulewizard002.JPG

           圖2

          介紹一下主要的Command

          Collector:集合。這個概念更像數學中的集合而不是Java中的廣義集合。滿足一定條件的數據或者方法或者變量的全體。比如,所有被聲明過的變量,如下圖

          o_Rulewizard003.JPG
          圖3

          isDecl是用來返回前邊的node是不是一個聲明。那么bodymembervariable返回了所有的包涵指定類型變量得語句(包括 變量付值、聲明、判斷等)那么這個圖被理解為,所有不是聲明得語句內使用的變量的集合。

          沒有被聲明的變量,如下圖

          o_Rulewizard004.JPG
          圖4

          這里的意思是所有作為聲明語句的變量的集合。

           

          那么通常情況下,A集合和B集合應該是相等的,也就是說所有被聲明過的變量(B集合內容)應該都被使用/付值/判斷(A集合的內容)。那么對于存在聲明了但沒有被使用的變量的特殊情況應該怎么樣表示呢?

          Node Set:NodeNode集合的處理。分為Union(合并)、Intersection(交叉)、Difference(差值,左差/右差)、Xor(異或)。如下圖

          o_Rulewizard006.JPG
          圖5

          如果 滿足這個規則,那么輸出相應得警告信息。

           

          Output如果滿足check的條件,向用戶返回一個消息(箭頭表示)

           

          三.Python

                 這里python是用來給rulewizard作補充的一個腳本語言。通過python可以定制一些特殊的,rulewizardnode不能完成的規則。Python可以使用2種方式被加入到規則中:

          作為一個輸出:如果規則沒有被遵守那么可以調用一個違反規則的方法。(類似于輸出錯誤消息,只不過這里用來啟動一個方法而已)

          作為一個單獨的方法組件:其實就是一個方法而已。比如,以上圖為例子,如果我們不判斷B A的大小關系,就是想打印一下AB的內容,那么就得到如下的圖:

           

           r_Rulewizard005.JPG

          圖6

           

          其中Method的內容是:

          def showCollectorContext(node,context):

                 a = context.getList("A")

                 b = context.getList("B")

                 context.report("D's Context is " + str(a) + "C's Context is " + str(b))

          那么在c++test進行測試的時候就會得到輸出我們需要的內容。

          關于python的語法我這里就不寫了,畢竟和這篇文章的內容美關系。如果想要了解,可以去下載相關資料,我這里建議使用 Orielly Python in a Nutshell

          四.不足點

          作為一個能自定義規則的靜態測試工具,不得不佩服parasoft兄弟們的才智。但是我覺得還有一些改善點的:(當然也不排除,已經有,但我沒有發現的情況,如果各位知道請指教,謝謝先)

          1.              通過pyhon我們可以干涉規則的制定,比如,對于上例變量的確定,如果們不使用collect  setDifference|left menus(就是圖4中最下的那個6邊形),而用python一樣的可以對比2List。但是就像他提供的功能是靜態測試一樣,這里我們得到的永遠是經過處理的集合。而不能把python插入檢測的循環中,不能一次得到一個變量,做點操作然后等下次的變量。

          2.              集合的概念在這里有 他的優點,也有缺點,如果我們想要明確的得到代碼里相同變量的出現次數,那么通過現有的rulewizard是得不到的,因為我們得到的集合總是經過“合并”的、沒有重復的數據結構。

          3.              就我看到的資料,所有的內置的node都沒有為用戶提供接口。不能夠把通過python的處理結果正確的傳遞給內置的node。感覺所有的python做成的node 都是“葉子”。

          4.              技術支持和官方論壇人氣低到,看了渾身發抖的地步。沒有交流,沒有討論。不知道是不是因為太貴的原因。

          5.              貴!!!真的很貴。動輒就是4XXX$-_-! 反正貴。

          就寫這么多,希望大家多多交流,國內關于軟件的新聞有不少,經驗卻沒有,希望能給我仍的“磚”能換來大家“玉”。謝謝!


          評論

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2005-11-23 17:08 by -=Kino=-
          噢對了,都忘了一個很關鍵的問題:
          集合的1 2 3 4 5。。。都代表什么意思。
          這個數字又是如何產生的呢?

          第2個問題:
          在rulewizard中,以當前的collector所指向的node為起點,遞歸的數到根,然后+1,就是數字的最大上限,
          比如:圖1種的B集合所在的node是第3級,那么數字最大就是3;圖3中的A集合所在node是第2級,那么數字最大就是2。

          第1個問題:
          首先對于不同的node產生的集合其可選種類(數字)不盡相同:
          總結的活計還沒干,先提一下1、2、3一般情況下都表示什么吧。
          1 --- 集合只有一個元素,就是最后匹配的那個,以往的匹配元素都被清空。
          2 --- 集合記錄下一個TestCase的所有匹配參數。
          3 --- 集合記錄下所有此類TestCase的匹配參數。

          舉個例子吧:
          有如下的一個方法A,其設定參數分別為abcd,即測試a(b)結構
          string a,b,c,d;
          methodA(a,b);
          methodA(b);
          methodA(d);
          如果我們要匹配方法A內出現的參數,并將其作為一個集合。
          那么:
          1 >>> 得到3個匹配結果,分別為:[b] [b] [d]
          找到一個參數記入集合,再進行下一個參數查找之前清空集合。
          2 >>> 得到3個匹配結果,分別為:[a,b] [b] [d]
          找到a(b)結構并且a==methodA里所有的匹配的參數,放入集合,排除重復的。
          3 >>> 得到3個匹配結果,分別為:[a,b] [a,b] [a,b,d]
          找到整個文件里所有a(b)結構并且a==methodA的方法調用中的參數,放入一個集合,排除重復的。

          總結:
          這里的數字就是表示了一個范圍,范圍的起點不是當前的node,而是當前的parent Node。結束也不是root Node,而是隱含的上界(整個文件)。
          這樣就可以理解了吧。
          (越來越發現純語言的表述就是有限)

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2005-11-23 17:36 by -=Kino=-
          對了,給各位想使用rulewizard又沒有錢的朋友提示一下:
          C++ Test 是用Java寫的,那么。。。明白了吧!
          這就是java的軟肋啊。不知道是該開心呢,還是該憂慮呢?
          (sigh,現在的感覺有點像搬起石頭砸自己的腳,還說很爽。。。)

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2006-10-10 09:51 by mingke
          請教:Parasoft C++ Test 6.5 pro 自帶的RuleWizard是 只讀 版本,如何變成可編輯版本?多謝!

          # re: C++ Test 之 RuleWizard 使用心得[未登錄]  回復  更多評論   

          2008-03-10 15:12 by Tony
          哎..迷惑啊..誰能幫我了解下C++TEST的RLUE制作方面的知識.加我MSN號:wangfeng521123@hotmail.com

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2008-05-23 15:49 by hsm
          同問:
          Parasoft C++ Test 6.5 pro 自帶的RuleWizard是 只讀 版本,如何變成可編輯版本?多謝!

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2008-05-26 17:42 by kinohl
          為什么能使用 rule wizard 。。。
          其實也很簡單,這軟件是java寫的,用decompiler 反編譯,得到原碼。
          這里只要修改一下,menu bar上的代碼,讓本來灰色的按鈕變亮就可以用了。
          時間比較長了,我自己都忘了具體是哪個類了。

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2008-05-26 17:43 by kinohl
          TODO :
             wangfeng521123@hotmail.com
             sysmon ?

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2009-02-03 14:10 by nicoleluu
          圖形化的自定義規則還是非常好的,這樣規范包相當于自己公司的!
          好像億道電子可以免費試用~~

          # re: C++ Test 之 RuleWizard 使用心得  回復  更多評論   

          2011-06-26 22:09 by 小蠻
          謝謝博主,很牛的資料。
          主站蜘蛛池模板: 玉溪市| 新化县| 安陆市| 临沧市| 永善县| 集安市| 晋中市| 莱阳市| 枣阳市| 咸丰县| 布尔津县| 和龙市| 光泽县| 汉寿县| 仪陇县| 惠东县| 瑞金市| 缙云县| 城市| 河北省| 嘉黎县| 揭阳市| 大田县| 新巴尔虎左旗| 拉萨市| 南城县| 金塔县| 舞钢市| 贡山| 长葛市| 隆林| 安仁县| 吉隆县| 大兴区| 天长市| 晋宁县| 潞西市| 丽水市| 建阳市| 获嘉县| 清远市|