![基于案例的軟件構(gòu)造教程(第2版) 課件 02模塊化軟件構(gòu)造_第1頁](http://file4.renrendoc.com/view9/M01/29/00/wKhkGWcrQVKABuaYAAIXz7W3IoA801.jpg)
![基于案例的軟件構(gòu)造教程(第2版) 課件 02模塊化軟件構(gòu)造_第2頁](http://file4.renrendoc.com/view9/M01/29/00/wKhkGWcrQVKABuaYAAIXz7W3IoA8012.jpg)
![基于案例的軟件構(gòu)造教程(第2版) 課件 02模塊化軟件構(gòu)造_第3頁](http://file4.renrendoc.com/view9/M01/29/00/wKhkGWcrQVKABuaYAAIXz7W3IoA8013.jpg)
![基于案例的軟件構(gòu)造教程(第2版) 課件 02模塊化軟件構(gòu)造_第4頁](http://file4.renrendoc.com/view9/M01/29/00/wKhkGWcrQVKABuaYAAIXz7W3IoA8014.jpg)
![基于案例的軟件構(gòu)造教程(第2版) 課件 02模塊化軟件構(gòu)造_第5頁](http://file4.renrendoc.com/view9/M01/29/00/wKhkGWcrQVKABuaYAAIXz7W3IoA8015.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章
模塊化軟件構(gòu)造第2章模塊化軟件構(gòu)造討論函數(shù)級的軟件構(gòu)造技術(shù)。學(xué)習(xí)如何運用模塊化技術(shù)進行分解和細化,設(shè)計由函數(shù)組成的、具有一定結(jié)構(gòu)的程序來分離不同的專注點,管理和控制程序的復(fù)雜性,使其便于維護、更新和擴展。如何針對實際問題設(shè)計和選擇數(shù)據(jù)結(jié)構(gòu);初步學(xué)習(xí)如何編程實現(xiàn)軟件測試、如何調(diào)試程序;理解好程序不僅僅是正確的,還有易維護、健壯等其他性質(zhì),學(xué)習(xí)良好的編程風(fēng)格。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院2第2章模塊化軟件構(gòu)造故事一50道100以內(nèi)的加減法口算習(xí)題。循環(huán)50次,每次產(chǎn)生一個運算題:隨機地產(chǎn)生兩個100以內(nèi)的整數(shù),隨機地從兩個運算符“加法”和“減法”中挑選一個,就可以生成一道口算題;然后打印輸出一套練習(xí)題。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院3第2章模塊化軟件構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院4第2章模塊化軟件構(gòu)造程序沒有明確清晰的“算式”、“習(xí)題”的含義,沒有使用相應(yīng)的變量、數(shù)據(jù)結(jié)構(gòu)等程序設(shè)計的方式表達。若干獨立的功能集中在一個函數(shù)中不利于發(fā)現(xiàn)和修改程序中的錯誤,也不便擴充程序的功能。程序修改后,每次都要重新設(shè)計一些檢驗的數(shù)據(jù),運行程序、觀察結(jié)果,判斷修改過的程序是否正確。我們希望能保留下檢測數(shù)據(jù)、運行結(jié)果及其判斷,無須改變地反復(fù)使用。編程缺乏規(guī)范。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院5第2章模塊化軟件構(gòu)造2.1分解與模塊化2.2數(shù)據(jù)結(jié)構(gòu)與算法2.3模塊化設(shè)計理論初步2.4測試程序2.5調(diào)試程序2.6案例分析與實踐2.7討論與提高2.8思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院62.1分解與模塊化2.1.1分解的含義2.1.2模塊化與結(jié)構(gòu)化2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院72.1.1分解的含義分而治之的策略:①把問題分成兩個或多個更小的問題;②分別解決每個小問題;③然后把各個小問題的解答聚合起來,即可得到原問題的解答。例如,軟件開發(fā)分解為若干方面,包括軟件過程、項目管理、軟件開發(fā)技術(shù)等。軟件開發(fā)活動細化為需求分析、系統(tǒng)設(shè)計、軟件構(gòu)造、軟件交付等活動。又如,對于一個要編程解決的問題,可以把程序分解為若干函數(shù)或若干類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院82.1.1分解的含義分解的核心是將多個問題、難點或關(guān)注點分離。關(guān)注點分離是對只與“特定概念、目標”(關(guān)注點)相關(guān)聯(lián)的軟件組成部分進行“標識、封裝和操縱”的能力,即標識、封裝和操縱關(guān)注點的能力,是處理復(fù)雜性的一個原則。關(guān)注點分離是面向方面的程序設(shè)計的核心概念。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院92.1.1分解的含義案例代碼2.1的程序可以分解4個部分。(1)增加一個程序頭打印函數(shù)voidprintHeader(),簡單說明本程序的作用和使用。(2)函數(shù)voidgenerateEquations(),產(chǎn)生加法或減法算式的符號串并存入一個數(shù)組。(3)輸出習(xí)題的函數(shù)voidprintExercise(),它接收generateEquations的輸出,按照要求打印輸出所有的算式。(4)輸出習(xí)題中每個算式的計算結(jié)果voidprintCalculations()。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院102.1.1分解的含義2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院112.1.2模塊化與結(jié)構(gòu)化模塊化是把問題分解成容易理解、便于控制、便于實現(xiàn)的子問題的一個重要手段,是實現(xiàn)控制復(fù)雜性的方式。模塊化通過把一個程序分解成簡單獨立、互相作用的模塊,對不同的模塊設(shè)定不同的功能,來實現(xiàn)大型、復(fù)雜的程序。模塊是可組合、可更換的程序單元。良好設(shè)計的模塊只完成一個特定的或一組相關(guān)的子功能。所有模塊按某種方法組裝起來,成為一個整體,完成整個系統(tǒng)所要求的功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院122.1.2模塊化與結(jié)構(gòu)化軟件模塊是指具有相對獨立性的、由數(shù)據(jù)說明、執(zhí)行語句等程序?qū)ο髽?gòu)成的代碼集合。每個模塊都需要單獨命名,如:函數(shù)、子程序、過程、方法等。通過名字訪問指定模塊。一個模塊具有輸入/輸出(接口)、功能、內(nèi)部數(shù)據(jù)和程序代碼4個組成部分。模塊具有三大特征:獨立性、互換性和通用性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院132.1.2模塊化與結(jié)構(gòu)化模塊化設(shè)計,簡單地說,就是將產(chǎn)品的某些要素組合在一起,構(gòu)成一個具有特定功能的、相對獨立的子系統(tǒng),將這個子系統(tǒng)作為通用模塊與其他產(chǎn)品要素進行多種組合,產(chǎn)生多種不同功能或相同功能、不同性能的系列產(chǎn)品。函數(shù)(或方法、過程)是實現(xiàn)軟件模塊化的一個基本手段。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院142.1.2模塊化與結(jié)構(gòu)化在模塊設(shè)計中,最基本的是算法和數(shù)據(jù)結(jié)構(gòu)的設(shè)計。代碼2.1中只有一個數(shù)據(jù)結(jié)構(gòu)——算式表示成基本類型符號串,代碼2.2增加了一個存儲算式的數(shù)組作為習(xí)題。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院152.1.2模塊化與結(jié)構(gòu)化如何定義兩個算式相等?如果把算式表示成符號串,計算機語言判定符號串“□2+3=”、“2□+3=”、“2+□3=”和“2+3□=”(其中□表示一個空格)互不相等,“2+3”和“2+3=”不相等。但它們是相同的算式。預(yù)處理算式——消除算式符號串中的所有空格。但預(yù)處理會占用計算資源。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院162.1.2模塊化與結(jié)構(gòu)化圖靈獎獲得者Wirth提出的“結(jié)構(gòu)化程序設(shè)計”(StructuredProgramming)的方法,可以簡化為“算法+數(shù)據(jù)結(jié)構(gòu)=程序”。這種結(jié)構(gòu)化程序設(shè)計方法又稱為“自頂向下”或“逐步求精”法。增量迭代方法汲取了這些方法的精華,但有著不同的特點:“增量”是少量可執(zhí)行程序的功能及每次具體實現(xiàn)增量的過程,而不是從抽象到代碼,可視為“需求分析、概念設(shè)計、編碼實現(xiàn)”的微構(gòu)造過程。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院172.2數(shù)據(jù)結(jié)構(gòu)與算法2.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系2.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)2.2.3選擇與設(shè)計算法2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院182.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。為數(shù)據(jù)集提供獨立于計算機內(nèi)存的數(shù)據(jù)組織,并提供被視為一種抽象的工具來訪問。常見的數(shù)據(jù)結(jié)構(gòu),如數(shù)組、集合、棧、隊列、堆、樹、圖、散列表等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院192.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系算法以一步一步的方式來詳細描述計算機如何將輸入轉(zhuǎn)化為所要求的輸出的過程。描述算法的方式可以采用自然語言、程序設(shè)計語言,也可以兩種語言混合使用。用計算機程序語言實現(xiàn)并在計算機上運行的算法就是程序,它是一個解決實際問題方法的程序語言的指令序列?;镜乃惴ǎ愋停┌ú檎摇⑴判?、二叉樹的遍歷、圖的遍歷、最短路徑算法。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院202.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系計算機算法與數(shù)據(jù)結(jié)構(gòu)密切相關(guān),算法依賴于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。(1)一種數(shù)據(jù)結(jié)構(gòu)、一種算法:通常是針對一種特殊的數(shù)據(jù)結(jié)構(gòu)設(shè)計的特殊算法。如,計算樹的高度、樹節(jié)點的層級。(2)一種數(shù)據(jù)結(jié)構(gòu)、多種算法:如,數(shù)組,支持的算法如排序、查找、圖類、矩陣類等等。(3)多種數(shù)據(jù)結(jié)構(gòu)、一種算法:如,折半查找使用數(shù)組和二叉樹,也可以使用鏈表。(4)多種數(shù)據(jù)結(jié)構(gòu)、多種算法:如,數(shù)組和二叉樹,基本的算法有遍歷類、查找類、求最大值等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院212.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系在程序設(shè)計和軟件開發(fā)的實踐和理論中,存在過以數(shù)據(jù)為中心和以操作為中心的開發(fā)方法。更多時候,軟件開發(fā)者在數(shù)據(jù)與算法之間尋找均衡的設(shè)計方法,同時兼顧數(shù)據(jù)結(jié)構(gòu)與算法。面向?qū)ο蟮某绦蛟O(shè)計語言和面向?qū)ο箝_發(fā)方法就是綜合了數(shù)據(jù)與操作,將其封裝成一個軟件實體——對象,完成用戶需求分析、軟件建模與軟件構(gòu)造。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院222.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)算式與習(xí)題的基本數(shù)據(jù)結(jié)構(gòu)設(shè)計1:把算式理解成具有一定組成元素的結(jié)構(gòu)——兩個運算數(shù)、一個加或減法的運算符,以及結(jié)果。程序設(shè)計風(fēng)格操作數(shù)的命名獨立變量和非獨立變量2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院232.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)一個結(jié)構(gòu)類型是否包含非獨立變量,應(yīng)該考慮下列因素。①獲取非獨立變量值的難易程度。②使用非獨立變量的頻繁程度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院242.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)對于包含算式的習(xí)題,自然地選擇數(shù)組。數(shù)組是有限個同類型元素的有序集合。絕大多數(shù)高級程序設(shè)計語言都有內(nèi)置數(shù)組。習(xí)題Exercise可以定義成以結(jié)構(gòu)體的算式為元素的數(shù)組:2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院252.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)設(shè)計2:使用一個包含三個成員的數(shù)組[operand,operand2,operator]表示算式Equation。語言要求數(shù)組成員屬于同一類型,故將算式中的運算符operator定義成整數(shù)類型??梢杂貌煌臄?shù)值對應(yīng)不同的運算符,如0表示“加”,1表示“減”。習(xí)題Exercise仍然使用數(shù)組,可視為一個[50,3]的二維數(shù)組。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院262.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)比較首先,數(shù)據(jù)結(jié)構(gòu)的設(shè)計是否滿足實際問題的需要?是否直接反映了問題本身?第二,數(shù)據(jù)結(jié)構(gòu)的設(shè)計是否容易編程實現(xiàn)?第三,對解決問題的操作是否給予支持?即是否方便算法的設(shè)計與實現(xiàn)。第四,設(shè)計的質(zhì)量如何?包括可讀性、易修改性、可擴展性、易維護性等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院272.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院282.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)符號串直接顯示了人易讀的形式;節(jié)省存儲空間。符號沒有語義(數(shù)據(jù)類型),需要解析;結(jié)構(gòu)體表示出算式組成的數(shù)據(jù)類型;節(jié)省存儲空間。要用轉(zhuǎn)換函數(shù)才能顯示并輸出一個算式。數(shù)組任意表示復(fù)雜的算式;容易擴展到兩個、甚至數(shù)十個運算符;節(jié)省存儲空間。算式成分與數(shù)組的位置需要映射;要用轉(zhuǎn)換函數(shù)才能顯示并輸出一個算式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院292.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)小結(jié):(1)算式的三種數(shù)據(jù)結(jié)構(gòu)都能滿足需求。(2)如程序要求擴展或改善,則會要求代碼易讀、結(jié)構(gòu)穩(wěn)定,才容易理解、修改和擴充。如,檢查算式是否重復(fù),或在習(xí)題中查找算式,設(shè)計1和2比代碼2.1有明顯優(yōu)勢。再如,增加乘、除法運算,三種數(shù)據(jù)結(jié)構(gòu)都不變,代碼2.1的算式輸出不變,但要增加解析操作,從符號串分解出乘和除;設(shè)計1和2需要增加乘、除法運算符的顯示方式,而設(shè)計2要增加兩個映射(比如3對應(yīng)乘法)。結(jié)論:總體考慮,把算式成分明確表示出來的結(jié)構(gòu)體是目前算式的最佳數(shù)據(jù)結(jié)構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院302.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)算法分析與其他數(shù)據(jù)結(jié)構(gòu)案例隱含要求:不允許出現(xiàn)重復(fù)的算式。對于數(shù)組,要實現(xiàn)算式比較算法。產(chǎn)生50個算式的習(xí)題總共需要的比較次數(shù)是:0+1+2+…+49=(0+49)×50/2=1225。產(chǎn)生有正整數(shù)n個不同算式的習(xí)題,算法的復(fù)雜性是O(n2)?!凹稀?。語言實現(xiàn)了集合的基本操作,包括插入、判定一個元素是否在集合中。而且,集合中元素數(shù)量可以動態(tài)變化。如此構(gòu)造一個習(xí)題的算法就是線性的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院312.2.3選擇與設(shè)計算法1.習(xí)題與算式的分離算式與習(xí)題是兩個完全不同的數(shù)據(jù)。算式是具有滿足一定約束條件的組成元素和結(jié)構(gòu)的數(shù)據(jù),不是簡單的符號串。習(xí)題包含了數(shù)目確定的不同的算式,它像一個容器把算式存儲起來。它們的產(chǎn)生方式不同,操作和使用也不相同。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院322.2.3選擇與設(shè)計算法1.習(xí)題與算式的分離把習(xí)題和算式明確地從代碼中抽出,并分別用合適的數(shù)據(jù)結(jié)構(gòu)表示,有助于各自的設(shè)計與實現(xiàn),也能實現(xiàn)不同的算式和習(xí)題的任意組合。假設(shè)算式有三種數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體、一維數(shù)組和字符串;習(xí)題有4種選擇:一維數(shù)組、集合、隊列及不需數(shù)據(jù)結(jié)構(gòu)(如代碼2.1),則案例程序可以有12種數(shù)據(jù)結(jié)構(gòu)的組合方式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院332.2.3選擇與設(shè)計算法1.習(xí)題與算式的分離而且,不僅一個程序的數(shù)據(jù)結(jié)構(gòu)具有不同的組合方式。如果把數(shù)據(jù)結(jié)構(gòu)連同對它們的操作也都封裝到一個模塊——最簡單的就是函數(shù),那么,包含了數(shù)據(jù)與操作的這些函數(shù)可以作為程序的模塊使用。可以提高程序的結(jié)構(gòu)性和可維護性,如可以替換相同功能、不同實現(xiàn)的模塊,而不影響程序的功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院342.2.3選擇與設(shè)計算法2.算式產(chǎn)生與其約束條件的分離考慮到程序的可擴展性、可修改性,例如,允許不止一個加法或減法運算,或者將算式數(shù)值范圍擴大到500、1000等。分別定義運算數(shù)生成函數(shù)與約束條件檢測函數(shù),對滿足一定條件的運算數(shù)才生成算式。“滿足100以內(nèi)整數(shù)”的條件不僅適合兩個運算數(shù),也適用于其結(jié)果。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院352.2.3選擇與設(shè)計算法3.加減法算式的分離為了能夠產(chǎn)生全加、全減和混合三種類型的習(xí)題,應(yīng)當分別編寫加法算式和減法算式函數(shù),然后隨機地選擇這兩種算式,就能生成混合運算的習(xí)題。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院362.2.3選擇與設(shè)計算法2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院372.3模塊化設(shè)計理論初步2.3.1模塊化原則2.3.2模塊的內(nèi)聚性2.3.3模塊間的耦合性2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院382.3.1模塊化原則Meyer提出了5條標準來評價一種設(shè)計方法是否定義了有效的模塊系統(tǒng)的能力。(1)模塊可分解性。(2)模塊可組裝性。(3)模塊可理解性。(4)模塊連續(xù)性。(5)模塊保護性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院392.3.1模塊化原則模塊的獨立程度可以由兩個定性標準來度量——內(nèi)聚和耦合。內(nèi)聚衡量一個模塊內(nèi)部各個元素之間相互結(jié)合的緊密程度;耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院402.3.2模塊的內(nèi)聚性內(nèi)聚性是對一個模塊內(nèi)部各個組成元素之間相互結(jié)合的緊密程度的度量指標。模塊中組成元素結(jié)合得越緊密,模塊的內(nèi)聚性就越高,模塊的獨立性也就越高。理想的內(nèi)聚性要求模塊的功能應(yīng)明確、單一,即一個模塊只做一件事情。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院412.3.2模塊的內(nèi)聚性內(nèi)聚有如下7種,由弱到強排列如下。(1)偶然內(nèi)聚(2)邏輯內(nèi)聚(3)時間內(nèi)聚(4)過程內(nèi)聚(5)通信內(nèi)聚(6)順序內(nèi)聚(7)功能內(nèi)聚2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院422.3.3模塊間的耦合性耦合性是一個模塊與系統(tǒng)內(nèi)其他模塊及與外部世界的關(guān)聯(lián)程度的度量。耦合的強弱取決于模塊間接口的復(fù)雜性、調(diào)用模塊的方式及通過界面?zhèn)魉蛿?shù)據(jù)的多少。在軟件開發(fā)中,應(yīng)該追求盡可能松散耦合的系統(tǒng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院432.3.3模塊間的耦合性耦合度從低到高可分為7級。非直接耦合數(shù)據(jù)耦合標記耦合控制耦合外部耦合公共耦合內(nèi)容耦合2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院442.3.3模塊間的耦合性耦合是影響軟件復(fù)雜程度的一個重要因素。一般而言,應(yīng)該采取下述設(shè)計原則:應(yīng)盡量使用數(shù)據(jù)耦合,減少控制耦合,限制外部環(huán)境耦合和公共耦合,杜絕內(nèi)容耦合,降低接口的復(fù)雜度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院452.3.3模塊間的耦合性模塊的內(nèi)聚性和耦合性是兩個相互對立且又密切相關(guān)的概念。軟件概要設(shè)計的目標是力求增加模塊的內(nèi)聚,盡量減少模塊間的耦合。在程序結(jié)構(gòu)中,各模塊的內(nèi)聚程度越高,模塊間的耦合程度就越低。雖然這種關(guān)聯(lián)不是絕對的,但是,增加內(nèi)聚比減少耦合更重要,軟件開發(fā)者應(yīng)當把更多的注意力集中到提高模塊的內(nèi)聚程度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院462.4測試程序IEEE軟件工程標準術(shù)語:軟件測試使用人工或自動手段來運行或測定某個系統(tǒng)的過程,目的在于檢測它是否滿足規(guī)定的需求或者是否弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。測試是對程序或系統(tǒng)能否完成特定任務(wù)建立信心的過程。軟件測試是說明程序是否正確的最基本的一種技術(shù)手段。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院472.4測試程序執(zhí)行程序測試時,要考慮下列因素。首先,如何判定程序的運行結(jié)果是否滿足了需求?上面列出的需求是否可以判定對錯?其次,如何執(zhí)行程序測試?是否需要記錄?如何記錄?軟件測試應(yīng)該盡量詳細、完整地記錄下來。測試執(zhí)行與記錄可以手工完成,也可以借助軟件工具或框架完成,還可以通過編寫測試代碼完成。第三,需要運行程序多少次才能說明程序正確了?或者說,選擇什么樣的輸入數(shù)據(jù)、涵蓋了哪些程序范圍就可以說明了程序的正確性?2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院482.4測試程序2.4.1測試需求2.4.2測試設(shè)計與測試用例2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院492.4.1測試需求由于對用戶需求理解的偏差,要執(zhí)行軟件測試,實現(xiàn)測試目的,首要任務(wù)是要仔細地分析用戶需求和設(shè)計,梳理含糊不清、模棱兩可、相互矛盾的需求,明確、細化和羅列出需求,并且將每個需求表示成可以檢測的測試需求。例如,要求運算數(shù)的數(shù)值范圍是0~100。[0,100]、(0,100)、(0,100]、[0,100)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院502.4.1測試需求有時用戶難以精確地表示需求,需要在使用之后“感覺”到?jīng)]有問題了。這就要求程序員具有一定的經(jīng)驗,與用戶溝通交流、對問題深入理解、良好的軟件設(shè)計等能力及對編程語言的掌握程度等,才能開發(fā)出滿足用戶要求的軟件。針對軟件開發(fā)中用戶需求的不確定性、經(jīng)常變化等問題,出現(xiàn)了用戶聯(lián)合開發(fā)方法(JointApplicationDevelopment,JAD)。特別地,敏捷開發(fā)方法要求客戶參與軟件開發(fā)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院512.4.1測試需求其次,測試需求要求程序的預(yù)期結(jié)果和實際運行結(jié)果都要明確、合理、可觀察并可比較。案例要求50道算式的需求非常明確。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院522.4.1測試需求為了測試程序是否包含某個算式,一定要運行整個程序嗎?如同采用分解和模塊化技術(shù),分而治之地解決一個較大問題的軟件開發(fā),分解也同樣適用于軟件測試。為了方便、快速地檢測一個用戶需求或者特定功能是否得到滿足,可以針對性地設(shè)計測試,或者測試程序的一部分。一種策略是分析用戶需求,把它細化成一個個具體的、獨立的、功能單一的測試需求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院532.4.1測試需求將代碼2.1的測試需求分解如下:(1)程序是否能正確地產(chǎn)生滿足條件的加法算式?(確定的程序)(2)程序是否能正確地產(chǎn)生滿足條件的減法算式?(確定的程序)(3)程序是否能正確地產(chǎn)生滿足條件的加法或減法算式?(隨機性)(4)進一步,還可以繼續(xù)分解成如下的測試需求:程序是否產(chǎn)生了[0..100]范圍的值,或者[1,100]范圍的值,或者(0,100)范圍的值?2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院542.4.2測試設(shè)計與測試用例測試設(shè)計不同于測試用例設(shè)計。測試設(shè)計的內(nèi)容包含設(shè)計測試用例,此外還包括決定是否實施所有層次的測試、是否采用測試工具或自動化測試框架、哪些測試采用哪些工具、如何組織人員進行測試等。IEEE,測試用例是一組輸入、運行條件和通過/失敗準則。簡單地說,測試用例是一組測試數(shù)據(jù)和預(yù)期結(jié)果。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院552.4.2測試設(shè)計與測試用例程序的運行結(jié)果分為三類:產(chǎn)生的值。如局部觀察的輸出(數(shù)值、文字、圖片、聲音等)或者操作、存儲的輸出。狀態(tài)變化。如程序的狀態(tài)變化、數(shù)據(jù)庫的狀態(tài)變化。必須一起解釋為輸出才有效的一個序列或一組值。測試用例設(shè)計的核心就是設(shè)計測試輸入,即測試數(shù)據(jù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院562.4.2測試設(shè)計與測試用例【例2.1】一個生成整數(shù)減法的程序,輸入是兩個整數(shù),要求輸出它們的差,結(jié)果不能為負數(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院572.4.2測試設(shè)計與測試用例對每個測試用例,將程序運行結(jié)果與預(yù)期結(jié)果比較。若相等,表示待測程序“通過”了測試數(shù)據(jù);若不相等,表示待測程序未通過測試數(shù)據(jù),即測試“失敗”??赡艹霈F(xiàn)其他情況,沒有執(zhí)行所有的測試用例,比如因某個測試數(shù)據(jù)導(dǎo)致待測程序沒能運行完而退出,或者程序異常退出,或者用戶中斷程序運行等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院582.4.2測試設(shè)計與測試用例測試結(jié)果的判定可能會存在誤判和漏判。由于測試數(shù)據(jù)或預(yù)期結(jié)果的錯誤而導(dǎo)致顯示待測程序可能有誤,稱為測試誤判。如果待測程序有錯,而測試沒有發(fā)現(xiàn)錯誤,稱為測試漏判。如何減少漏判,即如何通過測試發(fā)現(xiàn)程序中存在錯誤,實際上就是如何設(shè)計測試和測試數(shù)據(jù),使得待測程序不能通過一些測試用例。理論上,測試不能證明程序沒有錯誤,而是通過測試發(fā)現(xiàn)錯誤,提高程序正確性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院592.4.2測試設(shè)計與測試用例待測程序使用測試用例的三種方式①每次從鍵盤輸入一個測試數(shù)據(jù),觀察測試結(jié)果并和預(yù)期值比較,記錄測試通過與否;②通過編寫測試程序,先存儲測試用例,然后讓待測程序逐個讀取測試數(shù)據(jù)、運行、比較預(yù)期結(jié)果,同時記錄測試結(jié)果;③使用測試工具完成測試程序的操作及其他更多操作。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院602.5調(diào)試程序當程序不能編譯運行,或者測試發(fā)現(xiàn)了錯誤,程序員要理解程序的行為,發(fā)現(xiàn)可能的錯誤并去除它,這個過程稱為調(diào)試。調(diào)試是軟件開發(fā)的重要活動,是程序員必須熟練掌握的軟件開發(fā)技術(shù)。2.5.1缺陷的相關(guān)術(shù)語2.5.2調(diào)試基礎(chǔ)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院612.5.1缺陷的相關(guān)術(shù)語軟件Bug即缺陷(Defect),是軟件產(chǎn)品中所存在的問題,最終表現(xiàn)為用戶需求沒有完全實現(xiàn)。從產(chǎn)品內(nèi)部看,軟件缺陷是軟件產(chǎn)品開發(fā)或維護過程中所存在的錯誤、毛病等各種問題。從外部看,軟件缺陷是系統(tǒng)所需要實現(xiàn)的某種功能的失效或違背。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院622.5.1缺陷的相關(guān)術(shù)語缺陷源自人的過失(Mistake)活動產(chǎn)生的不正確結(jié)果。過失活動包括誤解、遺漏用戶需求、設(shè)計不合理等。引起故障的原因是程序中不正確的步驟、過程或數(shù)據(jù)定義,是過失發(fā)展的結(jié)果,它們可能導(dǎo)致軟件失效(Failure)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院632.5.1缺陷的相關(guān)術(shù)語所謂錯誤(Error)就是導(dǎo)致不正確結(jié)果的全部。它展示了某個故障的不正確的內(nèi)部狀態(tài)??梢岳斫釨ug是程序中引起錯誤的具體位置,因此,debug就是找出并更改程序中的錯誤。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院642.5.2調(diào)試基礎(chǔ)1.科學(xué)的調(diào)試過程調(diào)試是根據(jù)程序的出錯情況,分析、猜測可能出現(xiàn)錯誤的程序區(qū)域,讓程序運行,觀察程序的變化來發(fā)現(xiàn)錯誤的根源。調(diào)試的基本活動包括隔離、定位和更正錯誤。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院652.5.2調(diào)試基礎(chǔ)2.定位程序缺陷最簡單的調(diào)試技術(shù)是在要觀察的語句前后添加各種類型的打印語句。如簡單打印“執(zhí)行到此”——調(diào)試時可以看到程序是否執(zhí)行了某條語句或執(zhí)行到某語句;或者打印一個或一組變量的值,觀察變量值的變化。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院662.5.2調(diào)試基礎(chǔ)3.更改缺陷調(diào)試中確定錯誤位置是最困難的任務(wù),修改程序相對容易。然而,容易的事情有時也容易出錯。一項研究發(fā)現(xiàn),第一次更正缺陷具有50%的可能性出錯。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院672.6案例分析與實踐2.6.1案例程序的初始構(gòu)造2.6.2無相同算式的基礎(chǔ)構(gòu)造2.6.3編程實現(xiàn)測試2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院682.6.1案例程序的初始構(gòu)造對故事1程序的構(gòu)造程序1:生成50道100以內(nèi)加法/減法算式的習(xí)題,并輸出。分析首先,如何產(chǎn)生100以內(nèi)的隨機數(shù)?隨機數(shù)生成函數(shù),隨機產(chǎn)生一定范圍的值。其次,如何表示一個算式?采用什么樣的數(shù)據(jù)結(jié)構(gòu)?字符串、結(jié)構(gòu)體、數(shù)組。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院692.6.1案例程序的初始構(gòu)造構(gòu)造模塊化技術(shù)設(shè)計程序,分別產(chǎn)生加法習(xí)題和減法習(xí)題。程序起名為口算練習(xí)產(chǎn)生器。減generateExerciseOfSubstactEquations2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院702.6.1案例程序的初始構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院712.6.1案例程序的初始構(gòu)造故事2100以上的數(shù)和負數(shù)。(1)每個算式還需要答案;(新增)(2)加法算式的和不能超過100;(隱含)(3)減法算式的差不能小于0;(隱含)(4)每行整齊地多顯示幾個算式。(更改)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院722.6.1案例程序的初始構(gòu)造分析首先,如何處理每個算式的答案?其次,除了每個運算數(shù)有100以內(nèi)的約束條件外,還要約束它們的運算結(jié)果(n+m<100和n?m>0或n>m)。最后,由于是50個題目,每行顯示5個算式,正好10行顯示完。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院732.6.1案例程序的初始構(gòu)造構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院742.6.2無相同算式的基礎(chǔ)構(gòu)造構(gòu)造任務(wù)2:生成50道100以內(nèi)加減法算式的混合習(xí)題,題中不能有相同的算式。故事3有些題的答案一樣、眼熟。加法和減法都有的題目。分析如何讓神器生成沒有重復(fù)算式的習(xí)題。練習(xí)中要有加法和減法的算式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院752.6.2無相同算式的基礎(chǔ)構(gòu)造構(gòu)造函數(shù)表示分解出的、相對獨立的代碼,如增加了算式生產(chǎn)的模塊,循環(huán)調(diào)用來構(gòu)造習(xí)題。采用了較好的編程風(fēng)格,如使用名稱常量。程序結(jié)構(gòu)詳見課本。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院762.6.3編程實現(xiàn)測試現(xiàn)代軟件開發(fā)的一個最佳實踐是,程序員自己編寫測試程序,記錄下測試數(shù)據(jù)、測試過程及結(jié)果分析。編寫測試程序具有以下顯著優(yōu)點。(1)測試有助于編寫正確的程序。(2)測試有助于提高程序質(zhì)量。(3)測試是程序的重要文檔。(4)測試提高了復(fù)用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院772.6.3編程實現(xiàn)測試如何編寫測試程序?它的基本結(jié)構(gòu)如何?1.可選的編程測試任務(wù)簡單的不測,如算式的字符串顯示asString;用戶認可就行,很難說對錯,不測,如整齊的輸出格式;整個程序的核心函數(shù),對程序能否使用起到關(guān)鍵作用,必須測試,例如,算式的產(chǎn)生、是否滿足條件、答案是否正確、能否查出重復(fù)的算式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院782.6.3編程實現(xiàn)測試測試程序的基本組成如下。①建立測試環(huán)境,包括初始化測試用例、初始化統(tǒng)計變量;②執(zhí)行測試,即把每個測試數(shù)據(jù)作為參數(shù)傳入待測程序、運行,比較實際運行結(jié)果與預(yù)期結(jié)果,給出測試通過與否的判定,計算“通過”、“失敗”及“未運行”等其他的測試數(shù);③處理測試結(jié)果:主要是統(tǒng)計、分析測試結(jié)果,并將其顯示、存儲。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院792.6.3編程實現(xiàn)測試2.測試代碼與待測代碼同源編寫測試代碼時也要遵循模塊化原則。首先將測試代碼與產(chǎn)品代碼分離,測試代碼調(diào)用產(chǎn)品代碼,但產(chǎn)品代碼獨立運行。其次,運用模塊化適當分解測試代碼,使每個模塊的功能單一、容易復(fù)用。如,可以將測試代碼劃分為:生成測試數(shù)據(jù),讀取測試數(shù)據(jù),執(zhí)行測試、判斷并記錄測試結(jié)果,統(tǒng)計和分析測試結(jié)果,存儲、顯示測試結(jié)果分析。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院802.6.3編程實現(xiàn)測試(1)選擇好的測試數(shù)據(jù)很重要。(2)一次測試,手工執(zhí)行測試較快,但容易忘記測試了什么、結(jié)果如何,也不能反復(fù)使用測試數(shù)據(jù)。(3)測試在程序大致可以運行后再進行。(4)程序的質(zhì)量屬性——可測性;同時,一定要像編寫應(yīng)用程序那樣編寫測試程序。(5)編寫測試代碼可能比要測試的代碼還要多!有工具輔助完成測試更好。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院812.7討論與提高編寫好程序的三個方面。①簡介質(zhì)量的概念——什么是好程序;②測試基礎(chǔ)和設(shè)計——如何說明好程序;③編程風(fēng)格——如何呈現(xiàn)好程序。2.7.1軟件質(zhì)量2.7.2軟件測試的其他觀點2.7.3測試設(shè)計2.7.4編程風(fēng)格2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院822.7.1軟件質(zhì)量為了編寫好程序,首先需要明確什么是好程序,即好程序的標準。不同的人對好程序有不同的認識。程序員習(xí)慣從程序本身判斷程序的好壞,認為好程序要容易看懂,容易修改,容易擴展。用戶認為好程序要正確,運行速度快,占用資源少,要有用,要容易使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院832.7.1軟件質(zhì)量國際標準組織ISO,質(zhì)量是反映產(chǎn)品或服務(wù)滿足明確和隱含的需求的能力特性總和。ISO為程序質(zhì)量定義了6個質(zhì)量特性。①功能性——程序是否滿足了用戶要求;②可靠性——程序保持規(guī)定的性能水平的能力;③可用性——程序有多容易使用;④效率——與程序運行時消耗的物理資源有關(guān);⑤可維護性——是否容易修改程序;⑥可移植性——是否容易把程序移植到一個新的環(huán)境。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院842.7.1軟件質(zhì)量ISO又對每個質(zhì)量特性進一步細化為一組子質(zhì)量特性。如,功能性包含:適合性:軟件產(chǎn)品為指定的任務(wù)和用戶目標提供一組合適功能的能力;準確性:軟件提供給用戶功能的精確度是否符合目標;互操作性:軟件與其他系統(tǒng)進行交互的能力;保密安全性:保護信息和數(shù)據(jù)的安全能力;功能性的依從性:遵循相關(guān)標準。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院852.7.1軟件質(zhì)量有些子質(zhì)量特性可能影響不止一個質(zhì)量特性,比如,每個質(zhì)量特性都含有依從性。如,可維護細化為5個子特性,它們是:易分析性:提供輔助手段幫助分析識別缺陷的原因,找出待修復(fù)部分的能力;易改變性:指定的修改容易實現(xiàn)的能力;穩(wěn)定性:避免由修改而造成意外結(jié)果的能力;易測試性:提供輔助性手段幫助測試人員實現(xiàn)其測試意圖,使已修改軟件能被確認的能力;維護性的依從性:遵循相關(guān)標準。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院862.7.1軟件質(zhì)量軟件質(zhì)量是明確聲明的功能和性能需求、明確文檔化過的開發(fā)標準,以及軟件所應(yīng)具有的所有隱含特征都得到滿足。軟件需求是對軟件質(zhì)量度量的基礎(chǔ)。與需求不符就是質(zhì)量不高。指定的標準定義了一組指導(dǎo)軟件開發(fā)的準則。軟件通常有一組“隱含需求”是不被提及的(如對維護性的需求)。如果軟件符合了明確的需求卻沒有滿足隱含需求,軟件質(zhì)量仍然值得懷疑。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院872.7.1軟件質(zhì)量軟件質(zhì)量是許多質(zhì)量屬性的綜合體現(xiàn),各種質(zhì)量屬性反映了軟件質(zhì)量的不同方面。從認識和評估的角度,軟件質(zhì)量分為:外部質(zhì)量屬性是用戶可見的,是在使用軟件產(chǎn)品過程中通過觀察該軟件產(chǎn)品的系統(tǒng)行為而得到的,主要包括正確性、健壯性、可靠性、性能、安全性、易用性、兼容性。內(nèi)部質(zhì)量屬性是在軟件設(shè)計和編碼過程中,通過對中間產(chǎn)品的分析得來的,包括易理解性、可測試性、可擴展性、可維護性、可移植性、可復(fù)用性等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院882.7.1軟件質(zhì)量內(nèi)部質(zhì)量屬性影響外部質(zhì)量屬性;外部質(zhì)量屬性依賴于內(nèi)部質(zhì)量屬性。軟件產(chǎn)品的最終目標是滿足用戶要求的、可見的外部質(zhì)量。開發(fā)良好的軟件是確保軟件質(zhì)量的唯一途徑,包括采用良好的軟件工程技術(shù)、過程和管理。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院892.7.2軟件測試的其他觀點針對軟件測試,存在截然不同的兩種典型觀點:軟件測試的正面觀與負面觀。正面觀,軟件測試是為了驗證程序能夠按預(yù)期運行。軟件測試是一系列活動,以評價一個程序或系統(tǒng)的特性或能力,并確定是否達到預(yù)期的結(jié)果。測試是為了驗證軟件是否符合用戶需求,即驗證軟件產(chǎn)品是否能正常工作。負面觀,測試是為了證明程序有錯。一個好的測試在于它能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤;一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤的測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院902.7.2軟件測試的其他觀點現(xiàn)代軟件開發(fā)理論與實踐認為軟件測試的目的和作用是多方面的:測試能驗證軟件產(chǎn)品是否正常;測試是發(fā)現(xiàn)軟件缺陷的手段;同時測試為軟件產(chǎn)品的質(zhì)量測量和評價提供依據(jù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院912.7.2軟件測試的其他觀點對軟件測試的認識,還包括風(fēng)險觀點和經(jīng)濟觀點。從軟件風(fēng)險的角度看,軟件測試被認為是對軟件系統(tǒng)中潛在的各種風(fēng)險進行評估的活動。基于風(fēng)險的軟件測試可以被視為一個動態(tài)的監(jiān)控過程,對軟件開發(fā)全過程進行檢測,隨時發(fā)現(xiàn)問題、報告問題。從經(jīng)濟觀點出發(fā),測試就是以最小的代價獲得最高的軟件產(chǎn)品質(zhì)量。經(jīng)濟觀點也要求軟件測試盡早開展工作,發(fā)現(xiàn)缺陷越早,返工的工作量就越小,所造成的損失就越小。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院922.7.3測試設(shè)計1.測試覆蓋測試是選擇性地運行程序,不可能通過徹底的測試說明程序正確。給定一個軟件或模塊,測試多少次或者測試到什么程度,能夠說明程序完全正確、滿足了需求?即使是一個簡單程序,要窮舉測試程序的所有可能性,也幾乎是不可能的事情。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院932.7.3測試設(shè)計【例2.2】一個整型加法函數(shù)??紤]到測試所耗費的時間、人員、環(huán)境和資金等因素,也不可能徹底地測試程序。遵循軟件測試的經(jīng)濟性原則,即用盡量少的測試、最小的消耗能最大程度地保證程序的正確性,使程序滿足需求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院942.7.3測試設(shè)計測試覆蓋指測試所包含的軟件的特征、元素、成分等方面的程度或范圍。由于軟件的多樣性,覆蓋域是多方面的,包括:用戶需求、函數(shù)、類、數(shù)據(jù)流、數(shù)據(jù)結(jié)構(gòu)、程序結(jié)構(gòu)、程序執(zhí)行路徑等。軟件測試包含下列覆蓋:功能覆蓋、輸入域覆蓋、輸出域覆蓋、函數(shù)交互覆蓋、代碼執(zhí)行覆蓋和代碼結(jié)構(gòu)性覆蓋。滿足性條件可以測試覆蓋率量化。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院952.7.3測試設(shè)計有關(guān)測試覆蓋有如下使用原則。(1)多覆蓋域原則:滿足一個測試覆蓋不能為軟件的正確程度提供充足的保證。要采用不同的軟件測試技術(shù)和方法,以滿足多個覆蓋域條件。(2)測試覆蓋原則:度量測試覆蓋率并針對不斷增強的覆蓋率來改進測試數(shù)據(jù),就能改進待測軟件。不同的測試數(shù)據(jù)具有不同的覆蓋能力。因此,設(shè)計和選擇測試數(shù)據(jù)成為實現(xiàn)測試目標的一個重要并且基本的技術(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院962.7.3測試設(shè)計2.基于等價類劃分的測試【例2.3】對例2.2增加約束,要求兩個輸入?yún)?shù)值的范圍0~100。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院972.7.3測試設(shè)計三個測試數(shù)據(jù)<3,16>,<5,13>,<2,11>,它們的加數(shù)都是10以內(nèi)的數(shù)、被加數(shù)都是10~20的數(shù),其結(jié)果不超過30。這樣的一組數(shù)據(jù)稱為等價類集合。另外一個等價類:加數(shù)和被加數(shù)都是10~20的數(shù)(<13,16>、<18,19>)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院982.7.3測試設(shè)計基于等價類劃分測試的基本思想是:將程序可能的輸入數(shù)據(jù)依據(jù)某個準則分成若干等價子集,其和覆蓋了整個程序的輸入域,然后從每個子集中選取一個代表性的數(shù)據(jù)作為測試數(shù)據(jù),這樣既可以大大降低測試數(shù)量,同時又能在一定程度上保證通過了測試的程序的正確性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院992.7.3測試設(shè)計按照加數(shù)和被加數(shù)都從0到100,以10為間隔,運算數(shù)分為10個等價子集。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1002.7.3測試設(shè)計對例2.3的程序,如果隱含要求了兩個數(shù)的和也在100以內(nèi),則凡是兩個數(shù)相加的和超過100,這樣的測試數(shù)據(jù)就是無效的。表2.3中序號6~10測試數(shù)據(jù)都是無效的。表2.4中序號3、5、8的測試數(shù)據(jù)也是無效的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1012.7.3測試設(shè)計等價類劃分有兩種情況:有效等價類和無效等價類。有效等價類指對于程序的要求來說是合理的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。有效等價類用于檢驗程序是否實現(xiàn)了所要求的功能和性能。不滿足有效等價的數(shù)據(jù)集合就是無效等價類。設(shè)計測試用例時,要同時考慮這兩種等價類。因為程序不僅要能接收合理的數(shù)據(jù),也要具備處理非法、無效數(shù)據(jù)的能力,確保程序的穩(wěn)定性、可靠性和安全性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1022.7.3測試設(shè)計對于同一個程序,存在不同的等價類劃分方法。如果想增加測試數(shù)量、試圖發(fā)現(xiàn)更多的錯誤或者提高程序的可信度,可以細分等價類。對于例2.3,可以把間隔減小,改為5,增加測試數(shù)量。也可以把間隔改為20,減少測試數(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1032.7.3測試設(shè)計根據(jù)輸出域劃分等價類。例2.3的輸出值的范圍是0~100,同樣以10為單位建立10個等價類,每個類選取一個數(shù)作為函數(shù)的輸出代表,為此選擇兩個有效數(shù)作為測試數(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1042.7.3測試設(shè)計劃分等價類的基本原則如下。按區(qū)間劃分。按數(shù)值集合劃分。按限制條件劃分。按限制規(guī)則劃分
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度門店員工雇傭合同及員工工作環(huán)境改善協(xié)議
- 2025年度網(wǎng)絡(luò)游戲消費協(xié)議合同模板
- 二零二五年度水果種植基地農(nóng)業(yè)資源綜合利用合同
- 2025年度互聯(lián)網(wǎng)安全聘用合同與錄用合同
- 2025年度社區(qū)保安服務(wù)合同終止及社區(qū)安全信息化數(shù)據(jù)共享協(xié)議
- 二零二五年度著作權(quán)許可使用及版權(quán)登記合同
- 2025年度鋼材行業(yè)投資咨詢與評估合同
- 二零二五年度咖啡店門店轉(zhuǎn)讓及咖啡豆采購合同協(xié)議書
- 2025年度自愿解除勞動合同書模板與離職員工權(quán)益保障
- 2025年度餐飲會議服務(wù)知識產(chǎn)權(quán)保護合同
- 二零二五版電力設(shè)施維修保養(yǎng)合同協(xié)議3篇
- 最經(jīng)典凈水廠施工組織設(shè)計
- 2024年全國各地中考試題分類匯編:作文題目
- 《糖拌西紅柿 》 教案()
- 彈性力學(xué)數(shù)值方法:解析法:彈性力學(xué)中的變分原理
- 不定代詞用法總結(jié)及配套練習(xí)題
- 河南省鄧州市2023-2024學(xué)年八年級上學(xué)期期末語文試題
- 網(wǎng)絡(luò)輿情應(yīng)對處置培訓(xùn)課件
- 物流服務(wù)項目的投標書
- 國家中長期科技發(fā)展規(guī)劃綱要2021-2035
- 導(dǎo)尿術(shù)操作技術(shù)
評論
0/150
提交評論