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

          C++ Test 之 RuleWizard 使用心得

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

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

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

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

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

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

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

          二.RuleWizard

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

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

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

          Rulewizard的界面如下圖:


          o_Rulewizard001.JPG*******

          圖1。RuleWizard界面

           

           

          右邊的就是我們寫的規(guī)則。

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

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

          parentNode:規(guī)則中的主分支Node或者次分支的主Node。內(nèi)容可以是表達式、變量、函數(shù)等

          childNode:規(guī)則的組成單元。

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

           o_Rulewizard002.JPG

           圖2

          介紹一下主要的Command

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

          o_Rulewizard003.JPG
          圖3

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

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

          o_Rulewizard004.JPG
          圖4

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

           

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

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

          o_Rulewizard006.JPG
          圖5

          如果 滿足這個規(guī)則,那么輸出相應(yīng)得警告信息。

           

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

           

          三.Python

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

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

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

           

           r_Rulewizard005.JPG

          圖6

           

          其中Method的內(nèi)容是:

          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進行測試的時候就會得到輸出我們需要的內(nèi)容。

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

          四.不足點

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

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

          2.              集合的概念在這里有 他的優(yōu)點,也有缺點,如果我們想要明確的得到代碼里相同變量的出現(xiàn)次數(shù),那么通過現(xiàn)有的rulewizard是得不到的,因為我們得到的集合總是經(jīng)過“合并”的、沒有重復(fù)的數(shù)據(jù)結(jié)構(gòu)。

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

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

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

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


          評論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          2011-06-26 22:09 by 小蠻
          謝謝博主,很牛的資料。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 丰县| 云龙县| 徐水县| 齐齐哈尔市| 罗定市| 佛学| 上思县| 饶平县| 二手房| 济宁市| 遂平县| 屯留县| 泰顺县| 临沧市| 岑巩县| 安康市| 天气| 贵德县| 平潭县| 陇西县| 永靖县| 腾冲县| 龙陵县| 高密市| 秦皇岛市| 昌平区| 唐山市| 阳朔县| 和林格尔县| 榕江县| 磐安县| 沧源| 郯城县| 温宿县| 富阳市| 榆中县| 山西省| 建湖县| 蒙自县| 庄浪县| 安康市|