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

          C++ Test 之 RuleWizard 使用心得

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

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

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

          一.介紹一下C++Test吧(這一部分請(qǐng)?jiān)试S我ctrl + c/v )

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

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

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

          二.RuleWizard

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

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

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

          Rulewizard的界面如下圖:


          o_Rulewizard001.JPG*******

          圖1。RuleWizard界面

           

           

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

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

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

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

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

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

           o_Rulewizard002.JPG

           圖2

          介紹一下主要的Command

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

          o_Rulewizard003.JPG
          圖3

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

          沒(méi)有被聲明的變量,如下圖

          o_Rulewizard004.JPG
          圖4

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

           

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

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

          o_Rulewizard006.JPG
          圖5

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

           

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

           

          三.Python

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

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

          作為一個(gè)單獨(dú)的方法組件:其實(shí)就是一個(gè)方法而已。比如,以上圖為例子,如果我們不判斷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進(jìn)行測(cè)試的時(shí)候就會(huì)得到輸出我們需要的內(nèi)容。

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

          四.不足點(diǎn)

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

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

          2.              集合的概念在這里有 他的優(yōu)點(diǎn),也有缺點(diǎn),如果我們想要明確的得到代碼里相同變量的出現(xiàn)次數(shù),那么通過(guò)現(xiàn)有的rulewizard是得不到的,因?yàn)槲覀兊玫降募峡偸墙?jīng)過(guò)“合并”的、沒(méi)有重復(fù)的數(shù)據(jù)結(jié)構(gòu)。

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

          4.              技術(shù)支持和官方論壇人氣低到,看了渾身發(fā)抖的地步。沒(méi)有交流,沒(méi)有討論。不知道是不是因?yàn)樘F的原因。

          5.              貴!!!真的很貴。動(dòng)輒就是4XXX$-_-! 反正貴。

          就寫(xiě)這么多,希望大家多多交流,國(guó)內(nèi)關(guān)于軟件的新聞?dòng)胁簧伲?jīng)驗(yàn)卻沒(méi)有,希望能給我仍的“磚”能換來(lái)大家“玉”。謝謝!


          評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 阳江市| 铁力市| 开鲁县| 梁河县| 仁布县| 连平县| 东乌珠穆沁旗| 肃南| 枣阳市| 红原县| 布尔津县| 介休市| 依安县| 抚远县| 安远县| 武陟县| 湘潭县| 荆门市| 高安市| 英山县| 新宁县| 台州市| 长兴县| 黄山市| 收藏| 盐源县| 利辛县| 彰化市| 纳雍县| 杨浦区| 马尔康县| 杭州市| 八宿县| 建湖县| 同仁县| 齐齐哈尔市| 芦山县| 兴海县| 商都县| 大余县| 东平县|