


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單元測(cè)試規(guī)范文檔單元測(cè)試書寫規(guī)范第一章 總則第一條 本文檔規(guī)定了應(yīng)用軟件系統(tǒng)和部分系統(tǒng)平臺(tái)模塊的單元測(cè)試方法和步驟、測(cè)試用例的設(shè)計(jì)方法、測(cè) 試代碼的書寫規(guī)范、流程以及單元測(cè)試的產(chǎn)品提交和驗(yàn)收規(guī)范,目的在于控制單元測(cè)試的質(zhì)量,加強(qiáng)項(xiàng) 目的質(zhì)量管理,從而提高整個(gè)產(chǎn)品的質(zhì)量。第二條 主要是應(yīng)用軟件的單元測(cè)試、部分系統(tǒng)平臺(tái)軟件模塊測(cè)試第三條 本文檔的預(yù)期讀者為項(xiàng)目的項(xiàng)目經(jīng)理、產(chǎn)品經(jīng)理、系統(tǒng)軟件主研人員、應(yīng)用軟件主研人員、高級(jí)測(cè) 試人員等。1. xxxxxx 系統(tǒng)軟件平臺(tái)是項(xiàng)目的重要組成部分,主要是依托 gui 子系統(tǒng)、分析子系統(tǒng)和數(shù)據(jù)采集子 系統(tǒng)的硬件環(huán)境,共同為高層的應(yīng)用軟件提供必要的軟、硬件功能支
2、持,并為應(yīng)用軟件開發(fā)人員提供必 要的開發(fā)環(huán)境和測(cè)試環(huán)境。本規(guī)范的提出和制訂旨在為軟件單元測(cè)試提供依據(jù)和支持。2. 被測(cè)模塊:需要進(jìn)行模塊級(jí)測(cè)試的應(yīng)用軟件系統(tǒng)的一個(gè)單元或模塊,也稱被測(cè)單元 測(cè)試單元:用于對(duì)被測(cè)模塊進(jìn)行單元級(jí)測(cè)試,由源代碼、測(cè)試腳本和輸入數(shù)據(jù)等構(gòu)成的程序單元第二章 單元測(cè)試第四條 對(duì)于結(jié)構(gòu)化的編程語言,程序單元指程序中定義的函數(shù)或子程序。單元測(cè)試是指對(duì)函數(shù)或子程序所 進(jìn)行的測(cè)試。對(duì)于面向?qū)ο蟮木幊陶Z言,程序單元指特定的一個(gè)具體的類或相關(guān)的多個(gè)類。單元測(cè)試主要是指對(duì) 類方法的測(cè)試。第五條 角色工作體系角色 職責(zé) 測(cè)試主管 審查單元測(cè)試過程,對(duì)測(cè)試結(jié)果進(jìn)行評(píng)估。根據(jù)單元測(cè)試發(fā)現(xiàn)的缺陷
3、提出變更申請(qǐng)。 測(cè)試工程師 對(duì)單元代碼進(jìn)行檢查,設(shè)計(jì)單元測(cè)試用例,加載運(yùn)行測(cè)試用例,記錄和分析測(cè)試結(jié)果,填寫單元測(cè)試 bug 清單。 開發(fā)工程師 設(shè)計(jì)測(cè)試需要的驅(qū)動(dòng)程序和樁模塊,以及輔助測(cè)試工具的開發(fā)。 配置管理員 管理測(cè)試需要的資源,包括軟硬件環(huán)境,版本管理和 bug 管理。 第六條 單元測(cè)試規(guī)程包括靜態(tài)的代碼審查和動(dòng)態(tài)測(cè)試兩個(gè)階段。 代碼審查是按照代碼審查單中的條項(xiàng)對(duì)單元模塊進(jìn)行逐項(xiàng)檢查,并填寫單元測(cè)試 bug 清單。代碼審查單的格式見附錄一,單元測(cè)試 bug 清單見附錄二。 動(dòng)態(tài)測(cè)試階段首先編寫驅(qū)動(dòng)模塊(或主類)和樁模塊后,在驅(qū)動(dòng)模塊和樁模塊中設(shè)計(jì)相應(yīng)的測(cè)試用例,對(duì)所有的測(cè)試用例進(jìn)行統(tǒng)一
4、編號(hào),在源代碼中進(jìn)行注釋標(biāo)識(shí)。測(cè)試用例應(yīng)該覆蓋單元模塊的所有功 能項(xiàng),如果單元模塊有性能、余量等其它測(cè)試特性要求,則必須設(shè)計(jì)相應(yīng)的測(cè)試用例測(cè)試這些特性,編 制完測(cè)試用例后,把測(cè)試用例提交給配置管理員或測(cè)試主管進(jìn)行審查,審查沒有通過則根據(jù)審查意見進(jìn) 行修改,直到審查通過后測(cè)試人員加載測(cè)試用例,編譯運(yùn)行得到測(cè)試結(jié)果,比對(duì)測(cè)試結(jié)果,如果發(fā)現(xiàn)錯(cuò) 誤或 bug 則需要填寫單元測(cè)試 bug 清單并提交給測(cè)試經(jīng)理和配置管理人員。在進(jìn)行功能測(cè)試時(shí),可以利用其它測(cè)試工具進(jìn)行內(nèi)存溢出分析、代碼覆蓋率分析、代碼性能測(cè)試等.第七條 代碼審查要求:根據(jù)代碼審查單中的要求,對(duì)被測(cè)試單元進(jìn)行逐項(xiàng)檢查,檢查后在對(duì)應(yīng)的條項(xiàng)后進(jìn)
5、行 標(biāo)記,發(fā)現(xiàn)問題后,填寫代碼單元測(cè)試 bug 清單并提交。第八條 測(cè)試用例測(cè)試用例是測(cè)試數(shù)據(jù)及與之相關(guān)的測(cè)試規(guī)程的一個(gè)特定的集合,它是為驗(yàn)證被測(cè)試程序(為測(cè)試路 徑或驗(yàn)證是否符合特定需求)而產(chǎn)生的。 測(cè)試用例設(shè)計(jì)用于白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試進(jìn)入的前提條件是在測(cè)試人員已經(jīng)對(duì)被測(cè)試對(duì)象有了一定的了解,基本上明確了被測(cè)試軟 件的邏輯結(jié)構(gòu)。過程是通過針對(duì)程序邏輯結(jié)構(gòu)設(shè)計(jì)和加載測(cè)試用例,驅(qū)動(dòng)程序執(zhí)行,檢查在不同點(diǎn)程序 的狀態(tài),以確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。 白盒測(cè)試主要是對(duì)被測(cè)試對(duì)象進(jìn)行如下測(cè)試項(xiàng)目: 1、 對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少覆蓋一次; 2、 對(duì)所有的邏輯判定,真假兩種情況
6、都至少覆蓋一次; 3、 在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體; 4、 測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。 白盒測(cè)試達(dá)到的目標(biāo):語句覆蓋率達(dá)到 100%,分支覆蓋率達(dá)到 100%,覆蓋程序中主要的路徑,主 要路徑是指完成需求和設(shè)計(jì)功能的代碼所在的路徑和程序異常處理執(zhí)行到的路徑。 黑盒測(cè)試是要首先了解軟件產(chǎn)品具備的功能和性能等需求,再根據(jù)需求設(shè)計(jì)一批測(cè)試用例以驗(yàn)證程 序內(nèi)部活動(dòng)是否符合設(shè)計(jì)要求的活動(dòng)。 黑盒測(cè)試主要是對(duì)被測(cè)試對(duì)象進(jìn)行如下測(cè)試項(xiàng)目: 1、 測(cè)試程序單元的功能是否實(shí)現(xiàn); 2、 測(cè)試程序單元性能是否滿足要求(可選); 3、 可選的其它測(cè)試特性,如邊界、余量、安全性、可靠性、強(qiáng)度測(cè)試、人機(jī)交互界面
7、測(cè)試等。 黑盒測(cè)試達(dá)到的目標(biāo):程序單元正確地實(shí)現(xiàn)了需求和設(shè)計(jì)上要求的功能,滿足性能要求,同時(shí)程序單元要有可靠性和安全性。第九條 單元測(cè)試工具項(xiàng)目規(guī)定使用以下測(cè)試工具實(shí)現(xiàn)應(yīng)用軟件系統(tǒng)單元測(cè)試和子系統(tǒng)集成測(cè)試,以及部分系統(tǒng)平臺(tái)軟件 模塊的相關(guān)測(cè)試。 +cppunit:正確性測(cè)試和功能測(cè)試 +ccmalloc:動(dòng)態(tài)內(nèi)存訪問檢查 +gcov:代碼覆蓋率分析 +gprof:代碼性能分析第十條 測(cè)試的目錄結(jié)構(gòu)建議將模塊單元的測(cè)試代碼組織在一個(gè)單獨(dú)的目錄中,作為模塊單元源代碼目錄的一個(gè)子目錄,取 名為 testdemo。在測(cè)試代碼目錄下分布創(chuàng)建 5 個(gè)子目錄分別對(duì)應(yīng) pc linux、pxa250 評(píng)估板、
8、ixp425 評(píng)估板、pxa255 目標(biāo)板、ixp425 目標(biāo)板的測(cè)試目錄,用于構(gòu)建、執(zhí)行單元測(cè)試、管理測(cè)試日志和測(cè)試 報(bào)告。 第十一條 測(cè)試代碼的書寫規(guī)范其規(guī)范見附錄三。第十二條 測(cè)試單元的文件組成及命名規(guī)范每個(gè)測(cè)試單元由測(cè)試代碼文件、程序主函數(shù)文件和編譯運(yùn)行腳本文件組成,單元測(cè)試完成之后還生 成一系列測(cè)試報(bào)告,這些測(cè)試報(bào)告將與模塊單元一起提交。 為了便于管理,對(duì)組成測(cè)試單元的各個(gè)文件及測(cè)試生成的測(cè)試結(jié)果和測(cè)試報(bào)告文件的命名都從被測(cè) 類/模塊派生而來。假定被測(cè)類為 democlass,測(cè)試單元包含如下文件及其所處目錄位置如下所述: 1) 測(cè)試單元文件 testdemo/:測(cè)試類頭文件 tes
9、tdemo/:測(cè)試類實(shí)現(xiàn)文件 testdemo/:測(cè)試類主函數(shù) testdemo/$(運(yùn)行平臺(tái))/makefile:用于特定運(yùn)行平臺(tái)的 makefile 文件 testdemo/$(運(yùn)行平臺(tái))/demotestdemo:為特定運(yùn)行平臺(tái)生成的可執(zhí)行程序 其中運(yùn)行平臺(tái)為:pc linux、pxa250 評(píng)估板、pxa255 目標(biāo)板、ixp425 評(píng)估板、ixp425 目標(biāo)板 5 種。 2) 測(cè)試結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/:采用-o0 編譯的正確性測(cè)試結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/:采用-o2 編譯的正確性測(cè)試結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/:采用-o3
10、編譯的正確性測(cè)試結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/:內(nèi)存檢查結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/: 的代碼覆蓋率結(jié)果文件 testdemo/$(運(yùn)行平臺(tái))/:demounit 被測(cè)單元的代碼性能分析結(jié)果文件 其中運(yùn)行平臺(tái)為:pc linux、pxa250 評(píng)估板、pxa255 目標(biāo)板、ixp425 評(píng)估板、ixp425 目標(biāo)板第十三條 單元測(cè)試的實(shí)施按照單元測(cè)試規(guī)程進(jìn)行實(shí)施,進(jìn)行代碼審查和動(dòng)態(tài)測(cè)試。 1) 單元測(cè)試或集成測(cè)試涉及的源程序三種:被測(cè)類/被測(cè)單元、已通過的類/樁模塊、測(cè)試單元。 只需對(duì)被測(cè)類進(jìn)行測(cè)試設(shè)計(jì)、進(jìn)行代碼覆蓋率分析和代碼性能分析,用多種優(yōu)化編譯選項(xiàng)進(jìn)行 編
11、譯和測(cè)試; 2) 不需為已通過的類/樁模塊進(jìn)行測(cè)試設(shè)計(jì),這些模塊單元和測(cè)試單元本身都進(jìn)行代碼不需要使用 ccmalloc、gcov 和 gprof 等工具要求的編譯選項(xiàng)和編譯優(yōu)化選項(xiàng)進(jìn)行編譯,也不需要為其生 成.gcov 代碼覆蓋率報(bào)告。 3) 對(duì)于各種運(yùn)行平臺(tái)下,都需要使用-o0, -o2, -o3 三種編譯優(yōu)化選項(xiàng)對(duì)測(cè)試單元進(jìn)行編譯,并 運(yùn)行一個(gè)測(cè)試單元中的所有測(cè)試用例,生成測(cè)試報(bào)告第十四條 單元模塊正確性測(cè)試進(jìn)行單元正確性測(cè)試的過程是將被測(cè)單元源程序、測(cè)試單元源程序和測(cè)試主函數(shù)程序放到一起編譯 產(chǎn)生可執(zhí)行程序,并在目標(biāo)平臺(tái)上運(yùn)行可執(zhí)行程序,即可獲得測(cè)試結(jié)果報(bào)告。對(duì)應(yīng)上述的 democla
12、ss 被測(cè)類的正確性測(cè)試過程的命令序列為: $(cc) $(opt) -c ;編譯被測(cè)類 $(cc) -c $(cc) -c $(cc) -o demotestdemo -lstdc+ -lcppunit ./demotestdemo;運(yùn)行測(cè)試 ./demotestdemo demounit$(opt).log;生成單元測(cè)試結(jié)果文件,該文件隨模塊一起提交 其中,變量 cc 為 c/c+編譯器,如 gcc/g+;$(opt)為編譯優(yōu)化選項(xiàng)。 項(xiàng)目要求每個(gè)被測(cè)模塊在用-o0, -o2 和-o3 三種編譯選項(xiàng)進(jìn)行編譯,并分別進(jìn)行正確性測(cè)試。第十五條 單元內(nèi)存溢出檢查項(xiàng)目要求用 ccmalloc 內(nèi)存
13、檢查工具對(duì)被測(cè)單元進(jìn)行內(nèi)存溢出檢查,測(cè)試過程與正確性測(cè)試相似, 只是要求被測(cè)單元代碼的編譯和最后的連接命令前添加 ccmalloc 命令,如下命令序列所示: ccmalloc $(cc) $(opt) -c $(cc) -c $(cc) -c ccmalloc $(cc) -o demotestdemo -lstdc+ -lcppunit ./demotestdemo;運(yùn)行測(cè)試,產(chǎn)生內(nèi)存檢查結(jié)果顯示于屏幕 ./demotestdemo 2> ; 運(yùn)行測(cè)試,產(chǎn)生內(nèi)存檢查結(jié)果文件用于提交第十六條 測(cè)試代碼覆蓋率分析項(xiàng)目要求用 gcov 工具對(duì)測(cè)試單元的代碼覆蓋率進(jìn)行分析,測(cè)試單元的代碼覆蓋率
14、分析的命令序列 如下所示: $(cc) $(opt) -c -g -fprofile-arcs -ftest-coverage -fprofile-arcs ;對(duì)被測(cè)代碼使用-g -ftest-coverage 等編譯選項(xiàng) $(cc) -c $(cc) -c $(cc) -o demotestdemo -lstdc+ -lcppunit ./demotestdemo;運(yùn)行測(cè)試 gcov > ;對(duì)每個(gè)被測(cè)源程序生成 2 個(gè)覆蓋率結(jié)果文件 ; 和 ;前者包含源代碼每條語句的執(zhí)行計(jì)數(shù), ;后者包含一個(gè)該文件覆蓋率統(tǒng)計(jì) cat > ;合并以上兩個(gè)代碼覆蓋率文件, ;最后提交合并后的文件第十
15、七條 模塊單元代碼性能分析項(xiàng)目還要求用 gcov 工具對(duì)測(cè)試單元的代碼性能進(jìn)行分析,測(cè)試單元的代碼性能分析的命令序列如 下所示: $(cc) $(opt) -c -g -pg ;對(duì)被測(cè)類使用-g -pg 等編譯選項(xiàng) $(cc) -c $(cc) -c $(cc) -pg -o demotestdemo -lstdc+ -lcppunit ./demotestdemo;運(yùn)行測(cè)試 gprof -pg demotestdemo >產(chǎn)生性能分析結(jié)果文件第三章 測(cè)試結(jié)果提交和驗(yàn)收第十八條 單元測(cè)試工作產(chǎn)品提交項(xiàng)目要求隨模塊提交 列出的 5 種測(cè)試單元文件和 6 種測(cè)試結(jié)果和測(cè)試報(bào)告文件,而每增加一
16、種 被測(cè)類,提交時(shí)要求增加相應(yīng)的測(cè)試類文件和代碼覆蓋率報(bào)告文件。1對(duì)于每個(gè)被測(cè)類的測(cè)試文檔產(chǎn)品 +測(cè)試類頭.h 文件 +測(cè)試類實(shí)現(xiàn).cpp 文件 +pc linux 平臺(tái)和 2 個(gè) xscale 平臺(tái)(2 個(gè) pxa25x 平臺(tái)或 2 種 ixp425 平臺(tái))下的代碼覆蓋率.gcov 文件 2對(duì)于每個(gè)測(cè)試單元的測(cè)試文檔產(chǎn)品 +測(cè)試類主函數(shù).cpp 文件 3對(duì)于每種運(yùn)行平臺(tái)的測(cè)試文檔產(chǎn)品 對(duì)于每個(gè)測(cè)試單元需要提在 pc linux 平臺(tái)和 2 個(gè) xscale 平臺(tái)(2 個(gè) pxa25x 平臺(tái)或 2 種 ixp425 平臺(tái))下的以下文檔 umakefile 文件 +內(nèi)存檢查結(jié)果.ccmalloc
17、 文件 +代碼覆蓋率分析.gcov 文件 +代碼性能分析.gprof 文件 +利用-o0, -o2, -o3 三種編譯優(yōu)化選項(xiàng)編譯被測(cè)代碼時(shí)產(chǎn)生正確性測(cè)試結(jié)果.log 文件 4 單元測(cè)試總結(jié)報(bào)告.report testdemo/:總結(jié)單元測(cè)試情況,需要手工書寫。內(nèi)容包括 4 個(gè)部分: +被測(cè)類名:列出所有被測(cè)類的類名 +測(cè)試用例:按被測(cè)類列出所有測(cè)試用例及其描述信息,主要是用例源程序代碼和相應(yīng)的注釋信 息。 +正確性測(cè)試報(bào)告:列出每種運(yùn)行平臺(tái)下測(cè)試單元運(yùn)行的測(cè)試結(jié)果。從具有最高編譯選項(xiàng)并且通 過了全部測(cè)試用例的測(cè)試報(bào)告中拷貝 +代碼覆蓋率測(cè)試結(jié)果:列出測(cè)試單元在任意平臺(tái)下運(yùn)行時(shí),被測(cè)類的代碼覆
18、蓋率信息。從相應(yīng) 被測(cè)類的.gcov 文件中拷貝。 一個(gè) demo 單元測(cè)試總結(jié)報(bào)告請(qǐng)參考 9。第十九條 測(cè)試產(chǎn)品提交方式單元編碼/測(cè)試人員應(yīng)該在所有測(cè)試項(xiàng)目完成之后,刪除所有無關(guān)的臨時(shí)文件,僅留下需要提交的 項(xiàng)目,然后將 testdemo 目錄作為一個(gè)整體保留其目錄結(jié)構(gòu)進(jìn)行提交。最后手工完成一個(gè)文本格式的單 元測(cè)試總結(jié)報(bào)告。第二十條 單元測(cè)試工作產(chǎn)品驗(yàn)收規(guī)范項(xiàng)目的模塊單元提交時(shí),要對(duì)-o0、-o2 和-o3 三種編譯優(yōu)化的正確性測(cè)試報(bào)告.log 文件、每個(gè)被 測(cè)類/被測(cè)源文件的代碼覆蓋率結(jié)果.gcov 文件和內(nèi)存檢查結(jié)果.ccmalloc 文件。 通過的準(zhǔn)則如下: 1) 正確性測(cè)試結(jié)果文件:
19、在所有運(yùn)行平臺(tái)下,至少在一種編譯優(yōu)化選項(xiàng)下通過了全部的測(cè)試用例, 保證測(cè)試用例覆蓋了單元模塊中的所有功能點(diǎn); 2) 其它測(cè)試特性結(jié)果文件:在所有運(yùn)行平臺(tái)下,測(cè)試覆蓋該模塊所要求的其它測(cè)試特性并測(cè)試通 過; 3) 內(nèi)存檢查結(jié)果文件:在所有運(yùn)行平臺(tái)下,運(yùn)行所有測(cè)試用例之后未發(fā)生內(nèi)存泄漏; 4) 代碼覆蓋率文件:在所有運(yùn)行平臺(tái)下,每個(gè)被測(cè)類/被測(cè)文件的可執(zhí)行語句的代碼覆蓋率達(dá)到100%; 4) 每一個(gè)單元測(cè)試 bug 清單都處于一個(gè)明確的狀態(tài),不能改正的必須給出詳細(xì)的解釋說明; 5)單元測(cè)試工作產(chǎn)品的驗(yàn)收采用同級(jí)評(píng)審的方法,由評(píng)審組決定測(cè)試是否通過,來保證單元測(cè)試 的質(zhì)量和軟件產(chǎn)品的質(zhì)量。第四章 附
20、則附錄一:代碼審查單代碼審查單 檢查大項(xiàng) 檢查小項(xiàng) 是否 編程風(fēng)格檢查 按照代碼編寫規(guī)范,該縮進(jìn)的地方(如配對(duì)出現(xiàn)的語句、嵌套的 if 語句、類聲明定義等)否已正確地縮進(jìn) 程序代碼布局結(jié)構(gòu)清楚嗎 注釋準(zhǔn)確并有意義嗎?在每一個(gè)模塊之前,是否有注釋說明,描述該模塊的輸入/輸出、參數(shù)、功能處理和其調(diào)用的外部模塊以及該模塊是否有使用 限制等 是否有多余的資源定義和宏定義 頭文件是否使用了 ifndef/define/endif 預(yù)處理塊 程序結(jié)構(gòu)和模塊功能定義清楚嗎 是否遵循該語言的指令編寫格式 注釋的行數(shù)不少于代碼總行數(shù)的 1/5 嗎 注釋說明和代碼功能一致嗎 錯(cuò)誤處理分支信息表達(dá)清楚嗎 每一個(gè)模塊
21、單元的圈復(fù)雜度都小于 10 嗎 模塊內(nèi)做到了高內(nèi)聚、模塊之間達(dá)到了低藕合嗎 模塊的扇出不超出 7-9 之間嗎 屏蔽了沒有明確含義的輸入和按鍵嗎 常量、變量、類、數(shù)據(jù)結(jié)構(gòu)等命名有意義嗎 函數(shù)接口檢查 實(shí)參和形參的個(gè)數(shù)、屬性和次序一致嗎 對(duì)另一個(gè)模塊的每一次調(diào)用:全部所需的參數(shù)是否已傳送給每一個(gè)被調(diào)用的模塊被傳送的參數(shù)值是否正確設(shè)置 函數(shù)功能是否齊全 函數(shù)返回值類型正確嗎 return 語句是否返回指向“棧內(nèi)存”的“指針”或者“引用” 函數(shù)的返回值是否全面反應(yīng)了各種狀態(tài)和結(jié)果 程序語言檢查 動(dòng)態(tài)連接庫和外部設(shè)備接口驅(qū)動(dòng)程序使用正確嗎 動(dòng)態(tài)分配的指針是否在不使用之后刪除,并釋放內(nèi)存 調(diào)用類成員函數(shù)或
22、 api 函數(shù)時(shí),檢查了返回值嗎 文件、數(shù)據(jù)庫和注冊(cè)表等打開后,在對(duì)其進(jìn)行操作之后是否進(jìn)行了關(guān)閉 對(duì)于使用附帶例外的函數(shù)是否增加了例外處理程序?如對(duì)數(shù)據(jù)庫或文件操作。 變量的數(shù)據(jù)類型定義是否合理 程序中是否出現(xiàn)相同的局部變量和全部變量 數(shù)據(jù)類型轉(zhuǎn)換使用了正確的轉(zhuǎn)換函數(shù)并轉(zhuǎn)換正確嗎 是否使用了只用于調(diào)試版本的函數(shù)、宏等 有多個(gè)線程的程序中,資源分配是否合理,會(huì)不會(huì)造成死鎖 在使用 gdi 對(duì)象后是否進(jìn)行刪除 15檢查大項(xiàng) 檢查小項(xiàng) 是否 變量的作用域和生命期是否滿足設(shè)計(jì)的目的 表達(dá)式中運(yùn)算優(yōu)先級(jí)是否正確 是否忘記寫 switch 的 default 分支 使用 goto 語句時(shí)是否留下隱患? 例
23、如跳過了某些對(duì)象的構(gòu)造、變量的初始化、重要的計(jì)算等。 case 語句的結(jié)尾是否忘了加 break 如果有運(yùn)算符重載,則檢查運(yùn)算符重載是否正確 類檢查 類封裝是否合理,檢查成員函數(shù)和成員變量的訪問屬性是否滿足操作要求 外部可以修改類的行為嗎 內(nèi)聯(lián)函數(shù)代碼足夠小嗎 多重繼承中,虛擬函數(shù)定義明確嗎 繼承類和自定義類所封裝的函數(shù)和過程是否合理?類的功能是否詳細(xì),全面 是否使用了合理的類?查看該類使用時(shí)需要注意的問題。 是否違背編程規(guī)范而讓 c+ 編譯器自動(dòng)為類產(chǎn)生四個(gè)缺省的函數(shù):(1)缺 省的無參數(shù)構(gòu)造函數(shù);(2)缺省的拷貝構(gòu)造函數(shù);(3)缺省的析構(gòu)函數(shù);(4)缺省的賦值函數(shù)。 構(gòu)造函數(shù)中是否遺漏了某
24、些初始化工作 是否正確地使用構(gòu)造函數(shù)的初始化表 析構(gòu)函數(shù)中是否遺漏了某些清除工作 是否錯(cuò)寫、錯(cuò)用了拷貝構(gòu)造函數(shù)和賦值函數(shù) 賦值函數(shù)一般分四個(gè)步驟:(1)檢查自賦值;(2)釋放原有內(nèi)存資源;(3)分配新的內(nèi)存資源,并復(fù)制內(nèi)容;(4)返回 *this。是否遺漏了重要步驟? 是否違背了繼承和組合的規(guī)則? (1)若在邏輯上 b 是 a 的“一種”,并且 a 的所有功能和屬性對(duì) b 而言都有意義,則允許 b 繼承 a 的功能和屬性。(2)若在邏輯上 a 是 b 的“一部分”(a part of),則不允許 b 從 a 派生,而是要用 a 和其它東西組合出 b。 內(nèi)存檢查 每一個(gè)域在每一次使用前正確地初始
25、化了嗎 是否忘記為數(shù)組和動(dòng)態(tài)內(nèi)存賦初值(防止將未被初始化的內(nèi)存作為右值使用) 數(shù)組或指針的下標(biāo)是否越界 動(dòng)態(tài)內(nèi)存的申請(qǐng)與釋放是否配對(duì)(防止內(nèi)存泄漏) 是否有效地處理了“內(nèi)存耗盡”問題? 是否修改“指向常量的指針”的內(nèi)容 每個(gè)域是否已由正確的變量類型聲明 存儲(chǔ)區(qū)重復(fù)使用嗎可能出現(xiàn)沖突嗎 用 malloc 或 new 申請(qǐng)內(nèi)存之后,是否立即檢查指針值是否為 null(防止使用指針值為 null 的內(nèi)存) 檢查大項(xiàng) 檢查小項(xiàng) 是否 是否出現(xiàn)野指針?例如(1)指針變量沒有被初始化。(2)用 free 或 delete 釋放了內(nèi)存之后,忘記將指針設(shè)置為 null。 未使用的內(nèi)存中的內(nèi)容是否影響系統(tǒng)安全處
26、理是否得當(dāng) 測(cè)試和轉(zhuǎn)移檢查 是否進(jìn)行了浮點(diǎn)數(shù)相等比較 測(cè)試條件邏輯組合正確嗎 邏輯“或”中一個(gè)條件滿足就執(zhí)行對(duì)其它邏輯表達(dá)式有影響嗎 用于測(cè)試的是正確的變量嗎 每個(gè)轉(zhuǎn)移目標(biāo)正確并至少執(zhí)行一次嗎 三種情況(大于 0,小于 0,等于 0)是否已全部測(cè)試?邊界值是否進(jìn)行了測(cè)試 循環(huán)語句是否有正常跳出循環(huán)的條件嗎是否會(huì)出現(xiàn)死循環(huán)break 和continue 語句使用正確嗎 性能檢查 邏輯是否被最佳地編碼 提供的是一般的錯(cuò)誤處理還是異常的例程 對(duì)屏幕輸出操作,是否到達(dá)了最快的刷新速度效率是否為最佳需部分刷新區(qū)域的地方是否進(jìn)行了全部刷新 有無可優(yōu)化的程序塊、函數(shù)或子程序等 算法是否可以優(yōu)化 可維護(hù)性檢查
27、 注釋比例達(dá)到 25%以上嗎 標(biāo)號(hào)和子程序名符合代碼的意義嗎 是否使用了 goto 語句 是否使用了非通用的函數(shù)庫?對(duì)于非標(biāo)準(zhǔn)的庫是否提供了源程序 對(duì)于重復(fù)出現(xiàn)的常量是否定義了宏 對(duì)于重復(fù)出現(xiàn)并完成同樣單一功能的一段代碼,是否用函數(shù)對(duì)其進(jìn)行了封裝 避免過多的使用技巧性編程,如使用,是否作了詳細(xì)解釋說明 錯(cuò)誤或異常信息提示正確嗎 邏輯檢查 代碼是否正確地實(shí)現(xiàn)了設(shè)計(jì)功能 編碼是否做了設(shè)計(jì)所規(guī)定以外的內(nèi)容 每個(gè)循環(huán)是否執(zhí)行正確的次數(shù) 輸入?yún)?shù)的所有異常值是否已直接測(cè)試 邏輯判斷表達(dá)式符合程序設(shè)計(jì)嗎 軟件多余物 有沒有不可能執(zhí)行到的代碼 有沒有即使不執(zhí)行也不影響程序功能的指令?有沒有未引用的變量、標(biāo)號(hào)
28、和常量?有沒有多余的程序單元?附錄二:?jiǎn)卧獪y(cè)試 bug 清單單元測(cè)試 bug 清單下面由測(cè)試人員填寫 項(xiàng)目名稱 版本號(hào) bug id 用例 id 提交時(shí)間 提交人 email 提交給 email 問題名稱 問題描述 項(xiàng)目階段 需求分析 詳細(xì)設(shè)計(jì) 集成測(cè)試 驗(yàn)收測(cè)試 結(jié)構(gòu)設(shè)計(jì) 單元測(cè)試 系統(tǒng)測(cè)試 維護(hù) 問題類型 硬件 設(shè)計(jì) 編碼 建議 疑問 問題級(jí)別 重大 高 中 低 可再現(xiàn)否 是 否 不一定 再現(xiàn)描述 修改建議 備 注 下面由 bug 管理人員填寫 優(yōu)先級(jí) 立即解決 盡快解決 下一階段解決 可能的情況下解決 意見 對(duì)問題解決的意見,建議,修改期限等 是否納入 bug 管理 是 否 備 注 下面
29、由 問題解決者填寫 問題狀態(tài) 正在解決 無法再現(xiàn)問題 依照設(shè)計(jì) 已經(jīng)解決 保留 問題被撤回 已解決版本 解決時(shí)間 處理說明 下面由測(cè)試驗(yàn)證人員填寫 驗(yàn)證人 驗(yàn)證版本 驗(yàn)證時(shí)間 問題狀態(tài) 已經(jīng)解決 沒有解決 已經(jīng)解決但引起新的問題 已經(jīng)解決但引起新的問題 bug id 備 注 附錄三:驅(qū)動(dòng)模塊(類)模板 一般情況下,應(yīng)用軟件系統(tǒng)每個(gè)被測(cè)單元由一個(gè) c+類組成,由一些的.h 頭文件和.cpp 類實(shí)現(xiàn)文 件組成。則測(cè)試單元通??梢杂?3 個(gè)文件組成,測(cè)試單元頭文件,測(cè)試單元實(shí)現(xiàn)文件和測(cè)試主函數(shù)文件。 假定被測(cè)類類名為 democlass,測(cè)試單元命名為 demounit,如果一個(gè)測(cè)試單元只測(cè)試一個(gè)被
30、測(cè)類,可以 使 demounit 與 democlass 一致,則這 3 個(gè)文件分別取名為: u 測(cè)試單元頭文件: u 測(cè)試單元實(shí)現(xiàn)文件: u 測(cè)試主函數(shù)文件: 以下以描述這 3 個(gè)的框架結(jié)構(gòu)。一個(gè)完整的 demo 可以參考 democlass 測(cè)試單元7。 1) 測(cè)試單元頭文件 測(cè)試單元頭文件采用 cppunit 規(guī)范定義測(cè)試類,聲明測(cè)試用例方法。對(duì)于被測(cè)類 democlass, 其測(cè)試單元頭文件取名為 ,其結(jié)構(gòu)如下所示: /* democlass 測(cè)試代碼頭文件 */ #include "./" /* 包含被測(cè)單元的頭文件(在上層目錄中) */ #include <
31、;cppunit/>/* 使用 testfixture 類 */ #include <cppunit/extensions/>/* 使用 helper macros */ #include <cppunit/>/* 使用 testsuite 類*/ class democlasstest : public cppunit:testfixture /* 繼承 testfixture 定義測(cè)試類 */ public: cppunit_test_suite( democlasstest );/* 聲明 testsuite 名,與測(cè)試類一致 */ cppunit_test
32、( test_tc1 );/* 在 testsuite 中添加測(cè)試用例 */ cppunit_test( test_tc2 );/* 在 testsuite 中添加測(cè)試用例 */ /* 在 testsuite 中添加其他測(cè)試用例 */ cppunit_test_suite_end();/* testsuite 聲明結(jié)束*/ protected: demo_unit *unit1, *unit2, *unit3;/* 測(cè)試過程涉及的被測(cè)類對(duì)象指針,在 setup()函數(shù)中 動(dòng)態(tài)建立并初使化,在 teardown() 函數(shù)中撤銷 */ . public: void setup();/* 測(cè)試準(zhǔn)備或
33、建立測(cè)試環(huán)境*/ void teardown(); void test_tc1(); /* /* 測(cè)試結(jié)束撤銷測(cè)試環(huán)境,如釋放動(dòng)態(tài)變量等 */ 測(cè)試用例方法定義*/ void test_tc2(); /* 測(cè)試用例方法定義*/ . /* 其他測(cè)試用例方法聲明*/ /* 開發(fā)者自定義的其他數(shù)據(jù)成員和方法成員定義 */ 2) 測(cè)試單元實(shí)現(xiàn)文件 測(cè)試單元實(shí)現(xiàn)文件實(shí)現(xiàn)測(cè)試單元頭文件中定義的各個(gè)測(cè)試用例方法和測(cè)試類的其他方法成員。對(duì)應(yīng) 上述測(cè)試單元頭文件,相應(yīng)的測(cè)試單元實(shí)現(xiàn)文件為 ,其結(jié)構(gòu)表示如下: /* demo unit 測(cè)試單元 源代碼 */ #include "" /* 包含
34、 democlass 的測(cè)試單元頭文件 */ #include <>/* stl 的 std:string 類*/ #include <>/* io 流定義頭文件*/ #include <cppunit/> /* 程序中用到了 testassert 類*/ /* 在 cppunit 中注冊(cè) democlass 的 testsuite,測(cè)試類名一致 */ cppunit_test_suite_registration( democlasstest); void democlasstest:setup()/* 建立測(cè)試環(huán)境*/ unit1 = new democ
35、lass( 1, 2 );/* 如創(chuàng)建被測(cè)類對(duì)象*/ . void democlasstest:teardown()/* 銷毀測(cè)試環(huán)境*/ delete unit1;/* 釋放被測(cè)對(duì)象*/ void democlasstest:test_tc1()/* 的測(cè)試用例方法 1 的實(shí)現(xiàn) */ /* 測(cè)試用例方法的實(shí)現(xiàn)代碼,測(cè)試人員在代碼中調(diào)用被測(cè)模塊的方法進(jìn)行測(cè)試,通過 cppunit 的 assert 宏檢查被測(cè)模塊代碼的運(yùn)行是否正確,并報(bào)告異常*/ /* 執(zhí)行到測(cè)試用例方法的最后,意味在此之前沒有發(fā)生測(cè)試異常事件,意味者本測(cè)試用例成 功,添加一個(gè)語句輸出本測(cè)試用例信息及其測(cè)試成功的信息,其格式為: "pass: <測(cè)試用例方法名稱>,<測(cè)試用例功能描述> <換行符> */ cout<<"pass: test_tc1,測(cè)試 demo class 的構(gòu)造函數(shù)正確性n" /* 最后添加測(cè)試類其他方法的實(shí)現(xiàn)*/ 3) 測(cè)試主函數(shù)文件 測(cè)試單元主函數(shù)用于執(zhí)行測(cè)試類中定義的各種測(cè)試用例方法,執(zhí)行各個(gè)測(cè)試用例,如果我們充 分利用 cppunit 提供的宏來書寫測(cè)試單元,測(cè)試單元主
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地理課題申報(bào)項(xiàng)目書范文
- 小學(xué)街舞課題申報(bào)書范文
- 課題申報(bào)書檢索怎么寫
- 體育校級(jí)課題申報(bào)書模板
- 單位家電清洗合同范例
- 課題申報(bào)書作業(yè)設(shè)計(jì)模板
- 廚房砌磚合同范本
- 體育強(qiáng)國課題申報(bào)書
- 數(shù)學(xué)作業(yè)課題申報(bào)書格式
- 買隨車吊合同范本
- 2025年黑龍江林業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫審定版
- 中國家用通風(fēng)電器具制造行業(yè)分析報(bào)告
- 天津2025年天津市住房公積金管理中心招聘9人筆試歷年參考題庫附帶答案詳解-1
- 2025成人禮暨高三百日誓師校長(zhǎng)演講稿-追夢(mèng)不覺天涯遠(yuǎn) 奮斗深感百日短
- 區(qū)間價(jià)格突破策略(TB版)
- 小學(xué)科學(xué)新課標(biāo)科學(xué)課程標(biāo)準(zhǔn)解讀
- 高中主題班會(huì) 遠(yuǎn)離背后“蛐蛐”課件-高二下學(xué)期人際交往主題班會(huì)
- DeepSeek科普課件深度解析
- 湖南省長(zhǎng)沙市北雅中學(xué)2024-2025學(xué)年九年級(jí)下學(xué)期開學(xué)考試英語試題(含答案含聽力原文無音頻)
- 大模型應(yīng)用服務(wù)平臺(tái)建設(shè)研究
- 2024年02月北京2024年江蘇銀行北京分行春季校園招考筆試歷年參考題庫附帶答案詳解
評(píng)論
0/150
提交評(píng)論