軟件工程第8章軟件測(cè)試.ppt_第1頁(yè)
軟件工程第8章軟件測(cè)試.ppt_第2頁(yè)
軟件工程第8章軟件測(cè)試.ppt_第3頁(yè)
軟件工程第8章軟件測(cè)試.ppt_第4頁(yè)
軟件工程第8章軟件測(cè)試.ppt_第5頁(yè)
已閱讀5頁(yè),還剩154頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第八章 8 軟件測(cè)試 本章內(nèi)容 8 1軟件測(cè)試背景8 2軟件測(cè)試的基本概念8 3測(cè)試用例的設(shè)計(jì)8 4軟件測(cè)試過(guò)程 8 1軟件測(cè)試背景 8 1 1軟件缺陷與故障案例軟件缺陷的定義軟件缺陷的特征8 1 2軟件缺陷產(chǎn)生的原因 8 1 1軟件缺陷與故障 1 軟件缺陷和軟件故障案例案例1美國(guó)迪斯尼公司的獅子王游戲軟件bug兼容性問(wèn)題案例2美國(guó)航天局火星登陸事故系統(tǒng)測(cè)試銜接問(wèn)題案例3跨世紀(jì) 千年蟲(chóng) 問(wèn)題案例4愛(ài)國(guó)者導(dǎo)彈防御系統(tǒng)炸死自家人系統(tǒng)時(shí)鐘誤差積累案例5英特爾奔騰浮點(diǎn)除法上述所有實(shí)例中的軟件問(wèn)題在軟件工程或軟件測(cè)試中都被稱(chēng)為軟件缺陷或軟件故障 軟件是復(fù)雜的 知識(shí)高度密集的邏輯產(chǎn)品 因此軟件錯(cuò)誤防不勝防 對(duì)于規(guī)模大 復(fù)雜性高的軟件更是如此 這些錯(cuò)誤中 有些神之石致命的 若不排除 會(huì)導(dǎo)致財(cái)產(chǎn)以及生命的重大損失 1963年美國(guó)飛往火星的火箭爆炸 造成1000萬(wàn)美元的損失 原因是FORTRAN程序 DO5I 1 3誤寫(xiě)為 DO5I 1 3 1967年蘇聯(lián) 聯(lián)盟一號(hào) 載人宇宙飛船在返航時(shí) 由于軟件忽略一個(gè)小數(shù)點(diǎn) 導(dǎo)至在進(jìn)入大氣層時(shí)因打不開(kāi)降落傘而燒毀 軟件危機(jī) 軟件缺陷與故障 續(xù) 2 軟件缺陷的定義 1 軟件未達(dá)到產(chǎn)品說(shuō)明書(shū)中已經(jīng)標(biāo)明的功能 2 軟件出現(xiàn)了產(chǎn)品說(shuō)明書(shū)中指明不會(huì)出現(xiàn)的錯(cuò)誤 3 軟件未達(dá)到產(chǎn)品說(shuō)明書(shū)中雖未指出但應(yīng)當(dāng)達(dá)到的目標(biāo) 4 軟件功能超出了產(chǎn)品說(shuō)明書(shū)中指明的范圍 5 軟件測(cè)試人員認(rèn)為軟件難以理解 不易使用 或者最終用戶(hù)認(rèn)為該軟件使用效果不良 軟件缺陷與故障 續(xù) 3 軟件缺陷的特征 看不到 軟件的特殊性決定了缺陷不易看到 看到但是抓不到 發(fā)現(xiàn)了缺陷 但不易找到問(wèn)題發(fā)生的原因所在 8 1 2軟件缺陷產(chǎn)生的原因 軟件缺陷的主要類(lèi)型 現(xiàn)象 功能 特性沒(méi)有實(shí)現(xiàn)或部分實(shí)現(xiàn)設(shè)計(jì)不合理 存在缺陷實(shí)際結(jié)果和預(yù)期結(jié)果不一致運(yùn)行出錯(cuò) 包括運(yùn)行中斷 系統(tǒng)崩潰 界面混亂數(shù)據(jù)結(jié)果不正確 精度不夠用戶(hù)不能接受的其他問(wèn)題 如存取時(shí)間過(guò)長(zhǎng) 界面不美觀 常見(jiàn)導(dǎo)致錯(cuò)誤的根源 缺乏有效的溝通 或者沒(méi)有進(jìn)行溝通 軟件復(fù)雜度不斷變更的需求時(shí)間的壓力缺乏文檔的代碼軟件開(kāi)發(fā)工具 圖8 1軟件缺陷產(chǎn)生的原因分布 軟件缺陷產(chǎn)生的原因有很多 但最主要的原因要?dú)w咎于產(chǎn)品描述 軟件測(cè)試的復(fù)雜性分析 續(xù) 8 2軟件測(cè)試基礎(chǔ)概念 8 2 1軟件測(cè)試的定義8 2 2軟件測(cè)試的基本概念8 2 3軟件測(cè)試方法與策略 8 2 1軟件測(cè)試定義 軟件測(cè)試是一個(gè)貫徹于軟件開(kāi)發(fā)過(guò)程始終的過(guò)程 是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程 是根據(jù)軟件開(kāi)發(fā)各階段的規(guī)格說(shuō)明和程序的內(nèi)部結(jié)構(gòu)結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例 什么是軟件測(cè)試 使用人工或者自動(dòng)手段來(lái)運(yùn)行或測(cè)定某個(gè)系統(tǒng)的過(guò)程目的在于檢驗(yàn)它是否滿足規(guī)定的需求 弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別可簡(jiǎn)述為 按照特定規(guī)程 發(fā)現(xiàn)軟件錯(cuò)誤的過(guò)程 軟件測(cè)試定義 續(xù) 1 軟件測(cè)試的目的 軟件測(cè)試的目標(biāo)是以最少的時(shí)間和人力 系統(tǒng)的找出軟件中潛在的各種錯(cuò)誤和缺陷測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程好的測(cè)試方案 測(cè)試用例 在于盡可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試 8 2 2軟件測(cè)試基本概念 軟件測(cè)試目的 續(xù) 測(cè)試并不僅僅是為了找出錯(cuò)誤 通過(guò)分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的發(fā)生趨勢(shì) 可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前軟件開(kāi)發(fā)過(guò)程中的缺陷 以便及時(shí)改進(jìn) 這種分析也能幫助測(cè)試人員設(shè)計(jì)出有針對(duì)性的測(cè)試方法 改善測(cè)試的效率和有效性 沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的 完整的測(cè)試是評(píng)定軟件質(zhì)量的一種方法 軟件測(cè)試員的目標(biāo) 發(fā)現(xiàn)軟件缺陷 2 軟件測(cè)試的目標(biāo) 最終目的是確保軟件的功能符合用戶(hù)的需求 把盡可能多的問(wèn)題在發(fā)布或交付前發(fā)現(xiàn)并改正 確保軟件完成了它所承諾或公布的功能 缺少規(guī)范的書(shū)面文檔 確保軟件滿足性能的要求 界面 操作 性能 確保軟件是健壯的和適應(yīng)用戶(hù)環(huán)境的 哪怕不健壯 也要給出解決方案 2 軟件測(cè)試的目標(biāo) 為軟件的質(zhì)量評(píng)估提供依據(jù) 項(xiàng)目驗(yàn)收 為軟件質(zhì)量改進(jìn)和管理提供幫助 經(jīng)驗(yàn)教訓(xùn)等知識(shí)轉(zhuǎn)移 軟件測(cè)試的生命周期 3 軟件測(cè)試的特性 軟件測(cè)試與分析 設(shè)計(jì) 編碼等工作相比 具有若干特殊的性質(zhì) 挑剔性 測(cè)試是一種 挑剔性 行為 以證明程序有錯(cuò)的目的去進(jìn)行測(cè)試 才能把程序中潛在的錯(cuò)誤找出來(lái) 復(fù)雜性 設(shè)計(jì)測(cè)試用例是一項(xiàng)需要細(xì)致和高度技巧的工作 不徹底性 測(cè)試只能證明軟件中存在錯(cuò)誤 不能證明軟件中不存在錯(cuò)誤所謂徹底測(cè)試 也就是窮舉測(cè)試 顯然在實(shí)際測(cè)試中無(wú)法實(shí)現(xiàn)或行不通 經(jīng)濟(jì)性 降低測(cè)試成本 應(yīng)遵守的經(jīng)濟(jì)性原則 一 根據(jù)程序的重要性和一旦發(fā)生故障將造成的損失來(lái)確定他的可靠性等級(jí) 不要隨意提高等級(jí)使測(cè)試成本增加 二 要認(rèn)真研究測(cè)試策略 以便使用盡可能少的測(cè)試用例來(lái)發(fā)現(xiàn)盡可能多的程序錯(cuò)誤 為保證測(cè)試質(zhì)量 軟件測(cè)試必須完成規(guī)定的文檔 按照軟件工程的要求 測(cè)試文檔應(yīng)包括測(cè)試計(jì)劃和測(cè)試報(bào)告兩方面內(nèi)容 測(cè)試計(jì)劃的主體是 測(cè)試內(nèi)容說(shuō)明 它包括測(cè)試項(xiàng)目名稱(chēng) 各項(xiàng)測(cè)試的目的 步驟和進(jìn)度 以及測(cè)試用例的設(shè)計(jì)等 測(cè)試報(bào)告的主體是 測(cè)試結(jié)果 它包括測(cè)試項(xiàng)目名稱(chēng) 實(shí)測(cè)結(jié)果與期望結(jié)果的比較 發(fā)現(xiàn)的問(wèn)題 以及測(cè)試達(dá)到的效果 4 軟件測(cè)試的文檔 測(cè)試用例 測(cè)試數(shù)據(jù) 期望結(jié)果 測(cè)試結(jié)果 測(cè)試數(shù)據(jù) 期望結(jié)果 實(shí)際結(jié)果 軟件測(cè)試國(guó)家標(biāo)準(zhǔn) GB T9386 1988 計(jì)算機(jī)軟件測(cè)試文件編制規(guī)范 GB T15532 1995 計(jì)算機(jī)軟件單元測(cè)試規(guī)范 GB T17544 1998 信息技術(shù)軟件包質(zhì)量要求和測(cè)試 GB T16260 1 2003 軟件工程產(chǎn)品質(zhì)量 第1部份 質(zhì)量模型GB T16260 2 200X 軟件工程產(chǎn)品質(zhì)量 第2部份 外部度量GB T16260 3 200X 軟件工程產(chǎn)品質(zhì)量 第3部份 內(nèi)部度量GB T16260 4 200X 軟件工程產(chǎn)品質(zhì)量 第4部份 使用質(zhì)量度量GB T18905 1 2002 軟件工程產(chǎn)品質(zhì)量 第1部份 概述GB T18905 2 2002 軟件工程產(chǎn)品質(zhì)量 第2部份 策劃和管理GB T18905 3 2002 軟件工程產(chǎn)品質(zhì)量 第3部份 開(kāi)發(fā)者用的過(guò)程GB T18905 4 2002 軟件工程產(chǎn)品質(zhì)量 第4部份 需方用的過(guò)程GB T18905 5 2002 軟件工程產(chǎn)品質(zhì)量 第5部份 評(píng)價(jià)者用的過(guò)程GB T18905 6 2002 軟件工程產(chǎn)品質(zhì)量 第6部份 評(píng)價(jià)模塊文檔編寫(xiě) 國(guó)標(biāo)來(lái)自的國(guó)際標(biāo) GB T16260 1 6取自ISO IEC9126 1 2001ISO IEC9126 2 2003ISO IEC9126 3 2003ISO IECTR9126 4 2004GB T18905 1 6取自ISO IEC14598 1 1999ISO IEC14598 2 2000ISO IEC14598 3 2000ISO IEC14598 4 1999ISO IEC14598 5 1998ISO IEC14598 6 2001GB T17544 1998取自ISO IEC12119 1994 5 軟件測(cè)試的原則 Good enough 一種權(quán)衡投入 產(chǎn)出比的原則 選擇測(cè)試保證測(cè)試的覆蓋程度 但窮舉測(cè)試是不可能的 有限測(cè)試所有的測(cè)試都應(yīng)追溯到用戶(hù)需求越早測(cè)試越好 測(cè)試過(guò)程與開(kāi)發(fā)過(guò)程應(yīng)是相結(jié)合的測(cè)試的規(guī)模由小而大 從單元測(cè)試到系統(tǒng)測(cè)試為了盡可能地發(fā)現(xiàn)錯(cuò)誤 應(yīng)該由獨(dú)立的第三方來(lái)測(cè)試不能為了便于測(cè)試擅自修改程序既應(yīng)該測(cè)試軟件該做什么也應(yīng)該測(cè)試軟件不該做什么 傳統(tǒng)的瀑布模型中軟件測(cè)試學(xué)僅處于運(yùn)行維護(hù)階段之前 項(xiàng)目規(guī)劃階段 負(fù)責(zé)從單元測(cè)試到系統(tǒng)測(cè)試的整個(gè)測(cè)試階段的監(jiān)控 需求分析階段 確定測(cè)試需求分析 系統(tǒng)測(cè)試計(jì)劃的制定 評(píng)審后成為管理項(xiàng)目 詳細(xì)設(shè)計(jì)和概要設(shè)計(jì)階段 確保集成測(cè)試計(jì)劃和單元測(cè)試計(jì)劃完成 編碼階段 由開(kāi)發(fā)人員進(jìn)行自己負(fù)責(zé)部分的測(cè)試代碼 在項(xiàng)目較大時(shí) 由專(zhuān)人進(jìn)行編碼階段的測(cè)試任務(wù) 測(cè)試階段 依據(jù)測(cè)試代碼進(jìn)行測(cè)試 并提交相應(yīng)的測(cè)試狀態(tài)報(bào)告和測(cè)試結(jié)束報(bào)告 6 測(cè)試在開(kāi)發(fā)各階段的作用 圖8 2完整的開(kāi)發(fā)流程 7 完整的軟件開(kāi)發(fā)流程 8 軟件測(cè)試和缺陷修復(fù)的代價(jià) 軟件在從需求 設(shè)計(jì) 編碼 測(cè)試一直到交付用戶(hù)公開(kāi)使用后的過(guò)程中 都有可能產(chǎn)生和發(fā)現(xiàn)缺陷 隨著整個(gè)開(kāi)發(fā)過(guò)程的時(shí)間推移 更正缺陷或修復(fù)問(wèn)題的費(fèi)用呈幾何級(jí)數(shù)增長(zhǎng) 圖8 3軟件缺陷在不同階段發(fā)現(xiàn)時(shí)修復(fù)的費(fèi)用示意圖 軟件測(cè)試是有風(fēng)險(xiǎn)的行為 如果決定不去測(cè)試所有的情況 那就是選擇了風(fēng)險(xiǎn) 軟件缺陷的寄生蟲(chóng)性 找到的軟件缺陷越多 就說(shuō)明軟件缺陷越多 原因 程序員的疲倦程序員往往犯同樣的錯(cuò)誤某些軟件的缺陷其實(shí)是大災(zāi)難的征兆 軟件測(cè)試的殺蟲(chóng)劑現(xiàn)象 軟件測(cè)試越多 其免疫力越強(qiáng)的現(xiàn)象 克服方法 不斷編寫(xiě)不同的新的測(cè)試程序?qū)Τ绦虻牟煌糠诌M(jìn)行測(cè)試 軟件測(cè)試的不修復(fù)原則 并非所有軟件缺陷都能修復(fù) 不需要修復(fù)軟件缺陷的原因 沒(méi)有足夠的時(shí)間不算真正的軟件缺陷修復(fù)的風(fēng)險(xiǎn)太大不值得修復(fù) Pareto原則 Pareto原則暗示著測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的80 很可能起源于程序模塊中的20 軟件測(cè)試中的誤區(qū) 調(diào)試和測(cè)試是一樣的 測(cè)試組應(yīng)當(dāng)為保證質(zhì)量負(fù)責(zé) 把測(cè)試作為新員工的一個(gè)過(guò)渡工作 關(guān)注測(cè)試的執(zhí)行而忽略測(cè)試的設(shè)計(jì) 測(cè)試自動(dòng)化是萬(wàn)能的 測(cè)試是枯燥乏味 缺乏創(chuàng)造力的工作 8 2 3軟件測(cè)試方法與策略 軟件測(cè)試策略軟件測(cè)試方法測(cè)試關(guān)鍵詞靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試白盒測(cè)試與黑盒測(cè)試軟件測(cè)試模型 軟件測(cè)試策略 什么是軟件測(cè)試策略 是為軟件工程過(guò)程定義的一個(gè)軟件測(cè)試的模板 也就是把特定的測(cè)試用例方法放置進(jìn)去的一系列步驟 軟件測(cè)試策略包含的特征 1 測(cè)試從模塊層開(kāi)始 然后擴(kuò)大延伸到整個(gè)基于計(jì)算機(jī)的系統(tǒng)集合中 2 不同的測(cè)試技術(shù)適用于不同的時(shí)間點(diǎn) 3 測(cè)試是由軟件的開(kāi)發(fā)人員和 對(duì)于大型系統(tǒng)而言 獨(dú)立的測(cè)試組來(lái)管理的 4 測(cè)試和調(diào)試是不同的活動(dòng) 但是調(diào)試必須能夠適應(yīng)任何的測(cè)試策略 軟件測(cè)試策略 測(cè)試信息流分析設(shè)計(jì)階段需求說(shuō)明書(shū)評(píng)測(cè)概要設(shè)計(jì)說(shuō)明書(shū)評(píng)測(cè)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)評(píng)測(cè)軟件編碼規(guī)范評(píng)測(cè)開(kāi)發(fā)階段單元測(cè)試集成測(cè)試確認(rèn)測(cè)試系統(tǒng)測(cè)試驗(yàn)收測(cè)試軟件驗(yàn)證和確認(rèn)過(guò)程 軟件測(cè)試關(guān)鍵詞 單元測(cè)試集成測(cè)試系統(tǒng)測(cè)試確認(rèn)測(cè)試驗(yàn)收測(cè)試白盒測(cè)試黑盒測(cè)試灰盒測(cè)試 單元測(cè)試 單元測(cè)試又稱(chēng)模塊測(cè)試是針對(duì)軟件設(shè)計(jì)的最小單元 程序模塊進(jìn)行正確性檢驗(yàn)的測(cè)試工作其目的在于檢查每個(gè)程序單元能否實(shí)現(xiàn)詳細(xì)設(shè)計(jì)說(shuō)明中的模塊功能 性能 接口和設(shè)計(jì)約束等要求 發(fā)現(xiàn)各模塊內(nèi)部可能存在的錯(cuò)誤 集成測(cè)試 集成測(cè)試 也叫組裝測(cè)試或聯(lián)合測(cè)試在單元測(cè)試的基礎(chǔ)上 將所有模塊按照設(shè)計(jì)要求 如根據(jù)結(jié)構(gòu)圖 組裝成為子系統(tǒng)或系統(tǒng) 進(jìn)行集成測(cè)試集成測(cè)試是檢驗(yàn)程序單元和部件的接口關(guān)系實(shí)踐表明 一些模塊雖然能夠單獨(dú)地工作 但并不能保證連接起來(lái)也能正常的工作 程序在某些局部反映不出來(lái)的問(wèn)題 在全局上很可能暴露出來(lái) 影響功能的實(shí)現(xiàn) 系統(tǒng)測(cè)試 系統(tǒng)測(cè)試是將已經(jīng)確認(rèn)的軟件 計(jì)算機(jī)硬件 外設(shè) 網(wǎng)絡(luò)等其他元素結(jié)合在一起 進(jìn)行信息系統(tǒng)的各種組裝測(cè)試和確認(rèn)測(cè)試 其目的是通過(guò)與系統(tǒng)的需求相比較 發(fā)現(xiàn)所開(kāi)發(fā)的系統(tǒng)與用戶(hù)需求不符或矛盾的地方系統(tǒng)測(cè)試的任務(wù)是近可能徹底的檢查出程序中的錯(cuò)誤 提高軟件系統(tǒng)的可靠性 其目的是檢驗(yàn)系統(tǒng) 做得怎樣 確認(rèn)測(cè)試 確認(rèn)測(cè)試的目的是向未來(lái)的用戶(hù)表明系統(tǒng)能夠像預(yù)定要求那樣工作 經(jīng)集成測(cè)試后 已經(jīng)按照設(shè)計(jì)把所有的模塊組裝成一個(gè)完整的軟件系統(tǒng) 接口錯(cuò)誤也已經(jīng)基本排除了 接著就應(yīng)該進(jìn)一步驗(yàn)證軟件的有效性 這就是確認(rèn)測(cè)試的任務(wù) 即軟件的功能和性能如同用戶(hù)所合理期待的那樣確認(rèn)測(cè)試又稱(chēng)有效性測(cè)試 有效性測(cè)試是在模擬的環(huán)境下 運(yùn)用黑盒測(cè)試的方法 驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說(shuō)明書(shū)列出的需求 任務(wù)是驗(yàn)證軟件的功能和性能及其他特性是否與用戶(hù)的要求一致 對(duì)軟件的功能和性能要求在軟件需求規(guī)格說(shuō)明書(shū)中已經(jīng)明確規(guī)定 它包含的信息就是軟件確認(rèn)測(cè)試的基礎(chǔ) 驗(yàn)收測(cè)試 系統(tǒng)開(kāi)發(fā)生命周期方法論的一個(gè)階段 這時(shí)相關(guān)的用戶(hù)和 或獨(dú)立測(cè)試人員根據(jù)測(cè)試計(jì)劃和結(jié)果對(duì)系統(tǒng)進(jìn)行測(cè)試和接收 它讓系統(tǒng)用戶(hù)決定是否接收系統(tǒng) 它是一項(xiàng)確定產(chǎn)品是否能夠滿足合同或用戶(hù)所規(guī)定需求的測(cè)試這是管理性和防御性控制的測(cè)試過(guò)程 白盒測(cè)試 白盒測(cè)試也稱(chēng)結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試 它是按照程序內(nèi)部的結(jié)構(gòu)測(cè)試程序 通過(guò)測(cè)試來(lái)檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照設(shè)計(jì)規(guī)格說(shuō)明書(shū)的規(guī)定正常進(jìn)行 檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作是把測(cè)試對(duì)象看作一個(gè)打開(kāi)的盒子 測(cè)試人員依據(jù)程序內(nèi)部邏輯結(jié)構(gòu)相關(guān)信息 設(shè)計(jì)或選擇測(cè)試用例 對(duì)程序所有邏輯路徑進(jìn)行測(cè)試 通過(guò)在不同點(diǎn)檢查程序的狀態(tài) 確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致 黑盒測(cè)試 黑盒測(cè)試也稱(chēng)功能測(cè)試 它是通過(guò)測(cè)試來(lái)檢測(cè)每個(gè)功能是否都能正常使用 在測(cè)試地 把程序看作一個(gè)不能打開(kāi)的黑盒子 在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下 在程序接口進(jìn)行測(cè)試 它只檢查程序功能是否按照需求規(guī)格說(shuō)明書(shū)的規(guī)定正常使用 程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息 黑盒測(cè)試著眼于程序外部結(jié)構(gòu) 不考慮內(nèi)部邏輯結(jié)構(gòu) 主要針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試 灰盒測(cè)試 灰盒測(cè)試 確實(shí)是介于白盒測(cè)試與黑盒測(cè)試之間的測(cè)試灰盒測(cè)試關(guān)注輸出對(duì)于輸入的正確性 同時(shí)也關(guān)注內(nèi)部表現(xiàn) 但這種關(guān)注不象白盒那樣詳細(xì) 完整 只是通過(guò)一些表征性的現(xiàn)象 事件 標(biāo)志來(lái)判斷內(nèi)部的運(yùn)行狀態(tài) 有時(shí)候輸出是正確的 但內(nèi)部其實(shí)已經(jīng)錯(cuò)誤了 這種情況非常多 如果每次都通過(guò)白盒測(cè)試來(lái)操作 效率會(huì)很低 因此需要采取這樣的一種灰盒的方法 軟件測(cè)試技術(shù)的發(fā)展趨勢(shì) 1 軟件驗(yàn)證技術(shù) 2 靜態(tài)測(cè)試分析技術(shù) 3 測(cè)試數(shù)據(jù)的選擇 主要對(duì)測(cè)試用例進(jìn)行選擇通常從下面幾個(gè)方面評(píng)價(jià)測(cè)試用例的質(zhì)量 檢測(cè)軟件缺陷的有效性 測(cè)試用例的可重用性 測(cè)試用例的經(jīng)濟(jì)性 測(cè)試用例的可維護(hù)性 4 集成化測(cè)試 研究如何實(shí)現(xiàn)軟件測(cè)試的自動(dòng)化過(guò)程以及相關(guān)的一系列內(nèi)容 軟件測(cè)試方法的分類(lèi) 按照軟件測(cè)試用例的設(shè)計(jì)方法而論 軟件測(cè)試可分為白盒測(cè)試法和黑盒測(cè)試法 按照軟件測(cè)試是否執(zhí)行程序而論 軟件測(cè)試又可以分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試 按照軟件設(shè)計(jì)方法是否采用面向?qū)ο笤O(shè)計(jì)技術(shù)而論 軟件測(cè)試又可以分為傳統(tǒng)測(cè)試方法和面向?qū)ο鬁y(cè)試方法 按照網(wǎng)絡(luò)環(huán)境下C S應(yīng)用結(jié)構(gòu)的特定環(huán)境而論 軟件測(cè)試又有其相應(yīng)的方法 這些都是軟件測(cè)試具體的測(cè)試方法 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 1 靜態(tài)測(cè)試靜態(tài)測(cè)試不實(shí)際運(yùn)行軟件 主要是對(duì)軟件的編程格式 結(jié)構(gòu)等方面進(jìn)行評(píng)估 靜態(tài)測(cè)試包括代碼檢查 靜態(tài)結(jié)構(gòu)分析 代碼質(zhì)量度量等 它可以由人工進(jìn)行 也可以借助軟件工具自動(dòng)進(jìn)行 靜態(tài)測(cè)試方法也可利用計(jì)算機(jī)作為對(duì)被測(cè)程序進(jìn)行特性分析的工具 但與人工測(cè)試方式有著根本區(qū)別 另一方面 因它并不真正運(yùn)行被測(cè)程序 只進(jìn)行特性分析 這又與動(dòng)態(tài)方法不同 所以 靜態(tài)方法常常稱(chēng)為 分析 靜態(tài)測(cè)試是對(duì)被測(cè)程序進(jìn)行特性分析方法的總稱(chēng) 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 代碼檢查代碼檢查包括代碼走查 桌面檢查 代碼審查等 主要檢查代碼和設(shè)計(jì)的一致性 代碼對(duì)標(biāo)準(zhǔn)的遵循 可讀性 代碼的邏輯表達(dá)的正確性 代碼結(jié)構(gòu)的合理性等方面 代碼檢查的具體內(nèi)容 變量檢查 命名和類(lèi)型審查 程序邏輯審查 程序語(yǔ)法檢查和程序結(jié)構(gòu)檢查等 代碼檢查的優(yōu)點(diǎn) 在實(shí)際使用中 代碼檢查比動(dòng)態(tài)測(cè)試更有效率 能快速找到缺陷 發(fā)現(xiàn)30 70 的邏輯設(shè)計(jì)和編碼缺陷 代碼檢查看到的是問(wèn)題本身而非征兆 代碼檢查的缺點(diǎn) 非常耗費(fèi)時(shí)間 而且代碼檢查需要知識(shí)和經(jīng)驗(yàn)的積累 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 靜態(tài)結(jié)構(gòu)分析靜態(tài)結(jié)構(gòu)分析主要是以圖形的方式表現(xiàn)程序的內(nèi)部結(jié)構(gòu) 例如函數(shù)調(diào)用關(guān)系圖 函數(shù)內(nèi)部控制流圖 其中 函數(shù)調(diào)用關(guān)系圖以直觀的圖形方式描述一個(gè)應(yīng)用程序中各個(gè)函數(shù)的調(diào)用和被調(diào)用關(guān)系 控制流圖顯示一個(gè)函數(shù)的邏輯結(jié)構(gòu) 由許多節(jié)點(diǎn)組成 一個(gè)節(jié)點(diǎn)代表一條語(yǔ)句或數(shù)條語(yǔ)句 連接結(jié)點(diǎn)的叫邊 邊表示節(jié)點(diǎn)間的控制流向 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 代碼質(zhì)量度量軟件質(zhì)量包括六個(gè)方面 功能性 可靠性 易用性 效率 可維護(hù)性和可移植性 軟件的質(zhì)量是軟件屬性的各種標(biāo)準(zhǔn)度量的組合 針對(duì)軟件的可維護(hù)性 目前業(yè)界主要存在三種度量參數(shù) Line復(fù)雜度 Halstead復(fù)雜度和McCabe復(fù)雜度 其中Line復(fù)雜度以代碼的行數(shù)作為計(jì)算的基準(zhǔn) Halstead以程序中使用到的運(yùn)算符與運(yùn)算元數(shù)量作為計(jì)數(shù)目標(biāo) 直接測(cè)量指標(biāo) 然后可以據(jù)以計(jì)算出程序容量 工作量等 McCabe復(fù)雜度一般稱(chēng)為圈復(fù)雜度 它將軟件的流程圖轉(zhuǎn)化為有向圖 然后以圖論來(lái)衡量軟件的質(zhì)量 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 靜態(tài)測(cè)試階段的任務(wù) 1 檢查算法的邏輯正確性 2 檢查模塊接口的正確性 3 檢查輸入?yún)?shù)是否有合法性檢查 4 檢查調(diào)用其他模塊的接口是否正確 5 檢查是否設(shè)置了適當(dāng)?shù)某鲥e(cuò)處理 6 檢查表達(dá)式 語(yǔ)句是否正確 是否含有二義性 7 檢查常量或全局變量使用是否正確 8 檢查標(biāo)識(shí)符的使用是否規(guī)范 一致 9 檢查程序風(fēng)格的一致性 規(guī)范性 10 檢查代碼是否可以?xún)?yōu)化 算法效率是否最高 11 檢查代碼注釋是否完整 是否正確反映了代碼的功能 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 靜態(tài)測(cè)試可以完成以下工作 1 發(fā)現(xiàn)下列程序的錯(cuò)誤 錯(cuò)用局部變量和全局變量 未定義的變量 不匹配的參數(shù) 不適當(dāng)?shù)难h(huán)嵌套或分支嵌套 死循環(huán) 不允許的遞歸 調(diào)用不存在的子程序 遺漏標(biāo)號(hào)或代碼 2 找出以下問(wèn)題的根源 從未使用過(guò)的變量 不會(huì)執(zhí)行到的代碼 從未使用過(guò)的標(biāo)號(hào) 潛在的死循環(huán) 3 提供程序缺陷的間接信息 所用變量和常量的交叉應(yīng)用表 是否違背編碼規(guī)則 標(biāo)識(shí)符的使用方法和過(guò)程的調(diào)用層次 4 為進(jìn)一步查找做好準(zhǔn)備 5 選擇測(cè)試用例 6 進(jìn)行符號(hào)測(cè)試 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 續(xù) 2 動(dòng)態(tài)測(cè)試動(dòng)態(tài)方法的主要特征是 計(jì)算機(jī)必須真正運(yùn)行被測(cè)試的程序 通過(guò)輸入測(cè)試用例 對(duì)其運(yùn)行情況即輸入與輸出的對(duì)應(yīng)關(guān)系進(jìn)行分析 以達(dá)到檢測(cè)的目的 動(dòng)態(tài)測(cè)試包括 1 功能確認(rèn)與接口測(cè)試 2 覆蓋率分析 3 性能分析 4 內(nèi)存分析 黑盒測(cè)試和白盒測(cè)試 若測(cè)試規(guī)劃是基于產(chǎn)品的功能 目的是檢查程序各個(gè)功能是否能夠?qū)崿F(xiàn) 并檢查其中的功能錯(cuò)誤 則這種測(cè)試方法稱(chēng)為黑盒測(cè)試 Black boxTesting 方法 黑盒測(cè)試又稱(chēng)為功能測(cè)試 數(shù)據(jù)驅(qū)動(dòng)測(cè)試和基于規(guī)格說(shuō)明的測(cè)試 它是一種從用戶(hù)觀點(diǎn)出發(fā)的測(cè)試 一般被用來(lái)確認(rèn)軟件功能的正確性和可操作性 若測(cè)試規(guī)劃基于產(chǎn)品的內(nèi)部結(jié)構(gòu)進(jìn)行測(cè)試 檢查內(nèi)部操作是否按規(guī)定執(zhí)行 軟件各個(gè)部分功能是否得到充分使用 則這種測(cè)試方法稱(chēng)為白盒測(cè)試 White boxTesting 方法 白盒測(cè)試又稱(chēng)為結(jié)構(gòu)測(cè)試 邏輯驅(qū)動(dòng)測(cè)試或基于程序的測(cè)試 一般用來(lái)分析程序的內(nèi)部結(jié)構(gòu) 黑盒測(cè)試和白盒測(cè)試 續(xù) 兩種測(cè)試方法從完全不同的角度出發(fā) 反映了測(cè)試思路的兩方面情況 適用于不同的測(cè)試階段 黑盒測(cè)試和白盒測(cè)試 續(xù) 1 黑盒測(cè)試黑盒測(cè)試的基本觀點(diǎn)是 任何程序都可以看作是從輸入定義域映射到輸出值域的函數(shù)過(guò)程 被測(cè)程序被認(rèn)為是一個(gè)打不開(kāi)的黑盒子 黑盒中的內(nèi)容 實(shí)現(xiàn)過(guò)程 完全不知道 只明確要做到什么 黑盒測(cè)試主要根據(jù)規(guī)格說(shuō)明書(shū)設(shè)計(jì)測(cè)試用例 并不涉及程序內(nèi)部構(gòu)造和內(nèi)部特性 只依靠被測(cè)程序輸入和輸出之間的關(guān)系或程序的功能設(shè)計(jì)測(cè)試用例 黑盒測(cè)試的特點(diǎn) 1 黑盒測(cè)試與軟件的具體實(shí)現(xiàn)過(guò)程無(wú)關(guān) 在軟件實(shí)現(xiàn)的過(guò)程發(fā)生變化時(shí) 測(cè)試用例仍然可以使用 2 黑盒測(cè)試用例的設(shè)計(jì)可以和軟件實(shí)現(xiàn)同時(shí)進(jìn)行 這樣能夠壓縮總的開(kāi)發(fā)時(shí)間 黑盒測(cè)試和白盒測(cè)試 續(xù) 黑盒測(cè)試和白盒測(cè)試 續(xù) 黑盒測(cè)試主要是為了發(fā)現(xiàn)以下幾類(lèi)錯(cuò)誤 是否有不正確或遺漏了的功能 在接口上 輸入能否正確地接受 能否輸出正確的結(jié)果 是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息訪問(wèn)錯(cuò)誤 性能上是否能夠滿足要求 是否有初始化或終止性錯(cuò)誤 黑盒測(cè)試的難點(diǎn) 在哪個(gè)層次上進(jìn)行測(cè)試 黑盒測(cè)試的具體技術(shù)方法 邊界值分析法等價(jià)類(lèi)劃分法因果圖法錯(cuò)誤猜想法決策表法 黑盒測(cè)試和白盒測(cè)試 續(xù) 2 白盒測(cè)試白盒測(cè)試將被測(cè)程序看作一個(gè)打開(kāi)的盒子 測(cè)試者能夠看到被測(cè)源程序 可以分析被測(cè)程序的內(nèi)部結(jié)構(gòu) 此時(shí)測(cè)試的焦點(diǎn)集中在根據(jù)其內(nèi)部結(jié)構(gòu)設(shè)計(jì)測(cè)試用例 白盒測(cè)試要求是對(duì)某些程序的結(jié)構(gòu)特性做到一定程度的覆蓋 或者說(shuō)這種測(cè)試是 基于覆蓋率的測(cè)試 通常的程序結(jié)構(gòu)覆蓋有 語(yǔ)句覆蓋判定覆蓋條件覆蓋判定 條件覆蓋路徑覆蓋 黑盒測(cè)試和白盒測(cè)試 續(xù) 黑盒測(cè)試和白盒測(cè)試 續(xù) 3 黑盒測(cè)試法和白盒測(cè)試法的比較 黑盒測(cè)試和白盒測(cè)試 續(xù) 黑盒測(cè)試 以用戶(hù)的觀點(diǎn) 從輸入數(shù)據(jù)與輸出數(shù)據(jù)的對(duì)應(yīng)關(guān)系 即根據(jù)程序外部特性進(jìn)行測(cè)試 而不考慮內(nèi)部結(jié)構(gòu)及工作情況 黑盒測(cè)試技術(shù)注重于軟件的信息域 范圍 通過(guò)劃分程序的輸入和輸出域來(lái)確定測(cè)試用例 若外部特性本身存在問(wèn)題或規(guī)格說(shuō)明的規(guī)定有誤 則應(yīng)用黑盒測(cè)試方法是不能發(fā)現(xiàn)問(wèn)題的 白盒測(cè)試 只根據(jù)程序的內(nèi)部結(jié)構(gòu)進(jìn)行測(cè)試 測(cè)試用例的設(shè)計(jì)要保證測(cè)試時(shí)程序的所有語(yǔ)句至少執(zhí)行一次 而且要檢查所有的邏輯條件 如果程序的結(jié)構(gòu)本身有問(wèn)題 比如說(shuō)程序邏輯有錯(cuò)誤或者有遺漏 那也是無(wú)法發(fā)現(xiàn)的 黑盒測(cè)試和白盒測(cè)試 續(xù) 測(cè)試模型 V模型W模型H模型X模型 V模型圖 W模型圖 H模型圖 在整個(gè)生產(chǎn)周期中某個(gè)層次上的一次測(cè)試 微循環(huán) 圖中的其他流程圖可以是任意開(kāi)發(fā)流程 例如 設(shè)計(jì)流程和編碼流程 也可以是其他非開(kāi)發(fā)流程 例如 SQA流程 甚至是測(cè)試流程本身 只要測(cè)試條件成熟了 測(cè)試準(zhǔn)備活動(dòng)完成了 測(cè)試執(zhí)行活動(dòng)就可以進(jìn)行了 X模型 X模型是由Marick提出的X模型描述的是針對(duì)單獨(dú)程序片段所進(jìn)行的相互分離的編碼和測(cè)試 此后將進(jìn)行頻繁的交換 通過(guò)集成最終合成為可執(zhí)行的程序 X模型是一種探索測(cè)試模型 X模型圖 8 3測(cè)試用例的設(shè)計(jì) 如何以最少的人力 資源投入 在最短的時(shí)間內(nèi)完成測(cè)試 發(fā)現(xiàn)軟件系統(tǒng)的缺陷 保證軟件的優(yōu)良品質(zhì) 則是軟件測(cè)試探索和追求的目標(biāo) 測(cè)試用例是測(cè)試工作的指導(dǎo) 是軟件測(cè)試的必須遵守的準(zhǔn)則 更是軟件測(cè)試質(zhì)量穩(wěn)定的根本保障 什么是測(cè)試用例 所謂的測(cè)試用例就是將軟件測(cè)試的行為活動(dòng) 做一個(gè)科學(xué)化的組織歸納 軟件測(cè)試是有組織性 步驟性和計(jì)劃性的 而設(shè)計(jì)軟件測(cè)試用例的目的 就是為了能將軟件測(cè)試的行為轉(zhuǎn)換為可管理的模式 軟件測(cè)試是軟件質(zhì)量管理中最實(shí)際的行動(dòng) 同時(shí)也是耗時(shí)最多的一項(xiàng) 基于時(shí)間因素的考慮 軟件測(cè)試行為必須能夠加以量化 才能進(jìn)一步讓管理階層掌握所需要的測(cè)試過(guò)程 而測(cè)試用例就是將測(cè)試行為具體量化的方法之一 什么是測(cè)試用例 因?yàn)槲覀儾豢赡苓M(jìn)行窮舉測(cè)試 為了節(jié)省時(shí)間和資源 提高測(cè)試效率 必須要從數(shù)量極大的可用測(cè)試數(shù)據(jù)中精心挑選出具有代表性或特殊性的測(cè)試數(shù)據(jù)來(lái)進(jìn)行測(cè)試 目前研究室測(cè)試過(guò)程中 所有的測(cè)試用例都放在 測(cè)試大綱 中 使用測(cè)試大綱的好處 保證測(cè)試功能不被遺漏 使得功能不被重復(fù)測(cè)試 合理安排測(cè)試人員 使得軟件測(cè)試不依賴(lài)于個(gè)人 測(cè)試用例內(nèi)容 實(shí)施一次測(cè)試而向被測(cè)系統(tǒng)提供的輸入數(shù)據(jù) 操作或各種環(huán)境設(shè)置 對(duì)交互式系統(tǒng) 軟件交互執(zhí)行過(guò)程的控制也是一種測(cè)試用例 測(cè)試用例的設(shè)計(jì)與生成是依據(jù)測(cè)試大綱對(duì)其中每個(gè)測(cè)試項(xiàng)目的進(jìn)一步實(shí)例化 比如 對(duì)于一個(gè)輸入項(xiàng)的測(cè)試 應(yīng)當(dāng)設(shè)計(jì)一組測(cè)試數(shù)據(jù) 包括合法的 邊界的和非法的數(shù)據(jù)等 測(cè)試用例設(shè)計(jì)生成的基本準(zhǔn)則 測(cè)試用例的代表性 能夠代表并覆蓋各種合理的和不合理 合法的和非法的 邊界的和越界的 以及極限的輸入數(shù)據(jù) 操作和環(huán)境設(shè)置等 測(cè)試結(jié)果的可判定性 即測(cè)試執(zhí)行結(jié)果的正確性是可判定的 每一個(gè)測(cè)試用例都應(yīng)有相應(yīng)的期望結(jié)果 測(cè)試結(jié)果的可再現(xiàn)性 即對(duì)同樣的測(cè)試用例 系統(tǒng)的執(zhí)行結(jié)果應(yīng)當(dāng)是相同的 測(cè)試用例的特征 最有可能抓住錯(cuò)誤的 不是重復(fù)的 多余的 一組相似測(cè)試用例中最有效的 不要太簡(jiǎn)單 也不要太復(fù)雜 測(cè)試用例的組織和跟蹤 在執(zhí)行測(cè)試過(guò)程中 會(huì)遇到如下問(wèn)題 計(jì)劃執(zhí)行哪些測(cè)試用例 執(zhí)行需要多少時(shí)間 一輪測(cè)試需要多少測(cè)試人員 能否挑出測(cè)試套裝 相關(guān)測(cè)試用例子集 來(lái)測(cè)試某些特性或軟件部分 在執(zhí)行測(cè)試用例時(shí) 能否記錄哪些通過(guò) 哪些失敗 當(dāng)前測(cè)試是否按計(jì)劃進(jìn)行 上次執(zhí)行測(cè)試用例時(shí)通過(guò)的百分比是多少 測(cè)試用例跟蹤管理方式 測(cè)試用例追蹤表 測(cè)試用例的意義 使用測(cè)試用例的好處主要體現(xiàn)在以下幾個(gè)方面 在開(kāi)始實(shí)施測(cè)試之前設(shè)計(jì)好測(cè)試用例 可以避免盲目測(cè)試并提高測(cè)試效率 測(cè)試用例的使用令軟件測(cè)試的實(shí)施重點(diǎn)突出 目的明確 在軟件版本更新后只需修正少部分的測(cè)試用例便可展開(kāi)測(cè)試工作 降低工作強(qiáng)度 縮短項(xiàng)目周期 功能模塊的通用化和復(fù)用化使軟件易于開(kāi)發(fā) 而相對(duì)于功能模塊的測(cè)試用例的通用化和復(fù)用化則會(huì)使軟件測(cè)試易于開(kāi)展 并隨著測(cè)試用例的不斷精化其效率也不斷攀升 測(cè)試用例的意義 組織性 有利于測(cè)試的組織 功能覆蓋 確保功能不被遺漏 重復(fù)性 有利于測(cè)試的重復(fù) 跟蹤 有利于測(cè)試的跟蹤 測(cè)試確認(rèn) 在少數(shù)高風(fēng)險(xiǎn)的測(cè)試中 必須證明確實(shí)執(zhí)行了計(jì)劃執(zhí)行的測(cè)試 8 3 1白盒測(cè)試方法 為什么要進(jìn)行白盒測(cè)試 如果所有軟件錯(cuò)誤的根源都可以追溯到某個(gè)唯一原因 那么問(wèn)題就簡(jiǎn)單了 然而 事實(shí)上一個(gè)bug常常是由多個(gè)因素共同導(dǎo)致的 如下圖所示 假設(shè)此時(shí)開(kāi)發(fā)工作已結(jié)束 程序送交到測(cè)試組 沒(méi)有人知道代碼中有一個(gè)潛在的被0除的錯(cuò)誤 若測(cè)試組采用的測(cè)試用例的執(zhí)行路徑?jīng)]有同時(shí)經(jīng)過(guò)x 0和y 5 x進(jìn)行測(cè)試 顯然測(cè)試工作似乎非常完善 測(cè)試用例覆蓋了所有執(zhí)行語(yǔ)句 也沒(méi)有被0除的錯(cuò)誤發(fā)生 白盒測(cè)試方法 續(xù) 白盒測(cè)試也稱(chēng)結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試 是針對(duì)被測(cè)單元內(nèi)部是如何進(jìn)行工作的測(cè)試 它根據(jù)程序的控制結(jié)構(gòu)設(shè)計(jì)測(cè)試用例 主要用于軟件或程序驗(yàn)證 白盒測(cè)試法檢查程序內(nèi)部邏輯結(jié)構(gòu) 對(duì)所有邏輯路徑進(jìn)行測(cè)試 是一種窮舉路徑的測(cè)試方法 但即使每條路徑都測(cè)試過(guò)了 仍然可能存在錯(cuò)誤 因?yàn)?窮舉路徑測(cè)試無(wú)法檢查出程序本身是否違反了設(shè)計(jì)規(guī)范 即程序是否是一個(gè)錯(cuò)誤的程序 窮舉路徑測(cè)試不可能查出程序因?yàn)檫z漏路徑而出錯(cuò) 窮舉路徑測(cè)試發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯(cuò)誤 白盒測(cè)試方法 續(xù) 采用白盒測(cè)試方法必須遵循以下幾條原則 才能達(dá)到測(cè)試的目的 保證一個(gè)模塊中的所有獨(dú)立路徑至少被測(cè)試一次 所有邏輯值均需測(cè)試真 true 和假 false 兩種情況 檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu) 保證其結(jié)構(gòu)的有效性 在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán) 白盒測(cè)試主要是檢查程序的內(nèi)部結(jié)構(gòu) 邏輯 循環(huán)和路徑 常用測(cè)試用例設(shè)計(jì)方法有 邏輯覆蓋法 邏輯驅(qū)動(dòng)測(cè)試 基本路徑測(cè)試方法 8 3 1 1白盒測(cè)試的基本概念 控制流圖環(huán)形復(fù)雜度圖矩陣 控制流圖 控制流圖 可簡(jiǎn)稱(chēng)流圖 是對(duì)程序流程圖進(jìn)行簡(jiǎn)化后得到的 它可以更加突出的表示程序控制流的結(jié)構(gòu) 控制流圖中包括兩種圖形符號(hào) 節(jié)點(diǎn)和控制流線 節(jié)點(diǎn)由帶標(biāo)號(hào)的圓圈表示 可代表一個(gè)或多個(gè)語(yǔ)句 一個(gè)處理框序列和一個(gè)條件判定框 假設(shè)不包含復(fù)合條件 控制流線由帶箭頭的弧或線表示 可稱(chēng)為邊 它代表程序中的控制流 對(duì)于復(fù)合條件 則可將其分解為多個(gè)單個(gè)條件 并映射成控制流圖 常見(jiàn)結(jié)構(gòu)的控制流圖 常見(jiàn)結(jié)構(gòu)的控制流圖 其中 包含條件的節(jié)點(diǎn)被稱(chēng)為判定節(jié)點(diǎn) 也叫謂詞節(jié)點(diǎn) 由判定節(jié)點(diǎn)發(fā)出的邊必須終止于某一個(gè)節(jié)點(diǎn) 由邊和節(jié)點(diǎn)所限定的范圍被稱(chēng)為區(qū)域 環(huán)形復(fù)雜度 環(huán)形復(fù)雜度也稱(chēng)為圈復(fù)雜度 它是一種為程序邏輯復(fù)雜度提供定量尺度的軟件度量 環(huán)形復(fù)雜度的應(yīng)用 可以將環(huán)形復(fù)雜度用于基本路徑方法 它可以提供 程序基本集的獨(dú)立路徑數(shù)量 確保所有語(yǔ)句至少執(zhí)行一次的測(cè)試數(shù)量的上界 獨(dú)立路徑是指程序中至少引入了一個(gè)新的處理語(yǔ)句集合或一個(gè)新條件的程序通路 采用流圖的術(shù)語(yǔ) 即獨(dú)立路徑必須至少包含一條在本次定義路徑之前不曾用過(guò)的邊 測(cè)試可以被設(shè)計(jì)為基本路徑集的執(zhí)行過(guò)程 但基本路徑集通常并不唯一 計(jì)算環(huán)形復(fù)雜度的方法 環(huán)形復(fù)雜度以圖論為基礎(chǔ) 為我們提供了非常有用的軟件度量 可用如下三種方法之一來(lái)計(jì)算環(huán)形復(fù)雜度 控制流圖中區(qū)域的數(shù)量對(duì)應(yīng)于環(huán)形復(fù)雜度 給定控制流圖G的環(huán)形復(fù)雜度 V G 定義為V G E N 2其中 E是控制流圖中邊的數(shù)量 N是控制流圖中的節(jié)點(diǎn)數(shù)量 給定控制流圖G的環(huán)形復(fù)雜度 V G 也可定義為V G P 1其中 P是控制流圖G中判定節(jié)點(diǎn)的數(shù)量 圖矩陣 圖矩陣是控制流圖的矩陣表示形式 圖矩陣是一個(gè)方形矩陣 其維數(shù)等于控制流圖的節(jié)點(diǎn)數(shù) 矩陣中的每列和每行都對(duì)應(yīng)于標(biāo)識(shí)的節(jié)點(diǎn) 矩陣元素對(duì)應(yīng)于節(jié)點(diǎn)間的邊 通常 控制流圖中的結(jié)點(diǎn)用數(shù)字標(biāo)識(shí) 邊則用字母標(biāo)識(shí) 如果在控制流圖中從第i個(gè)結(jié)點(diǎn)到第j個(gè)結(jié)點(diǎn)有一個(gè)標(biāo)識(shí)為x的邊相連接 則在對(duì)應(yīng)圖矩陣的第i行第j列有一個(gè)非空的元素x 8 3 1 2覆蓋測(cè)試 測(cè)試覆蓋率邏輯覆蓋法面向?qū)ο蟮母采w測(cè)試覆蓋準(zhǔn)則 測(cè)試覆蓋率 測(cè)試覆蓋率 用于確定測(cè)試所執(zhí)行到的覆蓋項(xiàng)的百分比 其中的覆蓋項(xiàng)是指作為測(cè)試基礎(chǔ)的一個(gè)入口或?qū)傩?比如語(yǔ)句 分支 條件等 測(cè)試覆蓋率可以表示出測(cè)試的充分性 在測(cè)試分析報(bào)告中可以作為量化指標(biāo)的依據(jù) 測(cè)試覆蓋率越高效果越好 但覆蓋率不是目標(biāo) 只是一種手段 測(cè)試覆蓋率包括功能點(diǎn)覆蓋率和結(jié)構(gòu)覆蓋率 功能點(diǎn)覆蓋率大致用于表示軟件已經(jīng)實(shí)現(xiàn)的功能與軟件需要實(shí)現(xiàn)的功能之間的比例關(guān)系 結(jié)構(gòu)覆蓋率包括語(yǔ)句覆蓋率 分支覆蓋率 循環(huán)覆蓋率 路徑覆蓋率等等 邏輯覆蓋法 根據(jù)覆蓋目標(biāo)的不同 邏輯覆蓋又可分為語(yǔ)句覆蓋 判定覆蓋 條件覆蓋 判定 條件覆蓋 組合覆蓋和路徑覆蓋 語(yǔ)句覆蓋 選擇足夠多的測(cè)試用例 使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次 判定覆蓋 通過(guò)執(zhí)行足夠的測(cè)試用例 使得程序中的每個(gè)判定至少都獲得一次 真 值和 假 值 也就是使程序中的每個(gè)取 真 分支和取 假 分支至少均經(jīng)歷一次 也稱(chēng)為 分支覆蓋 條件覆蓋 設(shè)計(jì)足夠多的測(cè)試用例 使得程序中每個(gè)判定包含的每個(gè)條件的可能取值 真 假 都至少滿足一次 邏輯覆蓋法 續(xù) 判定 條件覆蓋 設(shè)計(jì)足夠多的測(cè)試用例 使得程序中每個(gè)判定包含的每個(gè)條件的所有情況 真 假 至少出現(xiàn)一次 并且每個(gè)判定本身的判定結(jié)果 真 假 也至少出現(xiàn)一次 滿足判定 條件覆蓋的測(cè)試用例一定同時(shí)滿足判定覆蓋和條件覆蓋 組合覆蓋 通過(guò)執(zhí)行足夠的測(cè)試用例 使得程序中每個(gè)判定的所有可能的條件取值組合都至少出現(xiàn)一次 滿足組合覆蓋的測(cè)試用例一定滿足判定覆蓋 條件覆蓋和判定 條件覆蓋 路徑覆蓋 設(shè)計(jì)足夠多的測(cè)試用例 要求覆蓋程序中所有可能的路徑 邏輯覆蓋法 續(xù) 邏輯覆蓋法 續(xù) voidDoWork intx inty intz intk 0 j 0 if x 3 語(yǔ)句塊3 邏輯覆蓋法 續(xù) 語(yǔ)句覆蓋 要實(shí)現(xiàn)DoWork函數(shù)的語(yǔ)句覆蓋 只需設(shè)計(jì)一個(gè)測(cè)試用例就可以覆蓋程序中的所有可執(zhí)行語(yǔ)句 測(cè)試用例輸入為 x 4 y 5 z 5 程序執(zhí)行的路徑是 abd分析 語(yǔ)句覆蓋可以保證程序中的每個(gè)語(yǔ)句都得到執(zhí)行 但發(fā)現(xiàn)不了判定中邏輯運(yùn)算的錯(cuò)誤 即它并不是一種充分的檢驗(yàn)方法 例如在第一個(gè)判定 x 3 z 10 中把 錯(cuò)誤的寫(xiě)成了 這時(shí)仍使用該測(cè)試用例 則程序仍會(huì)按照流程圖上的路徑abd執(zhí)行 可以說(shuō)語(yǔ)句覆蓋是最弱的邏輯覆蓋準(zhǔn)則 判定覆蓋 要實(shí)現(xiàn)DoWork函數(shù)的判定覆蓋 需要設(shè)計(jì)兩個(gè)測(cè)試用例 測(cè)試用例的輸入為 x 4 y 5 z 5 x 2 y 5 z 5 程序執(zhí)行的路徑分別是 abd ace分析 上述兩個(gè)測(cè)試用例不僅滿足了判定覆蓋 同時(shí)還做到語(yǔ)句覆蓋 從這點(diǎn)看似乎判定覆蓋比語(yǔ)句覆蓋更強(qiáng)一些 但仍然無(wú)法確定判定內(nèi)部條件的錯(cuò)誤 例如把第二個(gè)判定中的條件y 5錯(cuò)誤寫(xiě)為y 5 使用上述測(cè)試用例 照樣能按原路徑執(zhí)行而不影響結(jié)果 因此 需要有更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判定內(nèi)的條件 判定覆蓋 續(xù) 說(shuō)明 以上僅考慮了兩出口的判斷 我們還應(yīng)把判定覆蓋準(zhǔn)則擴(kuò)充到多出口判斷 如Case語(yǔ)句 的情況 因此 判定覆蓋更為廣泛的含義應(yīng)該是使得每一個(gè)判定獲得每一種可能的結(jié)果至少一次 條件覆蓋 在實(shí)際程序代碼中 一個(gè)判定中通常都包含若干條件 條件覆蓋的目的是設(shè)計(jì)若干測(cè)試用例 在執(zhí)行被測(cè)程序后 要使每個(gè)判定中每個(gè)條件的可能值至少滿足一次 對(duì)DoWork函數(shù)的各個(gè)判定的各種條件取值加以標(biāo)記 對(duì)于第一個(gè)判定 x 3 z3取真值記為T(mén)1 取假值記為 T1條件z5 條件x 4取真值記為T(mén)3 取假值記為 T3條件y 5取真值記為T(mén)4 取假值記為 T4 條件覆蓋 續(xù) 根據(jù)條件覆蓋的基本思想 要使上述4個(gè)條件可能產(chǎn)生的8種情況至少滿足一次 設(shè)計(jì)測(cè)試用例如下 分析 上面這組測(cè)試用例不但覆蓋了4個(gè)條件的全部8種情況 而且將兩個(gè)判定的4個(gè)分支b c d e也同時(shí)覆蓋了 即同時(shí)達(dá)到了條件覆蓋和判定覆蓋 條件覆蓋 續(xù) 說(shuō)明 雖然前面的一組測(cè)試用例同時(shí)達(dá)到了條件覆蓋和判定覆蓋 但是 并不是說(shuō)滿足條件覆蓋就一定能滿足判定覆蓋 如果設(shè)計(jì)了下表中的這組測(cè)試用例 則雖然滿足了條件覆蓋 但只是覆蓋了程序中第一個(gè)判定的取假分支c和第二個(gè)判定的取真分支d 不滿足判定覆蓋的要求 判定 條件覆蓋 判定 條件覆蓋實(shí)際上是將判定覆蓋和條件覆蓋結(jié)合起來(lái)的一種方法 即 設(shè)計(jì)足夠的測(cè)試用例 使得判定中每個(gè)條件的所有可能取值至少滿足一次 同時(shí)每個(gè)判定的可能結(jié)果也至少出現(xiàn)一次 根據(jù)判定 條件覆蓋的基本思想 只需設(shè)計(jì)以下兩個(gè)測(cè)試用例便可以覆蓋4個(gè)條件的8種取值以及4個(gè)判定分支 判定 條件覆蓋 續(xù) 分析 從表面上看 判定 條件覆蓋測(cè)試了各個(gè)判定中的所有條件的取值 但實(shí)際上 編譯器在檢查含有多個(gè)條件的邏輯表達(dá)式時(shí) 某些情況下的某些條件將會(huì)被其它條件所掩蓋 因此 判定 條件覆蓋也不一定能夠完全檢查出邏輯表達(dá)式中的錯(cuò)誤 例如 對(duì)于第一個(gè)判定 x 3 z3和z3為假 則編譯器將不再檢查z5 來(lái)說(shuō) 若條件x 4滿足 就認(rèn)為該判定為真 這時(shí)將不會(huì)再檢查y 5 那么同樣也無(wú)法發(fā)現(xiàn)這個(gè)條件中的錯(cuò)誤 組合覆蓋 組合覆蓋的目的是要使設(shè)計(jì)的測(cè)試用例能覆蓋每一個(gè)判定的所有可能的條件取值組合 對(duì)DoWork函數(shù)中的各個(gè)判定的條件取值組合加以標(biāo)記 1 x 3 z3 z 10記做T1 T2 第一個(gè)判定的取假分支3 x 10記做 T1 T2 第一個(gè)判定的取假分支5 x 4 y 5記做T3T4 第二個(gè)判定的取真分支6 x 4 y5記做 T3T4 第二個(gè)判定的取真分支8 x 4 y 5記做 T3 T4 第二個(gè)判定的取假分支 組合覆蓋 續(xù) 根據(jù)組合覆蓋的基本思想 設(shè)計(jì)測(cè)試用例如下 分析 上面這組測(cè)試用例覆蓋了所有8種條件取值的組合 覆蓋了所有判定的真假分支 但是卻丟失了一條路徑abe 路徑覆蓋 前面提到的5種邏輯覆蓋都未涉及到路徑的覆蓋 事實(shí)上 只有當(dāng)程序中的每一條路徑都受到了檢驗(yàn) 才能使程序受到全面檢驗(yàn) 路徑覆蓋的目的就是要使設(shè)計(jì)的測(cè)試用例能覆蓋被測(cè)程序中所有可能的路徑 根據(jù)路徑覆蓋的基本思想 在滿足組合覆蓋的測(cè)試用例中修改其中一個(gè)測(cè)試用例 則可以實(shí)現(xiàn)路徑覆蓋 路徑覆蓋 續(xù) 分析 雖然前面一組測(cè)試用例滿足了路徑覆蓋 但并沒(méi)有覆蓋程序中所有的條件組合 丟失了組合3和7 即滿足路徑覆蓋的測(cè)試用例并不一定滿足組合覆蓋 說(shuō)明 對(duì)于比較簡(jiǎn)單的小程序 實(shí)現(xiàn)路徑覆蓋是可能做到的 但如果程序中出現(xiàn)較多判斷和較多循環(huán) 可能的路徑數(shù)目將會(huì)急劇增長(zhǎng) 要在測(cè)試中覆蓋所有的路徑是無(wú)法實(shí)現(xiàn)的 為了解決這個(gè)難題 只有把覆蓋路徑數(shù)量壓縮到一定的限度內(nèi) 如程序中的循環(huán)體只執(zhí)行一次 在實(shí)際測(cè)試中 即使對(duì)于路徑數(shù)很有限的程序已經(jīng)做到路徑覆蓋 仍然不能保證被測(cè)試程序的正確性 還需要采用其他測(cè)試方法進(jìn)行補(bǔ)充 習(xí)題 為以下流程圖所示的程序段設(shè)計(jì)一組測(cè)試用例 要求分別滿足語(yǔ)句覆蓋 判定覆蓋 條件覆蓋 判定 條件覆蓋 組合覆蓋和路徑覆蓋 面向?qū)ο蟮母采w 繼承上下文覆蓋由于傳統(tǒng)的結(jié)構(gòu)化度量沒(méi)有考慮面向?qū)ο蟮囊恍┨匦?如多態(tài) 繼承和封裝等 所以在面向?qū)ο箢I(lǐng)域 傳統(tǒng)的結(jié)構(gòu)化覆蓋必須被加強(qiáng) 以滿足面向?qū)ο筇匦?繼承上下文覆蓋考慮在每個(gè)類(lèi)的上下文內(nèi)獲得的覆蓋率級(jí)別 它是擴(kuò)展到面向?qū)ο箢I(lǐng)域里的一種覆蓋率度量方法 用于度量在系統(tǒng)中的多態(tài)調(diào)用被測(cè)試得多好 繼承上下文定義將基類(lèi)上下文內(nèi)例行程序的執(zhí)行作為獨(dú)立于繼承類(lèi)上下文內(nèi)例行程序的執(zhí)行 同樣 它們?cè)诳紤]繼承類(lèi)上下文內(nèi)例行程序的執(zhí)行也獨(dú)立于基類(lèi)上下文內(nèi)例行程序的執(zhí)行 為了獲得100 繼承上下文覆蓋 代碼必須在每個(gè)適當(dāng)?shù)纳舷挛膬?nèi)被完全執(zhí)行 面向?qū)ο蟮母采w 續(xù) 基于狀態(tài)的上下文覆蓋在絕大多數(shù)面向?qū)ο蟮南到y(tǒng)中存在這樣的一些類(lèi) 這些類(lèi)的對(duì)象可以存在于眾多不同狀態(tài)中的任何一種 并且由于類(lèi)的行為依賴(lài)于狀態(tài) 每個(gè)類(lèi)的行為在每個(gè)可能的狀態(tài)中其性質(zhì)是不同的 基于狀態(tài)的上下文覆蓋對(duì)應(yīng)于被測(cè)類(lèi)對(duì)象的潛在狀態(tài) 這樣基于狀態(tài)的上下文覆蓋把一個(gè)狀態(tài)上下文內(nèi)的一個(gè)例行程序的執(zhí)行認(rèn)為是獨(dú)立于另一個(gè)狀態(tài)內(nèi)相同例行程序的執(zhí)行 為了達(dá)到100 的基于狀態(tài)的上下文覆蓋 例行程序必須在每個(gè)適當(dāng)?shù)纳舷挛?狀態(tài) 內(nèi)被執(zhí)行 測(cè)試覆蓋準(zhǔn)則 邏輯覆蓋的出發(fā)點(diǎn)是合理的 完善的 所謂 覆蓋 就是想要做到全面而無(wú)遺漏 但邏輯覆蓋并不能真正做到無(wú)遺漏 例如 我們不小心將前面提到的程序段中的if x 3 Z 3 Z 10 按照我們前面設(shè)計(jì)的測(cè)試用例 x的值取2或4 來(lái)看 邏輯覆蓋對(duì)這樣的小問(wèn)題都無(wú)能為力 分析出現(xiàn)這一情況的原因在于 錯(cuò)誤區(qū)域僅僅在x 3這個(gè)點(diǎn)上 即僅當(dāng)x的值取3時(shí) 測(cè)試才能發(fā)現(xiàn)錯(cuò)誤 面對(duì)這類(lèi)情況 我們應(yīng)該從中吸取的教訓(xùn)是測(cè)試工作要有重點(diǎn) 要多針對(duì)容易發(fā)生問(wèn)題的地方設(shè)計(jì)測(cè)試用例 測(cè)試覆蓋準(zhǔn)則 續(xù) ESTCA覆蓋準(zhǔn)則 在容易發(fā)生問(wèn)題的地方設(shè)計(jì)測(cè)試用例 即重視程序中謂詞 條件判斷 的取值 ESTCA覆蓋準(zhǔn)則是一套錯(cuò)誤敏感用例分析規(guī)則 這一規(guī)則雖然并不完備 但在普通程序中卻是有效的 原因在于這是一種經(jīng)驗(yàn)型的覆蓋準(zhǔn)則 規(guī)則本身針對(duì)了程序編寫(xiě)人員容易發(fā)生的錯(cuò)誤 或是圍繞著發(fā)生錯(cuò)誤的頻繁區(qū)域 從而提高了發(fā)現(xiàn)錯(cuò)誤的命中率 具體規(guī)則如下 規(guī)則1 對(duì)于ArelB型 rel可以是 的分支謂詞 應(yīng)適當(dāng)?shù)倪x擇A與B的值 使得測(cè)試執(zhí)行到該分支語(yǔ)句時(shí) AB的情況分別出現(xiàn)一次 這是為了檢測(cè)邏輯符號(hào)寫(xiě)錯(cuò)的情況 如將 AB 測(cè)試覆蓋準(zhǔn)則 續(xù) 規(guī)則2 對(duì)于ArelC型 rel可以是 或時(shí) 應(yīng)適當(dāng)?shù)倪x擇A的值 使A C M 這是為了檢測(cè) 差1 之類(lèi)的錯(cuò)誤 如 A 1 錯(cuò)寫(xiě)成 A 0 規(guī)則3 對(duì)外部輸入變量賦值 使其在每一個(gè)測(cè)試用例中均有不同的值與符號(hào) 并與同一組測(cè)試用例中其他變量的值與符號(hào)不同 這是為了檢測(cè)程序語(yǔ)句中的錯(cuò)誤 如應(yīng)該引用某一變量而錯(cuò)成引用另一個(gè)常量 測(cè)試覆蓋準(zhǔn)則 續(xù) 關(guān)于LCSAJLCSAJ LinearCodeSequenceandJump 的字面含義是線性代碼序列與跳轉(zhuǎn) 在程序中 一個(gè)LCSAJ是一組順序執(zhí)行的代碼 以控制跳轉(zhuǎn)為其結(jié)束點(diǎn) LCSAJ的起點(diǎn)是根據(jù)程序本身決定的 它的起點(diǎn)可以是程序第一行或轉(zhuǎn)移語(yǔ)句的入口點(diǎn) 或是控制流可跳達(dá)的點(diǎn) 如果有幾個(gè)LCSAJ首尾相接 且第一個(gè)LCSAJ起點(diǎn)為程序起點(diǎn) 最后一個(gè)LCSAJ終點(diǎn)為程序終點(diǎn) 這樣的LCSAJ串就組成了程序的一條路徑 LCSAJ路徑 一條LCSAJ程序路徑可能是由2個(gè) 3個(gè)或多個(gè)LCSAJ組成的 測(cè)試覆蓋準(zhǔn)則 續(xù) 基于LCSAJ與路徑的關(guān)系 提出了層次LCSAJ覆蓋準(zhǔn)則 它是一個(gè)分層的覆蓋準(zhǔn)則 可以概括的描述為 第一層 語(yǔ)句覆蓋 第二層 分支覆蓋 第三層 LCSAJ覆蓋 即程序中的每一個(gè)LCSAJ都至少在測(cè)試中經(jīng)歷過(guò)一次 第四層 兩兩LCSAJ覆蓋 即程序中的每?jī)蓚€(gè)相連的LCSAJ組合起來(lái)在測(cè)試中都要經(jīng)歷一次 第n 2層 每n個(gè)首尾相連的LCSAJ組合在測(cè)試中都要經(jīng)歷一次 在實(shí)施測(cè)試時(shí) 若要實(shí)現(xiàn)上述的層次LCSAJ覆蓋 需要產(chǎn)生被測(cè)程序的所有LCSAJ 測(cè)試覆蓋準(zhǔn)則 續(xù) 例 找出前面DoWork函數(shù)的所有LCSAJ和LCSAJ路徑 LCSAJ 5個(gè) 1 intk 0 j 0 if x 3 j j 3 5 j j 3LCSAJ路徑 4條 1 2 4 1 2 5 1 3 4 1 3 5 8 3 1 3路徑測(cè)試 路徑表達(dá)式基本路徑測(cè)試方法循環(huán)測(cè)試方法產(chǎn)生測(cè)試用例 Return 路徑表達(dá)式 為了滿足路徑覆蓋 必須首先確定具體的路徑以及路徑的個(gè)數(shù) 我們通常采用控制流圖的邊 弧 序列和節(jié)點(diǎn)序列表示某一條具體路徑 更為概括的表示方法為 1 弧a和弧b相乘 表示為ab 它表明路徑是先經(jīng)歷弧a 接著再經(jīng)歷弧b 弧a和弧b是先后相接的 2 弧a和弧b相加 表示為a b 它表明兩條弧是 或 的關(guān)系 是并行的路段 路徑數(shù)的計(jì)算 在路徑表達(dá)式中 將所有弧均以數(shù)值1來(lái)代替 再進(jìn)行表達(dá)式的相乘和相加運(yùn)算 最后得到的數(shù)值即為該程序的路徑數(shù) 基本路徑測(cè)試方法 路徑測(cè)試就是從一個(gè)程序的入口開(kāi)始 執(zhí)行所經(jīng)歷的各個(gè)語(yǔ)句的完整過(guò)程 從廣義的角度講 任何有關(guān)路徑分析的測(cè)試都可以被稱(chēng)為路徑測(cè)試 完成路徑測(cè)試的理想情況是做到路徑覆蓋 但對(duì)于復(fù)雜性大的程序要做到所有路徑覆蓋 測(cè)試所有可執(zhí)行路徑 是不可能的 在不能做到所有路徑覆蓋的前提下 如果某一程序的每一個(gè)獨(dú)立路徑都被測(cè)試過(guò) 那么可以認(rèn)為程序中的每個(gè)語(yǔ)句都已經(jīng)檢驗(yàn)過(guò)了 即達(dá)到了語(yǔ)句覆蓋 這種測(cè)試方法就是通常所說(shuō)的基本路徑測(cè)試方法 基本路徑測(cè)試方法 續(xù) 基本路徑測(cè)試方法是在控制流圖的基礎(chǔ)上 通過(guò)分析控制結(jié)構(gòu)的環(huán)形復(fù)雜度 導(dǎo)出執(zhí)行路徑的基本集 再?gòu)脑摶炯O(shè)計(jì)測(cè)試用例 基本路徑測(cè)試方法包括以下4個(gè)步驟 1 畫(huà)出程序的控制流圖 2 計(jì)算程序的環(huán)形復(fù)雜度 導(dǎo)出程序基本路徑集中的獨(dú)立路徑條數(shù) 這是確定程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必須的測(cè)試用例數(shù)目的上界 3 導(dǎo)出基本路徑集 確定程序的獨(dú)立路徑 4 根據(jù) 3 中的獨(dú)立路徑 設(shè)計(jì)測(cè)試用例的輸入數(shù)據(jù)和預(yù)期輸出 基本路徑測(cè)試方法 續(xù) voidSort intiRecordNum intiType 1 2intx 0 3inty 0 4while iRecordNum 0 5 6If iType 0 7x y 2 8else9If iType 1 10 x y 10 11else12x y 20 13 14 基本路徑測(cè)試方法 續(xù) 畫(huà)出控制流圖 如右圖所示計(jì)算環(huán)形復(fù)雜度 10 條邊 8 個(gè)節(jié)點(diǎn) 2 4導(dǎo)出獨(dú)立路徑 用語(yǔ)句編號(hào)表示 路徑1 4 14路徑2 4 6 7 14路徑3 4 6 9 10 13 4 14路徑4 4 6 9 12 13 4 14 基本路徑測(cè)試方法 續(xù) 設(shè)計(jì)測(cè)試用例 習(xí)題 1 使用基本路徑測(cè)試方法 為以下程序段設(shè)計(jì)測(cè)試用例 voidDo intX intA intB 1if A 1 5 2 在三角形問(wèn)題中 要求輸入三個(gè)邊長(zhǎng) a b c 當(dāng)三邊不可能構(gòu)成三角形時(shí)提示錯(cuò)誤 可構(gòu)成三角形時(shí)計(jì)算三角形的周長(zhǎng) 若是等腰三角形打印 等腰三角形 若是等邊三角形 則打印 等邊三角形 畫(huà)出相應(yīng)的程序流程圖 并采用基本路徑測(cè)試方法為該程序設(shè)計(jì)測(cè)試用例 循環(huán)測(cè)試方法 從本質(zhì)上說(shuō) 循環(huán)測(cè)試的目的就是檢查循環(huán)結(jié)構(gòu)的有效性 通常 循環(huán)可以劃分為簡(jiǎn)單循環(huán) 嵌套循環(huán) 串接循環(huán)和非結(jié)構(gòu)循環(huán)4類(lèi) 1 測(cè)試簡(jiǎn)單循環(huán) 設(shè)其循環(huán)的最大次數(shù)為n 可采用以下測(cè)試集 跳過(guò)整個(gè)循環(huán) 只循環(huán)一次 只循環(huán)兩次 循環(huán)m次 其中m n 分別循環(huán)n 1 n和n 1次 循環(huán)測(cè)試方法 續(xù) 2 測(cè)試嵌套循環(huán) 如果將簡(jiǎn)單循環(huán)的測(cè)試方法用于嵌套循環(huán) 可能的測(cè)試次數(shù)會(huì)隨嵌套層數(shù)成幾何級(jí)數(shù)增加 此時(shí)可采用以下辦法減少測(cè)試次數(shù) 測(cè)試從最內(nèi)層循環(huán)開(kāi)始 所有外層循環(huán)次數(shù)設(shè)置為最小值 對(duì)最內(nèi)層循環(huán)按照簡(jiǎn)單循環(huán)的測(cè)試方法進(jìn)行 由內(nèi)向外進(jìn)行下一個(gè)循環(huán)的測(cè)試 本層循環(huán)的所有外層循環(huán)仍取最小值 而由本層循環(huán)嵌套的循環(huán)取某些 典型 值 重復(fù)上一步的過(guò)程 直到測(cè)試完所有循環(huán) 3 測(cè)試串接循環(huán) 若串接的各個(gè)循環(huán)相互獨(dú)立 則可分別采用簡(jiǎn)單循環(huán)的測(cè)試方法 否則采用嵌套循環(huán)的測(cè)試方法 4 對(duì)于非結(jié)構(gòu)循環(huán)這種情況 無(wú)法進(jìn)行測(cè)試 需要按結(jié)構(gòu)化程序設(shè)計(jì)的思想將程序結(jié)構(gòu)化后 再進(jìn)行測(cè)試 Z路徑覆蓋下的循環(huán)測(cè)試方法 Z路徑覆蓋是路徑覆蓋的一種變體 它是將程序中的循環(huán)結(jié)構(gòu)簡(jiǎn)化為選擇結(jié)構(gòu)的一種路徑覆蓋 循環(huán)簡(jiǎn)化的目的是限制循環(huán)的次數(shù) 無(wú)論循環(huán)的形式和循環(huán)體實(shí)際執(zhí)行的次數(shù) 簡(jiǎn)化后的循環(huán)測(cè)試只考慮執(zhí)行循環(huán)體一次和零次 不執(zhí)行 兩種情況 即考慮執(zhí)行時(shí)進(jìn)入循環(huán)體一次和跳過(guò)循環(huán)體這兩種情況 在循環(huán)簡(jiǎn)化的思路下 循環(huán)與判定分支的效果是一樣的 即 循環(huán)要么執(zhí)行 要么跳過(guò) 產(chǎn)生測(cè)試用例 在實(shí)踐中 除了前面給出的各種方法外 通常還可以采用以下三種方法來(lái)補(bǔ)充設(shè)計(jì)測(cè)試用例 1 通過(guò)非路經(jīng)分析得到測(cè)試用例 這種方法得到的測(cè)試用例是在應(yīng)用系

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論