




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、軟件測試與質(zhì)量保證一、軟件測試的定義 定義:軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例,并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤的過程。二、測試的目的 基于不同的立場,存在著兩種完全不同的測試目的。 從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。 從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。Grenford Myers軟件測試目的(1) 測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯誤;(2
2、) 一個好的測試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤;(3) 一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤的測試換言之,測試的目的是 系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。 能夠證明軟件的功能和性能與需求說明相符合。 測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。三、軟件測試的原則 1. 應(yīng)當(dāng)把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘。2. 測試用例應(yīng)由測試輸入數(shù)據(jù)和對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。3. 程序員應(yīng)避免檢查自己的程序。4. 在設(shè)計測試用例時,應(yīng)當(dāng)包括合理的輸入條件和不合理的輸入條件。5. 充分注意測試中的群集現(xiàn)象。經(jīng)驗表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯
3、誤數(shù)目成正比 。6. 嚴格執(zhí)行測試計劃,排除測試的隨意性。7. 應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。8. 妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便。四、軟件測試的對象 軟件測試并不等于程序測試。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。 需求分析、概要設(shè)計、詳細設(shè)計以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計規(guī)格說明、詳細設(shè)計規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對象。五、確認和驗證 為把握軟件開發(fā)各個環(huán)節(jié)的正確性,需要進行各種確認和驗證工作。 確認(Validation),是一系列的活動和過程,目的是想證實在一個給定的外部環(huán)境中軟件的邏輯正確性。 需求規(guī)
4、格說明的確認 程序的確認 驗證(Verification),試圖證明在軟件生存期各個階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。七、測試信息流測試信息流: 軟件配置:軟件需求規(guī)格說明、軟件設(shè)計規(guī)格說明、源代碼等; 測試配置:測試計劃、測試用例、測試程序等; 測試工具:測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等等。 測試結(jié)果分析:比較實測結(jié)果與預(yù)期結(jié)果,評價錯誤是否發(fā)生。 排錯(調(diào)試):對已經(jīng)發(fā)現(xiàn)的錯誤進行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔。 修正后的文檔再測試:直到通過測試為止。 通過收集和分析測試結(jié)果數(shù)據(jù),對軟件建
5、立可靠性模型 利用可靠性分析,評價軟件質(zhì)量: 軟件的質(zhì)量和可靠性達到可以接受的程度; 所做的測試不足以發(fā)現(xiàn)嚴重的錯誤; 如果測試發(fā)現(xiàn)不了錯誤,可以肯定,測試配置考慮得不夠細致充分,錯誤仍然潛伏在軟件中。八、測試與軟件開發(fā)各階段的關(guān)系ü 軟件開發(fā)過程是一個自頂向下,逐步細化的過程ü 軟件計劃階段定義軟件作用域ü 軟件需求分析建立軟件信息域、功能和性能需求、約束等ü 軟件設(shè)計把設(shè)計用某種程序設(shè)計語言轉(zhuǎn)換成程序代碼ü 測試過程是依相反順序安排的自底向上,逐步集成的過程。九、軟件測試用例設(shè)計 兩種常用的測試方法 黑盒測試 白盒測試(一)黑盒測試 這種方
6、法是把測試對象看做一個黑盒子,測試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明。 黑盒測試又叫做功能測試或數(shù)據(jù)驅(qū)動測試。 黑盒測試方法是在程序接口上進行測試,主要是為了發(fā)現(xiàn)以下錯誤: 是否有不正確或遺漏了的功能? 在接口上,輸入能否正確地接受? 能否輸出正確的結(jié)果? 是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤? 性能上是否能夠滿足要求? 是否有初始化或終止性錯誤?¨ 用黑盒測試發(fā)現(xiàn)程序中的錯誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查程序是否都能產(chǎn)生正確的輸出。¨ 但這是不可能的。 假設(shè)
7、一個程序P有輸入量X和Y及輸出量Z。在字長為32位的計算機上運行。若X、Y取整數(shù),按黑盒方法進行窮舉測試: 可能采用的 測試數(shù)據(jù)組: 232×232264 如果測試一組數(shù)據(jù)需要1毫秒,一年工作365× 24小時,完成所有測試需5億年(二)白盒測試 此方法把測試對象看做一個透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。 軟件人員使用白盒測試方法,主要想對程序模塊進行如下的檢查: 對程序模塊的所有獨立的執(zhí)行路徑至
8、少測試一次; 對所有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次; 在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體; 測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等。 對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個小程序的流程圖,它包括了一個執(zhí)行20次的循環(huán)。 包含的不同執(zhí)行路徑數(shù)達520條,對每一條路徑進行測試需要1毫秒,假定一年工作365 × 24小時,要想把所有路徑測試完,需3170年十、白盒測試的測試用例設(shè)計(一)邏輯覆蓋邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例的技術(shù)。它屬白盒測試。 語句覆蓋 判定覆蓋 條件覆蓋 判定條件覆蓋 條件組合覆蓋 路徑覆蓋。舉例:
9、所有路徑為:L1(a->c->e) ,L2(a->b->d), L3(a->b->e), L4(a->c->d)依據(jù)以上推導(dǎo)出來的結(jié)果就可以設(shè)計滿足要求的測試用例。(二)語句覆蓋 語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。 在圖例中,正好所有的可執(zhí)行語句都在路徑L1上,所以選擇路徑 L1設(shè)計測試用例,就可以覆蓋所有的可執(zhí)行語句。 測試用例的設(shè)計格式如下【輸入的(A, B, X),輸出的(A, B, X)】 為圖例設(shè)計滿足語句覆蓋的測試用例是:【(2, 0, 4),(2, 0, 3)】 覆蓋 ace【L1】(三)
10、判定覆蓋 判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。 判定覆蓋又稱為分支覆蓋。 對于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例 【(2, 0, 4),(2, 0, 3)】覆蓋 ace【L1】【(1, 1, 1),(1, 1, 1)】覆蓋 abd【L2】 如果選擇路徑L3和L4,還可得另一組可用的測試用例:【(2, 1, 1),(2, 1, 2)】覆蓋 abe【L3】【(3, 0, 3),(3, 1, 1)】覆蓋 acd【L4】 (四)條件覆蓋 條件覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值
11、至少執(zhí)行一次。在圖例中,我們事先可對所有條件的取值加以標(biāo)記。例如, 對于第一個判斷: 條件 A1 取真為 ,取假為 條件 B0 取真為 ,取假為 對于第二個判斷: 條件A2 取真為 ,取假為 條件X1 取真為 ,取假為測試用例 覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e) 或測 試 用 例 覆蓋分支條件取值【(1, 0, 3),(1, 0, 4)】 L3(b, e) 【(2, 1, 1),(2, 1, 2)】 L3(b, e) (五)判定
12、條件覆蓋 判定條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷中的每個條件的可能取值至少執(zhí)行一次。測 試 用例 覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 1, 1),(1, 1, 1)】 L2(b, d) 由多個基本判斷組成的流程圖(六)條件組合覆蓋 條件組合覆蓋就是設(shè)計足夠的測試用例,運行被測程序,使得每個判斷的所有可能的條件取值組合至少執(zhí)行一次。 記 A1, B0 作 A1, B0 作 A1, B0 作 A1, B0 作 A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作 測 試
13、用 例 覆蓋條件 覆蓋組合【(2, 0, 4), (2, 0, 3)】(L1) , 【(2, 1, 1), (2, 1, 2)】(L3) , 【(1, 0, 3), (1, 0, 4)】(L3) , 【(1, 1, 1), (1, 1, 1)】(L2) , (七)路徑測試路徑測試就是設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑。 測 試 用 例 通過路徑 覆蓋條件【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)
14、】 acd (L3) (八)基本路徑集測試 覆蓋關(guān)鍵路徑。 得到程序的控制流程圖/程序圖Sequence If While 計算環(huán)路復(fù)雜性的方法: -V(G)=簡單判定節(jié)點數(shù)+ 1 V(G) = E-N+2 (E 是邊數(shù),N是定點數(shù)) V(G)=封閉區(qū)域數(shù)+ 1 V(G)=4根據(jù)環(huán)路復(fù)雜性產(chǎn)生基本路徑集Path 1: 1-2-3-8Path 2: 1-2-3-8-1-2-3Path 3: 1-2-4-5-7-8 Path 4: 1-2-4-6-7-8準備測試用例覆蓋所有基本路徑十一、黑盒測試的測試用例設(shè)計 等價類劃分 邊界值分析 錯誤推測法 因果圖(一)等價類劃分 等價類劃分是一種典型的黑盒測
15、試方法,使用這一方法時,完全不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說明來設(shè)計測試用例。 等價類劃分方法把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分,然后從每一部分中選取少數(shù)有代表性的數(shù)據(jù)做為測試用例。 使用這一方法設(shè)計測試用例要經(jīng)歷劃分等價類(列出等價類表)和選取測試用例兩步。 劃分等價類等價類是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。測試某等價類的代表值就等價于對這一類其它值的測試。 等價類的劃分有兩種不同的情況: 有效等價類:是指對于程序的規(guī)格說明來說,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。 無效等價類:是指對于程序的規(guī)格說明來說,是不合理的,
16、無意義的輸入數(shù)據(jù)構(gòu)成的集合。 在設(shè)計測試用例時,要同時考慮有效等價類和無效等價類的設(shè)計。 劃分等價類的原則。(1) 如果輸入條件規(guī)定了取值范圍,或值的個數(shù),則可以確立一個有效等價類和兩個無效等價類。例如,在程序的規(guī)格說明中,對輸入條件有一句話: “ 項數(shù)可以從1到999 ” 則有效等價類是“1項數(shù)999”兩個無效等價類是“項數(shù)1”或“項數(shù)999”。在數(shù)軸上表示成: (2) 如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,這時可確立一個有效等價類和一個無效等價類。例如,在Pascal語言中對變量標(biāo)識符規(guī)定為“以字母打頭的串”。那么所有以字母打頭的構(gòu)成有效等價類,而不在此集合內(nèi)(不
17、以字母打頭)的歸于無效等價類。(3) 如果輸入條件是一個布爾量,則可以確定一個有效等價類和一個無效等價類。(4) 如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對每個輸入值分別進行處理。這時可為 每一個輸入值確立一個有效等價類,此外針對這組值確立一個無效等價類,它是所有不允許的輸入值的集合。 例如,在教師上崗方案中規(guī)定對教授、副教授、講師和助教分別計算分數(shù),做相應(yīng)的處理。因此可以確定4個有效等價類為教授、副教授、講師和助教,一個無效等價類,它是所有不符合以上身分的人員的輸入值的集合。(5) 如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則)。
18、 例如,Pascal語言規(guī)定 “一個語句必須以分號;結(jié)束”。這時,可以確定一個有效等價類 “以;結(jié)束”,若干個無效等價類 “以:結(jié)束”、“以,結(jié)束”、“以 結(jié)束”、“以LF結(jié)束”等。 確立測試用例在確立了等價類之后,建立等價類表,列出所有劃分出的等價類。 再從劃分出的等價類中按以下原則選擇測試用例:(1) 為每一個等價類規(guī)定一個唯一編號;(2) 設(shè)計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類,重復(fù)這一步,直到所有的有效等價類都被覆蓋為止;(3)設(shè)計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步,直到所有的無效等價類都被覆蓋為止。 用等價類劃分法設(shè)計測試用例的
19、實例在某一PASCAL語言版本中規(guī)定:“標(biāo)識符是由字母開頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個,最大字符數(shù)為80個?!辈⑶乙?guī)定:“標(biāo)識符必須先說明,再使用。” “在同一說明語句中,標(biāo)識符至少必須有一個?!庇玫葍r類劃分的方法,建立輸入等價類表: 下面選取了9個測試用例,它們覆蓋了所有的等價類。 VAR x,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732; . (1), (2), (4), (8), (9), (12), (14) VAR :REAL; (3) VAR x,:REAL; (5) VAR T12345678:REAL;
20、 (6) VAR T12345.:REAL; (7) 多于80個字符 VAR T$:CHAR; (10) VAR GOTO:INTEGER; (11) VAR 2T:REAL; (13) VAR PAR:REAL; (15) BEGIN . PAP := SIN (3.14 * 0.8) / 6; (二)邊界值分析 邊界值分析也是一種黑盒測試方法,是對等價類劃分方法的補充。 人們從長期的測試工作經(jīng)驗得知,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。因此針對各種邊界情況設(shè)計測試用例,可以查出更多的錯誤。 比如,在做三角形計算時,要輸入三角形的三個邊長:A、B和C。 我們應(yīng)注
21、意到這三個數(shù)值應(yīng)當(dāng)滿足 A0、B0、C0、 ABC、ACB、BCA,才能構(gòu)成三角形。但如果把六個不等式中的任何一個大于號“”錯寫成大于等于號“”,那就不能構(gòu)成三角形。問題恰出現(xiàn)在容易被疏忽的邊界附近。 這里所說的邊界是指,相當(dāng)于輸入等價類和輸出等價類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。 使用邊界值分析方法設(shè)計測試用例,首先應(yīng)確定邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值做為測試數(shù)據(jù)。 (三)錯誤推測法 人們也可以靠經(jīng)驗和直覺推測程序中可能存在的各種錯誤,從而有針對性地編寫檢查這些錯誤的例子。這就是錯誤推測法。 錯誤推
22、測法的基本想法是:列舉出程序中所有可能有的錯誤和容易發(fā)生錯誤的特殊情況,根據(jù)它們選擇測試用例。十二、軟件測試的策略 測試過程按4個步驟進行,即單元測試、組裝測試、確認測試和系統(tǒng)測試。 開始是單元測試,集中對用源代碼實現(xiàn)的每一個程序單元進行測試,檢查各個程序模塊是否正確地實現(xiàn)了規(guī)定的功能 組裝測試:把已測試過的模塊組裝起來,主要對與設(shè)計相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進行測試。 確認測試:則是要檢查已實現(xiàn)的軟件是否滿足了需求規(guī)格說明中確定了的各種需求,以及軟件配置是否完全、正確。 系統(tǒng)測試:把已經(jīng)經(jīng)過確認的軟件納入實際運行環(huán)境中,與其它系統(tǒng)成份組合在一起進行測試。(一)單元測試 (Unit Testin
23、g) 單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位 程序模塊,進行正確性檢驗的測試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。 單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨立進行單元測試。1. 單元測試的內(nèi)容 在單元測試時,測試者需要依據(jù)詳細設(shè)計說明書和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測試的測試用例,輔之以黑盒測試的測試用例,使之對任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)。(1) 模塊接口測試 在單元測試的開始,應(yīng)對通過被測模塊的數(shù)據(jù)流進行測試。測試項目包括: 調(diào)用本模塊的輸入?yún)?shù)是否正確; 本模塊調(diào)用子模塊時輸入給子模塊的參數(shù)
24、是否正確; 全局量的定義在各模塊中是否一致 在做內(nèi)外存交換時要考慮: 文件屬性是否正確; OPEN與CLOSE語句是否正確; 緩沖區(qū)容量與記錄長度是否匹配; 在進行讀寫操作之前是否打開了文件; 在結(jié)束文件處理時是否關(guān)閉了文件; 正文書寫輸入錯誤, IO錯誤是否檢查并做了處理。(2) 局部數(shù)據(jù)結(jié)構(gòu)測試 不正確或不一致的數(shù)據(jù)類型說明 使用尚未賦值或尚未初始化的變量 錯誤的初始值或錯誤的缺省值 變量名拼寫錯或書寫錯 不一致的數(shù)據(jù)類型 全局數(shù)據(jù)對模塊的影響 (3) 路徑測試 選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進行測試。 應(yīng)當(dāng)設(shè)計測試用例查找由于錯誤的計算、不正確的比較或不正常的控制流而導(dǎo)致的錯
25、誤。 對基本執(zhí)行路徑和循環(huán)進行測試可以發(fā)現(xiàn)大量的路徑錯誤。(4) 錯誤處理測試 出錯的描述是否難以理解 出錯的描述是否能夠?qū)﹀e誤定位 顯示的錯誤與實際的錯誤是否相符 對錯誤條件的處理正確與否 在對錯誤進行處理之前,錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等(5) 邊界測試 注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。 如果對模塊運行時間有要求的話,還要專門進行關(guān)鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。2. 單元測試的步驟 模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬
26、與被測模塊相聯(lián)系的其它模塊。 驅(qū)動模塊 (driver) 樁模塊 (stub) 存根模塊驅(qū)動模塊 (driver) 相當(dāng)于所測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給所測模塊,最后再輸出實測結(jié)果。 樁模塊 (stub) 存根模塊。用以代替所測模塊調(diào)用的子模塊。 如果一個模塊要完成多種功能,可以將這個模塊看成由幾個小程序組成。必須對其中的每個小程序先進行單元測試要做的工作,對關(guān)鍵模塊還要做性能測試。 對支持某些標(biāo)準規(guī)程的程序,更要著手進行互聯(lián)測試。有人把這種情況特別稱為模塊測試,以區(qū)別單元測試。(二)組裝測試(Integrated Testing) 組裝測試 (集成測試、聯(lián)合測試) 通常,
27、在單元測試的基礎(chǔ)上,需要將所有模塊按照設(shè)計要求組裝成為系統(tǒng)。這時需要考慮的問題是: 在把各個模塊連接起來的時侯,穿越模塊接口的數(shù)據(jù)是否會丟失; 一個模塊的功能是否會對另一個模塊的功能產(chǎn)生不利的影響; 各個子功能組合起來,能否達到預(yù)期要求的父功能; 全局數(shù)據(jù)結(jié)構(gòu)是否有問題; 單個模塊的誤差累積起來,是否會放大,從而達到不能接受的程度。在單元測試的同時可進行組裝測試,發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問題,最終構(gòu)成要求的軟件系統(tǒng)。 子系統(tǒng)的組裝測試特別稱為部件測試,它所做的工作是要找出組裝后的子系統(tǒng)與系統(tǒng)需求規(guī)格說明之間的不一致。 通常,把模塊組裝成為系統(tǒng)的方式有兩種 一次性組裝方式 增殖式組裝方式
28、1. 一次性組裝方式 (big bang)l 它是一種非增殖式組裝方式。也叫做整體拼裝。l 使用這種方式,首先對每個模塊分別進行模塊測試,然后再把所有模塊組裝在一起進行測試,最終得到要求的軟件系統(tǒng)。2. 增殖式組裝方式 這種組裝方式又稱漸增式組裝 首先對一個個模塊進行模塊測試,然后將這些模塊逐步組裝成較大的系統(tǒng) 在組裝的過程中邊連接邊測試,以發(fā)現(xiàn)連接過程中產(chǎn)生的問題 通過增殖逐步組裝成為要求的軟件系統(tǒng)。(1) 自頂向下的增殖方式 這種組裝方式將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進行組裝。 自頂向下的增殖方式在測試過程中較早地驗證了主要的控制和判斷點。 選用按深度方向組裝的方式,可以首先實現(xiàn)
29、和驗證一個完整的軟件功能。(2) 自底向上的增殖方式 這種組裝的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開始組裝和測試。 因為模塊是自底向上進行組裝,對于一個給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測試完成,所以不再需要樁模塊。在模塊的測試過程中需要從子模塊得到的信息可以直接運行子模塊得到。 自頂向下增殖的方式和自底向上增殖的方式各有優(yōu)缺點。 一般來講,一種方式的優(yōu)點是另一種方式的缺點。(3) 混合增殖式測試l 衍變的自頂向下的增殖測試 首先對輸入輸出模塊和引入新算法模塊進行測試; 再自底向上組裝成為功能相當(dāng)完整且相對獨立的子系統(tǒng); 然后由主模塊開始自頂向下進行增殖測試。l
30、自底向上-自頂向下的增殖測試 首先對含讀操作的子系統(tǒng)自底向上直至根結(jié)點模塊進行組裝和測試; 然后對含寫操作的子系統(tǒng)做自頂向下的組裝與測試。l 回歸測試 這種方式采取自頂向下的方式測試被修改的模塊及其子模塊; 然后將這一部分視為子系統(tǒng),再自底向上測試。關(guān)鍵模塊問題l 在組裝測試時,應(yīng)當(dāng)確定關(guān)鍵模塊,對這些關(guān)鍵模塊及早進行測試。l 關(guān)鍵模塊的特征: 滿足某些軟件需求; 在程序的模塊結(jié)構(gòu)中位于較高的層次(高層控制模塊); 較復(fù)雜、較易發(fā)生錯誤; 有明確定義的性能要求(三)確認測試(Validation Testing)l 確認測試又稱有效性測試。任務(wù)是驗證軟件的功能和性能及其它特性是否與用戶的要求一
31、致。l 對軟件的功能和性能要求在軟件需求規(guī)格說明書中已經(jīng)明確規(guī)定。它包含的信息就是軟件確認測試的基礎(chǔ)。1. 進行有效性測試(黑盒測試) 有效性測試是在模擬的環(huán)境 (可能就是開發(fā)的環(huán)境) 下,運用黑盒測試的方法,驗證被測軟件是否滿足需求規(guī)格說明書列出的需求。 首先制定測試計劃,規(guī)定要做測試的種類。還需要制定一組測試步驟,描述具體的測試用例。 通過實施預(yù)定的測試計劃和測試步驟,確定 軟件的特性是否與需求相符; 所有的文檔都是正確且便于使用; 同時,對其它軟件需求,例如可移植性、兼容性、出錯自動恢復(fù)、可維護性等,也都要進行測試 在全部軟件測試的測試用例運行完后,所有的測試結(jié)果可以分為兩類: 測試結(jié)果
32、與預(yù)期的結(jié)果相符。這說明軟件的這部分功能或性能特征與需求規(guī)格說明書相符合,從而這部分程序被接受。 測試結(jié)果與預(yù)期的結(jié)果不符。這說明軟件的這部分功能或性能特征與需求規(guī)格說明不一致,因此要為它提交一份問題報告。2. 軟件配置復(fù)查 軟件配置復(fù)查的目的是保證 軟件配置的所有成分都齊全; 各方面的質(zhì)量都符合要求; 具有維護階段所必需的細節(jié); 而且已經(jīng)編排好分類的目錄。 應(yīng)當(dāng)嚴格遵守用戶手冊和操作手冊中規(guī)定的使用步驟,以便檢查這些文檔資料的完整性和正確性。3.測試和測試 在軟件交付使用之后,用戶將如何實際使用程序,對于開發(fā)者來說是無法預(yù)測的。 測試是由一個用戶在開發(fā)環(huán)境下進行的測試,也可以是公司內(nèi)部的用戶
33、在模擬實際操作環(huán)境下進行的測試。 測試的目的是評價軟件產(chǎn)品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重產(chǎn)品的界面和特色。 測試可以從軟件產(chǎn)品編碼結(jié)束之時開始,或在模塊(子系統(tǒng))測試完成之后開始,也可以在確認測試過程中產(chǎn)品達到一定的穩(wěn)定和可靠程度之后再開始。 測試是由軟件的多個用戶在實際使用環(huán)境下進行的測試。這些用戶返回有關(guān)錯誤信息給開發(fā)者。 測試時,開發(fā)者通常不在測試現(xiàn)場。因而,測試是在開發(fā)者無法控制的環(huán)境下進行的軟件現(xiàn)場應(yīng)用。 在測試中,由用戶記下遇到的所有問題,包括真實的以及主觀認定的,定期向開發(fā)者報告。 測試主要衡量產(chǎn)品的FLURPS。著重于產(chǎn)品的支持性,包括
34、文檔、客戶培訓(xùn)和支持產(chǎn)品生產(chǎn)能力。 只有當(dāng)測試達到一定的可靠程度時,才能開始測試。它處在整個測試的最后階段。同時,產(chǎn)品的所有手冊文本也應(yīng)該在此階段完全定稿。4.驗收測試(Acceptance Testing)l 在通過了系統(tǒng)的有效性測試及軟件配置審查之后,就應(yīng)開始系統(tǒng)的驗收測試。l 驗收測試是以用戶為主的測試。軟件開發(fā)人員和QA(質(zhì)量保證)人員也應(yīng)參加。l 由用戶參加設(shè)計測試用例,使用生產(chǎn)中的實際數(shù)據(jù)進行測試。l 在測試過程中,除了考慮軟件的功能和性能外,還應(yīng)對軟件的可移植性、兼容性、可維護性、錯誤的恢復(fù)功能等進行確認。l 確認測試應(yīng)交付的文檔有: 確認測試分析報告 最終的用戶手冊和操作手冊
35、項目開發(fā)總結(jié)報告。(四)系統(tǒng)測試(System Testing) 系統(tǒng)測試,是將通過確認測試的軟件,作為整個基于計算機系統(tǒng)的一個元素,與計算機硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其它系統(tǒng)元素結(jié)合在一起,在實際運行環(huán)境下,對計算機系統(tǒng)進行一系列的組裝測試和確認測試。 系統(tǒng)測試的目的在于通過與系統(tǒng)的需求定義作比較, 發(fā)現(xiàn)軟件與系統(tǒng)的定義不符合或與之矛盾的地方。十三、測試種類 軟件測試是由一系列不同的測試組成。主要目的是對以計算機為基礎(chǔ)的系統(tǒng)進行充分的測試。1、功能測試功能測試是在規(guī)定的一段時間內(nèi)運行軟件系統(tǒng)的所有功能,以驗證這個軟件系統(tǒng)有無嚴重錯誤。2、可靠性測試如果系統(tǒng)需求說明書中有對可靠性的
36、要求,則需進行可靠性測試。 平均失效間隔時間 MTBF (Mean Time Between Failures) 是否超過規(guī)定時限? 因故障而停機的時間 MTTR (Mean Time To Repairs) 在一年中應(yīng)不超過多少時間。3、強度測試強度測試是要檢查在系統(tǒng)運行環(huán)境不正常乃至發(fā)生故障的情況下,系統(tǒng)可以運行到何種程度的測試。例如: 把輸入數(shù)據(jù)速率提高一個數(shù)量級,確定輸入功能將如何響應(yīng)。 設(shè)計需要占用最大存儲量或其它資源的測試用例進行測試。 設(shè)計出在虛擬存儲管理機制中引起“顛簸”的測試用例進行測試。 設(shè)計出會對磁盤常駐內(nèi)存的數(shù)據(jù)過度訪問的測試用例進行測試。 強度測試的一個變種就是敏感性
37、測試。在程序有效數(shù)據(jù)界限內(nèi)一個小范圍內(nèi)的一組數(shù)據(jù)可能引起極端的或不平穩(wěn)的錯誤處理出現(xiàn),或者導(dǎo)致極度的性能下降的情況發(fā)生。此測試用以發(fā)現(xiàn)可能引起這種不穩(wěn)定性或不正常處理的某些數(shù)據(jù)組合4、性能測試性能測試是要檢查系統(tǒng)是否滿足在需求說明書中規(guī)定的性能。特別是對于實時系統(tǒng)或嵌入式系統(tǒng)。性能測試常常需要與強度測試結(jié)合起來進行,并常常要求同時進行硬件和軟件檢測。 通常,對軟件性能的檢測表現(xiàn)在以下幾個方面:響應(yīng)時間、吞吐量、輔助存儲區(qū),例如緩沖區(qū),工作區(qū)的大小等、處理精度,等等。5、恢復(fù)測試恢復(fù)測試是要證實在克服硬件故障(包括掉電、硬件或網(wǎng)絡(luò)出錯等)后,系統(tǒng)能否正常地繼續(xù)進行工作,并不對系統(tǒng)造成任何損害。
38、為此,可采用各種人工干預(yù)的手段,模擬硬件故障,故意造成軟件出錯。并由此檢查: 錯誤探測功能系統(tǒng)能否發(fā)現(xiàn)硬件失效與故障; 能否切換或啟動備用的硬件; 在故障發(fā)生時能否保護正在運行的作業(yè)和系統(tǒng)狀態(tài); 在系統(tǒng)恢復(fù)后能否從最后記錄下來的無錯誤狀態(tài)開始繼續(xù)執(zhí)行作業(yè),等等。 掉電測試:其目的是測試軟件系統(tǒng)在發(fā)生電源中斷時能否保護當(dāng)時的狀態(tài)且不毀壞數(shù)據(jù),然后在電源恢復(fù)時從保留的斷點處重新進行操作。6、啟動停止測試這類測試的目的是驗證在機器啟動及關(guān)機階段,軟件系統(tǒng)正確處理的能力。這類測試包括 反復(fù)啟動軟件系統(tǒng) (例如,操作系統(tǒng)自舉、網(wǎng)絡(luò)的啟動、應(yīng)用程序的調(diào)用等) 在盡可能多的情況下關(guān)機。7、配置測試l 這類測
39、試是要檢查計算機系統(tǒng)內(nèi)各個設(shè)備或各種資源之間的相互聯(lián)結(jié)和功能分配中的錯誤。l 它主要包括以下幾種: 配置命令測試:驗證全部配置命令的可操作性(有效性);特別對最大配置和最小配置要進行測試。軟件配置和硬件配置都要測試。 循環(huán)配置測試:證明對每個設(shè)備物理與邏輯的,邏輯與功能的每次循環(huán)置換配置都能正常工作。 修復(fù)測試:檢查每種配置狀態(tài)及哪個設(shè)備是壞的。并用自動的或手工的方式進行配置狀態(tài)間的轉(zhuǎn)換。8、安全性測試安全性測試是要檢驗在系統(tǒng)中已經(jīng)存在的系統(tǒng)安全性、保密性措施是否發(fā)揮作用,有無漏洞。l 力圖破壞系統(tǒng)的保護機構(gòu)以進入系統(tǒng)的主要方法有以下幾種: 正面攻擊或從側(cè)面、背面攻擊系統(tǒng)中易受損壞的那些部分;
40、 以系統(tǒng)輸入為突破口,利用輸入的容錯性進行正面攻擊; 申請和占用過多的資源壓垮系統(tǒng),以破壞安全措施,從而進入系統(tǒng); 故意使系統(tǒng)出錯,利用系統(tǒng)恢復(fù)的過程,竊取用戶口令及其它有用的信息; 通過瀏覽殘留在計算機各種資源中的垃圾(無用信息),以獲取如口令,安全碼,譯碼關(guān)鍵字等信息; 瀏覽全局數(shù)據(jù),期望從中找到進入系統(tǒng)的關(guān)鍵字; 瀏覽那些邏輯上不存在,但物理上還存在的各種記錄和資料等。 9、可使用性測試 可使用性測試主要從使用的合理性和方便性等角度對軟件系統(tǒng)進行檢查,發(fā)現(xiàn)人為因素或使用上的問題。 要保證在足夠詳細的程度下,用戶界面便于使用;對輸入量可容錯、響應(yīng)時間和響應(yīng)方式合理可行、輸出信息有意義、正確
41、并前后一致;出錯信息能夠引導(dǎo)用戶去解決問題;軟件文檔全面、正規(guī)、確切。10、可支持性測試這類測試是要驗證系統(tǒng)的支持策略對于公司與用戶方面是否切實可行。 它所采用的方法是 試運行支持過程(如對有錯部分打補丁的過程,熱線界面等); 對其結(jié)果進行質(zhì)量分析; 評審診斷工具; 維護過程、內(nèi)部維護文檔; 修復(fù)一個錯誤所需平均最少時間11、安裝測試安裝測試的目的不是找軟件錯誤,而是找安裝錯誤。 在安裝軟件系統(tǒng)時,會有多種選擇。 要分配和裝入文件與程序庫 布置適用的硬件配置 進行程序的聯(lián)結(jié)。 而安裝測試就是要找出在這些安裝過程中出現(xiàn)的錯誤。 安裝測試是在系統(tǒng)安裝之后進行測試。它要檢驗: 用戶選擇的一套任選方案
42、是否相容; 系統(tǒng)的每一部分是否都齊全; 所有文件是否都已產(chǎn)生并確有所需要的內(nèi)容; 硬件的配置是否合理,等等。12、過程測試 在一些大型的系統(tǒng)中,部分工作由軟件自動完成,其它工作則需由各種人員,包括操作員,數(shù)據(jù)庫管理員,終端用戶等,按一定規(guī)程同計算機配合,靠人工來完成。 指定由人工完成的過程也需經(jīng)過仔細的檢查,這就是所謂的過程測試。13、互連測試 互連測試是要驗證兩個或多個不同的系統(tǒng)之間的互連性。14、兼容性測試 這類測試主要想驗證軟件產(chǎn)品在不同版本之間的兼容性。有兩類基本的兼容性測試: 向下兼容 交錯兼容15、容量測試 容量測試是要檢驗系統(tǒng)的能力最高能達到什么程度。例如, 對于編譯程序,讓它處
43、理特別長的源程序; 對于操作系統(tǒng),讓它的作業(yè)隊列“滿員”; 對于信息檢索系統(tǒng),讓它使用頻率達到最大。在使系統(tǒng)的全部資源達到“滿負荷”的情形下,測試系統(tǒng)的承受能力。16、文檔測試這種測試是檢查用戶文檔(如用戶手冊)的清晰性和精確性。 用戶文檔中所使用的例子必須在測試中一一試過,確保敘述正確無誤。十四、調(diào)試(Debug)¨ 軟件調(diào)試是在進行了成功的測試之后才開始的工作。它與軟件測試不同,調(diào)試的任務(wù)是進一步診斷和改正程序中潛在的錯誤。¨ 調(diào)試活動由兩部分組成: 確定程序中可疑錯誤的確切性質(zhì)和位置。 對程序(設(shè)計,編碼)進行修改,排除這個錯誤。¨ 調(diào)試工作是一個具有很強技
44、巧性的工作。¨ 軟件運行失效或出現(xiàn)問題,往往只是潛在錯誤的外部表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒有明顯的聯(lián)系。如果要找出真正的原因,排除潛在的錯誤,不是一件易事。¨ 可以說,調(diào)試是通過現(xiàn)象,找出原因的一個思維分析的過程。(一)調(diào)試的步驟(1) 從錯誤的外部表現(xiàn)形式入手,確定程序中出錯位置;(2) 研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因;(3) 修改設(shè)計和代碼,以排除這個錯誤;(4) 重復(fù)進行暴露了這個錯誤的原始測試或某些有關(guān)測試。 從技術(shù)角度來看,查找錯誤的難度在于: 現(xiàn)象與原因所處的位置可能相距甚遠。 當(dāng)其它錯誤得到糾正時,這一錯誤所表現(xiàn)出的現(xiàn)象可能會暫時消失,但并未實
45、際排除。 現(xiàn)象實際上是由一些非錯誤原因(例如,舍入不精確)引起的。 現(xiàn)象可能是由于一些不容易發(fā)現(xiàn)的人為錯誤引起的。 錯誤是由于時序問題引起的,與處理過程無關(guān)。 現(xiàn)象是由于難于精確再現(xiàn)的輸入狀態(tài)(例如,實時應(yīng)用中輸入順序不確定)引起。 現(xiàn)象可能是周期出現(xiàn)的。在軟、硬件結(jié)合的嵌入式系統(tǒng)中常常遇到。(二)幾種主要的調(diào)試方法調(diào)試的關(guān)鍵在于推斷程序內(nèi)部的錯誤位置及原因。可以采用以下方法:1、強行排錯這種調(diào)試方法目前使用較多,效率較低。它不需要過多的思考,比較省腦筋。例如: 通過內(nèi)存全部打印來調(diào)試,在這大量的數(shù)據(jù)中尋找出錯的位置。 在程序特定部位設(shè)置打印語句,把打印語句插在出錯的源程序的各個關(guān)鍵變量改變部
46、位、重要分支部位、子程序調(diào)用部位,跟蹤程序的執(zhí)行,監(jiān)視重要變量的變化。 自動調(diào)試工具。利用某些程序語言的調(diào)試功能或?qū)iT的交互式調(diào)試工具,分析程序的動態(tài)過程,而不必修改程序。應(yīng)用以上任一種方法之前,都應(yīng)當(dāng)對錯誤的征兆進行全面徹底的分析,得出對出錯位置及錯誤性質(zhì)的推測,再使用一種適當(dāng)?shù)恼{(diào)試方法來檢驗推測的正確性。2、回溯法調(diào)試這是在小程序中常用的一種有效的調(diào)試方法。一旦發(fā)現(xiàn)了錯誤,人們先分析錯誤征兆,確定最先發(fā)現(xiàn)“癥狀”的位置。然后,人工沿程序的控制流程,向回追蹤源程序代碼,直到找到錯誤根源或確定錯誤產(chǎn)生的范圍。¨ 例如,程序中發(fā)現(xiàn)錯誤處是某個打印語句。通過輸出值可推斷程序在這一點上變量
47、的值。再從這一點出發(fā),回溯程序的執(zhí)行過程,反復(fù)考慮:“如果程序在這一點上的狀態(tài)(變量的值)是這樣,那么程序在上一點的狀態(tài)一定是這樣.”, 直到找到錯誤的位置。3、歸納法調(diào)試¨ 歸納法是一種從特殊推斷一般的系統(tǒng)化思考方法。歸納法調(diào)試的基本思想是:從一些線索(錯誤征兆)著手,通過分析它們之間的關(guān)系來找出錯誤。 收集有關(guān)的數(shù)據(jù) 列出所有已知的測試用例和程序執(zhí)行結(jié)果??茨男┹斎霐?shù)據(jù)的運行結(jié)果是正確的,哪些輸入數(shù)據(jù)的運行結(jié)果有錯誤。 組織數(shù)據(jù) 由于歸納法是從特殊到一般的推斷過程,所以需要組織整理數(shù)據(jù),以發(fā)現(xiàn)規(guī)律。 常以3W1H形式組織可用的數(shù)據(jù):“What” 列出一般現(xiàn)象;“Where”說明發(fā)
48、現(xiàn)現(xiàn)象的地點;“When” 列出現(xiàn)象發(fā)生時所有已知情況;“How” 說明現(xiàn)象的范圍和量級;“Yes”描述出現(xiàn)錯誤的3W1H;“No”作為比較,描述了沒有錯誤的3W1H。通過分析找出矛盾來。 提出假設(shè)分析線索之間的關(guān)系,利用在線索結(jié)構(gòu)中觀察到的矛盾現(xiàn)象,設(shè)計一個或多個關(guān)于出錯原因的假設(shè)。如果一個假設(shè)也提不出來,歸納過程就需要收集更多的數(shù)據(jù)。此時,應(yīng)當(dāng)再設(shè)計與執(zhí)行一些測試用例,以獲得更多的數(shù)據(jù)。 證明假設(shè)把假設(shè)與原始線索或數(shù)據(jù)進行比較,若它能完全解釋一切現(xiàn)象,則假設(shè)得到證明;否則,就認為假設(shè)不合理,或不完全,或是存在多個錯誤,以致只能消除部分錯誤。4、 演繹法調(diào)試演繹法是一種從一般原理或前提出發(fā),
49、經(jīng)過排除和精化的過程來推導(dǎo)出結(jié)論的思考方法。演繹法排錯是測試人員首先根據(jù)已有的測試用例,設(shè)想及枚舉出所有可能出錯的原因做為假設(shè);然后再用原始測試數(shù)據(jù)或新的測試,從中逐個排除不可能正確的假設(shè);最后,再用測試數(shù)據(jù)驗證余下的假設(shè)確是出錯的原因。 列舉所有可能出錯原因的假設(shè)把所有可能的錯誤原因列成表。通過它們,可以組織、分析現(xiàn)有數(shù)據(jù)。 利用已有的測試數(shù)據(jù),排除不正確的假設(shè)仔細分析已有的數(shù)據(jù),尋找矛盾,力求排除前一步列出所有原因。如果所有原因都被排除了,則需要補充一些數(shù)據(jù)(測試用例),以建立新的假設(shè)。 改進余下的假設(shè)利用已知的線索,進一步改進余下的假設(shè),使之更具體化,以便可以精確地確定出錯位置。 證明余
50、下的假設(shè)(三)調(diào)試原則¨ 在調(diào)試方面,許多原則本質(zhì)上是心理學(xué)方面的問題。調(diào)試由兩部分組成,調(diào)試原則也分成兩組。¨ 確定錯誤的性質(zhì)和位置的原則 用頭腦去分析思考與錯誤征兆有關(guān)的信息。 避開死胡同。 只把調(diào)試工具當(dāng)做輔助手段來使用。利用調(diào)試工具,可以幫助思考,但不能代替思考。 避免用試探法,最多只能把它當(dāng)做最后手段。 修改錯誤的原則 在出現(xiàn)錯誤的地方,很可能還有別的錯誤。 修改錯誤的一個常見失誤是只修改了這個錯誤的征兆或這個錯誤的表現(xiàn),而沒有修改錯誤的本身。 當(dāng)心修正一個錯誤的同時有可能會引入新的錯誤。 修改錯誤的過程將迫使人們暫時回到程序設(shè)計階段。 修改源代碼程序,不要改變目
51、標(biāo)代碼。軟件測試的定義一、 1、三種觀點:IEEE在1983年定義為“使用人工或自動手段運行或者測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實際結(jié)果之間的差別”,該定義明確提出了軟件測試以檢驗是否滿足需求為目標(biāo)Myers認為“軟件測試時為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程”,明確提出了“尋找錯誤”是測試目的;從軟件質(zhì)量保證的角度看,軟件測試時一種重要的軟件質(zhì)量保證活動,其動機是通過一些經(jīng)濟、高效的方法,捕捉軟件中的錯誤,從而達到保證軟件內(nèi)在質(zhì)量的目的。軟件測試是在軟件投入運行前,對軟件需求分析,設(shè)計規(guī)格說明和編碼的最終復(fù)審,是軟件質(zhì)量保證的關(guān)鍵步驟。第一題1 main () 2 3 int num1=0, num2=0, score=100; 4 int i; 5 char str; 6 scanf (“%d, %cn”, &i, &str); 7 while (i<5) 8 9 if (str=T) 10 num1+; 11 else if (str=F) 12 13 score=score-10; 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股東協(xié)議終止后公司注銷代理協(xié)議
- 餐飲店員工培訓(xùn)與薪酬體系協(xié)議
- 物業(yè)聯(lián)合服務(wù)協(xié)議書范本
- 婚前財物退還協(xié)議書范本
- 智慧城市核心區(qū)廠房轉(zhuǎn)租及智能化改造合同
- 燒烤美食城整體租賃及經(jīng)營管理協(xié)議
- 【課件】密度的應(yīng)用.-2024-2025學(xué)年八年級物理人教版(2024)上冊
- 茶飲制作培訓(xùn)
- 2024年高爾夫項目建議書
- 機加工工件全流程管理
- 企業(yè)法務(wù)概論智慧樹知到期末考試答案2024年
- (高清版)DZT 0331-2020 地?zé)豳Y源評價方法及估算規(guī)程
- GB/T 7939.1-2024液壓傳動連接試驗方法第1部分:管接頭
- 低壓配電系統(tǒng)維護保養(yǎng)及操作規(guī)程
- 肝癌科普講座課件
- 血糖監(jiān)測小講課ppt
- 學(xué)齡兒童多動癥ADHD診治指南課件
- 石膏固定術(shù)課件
- 實習(xí)生-OFFER正式通知函
- 閑魚開店運營計劃書模板
- 雙一流大學(xué)完整版本
評論
0/150
提交評論