單元7 軟件工程基礎(chǔ)_第1頁
單元7 軟件工程基礎(chǔ)_第2頁
單元7 軟件工程基礎(chǔ)_第3頁
單元7 軟件工程基礎(chǔ)_第4頁
單元7 軟件工程基礎(chǔ)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1單元

7軟件工程基礎(chǔ)軟件行業(yè)富有挑戰(zhàn)與創(chuàng)造性,軟件開發(fā)是復(fù)雜系統(tǒng)工程,常遇問題甚至失敗,總結(jié)失敗原因汲取教訓(xùn)對成功至關(guān)重要。軟件工程因應(yīng)軟件開發(fā)與軟件危機而生,它傳授開發(fā)思維而非實操,給出瀑布、快速原型、增量、噴泉等模型。學(xué)習(xí)軟件工程能讓編程人員開發(fā)更規(guī)范,利于軟件修改優(yōu)化,使開發(fā)有組織性、更有效,提升效率。它是軟件開發(fā)核心主線,是高質(zhì)量、進(jìn)度與成本可控完成軟件生產(chǎn)的支撐,串聯(lián)需求、設(shè)計、開發(fā)、測試等環(huán)節(jié),高效驅(qū)動各環(huán)節(jié)傳遞傳承。22軟件工程的概念7.1軟件體系結(jié)構(gòu)的模型7.27.37.47.57.6目錄軟件開發(fā)模型軟件開發(fā)方法軟件過程和項目管理軟件測試7.1軟件工程的概念37.1.1軟件工程的概念軟件工程是一門研究以工程化方法,開發(fā)和維護(hù)高質(zhì)量軟件的工程學(xué)科。軟件工程缺乏一個統(tǒng)一的定義,本書選用的定義如下:軟件工程是應(yīng)用計算機科學(xué)、數(shù)學(xué)、工程科學(xué)及管理科學(xué)等原理,開發(fā)軟件的工程,其借鑒傳統(tǒng)工程的原則、方法以提高質(zhì)量、降低成本和改進(jìn)算法。其中,計算機科學(xué)、數(shù)學(xué)用于構(gòu)建模型與算法,工程科學(xué)用于制定規(guī)范、設(shè)計范型、評估成本及確定權(quán)衡,管理科學(xué)用于管理計劃、資源、質(zhì)量、成本等。被較為認(rèn)可的一種對軟件工程的定義為:軟件工程是研究和應(yīng)用如何以系統(tǒng)化、規(guī)范化、定量化的過程化方法去開發(fā)和維護(hù)軟件,以及如何把經(jīng)過時間檢驗而證明正確的管理技術(shù)和當(dāng)前能夠得到的最佳技術(shù)方法結(jié)合起來。7.1.2軟件生命周期軟件生命周期又稱為軟件生存周期,是指軟件從立項開始,經(jīng)過開發(fā)、使用,直到最后廢棄的整個過程。通常將軟件的生命周期劃分為系統(tǒng)調(diào)查、系統(tǒng)分析、系統(tǒng)設(shè)計、程序設(shè)計、系統(tǒng)測試、運行維護(hù)等階段。概括地說,軟件生命周期由軟件定義、軟件開發(fā)和運行維護(hù)3個時期組成,每個時期又進(jìn)一步被劃分成若干個階段。下面簡要介紹軟件生命周期每個階段的基本任務(wù)。1.系統(tǒng)調(diào)查階段通過對客戶的訪問調(diào)查,開發(fā)者了解現(xiàn)行系統(tǒng)的組織分工、業(yè)務(wù)流程以及資源,提出新系統(tǒng)的目標(biāo),并從技術(shù)、經(jīng)濟、社會等方面進(jìn)行軟件開發(fā)的可行性研究。2.系統(tǒng)分析階段開發(fā)者對現(xiàn)行系統(tǒng)的業(yè)務(wù)流程進(jìn)行分析研究,確定新系統(tǒng)必須具備哪些功能,包括哪些界面,并且建立新系統(tǒng)的邏輯模型,如數(shù)據(jù)流程圖、數(shù)據(jù)字典和處理過程等。該階段的主要任務(wù)是明確目標(biāo)系統(tǒng)必須“做什么”。系統(tǒng)分析階段確定的系統(tǒng)邏輯模型是以后設(shè)計和實現(xiàn)目標(biāo)系統(tǒng)的基礎(chǔ),因此必須準(zhǔn)確完整地體現(xiàn)用戶的要求。這個階段的一項重要任務(wù)是用正式文檔準(zhǔn)確地記錄目標(biāo)系統(tǒng)的需求,這份文檔通常被稱為需求規(guī)格說明書。3.系統(tǒng)設(shè)計階段系統(tǒng)設(shè)計階段主要解決“怎么做”的問題,即提出系統(tǒng)的物理模型。系統(tǒng)設(shè)計階段細(xì)分為概要設(shè)計階段和詳細(xì)設(shè)計階段。概要設(shè)計階段又稱為總體設(shè)計階段,這個階段必須回答的關(guān)鍵問題是:“概括地說,應(yīng)該怎樣實現(xiàn)目標(biāo)系統(tǒng)?”。概要設(shè)計階段以比較抽象的方式提出了解決問題的辦法。詳細(xì)設(shè)計階段的任務(wù)就是把解法具體化,也就是回答下面這個關(guān)鍵問題:“應(yīng)該怎樣具體地實現(xiàn)這個系統(tǒng)呢?”。詳細(xì)設(shè)計階段也稱為模塊設(shè)計階段,這個階段將詳細(xì)地設(shè)計每個模塊,確定實現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。這個階段的任務(wù)還不是編寫程序,而是設(shè)計出程序的詳細(xì)規(guī)格說明。這種規(guī)格說明的作用類似于其他領(lǐng)域中工程師經(jīng)常使用的工程藍(lán)圖,它們應(yīng)該包含必要的細(xì)節(jié),程序員可以根據(jù)它們寫出實際的程序代碼。44.程序設(shè)計階段程序設(shè)計階段的關(guān)鍵任務(wù)是編寫出正確的、容易理解的、容易維護(hù)的程序代碼。程序員根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實際環(huán)境,選取一種適當(dāng)?shù)母呒壋绦蛟O(shè)計語言,把詳細(xì)設(shè)計階段的結(jié)果轉(zhuǎn)化成用計算機語言編寫的程序,并且仔細(xì)測試編寫出的每一個程序模塊。5.系統(tǒng)測試階段系統(tǒng)測試階段的關(guān)鍵任務(wù)是通過各種類型的測試以及相應(yīng)的調(diào)試使軟件系統(tǒng)達(dá)到規(guī)定的要求。最基本的測試是集成測試和驗收測試。所謂集成測試是根據(jù)設(shè)計階段的軟件結(jié)構(gòu),把經(jīng)過單元測試檢驗的模塊按某種選定的策略裝配起來,在裝配過程中對程序進(jìn)行必要的測試。所謂驗收測試則是按照需求規(guī)格說明書的規(guī)定,由用戶對目標(biāo)系統(tǒng)進(jìn)行驗收。必要時還可以再通過現(xiàn)場測試或平行運行等方法對目標(biāo)系統(tǒng)做進(jìn)一步測試檢驗。分析軟件測試的結(jié)果可以預(yù)測軟件的可靠性,反之,根據(jù)對軟件可靠性的要求,也可以決定測試和調(diào)試過程的結(jié)束時間。開發(fā)者應(yīng)該使用正式的文檔資料把測試計劃、詳細(xì)測試方案以及實際測試結(jié)果保存下來,作為軟件配置的一個組成部分。6.運行維護(hù)階段系統(tǒng)投入運行,開發(fā)者需要對軟件進(jìn)行必要的修改和維護(hù)。系統(tǒng)維護(hù)的關(guān)鍵任務(wù)是通過各種必要的維護(hù)活動使系統(tǒng)持久滿足用戶的需要。維護(hù)活動通常有4類:改正性維護(hù),也就是診斷和改正軟件在使用過程中發(fā)現(xiàn)的錯誤;適應(yīng)性維護(hù),即修改軟件以適應(yīng)環(huán)境的變化;完善性維護(hù),即根據(jù)用戶的要求改進(jìn)或擴充軟件,使它更完善;預(yù)防性維護(hù),即修改軟件以為將來的維護(hù)活動做準(zhǔn)備。57.2軟件體系結(jié)構(gòu)的模型6軟件體系結(jié)構(gòu)(SoftwareArchitecture)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,由構(gòu)成系統(tǒng)的元素的描述、這些元素的相互作用、指導(dǎo)元素集成的模式以及這些模式的約束組成。軟件體系結(jié)構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)成系統(tǒng)的元素之間的對應(yīng)關(guān)系,提供了一些設(shè)計決策的基本原理。軟件體系結(jié)構(gòu)是項目相關(guān)人員進(jìn)行交流的手段,明確對系統(tǒng)實現(xiàn)的約束條件,決定開發(fā)和維護(hù)組織的結(jié)構(gòu),制約系統(tǒng)的質(zhì)量屬性。軟件體系結(jié)構(gòu)使推理和控制更改更簡單,有助于循序漸進(jìn)地進(jìn)行原型設(shè)計,可以作為培訓(xùn)的基礎(chǔ)。軟件體系結(jié)構(gòu)是可傳遞和可復(fù)用的模型,通過研究軟件體系結(jié)構(gòu)可以預(yù)測軟件的質(zhì)量。設(shè)計軟件體系結(jié)構(gòu)的首要問題是如何表示軟件體系結(jié)構(gòu),即如何對軟件體系結(jié)構(gòu)進(jìn)行建模。根據(jù)建模的側(cè)重點不同,可以將軟件體系結(jié)構(gòu)的模型分為5種,分別是結(jié)構(gòu)模型、框架模型、動態(tài)模型、過程模型和功能模型。在這5種模型中,較常用的是結(jié)構(gòu)模型和動態(tài)模型。71.結(jié)構(gòu)模型結(jié)構(gòu)模型是一個非常直觀、非常普遍的模型。這種模型以體系結(jié)構(gòu)的構(gòu)件、連接件和其他概念來刻畫結(jié)構(gòu),并力圖通過結(jié)構(gòu)來反映系統(tǒng)的重要語義內(nèi)容,包括系統(tǒng)的配置、約束、隱含的假設(shè)條件、風(fēng)格、性質(zhì)等。研究結(jié)構(gòu)模型的核心是體系結(jié)構(gòu)描述語言。2.框架模型框架模型與結(jié)構(gòu)模型類似,但它不太側(cè)重描述結(jié)構(gòu)的細(xì)節(jié)而更側(cè)重于整體的結(jié)構(gòu)??蚣苣P椭饕砸恍┨厥獾膯栴}為目標(biāo)建立只針對和適應(yīng)該問題的結(jié)構(gòu)。3.動態(tài)模型動態(tài)模型是對結(jié)構(gòu)模型或框架模型的補充,其研究系統(tǒng)的“大顆?!钡男袨樾再|(zhì),例如,描述系統(tǒng)的重新配置或演化。動態(tài)可以指系統(tǒng)總體結(jié)構(gòu)的配置、建立或拆除通信通道或計算的過程。4.過程模型過程模型研究構(gòu)造系統(tǒng)的步驟和過程,因此,結(jié)構(gòu)是遵循某些過程腳本的結(jié)果。5.功能模型功能模型認(rèn)為體系結(jié)構(gòu)是由一組功能構(gòu)件按層次組成的,下層向上層提供服務(wù)。它可以看作一種特殊的框架模型。7.3軟件開發(fā)模型8軟件開發(fā)模型是指軟件開發(fā)全部過程、活動和任務(wù)的結(jié)構(gòu)框架。軟件開發(fā)模型能清晰、直觀地表達(dá)軟件開發(fā)的全過程,明確規(guī)定了要完成的主要活動和任務(wù),用來作為軟件項目工作的基礎(chǔ)。對于不同的軟件系統(tǒng),可以采用不同的開發(fā)方法、使用不同的程序設(shè)計語言,允許各種不同技能的人員參與工作、運用不同的管理方法和手段等,以及允許采用不同的軟件工具和不同的軟件工程環(huán)境。軟件開發(fā)模型的發(fā)展實際上體現(xiàn)了軟件工程理論的發(fā)展。在軟件開發(fā)的早期,軟件開發(fā)模型處于無序、混亂的狀態(tài)。有些人為了能夠控制軟件的開發(fā)過程,就把軟件開發(fā)嚴(yán)格地分為多個不同的階段,并在階段間加上嚴(yán)格的審查,這就是瀑布模型產(chǎn)生的起因。瀑布模型體現(xiàn)了人們對軟件開發(fā)過程的一種希望:嚴(yán)格控制、確保質(zhì)量。但瀑布模型根本達(dá)不到這個過高的要求,因為軟件開發(fā)的過程往往難以預(yù)測,反而導(dǎo)致了其他的負(fù)面影響,如大量的文檔、煩瑣的審批。因此人們開始嘗試用其他的方法來改進(jìn)或替代瀑布模型,如把過程細(xì)分來增加過程的可預(yù)測性。典型的軟件開發(fā)模型主要包括瀑布模型、快速原型模型、漸增式模型、噴泉模型、迭代模型、螺旋模型、混合模型等。91.瀑布模型瀑布模型在1970年由溫斯頓·羅伊斯(WinstonRoyce)提出,該模型是一種結(jié)構(gòu)化模型,其特征是:各階段的銜接順序猶如瀑布流水,自上而下、逐級下落。前一階段結(jié)束后才能開始后一階段的工作,前一階段的輸出是后一階段的輸入。其缺點是:缺乏靈活性,不能適應(yīng)用戶需求的變化,最終得到的產(chǎn)品可能并不能滿足用戶需求。其適合于軟件需求比較明確或很少變化,并且開發(fā)人員可以一次性獲取到全部需求的場合。在20世紀(jì)80年代之前,瀑布模型一直是被廣泛采用的軟件開發(fā)模型,現(xiàn)在它仍然是軟件工程中應(yīng)用得非常廣泛的模型。傳統(tǒng)軟件工程方法學(xué)的軟件過程,基本上可以用瀑布模型來描述。圖7-2所示為傳統(tǒng)的瀑布模型。傳統(tǒng)的瀑布模型過于理想化了,事實上,程序員在工作過程中不可能不犯錯誤。在設(shè)計階段可能發(fā)現(xiàn)規(guī)格說明文檔中的錯誤,而設(shè)計上的缺陷或錯誤可能在實現(xiàn)過程中才顯現(xiàn)出來,在綜合測試階段可能發(fā)現(xiàn)需求分析、設(shè)計或編碼階段的許多錯誤。因此,實際的瀑布模型是帶“反饋環(huán)”的,如圖7-3所示(圖中實線箭頭表示開發(fā)過程,虛線箭頭表示維護(hù)過程)。當(dāng)在后面階段發(fā)現(xiàn)前面階段的錯誤時,需要沿圖中左側(cè)的反饋線返回前面的階段,修正前面階段的產(chǎn)品之后再繼續(xù)完成后面階段的任務(wù)。10瀑布模型嚴(yán)格地規(guī)定了每個階段必須提交的文檔,要求每個階段交出的所有產(chǎn)品必須經(jīng)過質(zhì)量保證小組的仔細(xì)驗證。圖7-2傳統(tǒng)的瀑布模型圖7-3實際的瀑布模型112.快速原型模型快速原型類似于工程上先制作“樣品”,用戶試用后做適當(dāng)改進(jìn),然后再批量生產(chǎn)。其優(yōu)點是用戶參與性強,需求逐步明確??焖僭湍P偷牡谝徊绞墙ㄔ煲粋€快速原型以實現(xiàn)客戶或未來用戶與系統(tǒng)的交互,客戶或用戶對原型進(jìn)行評價,進(jìn)一步細(xì)化待開發(fā)軟件的需求。通過逐步調(diào)整原型,使其滿足客戶的要求,開發(fā)人員可以確定客戶的真正需求是什么。第二步則在第一步的基礎(chǔ)上開發(fā)令客戶滿意的軟件產(chǎn)品。快速原型的本質(zhì)是“快速”,開發(fā)人員應(yīng)該盡可能快地構(gòu)建出原型系統(tǒng),以加速軟件開發(fā)過程,節(jié)約軟件開發(fā)成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是,必須迅速地構(gòu)建原型然后根據(jù)用戶意見迅速地修改原型。當(dāng)快速原型的某個部分是利用軟件工具由計算機自動生成的時候,可以把這部分用到最終的軟件產(chǎn)品中。例如,用戶界面通常是快速原型的一個關(guān)鍵部分,當(dāng)使用屏幕生成程序和報表生成程序自動生成用戶界面時,實際上可以把得到的用戶界面用在最終的軟件產(chǎn)品中。快速原型模型適用于預(yù)先不能確切定義需求的軟件系統(tǒng),或需求多變的系統(tǒng)。3.漸增式模型漸增式模型也稱為增量式模型,它把軟件產(chǎn)品作為一系列增量構(gòu)件來設(shè)計、編碼、集成和測試,在項目開發(fā)過程中,以開發(fā)一系列增量的方式來逐步開發(fā)系統(tǒng)。增量模型在各個階段并不交付一個可運行的完整產(chǎn)品,而是交付滿足客戶需求的一個可運行的子集產(chǎn)品。整個產(chǎn)品被分解成若干個構(gòu)件,開發(fā)人員逐個交付構(gòu)件,這樣做的好處是軟件開發(fā)可以較好地適應(yīng)變化,客戶可以不斷地看到所開發(fā)的軟件,從而降低開發(fā)風(fēng)險。12在使用增量模型時,第一個增量往往是實現(xiàn)基本需求的核心產(chǎn)品。核心產(chǎn)品交付用戶使用后,經(jīng)過評價形成下一個增量的開發(fā)計劃,這個開發(fā)計劃包括對核心產(chǎn)品的修改和一些新功能的發(fā)布。這個過程在每個增量發(fā)布后不斷重復(fù),直到產(chǎn)生最終的完整產(chǎn)品。4.噴泉模型噴泉模型主要用于采用面向?qū)ο蠹夹g(shù)的軟件開發(fā)項目,“噴泉”一詞本身就體現(xiàn)了迭代和無間隙的特征。無間隙指在各項活動之間無明顯邊界,如分析、設(shè)計和編碼之間沒有明顯的界限。由于對象概念的引入,需求分析、設(shè)計、實現(xiàn)等活動只用對象類和關(guān)系來表達(dá),因而可以較為容易地實現(xiàn)活動的迭代和無間隙,并且使得開發(fā)過程自然地包括復(fù)用。噴泉模型是一種以用戶需求為動力,以對象為驅(qū)動的模型,主要用于描述面向?qū)ο蟮能浖_發(fā)過程。該模型認(rèn)為軟件開發(fā)過程自下而上的周期的各階段是相互重疊和多次反復(fù)的,就像水噴上去又可以落下來,類似噴泉,故稱為噴泉模型。各個開發(fā)階段沒有特定的次序要求,并且可以交互進(jìn)行,可以在某個開發(fā)階段中隨時補充其他任何開發(fā)階段中的遺漏。5.迭代模型迭代模型是統(tǒng)一軟件開發(fā)過程(RationalUnifiedProcess,RUP)推薦的周期模型。在某種程度上,開發(fā)迭代是一次完整地經(jīng)過所有工作流程的過程,至少包括需求工作流程、分析設(shè)計工作流程、實施工作流程和測試工作流程。實質(zhì)上,它類似小型的瀑布式項目。RUP認(rèn)為,所有的階段都可以被細(xì)分為迭代。每一次的迭代都會產(chǎn)生一個可以發(fā)布的產(chǎn)品,這個產(chǎn)品是最終產(chǎn)品的一個子集。136.螺旋模型軟件開發(fā)幾乎總要經(jīng)歷一定風(fēng)險,例如,產(chǎn)品交付給用戶之后用戶可能不滿意,到了預(yù)定的交付日期軟件可能還未開發(fā)出來,實際的開發(fā)成本可能超過預(yù)算,在產(chǎn)品完成前一些關(guān)鍵的開發(fā)人員可能“跳槽”了,產(chǎn)品投入市場之前競爭對手發(fā)布了一個功能相近、價格更低的軟件等。軟件風(fēng)險是軟件開發(fā)項目中普遍存在的實際問題,項目越大,軟件越復(fù)雜,承擔(dān)該項目的風(fēng)險也越大。軟件風(fēng)險可能在不同程度上損害軟件開發(fā)過程和軟件產(chǎn)品質(zhì)量。因此,在軟件開發(fā)過程中必須及時識別和分析風(fēng)險,并且采取適當(dāng)措施以消除或減少風(fēng)險的危害。構(gòu)建原型是一種能使某些類型的風(fēng)險降低的方法,為了降低交付給用戶的產(chǎn)品不能滿足用戶需求的風(fēng)險,一種行之有效的方法是在需求分析階段快速地構(gòu)建一個原型。螺旋模型的基本思想是,使用原型及其他方法來盡量降低風(fēng)險。理解這種模型的一個簡便方法是,把它看作在每個階段之前都增加了風(fēng)險分析過程的快速原型模型。螺旋模型是一種側(cè)重風(fēng)險分析的設(shè)計模型,它是迭代模型與快速原型模型的結(jié)合,在每個階段之前都增加了“風(fēng)險分析”過程,形成迭代過程,直到系統(tǒng)完成。完整的螺旋模型如圖7-4所示,螺旋線每個周期對應(yīng)一個開發(fā)階段。每個階段開始時(左上象限)的任務(wù)是,確定該階段的目標(biāo)、為完成這些目標(biāo)選擇方案及設(shè)定這些方案的約束條件。接下來的任務(wù)是,從風(fēng)險角度分析上一步的工作結(jié)果,努力排除各種潛在的風(fēng)險(通常用構(gòu)建原型的方法來排除風(fēng)險)。如果風(fēng)險不能排除,則停止開發(fā)工作或大幅度地削減項目規(guī)模。如果成功地排除了所有風(fēng)險,則啟動下一個開發(fā)步驟(右下象限),這個步驟的工作過程相當(dāng)于純粹的瀑布模型。最后是評價該階段的工作成果并計劃下一個階段的工作。147.混合模型幾種不同模型組合成一種模型,并允許一個項目能沿著最有效的路徑發(fā)展,這就是混合模型(或過程開發(fā)模型)。實際上,一些軟件開發(fā)單位都是使用幾種不同的開發(fā)模型組成自己的混合模型。每個軟件開發(fā)組織應(yīng)該選擇適合該組織的軟件開發(fā)模型,并且開發(fā)模型應(yīng)該隨著當(dāng)前正在開發(fā)的產(chǎn)品特性而變化,以減少所選模型的缺點,充分利用其優(yōu)點。圖7-4完整的螺旋模型7.4軟件開發(fā)方法15軟件開發(fā)是一項復(fù)雜的系統(tǒng)工程,20世紀(jì)60年代爆發(fā)了軟件危機,促使人們探討科學(xué)的軟件開發(fā)方法。經(jīng)過長期的開發(fā)實踐,提出了許多軟件開發(fā)方法,其中主要有生命周期法、原型法、結(jié)構(gòu)化方法、模塊化方法、面向?qū)ο蠓椒?、可視化方法等?.4.1生命周期法軟件開發(fā)嚴(yán)格按系統(tǒng)調(diào)查與分析、系統(tǒng)設(shè)計、系統(tǒng)實現(xiàn)、系統(tǒng)調(diào)試、運行維護(hù)和廢棄等階段進(jìn)行。這種方法要求系統(tǒng)說明書應(yīng)準(zhǔn)確地表達(dá)用戶的要求,且在以后階段不會發(fā)生變化。生命周期法采用結(jié)構(gòu)化系統(tǒng)分析與設(shè)計的思想,其突出優(yōu)點是強調(diào)系統(tǒng)開發(fā)過程的整體性和全局性,避免了開發(fā)過程中的混亂狀態(tài)。其主要缺陷是開發(fā)周期長,工作效率低,難以適應(yīng)新型開發(fā)工具的發(fā)展,但其基本思想在其他開發(fā)方法中仍然適用。7.4.2原型法開發(fā)人員首先構(gòu)造系統(tǒng)初步模型,運行這個模型并根據(jù)用戶的要求不斷修改、補充,直到取得讓用戶完全滿意的原型為止,最后實現(xiàn)系統(tǒng)。16原型法的主要優(yōu)點是開發(fā)周期短、見效快,可以邊開發(fā)邊使用,比較適用于管理體制和結(jié)構(gòu)不穩(wěn)定、需要經(jīng)常變化的環(huán)境。其缺點是初始原型設(shè)計比較困難,容易陷入軟件危機,對于開發(fā)大型、復(fù)雜的應(yīng)用系統(tǒng)時一般不宜采用。原型法比較適用于用戶需求不清、需求經(jīng)常變化的情況。當(dāng)系統(tǒng)規(guī)模不是很大也不太復(fù)雜時,采用該方法比較好。7.4.3結(jié)構(gòu)化方法結(jié)構(gòu)化方法是一種面向數(shù)據(jù)流的開發(fā)方法,總的指導(dǎo)思想是自頂向下、逐層分解,其基本思想是軟件功能的分解和抽象。它適用于解決數(shù)據(jù)處理領(lǐng)域的問題,不適用于大規(guī)模的、特別復(fù)雜的項目,且難以適應(yīng)需求的變化。在結(jié)構(gòu)化方法中,利用數(shù)據(jù)流圖模型對系統(tǒng)進(jìn)行層層分解,將一個大的系統(tǒng)分解為多個程序模塊,數(shù)據(jù)流圖中需要存儲的信息通過E-R圖建立數(shù)據(jù)模型,其功能模型和數(shù)據(jù)模型是分離的,也就是說在結(jié)構(gòu)化方法中,程序和數(shù)據(jù)是分離的。另外,程序的結(jié)構(gòu)要遵循每個程序模塊只有一個入口和一個出口,在程序模塊內(nèi)部只能采用順序、選擇、循環(huán)3種基本的控制結(jié)構(gòu)。7.4.4模塊化方法模塊化方法是一種軟件開發(fā)方法,是指把一個待開發(fā)的軟件分解成若干小的簡單的部分,采用對復(fù)雜事物分而治之的經(jīng)典原則。模塊化方法涉及的主要問題是模塊設(shè)計的規(guī)則,系統(tǒng)如何分解成模塊。每一模塊可獨立開發(fā)、測試,最后組裝成整個軟件。對一個規(guī)約進(jìn)行分解,17以得到模塊系統(tǒng)結(jié)構(gòu)的方法有數(shù)據(jù)結(jié)構(gòu)設(shè)計法、功能分解法、數(shù)據(jù)流設(shè)計、面向?qū)ο蟮脑O(shè)計等。7.4.5面向?qū)ο蠓椒嫦驅(qū)ο蠓椒▽⒚嫦驅(qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動,是建立在“對象”概念基礎(chǔ)上的方法。面向?qū)ο蠓椒ǖ谋举|(zhì)是主張參照人們認(rèn)識現(xiàn)實系統(tǒng)的方法,完成分析、設(shè)計與實現(xiàn)一個軟件系統(tǒng),提倡用人類在現(xiàn)實生活中常用的思維方法來認(rèn)識、理解、描述客觀事物,強調(diào)最終建立的系統(tǒng)能映射問題域,使得系統(tǒng)中的對象,以及對象之間的關(guān)系能夠如實地反映問題域中固有的事物及其關(guān)系。面向?qū)ο蠓椒ǖ幕舅枷胧牵嚎陀^事物都是由對象組成的,對象具有屬性和方法,屬性反映對象的特征,方法則是改變屬性的各種動作;對象之間的聯(lián)系主要通過傳遞消息來實現(xiàn);對象可以按屬性歸為類,類有一定的結(jié)構(gòu),而且可以有子類,對象與類之間的層次關(guān)系是通過繼承來維持的。按照上述思想,面向?qū)ο蠓椒ǚ譃?個階段:系統(tǒng)調(diào)查和需求分析,解決系統(tǒng)干什么;面向?qū)ο蠓治?,識別出對象及其行為、結(jié)構(gòu)、屬性和方法,簡稱OOA(Object-OrientedAnalysis),主要的分析和設(shè)計模型一般使用UML建模語言的用例圖、類圖等模型;面向?qū)ο笤O(shè)計,對分析結(jié)果進(jìn)一步抽象、歸類和整理,最終以范式的形式確定下來,18可視化方法就是指在可視開發(fā)工具提供的圖形用戶界面上,通過操作界面元素,諸如菜單、按鈕、對話框、編輯框、單選框、復(fù)選框、列表框和滾動條等,由可視開發(fā)工具自動生成應(yīng)用軟件。這類應(yīng)用軟件的工作方式是事件驅(qū)動,對每一事件,由系統(tǒng)產(chǎn)生相應(yīng)的消息,再將其傳遞給相應(yīng)的消息響應(yīng)函數(shù)。這些消息響應(yīng)函數(shù)是由可視開發(fā)工具在生成軟件時自動裝入的。7.4.6可視化方法簡稱OOD(Object-OrientedDesign),一般使用UML的實現(xiàn)類圖、順序圖、部署圖等模型;面向?qū)ο缶幊?,利用面向?qū)ο蟪绦蛟O(shè)計語言編制應(yīng)用程序,簡稱OOP(Object-OrientedProgramming)。面向?qū)ο蠓椒ú捎玫哪P椭饕腔赨ML建模語言的。UML從系統(tǒng)的不同角度出發(fā),定義了用例圖、類圖、對象圖、狀態(tài)圖、活動圖、順序圖、協(xié)作圖、構(gòu)件圖、部署圖等9種圖。這些圖形模型從不同的側(cè)面對系統(tǒng)進(jìn)行描述。在實際分析和設(shè)計中,這9種圖形模型不一定全部用到,常用的圖形模型有用例圖、類圖、順序圖、部署圖等。面向?qū)ο蠓椒◤浹a了傳統(tǒng)結(jié)構(gòu)化方法中的許多缺陷,縮短了開發(fā)周期,是軟件開發(fā)技術(shù)的一次重大革命。但同原型法一樣,面向?qū)ο蠓椒ㄐ枰幸欢ǖ能浖С止ぞ卟拍軕?yīng)用。7.5軟件過程和項目管理19軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。7.5.1軟件過程概括地說,軟件過程描述為了開發(fā)出客戶需要的軟件,需要什么人(Who)、在什么時候(When)、做什么事(What)以及怎樣(How)做這些事以實現(xiàn)某一個特定的具體目標(biāo)。完成開發(fā)任務(wù)必須進(jìn)行一些開發(fā)活動,并且使用適當(dāng)?shù)馁Y源(例如,人員、時間、計算機硬件、軟件工具等),在過程結(jié)束時把輸入(例如,軟件需求)轉(zhuǎn)化為輸出(例如,軟件產(chǎn)品)。因此,ISO9000把軟件過程定義為“使用資源將輸入轉(zhuǎn)化為輸出的活動所構(gòu)成的系統(tǒng)”。此處,“系統(tǒng)”的含義是廣義的:“系統(tǒng)是相互關(guān)聯(lián)或相互作用的一組要素”。軟件過程定義了運用方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化需要采取的管理措施,以及標(biāo)志軟件開發(fā)各個階段任務(wù)完成的里程碑。為獲得高質(zhì)量的軟件產(chǎn)品,軟件過程必須科學(xué)、有效。7.5.2軟件工程過程軟件工程過程是把輸入轉(zhuǎn)化為輸出的一組彼此相關(guān)的資源和活動,是建造高質(zhì)量軟件所需完成的任務(wù)的框架,即形成軟件產(chǎn)品的一系列步驟,包括中間產(chǎn)品、資源、角色及過程中采取的方法、工具等范疇。軟件過程主要針對軟件生產(chǎn)和管理進(jìn)行研究,為了獲得實現(xiàn)工程目標(biāo)的軟件,不僅涉及工程開發(fā),而且涉及工程支持和工程管理。對于一個特定的項目,可以通過剪裁過程定義所需的活動和任務(wù),使活動并發(fā)執(zhí)行。與軟件有關(guān)的單位,根據(jù)需要和目標(biāo),可采用不同的過程、活動和任務(wù)。軟件工程過程是指將軟件工程的方法和工具綜合起來,以達(dá)到合理、及時地進(jìn)行計算機軟件開發(fā)的目的。207.5.3項目管理項目管理是20世紀(jì)50年代后期發(fā)展起來的一種計劃管理方法。所謂項目管理,是指在一定資源(包括人力、設(shè)備、材料、經(jīng)費、能源、時間等)約束條件下,運用系統(tǒng)、科學(xué)的原理和方法對項目及其資源進(jìn)行計劃、組織和控制,旨在實現(xiàn)項目的既定目標(biāo)(包括質(zhì)量、速度、經(jīng)費)的管理方法體系。211.項目管理的必要性①從系統(tǒng)的觀點進(jìn)行全局又切合實際的安排,使得預(yù)期的多目標(biāo)能達(dá)到最優(yōu)的結(jié)果。軟件系統(tǒng)是一個投資較大、建設(shè)周期較長的系統(tǒng)工程,要重點考慮各分項目之間的關(guān)系與協(xié)調(diào)、眾多資源的調(diào)配與利用。在此基礎(chǔ)上制訂出切實可行的計劃,避免不必要的返工或重復(fù)勞動,也避免高估能力而導(dǎo)致計劃不能執(zhí)行。②為估計人力資源的需求提供依據(jù)。在項目的計劃安排中,對軟件的工作量做了估計,包括需要什么級別的軟件開發(fā)人員,系統(tǒng)的設(shè)計與編程的工作量等,還對硬件的安裝調(diào)試、對使用人員的配置都給出了詳細(xì)的要求,以便對系統(tǒng)建設(shè)需要的人力資源提出一個比較準(zhǔn)確的數(shù)字。同時,可以通過計劃的執(zhí)行來考查各級人員的素質(zhì)及效率。③能通過計劃安排來進(jìn)行項目的控制。當(dāng)制訂了項目執(zhí)行的計劃日程表后,就可以定期檢查計劃的進(jìn)展情況,分析拖延或超前的原因,決定如何采取行動或措施,使其回到計劃日程表上來。同時,系統(tǒng)追蹤記錄各項目的運行時間及費用,并與預(yù)計的數(shù)字進(jìn)行比較,以便項目管理人員為下一步行動做出決策。④提供準(zhǔn)確一致的文檔數(shù)據(jù)。項目管理要求事先整理好有關(guān)基礎(chǔ)數(shù)據(jù),使每個項目的建設(shè)者都能使用統(tǒng)一的文件及數(shù)據(jù)。同時,在項目進(jìn)行過程中生成的各類數(shù)據(jù)又可以為大家所共享,保證項目建設(shè)者之間的工作協(xié)調(diào)有序。222.軟件項目的特點軟件系統(tǒng)的建設(shè)是一類項目,它具有項目的一般特點,同時還具有自己獨有的特點,可以用項目管理的思想和方法來指導(dǎo)軟件系統(tǒng)的建設(shè)。①軟件系統(tǒng)的目標(biāo)是不精確的,任務(wù)的邊界是模糊的,質(zhì)量要求更多是由項目團隊來定義的。對于軟件系統(tǒng)的開發(fā),許多客戶一開始只有一些初步的功能要求,給不出明確的想法,提不出確切的要求。軟件系統(tǒng)項目的任務(wù)范圍很大程度上取決于項目組所做的系統(tǒng)規(guī)劃和需求分析。②軟件系統(tǒng)項目進(jìn)行過程中,客戶的需求會不斷被激發(fā),并不斷地被進(jìn)一步明確,導(dǎo)致項目的進(jìn)度、費用等計劃不斷更改??蛻粜枨蟮拿恳淮蚊鞔_,系統(tǒng)的相關(guān)內(nèi)容就得隨之修改,而在修改的過程中可能產(chǎn)生新的問題,并且這些問題很可能過了相當(dāng)長的時間以后才會被發(fā)現(xiàn)。因此,就要求項目經(jīng)理不斷監(jiān)控和調(diào)整項目計劃的執(zhí)行情況。③軟件系統(tǒng)是智力密集、勞動密集型項目,受人力資源影響較大,項目成員的結(jié)構(gòu)、責(zé)任心、能力和穩(wěn)定性對軟件系統(tǒng)項目的質(zhì)量以及是否成功有決定性的影響。因而在軟件系統(tǒng)項目的管理過程中,要將人力放在與進(jìn)度、成本一樣高的地位來對待。233.項目管理的主要任務(wù)項目管理的主要任務(wù)有以下幾個。①明確總體目標(biāo)、制訂項目計劃,對開發(fā)過程進(jìn)行組織管理,保證總體目標(biāo)的順利實現(xiàn)。②嚴(yán)格選拔和培訓(xùn)人員,合理組織開發(fā)機構(gòu)和管理機構(gòu)。③編制和調(diào)整開發(fā)計劃進(jìn)程表。④開發(fā)經(jīng)費的概算與控制。⑤組織項目復(fù)審和書面文件資料的復(fù)查與管理。⑥系統(tǒng)建成后運行與維護(hù)過程的組織管理。7.6軟件測試247.6.1軟件測試的概念簡單地說,軟件測試就是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。在IEEE所提出的軟件工程標(biāo)準(zhǔn)術(shù)語中,軟件測試的定義為“使用人工或自動手段來運行或測試某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或弄清楚預(yù)期結(jié)果與實際結(jié)果之間的差別”。軟件測試與軟件質(zhì)量密切聯(lián)系在一起,軟件測試歸根到底是為了保證軟件質(zhì)量,軟件質(zhì)量是以“滿足需求”為基本衡量標(biāo)準(zhǔn)的。該定義明確提出了軟件測試以檢驗軟件是否滿足需求為目標(biāo)。軟件測試的主要工作是驗證(Verification)和確認(rèn)(Validation),驗證是保證軟件正確實現(xiàn)特定功能的一系列活動,即保證軟件做了用戶所期望的事情;確認(rèn)是一系列的活動和過程,其目的是證實在一個給定的外部環(huán)境中軟件的邏輯正確性。軟件測試的對象不僅有程序,還包括整個軟件開發(fā)期間各個階段所產(chǎn)生的文檔。軟件測試是軟件質(zhì)量保證的主要手段之一,也是在將軟件交付給客戶之前所必須完成的步驟。目前,軟件的正確性證明尚未得到根本解決,軟件測試仍是發(fā)現(xiàn)軟件錯誤和缺陷的主要手段。軟件測試的目的就是在軟件投入生產(chǎn)運行之前,盡可能多地發(fā)現(xiàn)軟件產(chǎn)品(主要是指程序)中的錯誤和缺陷。257.6.2軟件測試的目的和原則1.軟件測試的目的軟件測試的目的是保證軟件產(chǎn)品的最終質(zhì)量,在軟件開發(fā)過程中,對軟件產(chǎn)品進(jìn)行質(zhì)量控制。測試可以完成許多事情,但最重要的是衡量正在開發(fā)的軟件的質(zhì)量。對于軟件測試的目的,格倫福德·邁爾斯提出以下觀點。①軟件測試是一個為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。②軟件測試是為了證明程序有錯,而不是為了證明程序無錯。③一個好的測試用例在于它能發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤。④一個成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。這些觀點提醒人們測試要以查找錯誤為中心,而不是為了演示軟件的正確功能。首先,軟件測試不僅是為了找出錯誤,也是為了對軟件質(zhì)量進(jìn)行度量和評估,以提高軟件的質(zhì)量。軟件測試是以評價一個程序或者系統(tǒng)屬性為目標(biāo)的活動,從而驗證軟件的質(zhì)量滿足客戶的需求的程度,為客戶選擇與接受軟件提供有力的依據(jù)。通過分析錯誤產(chǎn)生的原因和錯誤的分布特征,可以幫助軟件項目管理者發(fā)現(xiàn)當(dāng)前所采用的軟件過程的缺陷,以便改進(jìn)軟件過程。同時,通過分析也能幫助項目管理者設(shè)計出有針對性的檢測方法,改善測試的有效性。其次,沒有發(fā)現(xiàn)錯誤的測試也是有價值的,完整的測試是評定測試質(zhì)量的一種方法。262.軟件測試的原則為了進(jìn)行有效的測試,測試人員需理解和遵循以下基本原則。①應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測試”作為軟件開發(fā)者的座右銘。由于軟件系統(tǒng)的復(fù)雜性和抽象性,軟件開發(fā)各個階段工作的多樣性,以及開發(fā)過程中各種層次的人員之間工作的配合關(guān)系等因素,軟件開發(fā)的每個環(huán)節(jié)都可能產(chǎn)生錯誤。所以不應(yīng)把軟件測試僅僅看作軟件開發(fā)的一個獨立階段,而應(yīng)當(dāng)使它貫穿軟件開發(fā)的各個階段,堅持在軟件開發(fā)的各個階段進(jìn)行技術(shù)評審,這樣才能在開發(fā)過程中盡早發(fā)現(xiàn)和預(yù)防錯誤,杜絕某些隱患,提高軟件質(zhì)量。②程序員應(yīng)避免檢查自己編寫的程序。人們常常由于各種原因而產(chǎn)生一些不愿意否定自己的心理,認(rèn)為揭露自己編寫的程序中的問題不是一件愉快的事情。這一心理狀態(tài)就成為測試自己編寫的程序的障礙。另外,程序員對軟件規(guī)格說明理解錯誤而引入的錯誤則更難發(fā)現(xiàn)。如果由別人來測試程序員編寫的程序,可能會更客觀、更有效,并更容易取得成功。但要區(qū)分程序測試和程序調(diào)試,調(diào)試程序由程序員自己來做可能更有效。27③測試用例應(yīng)由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù)期輸出結(jié)果兩部分組成。在進(jìn)行測試之前應(yīng)當(dāng)根據(jù)測試的要求選擇測試用例,測試用例不但需要測試性地輸入數(shù)據(jù),而且需要針對這些輸入數(shù)據(jù)輸出預(yù)期的結(jié)果。如果沒有對測試輸入數(shù)據(jù)給出預(yù)期的輸出結(jié)果,那么就缺少檢驗實測結(jié)果的基準(zhǔn),就有可能把一個似是而非的錯誤結(jié)果當(dāng)成正確結(jié)果。④在設(shè)計測試用例時,應(yīng)當(dāng)包括合理的輸入條件和不合理的輸入條件。合理的輸入條件是指能驗證程序正確性的輸入條件,而不合理的輸入條件是指異常的、臨界的、可能引起問題變異的輸入條件。在測試程序時,人們常常傾向于過多地考慮合法的和期望的輸入條件,以檢查程序是否做了它應(yīng)該做的事情,而忽視了不合法的和預(yù)想不到的輸入條件。事實上,軟件系統(tǒng)在投入運行以后,用戶對其的使用往往不遵循事先的約定,使用了一些意外的輸入,如用戶在鍵盤上按錯了鍵或輸入了非法的命令。如果軟件對這種異常情況不能做出適當(dāng)?shù)姆磻?yīng),給出相應(yīng)的信息,那么就容易產(chǎn)生故障,輕則輸出錯誤的結(jié)果,重則導(dǎo)致軟件失效。因此,軟件系統(tǒng)處理非法命令的能力也必須在測試時受到檢驗。用不合理的輸入條件測試程序時,往往比用合理的輸入條件進(jìn)行測試更能發(fā)現(xiàn)錯誤。28⑤充分注意軟件測試時的群集現(xiàn)象。測試時不要以為找到了幾個錯誤就不需要繼續(xù)測試了。在所測試的程序中,若發(fā)現(xiàn)的錯誤數(shù)目較多,則殘存的錯誤數(shù)目也會比較多,這種錯誤群集現(xiàn)象已被許多程序的測試實踐所證實。根據(jù)這一現(xiàn)象,應(yīng)當(dāng)對錯誤群集的程序進(jìn)行重點測試,以提高測試效率。⑥嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性。測試計劃的內(nèi)容要完整、描述要明確,并且不能被隨意更改。⑦應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。有些錯誤的征兆在輸出實測結(jié)果時已經(jīng)明顯地出現(xiàn)了,但是如果不仔細(xì)、全面地檢查測試結(jié)果,就會使這些錯誤被遺漏掉。所以必須對預(yù)期的輸出結(jié)果明確定義,對實測的結(jié)果仔細(xì)分析、檢查,發(fā)現(xiàn)錯誤。⑧妥善保存測試過程中產(chǎn)生的各種數(shù)據(jù)和文檔。對于測試過程中產(chǎn)生的測試計劃、測試用例、出錯統(tǒng)計和分析報告等數(shù)據(jù)和文檔應(yīng)妥善保存,為日后維護(hù)提供方便。⑨注意回歸測試的關(guān)聯(lián)性。對回歸測試的關(guān)聯(lián)性一定要充分注意,修改一個錯誤而引起更多錯誤出現(xiàn)的現(xiàn)象并不少見。297.6.3軟件測試流程軟件測試流程是指從軟件測試開始到軟件測試結(jié)束所經(jīng)過的一系列準(zhǔn)備、執(zhí)行、分析的過程,一般可劃分為制訂測試計劃、設(shè)計測試用例和測試過程、實施軟件測試、評估與總結(jié)軟件測試等幾個主要階段。1.制訂測試計劃制訂測試計劃的主要目的是識別任務(wù)、分析風(fēng)險、規(guī)劃資源和確定進(jìn)度。測試計劃一般由測試負(fù)責(zé)人或測試經(jīng)驗豐富的專業(yè)人員制訂,其主要依據(jù)是項目開發(fā)計劃和測試需求分析結(jié)果。測試計劃一般包括以下幾個方面。(1)軟件測試背景軟件測試背景主要包括軟件項目介紹、項目涉及人員等。(2)軟件測試依據(jù)軟件測試依據(jù)主要有軟件需求文檔、軟件規(guī)格說明書、軟件設(shè)計文檔以及其他內(nèi)容等。(3)測試范圍的界定測試范圍的界定就是確定測試活動需要覆蓋的范圍。確定測試范圍之前,需要分解測試任務(wù),分解任務(wù)有兩個方面的目的,一是識別子任務(wù),二是方便估算對測試資源的需求。30(4)測試風(fēng)險的確定軟件項目中總是有不確定的因素,這些因素一旦出現(xiàn),對項目的順利執(zhí)行會產(chǎn)生很大的影響。所以在軟件項目中,首先需要識別出存在的風(fēng)險。識別風(fēng)險之后,需要對照風(fēng)險制定規(guī)避風(fēng)險的方法。(5)測試資源的確定確定完成任務(wù)需要消耗的人力資源和物質(zhì)資源,主要包括測試設(shè)備需求、測試人員需求、測試環(huán)境需求以及其他資源需求等。(6)測試策略的確定主要包括采取的測試方法、搭建的測試環(huán)境、采用的測試工具和管理工具以及對測試人員進(jìn)行的培訓(xùn)等。(7)制訂測試進(jìn)度表在識別出子任務(wù)和資源之后,可以將任務(wù)、資源和時間關(guān)聯(lián)起來形成測試進(jìn)度表。2.設(shè)計測試用例和測試過程測試用例是為特定目標(biāo)開發(fā)的測試輸入、執(zhí)行條件和預(yù)期結(jié)果的集合,這些特定目標(biāo)可以是驗證一個特定的程序路徑,或核實是否符合特定需求。31設(shè)計測試用例就是設(shè)計針對特定功能或組合功能的測試方案,并將其編寫成文檔。測試的目的是暴露軟件中隱藏的缺陷,所以在設(shè)計測試用例時要考慮那些易于發(fā)現(xiàn)缺陷的測試用例和數(shù)據(jù),結(jié)合復(fù)雜的運行環(huán)境,在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查軟件是否都能產(chǎn)生正確的輸出。測試過程一般分成幾個階段:代碼審查、單元測試、集成測試、系統(tǒng)測試和驗收測試等。盡管這些階段在實現(xiàn)細(xì)節(jié)方面都不相同,但其工作流程是一致的。設(shè)計測試過程就是確定測試的基本執(zhí)行過程,為測試的每個階段的工作建立一個基本框架。3.實施軟件測試實施測試包括測試準(zhǔn)備、建立測試環(huán)境、獲取測試數(shù)據(jù)、執(zhí)行測試等。(1)測試準(zhǔn)備和建立測試環(huán)境測試準(zhǔn)備主要包括全面、準(zhǔn)確地掌握各種測試資料,進(jìn)一步了解、熟悉測試軟件,配置測試的軟件、硬件環(huán)境,搭建測試平臺,充分熟悉和掌握測試工具等。測試環(huán)境很重要,不同軟件產(chǎn)品對測試環(huán)境有著不同的要求,符合要求的測試環(huán)境能夠幫助我們準(zhǔn)確地測試出軟件存在的問題,并且做出正確的判斷。測試環(huán)境的一個重要組成部分是軟件、硬件配置,只有在充分認(rèn)識測試對象的基礎(chǔ)上,才有可能知道每一種測試對象需要什么樣的軟件、硬件配置,才有可能配置出相對合理的測試環(huán)境。32(2)獲取測試數(shù)據(jù)獲取測試數(shù)據(jù)即使用測試事務(wù)創(chuàng)建有代表性的處理情形,創(chuàng)建測試數(shù)據(jù)的難點在于要確定使用哪些事務(wù)作為測試事務(wù)。需要測試的常見情形有正常事務(wù)的測試和使用無效數(shù)據(jù)的測試。(3)執(zhí)行測試執(zhí)行測試的步驟一般由輸入、執(zhí)行過程、檢查過程和輸出4個部分組成。測試執(zhí)行過程可以分為單元測試、集成測試、系統(tǒng)測試、驗收測試等階段,其中每個階段還包括回歸測試等。從測試的角度而言,測試執(zhí)行包括量和度的問題,即測試范圍和測試程序的問題。例如,一個軟件版本需要測試哪些方面?每個方面要測試到什么程度?從管理的角度而言,在有限的時間內(nèi),在人員有限甚至短缺的情況下,要考慮如何分工,如何合理地利用資源來開展測試。4.評估與總結(jié)軟件測試軟件測試的主要評估方法包括缺陷評估、測試覆蓋和質(zhì)量評測。質(zhì)量評測是對測試對象的可靠性、穩(wěn)定性以及性能的評測,它建立在對測試結(jié)果的評估和對測試過程中確定的變更請求分析的基礎(chǔ)上。測試工作的每一個階段都應(yīng)該有相應(yīng)的測試總結(jié),測試軟件的每個版本也應(yīng)該有相應(yīng)的測試總結(jié)。當(dāng)軟件項目完成測試后,一般要對整個項目的測試工作進(jìn)行回顧總結(jié)。操作訓(xùn)練33【操作訓(xùn)練7-1】認(rèn)知軟件系統(tǒng)用戶登錄模塊的UML圖【操作訓(xùn)練7-2】對Windows操作系統(tǒng)自帶的計算器的功能和界面進(jìn)行測試34【操作訓(xùn)練7-1】認(rèn)知軟件系統(tǒng)用戶登錄模塊的UML圖用戶登錄界面的設(shè)計和用戶登錄模塊的編碼都屬于軟件開發(fā)的實施階段,在系統(tǒng)實施之前還應(yīng)包括系統(tǒng)分析和設(shè)計,在系統(tǒng)分析和設(shè)計階段通過建立軟件模塊來確定用戶需求和系統(tǒng)功能。與建房類似,施工之前必須先進(jìn)行繪圖設(shè)計,設(shè)計階段主要繪制圖紙、建立模型,施工階段則根據(jù)事先設(shè)計好的圖紙進(jìn)行施工。開發(fā)軟件系統(tǒng)也必須經(jīng)過系統(tǒng)分析、系統(tǒng)設(shè)計、系統(tǒng)實施等主要階段,在界面設(shè)計和編碼之前必須先建立軟件模塊。1.認(rèn)知用戶登錄模塊的用例圖軟件系統(tǒng)(如圖書管理系統(tǒng))的用戶登錄模塊的參與者通常是“用戶”,基本功能有兩個:①輸入用戶名和密碼;②驗證用戶身份。UML的用例圖用來描述系統(tǒng)的功能,并指出各功能的參與者,用戶登錄模塊的用例圖如圖7-5所示。在用戶登錄模塊的用例圖中,參與者“用戶”用人形圖標(biāo)表示,用例“輸入用戶名和密碼”和“驗證用戶身份”用橢圓形圖標(biāo)表示,連線描述它們之間的關(guān)系。圖7-5用戶登錄模塊的用例圖352.認(rèn)知用戶登錄模塊的類圖用戶在“用戶登錄界面”輸入“用戶名”和“密碼”,然后通過單擊“確定”按鈕,觸發(fā)Click事件,執(zhí)行驗證用戶身份的操作。在面向?qū)ο蟪绦蛟O(shè)計環(huán)境中,窗體也被定義為類,由于采用多層架構(gòu),在“業(yè)務(wù)處理層”調(diào)用相應(yīng)的類執(zhí)行業(yè)務(wù)處理,在“數(shù)據(jù)操作層”調(diào)用相應(yīng)的類執(zhí)行數(shù)據(jù)操作。在系統(tǒng)分析和設(shè)計階段使用UML的類圖定義系統(tǒng)的類以及類的屬性和操作。圖7-6所示為“登錄界面類”的類圖,圖7-7所示為“用戶登錄類”的類圖,圖7-8所示為“數(shù)據(jù)庫操作類”的類圖。圖7-6“登錄界面類”的類圖圖7-7“用戶登錄類”的類圖圖7-8“數(shù)據(jù)庫操作類”的類圖36UML使用有3個預(yù)定義分欄的圖標(biāo)表示類,從上至下3個分欄表示的內(nèi)容分別為類名稱、類的屬性和類的操作(操作的具體實現(xiàn)稱為方法),它們對應(yīng)著類的基本元素,如圖7-6至圖7-8所示。以“數(shù)據(jù)庫操作類”為例說明類圖的組成,“數(shù)據(jù)庫操作類”即該類的類名,類名通常為一個名詞,“數(shù)據(jù)庫操作類”包含一個屬性“conn”,類的屬性描述了類在軟件系統(tǒng)中代表的事物(即對象)所具備的特性,這些特性是該類的所有對象共有的。一個對象可能有很多屬性,在系統(tǒng)建模時,只抽取那些對系統(tǒng)有用的特性作為類的屬性,通過這些屬性可以識別該類的對象。“數(shù)據(jù)庫操作類”包含7個方法,分別為openConn()、closeConn()、getData()、updateData()、insertData()、editData()和deleteData(),這些方法可以看作類的接口,通過這些接口可以實現(xiàn)內(nèi)、外信息的交互。3.認(rèn)知用戶登錄模塊的活動圖UML的活動圖描述為滿足用例要求所要進(jìn)行的活動,描述業(yè)務(wù)過程的工作流程中涉及的活動。活動圖由多個動作組成,當(dāng)一個動作完成后,動作將會改變,轉(zhuǎn)移到一個新的動作?;顒訄D可用于簡化一個過程或操作的工作步驟,例如,軟件開發(fā)公司可以使用活動圖對一個軟件的開發(fā)過程進(jìn)行建模,會計師事務(wù)所可以使用活動圖對財務(wù)往來進(jìn)行建模,工業(yè)企業(yè)可以使用活動圖對訂單批準(zhǔn)過程進(jìn)行建模。37用戶登錄模塊的活動圖如圖7-9所示。該活動圖描述的用戶登錄過程如下。①啟動軟件系統(tǒng),顯示登錄界面。②用戶在登錄界面分別輸入“用戶名”和“密碼”。③用戶單擊“確定”按鈕,系統(tǒng)通過驗證用戶輸入的“用戶名”和“密碼”的正確性,判斷用戶身份是否合法。④如果用戶身份合法,則成功登錄。如果用戶輸入的“用戶名”或者“密碼”有誤,則顯示提示信息,此時用戶可以單擊“取消”按鈕,退出登錄狀態(tài),也可以重新輸入“用戶名”和“密碼”,系統(tǒng)重新驗證用戶的身份。圖7-9用戶登錄模塊的活動圖38【操作訓(xùn)練7-2】對Windows操作系統(tǒng)自帶的計算器的功能和界面進(jìn)行測試對Windows操作系統(tǒng)自帶的計算器的功能實現(xiàn)情況和用戶界面進(jìn)行測試,檢驗計算器的功能和界面是否符合規(guī)格說明書。主要測試計算器的加、減、乘、除、平方根、倒數(shù)等數(shù)學(xué)運算功能和用戶界面,但不測試計算器的科學(xué)計算、統(tǒng)計計算、數(shù)字分組功能。1.設(shè)計軟件測試用例(1)功能測試用例設(shè)計計算器的功能測試用例如表7-5所示。表7-5計算器的功能測試用例測試用例編號測試算式預(yù)期輸出測試用例編號測試算式預(yù)期輸出calcTest013+2-9-4calcTest065×20%1calcTest022×3+17calcTest073.75calcTest0312×

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論