《游戲軟件測試培訓(xùn)資料游戲測試課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《游戲軟件測試培訓(xùn)資料游戲測試課件(32頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),#,游戲軟件測試,主講人:徐麗,游戲軟件測試主講人:徐麗,1,4.7 可測性,4.7.1 要有一套統(tǒng)一打印函數(shù)及詳細(xì)的說明,在同一項(xiàng)目組或產(chǎn)品組內(nèi),要有一套統(tǒng)一的為集成測試與系統(tǒng)聯(lián)調(diào)準(zhǔn)備的調(diào)測開關(guān)及相應(yīng)打印函數(shù),并且要有詳細(xì)的說明。,說明:本規(guī)則是針對(duì)項(xiàng)目組或產(chǎn)品組的。,4.7.2 信息串的格式要統(tǒng)一,在同一項(xiàng)目組或產(chǎn)品組內(nèi),調(diào)測打印出的信息串的格式要有統(tǒng)一的形式。信息串中至少要有所在模塊名(或源文件名)及行號(hào)。,說明:統(tǒng)一的調(diào)測信息格式便于集成測試。,4.7 可測性,2,4.7.3 選擇恰當(dāng)?shù)臏y試點(diǎn),編程的同
2、時(shí)要為單元測試選擇恰當(dāng)?shù)臏y試點(diǎn),并仔細(xì)構(gòu)造測試代碼、測試用例,同時(shí)給出明確的注釋說明。測試代碼部分應(yīng)作為(模塊中的)一個(gè)子模塊,以方便測試代碼在模塊中的安裝與拆卸(通過調(diào)測開關(guān))。,說明:為單元測試而準(zhǔn)備。,4.7.4 集成測試/系統(tǒng)聯(lián)調(diào)之前的準(zhǔn)備,在進(jìn)行集成測試/系統(tǒng)聯(lián)調(diào)之前,要構(gòu)造好測試環(huán)境、測試項(xiàng)目及測試用例,同時(shí)仔細(xì)分析并優(yōu)化測試用例,以提高測試效率。,說明:好的測試用例應(yīng)盡可能模擬出程序所遇到的邊界值、各種復(fù)雜環(huán)境及一些極端情況等。,4.7.3 選擇恰當(dāng)?shù)臏y試點(diǎn),3,4.7.5 使用斷言來發(fā)現(xiàn)軟件問題,使用斷言來發(fā)現(xiàn)軟件問題,提高代碼可測性。,說明:斷言是對(duì)某種假設(shè)條件進(jìn)行檢查(可理
3、解為若條件成立則無動(dòng)作,否則應(yīng)報(bào)告),它可以快速發(fā)現(xiàn)并定位軟件問題,同時(shí)對(duì)系統(tǒng)錯(cuò)誤進(jìn)行自動(dòng)報(bào)警。斷言可以對(duì)在系統(tǒng)中隱藏很深,用其它手段極難發(fā)現(xiàn)的問題進(jìn)行定位,從而縮短軟件問題定位時(shí)間,提高系統(tǒng)的可測性。實(shí)際應(yīng)用時(shí),可根據(jù)具體情況靈活地設(shè)計(jì)斷言。,4.7.5 使用斷言來發(fā)現(xiàn)軟件問題,4,4.7.6 使用斷言檢查非法情況,用斷言來檢查程序正常運(yùn)行時(shí)不應(yīng)發(fā)生但在調(diào)測時(shí)有可能發(fā)生的非法情況。,4.7.7斷言的正確使用,不能用斷言來檢查最終產(chǎn)品肯定會(huì)出現(xiàn)且必須處理的錯(cuò)誤情況。,說明:斷言是用來處理不應(yīng)該發(fā)生的錯(cuò)誤情況的,對(duì)于可能會(huì)發(fā)生的且必須處理的情況要寫防錯(cuò)程序,而不是斷言。如某模塊收到其它模塊或鏈路
4、上的消息后,要對(duì)消息的合理性進(jìn)行檢查,此過程為正常的錯(cuò)誤檢查,不能用斷言來實(shí)現(xiàn)。,4.7.6 使用斷言檢查非法情況,5,4.7.8 對(duì)較復(fù)雜的斷言加上明確的注釋,說明:為復(fù)雜的斷言加注釋,可澄清斷言含義并減少不必要的誤用。,4.7.9 用斷言確認(rèn)函數(shù)的參數(shù),示例:假設(shè)某函數(shù)參數(shù)中有一個(gè)指針,那么使用指針前可對(duì)它檢查,如下。,int ExamFun(unsigned char*str),EXAM_ASSERT(str!=NULL);,/用斷言檢查“假設(shè)指針不為空”這個(gè)條件,.,/other program code,4.7.8 對(duì)較復(fù)雜的斷言加上明確的注釋,6,4.7.10 確保不使用沒有定義的
5、特性或功能,用斷言保證沒有定義的特性或功能不被使用。,示例:假設(shè)某通信模塊在設(shè)計(jì)時(shí),準(zhǔn)備提供“無連接”和“連接”這兩種業(yè)務(wù)。但當(dāng)前的版本中僅實(shí)現(xiàn)了“無連接”業(yè)務(wù),且在此版本的正式發(fā)行版中,用戶(上層模塊)不應(yīng)產(chǎn)生“連接”業(yè)務(wù)的請(qǐng)求,那么在測試時(shí)可用斷言檢查用戶是否使用“連接”業(yè)務(wù)。,4.7.10 確保不使用沒有定義的特性或功能,7,#define EXAM_CONNECTIONLESS 0 /無連接業(yè)務(wù),#define EXAM_CONNECTION 1 /連接業(yè)務(wù),int MsgProcess(EXAM_MESSAGE *msg),unsigned char service;,/*messa
6、ge service class*/,EXAM_ASSERT(msg!=NULL);,service=GetMsgServiceClass(msg);,EXAM_ASSERT(service!=EXAM_CONNECTION);,/假設(shè)不使用連接業(yè)務(wù),.,/other program code,#define EXAM_CONNECTIONLESS 0,8,4.7.11 用斷言對(duì)程序開發(fā)環(huán)境的假設(shè)進(jìn)行檢查,用斷言對(duì)程序開發(fā)環(huán)境(OS/Compiler/Hardware)的假設(shè)進(jìn)行檢查。,說明:程序運(yùn)行時(shí)所需的軟硬件環(huán)境及配置要求,不能用斷言來檢查,而必須由一段專門代碼處理。用斷言僅可對(duì)程序開發(fā)
7、環(huán)境中的假設(shè)及所配置的某版本軟硬件是否具有某種功能的假設(shè)進(jìn)行檢查。如某網(wǎng)卡是否在系統(tǒng)運(yùn)行環(huán)境中配置了,應(yīng)由程序中正式代碼來檢查;而此網(wǎng)卡是否具有某設(shè)想的功能,則可由斷言來檢查。,4.7.11 用斷言對(duì)程序開發(fā)環(huán)境的假設(shè)進(jìn)行檢查,9,對(duì)編譯器提供的功能及特性假設(shè)可用斷言檢查,原因是軟件最終產(chǎn)品(即運(yùn)行代碼或機(jī)器碼)與編譯器已沒有任何直接關(guān)系,即軟件運(yùn)行過程中(注意不是編譯過程中)不會(huì)也不應(yīng)該對(duì)編譯器的功能提出任何需求。,示例:用斷言檢查編譯器的int型數(shù)據(jù)占用的內(nèi)存空間是否為2,如下。,EXAM_ASSERT(sizeof(int)=2);,4.7.12 正式軟件產(chǎn)品中應(yīng)把斷言及其它調(diào)測代碼去掉
8、,正式軟件產(chǎn)品中應(yīng)把斷言及其它調(diào)測代碼去掉(即把有關(guān)的調(diào)測開關(guān)關(guān)掉)。,說明:加快軟件運(yùn)行速度。,對(duì)編譯器提供的功能及特性假設(shè)可用斷言檢查,原因是軟件,10,4.7.13 不能影響軟件實(shí)現(xiàn)的功能,在軟件系統(tǒng)中設(shè)置與取消有關(guān)測試手段,不能對(duì)軟件實(shí)現(xiàn)的功能等產(chǎn)生影響。,說明:即有測試代碼的軟件和關(guān)掉測試代碼的軟件,在功能行為上應(yīng)一致。,4.7.14 減少維護(hù)的難度,用調(diào)測開關(guān)來切換軟件的DEBUG版和正式版,而不要同時(shí)存在正式版本和DEBUG版本的不同源文件,以減少維護(hù)的難度。,4.7.13 不能影響軟件實(shí)現(xiàn)的功能,11,4.7.15 確保軟件版本在實(shí)現(xiàn)功能上的一致性,軟件的DEBUG版本和發(fā)行版
9、本應(yīng)該統(tǒng)一維護(hù),不允許分家,并且要時(shí)刻注意保證兩個(gè)版本在實(shí)現(xiàn)功能上的一致性。,4.7.16 編寫代碼之前要注意的事項(xiàng),在編寫代碼之前,應(yīng)預(yù)先設(shè)計(jì)好程序調(diào)試與測試的方法和手段,并設(shè)計(jì)好各種調(diào)測開關(guān)及相應(yīng)測試代碼如打印函數(shù)等。,說明:程序的調(diào)試與測試是軟件生存周期中很重要的一個(gè)階段,如何對(duì)軟件進(jìn)行較全面、高率的測試并盡可能地找出軟件中的錯(cuò)誤就成為很關(guān)鍵的問題。因此在編寫源代碼之前,除了要有一套比較完善的測試計(jì)劃外,還應(yīng)設(shè)計(jì)出一系列代碼測試手段,為單元測試、集成測試及系統(tǒng)聯(lián)調(diào)提供方便。,4.7.15 確保軟件版本在實(shí)現(xiàn)功能上的一致性,12,4.7.17 調(diào)測開關(guān)應(yīng)分為不同級(jí)別和類型,調(diào)測開關(guān)應(yīng)分為不
10、同級(jí)別和類型。,說明:調(diào)測開關(guān)的設(shè)置及分類應(yīng)從以下幾方面考慮:針對(duì)模塊或系統(tǒng)某部分代碼的調(diào)測;針對(duì)模塊或系統(tǒng)某功能的調(diào)測;出于某種其它目的,如對(duì)性能、容量等的測試。這樣做便于軟件功能的調(diào)測,并且便于模塊的單元測試、系統(tǒng)聯(lián)調(diào)等。,4.7.18 用斷言宣布發(fā)生錯(cuò)誤,編寫防錯(cuò)程序,然后在處理錯(cuò)誤之后可用斷言宣布發(fā)生錯(cuò)誤。,4.7.17 調(diào)測開關(guān)應(yīng)分為不同級(jí)別和類型,13,4.8 程序效率,4.8.1 編程時(shí)要經(jīng)常注意代碼的效率,說明:代碼效率分為全局效率、局部效率、時(shí)間效率及空間效率。全局效率是站在整個(gè)系統(tǒng)的角度上的系統(tǒng)效率;局部效率是站在模塊或函數(shù)角度上的效率;時(shí)間效率是程序處理輸入任務(wù)所需的時(shí)間
11、長短;空間效率是程序所需內(nèi)存空間,如機(jī)器代碼空間大小、數(shù)據(jù)空間大小、??臻g大小等。,4.8.2 提高代碼效率,在保證軟件系統(tǒng)的正確性、穩(wěn)定性、可讀性及可測性的前提下,提高代碼效率。,說明:不能一味地追求代碼效率,而對(duì)軟件的正確性、穩(wěn)定性、可讀性及可測性造成影響。,4.8 程序效率,14,4.8.3 局部效率與全局效率,局部效率應(yīng)為全局效率服務(wù),不能因?yàn)樘岣呔植啃识鴮?duì)全局效率造成影響。,4.8.4 提高空間效率,通過對(duì)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的劃分與組織的改進(jìn),以及對(duì)程序算法的優(yōu)化來提高空間效率。,說明:這種方式是解決軟件空間效率的根本辦法。,4.8.3 局部效率與全局效率,15,示例:如下記錄學(xué)生學(xué)習(xí)成
12、績的結(jié)構(gòu)不合理。,typedef unsigned char BYTE;,typedef unsigned short WORD;,typedef struct STUDENT_SCORE_STRU,BYTE name8;,BYTE age;,BYTE sex;,BYTE class;,BYTE subject;,float score;,STUDENT_SCORE;,示例:如下記錄學(xué)生學(xué)習(xí)成績的結(jié)構(gòu)不合理。,16,因?yàn)槊课粚W(xué)生都有多科學(xué)習(xí)成績,故如上結(jié)構(gòu)將占用較大空間。應(yīng)如下改進(jìn)(分為兩個(gè)結(jié)構(gòu)),總的存貯空間將變小,操作也變得更方便。,typedef struct STUDENT_STRU,
13、BYTE name8;,BYTE age;,BYTE sex;,BYTE class;,STUDENT;,typedef struct STUDENT_SCORE_STRU,WORD studentIndex;,BYTE subject;,float score;,STUDENT_SCORE;,因?yàn)槊课粚W(xué)生都有多科學(xué)習(xí)成績,故如上結(jié)構(gòu)將占用較大空間。應(yīng)如,17,4.8.5 循環(huán)體內(nèi)工作量最小化,說明:應(yīng)仔細(xì)考慮循環(huán)體內(nèi)的語句是否可以放在循環(huán)體之外,使循環(huán)體內(nèi)工作量最小,從而提高程序的時(shí)間效率。,示例:如下代碼效率不高。,for(ind=0;ind MAX_ADD_NUMBER;ind+),su
14、m+=ind;,backSum=sum;,/*backup sum*/,4.8.5 循環(huán)體內(nèi)工作量最小化,18,4.8.6 算法的優(yōu)化,仔細(xì)分析有關(guān)算法,并進(jìn)行優(yōu)化。,4.8.7 改進(jìn)系統(tǒng)及模塊處理輸入的方式,仔細(xì)考查、分析系統(tǒng)及模塊處理輸入(如事務(wù)、消息等)的方式,并加以改進(jìn)。,4.8.8 提高程序效率,對(duì)模塊中函數(shù)的劃分及組織方式進(jìn)行分析、優(yōu)化,改進(jìn)模塊中函數(shù)的組織結(jié)構(gòu),提高程序效率。,說明:軟件系統(tǒng)的效率主要與算法、處理任務(wù)方式、系統(tǒng)功能及函數(shù)結(jié)構(gòu)有很大關(guān)系,僅在代碼上下功夫一般不能解決根本問題。,4.8.6 算法的優(yōu)化,19,4.8.9 留心代碼效率,編程時(shí),要隨時(shí)留心代碼效率;優(yōu)化代
15、碼時(shí),要考慮周全。,4.8.10 恰當(dāng)優(yōu)化代碼提高效率,不應(yīng)花過多的時(shí)間拼命地提高調(diào)用不很頻繁的函數(shù)代碼效率。,說明:對(duì)代碼優(yōu)化可提高效率,但若考慮不周很有可能引起嚴(yán)重后果。,4.8.11 慎重使用匯編嵌入方式,要仔細(xì)地構(gòu)造或直接用匯編編寫調(diào)用頻繁或性能要求極高的函數(shù)。,說明:只有對(duì)編譯系統(tǒng)產(chǎn)生機(jī)器碼的方式以及硬件系統(tǒng)較為熟悉時(shí),才可使用匯編嵌入方式。嵌入?yún)R編可提高時(shí)間及空間效率,但也存在一定風(fēng)險(xiǎn)。,4.8.9 留心代碼效率,20,4.8.12 提高空間效率,在保證程序質(zhì)量的前提下,通過壓縮代碼量、去掉不必要代碼以及減少不必要的局部和全局變量,來提高空間效率。,說明:這種方式對(duì)提高空間效率可起
16、到一定作用,但往往不能解決根本問題。,4.8.13 在多重循環(huán)中,應(yīng)將最忙的循環(huán)放在最內(nèi)層,說明:減少CPU切入循環(huán)層的次數(shù)。,4.8.12 提高空間效率,21,示例:如下代碼效率不高。,for(row=0;row 100;row+),for(col=0;col 5;col+),sum+=arowcol;,可以改為如下方式,以提高效率。,for(col=0;col 5;col+),for(row=0;row 100;row+),sum+=arowcol;,示例:如下代碼效率不高。,22,4.8.14 盡量減少循環(huán)嵌套層次,4.8.15 避免循環(huán)體內(nèi)含判斷語句,避免循環(huán)體內(nèi)含判斷語句,應(yīng)將循環(huán)語句置于判斷語句的代碼塊之中。,說明:目的是減少判斷次數(shù)。循環(huán)體中的判斷語句是否可以移到循環(huán)體外,要視程序的具體情況而言,一般情況,與循環(huán)變量無關(guān)的判斷語句可以移到循環(huán)體外,而有關(guān)的則不可以。,4.8.14 盡量減少循環(huán)嵌套層次,23,示例:如下代碼效率稍低。,for(ind=0;ind MAX_RECT_NUMBER;ind+),if(dataType=RECT_AREA),areaSum+=re