日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

自動(dòng)化單元測(cè)試的意義

系統(tǒng) 1879 0

出處

作者:許式偉
寫(xiě)于:2005年3月
背景: WPS Office 2005 (開(kāi)發(fā)代號(hào): V6)
原文: why-unit-test.pdf (pdf格式)

目錄

  • 自動(dòng)化單元測(cè)試的重要特征
  • 單元測(cè)試的項(xiàng)目意義
  • 單元測(cè)試對(duì)設(shè)計(jì)的意義
  • cppunit for v6
  • 將測(cè)試案例寫(xiě)在dll中

常規(guī)測(cè)試的缺陷

  • 一般是基于手工的,不具備可回歸性。因此測(cè)試的效率不高。
  • 由于缺乏效率,往往導(dǎo)致測(cè)試僅僅針對(duì)典型數(shù)據(jù),覆蓋面往往也很低。

自動(dòng)化單元測(cè)試的重要特征

  • 自動(dòng)化、可回歸性
  • Quiet
  • 案例的執(zhí)行安全受控

自動(dòng)化、可回歸性

  • 測(cè)試的結(jié)果是程序直接檢測(cè)的,而不是 “通過(guò)人眼對(duì)屏幕上的輸出結(jié)果的觀測(cè)”
    • 測(cè)試的輸入數(shù)據(jù)和預(yù)測(cè)結(jié)果直接在案例中, 除非結(jié)果非預(yù)期,否則不需要任何輸出
    • 因此,并不推薦屏幕輸出,或者寫(xiě)可視化的測(cè)試單元。
    • 案例的執(zhí)行不需要人工干預(yù),可隨時(shí)回放。
    • 因此,我們可以通過(guò)大量典型測(cè)試數(shù)據(jù)進(jìn)行回歸,以確保系統(tǒng)的可靠性。
  • 對(duì)比:常規(guī)測(cè)試典型過(guò)程
    • 在屏幕上提示輸入數(shù)據(jù),然后打印結(jié)果,通過(guò)查看屏幕顯示的結(jié)果,確認(rèn)我們的系統(tǒng)是否存在問(wèn)題。

Quiet

  • 絕對(duì)避免在案例執(zhí)行過(guò)程中彈出對(duì)話框或者進(jìn)行其他UI交互。
  • (調(diào)試模式下例外)

案例的執(zhí)行安全受控

  • 某個(gè)測(cè)試案例執(zhí)行的失敗(甚至出現(xiàn)了異常),不會(huì)導(dǎo)致測(cè)試環(huán)境的崩潰,也不影響另一個(gè)案例的執(zhí)行結(jié)果。

常規(guī)測(cè)試樣例

          
            void
          
          
          
          
            main
          
          
            ()
          
          
            
{
int n ;
for ( ;; )
{
std :: cout << " input n(0 to exit): " ;
std :: cin >> n ;
if ( n == 0 )
break ;
std :: cout << " n! = " << fact ( n ) << std :: endl ;
}
}

cppunit測(cè)試案例

          
            class
          
          
          
          
            TestFact
          
          
             : 
          
          
            public
          
          
          
          
            TestCase
          
          
            
{
public :
CPPUNIT_TEST_SUITE ( TestFact ) ;
CPPUNIT_TEST ( test ) ;
CPPUNIT_TEST_SUITE_END () ;

void test ()
{
CPPUNIT_ASSERT ( fact ( 3 ) == 6 ) ;
CPPUNIT_ASSERT ( fact ( 4 ) == 24 ) ;
CPPUNIT_ASSERT ( fact ( 5 ) == 120 ) ;
}
} ;

CPPUNIT_TEST_SUITE_REGISTRATION ( TestFact ) ;

單元測(cè)試的項(xiàng)目意義

  • 模塊更加可控。
  • 及早發(fā)現(xiàn)問(wèn)題,提高模塊質(zhì)量,降低系統(tǒng)測(cè)試成本。
  • 加速開(kāi)發(fā)周期。

單元測(cè)試與項(xiàng)目控制

  • 單元測(cè)試不應(yīng)該是程序員的個(gè)人行為,而與項(xiàng)目進(jìn)度控制、質(zhì)量控制息息相關(guān)。
    • 通過(guò)監(jiān)測(cè)單元測(cè)試的情況,來(lái)量化模塊開(kāi)發(fā)的進(jìn)度與質(zhì)量。
  • 要改善項(xiàng)目的控制,必須“做好單元測(cè)試”。
    • 不止是要讓單元測(cè)試成為每個(gè)程序員的例行公事,而且要讓它變得規(guī)范、變得受控。

單元測(cè)試的誤區(qū)

  • 一個(gè)很常見(jiàn)誤解是:嗯,單元測(cè)試,好事啊,只是最近時(shí)間很緊,下回做吧。
  • 實(shí)際上 單元測(cè)試大家都會(huì)去做 ,我們提倡單元測(cè)試,更大程度上是要達(dá)到:
    • 規(guī)范單元測(cè)試的編寫(xiě)(手段);
    • 最大程度保留下來(lái)我們的測(cè)試案例;

加速開(kāi)發(fā)周期

  • 一個(gè)系統(tǒng)自動(dòng)化程度越高,則運(yùn)營(yíng)成本越低。
    • 單元(模塊)是最容易,也是最應(yīng)該采用自動(dòng)化測(cè)試的。而集成測(cè)試、系統(tǒng)測(cè)試雖然也有自動(dòng)化的方法和支持工具,但需要更高額的代價(jià)。
  • 單元測(cè)試 將問(wèn)題的發(fā)現(xiàn)周期縮短,降低bug修復(fù)成本。
    • 如果問(wèn)題在集成測(cè)試、系統(tǒng)測(cè)試期被發(fā)現(xiàn),那么同樣一個(gè)問(wèn)題需要花幾倍甚至幾十倍的時(shí)間進(jìn)行定位、修復(fù)。
  • 單元測(cè)試降低了集成測(cè)試、系統(tǒng)測(cè)試的壓力和投入成本。

單元測(cè)試的主要檢查點(diǎn)

  • 案例的覆蓋度
  • Bug量與Bug反復(fù)情況
  • 案例文檔的規(guī)范

單元測(cè)試對(duì)設(shè)計(jì)的意義

  • 設(shè)計(jì)應(yīng)該以可測(cè)試性為第一目標(biāo)。
  • 及時(shí)發(fā)現(xiàn)模塊構(gòu)架調(diào)整引發(fā)的潛在Bug。

模塊的可測(cè)試性

  • 可測(cè)試性 = 低耦合
    • 環(huán)境模擬(依賴的模塊、數(shù)據(jù)輸入)
    • 模塊設(shè)計(jì)應(yīng)該首先保證可測(cè)試性。
    • 堅(jiān)持進(jìn)行單元測(cè)試可提高設(shè)計(jì)能力。
  • 一個(gè)模塊可以很方便地進(jìn)行測(cè)試,那么就可以說(shuō)它是一個(gè)設(shè)計(jì)優(yōu)良的模塊。

發(fā)現(xiàn)模塊構(gòu)架調(diào)整的潛在Bug

  • 通常 模塊在架構(gòu)調(diào)整期(代碼重構(gòu))最容易引入Bug。
  • 只有在模塊開(kāi)發(fā)中就不斷積累經(jīng)典數(shù)據(jù)、以案例的形式固化已知Bug,才可能在架構(gòu)調(diào)整等最容易引發(fā)問(wèn)題的情形下獲得最佳效果。

cppunit for v6

  • 引入調(diào)試模式
  • 通用的調(diào)試開(kāi)關(guān)
  • 有選擇的運(yùn)行測(cè)試案例
  • 獨(dú)特的dll測(cè)試模式

調(diào)試模式

  • 同一套測(cè)試代碼,兩種工作模式。
    • cppunit提供了安全可控的自動(dòng)化測(cè)試平臺(tái)。
    • 但是是代碼總會(huì)有bug。為了讓測(cè)試案例可調(diào)試,v6在開(kāi)源的cppunit基礎(chǔ)上,結(jié)合kfc的調(diào)試策略,引入調(diào)試模式。

通用的調(diào)試開(kāi)關(guān)

  • /ndebug
    • 進(jìn)入自動(dòng)化測(cè)試模式。默認(rèn)為調(diào)試模式。
  • /output:<xmlfile>
    • 輸出結(jié)果到xml文件。注意:/output:后不能有空格。
    • 默認(rèn)輸出到控制臺(tái)。
  • /run:<testclass>[.<testmethod>]
    • 執(zhí)行<testclass>類(lèi)所有案例,或者執(zhí)行<testclass>的<testmethod>案例。

有選擇的運(yùn)行測(cè)試案例

  • 你可以只執(zhí)行某個(gè)TestCase類(lèi),或者只是執(zhí)行某個(gè)TestCase中的某個(gè)method。
  • 演示rununit程序的參數(shù)含義:

<testclass> <testmethod>

  • 演示通用開(kāi)關(guān):

/run:<testclass>[.<testmethod>]

將測(cè)試案例寫(xiě)在dll中

  • 測(cè)試案例同步更新
  • 測(cè)試dll內(nèi)部組件
  • 關(guān)于rununit工具

基于dll的單元測(cè)試

  • 對(duì)比
    • 為dll寫(xiě)測(cè)試程序(exe方式)
  • 優(yōu)點(diǎn)
    • 方便測(cè)試案例的同步更新
      • 并且強(qiáng)迫你同步更新測(cè)試案例
    • 可測(cè)試dll的內(nèi)部組件
    • 去除了建立新工程的過(guò)程(有點(diǎn)麻煩)。

關(guān)于rununit工具

  • 用rununit調(diào)試你的dll
    • rununit程序是一個(gè)通用的testcaseRunner,可用于執(zhí)行(或調(diào)試)一個(gè)dll中的部分或全部案例。
  • 命令行

rununit testcase[.dll] [testclass] [testmethod] [/ndebug] [/pause] [/output:<xmlfile>]

Visual Studio中調(diào)試dll

今天,你“單元測(cè)試”了嗎?

  • 如果你沒(méi)有,那么我告訴你,你已經(jīng)落伍啦!

附錄

  • rununit.exe: 參考ksdn中關(guān)于該程序的詳細(xì)說(shuō)明。
  • CreateCppUnitTestCase宏: 參考KSRule.dsm(macros for Visual Studio)。

自動(dòng)化單元測(cè)試的意義


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 泉州市| 石家庄市| 禄丰县| 峨山| 永德县| 灵丘县| 东乡| 宣化县| 吴忠市| 云阳县| 永定县| 平原县| 鹤岗市| 仁布县| 乐陵市| 江城| 安徽省| 阿坝县| 辽中县| 瑞丽市| 介休市| 凉城县| 浪卡子县| 沧源| 木兰县| 宜阳县| 慈利县| 青川县| 丰都县| 常宁市| 宁陵县| 武穴市| 丰顺县| 淮安市| 衢州市| 敖汉旗| 波密县| 奉新县| 高邮市| 迭部县| 乐昌市|