




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,4.1 結(jié)構(gòu)化程序設(shè)計(jì),4.1.1 程序設(shè)計(jì)語言的選擇 4.1.2 程序設(shè)計(jì)風(fēng)格,4 軟件編碼與軟件測(cè)試,2,4.1.1 程序設(shè)計(jì)語言的選擇,程序設(shè)計(jì)語言的分類 根據(jù)語言級(jí)別,分為以下幾類: 機(jī)器語言: 匯編語言 高級(jí)語言,例:用某臺(tái)計(jì)算機(jī)指令系統(tǒng)編寫計(jì)算D=A+B*C的程序。設(shè)分配給A、B、C、D的地址分別為:200、202、204、206。機(jī)器語言程序如下: 003 0003 000202 把B的值送到 006 0003 000204 把C的值與3號(hào)寄存器中的值相乘,結(jié)果放在3號(hào)寄存器 004 0003 000200 把A的值與3號(hào)寄存器中的值相加,結(jié)果放在3號(hào)寄存器 002 0003
2、 000206 把3號(hào)寄存器中的值送入內(nèi)存中D的存儲(chǔ)單元。,3,匯編語言程序: LOG REG3 C MUL REG3 B ADD REG3 A STR REG3 D,高級(jí)語言程序: D=A+B*C,一般情況下,我們采用高級(jí)語言來編程,選擇的原則: 開發(fā)環(huán)境 產(chǎn)品的應(yīng)用領(lǐng)域 :Fortran、C語言、Sql、Ada、lisp 系統(tǒng)用戶的要求 程序員的知識(shí)水平,4,4.1.2 程序設(shè)計(jì)風(fēng)格,一、 程序內(nèi)部的文檔書寫風(fēng)格: 恰當(dāng)?shù)臉?biāo)識(shí)符(變量和函數(shù))的名字; 適當(dāng)?shù)淖⑨專?程序的視覺組織。,5,1、標(biāo)識(shí)符的命名 名字的選取應(yīng)含義鮮明,能正確地提示程序?qū)ο笏淼膶?shí)體。例如,表示次數(shù)用times,表
3、示總量用total等 名字的長(zhǎng)度不應(yīng)限制。如果名字使用縮寫,那么縮寫規(guī)則應(yīng)該一致,并且應(yīng)該給每個(gè)名字加上注解,以方便閱讀。 enum QQGender QQMale = 0, 值為0,表示男性,其他責(zé)女性 QQFemale ; 良好的編碼習(xí)慣,如匈牙利規(guī)則 匈牙利命名法是一種編程時(shí)的命名規(guī)范?;驹瓌t是:變量名屬性類型對(duì)象描述 ,Charles Simonyi 如:一般前綴命名規(guī)范 前綴 類型 實(shí)例 g_全局變量g_Servers m_ 成員變量 m_pDoc,m_nCustomers,6,sz Zero terminated String 以0結(jié)尾的字符串 tm Text metric 文本
4、規(guī)則 u Unsigned int 無符號(hào)整數(shù) ul Unsigned long (ULONG) 無符號(hào)長(zhǎng)整數(shù) w WORD (unsigned short) 無符號(hào)短整數(shù) x,y x, y coordinates (short) 坐標(biāo)值/短整數(shù) v void 空 有關(guān)項(xiàng)目的全局變量用g_開始,類成員變量用m_,局部變量若函數(shù)較大則可考慮用l_用以顯示說明其是局部變量。 前綴類型例子 g_全局變量g_Servers C類或者結(jié)構(gòu)體CDocument,CPrintInfo m_成員變量m_pDoc,m_nCustomers,a Array 數(shù)組 b BOOL (int) 布爾(整數(shù)) by Un
5、signed Char (Byte) 無符號(hào)字符(字節(jié)) c Char 字符(字節(jié)) cb Count of bytes 字節(jié)數(shù) cr Color reference value 顏色(參考)值 cx Count of x (Short) x的集合(短整數(shù)) dw DWORD (unsigned long) 雙字(無符號(hào)長(zhǎng)整數(shù)) f Flags (usually multiple bit values) 標(biāo)志(一般是有多位的數(shù)值) fn Function 函數(shù) g_ global 全局的 h Handle 句柄 i Integer 整數(shù) l Long 長(zhǎng)整數(shù) lp Long pointer 長(zhǎng)
6、指針 m_ Data member of a class 一個(gè)類的數(shù)據(jù)成員 n Short int 短整數(shù) p Pointer 指針 s String 字符串,7,VC常用前綴列表: 前綴類型描述例子 chchar8位字符chGrade chTCHAR16位UNICODE類型字符chName bBOOL布爾變量bEnabled nint整型(其大小由操作系統(tǒng)決定)nLength nUINT無符號(hào)整型(其大小由操作系統(tǒng)決定)nLength wWORD16位無符號(hào)整型wPos lLONG32位有符號(hào)整型lOffset dwDWORD32位無符號(hào)整型dwRange p*Ambient memory
7、model pointer 內(nèi)存模塊指針,指針變量pDoc lpFAR*長(zhǎng)指針lpDoc lpszLPSTR32位字符串指針lpszName lpszLPCSTR32位常量字符串指針lpszName lpszLPCTSTR32位UNICODE類型常量指針lpszName hhandleWindows對(duì)象句柄hWnd lpfn(*fn)()回調(diào)函數(shù)指針 Callback Far pointer to CALLBACK functionlpfnAbort,8,2、程序的注釋 程序的注釋分為兩種:序言性注釋和功能性注釋。 序言性注釋由如下: 有關(guān)本模塊功能說明、主要算法、接口描述、有關(guān)數(shù)據(jù)描述、模塊
8、位置、開發(fā)簡(jiǎn)歷:,功能性注釋嵌入在源程序體內(nèi),用以描述其后的語句或程序段的處理功能。 例如,對(duì)于“ave=toal/num”的注釋應(yīng)該是:“總量除以人數(shù)求得均值”,而不應(yīng)該是“toal除以num得ave”。,9,#include StdAfx.h #include ConfigMod.h /*全局變量定義部分開始*/ int g_MainLev ; /設(shè)置主目錄檢索層次數(shù),初始化值是0; DirSettingLink *g_DirRoot ; /用于記錄系統(tǒng)對(duì)特殊目錄的設(shè)置,初始化值是NULL; /用于記錄需要包含/排除的文件名,初始化時(shí),全部清零; char g_FilesSettingMA
9、XSPFILENUMMAXFILELEN+1; FileModeSel g_FileMode; /用于記錄是包含類型還是排除類型,初始化值是INCLUDE; RstSorttingg_RstSort; /用于記錄文件檢索結(jié)果排序的方式,初始化值是PATHNAME; /這里使用三位掩碼123,第一位掩碼表示是否顯示文件名,第二位掩碼表示是否顯示相 /對(duì)路徑名,第三位掩碼表示是否顯示規(guī)模,初始化值是6(110); unsigned char g_RstCon; char g_ErrMsgMAXERRMSGLEN+1; /用于記錄最近的一次錯(cuò)誤信息,初始化時(shí),全部清零; /該全局變量?jī)H共模塊內(nèi)使用,
10、不對(duì)外提供接口,用于GetFirstDirSetting,GetNextDirSetting /的遍歷 DirSettingLink *g_Point; /該全局變量?jī)H共模塊內(nèi)使用,不對(duì)外提供接口,用于GetFirstFileSetting,GetNextFileSetting /的遍歷 int g_Order; /*全局變量定義部分結(jié)束*/ /*接口函數(shù)實(shí)現(xiàn)部分開始*/ /* 功能簡(jiǎn)述:配置模塊全局變量初始化接口 輸入?yún)?shù):無 輸出參數(shù):無 返回值:無 備注:對(duì)配置模塊的全局變量進(jìn)行初始化 */ void WINAPI ConfigModInit ( void ) g_MainLev = 0
11、; g_DirRoot = NULL; memset(g_FilesSetting,0,MAXSPFILENUM*(MAXFILELEN+1); g_FileMode = INCLUDE; g_RstSort = PATHNAME; g_RstCon = 6; memset(g_ErrMsg,0,MAXERRMSGLEN); g_Point = NULL; g_Order = 0; /* 功能簡(jiǎn)述:配置模塊資源釋放接口 輸入?yún)?shù):無 輸出參數(shù):無 返回值:無 備注:對(duì)配置模塊申請(qǐng)的資源進(jìn)行釋放 */ void WINAPI ConfigModRelease ( void ) DirSettin
12、gLink *l_Link ; l_Link = g_DirRoot; while(l_Link) g_DirRoot = l_Link-next; l_Link-next = NULL; delete l_Link-m_node.m_dirname; delete l_Link; l_Link = g_DirRoot; /*,10,3.程序的視覺組織 用分層縮進(jìn)的寫法顯示嵌套結(jié)構(gòu)層次; 在注釋段周圍加上邊框; 注釋段與程序段、以及不同的程序段之間插入空行; 每行只寫一條語句; 書寫表達(dá)式時(shí)適當(dāng)使用空格或圓括號(hào)作隔離符。,11,二、數(shù)據(jù)說明 數(shù)據(jù)說明的次序應(yīng)當(dāng)標(biāo)準(zhǔn)化,有次序,當(dāng)多個(gè)變量名在一個(gè)
13、語句中說明時(shí),應(yīng)該按字母順序排列這些變量。 變量說明不要遺漏,變量的類型、長(zhǎng)度、存儲(chǔ)及初始化要正確。 如果設(shè)計(jì)時(shí)使用了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)注解說明用程序設(shè)計(jì)語言實(shí)現(xiàn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)。,12,/定義了消息的格式 const DWORD QQSERVERPORT = 50000; const DWORD QQCLIENTPORT = 50001; /注冊(cè)信息相關(guān)屬性 const int NICKNAMELEN = 10; const int PASSWORDLEN = 16; const int COUNTRYLEN = 30; const int PROVINCELEN = 10;
14、const int CITYLEN = 10; const int PERSONALSIGNATURELEN = 200; const int IPLEN = 20; const int MESSAGEMAXLEN = 2000; /登入信息相關(guān)屬性 /這個(gè)請(qǐng)求注冊(cè)的內(nèi)容 struct SQQRegister char acQQNicknameNICKNAMELEN; char acTrueNameNICKNAMELEN; char acQQPasswordPASSWORDLEN; QQGender eQQGender; char acCountryCOUNTRYLEN; char acPro
15、vincePROVINCELEN; char acCityCITYLEN; UCHAR uAge; char acPersonalSignaturePERSONALSIGNATURELEN; ; /應(yīng)答結(jié)構(gòu)體 struct SQQRegisterReply QQStatus eQQStatus; char acQQNumberQQNumberLen+1; ;,13,三、語句構(gòu)造應(yīng)遵循簡(jiǎn)單明了的原則 不要為了節(jié)省空間而把多個(gè)語句寫在同一行 盡量避免復(fù)雜的循環(huán)嵌套和條件嵌套,不宜超3 盡量避免使用“非”條件的條件語句; 利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀; 注意GOTO語句的使用
16、可讀性,例1: FOR I :=1 TO N DO FOR j :=1 TO N DO VI,j :=(I DIV J)*(J DIV I);,例子:建立一個(gè)NN的單位矩陣V。,14,例2:程序段功能是交換元素aj和aj+1。為少一個(gè)變量程序的易讀性差。 aj :=aj + aj+1; aj+1 := aj - aj+1; aj :=aj - aj+1;,為了改善程序的易讀性,應(yīng)采用直截了當(dāng)?shù)拿枋龇绞健?15,四、輸入/輸出語句 對(duì)所有輸入數(shù)據(jù)都進(jìn)行校驗(yàn),以保證每個(gè)數(shù)據(jù)的有效性; 使得輸入的步驟和操作盡可能簡(jiǎn)單,并保持簡(jiǎn)單的輸入格式; 輸入一批數(shù)據(jù)時(shí),使用輸入結(jié)束指示符,不要要求用戶說明輸入項(xiàng)
17、數(shù); 輸出要正確,不要有文字錯(cuò)誤。 輸出的報(bào)表設(shè)計(jì)要符合用戶要求,五、程序效率 效率是一個(gè)性能要求,因而應(yīng)該在需求分析階段確定代碼效率方面的要求; 通過好的設(shè)計(jì)可以提高效率; 程序的效率和程序的簡(jiǎn)明程度是一致的,不應(yīng)該為了提高代碼效率而犧牲程序的清晰性和可讀性。,16,補(bǔ)充作業(yè)根據(jù)匈牙利規(guī)則或Vc規(guī)則修改如下代碼,#include #include #include #define max 26 typedef struct node char name20; char sno20; char tel20; struct node *next; nodetype; typedef struct
18、 nodetype *datamax; openhash; void save(openhash *p) FILE *fp; int i; if(fp=fopen(c:stu,w+)=NULL) printf(connot open filen); return; /*for(i=0;idatai,sizeof(struct node),1,fp)!=1) printf(file write errorn); fclose(fp); void duqu(openhash *p) FILE *fp; int i; fp=fopen(c:stu,rb); /*for(i=0;idatai,size
19、of(struct node),1,fp); fclose(fp); int hash(char key) int n; n=key-a; return n; openhash *create_openhash(openhash *p)/*創(chuàng)建哈希表*/ char f;int m,i,addr;nodetype *n,*s; n=(nodetype *)malloc(sizeof(nodetype);/*申請(qǐng)空間*/ n-next=NULL; /*初始化學(xué)生信息*/ printf(請(qǐng)輸入姓名的漢語拼音:); scanf(%s,n-name); printf(請(qǐng)輸入學(xué)號(hào):); scanf(%s,
20、n-sno); printf(請(qǐng)輸入電話號(hào)碼:); scanf(%s,n-tel); /*對(duì)各個(gè)學(xué)生按姓名向鏈表中插入*/ f=n-name0; addr=hash(f); n-next=p-dataaddr;p-dataaddr=n; return p; void serch_openhash(openhash *p,char sname)/*搜索相關(guān)信息,并輸出詳細(xì)信息*/ int i,num=0,addr;nodetype *s; char f; f=sname0;/*取姓名第一個(gè)字母賦值給f*/ addr=hash(f);/*調(diào)用哈希函數(shù),計(jì)算出起地址*/ if(p-dataaddr=
21、NULL) printf(沒有找到該學(xué)生!); else s=p-dataaddr;/*把該名字所在的鏈表的第一個(gè)結(jié)點(diǎn)地址賦值給s*/ for(i=0;iname,sname) printf(姓名:%s,學(xué)號(hào):%s,電話號(hào)碼:%sn,s-name,s-sno,s-tel); printf(比較次數(shù):%dn,num);break; if(s-next=NULL) printf(沒有找到該學(xué)生!);break; s=s-next; /*對(duì)下一個(gè)結(jié)點(diǎn)進(jìn)行匹配*/ int main(int argc, char *argv) openhash *p;char sname20;/*p為存學(xué)生信息的結(jié)構(gòu)體
22、*/ int i,f=1;/*f判斷是否繼續(xù)運(yùn)行程序!*/ p=(openhash *)malloc(sizeof(openhash);/*為指針p申請(qǐng)空間*/ for(i=0;idatai=NULL;/*初始化同學(xué)錄*/ printf(計(jì)算機(jī)0801 學(xué)號(hào):0308101117 鄭劍芳n); while(f) printf(n數(shù)字0表示退出,數(shù)字1表示錄入功能,數(shù)字2表示查詢功能,請(qǐng)選擇功能!n); scanf(%d, ,17,4.2 軟件測(cè)試,兩個(gè)例子: 1963年美國(guó)飛往火星的火箭爆炸,造成1000萬美元的損失。原因是FORTRAN程序: DO 5 I=1,3 誤寫為:DO 5 I=1
23、. 3,1967年蘇聯(lián)“聯(lián)盟一號(hào)”載人宇宙飛船在返航時(shí),由于軟件忽略一個(gè)小數(shù)點(diǎn),在進(jìn)入大氣層時(shí)因打不開降落傘而燒毀。 進(jìn)行嚴(yán)格的軟件測(cè)試,進(jìn)一步發(fā)現(xiàn)和改正軟件錯(cuò)誤,是非常必要和重要的。,18,4.2 軟件測(cè)試的目標(biāo),軟件測(cè)試指人工或計(jì)算機(jī)執(zhí)行程序來有意識(shí)地發(fā)現(xiàn)程序中的設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤的過程。 測(cè)試對(duì)象包括整個(gè)階段的文檔和程序,包括需求分析說明書、概要設(shè)計(jì)規(guī)格說明、詳細(xì)設(shè)計(jì)規(guī)格說明、源程序等。 據(jù)美國(guó)一家公司統(tǒng)計(jì),查出的軟件錯(cuò)誤中,屬于需求分析和軟件設(shè)計(jì)的錯(cuò)誤約占 64%,屬于程序編寫的錯(cuò)誤僅占 36%。程序編寫的許多錯(cuò)誤是“先天的”。,G.J.Myers在中認(rèn)為: 程序測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)
24、行程序的過程. 好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案; 成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。,找錯(cuò),19,靜態(tài)分析: 不執(zhí)行測(cè)試軟件,通過對(duì)需求分析說明書、軟件設(shè)計(jì)說明書及源程序做結(jié)構(gòu)檢查、流程圖分析、編碼分析等來找出軟件錯(cuò)誤。 動(dòng)態(tài)測(cè)試: 執(zhí)行程序并分析程序來查錯(cuò)。 輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果,4.3.1 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試,例:程序Triangle,輸入三個(gè)整數(shù),表示一個(gè)三角形的三個(gè)邊長(zhǎng),該程序產(chǎn)生一個(gè)結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等邊三角形。 為說明其能正確執(zhí)行它的功能,可使用“三組數(shù)據(jù)”(3,4,5 不等邊三角形),(5,5,6 等腰三角
25、形),(6,6,6 等邊三角形) 程序都能給出正確結(jié)果,是否就可認(rèn)為程序是正確的? 有限次的測(cè)試獲得最大的收益:盡可能少的測(cè)試用例找出就能可多的程序錯(cuò)誤。,20,4.3.2 黑盒法與白盒法,黑盒法 又稱:基于規(guī)格說明書的功能測(cè)試 不考慮程序的內(nèi)部結(jié)構(gòu)與特性,只根據(jù)程序功能或程序的外部特性設(shè)計(jì)測(cè)試用例。,白盒法 又稱:基于覆蓋的測(cè)試. 分析程序的內(nèi)部邏輯結(jié)構(gòu),注意選擇適當(dāng)?shù)母采w標(biāo)準(zhǔn),設(shè)計(jì)測(cè)試用例,對(duì)主要路徑進(jìn)行盡可能多的測(cè)試。,21,4.4 測(cè)試步驟,22,4.4.1 模塊測(cè)試,測(cè)試內(nèi)容,模塊,模塊接口測(cè)試,局部數(shù)據(jù)結(jié)構(gòu)測(cè)試,重要路徑測(cè)試,錯(cuò)誤處理測(cè)試,邊界條件測(cè)試,I/O 參數(shù)值的個(gè)數(shù)、類型、
26、次序、格式是否正確,I/O文件屬性、操作是否正確等。,數(shù)據(jù)說明是否正確、一致,變量及其初值定義是否正確等。,檢查“錯(cuò)誤處理程序”本身的錯(cuò)誤。,邊界條件常包括循環(huán)邊界,最大最小值、控制流中等于、大于、小于的比較值等。,重要路徑通常是指完成模塊功能的主要路徑,一般是控制結(jié)構(gòu)。,23,測(cè)試模塊 驅(qū)動(dòng)程序:接收測(cè)試數(shù)據(jù),調(diào)用被測(cè)試模塊,輸出測(cè)試結(jié)果 樁模塊:即虛擬子程序 ,使用被它代替的模塊,調(diào)用模塊,(被調(diào)用模塊)樁模塊,主函數(shù)(驅(qū)動(dòng)程序),24,4.4.2 集成測(cè)試,集成測(cè)試的步驟 確定模塊組裝方案,將經(jīng)過測(cè)試的模塊組裝為一個(gè)完整的系統(tǒng)。,集成測(cè)試方案 非漸增式組裝:將所有的模塊一次連接起來 漸增
27、式:將模塊一個(gè)一個(gè)的連入系統(tǒng),每連入一個(gè)模塊,都要對(duì)新系統(tǒng)進(jìn)行測(cè)試。,自頂而下集成 自底而上集成,25,4.4.2 集成測(cè)試,自頂而下集成 圖a描述了自頂而下集成的過程,圖b為最終完成的系統(tǒng)。,程序模塊示意圖,S5,M1,S1,S1,S1,S2,S2,S2,S3,S3,S3,M2,M3,M4,S4,S4,S4,S5,S5,M5,M6,圖a,26,4.4.2 集成測(cè)試,自底而上集成 圖a描述了自底而上集成的過程,圖b為最終完成的系統(tǒng)。,M3,M6,M5,D1,D2,D3,D1,D1,D2,D2,D3,D3,M2,M4,M1,程序模塊示意圖,圖a,27,4.4.2 集成測(cè)試,無論是自頂而下增值還是
28、自底而上增值,可選擇深度優(yōu)先或者寬度優(yōu)先集成。,A、B、E、J、K、C、F、L、G、D、H、M、N、I,深度優(yōu)先:,A、B、C、D、E、F、G、H、I、J、K、L、M、N,寬度優(yōu)先:,28,4.4.3 程序?qū)彶闀?huì)和人工運(yùn)行,程序?qū)彶闀?huì)由軟件程序員和不參加設(shè)計(jì)的測(cè)試專家及調(diào)解員。:。其過程如下: 首先,組長(zhǎng)提前把程序文檔和設(shè)計(jì)文檔(設(shè)計(jì)規(guī)格說明書、控制流程圖等)分發(fā)給小組成員,作為評(píng)審的依據(jù)。小組成員要先充分閱讀這些材料,為評(píng)審會(huì)做好準(zhǔn)備。 第二步是召開程序?qū)彶闀?huì),首先由測(cè)試人員進(jìn)行講解,其它成員可以提問并展開討論。 在代碼會(huì)審之后,需要把發(fā)現(xiàn)的錯(cuò)誤登記造表,并交給程序員 優(yōu)點(diǎn):一次審查可以發(fā)現(xiàn)
29、多個(gè)錯(cuò)誤,29,4.3.3 程序?qū)彶闀?huì)和人工運(yùn)行,人工運(yùn)行(走查):編程人員及其他有豐富經(jīng)驗(yàn)的程序員、其他項(xiàng)目的參與者), 其過程如下:模擬計(jì)算機(jī)運(yùn)行,把各種測(cè)試情況沿著程序邏輯走一遍,通過詢問程序的邏輯設(shè)計(jì)情況來發(fā)現(xiàn)錯(cuò)誤。,30,4.4.4 確認(rèn)測(cè)試,確認(rèn)測(cè)試(validation testing):其任務(wù)是驗(yàn)證系統(tǒng)的功能、性能等特性是否符合需求規(guī)格說明。 測(cè)試者 以任務(wù)委托單位及用戶代表為主參加測(cè)試; 測(cè)試策略 一般在模擬的環(huán)境下,運(yùn)用黑盒法進(jìn)行; 測(cè)試與測(cè)試,測(cè)試內(nèi)容 (1)安全測(cè)試: (2)性能測(cè)試: (3)強(qiáng)度測(cè)試: (4)恢復(fù)測(cè)試:,31,4.4.5平行運(yùn)行,對(duì)于重要的系統(tǒng),新開發(fā)
30、系統(tǒng)與原先老系統(tǒng)(或手工操作)同時(shí)運(yùn)行,以免軟件的錯(cuò)誤造成不良后果。,32,4.5 設(shè)計(jì)軟件測(cè)試方案,4.5.1 等價(jià)類劃分 4.5.2 邊界值分析 4.5.3 錯(cuò)誤推測(cè)法 4.5.4 邏輯覆蓋 5.4.5 因果法,測(cè)試方案包括要測(cè)試的功能,準(zhǔn)備的數(shù)據(jù)及其對(duì)應(yīng)的預(yù)期輸出結(jié)果。,白盒法,測(cè)試用例,例:程序Triangle,輸入三個(gè)整數(shù),表示一個(gè)三角形的三個(gè)邊長(zhǎng),該程序產(chǎn)生一個(gè)結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等邊三角形。 為說明其能正確執(zhí)行它的功能,可使用“三組數(shù)據(jù)”(3、4、5,三角形),(5、5、6 ,等腰三角行),(6,6,6,等邊三角行) 程序都能給出正確結(jié)果,是否就可認(rèn)為
31、程序是正確的? 有限次的測(cè)試獲得最大的收益:盡可能少的測(cè)試用例找出就能可多的程序錯(cuò)誤。,33,4.5.1 等價(jià)類劃分,一、概念:把所有可能的輸入數(shù)據(jù)劃分成若干個(gè)等價(jià)類,即子集 每個(gè)等價(jià)類中的一個(gè)典型值在測(cè)試中的作用與這一類中所有其他值的作用相同。 從每個(gè)等價(jià)類中選取具有代表性的數(shù)據(jù)作為代表進(jìn)行測(cè)試來發(fā)現(xiàn)程序中的錯(cuò)誤。 有效等價(jià)類:符合需求規(guī)格及軟件設(shè)計(jì)規(guī)定的數(shù)據(jù)子集。 無效等價(jià)類:不符合需求規(guī)格及軟件設(shè)計(jì)規(guī)定的數(shù)據(jù)子集。,34,二、規(guī)則,1.如果輸入條件規(guī)定了取值范圍,例:某需求規(guī)定輸入值為1.99,2.如果輸入條件規(guī)定了輸入數(shù)據(jù)的個(gè)數(shù)。 例如:輸入三個(gè)邊的值,則: 有效等價(jià)類:輸入三個(gè)數(shù) 測(cè)
32、試數(shù)據(jù)取10,11,12 無效等價(jià)類1:輸入少于三個(gè)數(shù) 測(cè)試數(shù)據(jù)取10,11 無效等價(jià)類2:輸入多于三個(gè)數(shù) 測(cè)試數(shù)據(jù)取10,11,23,24,35,4.如果輸入條件規(guī)定了輸入數(shù)據(jù)的一組可能的值,而且程序?qū)Σ煌斎胫底鞑煌奶幚?例如:輸入0,1,2,3,4,5,6中的一個(gè)數(shù)。 則:7個(gè)有效等價(jià)類: 1個(gè)無效等價(jià)類:,5.如果輸入條件規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則。 例如:一個(gè)語句必須以分號(hào)結(jié)束 則:有效等價(jià)類:測(cè)試數(shù)據(jù)取 ; 無效等價(jià)類:測(cè)試數(shù)據(jù)取 , LF等,3.如果輸入條件規(guī)定了輸入數(shù)據(jù)的一組可能的值,而且程序?qū)Σ煌斎胫底飨嗤奶幚?例如:輸入0,1,2,3,4,5,6中的一個(gè)數(shù)。 則:有
33、效等價(jià)類:測(cè)試數(shù)據(jù)取3 無效等價(jià)類:測(cè)試數(shù)據(jù)取7,36,三、步驟 第一步:劃分等價(jià)類 例子:在學(xué)生成績(jī)管理系統(tǒng)的案例中,系統(tǒng)要求輸入數(shù)據(jù)是數(shù)字字符,在0100之間,超出這個(gè)范圍的為無效數(shù)字。帶非數(shù)字字符的也為無效字符 則可以劃分為2個(gè)有效的等價(jià)類,5個(gè)無效等價(jià)類,37,第二步:設(shè)計(jì)有效等價(jià)類需要的測(cè)試用例,使它能包含盡可能多的尚未被覆蓋的有效等價(jià)類。重復(fù)這一過程,直到所有的有效等價(jià)類都被覆蓋。 1)5)2個(gè)有效等價(jià)類,可共用一個(gè)測(cè)試用例,例如:,第三步:為每一個(gè)無效等價(jià)設(shè)計(jì)一個(gè)測(cè)試用例,例如:,38,等價(jià)類劃分法是從某等價(jià)類中隨便挑一個(gè)作為代表,邊界值分析是使這個(gè)等價(jià)類的每個(gè)邊界都要作為測(cè)試條
34、件。,4.5.2 邊界值分析,例子中,學(xué)生成績(jī)邊界101、100、0、1,39,邊界值分析設(shè)計(jì)測(cè)試方案原則,(1)輸入數(shù)據(jù)以a和b為邊界的范圍 例:郵件收費(fèi)規(guī)定 15 kg收費(fèi)2元, 則應(yīng)對(duì): 0.9,1, 5,5.1 kg 或0.99,1, 5,5.01 kg 設(shè)計(jì)測(cè)試用例。 (2)如輸入數(shù)據(jù)有規(guī)定的個(gè)數(shù) 例:一個(gè)輸入文件可有1255個(gè)記錄則可分別設(shè)計(jì)有:1個(gè)、255個(gè)、0個(gè)、256個(gè)記錄的輸入文件,(3)輸入數(shù)據(jù)有一定的規(guī)則 (4)考慮輸出的邊界,分析輸入產(chǎn)生的測(cè)試情況,40,4.5.3 錯(cuò)誤推測(cè)法,錯(cuò)誤推測(cè)法的基本想法是:列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇
35、測(cè)試用例。 例如,輸入數(shù)據(jù)為零或輸出數(shù)據(jù)為零的地方往往容易出錯(cuò);各模塊間對(duì)公有變量的引用也是容易出錯(cuò)的地方。,可先用邊界法設(shè)計(jì)以下測(cè)試用例; 排序序列為空; 排序序列僅有一個(gè)數(shù)據(jù); 排序序列為滿序列數(shù)據(jù); 然后,用推測(cè)法補(bǔ)充一下測(cè)試用例: 排序序列已經(jīng)按要求排好序; 排序序列的順序與要求的順序恰好相反; 排序序列中的所有數(shù)據(jù)全部相等;等等。,41,4.5.6 因果圖法,二、步驟 (1) 輸入為原因,輸出為結(jié)果,給 每個(gè)原因、結(jié)果一個(gè)標(biāo)識(shí)。 (2) 分析語義,找出原因與結(jié)果、原因與原因之間的關(guān)系,畫出因果圖。 (3) 在因果圖上標(biāo)明約束或限制條件。 (4) 把因果圖轉(zhuǎn)化為判定表 。 (5) 根據(jù)
36、判定表每一列設(shè)計(jì)測(cè)試用例。,一、概念:等價(jià)類劃分和邊界分析不能檢查組合輸入條件可能引起的軟件錯(cuò)誤因果圖,42,原因 結(jié)果,恒等 c出現(xiàn),則e出現(xiàn),非 c出現(xiàn),則e不出現(xiàn),或 c1、c2中有一個(gè)出現(xiàn), 則 e出現(xiàn),與 c1、c2中都出現(xiàn),e才出現(xiàn),因果圖的基本符號(hào),43,從輸入條件考慮,有四種約束,異約束(互斥) 原因a,b只有一個(gè)可能為1,不能同時(shí)為1,或約束 原因a,b,c至少 (包含) 有一個(gè)成立,唯一約束 原因 a,b必有, 且僅有一個(gè)成立,因果圖的約束符號(hào),要求約束 當(dāng)a出現(xiàn), b必須也出現(xiàn),44,因果圖方法實(shí)例: 某軟件規(guī)格說明中規(guī)定: 輸入兩個(gè)字符,第一個(gè)字符是A或B,且第二個(gè)字符
37、必須是數(shù)字時(shí)執(zhí)行操作H。 若第一個(gè)字符不是 A,也不是B 時(shí),輸出錯(cuò)誤信息L。 若第二個(gè)字符不是數(shù)字時(shí),輸出錯(cuò)誤信息R。,強(qiáng)制約束(屏蔽) a成立,b必不成立,45,原因是: 1第1個(gè)字符是A 2第1個(gè)字符是B 3第2個(gè)字符是數(shù)字。,結(jié)果是: 21執(zhí)行操作H。 22輸出錯(cuò)誤信息L。 23輸出錯(cuò)誤信息R.,46,輸出錯(cuò)誤信息L 執(zhí)行操作H。 輸出錯(cuò)誤信息R.,47,作業(yè),有一個(gè)處理單價(jià)為5角錢的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)。其規(guī)格說明如下:若投入5角錢或一元的硬幣,按下“橙汁”或“啤酒”按鈕,則相應(yīng)的飲料就送出來。若售貨機(jī)沒有零錢找,則一個(gè)顯示“零錢找完”的紅燈亮,這時(shí)在投入1元硬幣并按下
38、按鈕后,飲料不送出來而且1元硬幣也退出來;若有零錢找,則顯示”零錢找完“的紅燈滅,在送出飲料的同時(shí)退還5角硬幣。 (1)分析這一段說明,列出原因和結(jié)果 (2)畫出因果圖。所有原因結(jié)點(diǎn)在左邊,所有結(jié)果結(jié)點(diǎn)列在右邊。 (3)轉(zhuǎn)換成判定表,并設(shè)計(jì)測(cè)試用例,48,原因:1.售貨機(jī)有零錢找 2.投入1元硬幣 3.投入5角硬幣 4.按下橙汁按鈕 5.按下啤酒按鈕 建立中間結(jié)點(diǎn): 11.投入1元硬幣且按下飲料按鈕 12.按下橙汁或啤酒的按鈕 13.應(yīng)當(dāng)找5角并且售貨機(jī)有零錢找 14.賬結(jié)清 結(jié)果: 22.退還1元硬幣 23.退還5角硬幣 24.送出橙汁飲料 25.送出啤酒飲料,49,50,微軟的30GB版本
39、Zune在08年的最后一天出現(xiàn)了大規(guī)模死機(jī)的現(xiàn)象。下面來看看具體的代碼 while(days365) if(DateTime.IsLeapYear(year) if(days366) days-=366;year+=1; elsedays-=365;year+=1;,51,4.5.4 邏輯覆蓋,邏輯覆蓋是以程序的內(nèi)部邏輯結(jié)構(gòu)為基礎(chǔ)的測(cè)試用例設(shè)計(jì)技術(shù),屬于白盒測(cè)試。 語句覆蓋: 判定覆蓋: 條件覆蓋: 判定/條件覆蓋: 條件組合覆蓋:,52,4.5.4 邏輯覆蓋,例:用邏輯覆蓋法測(cè)試以下程序段,Procedure EX( A,B: REAL, VAR X: REAL ); BEGIN IF(A1
40、) and (B1) THEN X:=X/A ; IF (A=2) or (X1) THEN X:=x+1; END;,53,設(shè)計(jì)足夠的測(cè)試用例,使得程序中的每個(gè)語句至少執(zhí)行一次 路徑:acbe 測(cè)試用例:A=2,B=0,x=3,1、語句覆蓋,缺點(diǎn):語句覆蓋不能發(fā)現(xiàn)判斷中的邏輯運(yùn)算中的錯(cuò)誤。,問題:第一個(gè)判斷 and 誤寫成 or,則測(cè)試用例發(fā)現(xiàn)不了錯(cuò)誤 第二個(gè)判斷x1誤寫成X1,則測(cè)試用例發(fā)現(xiàn)不了錯(cuò)誤,54,2、判定覆蓋,設(shè)計(jì)足夠的測(cè)試用例,使得程序中每個(gè)判定的取“真”分支和取“假”分支至少都執(zhí)行一次,判定覆蓋又稱分支覆蓋。 測(cè)試案例:A=2,B=0,X=3(acbe) TT A=1,B=1,X=1(abd)FF,判定覆蓋比語句覆蓋強(qiáng),各分支執(zhí)行過,自然每個(gè)語句都執(zhí)行過了 但是第二個(gè)判斷x1誤寫成X1,則測(cè)試用例發(fā)現(xiàn)不了錯(cuò)誤 則:需要更強(qiáng)覆蓋,55,3、條件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 探礦合探礦合同范本
- 2025至2031年中國(guó)透明封箱膠紙行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)化工包裝瓶行業(yè)投資前景及策略咨詢研究報(bào)告
- 旅游訂門票合同范本
- 2025至2030年中國(guó)話筒臺(tái)架數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)蘋果香蕉洗發(fā)水香精數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)聚乙烯復(fù)合短纖維數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)索錨具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年樹脂型膠粘劑合作協(xié)議書
- 2025至2030年中國(guó)特軟粘合劑數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 四川省建筑工程地下結(jié)構(gòu)抗浮錨桿關(guān)鍵技術(shù)作業(yè)規(guī)程
- 中醫(yī)養(yǎng)生保健素養(yǎng)知識(shí)講座
- JBT 7901-2023 金屬材料實(shí)驗(yàn)室均勻腐蝕全浸試驗(yàn)方法 (正式版)
- 基于STM32Cube的嵌入式系統(tǒng)應(yīng)用 教案
- 動(dòng)畫分鏡頭腳本設(shè)計(jì)課件
- 學(xué)校餐廳除蟲滅害記錄表
- 落地式鋼管腳手架驗(yàn)收記錄表
- 供應(yīng)商變更申請(qǐng)表
- 冢本監(jiān)督的番號(hào)前綴及一些簡(jiǎn)介
- 放射診療機(jī)構(gòu)放射治療診療科目放射防護(hù)管理情況自查表
- 幼兒教師口語(學(xué)前教育專業(yè)高職)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論