【正文】
缺點(diǎn): 階段間具有順序性,各階段依賴性強(qiáng),缺乏靈活性。 ? 可以說, 調(diào)試是通過現(xiàn)象,找出原因的一個(gè)思維分析的過程 。 ? 測試時(shí),開發(fā)者通常不在測試現(xiàn)場。 141 (A1) and (B=0) (A=2) or (X1) X=X/A X=X+1 T T F F a b d c e 142 L1 ( a ? c ? e ) = {(A1) and (B=0)} and {(A=2) or (X1)} = (A1) and (B=0) and (A=2) or (A1) and (B=0) and (X1) = (A=2) and (B=0) or (A1) and (B=0) and (X1) (A1) and (B=0) (A=2) or (X1) X=X/A X=X+1 T T F F a b d c e 143 L2 ( a? b ? d ) = not{(A1) and (B=0)} and not{(A=2) or (X1)} = { not (A1) or not (B=0) } and { not (A=2) and not (X1) } = not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1) (A1) and (B=0) (A=2) or (X1) X=X/A X=X+1 T T F F a b d c e 144 L3 ( a? b? e) = not {(A1) and (B=0)} and {(A=2) or (X1)} = { not (A1) or not (B=0)} and {(A=2) or (X1)} = not (A1) and (A=2) or not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1) (A1) and (B=0) (A=2) or (X1) X=X/A X=X+1 T T F F a b d c e 145 L4 ( a? c ? d ) = {(A1) and (B=0)} and not {(A=2) or (X1)} = (A1) and (B=0) and not (A=2) and not (X1) (A1) and (B=0) (A=2) or (X1) X=X/A X=X+1 T T F F a b d c e 146 語句覆蓋 ? 語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得 每一可執(zhí)行語句至少執(zhí)行一次 。 135 劃分等價(jià)類原則 (1) 如果輸入條件規(guī)定了 取值范圍,或值的個(gè)數(shù) ,則可以確立一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類。 126 127 ? 兩種常用的測試方法 ? 黑盒測試 ? 白盒測試 128 黑盒測試 ? 把 測試對(duì)象 看做 一個(gè)黑盒子 ,測試人員完全 不考慮 程序 內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性 ,只 依據(jù) 程序的 需求規(guī)格說明書 ,檢查程序的功能是否符合它的功能說明。 ( 2) 動(dòng)態(tài)測試 動(dòng)態(tài)測試指通過運(yùn)行程序發(fā)現(xiàn)錯(cuò)誤 。 20. 對(duì)太大的程序,要分塊編寫、測試,然后再集成。事實(shí)上,程序效率的提高主要應(yīng)通過選擇高效的算法來實(shí)現(xiàn)。使程序的邏輯結(jié)構(gòu)更加清晰。 ? 在一個(gè)程序中,一個(gè)變量只應(yīng)用于一種用途。 4)其他設(shè)計(jì) 。 84 事務(wù)型數(shù)據(jù)流圖 定義:圖中某個(gè)加工將它的輸入數(shù)據(jù)流分離成一串發(fā)散的數(shù)據(jù)流,形成許多活動(dòng)的路徑(分支),并根據(jù)輸入的值選擇其中的一個(gè)路徑,具有這樣特征的數(shù)據(jù)流圖。 將軟件系統(tǒng)劃分模塊時(shí) , 盡量 做到高內(nèi)聚低耦合 , 提高模塊的獨(dú)立性 , 為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ) 。 b. 數(shù)據(jù)庫設(shè)計(jì)說明書 。有時(shí)侯它比判定表更直觀。 回答系統(tǒng)必須 “ 做什么 ” 的問題 。 在技術(shù)分析過程中,分析員 收集系統(tǒng)的性能、可靠性、可維護(hù)性和生產(chǎn)率方面的信息, 分析實(shí)現(xiàn)系統(tǒng)功能、性能所需的技術(shù)、方法、算法或過程 ,從技術(shù)角度分析可能存在的風(fēng)險(xiǎn),以及這些技術(shù)問題對(duì)成本的影響。 將軟件工程劃分為若干階段,分配方法和工具,定義每個(gè)階段的先后順序和完成標(biāo)志。原因是用于控制火星探測器的計(jì)算機(jī)軟件 FORTRAN程序: DO 5 I=1, 3 誤寫 為: DO 5 I= 危機(jī)實(shí)例( 2): 1967年蘇聯(lián) “ 聯(lián)盟一號(hào) ” 載人宇宙飛船在返航時(shí),由于軟件忽略一個(gè)小數(shù)點(diǎn),在進(jìn)入大氣層時(shí)因打不開降落傘而燒毀。 ?持久性 — 無時(shí)間損壞。 計(jì)算機(jī)科學(xué)、數(shù)學(xué)用于構(gòu)造模型與算法; 工程科學(xué)用于制定規(guī)范、設(shè)計(jì)范型、評(píng)估成本及確定權(quán)衡; 管理科學(xué)用于用于計(jì)劃、資源、質(zhì)量、成本等管理。 1. 技術(shù)可行性 2. 經(jīng)濟(jì)可行性 3. 社會(huì)可行性 ? 內(nèi)容 23 軟件可行性研究 1. 技術(shù)可行性 對(duì)要開發(fā)項(xiàng)目的功能 、 性能 、 限制條件進(jìn)行分析 , 確定在現(xiàn)有的資源條件下 , 技術(shù)風(fēng)險(xiǎn)有多大 , 項(xiàng)目是否能實(shí)現(xiàn) 。 4. 所建議系統(tǒng)的技術(shù)可行性分析 。 描述工具是: ( 1) 數(shù)據(jù)流圖 ( DFD) ( 2) 描述加工邏輯的工具: 結(jié)構(gòu)化語言 、 判定表 、判定樹 ( 3) 數(shù)據(jù)字典 結(jié)構(gòu)化分析 ( Structured Analysis, 簡稱 SA) , 是面向數(shù)據(jù)流進(jìn)行需求分析的方法 。 c. 確定模塊之間的調(diào)用關(guān)系 。 抽象 是認(rèn)識(shí)復(fù)雜現(xiàn)象過程中使用的思維工具 軟件工程過程中的每一步部可以看作是對(duì)軟件解決方法的抽象層次的一次細(xì)化 。 內(nèi)聚性有以下七類類型: 偶然內(nèi)聚 、 邏輯內(nèi)聚 、 時(shí)間內(nèi)聚 、 過程內(nèi)聚 、 通信內(nèi)聚 、 順序內(nèi)聚 、 功能內(nèi)聚 , 它們的內(nèi)聚程度由低到高 。 87 88 第四步:設(shè)計(jì)上層模塊結(jié)構(gòu) :自頂向下的設(shè)計(jì)方法。 圖形: 程序流程圖、 NS圖 、 PAD圖 表格: 判定表 語言: 過程設(shè)計(jì)語言( PDL) 94 四、 軟件編碼 軟件編碼是將詳細(xì)設(shè)計(jì)得到的處理過程的描述轉(zhuǎn)換為基于某種計(jì)算機(jī)語言的程序,即源程序代碼。而不要解釋下面怎么做。 106 數(shù)據(jù)說明 ? 如果設(shè)計(jì)了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋來說明在程序?qū)崿F(xiàn)時(shí)這個(gè)數(shù)據(jù)結(jié)構(gòu)的固有特點(diǎn)。 “否定”條件的條件語句 14. 盡可能用通俗易懂的偽碼來描述程序的流程,然后再翻譯成必須使用的語言。 3)除了檢查程序是否做了 它應(yīng)該做的事 , 還應(yīng)該檢查程序是否做了 它不應(yīng)該做的事 。 122 ? 通過收集和分析測試結(jié)果數(shù)據(jù),對(duì)軟件建立可靠性模型 ? 利用可靠性分析,評(píng)價(jià)軟件質(zhì)量: ? 軟件的質(zhì)量和可靠性達(dá)到可以接受的程度; ? 所做的測試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤; ? 如果測試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,測試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然潛伏在軟件中。 133 等價(jià)類劃分 ?使用這一方法設(shè)計(jì)測試用例要經(jīng)歷 劃分等價(jià)類(列出等價(jià)類表)和 選取測試用例 兩步。 137 ? 軟件人員使用白盒測試方法,主要想對(duì)程序模塊進(jìn)行如下的檢查: ? 對(duì)程序模塊的 所有獨(dú)立的執(zhí)行路徑 至少測試一次; ? 對(duì) 所有的邏輯判定 , 取“真”與取“假”的兩種情況都至少測試一次 ; ? 在循環(huán)的 邊界 和運(yùn)行 界限 內(nèi)執(zhí)行循環(huán)體; ? 測試 內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性 ,等。 測 試 用 例 通過路徑 覆蓋條件 【 (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)】 acd (L4) T T T T1 2 3 4T1 2 3 4T T T T1 2 3 4T T3 41 2160 α測試和 β測試 ? 在軟件交付使用之后,用戶將如何實(shí)際使用程序,對(duì)于開發(fā)者來說是無法預(yù)測的。 ? 軟件調(diào)試是在進(jìn)行了成功的測試之后才開始的工作。 167 六、軟件運(yùn)行與維護(hù) 〈 一 〉 運(yùn)行 提交用戶使用 , 根據(jù)用戶反饋意見進(jìn)行下一步的系統(tǒng)維護(hù) 。螺旋模型 結(jié)合了瀑布模型和演化模型的優(yōu)。 ( 4) 回溯法調(diào)試 。同時(shí),產(chǎn)品的所有手冊文本也應(yīng)該在此階段完全定稿。 155 測 試 用 例 覆蓋分支 條件取值 【 (2, 0, 4), (2, 0, 3)】 L1(c, e) 【 (1, 1, 1), (1, 1, 1)】 L2(b, d) T T T T1 2 3 4T1 2 3 4(A=2) and (B=0) or (A1) and (B=0) and (X1) not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1) 156 and or A1 T B=0 T X=X/A T F F A=2 T F X1 F X=X+1 157 條件組合覆蓋 ? 條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得 每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次 。 ? 通過在 不同點(diǎn)檢查程序的狀態(tài) ,確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。 132 等價(jià)類劃分 ?等價(jià)類劃分是一種典型的黑盒測試方法,使用這一方法時(shí), 完全不考慮程序的內(nèi)部結(jié)構(gòu) , 只依據(jù)程序的規(guī)格說明來設(shè)計(jì)測試用例 。 ? 排錯(cuò) (調(diào)試 ):對(duì)已經(jīng)發(fā)現(xiàn)的錯(cuò)誤進(jìn)行錯(cuò)誤定位和確定出錯(cuò)性質(zhì),并改正這些錯(cuò)誤,同時(shí)修改相關(guān)的文檔。 115 一 軟件測試 在軟件測試中 , 應(yīng)注意以下指導(dǎo)原則: 1)測試用例應(yīng)由 輸入數(shù)據(jù) 和 預(yù)期的輸出數(shù)據(jù) 兩部分組成 。 11. 避免使用空的 ELSE語句和 IF… THEN IF… 的語句。 ? 當(dāng)多個(gè)變量名在一個(gè)說明語句中說明時(shí),應(yīng)當(dāng)對(duì)這些變量按字母的順序排列。 ? 有關(guān)項(xiàng)目包括: ? 程序標(biāo)題; ? 有關(guān)本模塊功能和目的的說明; ? 主要算法; ? 接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單; 101 序言性注釋 ? 有關(guān)數(shù)據(jù)描述:重要的變量及其用途,約束或限制條件,以及其它有關(guān)信息; ? 模塊位置:在哪一個(gè)源文件中,或隸屬于哪一個(gè)軟件包; ? 開發(fā)簡歷:模塊設(shè)計(jì)者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等。 它的主要觀點(diǎn)是采用自頂向下 、 逐步求精的程序設(shè)計(jì)方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序 , 任何程序都可由順序 、選擇 、 重復(fù)三種基本控制結(jié)構(gòu)構(gòu)造 。 變換設(shè)計(jì): 從變換型數(shù)據(jù)流圖導(dǎo)出軟件模塊結(jié)構(gòu)的過程。 指模塊的功能強(qiáng)度的度量 , 即一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量 。 每個(gè)模塊完成一個(gè)特定的子功能 , 所有的模塊按某種方法組裝起來 , 成為一個(gè)整體 ,完成整個(gè)系統(tǒng)所要求的功能 。 63 1. 軟件概要設(shè)計(jì) ? 概要設(shè)計(jì)基本任務(wù) ? 概要設(shè)計(jì)基本原理 64 ( 1)概要設(shè)計(jì)基本任務(wù) 1) 進(jìn)行軟件系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì) 2)進(jìn)行軟件中所使用的數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫的設(shè)計(jì) 3)編寫概要設(shè)計(jì)文檔 4)進(jìn)行概要設(shè)計(jì)的評(píng)審 65 ( 1)概要設(shè)計(jì)基本任務(wù) 1) 軟件系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì) a. 采用某種設(shè)計(jì)方法 , 將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊 。 ( 3)編寫文檔。 2. 可行性研究前提 。 從邏輯模型出發(fā) , 經(jīng)過壓縮的設(shè)計(jì) , 找出幾種可供選擇的解決辦法 。程序設(shè)計(jì)工作正像這樣一個(gè)泥潭,一批批程序員被迫在泥潭中拼命掙扎, …… 誰也沒料到問題竟會(huì)陷入這樣的困境 ……” 10 軟件危機(jī)的表現(xiàn) ? 對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不正確 ? 用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生 ? 軟件產(chǎn)品的質(zhì)量往往靠不住 ? 軟