全套電子課件:軟件工程-第九套_第1頁
全套電子課件:軟件工程-第九套_第2頁
全套電子課件:軟件工程-第九套_第3頁
全套電子課件:軟件工程-第九套_第4頁
全套電子課件:軟件工程-第九套_第5頁
已閱讀5頁,還剩173頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1SoftwareEngineering軟件工程精品課程2第三章傳統(tǒng)軟件工程技術(shù)簡介結(jié)構(gòu)化程序的發(fā)展3.1結(jié)構(gòu)化程序的開發(fā)流程與特點3.2結(jié)構(gòu)化程序與面向?qū)ο蟪绦蜷_發(fā)的比較3.3結(jié)構(gòu)化程序的應(yīng)用3.433.1結(jié)構(gòu)化程序的發(fā)展結(jié)構(gòu)化程序設(shè)計(StructuredProgramming)是瑞士計算機科學家尼克勞斯·沃思(NiklausWirth)于1971年,基于其開發(fā)程序設(shè)計語言和編程的實踐驗,首次提出了“結(jié)構(gòu)化程序設(shè)計”的概念。 結(jié)構(gòu)化程序的定義如下:

“如果一個程序的代碼僅通過順序、選擇和循環(huán)這三種控制結(jié)構(gòu)組合、連接而成,并且僅有一個入口和一個出口,則稱這個程序是結(jié)構(gòu)化的?!?結(jié)構(gòu)化程序的控制結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計循環(huán)順序選擇5只使用“順序”、“選擇”和“循環(huán)”3種基本控制結(jié)構(gòu)進行程序設(shè)計是結(jié)構(gòu)化程序設(shè)計的主要內(nèi)容。隨著IBM公司1971年在《紐約時報》系統(tǒng)中成功使用了結(jié)構(gòu)化程序設(shè)計。結(jié)構(gòu)化程序設(shè)計成為上世紀70年代初到90年代初,最為成功的軟件設(shè)計與開發(fā)模型。但在面向?qū)ο蠓椒ǖ膹V泛使用后,大型軟件開發(fā)基本上拋棄了結(jié)構(gòu)化程序設(shè)計方法,而只在較小的模塊一級使用。63.2結(jié)構(gòu)化程序開發(fā)的流程與特點結(jié)構(gòu)化軟件開發(fā)方法

即所謂的SASD方法,也稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。它首先用結(jié)構(gòu)化分析(SA)對軟件進行需求分析,然后用結(jié)構(gòu)化設(shè)計(SD)方法進行總體設(shè)計,并用結(jié)構(gòu)圖來描述軟件的結(jié)構(gòu),最后是結(jié)構(gòu)化編程(SP)。

7結(jié)構(gòu)化開發(fā)的特點

結(jié)構(gòu)化開發(fā)方法產(chǎn)生過程的抽象,這些抽象把軟件視為處理流,定義構(gòu)成一系列步驟的算法,每一步驟都是帶有預定義輸入和特定輸出的一個過程,把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個程序的控制流。在結(jié)構(gòu)化開發(fā)方法中,數(shù)據(jù)結(jié)構(gòu)是應(yīng)算法步驟的要求而開發(fā)的。數(shù)據(jù)結(jié)構(gòu)貫穿于過程,提供過程需要傳送給它的操作的信息。系統(tǒng)的狀態(tài)是一組全局變量,這組全局變量保持了狀態(tài)的值,把它們從一個過程傳送到另一個過程。83.2.1結(jié)構(gòu)化程序設(shè)計的分析與建模分析原則與軟件需求規(guī)約

結(jié)構(gòu)化分析是結(jié)構(gòu)化軟件開發(fā)的第一步,結(jié)構(gòu)化分析確定了軟件要做什么。軟件需求規(guī)約又叫軟件需求說明,是結(jié)構(gòu)化分析的最終產(chǎn)物。數(shù)據(jù)建模

數(shù)據(jù)建模是組織數(shù)據(jù)使其結(jié)構(gòu)化的過程。一般來說,軟件開發(fā)的早期關(guān)注于概念數(shù)據(jù)模型,細化后得到邏輯數(shù)據(jù)模型。實體-關(guān)系圖

實體-聯(lián)系圖(E-R圖),提供了表示實體型、屬性和聯(lián)系的方法,用來描述現(xiàn)實世界的概念模型。是概念數(shù)據(jù)模型的高層描述所使用的數(shù)據(jù)模型或模式圖,它為表述這種實體聯(lián)系模式的數(shù)據(jù)模型提供了圖形符號。構(gòu)成E-R圖的基本要素是實體型、屬性和聯(lián)系,其表示方法如圖3-1所示。9圖3-1實體聯(lián)系圖的基本成分10數(shù)據(jù)流圖(DFD)

數(shù)據(jù)流圖是軟件設(shè)計開發(fā)過程中概念模型設(shè)計的重要圖形表示法,它是從數(shù)據(jù)傳遞和加工的角度,以圖形的方式來刻畫數(shù)據(jù)流和轉(zhuǎn)換的信息建模技術(shù)。它提供層次結(jié)構(gòu),讓分析人員能夠方便的表示任意抽象級別上的信息系統(tǒng)或其子系統(tǒng),并支持問題分解、逐步求精的分析方法。數(shù)據(jù)流圖中具有四種基本成分,如圖3-2所示。11圖3-2數(shù)據(jù)流圖的基本成分及其表達符號12haha數(shù)據(jù)流表示數(shù)據(jù)的流動情況;加工表示對數(shù)據(jù)的加工處理過程,它的名字應(yīng)能簡明扼要地表明所完成的是什么加工;數(shù)據(jù)存貯在數(shù)據(jù)流圖中起著保存數(shù)據(jù)的作用,指向數(shù)據(jù)存貯的數(shù)據(jù)流可以理解為寫數(shù)據(jù),從數(shù)據(jù)存貯引出的數(shù)據(jù)流可以理解為讀數(shù)據(jù),雙向數(shù)據(jù)流可以理解為修改數(shù)據(jù)。在數(shù)據(jù)流圖中,如果有兩個以上數(shù)據(jù)流指向一個加工或從一個加工中引出,則這些數(shù)據(jù)流之間往往存在一定的關(guān)系。我們通常用圖3-3所示符號表示這種關(guān)系。13圖3-3多個數(shù)據(jù)流與加工關(guān)系的表示14狀態(tài)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖是描述一個實體基于事件反應(yīng)的動態(tài)行為,顯示了該實體是如何根據(jù)當前所處的狀態(tài),對不同的事件做出反應(yīng)的。狀態(tài)轉(zhuǎn)換圖與數(shù)據(jù)流圖有本質(zhì)的不同,數(shù)據(jù)流圖側(cè)重于狀態(tài)的描述。狀態(tài)轉(zhuǎn)換圖的條件和一個過程的輸入數(shù)據(jù)流相對應(yīng),并且還與控制的流出相對應(yīng)。狀態(tài)圖的符號集包括5個基本元素:初始起點,它使用實心圓來繪制;狀態(tài)之間的轉(zhuǎn)換,它使用具有開箭頭的線段來繪制;狀態(tài),它使用圓角矩形來繪制;判斷點,它使用空心圓來繪制;以及一個或者多個終止點,它們使用內(nèi)部包含實心圓的圓來繪制。15數(shù)據(jù)字典數(shù)據(jù)字典是包含所有系統(tǒng)數(shù)據(jù)元素定義的倉庫。在這里,數(shù)據(jù)元素的定義必須是精確的、嚴格的和明確的。數(shù)據(jù)字典的定義包括過程描述、數(shù)據(jù)流定義、數(shù)據(jù)元素定義和數(shù)據(jù)存儲定義。

163.2.2結(jié)構(gòu)化程序設(shè)計的原則與方法模塊化模塊化就是把程序劃分成若干個模塊,每個模塊都具有某個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能,實現(xiàn)問題的求解。層次圖層次圖用樹狀層次結(jié)構(gòu)描述系統(tǒng)各個組成部分之間的關(guān)系,層次圖中的一個矩形框代表一個模塊,方框間的連線表示調(diào)用關(guān)系。層次圖十分清晰的反映了系統(tǒng)結(jié)構(gòu)。結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),表達了程序模塊之間的關(guān)系,反映了整個系統(tǒng)的功能實現(xiàn),即將來程序的控制層次體系。系統(tǒng)結(jié)構(gòu)往往用樹狀或網(wǎng)狀結(jié)構(gòu)的圖形來表示。17數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是指同一數(shù)據(jù)元素類中各個數(shù)據(jù)元素之間的關(guān)系。數(shù)據(jù)結(jié)構(gòu)分別為邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)(物理結(jié)構(gòu))和數(shù)據(jù)的運算。程序流程圖程序流程圖(ProgramFlowDiagram簡稱PFD圖)又稱為程序框圖。使用程序流程圖的主要優(yōu)點是,很直觀地描述了程序的控制邏輯,便于初學者掌握,而且其表現(xiàn)方式較為靈活,使用起來非常方便。PAD圖問題分析圖(ProblemAnalysisDiagram,簡稱PAD)是由日本日立公司設(shè)計的,它針對程序流程圖的某些特點,進行了適當?shù)母倪M。它把程序過程控制結(jié)構(gòu)表示成二維樹的圖形,是一種具有很強的結(jié)構(gòu)化特征的分析工具。183.2.3測試單元測試(Unittest)單元測試是對程序最小單元——模塊的測試。通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定函數(shù)的行為。初步的單元測試是由程序員自己來完成,程序員有責任編寫功能代碼,同時也就有責任為自己的代碼編寫單元測試用例。執(zhí)行單元測試,就是為了證明這段代碼的行為和期望的一致。

集成測試(Integrationtest)

集成測試是在單元測試的基礎(chǔ)上,將所有的軟件單元按照概要設(shè)計規(guī)格說明的要求組裝成子系統(tǒng),然后測試子系統(tǒng)各部分是否達到或?qū)崿F(xiàn)相應(yīng)技術(shù)指標及要求的活動。在集成測試之前,單元測試應(yīng)該已經(jīng)完成。集成測試最簡單的形式是:兩個已經(jīng)測試過的單元組合成一個組件,并且測試它們之間的接口。19系統(tǒng)測試(Systemtest)

系統(tǒng)測試是將經(jīng)過測試的子系統(tǒng)裝配成一個完整系統(tǒng)來測試。它是檢驗系統(tǒng)是否能夠提供系統(tǒng)方案說明書中指定功能的有效方法。它目的是對最終軟件系統(tǒng)進行全面的測試,確保最終軟件系統(tǒng)滿足產(chǎn)品需求并且遵循系統(tǒng)設(shè)計要求。203.2.4軟件維護定義:所謂軟件維護,就是指在軟件交付使用之后,為了改正軟件錯誤或者滿足用戶新的需要而修改軟件的過程。特點:軟件維護需要的工作量很大,平均來說,大型軟件的維護成本高達開發(fā)成本的4倍左右。許多軟件開發(fā)組織把60%以上的人力用于維護已有的軟件,而且隨著軟件數(shù)量增多和使用壽命的延長,這個百分比還在持續(xù)上升??偟膩碚f有以下三點:

1、結(jié)構(gòu)化維護與非結(jié)構(gòu)化維護差別巨大。

2、維護的代價高昂。

3、維護的問題很多。213.3結(jié)構(gòu)化程序與面向?qū)ο蟪绦蜷_發(fā)的比較空格上個世紀60年代后期,開始出現(xiàn)面向?qū)ο蟮母拍?。?0年代中期,面向?qū)ο蟮脑O(shè)計與分析技術(shù)逐步成型。到90年代,面向?qū)ο蟮某绦蛟O(shè)計逐漸成為軟件開發(fā)的重要方法,而今天,它已經(jīng)成為軟件開發(fā)的首選方法和必備條件??崭駷槭裁床捎妹嫦?qū)ο蠹夹g(shù),面向?qū)ο蠹夹g(shù)的概念和特點是什么?在本章,僅從一個程序?qū)嵗慕嵌龋勾蠹覍Y(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計的區(qū)別有一個感性上的認識。

22例子:空格電梯是人們?nèi)粘I钪薪?jīng)常使用和乘坐的設(shè)備,我們就不妨以電梯的控制程序為例,看看結(jié)構(gòu)化程序設(shè)計與面向?qū)ο笤O(shè)計的本質(zhì)區(qū)別。

電梯的控制規(guī)則在這里不作贅述。需要說明的是,我們主要是分析結(jié)構(gòu)化設(shè)計和面向?qū)ο笤O(shè)計的區(qū)別,鑒于有些知識是后續(xù)才介紹的內(nèi)容,這里僅進行軟件頂層的設(shè)計,重要的是了解分析問題的方法和思路,而不是實現(xiàn)細節(jié)。233.3.1結(jié)構(gòu)化程序設(shè)計方法結(jié)構(gòu)化程序設(shè)計是面向過程的設(shè)計,我們研究的是系統(tǒng)的工作流程,具體的講是數(shù)據(jù)和狀態(tài)的變化過程。明確輸入與輸出及功能要求要求:針對樓層按鈕和電梯內(nèi)按鈕的狀態(tài)要求,控制電梯的正確運行。我們將所有數(shù)據(jù)分為外部輸入和內(nèi)部狀態(tài)兩類:24Diagram外部輸入數(shù)據(jù):樓層按鈕:boo:UpButton[N],DownButton[N];電梯內(nèi)部按鈕:bool:button[N],DoorOpen,DoorClose;數(shù)據(jù)內(nèi)部數(shù)據(jù):電梯當前樓層:int:CurrentFloor;電梯運行方向set:CurrentRunDirection={UP,DOWM};

25系統(tǒng)硬件結(jié)構(gòu)圖圖3-4系統(tǒng)硬件結(jié)構(gòu)圖26顯然,軟件分為底層信號獲取模塊、控制執(zhí)行模塊和上層控制策略處理模塊。其軟件結(jié)構(gòu)圖如圖3-5所示。

圖3-5軟件結(jié)構(gòu)圖27空格顯然,信號獲取、執(zhí)行驅(qū)動和系統(tǒng)初始化的模塊都比較簡單,不再說明,僅對電梯控制策略處理模塊進行進一步說明。其中,僅需對電梯停頓規(guī)則和運行方向調(diào)整規(guī)則進行說明:電梯停頓規(guī)則:

1本樓層有與電梯運行同方向的停頓請求(按鈕);

2或電梯內(nèi)有本樓層的停頓請求(按鈕);

3或已到頂層或底層(包括后續(xù)同方向無停頓請求);方向調(diào)整規(guī)則:

1若電梯內(nèi)有后續(xù)樓層的同向停頓要求(按鈕);

2或后續(xù)樓層有停頓請求;則保持方向不變;否則反向。28空格到這里,我們用結(jié)構(gòu)化設(shè)計方法對電梯系統(tǒng)的分析已基本完畢。這里我們給出的是程序設(shè)計的基本框架,而不是具體實現(xiàn)。但是,我們可以看到,結(jié)構(gòu)化程序設(shè)計時,設(shè)計人員必須面對所有數(shù)據(jù)和控制流程。何時獲取數(shù)據(jù),何時進行計算,如何驅(qū)動執(zhí)行機構(gòu)等必須都安排好順序。事實上,往往整個程序執(zhí)行工程都必須全部清晰地反映在設(shè)計者的頭腦中,才能進行流程控制和理順全部的數(shù)據(jù)與時序。下面讓我們看看用面向?qū)ο蟮某绦蚍椒ㄊ侨绾巫龅摹?93.3.2面向?qū)ο蟪绦蛟O(shè)計方法空格現(xiàn)在我們再來看看面向?qū)ο笤O(shè)計的方法。要讓程序設(shè)計者在頭腦中準確記住所有的輸入數(shù)據(jù)、輸出數(shù)據(jù)和狀態(tài)關(guān)系,往往是十分困難、甚至難以做到的事。面向?qū)ο笤O(shè)計與結(jié)構(gòu)化程序設(shè)計方法的最根本區(qū)別,是我們不需要去考慮所有的數(shù)據(jù)、輸出和狀態(tài)等,而我們只關(guān)心有哪些對象構(gòu)成,每個對象能做什么?我們再來考慮電梯控制程序,我們首先考慮在這個過程中都有哪些對象,從系統(tǒng)需求中我們知道有:大廈、電梯、樓層、按鈕等,我們把這些對象細化到與程序有關(guān)的對象:大廈是沒有直接意義的,電梯又由按鈕、電梯門和電梯執(zhí)行機構(gòu)組成,當然,還有每層的樓層按鈕,以及電梯控制器:決定電梯的上升、下降停止和開門與關(guān)門。30空格在面向?qū)ο笤O(shè)計時,每一個對象是獨立的,它根據(jù)自己的狀態(tài)和外部信息決定自己的動作。那么,我們只要將每一個對象的數(shù)據(jù)和功能設(shè)計完成,整個系統(tǒng)就設(shè)計完成了。而不用將全部的數(shù)據(jù)和控制順序全部考慮在頭腦中。我們設(shè)計電梯控制系統(tǒng)由樓層按鈕類(FloorButton)、電梯按鈕類(ElevatorButton)、電梯門類(ElevatorDoor)、電梯控制器類(ElevatorControler)、電梯執(zhí)行器類(ElevatorActor)構(gòu)成。31空格讓我們以“樓層按鈕類”為例,來看看類的內(nèi)部構(gòu)造,以便讓我們對“類”有一個初步認識:樓層按鈕類(FloorButton):

classFloorButton{private:

boolUP,DOWN;//按鈕“上”、“下”的狀態(tài)

public:

pressUp();//按下“上”按鈕

pressDown();//按下“下”按鈕

cleanUp();//清楚“上”按鈕

CleanDown();//清除“下”按鈕

}32空格也許我們現(xiàn)在還看不懂類是怎樣構(gòu)造出來的,沒有關(guān)系,在后面的章節(jié)中我們會學到有關(guān)的知識,這里只要認識就可以了??崭駥⑶懊嫠谐龅念愐灰粯?gòu)造出來后,面向?qū)ο蟮姆治鲆部苫究家欢温洹N覀兛梢钥吹?,面向?qū)ο蟮某绦蛟O(shè)計,更符合人們?nèi)粘5乃伎剂晳T和工作方法,各個對象都有獨立的狀態(tài)和方法,使軟件工程師將更多的精力放在應(yīng)用問題的處理上,而不再是復雜的程序結(jié)構(gòu)和控制順序上。隨著后續(xù)章節(jié)的說明,大家會對面向?qū)ο蟪绦蛟O(shè)計方法有越來越多的認識。333.4結(jié)構(gòu)化程序的應(yīng)用ATM機是人們?nèi)粘I罱?jīng)常使用的設(shè)備,我們給出它的需求,請大家嘗試按結(jié)構(gòu)化程序設(shè)計的方法設(shè)計該系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)、軟件結(jié)構(gòu)、模塊劃分和各個模塊的流程圖。ATM機功能需求:①系統(tǒng)功能語言選擇(中文、英文、日文)用戶合法性檢驗用戶刷卡、6位數(shù)密碼②網(wǎng)絡(luò)通訊實現(xiàn)與銀行數(shù)據(jù)庫系統(tǒng)的聯(lián)接③帳戶基本管理功能查詢余額查詢當前帳戶的剩余金額;存儲當前帳戶中存入現(xiàn)金;取現(xiàn)金從當前帳戶余額中,提取不超過余額和本日提取金額的用戶輸入現(xiàn)金數(shù);歷史信息查詢查詢從“起始日期”到“結(jié)束日期”的本帳戶所有存、取活動;④打印打印上述活動的信息⑤帳戶高級功能掛失帳戶對當前帳戶進行掛失操作;轉(zhuǎn)帳從本帳戶支付用戶輸入金額到用戶指定帳戶中;34小結(jié)與作業(yè)空格本章對面向結(jié)構(gòu)化程序設(shè)計的軟件工程技術(shù)進行了介紹和說明。雖然面向?qū)ο蟮能浖O(shè)計和軟件工程技術(shù)已成為當今的主流技術(shù),但在一定條件下,面向結(jié)構(gòu)化程序的設(shè)計技術(shù)與方法還有著重要的意義。而且作為面向?qū)ο筌浖こ碳夹g(shù)的基礎(chǔ),了解和學習傳統(tǒng)的結(jié)構(gòu)化軟件工程技術(shù)與方法,也是后續(xù)學習的必要保證。作業(yè)與練習:(回答下列問題)1.結(jié)構(gòu)化程序設(shè)計基本要求要點是什么?2.結(jié)構(gòu)化分析與結(jié)構(gòu)化設(shè)計的區(qū)別?3.結(jié)構(gòu)化方法以及其手段有哪些?4.面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法的相同和不同之處有哪些?5.結(jié)構(gòu)化分析方法建立的系統(tǒng)模型包括什么,請具體說明?6.不論項目采用什么樣的軟件生存周期過程,其基本特征是什么?7.軟件開發(fā)模型與軟件開發(fā)學之間的關(guān)系是什么?35ThankYou!2025/2/2636第七章面向?qū)ο蠓治?/p>

2025/2/2637第七章

面向?qū)ο蠓治觯∣OA)

基本原理與概念

1基本方法與過程2OOA實踐1:ATM系統(tǒng)3OOA實踐2:電梯控制系統(tǒng)4小結(jié)52025/2/2638面向?qū)ο蠓治觯∣OA)

在本章中,我們將介紹面向?qū)ο蠓治觯╫bject-orientedanalysis,OOA)的各種技術(shù)和方法。它包括分析和定義用戶的需求(用例模型)、系統(tǒng)中數(shù)據(jù)的定義(靜態(tài)模型),以及控制流(動態(tài)模型)分析。2025/2/2639

7.1基本原理與概念

面向?qū)ο蠓治觯∣OA),就是抽取和整理用戶需求,并建立問題域精確模型的過程。 面向?qū)ο蠓治龅年P(guān)鍵,是識別出問題域內(nèi)的對象,并分析它們相互間的關(guān)系,最終建立起問題域的簡潔、精確、可理解的正確模型。根據(jù)Coda&Yourdon的面向?qū)ο蠓治龊驮O(shè)計技術(shù),面向?qū)ο蠓治觯∣bject-OrientedAnalysis,OOA)模型的5個層次分別如下:2025/2/26407.1基本原理與概念對象-類層(Class&ObjectLayer),表示待開發(fā)系統(tǒng)的基本構(gòu)造塊。

屬性層(AttributeLayer),對象所存儲(或容納)的數(shù)據(jù)。服務(wù)層(ServiceLayer),對象所做的“工作”,加上對象實例間的通訊。結(jié)構(gòu)層(StructureLayer),負責捕捉特定應(yīng)用論域中的結(jié)構(gòu)關(guān)系。如電梯作為一個整體而言,必須由電梯馬達、超載傳感器、樓層到達顯示面板、隨機指令面板、隨機召喚面板等組成。主題層(SubjectLayer),可以將眾多的對象歸類到幾個子模型或子系統(tǒng),即各個主題。對于電梯控制系統(tǒng),可分為電梯控制和電梯管理兩個主題。2025/2/26417.1基本原理與概念 OOA的實現(xiàn)方法有多種,大多數(shù)分析結(jié)果可以被歸結(jié)到如下方面:功能模型(用例模型)。通過用例描述,來表達系統(tǒng)的詳細需求,為軟件的進一步分析和設(shè)計打下基礎(chǔ)。靜態(tài)結(jié)構(gòu)(對象模型)。對象模型描述了現(xiàn)實世界中的“類和對象”以及它們之間的關(guān)系,表示了目標系統(tǒng)的靜態(tài)數(shù)據(jù)結(jié)構(gòu)。交互次序(動態(tài)模型)。動態(tài)模型描述系統(tǒng)的動態(tài)結(jié)構(gòu)和系統(tǒng)對象之間的交互。2025/2/26427.2基本方法與過程7.2.1OOA原則

OOA的主要原則有以下九點:

抽象:從許多事物中舍棄個別的、非本質(zhì)的特征,抽取共同的、本質(zhì)性的特征,就叫作抽象。抽象原則有兩方面的意義:第一,需要分析研究其中與系統(tǒng)目標有關(guān)的事物及其本質(zhì)性特征。第二,通過舍棄個體事物在細節(jié)上的差異,抽取其共同特征而得到一批事物的抽象概念。抽象原則包括過程抽象和數(shù)據(jù)抽象兩個方面。

2025/2/26437.2基本方法與過程封裝:就是把對象的屬性和服務(wù)結(jié)合為一個不可分的系統(tǒng)單位,并盡可能隱蔽對象的內(nèi)部細節(jié)。 繼承:特殊類的對象擁有的其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承。 分類:就是把具有相同屬性和服務(wù)的對象劃分為一類,用類作為這些對象的抽象描述。分類原則實際上是抽象原則運用于對象描述時的一種表現(xiàn)形式。2025/2/26447.2基本方法與過程聚合:又稱組裝,其原則是:把一個復雜的事物看成若干比較簡單的事物的組裝體,從而簡化對復雜事物的描述。 關(guān)聯(lián):是人類思考問題時經(jīng)常運用的思想方法:通過一個事物聯(lián)想到另外的事物。能使人發(fā)生聯(lián)想的原因是事物之間確實存在著某些聯(lián)系。 消息通信:這一原則要求對象之間只能通過消息進行通信,而不允許在對象之外直接地存取對象內(nèi)部的屬性。通過消息進行通信,是由于封裝原則而引起的。在OOA中要求用消息連接表示出對象之間的動態(tài)聯(lián)系。 粒度控制:一般來講,人在面對一個復雜的問題域時,不可能在同一時刻既能縱觀全局,又能洞察秋毫。因此需要控制自己的視野:考慮全局時,注意其大的組成部分,暫時不詳察每一部分的具體的細節(jié);考慮某部分的細節(jié)時,則暫時撇開其余的部分。這就是粒度控制原則。 行為分析:現(xiàn)實世界中事物的行為是復雜的。由大量的事物所構(gòu)成的問題域中各種行為往往相互依賴、相互交織。2025/2/26457.2基本方法與過程7.2.2OOA建?;具^程1)功能模型的建立該階段的目標是獲得對問題論域的清晰、精確的定義,產(chǎn)生描述系統(tǒng)功能和問題論域的基本特征的綜合文檔。論域分析過程是抽取和整理用戶需求并建立問題域精確模型的過程。主要任務(wù)是充分理解專業(yè)領(lǐng)域的業(yè)務(wù)問題和投資者及用戶的需求,提出高層次的問題解決方案。應(yīng)具體分析應(yīng)用領(lǐng)域的業(yè)務(wù)范圍、業(yè)務(wù)規(guī)則和業(yè)務(wù)處理過程,確定系統(tǒng)范圍、功能、性能,完善細化用戶需求,抽象出目標系統(tǒng)的本質(zhì)屬性,建立問題論域模型。在我們的分析過程中,則須建立詳細的用例模型圖。2025/2/26467.2基本方法與過程2)對象模型的建立

對象是由描述其屬性的數(shù)據(jù),及可以對這些數(shù)據(jù)施加的操作(即服務(wù)),封裝在一起構(gòu)成的獨立單元。因此,為建立完整的對象模型,既要確定類中應(yīng)該定義的屬性,又要確定類中應(yīng)該定義的服務(wù)。這些信息體現(xiàn)在類模型圖中。在分析過程中,由軟件分析師來確定所需要的類的集合和它們的屬性,以及類與類之間的關(guān)系。對象服務(wù)的確定我們放在設(shè)計階段。這一步驟完全等同于面向數(shù)據(jù)的技術(shù)。幾乎解決任何一個問題,都需要從客觀世界實體及實體間相互關(guān)系抽象出極有價值的對象模型;對于復雜問題(大型系統(tǒng))的對象模型一般由Coad方法所述的五個層次組成:主題層(也稱為范疇層)類&對象層結(jié)構(gòu)層屬性層服務(wù)層2025/2/26477.2基本方法與過程

通過劃分主題,我們可以把一個大型、復雜的對象模型分解成幾個不同的概念范疇。一個主題有一個名稱和一個標識它的編號。在描繪對象模型的圖中,把屬于同一個主題的那些類—&—對象框在一個框中,并在框的四角標上這個主題的編號。在建立對象模型階段,分析師借助用例腳本和用例圖來獲得關(guān)于該軟件后續(xù)設(shè)計階段中,所要創(chuàng)建的對象類的最原始信息。包括分析為創(chuàng)建一個用例圖已經(jīng)寫出的用例腳本的描述性文字,其實,這也是E-R圖(實體-關(guān)系圖)的另一種形式。工作步驟如下:確定對象類和關(guān)聯(lián)進一步劃分出若干主題給類和關(guān)聯(lián)增添屬性利用適當?shù)睦^承關(guān)系進一步合并和組織類確定類中的服務(wù)(等到建立了動態(tài)模型和功能模型之后)2025/2/26487.2基本方法與過程(1)

類和關(guān)聯(lián)的確定。

名詞抽象是類建模的第一步,在面向?qū)ο蠓治鲭A段,緊隨用例建模之后。為了定義一系列后選類和對象,名詞抽象是一種語言分析形式,被用來分析用例細節(jié)和其它已經(jīng)提取出的系統(tǒng)行為的書面描述。名詞抽象時,每一步的輸入要么是不正式的產(chǎn)品描述(正如在Schach多級處理的描述),或者是在用例建模期間被創(chuàng)建的詳細用例情節(jié)。在這個章節(jié)里,我們將詳細說明這兩個方法。下文中將介紹使用兩種名詞抽象抽象方法來實現(xiàn)設(shè)計的修改。 對象類的確定是在需求陳述的基礎(chǔ)上進行的。需求陳述闡明軟件的具體功能,即“做什么”,它描述用戶的需求但一般不提出解決問題的方法。需求陳述可以由用例(usecase)分析的結(jié)果直接得出。陳述的內(nèi)容包括:問題范圍,功能需求,性能需求,應(yīng)用環(huán)境及假設(shè)條件等。2025/2/26497.2基本方法與過程類和對象是在問題域中客觀存在的。首先,我們要找出所有候選的類和對象;然后,從候選的類和對象中篩選掉不正確的或不必要的。一種指導我們分析的方法為:以用自然語言書寫的需求陳述為依據(jù),把陳述中的名詞作為類的候選者;找出隱含類;形容詞作為確定屬性的線索;動詞作為服務(wù)(操作)的候選者。通常,在需求陳述中不會一個不漏地寫出問題域中所有有關(guān)的類和對象;根據(jù)領(lǐng)域知識或常識,可以進一步把隱含的類和對象提取出來。

2025/2/26507.2基本方法與過程初步選出候選類和對象之后,我們還必須對候選類進行篩選。篩選時主要依據(jù)下列標準,刪除不正確或不必要的類和對象,包括:冗余:如果兩個類表達了同樣的信息,則應(yīng)該保留在此問題域中最富于描述力的名稱。無關(guān):僅需要把與本問題密切相關(guān)的類和對象放進目標系統(tǒng)中?;\統(tǒng):去掉籠統(tǒng)的或模糊的類。屬性:有些名詞實際上描述的是其他對象的屬性,應(yīng)該把這些名詞從候選類中去掉。當然,如果某個性質(zhì)具有很強的獨立性,則應(yīng)把它作為類而不是作為屬性。操作:一些既可作為名詞,又可作為動詞的詞,應(yīng)該慎重考慮它們在本問題中的含義,以便正確地決定把它們作為類還是作為類中定義的操作。但是,本身具有屬性且需獨立存在的操作,應(yīng)該作為類。例如,談到電話時通常把“撥號”當作動詞,當構(gòu)造電話模型時確實應(yīng)該把它作為一個操作,而不是一個類。但是,在開發(fā)電話的自動記賬系統(tǒng)時,“撥號”需要有自己的屬性(如日期、時間、受話地點等),因此應(yīng)該把它作為一個類。實現(xiàn):去掉僅和實現(xiàn)有關(guān)的候選類。在設(shè)計和實現(xiàn)階段,這些類可能是重要的,但在分析階段過早地考慮它們反而會分散我們的注意力。2025/2/26517.2基本方法與過程確定了類和對象之后,我們來確定類和對象間的關(guān)聯(lián)關(guān)系。兩個或多個對象之間的相互依賴、相互作用的關(guān)系就是關(guān)聯(lián)。分析確定關(guān)聯(lián),能促使對問題域的邊緣情況進行分析,有助于發(fā)現(xiàn)那些尚未被發(fā)現(xiàn)的類和對象。大多數(shù)關(guān)聯(lián)可以通過直接提取需求陳述中的動詞詞組而得出。進一步分析需求陳述,能發(fā)現(xiàn)一些在陳述中隱含的關(guān)聯(lián)。分析員通過與用戶及領(lǐng)域?qū)<矣懻搯栴}域?qū)嶓w間的相互依賴、相互作用關(guān)系,根據(jù)領(lǐng)域知識可能再進一步補充一些關(guān)聯(lián)。經(jīng)初步分析得出的關(guān)聯(lián)只能作為候選的關(guān)聯(lián),還需經(jīng)過進一步篩選,以去掉不正確的或不必要的關(guān)聯(lián)。要刪除的關(guān)聯(lián)包括:已刪去的類之間的關(guān)聯(lián)。如果在分析確定類和對象的過程中已經(jīng)刪掉了某個候選類,則與這個類有關(guān)的關(guān)聯(lián)也應(yīng)該刪去,或用其他類重新表達這個關(guān)聯(lián)。與問題無關(guān)或應(yīng)在實現(xiàn)階段考慮的關(guān)聯(lián)。即處在本問題域之外的關(guān)聯(lián)或與實現(xiàn)密切相關(guān)的關(guān)聯(lián)。瞬時事件:關(guān)聯(lián)描述問題域的靜態(tài)結(jié)構(gòu),因此瞬時事件應(yīng)該刪除。三元關(guān)聯(lián):三個或三個以上對象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)或用詞組描述成限定的關(guān)聯(lián)。如果三元關(guān)聯(lián)中涉及的某個實體僅用于描述另兩個實體的關(guān)系,而且這個實體本身不包含屬性,則它是二元關(guān)聯(lián)上的鏈屬性。派生關(guān)聯(lián):可以用其他關(guān)聯(lián)定義的關(guān)聯(lián)。經(jīng)過篩選后的關(guān)聯(lián)還需要進行進一步的完善,這一步的工作主要包括:正名:仔細選擇含義更明確的名字作為關(guān)聯(lián)名。分解:為了能夠適用于不同的關(guān)聯(lián),必要時應(yīng)該分解以前確定的類。補充:及時補上遺漏的關(guān)聯(lián)。標明階數(shù):初步判定各個關(guān)聯(lián)的類型,并粗略地確定關(guān)聯(lián)的階數(shù)。2025/2/26527.2基本方法與過程(2)

劃分主題主題是按照問題域來確定的,注意不是用功能分解方法來確定主題。不同主題內(nèi)的對象間應(yīng)相互依賴和交互最少。如在ATM系統(tǒng)中,一般可分為三個主題。(3)

確定屬性屬性是對象的性質(zhì),借助于屬性我們能對類和對象的結(jié)構(gòu)有更深入、更具體的認識。通常,在需求陳述中用名詞詞組表示屬性,例如,“汽車的顏色”或“光標的位置”。另外,借助于領(lǐng)域知識和常識,才能分析得出需求陳述中未直接給出的屬性。屬性的確定既與問題域有關(guān),也和目標系統(tǒng)的任務(wù)有關(guān)。以下我們給出幾點確定屬性的方法:僅考慮與具體應(yīng)用直接相關(guān)的屬性,不考慮那些超出所要解決的問題范圍的屬性;首先找出最重要的屬性,以后再逐漸把其余屬性增添進去;在分析階段不考慮那些純粹用于實現(xiàn)的屬性。2025/2/26537.2基本方法與過程認真考察經(jīng)初步分析得到的屬性,從中刪掉不正確的或不必要的屬性。要刪除的屬性包括:屬性對象:誤把對象當作屬性。連接屬性:把鏈屬性誤作為屬性限定:把限定誤當成屬性內(nèi)部狀態(tài):誤把內(nèi)部狀態(tài)當成了屬性過于細化需要合并的屬性不一致的屬性(4)識別繼承和組合一般說來,可以使用兩種方式建立繼承關(guān)系:自底向上:抽象出現(xiàn)有類的共同性質(zhì)泛化出父類,這個過程實質(zhì)上模擬了人類歸納思維過程。自頂向下:把現(xiàn)有類細化成更具體的子類,這模擬了人類的演繹思維過程。從應(yīng)用域中常常能明顯看出應(yīng)該做的自頂向下的具體化工作。例如,帶有形容詞修飾的名詞詞組往往暗示了一些具體類。但是,在分析階段應(yīng)該避免過度細化。

2025/2/26547.2基本方法與過程組合也是一種特殊的關(guān)聯(lián)關(guān)系,“事務(wù)”和“更新”之間是組合關(guān)系。通常,一個事務(wù)包含對賬戶的若干次更新,這里所說的更新,指的是對賬戶所做的一個動作(取款、存款或查詢)。“更新”雖然代表一個動作,但是它有自己的屬性(類型、金額等),應(yīng)該獨立存在,因此應(yīng)該把它作為類。在關(guān)聯(lián)的識別過程中,大部分組合關(guān)系已被識別,在這里再次列出,以進一步發(fā)現(xiàn)遺漏的組合關(guān)系。

3)動態(tài)模型的建立動態(tài)模型建模的目標,是要創(chuàng)建一個描述軟件在運行過程中,所有可能進入的不同狀態(tài)的狀態(tài)裝換圖(STD)。就此而言,狀態(tài)轉(zhuǎn)換圖,好比是用來說明在結(jié)構(gòu)分析的建模過程中,建立的一個有限狀態(tài)機(FSM)。一個狀態(tài)轉(zhuǎn)換圖可以定義成如下的公式:當前狀態(tài)+事件+斷言

下一個狀態(tài)即

currentstateandeventandpredicate

nextstate2025/2/26557.2基本方法與過程然而實際上,狀態(tài)轉(zhuǎn)換圖通常以圖形的方式表現(xiàn)出來,以便于更清晰地表示出狀態(tài)轉(zhuǎn)換之間的關(guān)系。在開發(fā)交互式系統(tǒng)時,動態(tài)模型起著很重要的作用,動態(tài)模型的建立通常有以下幾步:編寫典型交互行為的腳本。從腳本中提取出事件,確定觸發(fā)每個事件的動作對象以及接受事件的目標對象。排列事件發(fā)生的次序,確定每個對象可能有的狀態(tài)及狀態(tài)間的轉(zhuǎn)換關(guān)系,并用狀態(tài)圖描繪它們。比較各個對象的狀態(tài)圖,檢查它們之間的一致性,確保事件之間的匹配。2025/2/26567.2基本方法與過程(1)編寫腳本腳本是指系統(tǒng)在某一執(zhí)行期間內(nèi)出現(xiàn)的一系列事件。編寫腳本的過程,實質(zhì)上就是分析用戶對系統(tǒng)交互行為的要求的過程。編寫腳本的目的是為了保證不遺漏重要的交互步驟,它有助于確保整個交互過程的正確性和清晰性。其內(nèi)容范圍既可以包括系統(tǒng)中發(fā)生的全部事件,也可以只包括由某些特定對象觸發(fā)的事件。腳本描寫的范圍主要由編寫腳本的具體目的決定。腳本用來描述事件序列,每當系統(tǒng)中的對象與用戶(或其他外部設(shè)備)交換信息時,就發(fā)生一個事件。所交換的信息值就是該事件的參數(shù)(例如,“輸入密碼”事件的參數(shù)是所輸入的密碼)。也有許多事件是無參數(shù)的,這樣的事件僅傳遞一個信息——該事件已經(jīng)發(fā)生了。對于每個事件,都應(yīng)該指明:觸發(fā)該事件的動作對象(例如,系統(tǒng)、用戶或其他外部事物);接受事件的目標對象;事件的參數(shù)。編寫過程中要考慮以下三種情況:正常情況。特殊情況,例如,輸入或輸出的數(shù)據(jù)為最大值(或最小值)。出錯情況,例如,輸入的值為非法值或響應(yīng)失敗。如果可能,系統(tǒng)應(yīng)該允許用戶“異常中止”或“取消”一個操作。應(yīng)該提供諸如“幫助”和”狀態(tài)查詢”之類的在基本交互行為之上的“通用”交互行為。2025/2/26577.2基本方法與過程(2)事件提取仔細分析每個腳本,從中提取出所有外部事件。事件包括系統(tǒng)與用戶(或外部設(shè)備)交互的所有信號、輸入、輸出、中斷、動作等等。對象傳遞信息的動作也是事件。對控制流產(chǎn)生相同效果的事件組合在一起應(yīng)作為一類事件,并采用唯一的名字。對控制流有不同影響的事件則應(yīng)區(qū)分開來,最后,還應(yīng)該區(qū)分出每類事件的發(fā)送對象和接收對象。完整、正確的腳本為建立動態(tài)模型奠定了必要的基礎(chǔ)。但是,用自然語言書寫的腳本往往不夠簡明,而且有時在閱讀時會有二義性。為了有助于建立動態(tài)模型,通常在畫狀態(tài)圖之前先畫出事件跟蹤圖,即時序圖。(3)繪制狀態(tài)圖狀態(tài)圖用于描繪事件與對象狀態(tài)的關(guān)系。狀態(tài)圖的詳細作用及繪制方法參見第五章。有以下幾點需要注意:

2025/2/26587.2基本方法與過程將圖中所有指向某條豎線的箭頭線,作為狀態(tài)圖中的箭頭線,邊上標以事件名。兩個事件之間的間隔就是一個狀態(tài)。從時序圖中當前考慮的豎線射出的箭頭線,是這條豎線代表的對象到達某個狀態(tài)時所做的行為。畫出狀態(tài)圖之后,再把其他腳本的時序圖合并到已畫出的狀態(tài)圖中。為此需在事件跟蹤圖中找出以前考慮過的腳本的分支點(例如“驗證賬戶”就是一個分支點,因為驗證的結(jié)果可能是“賬戶有效”,也可能是“無效賬戶”),然后把其他腳本中的事件序列并入已有的狀態(tài)圖中,作為一條可選的路徑??紤]完正常事件之后,再考慮邊界情況和特殊情況,其中包括在不適當時候發(fā)生的事件(例如,系統(tǒng)正在處理某個事務(wù)時,用戶要求取消該事務(wù))。有時用戶(或外部設(shè)備)不能做出快速響應(yīng),然而某些資源又必須及時收回,于是在一定間隔后就產(chǎn)生了“超時”事件。對用戶出錯情況往往需要花費很多精力處理,并且會使原來清晰、緊湊的程序結(jié)構(gòu)變得復雜、繁瑣,但是,出錯處理是不能省略的。當狀態(tài)圖覆蓋了所有腳本,包含了影響某類對象狀態(tài)的全部事件時,該類的狀態(tài)圖就構(gòu)造出來了。2025/2/26597.2基本方法與過程(4)審查動態(tài)模型各個類的狀態(tài)圖通過共享事件合并起來,構(gòu)成了系統(tǒng)的動態(tài)模型。在完成了每個具有重要交互行為的類的狀態(tài)圖之后,我們來檢查系統(tǒng)級的完整性和一致性。一般說來,每個事件都應(yīng)該既有發(fā)送對象又有接受對象。對于沒有前驅(qū)或沒有后繼的狀態(tài)應(yīng)該著重審查,如果這個狀態(tài)既不是交互序列的起點也不是終點,則發(fā)現(xiàn)了一個錯誤?;鞠到y(tǒng)模型由若干個數(shù)據(jù)源點/終點、及一個處理框組成,這個處理框代表了系統(tǒng)加工、變換數(shù)據(jù)的整體功能。由數(shù)據(jù)源點輸入的數(shù)據(jù)和輸出到數(shù)據(jù)終點的數(shù)據(jù),構(gòu)成了系統(tǒng)與外部世界之間交互事件的參數(shù)。2025/2/26607.3OOA實踐1:ATM系統(tǒng)本節(jié)以ATM系統(tǒng)為例來進一步詳細展示面向?qū)ο蟮姆治鲞^程。1).功能描述ATM系統(tǒng)的需求陳述如下:某銀行擬開發(fā)一個自動取款機系統(tǒng),它是一個由自動取款機、中央計算機、分行計算機及柜員終端組成的網(wǎng)絡(luò)系統(tǒng)。ATM和中央計算機由總行投資購買??傂袚碛卸嗯_ATM,分別設(shè)在全市各主要街道上。分行負責提供分行計算機和柜員終端。柜員終端設(shè)在分行營業(yè)廳及分行下屬的各個儲蓄所內(nèi)。該系統(tǒng)的軟件開發(fā)成本由各個分行分攤。銀行柜員使用柜員終端處理儲戶提交的儲蓄事務(wù)。儲戶可以用現(xiàn)金或支票向自己擁有的某個賬戶內(nèi)存款或開新賬戶。儲戶也可以從自己的賬戶中取款。通常,一個儲戶可能擁有多個賬戶。柜員負責把儲戶提交的存款或取款事務(wù)輸進柜員終端,接收儲戶交來的現(xiàn)金或支票,或付給儲戶現(xiàn)金。柜員終端與相應(yīng)的分行計算機通信,分行計算機具體處理針對某個賬戶的事務(wù)并且維護賬戶。2025/2/26617.3OOA實踐1:ATM系統(tǒng)11.擁有銀行賬戶的儲戶有權(quán)申請領(lǐng)取現(xiàn)金兌換卡。12.使用現(xiàn)金兌換卡可以通過ATM訪問自己的賬戶。13.目前僅限于用現(xiàn)金兌換卡在ATM上提取現(xiàn)金(即取款),或查詢有關(guān)自己賬戶的信息(例如,某個指定賬戶上的余額)。14.將來可能還要求使用ATM辦理轉(zhuǎn)賬、存款等事務(wù)。15.所謂現(xiàn)金兌換卡就是一張?zhí)刂频拇趴?,上面有分行代碼和卡號。16.分行代碼唯一標識總行下屬的一個分行,卡號確定了這張卡可以訪問哪些賬戶。17.通常,一張卡可以訪問儲戶的若干個賬戶,但是不一定能訪問這個儲戶的全部賬戶。18.每張現(xiàn)金兌換卡僅屬于一個儲戶所有,但是,同一張卡可能有多個副本,因此,必須考慮同時在若干臺ATM上使用同樣的現(xiàn)金兌換卡的可能性。19.也就是說,系統(tǒng)應(yīng)該能夠處理并發(fā)的訪問。20.當用戶把現(xiàn)金兌換卡插入ATM之后,ATM就與用戶交互,以獲取有關(guān)這次事務(wù)的信息,并與中央計算機交換關(guān)于事務(wù)的信息。21.首先,ATM要求用戶輸入密碼,接下來ATM把從這張卡上讀到的信息以及用戶輸入的密碼傳給中央計算機,請求中央計算機核對這些信息并處理這次事務(wù)。22.中央計算機根據(jù)卡上的分行代碼確定這次事務(wù)與分行的對應(yīng)關(guān)系,并且委托相應(yīng)的分行計算機驗證用戶密碼。23.如果用戶輸入的密碼是正確的,ATM就要求用戶選擇事務(wù)類型(取款、查詢等)。24.當用戶選擇取款時,ATM請求用戶輸入取款額。25.最后,ATM從現(xiàn)金出口吐出現(xiàn)金,并且打印出賬單交給用戶。2025/2/26627.3OOA實踐1:ATM系統(tǒng)

圖7-1給出了系統(tǒng)的總體用例結(jié)構(gòu)圖。涵蓋了需求陳述中描述的幾乎全部交互關(guān)系。圖7-2則以儲戶和ATM機之間的交互功能來給出詳細的用例。2025/2/26637.3OOA實踐1:ATM系統(tǒng)如圖7-2所示,銀行儲戶在ATM機上完成取款、存款及其他業(yè)務(wù)。在這里,參與者為“銀行儲戶”和ATM機。從系統(tǒng)需求描述中,我們知道ATM機目前僅限于用現(xiàn)金兌換卡在ATM上提取現(xiàn)金(即取款),或查詢有關(guān)自己賬戶的信息。將來可能還要求使用ATM辦理轉(zhuǎn)賬、存款等事務(wù)。因此我們在用例圖中僅有取款、存款及其余功能。其余功能即留作系統(tǒng)功能的擴展,包括存款,轉(zhuǎn)賬等。圖7-2ATM系統(tǒng)用例圖2025/2/26647.3OOA實踐1:ATM系統(tǒng)在此以取款用例為例來給出用例的詳細文本描述,如圖7-3所示。其中系統(tǒng)默認隨時有退卡功能,在此忽略。用例簡介:取款用例使得儲戶可以從ATM系統(tǒng)提取現(xiàn)金。詳細步驟描述:儲戶把現(xiàn)金兌換卡插入ATM;ATM要求儲戶輸入密碼,儲戶輸入密碼;如果儲戶輸入的密碼是正確的,ATM就要求用戶選擇事務(wù)類型(取款、查詢等),否則,提示密碼錯;儲戶選擇取款;ATM請求用戶輸入取款額,儲戶輸入取款額;ATM從現(xiàn)金出口吐出現(xiàn)金,并且打印出賬單交給儲戶。圖7-3取款用例描述2025/2/26657.3OOA實踐1:ATM系統(tǒng)2)類建模本節(jié)我們對ATM系統(tǒng)進行詳細分析,建立類圖模型。(1)主題劃分

首先我們根據(jù)問題域的關(guān)系對ATM系統(tǒng)進行主題劃分。整個銀行系統(tǒng)包括了賬戶庫、銀行儲戶庫及ATM系統(tǒng)三個主題,分別為圖中1,2,3所示。許多單個的賬戶組成了賬戶庫。許多銀行儲戶組成了儲戶庫。ATM系統(tǒng)包含了許多ATM機。2025/2/26667.3OOA實踐1:ATM系統(tǒng)(2)

類和對象的確定對象類的確定是在需求陳述的基礎(chǔ)上進行的。根據(jù)ATM系統(tǒng)需求陳述找到的候選類有:銀行自動取款機(ATM)系統(tǒng)中央計算機分行計算機柜員終端網(wǎng)絡(luò)總行市街道分行營業(yè)廳儲蓄所軟件成本柜員儲戶現(xiàn)金支票賬戶事務(wù)現(xiàn)金兌換卡余額磁卡分行代碼卡號副本訪問用戶信息密碼類型取款額賬單。在ATM系統(tǒng)的需求陳述中沒寫出的候選類:通信鏈路事務(wù)日志。對不正確或不必要的類和對象進行刪除,詳細過程如下:刪除冗余類。ATM系統(tǒng)的候選類中,”儲戶”與”用戶”,”現(xiàn)金兌換卡”與”磁卡”及”副本”分別描述了相同的二類信息;因此,應(yīng)該去掉”用戶”、”磁卡”、”副本”等冗余的類,僅保留“儲戶”和“現(xiàn)金兌換卡”這兩個類。銀行自動取款機(ATM)系統(tǒng)中央計算機分行計算機柜員終端網(wǎng)絡(luò)總行市街道分行營業(yè)廳儲蓄所軟件成本柜員儲戶現(xiàn)金支票賬戶事務(wù)現(xiàn)金兌換卡余額分行代碼卡號訪問信息密碼類型取款額賬單用戶磁卡副本事務(wù)日志通信鏈路

2025/2/26677.3OOA實踐1:ATM系統(tǒng)刪除無關(guān)類。ATM系統(tǒng)并不處理分攤軟件開發(fā)成本的問題,而且ATM和柜員終端放置的地點與本軟件的關(guān)系也不大。因此,應(yīng)該去掉候選類“成本”、“市”、“街道”、“營業(yè)廳”和“儲蓄所”。銀行自動取款機(ATM)系統(tǒng)中央計算機分行計算機柜員終端網(wǎng)絡(luò)總行分行軟件柜員儲戶現(xiàn)金支票賬戶事務(wù)現(xiàn)金兌換卡余額分行代碼卡號訪問信息密碼類型取款額賬單。成本市街道營業(yè)廳儲蓄所事務(wù)日志通信鏈路刪除籠統(tǒng)的類。“銀行”實際指總行或分行,“訪問”在這里實際指事務(wù),“信息”的具體內(nèi)容在需求陳述中隨后就指明了。此外還有一些籠統(tǒng)含糊的名詞。因此,在本例中應(yīng)該去掉“銀行”、“網(wǎng)絡(luò)”、“系統(tǒng)”、“軟件”、“信息”、“訪問”等候選類。自動取款機(ATM)中央計算機分行計算機柜員終端總行分行柜員儲戶現(xiàn)金支票賬戶事務(wù)現(xiàn)金兌換卡余額分行代碼卡號密碼類型取款額賬單。銀行網(wǎng)絡(luò)系統(tǒng)軟件信息訪問事務(wù)日志通信鏈路2025/2/26687.3OOA實踐1:ATM系統(tǒng)刪除屬性。在ATM系統(tǒng)中,“現(xiàn)金”、“支票”、“取款額”、“賬單”、“余額”、“分行代碼”、“卡號”、“密碼”、“類型”等,實際上都應(yīng)該作為屬性對待。因此,將它們從候選類中去除。自動取款機(ATM)中央計算機分行計算機柜員終端總行分行柜員儲戶賬戶事務(wù)現(xiàn)金兌換卡現(xiàn)金支票取款額賬單余額分行代碼卡號密碼類型事務(wù)日志通信鏈路刪除操作。在ATM系統(tǒng)中,沒有此類操作。刪除實現(xiàn)。在ATM系統(tǒng)中,“事務(wù)日志”無非是對一系列事務(wù)的記錄,它的確切表示方式是面向?qū)ο笤O(shè)計的議題;“通信鏈路”在邏輯上是一種聯(lián)系,在系統(tǒng)實現(xiàn)時它是關(guān)聯(lián)鏈的物理實現(xiàn)??傊?,應(yīng)該暫時去掉“事務(wù)日志”和“通信鏈路”這兩個類,在設(shè)計或?qū)崿F(xiàn)時再考慮它們。自動取款機(ATM)中央計算機分行計算機柜員終端總行分行柜員儲戶賬戶事務(wù)現(xiàn)金兌換卡事務(wù)日志通信鏈路2025/2/26697.3OOA實踐1:ATM系統(tǒng)經(jīng)過以上篩選步驟最終確定系統(tǒng)所需的類:自動取款機(ATM)中央計算機分行計算機柜員終端總行分行柜員儲戶賬戶事務(wù)現(xiàn)金兌換卡(3)確定關(guān)聯(lián)直接提取動詞短語得出的關(guān)聯(lián):ATM,中央計算機,分行計算機及柜員終端組成網(wǎng)絡(luò)總行擁有多臺ATM。ATM設(shè)在主要街道上分行提供分行計算機和柜員終端柜員終端設(shè)在分行營業(yè)廳及儲蓄所內(nèi)分行分攤軟件開發(fā)成本儲戶擁有賬戶柜員輸入針對賬戶的事務(wù)柜員終端與分行計算機通信分行計算機處理針對賬戶的事務(wù)分行計算機維護賬戶系統(tǒng)處理并發(fā)的訪問ATM與用戶交互ATM與中央計算機交換關(guān)于事務(wù)的信息ATM讀現(xiàn)金兌換卡中央計算機確定事務(wù)與分行的對應(yīng)關(guān)系A(chǔ)TM吐出現(xiàn)金ATM打印賬單2025/2/26707.3OOA實踐1:ATM系統(tǒng)需求陳述中隱含的關(guān)聯(lián):總行由各個分行組成分行保管賬戶總行擁有中央計算機系統(tǒng)維護事務(wù)日志系統(tǒng)提供必要的安全性儲戶擁有現(xiàn)金兌換卡根據(jù)問題域知識得出的關(guān)聯(lián):現(xiàn)金兌換卡訪問賬戶分行雇用柜員2025/2/26717.3OOA實踐1:ATM系統(tǒng)對關(guān)聯(lián)進行篩選,詳細過程如下:已刪去的類之間的關(guān)聯(lián)。如果在分析確定類和對象的過程中已經(jīng)刪掉了某個候選類,則與這個類有關(guān)的關(guān)聯(lián)也應(yīng)該刪去,或用其他類重新表達這個關(guān)聯(lián)。以ATM系統(tǒng)為例,由于已經(jīng)刪去了系統(tǒng)、網(wǎng)絡(luò)、市、街道、成本、軟件、事務(wù)日志、現(xiàn)金、營業(yè)廳、儲蓄所、賬單等候選類,因此,與這些類有關(guān)的下列八個關(guān)聯(lián)也應(yīng)該刪去。ATM、中央計算機、分行計算機及柜員終端組成網(wǎng)絡(luò)。ATM設(shè)在主要街道上。柜員終端設(shè)在分行營業(yè)廳及儲蓄所內(nèi)。分行分攤軟件開發(fā)成本。ATM吐出現(xiàn)金。ATM打印賬單。系統(tǒng)維護事務(wù)日志。系統(tǒng)提供必要的安全性。與問題無關(guān)或應(yīng)在實現(xiàn)階段考慮的關(guān)聯(lián)。即處在本問題域之外的關(guān)聯(lián)或與實現(xiàn)密切相關(guān)的關(guān)聯(lián)。例如,在ATM系統(tǒng)的例子中,“系統(tǒng)處理并發(fā)的訪問”并沒有標明對象之間的新關(guān)聯(lián),它只不過提醒我們在實現(xiàn)階段需要使用實現(xiàn)并發(fā)訪問的算法,以處理并發(fā)事務(wù)。2025/2/26727.3OOA實踐1:ATM系統(tǒng)瞬時事件。關(guān)聯(lián)描述問題域的靜態(tài)結(jié)構(gòu),因此瞬時事件應(yīng)該刪除。以ATM系統(tǒng)為例,“ATM讀現(xiàn)金兌換卡”描述了ATM與用戶交互周期中的一個動作,它并不是ATM與現(xiàn)金兌換卡之間的固有關(guān)系,因此應(yīng)該刪去。類似地,還應(yīng)該刪去“ATM與用戶交互”這個候選的關(guān)聯(lián)。三元關(guān)聯(lián)。三個或三個以上對象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)或用詞組描述成限定的關(guān)聯(lián)。例如,“柜員輸入針對賬戶的事務(wù)”可以分解成:“柜員輸入事務(wù)”和“事務(wù)修改賬戶”;“分行計算機處理針對賬戶的事務(wù)”可以分解成:“分行保管賬戶”和“事務(wù)修改賬戶”;“ATM與中央計算機交換關(guān)于事務(wù)的信息”可以分解成:“ATM與中央計算機通信”和“ATM上輸入事務(wù)”。如果三元關(guān)聯(lián)中涉及的某個實體僅用于描述另兩個實體的關(guān)系,而且這個實體本身不包含屬性,則它是二元關(guān)聯(lián)上的鏈屬性。例如,“公司付給員工工資”可以改造成帶有鏈屬性“工資”的二元關(guān)聯(lián)“公司雇用員工”。派生關(guān)聯(lián)。可以用其他關(guān)聯(lián)定義的關(guān)聯(lián)。例如,“總行擁有多臺ATM”實質(zhì)上是“總行擁有中央計算機”和“ATM與中央計算機通信”這兩個關(guān)聯(lián)組合的結(jié)果。而“分行計算機維護賬戶”的實際含義是,“分行保管賬戶”和“事務(wù)修改賬戶”。2025/2/26737.3OOA實踐1:ATM系統(tǒng)經(jīng)過以上處理,最終得到ATM系統(tǒng)中的所有關(guān)聯(lián)如下:總行由各個分行組成總行擁有中央計算機中央計算機與分行通信ATM與中央計算機通信分行擁有分行計算機分行擁有柜員終端柜員終端與分行計算機通信分行雇用柜員柜員輸入柜員事務(wù)柜員事務(wù)輸入柜員終端柜員事務(wù)修改賬戶分行保管賬戶儲戶擁有賬戶儲戶擁有現(xiàn)金兌換卡遠程事務(wù)由現(xiàn)金兌換卡授權(quán)在ATM上輸入遠程事務(wù)遠程事務(wù)修改賬戶現(xiàn)金兌換卡訪問賬戶2025/2/26747.3OOA實踐1:ATM系統(tǒng)(4)確定屬性

從需求陳述中可以得到帳戶具有帳戶類型、帳戶號、余額三個屬性。柜員事務(wù)則包括時間,日期和金額三個屬性。銀行儲戶及ATM機兩個類包含哪些屬性,如下頁圖7-5都一目了然。

2025/2/26757.3OOA實踐1:ATM系統(tǒng)2025/2/26767.3OOA實踐1:ATM系統(tǒng)(5)識別繼承和組合進一步考慮繼承和組合的因素對類進行組織。使用兩種方式建立繼承關(guān)系:自底向上:在ATM系統(tǒng)中,“遠程事務(wù)”和“柜員事務(wù)”是類似的(它們都“修改”帳戶),可以泛化出父類“事務(wù)”;類似地,可以從“ATM”和“柜員終端”(它們都“輸入”事務(wù))泛化出父類“輸入站”。自頂向下:“現(xiàn)金兌換卡”類實際上有兩個相對獨立的功能,即鑒別儲戶使用ATM的權(quán)限的卡:“卡權(quán)限”和ATM獲得分行代碼和卡號等數(shù)據(jù)的數(shù)據(jù)載體:“現(xiàn)金兌換卡”。“卡權(quán)限”類標志儲戶訪問賬戶的權(quán)限,“現(xiàn)金兌換卡”類是含有分行代碼和卡號的數(shù)據(jù)載體。多張“現(xiàn)金兌換卡”可能對應(yīng)著相同的“卡權(quán)限”。因此應(yīng)將類“現(xiàn)金兌換卡”分解為兩個類“現(xiàn)金兌換卡”和“卡權(quán)限”。另外,“事務(wù)”和“更新”之間是組合關(guān)系。通常,一個事務(wù)包含對賬戶的若干次更新,這里所說的更新,指的是對賬戶所做的一個動作(取款、查詢)?!案隆彪m然代表一個動作,但是它有自己的屬性(類型、金額等),應(yīng)該獨立存在,因此把它作為類。這樣我們得到新的類圖7-6。2025/2/26777.3OOA實踐1:ATM系統(tǒng)圖7-6迭代后的ATM機類圖2025/2/26787.3OOA實踐1:ATM系統(tǒng)2)動態(tài)建模

為建立動態(tài)模型,我們首先考慮ATM系統(tǒng)的使用過程。寫出ATM系統(tǒng)的用例腳本。考慮其正常腳本,及異常腳本。這里異常指用戶不合法操作。以下給出一個正常情況腳本和一個異常情況腳本。ATM系統(tǒng)的正常情況腳本:ATM請儲戶插卡;儲戶插入一張現(xiàn)金兌換卡。ATM接受該卡并讀它上面的分行代碼和卡號。ATM要求儲戶輸入密碼;儲戶輸入自己的密碼“1234”等數(shù)字。ATM請求總行驗證卡號和密碼;總行要求“39”號分行核對儲戶密碼,然后通知ATM說這張卡有效ATM要求儲戶選擇事務(wù)類型(取款、轉(zhuǎn)賬、查詢等);儲戶選擇“取款”。ATM要求儲戶輸入取款額;儲戶輸入“880”。ATM確認取款額在預先規(guī)定的限額內(nèi),然后要求總行處理這個事務(wù);總行把請求轉(zhuǎn)給分行,該分行成功地處理完這項事務(wù)并返回該賬戶的新余額。ATM吐出現(xiàn)金并請儲戶拿走這些現(xiàn)金;儲戶拿走現(xiàn)金。ATM問儲戶是否繼續(xù)這項事務(wù);儲戶回答“不”。ATM打印賬單,退出現(xiàn)金兌換卡,請儲戶拿走它們;儲戶取走賬單和卡。ATM請儲戶插卡。2025/2/26797.3OOA實踐1:ATM系統(tǒng)ATM系統(tǒng)的異常情況腳本:ATM請儲戶插卡;儲戶插入一張現(xiàn)金兌換卡。ATM接受這張卡并讀它上面的分行代碼和卡號。ATM要求密碼;儲戶誤輸入“8888”。ATM請求總行驗證輸入的數(shù)字和密碼;總行在向有關(guān)分行咨詢之后拒絕這張卡。ATM顯示“密碼錯”,并請儲戶重新輸入密碼;儲戶輸入“1234”;ATM請總行驗證后知道這次輸入的密碼正確。ATM請儲戶選擇事務(wù)類型;儲戶選擇“取款”。ATM詢問取款額;儲戶改變主意不想取款了,他敲“取消”鍵。ATM退出現(xiàn)金兌換卡,并請儲戶拿走它;儲戶拿走他的卡。ATM請儲戶插卡。

2025/2/26807.3OOA實踐1:ATM系統(tǒng)

根據(jù)ATM的用例腳本出發(fā)畫出狀態(tài)圖。將各腳本描述的狀態(tài)轉(zhuǎn)換逐次添加到原圖上,得到最后的狀態(tài)圖,如圖7-7,7-8和圖7-9。針對系統(tǒng)腳本,三個圖分別從系統(tǒng)不同層次對類的交互行為進行了描述。狀態(tài)圖的詳細作用及繪制方法參見第五章。2025/2/26817.3OOA實踐1:ATM系統(tǒng)2025/2/26827.4OOA實踐2:電梯控制系統(tǒng)

7.4OOA實踐2:電梯控制系統(tǒng)1)功能描述電梯的抽象用例圖如下:圖7-10電梯控制系統(tǒng)用例圖2025/2/26837.4OOA實踐2:電梯控制系統(tǒng)電梯控制系統(tǒng)面向?qū)ο蟮姆治?,電梯系統(tǒng)我們在第三章提到過。在這里我們對電梯系統(tǒng)進行更詳細的描述,需求陳述如下:(1)有樓高為N層的大廈,需要安裝電梯;(2)

除底層和頂層僅有一個單向按鈕,其它樓層均安裝“上▲”、“下▼”兩個按鈕;(3)

電梯內(nèi)有1~N個數(shù)字按鈕和“開”、“關(guān)”按鈕;每個數(shù)字按鈕代表一個樓層。當按下一個數(shù)字按鈕時,該數(shù)字按鈕指示燈亮。當電梯到達相應(yīng)樓層時,該摟層對應(yīng)數(shù)字按鈕指示燈滅。(4)

電梯在單向運行中,如“上升”:若在“上升需求”或“到達需求”中有高于目前樓層的需求存在或有更高的“下降需求”,方向不變,運行至上一樓層位置;(5)

否則運行反向,在若在“下降需求”或“到達需求”中有低于目前樓層的需求存在或有更低的“上升需求”,運行至下一樓層位置;若無任何需求,關(guān)門,停止運行,等待;(6)

到達需求樓層位置,若有到達需求或上升需求,或滿足反向條件,開門,保持20秒鐘,或響應(yīng)“開”、“關(guān)”按鈕動作,在關(guān)門2秒鐘后,重復(3);2025/2/26847.4OOA實踐2:電梯控制系統(tǒng)2)類建模從系統(tǒng)需求中我們得到候選類:按鈕,電梯,樓層,運行,大廈,指示燈,請求,門。其中,樓層、大廈是處于問題邊界以外的名詞,應(yīng)該刪除。運行是抽象名詞,沒有實際意義,因此刪去。指示燈、請求都可以作為按鈕的屬性。最后我們得到三個類:電梯,按鈕和門。對于按鈕,根據(jù)需求中指定的兩種類型,進行抽象繼承,得到兩個子類:電梯按鈕和樓層按鈕。由此得到電梯控制系統(tǒng)的基本類模型。

圖7-11電梯控制系統(tǒng)的基本類模型

2025/2/26857.4OOA實踐2:電梯控制系統(tǒng)

在實際的電梯中,按鈕并不直接與電梯通信,按鈕響應(yīng)與電梯之間的對應(yīng)關(guān)系必須由某種類型的電梯控制器來負責。因此,我們增加電梯控制器類。電梯控制器處理請求并控制按鈕指示燈的亮與滅。另外,打開和關(guān)閉電梯門的唯一辦法是向“電梯門”對象發(fā)送一條消息,如果在錯誤的時間關(guān)閉或打開電梯門是很危險的。為了更好的保證電梯運行的安全,將電梯門從電梯分離出來,分別對它們進行控制。經(jīng)過以上步驟,得到類圖:2025/2/26867.4OOA實踐2:電梯控制系統(tǒng)3)動態(tài)建模電梯控制系統(tǒng)中,用戶的任何輸入都是合法的。因此對其進行動態(tài)建模,只需考慮電梯的調(diào)度原則。而其狀態(tài)圖也恰恰只描述電梯的所有可能事件,及其交互過程。如圖7-13所示,電梯控制系統(tǒng),即電梯事件循環(huán)狀態(tài),不停的監(jiān)視由按鈕對象發(fā)送來的消息,根據(jù)電梯運動現(xiàn)狀,選擇電梯移動方向。例如,當電梯移動一樓層時,處于“決定是否停止”狀態(tài),此時則需要對當前請求隊列進行檢查,若無停留在該樓層的請求,則繼續(xù)移動,否則,要“停在樓層”,開門并啟動定時器。2025/2/26877.4OOA實踐2:電梯控制系統(tǒng)圖7-13電梯系統(tǒng)類圖2025/2/26887.5小結(jié)

7.5小結(jié)

面向?qū)ο蟮姆治鯫OA(Object-OrientedAnalysis)是面向?qū)ο蠓椒◤木幊填I(lǐng)域向分析領(lǐng)域延伸的產(chǎn)物,充分體現(xiàn)了面向?qū)ο蟮母拍钆c原則。面向?qū)ο蟮姆治龇椒?,強調(diào)從問題域中的實際事物及與系統(tǒng)責任有關(guān)的概念出發(fā),來構(gòu)造系統(tǒng)模型、與問題域具有一致的概念和術(shù)語,同時盡可能使用符合人類的思維方式來認識和描述問題域,有利于對問題及系統(tǒng)責任的理解以及人員之間的交流。再加上面向?qū)ο蟊旧淼姆庋b、繼承和多態(tài)等特征,OOA對需求變化有較強的適應(yīng)性,并且很好的支持了軟件復用。在本章中,我們介紹了OOA的分析原則及詳細分析過程,并以ATM系統(tǒng)以及電梯調(diào)度系統(tǒng)開發(fā)為例,詳細說明了OOA分析中三種模型即用例模型、靜態(tài)模型和動態(tài)模型的建模過程。

SoftwareEngineering軟件工程精品課程第九章實現(xiàn)與測試

9.1重用性(reuse) 人們在開發(fā)一件新的產(chǎn)品時,往往會直接使用大量的成熟部件,這些被重新使用的軟件模塊和程序,稱為組件(component)。而在新的軟件開發(fā)中選用原有組件的方法,就是軟件重用。 軟件重用有兩種類型,第一種是意外(accidental)重用,另一種是預備(deliberate)重用。 隨著組件技術(shù)的不斷發(fā)展,軟件重用成為軟件開發(fā)的主要指標之一。第九章實現(xiàn)與測試9.1.2對象與重用 面向?qū)ο蟮某绦蛟O(shè)計,將數(shù)據(jù)結(jié)構(gòu)及其之上的操作封裝起來,對外具有統(tǒng)一的接口定義和數(shù)據(jù)傳遞關(guān)系。這樣一種模式,為軟件重用技術(shù)的應(yīng)用帶來了極大的便利。9.1.3

重用在軟件的各個階段 應(yīng)用架構(gòu)的重用

1.軟件設(shè)計階段的重用 設(shè)計模式的重用 軟件架構(gòu)的重用

第九章實現(xiàn)與測試

2.軟件實現(xiàn)階段的重用選擇合適的組件、繼承和集成現(xiàn)有的軟件模塊,已經(jīng)是軟件實現(xiàn)階段的重要任務(wù)。3.軟件維護階段的重用軟件重用對軟件維護帶來的好處,軟件的維護可以象機械設(shè)備的維修一樣進行部件(組件)的更換。當然我們知道軟件部件是不會磨損的,需要更換的軟件組件要么是有錯誤,要么是需要升級。

第九章實現(xiàn)與測試第四代語言第三代語言第二代語言

第一代語言面向問題描述的更自然的語言高級語言Fortran、BASIC、C匯編語言機器語言,即01代碼9.2選擇編程語言9.2.1編程語言的類型第九章實現(xiàn)與測試9.2.2快速原型語言

快速原型語言,是要在短時間內(nèi)以直觀的方式展現(xiàn)用戶的需求。 快速原型語言的要求,一是快,二是直觀,圖形化的顯示。

建立原型的目的,是為了方便與用戶的溝通,而不是軟件的設(shè)計,僅需要描述軟件的外部特性而不是內(nèi)部實現(xiàn)!

第九章實現(xiàn)與測試9.2.3最終實現(xiàn)語言 當我們實現(xiàn)一個軟件產(chǎn)品的模塊編程(coding)時,應(yīng)該選擇什么樣的實現(xiàn)語言呢?選擇語言時,卻應(yīng)該遵循一些基本的準則:選擇客戶具有經(jīng)驗和支持工具的語言選擇適合應(yīng)用特點的語言選擇信息內(nèi)聚性最大的語言選擇具有最佳成本-效率比的語言選擇風險最小的語言第九章實現(xiàn)與測試9.3好的編程風格與原則

編程風格的基本要求:

使用一致的、有意義的變量命名注釋語句的必要性避免模糊、復雜的算法使用常量學會代碼的版面設(shè)計嵌套的

if語句第九章實現(xiàn)與測試9.4單元測試

關(guān)于軟件測試的工作,應(yīng)該從軟件一開始的需求階段就包含進來,并且一直貫穿軟件生命周期的全過程。

軟件測試的目標為:

1.檢查軟件代碼是否達到軟件設(shè)計的功能與性能要求

2.盡可能發(fā)現(xiàn)代碼中存在的錯誤。

第九章實現(xiàn)與測試

針對軟件測試的兩個目標,從測試方法的角度,可以分為兩種測試的方法。

1.以軟件設(shè)計為標準,檢查軟件代碼是否滿足了軟件設(shè)計的要求----黑盒測試。

2.以軟件代碼為對象,檢查已完成的代碼中是否存在錯誤----白盒測試。

第九章實現(xiàn)與測試9.4.1黑盒測試

黑盒測試,是在不了解軟件代碼的條件下,檢測軟件是否達到的設(shè)計的要求。因為不了解程序的內(nèi)部結(jié)構(gòu),測試數(shù)據(jù)就要從輸入數(shù)據(jù)和輸出數(shù)據(jù)上分析了。 對于黑盒測試而言,是檢測軟件是否達到設(shè)計的要求,即軟件的功能要求。因此測試用例的另一個生成標準,就是覆蓋軟件模塊的所有功能。

第九章實現(xiàn)與測試9.4.2白盒測試

白盒測試是基于代碼的測試,也稱為基于軟件結(jié)構(gòu)的測試。白盒測試更注重于代碼自身的質(zhì)量,而不是其要實現(xiàn)的功能。 白盒測試從軟件代碼出發(fā),測試用例的選擇都是基于代碼的語句、結(jié)構(gòu)和路徑的構(gòu)成,測試的目的,就是盡可能覆蓋代碼的所有運行,從而發(fā)現(xiàn)其中的錯誤。 語句覆蓋(statementcoverage) 分支覆蓋(branchcoverage) 路徑覆蓋(pathcoverage)

第九章實現(xiàn)與測試9.4.3其他審查1)代碼走查(CodeWalkthroughs) 在軟件描述和編碼階段,對于軟件設(shè)計師和程序員完成的文檔和代碼,如果能夠有其他富有經(jīng)驗的設(shè)計師和程序員重讀檢查,往往會發(fā)現(xiàn)許多存在的錯誤。而當進行重讀檢查的人員不止一人時,這種對文檔和代碼的重新檢查,往往能夠發(fā)現(xiàn)文檔和代碼的所有錯誤和問題。第九章實現(xiàn)與測試2)代碼視察(CodeInspections) 代碼視察是一種更規(guī)范的重讀方式,人員組成與代碼走查類似。一般由3~6人組成,包括當前階段(實現(xiàn)與測試階段)的代表和下一階段(集成測試)的代表、一個成員扮演團隊的協(xié)調(diào)者來領(lǐng)導和管理團隊、還有一個成員是記錄者,負責記錄代碼視察中發(fā)現(xiàn)的錯誤。

3)正確性證明(CorrectnessProofs)

正確性證明,是用形式化、數(shù)學的方法證明一段程序代碼滿足了輸入、輸出的要求。這是唯一能夠證明程序正確的方法。第九章實現(xiàn)與測試4)復雜性描述(ComplexityMetrics)

盡管復雜性描述更象一個白盒測試方法,它依賴于被測試的程序代碼,但它并不對程序進行測試,而只是表明程序的復雜性和哪個程序更需要被測試。

5)錯誤統(tǒng)計與可靠性分析(FaultStatisticsandReliabilityAnalysis)

錯誤統(tǒng)計提供了一個有用的體系來決定是否繼續(xù)測試一個模塊,還是重新編寫。在程序測試中,不論是白盒、黑盒還是走查,所有的錯誤被按照不同錯誤級別記錄下來,為軟件質(zhì)量的評價提供了依據(jù)。第九章實現(xiàn)與測試6)靜室技術(shù)(TheCleanroomTechnique)

靜室技術(shù)是多種軟件開發(fā)技術(shù)的集成,包括了正確性證明、代碼審查、錯誤統(tǒng)計與可靠性分析等一系列技術(shù)方法。靜室技術(shù)的核心思想是:通過在第一次正確地書寫代碼增量并在測試前驗證它們的正確性,從而避免成本很高的錯誤消除過程。

第九章實現(xiàn)與測試9.4.4測試方法的評價與選擇

上面介紹了黑盒測試、白盒測試、程序走查等一系列軟件測試方法,究竟那種軟件測試方法最有效呢? 實驗結(jié)果,并不能證明有哪一種測試方法具有明顯的優(yōu)勢。黑盒測試、白盒測試、程序走查作為三種典型的軟件測試方法,各具有自己的優(yōu)點和不足。當然,其中程序走查方法的費用要高于黑盒測試和白盒測試。第九章實現(xiàn)與測試9.5集成測試

軟件產(chǎn)品總是由許多不同功能的模塊組成的,當完成模塊編碼和單元測試工作后,就需要進行軟件的集成測試工作。

考慮如圖所示的模塊結(jié)構(gòu)組成的軟件。

第九章實現(xiàn)與測試9.5.1自頂向下測試(Top-Down)

自頂向下的集成測試,優(yōu)點是能夠及早發(fā)現(xiàn)軟件的需求錯誤、邏輯故障、結(jié)構(gòu)錯誤等軟件的重要錯誤。 一類稱為邏輯模塊(Logicmodules),就是一般比較靠近根部的模塊,這類模塊往往是關(guān)于程序邏輯、結(jié)構(gòu)、控制的模塊。 另一類稱為操作模塊(operationalmodules),一般是調(diào)用的最底層模塊,這類模塊往往是執(zhí)行一些具體的操作,如輸入、輸出或硬件的驅(qū)動等。 自頂向下集成測試的缺點,正是因為從邏輯模塊開始,而導致對操作模塊的測試不足。

第九章實現(xiàn)與測試9.5.2自底向上測試(Bottom-Up)

自底向上的測試方法,對操作模塊的測試是充分的,因為在測試操作模塊時,可能尚不清楚本軟件對操作模塊的具體要求,所以會對操作模塊的全部功能都進行完全的測試。保證了對操作模塊測試的充分性。

自底向上的測試方法,因為將邏輯模塊的測試放在了后期,所以軟件的需求錯誤、結(jié)構(gòu)錯誤都會較晚發(fā)現(xiàn),甚至出現(xiàn)對操作模塊的完全測試,因為需求的錯誤,而變成完全無用的模塊。第九章實現(xiàn)與測試9.5.3三明治測試 仍然考慮圖9-9的軟件模塊,我們把模塊a,b,c,d,g,I當作邏輯模塊;把模塊e,f,h,i,k,l,m作為操作模塊。那么,我們可以對邏輯模塊采用自頂向下的測試方法,而對操作模塊,采用自底向上的測試方法。并且可以同時開始兩個小組的測試工作。這樣,我們既可以在早期就發(fā)現(xiàn)軟件需求、結(jié)構(gòu)和邏輯上的錯誤,又可以保證對操作模塊測試的充分性。第九章實現(xiàn)與測試方法優(yōu)點不足整體測試—錯誤定位難主要設(shè)計錯誤發(fā)現(xiàn)較晚自頂向下錯誤定位主要設(shè)計錯誤發(fā)現(xiàn)早重用模塊測試測試不足自底向上錯誤定位重用模塊測試充分主要設(shè)計錯誤發(fā)現(xiàn)晚三明治錯誤定位主要設(shè)計錯誤發(fā)現(xiàn)早重用模塊測試充分—集成測試方法總結(jié)第九章實現(xiàn)與測

溫馨提示

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

評論

0/150

提交評論