<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    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++類別、功能或組件,而無(wú)需編寫單個(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)之上。她的主要功能可以參見下邊的鏈接網(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種方式,一種是手工寫規(guī)則,另一種是寫入需要剔除的代碼,讓rulewizard去幫你生成規(guī)則(最好別用,弱弱的autocreate)。我這里主要重點(diǎn)放在自己寫規(guī)則方面。

    Rulewizard的界面如下圖:


    o_Rulewizard001.JPG*******

    圖1。RuleWizard界面

     

     

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

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

    Node:規(guī)則的基本組成部分,通過(guò)Node你可以很清楚的知道它的功能。比如表達(dá)式a=b、變量的類型測(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返回了所有的包涵指定類型變量得語(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ī)則的方法。(類似于輸出錯(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ǔ)法我這里就不寫了,畢竟和這篇文章的內(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$-_-! 反正貴。

    就寫這么多,希望大家多多交流,國(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)生的集合其可選種類(數(shù)字)不盡相同:
    總結(jié)的活計(jì)還沒(méi)干,先提一下1、2、3一般情況下都表示什么吧。
    1 --- 集合只有一個(gè)元素,就是最后匹配的那個(gè),以往的匹配元素都被清空。
    2 --- 集合記錄下一個(gè)TestCase的所有匹配參數(shù)。
    3 --- 集合記錄下所有此類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)有錢的朋友提示一下:
    C++ Test 是用Java寫的,那么。。。明白了吧!
    這就是java的軟肋啊。不知道是該開心呢,還是該憂慮呢?
    (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寫的,用decompiler 反編譯,得到原碼。
    這里只要修改一下,menu bar上的代碼,讓本來(lái)灰色的按鈕變亮就可以用了。
    時(shí)間比較長(zhǎng)了,我自己都忘了具體是哪個(gè)類了。

    # 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)航:
     
    主站蜘蛛池模板: 99999久久久久久亚洲| 亚洲最大成人网色| 免费播放国产性色生活片| 嫩草影院在线免费观看| 亚洲H在线播放在线观看H| 欧洲精品成人免费视频在线观看| 亚洲日本香蕉视频| 在线jlzzjlzz免费播放| 国产av无码专区亚洲av毛片搜| 免费看小12萝裸体视频国产| 四虎影视永久在线精品免费| 相泽亚洲一区中文字幕| 最近中文字幕大全免费版在线 | yellow免费网站| 久久精品国产精品亚洲人人| 欧洲人成在线免费| 亚洲国产高清在线精品一区| 天天看免费高清影视| 免费无码午夜福利片| 国产成人A亚洲精V品无码| 国产一级淫片a免费播放口| 7777久久亚洲中文字幕蜜桃| 无码国产精品久久一区免费| 亚洲国产成人AV网站| 国产亚洲情侣一区二区无码AV| 99视频在线看观免费| 亚洲日韩精品无码专区加勒比☆ | 亚洲人成77777在线观看网| 国产jizzjizz免费看jizz| 精品国产免费一区二区三区| 亚洲熟妇色自偷自拍另类| 免费一级毛片免费播放| 免费的全黄一级录像带| 伊人久久亚洲综合影院首页| 亚洲精品麻豆av| 久草视频在线免费| 污污视频免费观看网站| 亚洲黄色三级网站| 亚洲国产成人久久综合区| 免费福利视频导航| 一区二区三区免费精品视频|