軟件工程全冊課件_第1頁
軟件工程全冊課件_第2頁
軟件工程全冊課件_第3頁
軟件工程全冊課件_第4頁
軟件工程全冊課件_第5頁
已閱讀5頁,還剩1037頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1部分軟件工程基礎(chǔ)第1章軟件及軟件工程介紹1.1軟件與軟件危機軟件的作用具有產(chǎn)品和產(chǎn)品生產(chǎn)載體的雙重作用。作為產(chǎn)品,軟件顯示了由計算機硬件體現(xiàn)的計算能力,扮演著信息轉(zhuǎn)換的角色:產(chǎn)生、管理、查詢、修改、顯示或者傳遞各種不同的信息。作為產(chǎn)品生產(chǎn)的載體,軟件提供了計算機控制(操作系統(tǒng))、信息通信(網(wǎng)絡(luò)),以及應(yīng)用程序開發(fā)和控制的基礎(chǔ)平臺(軟件工具和環(huán)境)。

1.1軟件與軟件危機軟件的概念

雖然軟件對于現(xiàn)代的人并不陌生,但很多人對于軟件的理解并不準確,“軟件就是程序,軟件開發(fā)就是編程序”的這種錯誤觀點仍然存在。什么是軟件?1.1軟件與軟件危機軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關(guān)文檔的完整集合。程序是按事先設(shè)計的功能和性能要求執(zhí)行的指令序列。數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu)。文檔是與程序開發(fā),維護和使用有關(guān)的圖文材料。1.1軟件與軟件危機軟件的特性(1)

形態(tài)特性:軟件是無形的、不可見的邏輯實體。度量常規(guī)產(chǎn)品的幾何尺寸、物理性質(zhì)和化學(xué)成分對它卻是毫無意義的。

(2)

智能特性:軟件是復(fù)雜的智力產(chǎn)品,它的開發(fā)凝聚了人們的大量腦力勞動,它本身也體現(xiàn)了知識實踐經(jīng)驗和人類的智慧,具有一定的智能。它可以幫助我們解決復(fù)雜的計算、分析、判斷和決策問題。(3)

開發(fā)特性:盡管已經(jīng)有了一些工具(也是軟件)來輔助軟件開發(fā)工作,但到目前為止尚未實現(xiàn)自動化。軟件開發(fā)中仍然包含了相當(dāng)份量的個體勞動,使得這一大規(guī)模知識型工作充滿了個人行為和個人因素。(4)

質(zhì)量特性:目前還無法得到完全沒有缺陷的軟件產(chǎn)品。1.1軟件與軟件危機(5)

生產(chǎn)特性:與硬件或傳統(tǒng)的制造業(yè)產(chǎn)品的生產(chǎn)完全不同,軟件一旦設(shè)計開發(fā)出來,如果需要提供多個用戶,它的復(fù)制十分簡單,其成本也極為有限。(6)

管理特性:由于上述的幾個特點,使得軟件的開發(fā)管理顯得更為重要,也更為獨特。1.1軟件與軟件危機(7)

環(huán)境特性:軟件的開發(fā)和運行都離不開相關(guān)的計算機系統(tǒng)環(huán)境,包括支持它的開發(fā)和運行的相關(guān)硬件和軟件。軟件對于計算機系統(tǒng)的環(huán)境有著不可擺脫的依賴性。

(8)

維護特性:軟件投入使用以后需要進行維護,但這種維護與傳統(tǒng)產(chǎn)業(yè)產(chǎn)品的維護概念有著很大差別。

1.1軟件與軟件危機(9)

廢棄特性:與硬件不同,軟件并不是由于被“用壞”而被廢棄的

(10)

應(yīng)用特性:軟件的應(yīng)用極為廣泛,如今它已滲入國民經(jīng)濟和國防的各個領(lǐng)域,現(xiàn)已成為信息產(chǎn)業(yè)、先進制造業(yè)和現(xiàn)代服務(wù)業(yè)的核心,占據(jù)了無可取代的地位。1.1軟件與軟件危機軟件危機暴發(fā)于上個世紀六十年代末。主要表現(xiàn)為:軟件的發(fā)展速度遠遠滯后于硬件的發(fā)展速度,不能滿足社會日益增長的軟件需求。軟件開發(fā)周期長、成本高、質(zhì)量差、維護困難。1.1軟件與軟件危機軟件危機典型例子:美國IBM公司在1963年至1966年開發(fā)的IBM360機的操作系統(tǒng)。這個項目的負責(zé)人F.D.Brooks事后總結(jié)了他在組織開發(fā)過程中的沉痛教訓(xùn)時說:

……正像一只逃亡的野獸落到泥潭中做垂死的掙扎,越是掙扎,陷得越深。最后無法逃脫滅頂?shù)臑?zāi)難,……程序設(shè)計工作正像這樣一個泥潭,……一批批程序員被迫在泥潭中拼命掙扎,……誰也沒有料到竟會陷入這樣的困境……1.1軟件與軟件危機具體來說,軟件危機主要有以下一些典型表現(xiàn):對軟件開發(fā)成本和進度的估計常常很不準確。用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件產(chǎn)品的質(zhì)量往往靠不住。軟件常常是不可維護的。軟件通常沒有適當(dāng)?shù)奈臋n資料。軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。軟件開發(fā)生產(chǎn)率提高的速度,既跟不上硬件的發(fā)展速度,也遠遠跟不上計算機應(yīng)用迅速普及深入的趨勢。1.1軟件與軟件危機除了軟件本身的特點,軟件危機發(fā)生的主要原因有:

缺乏軟件開發(fā)的經(jīng)驗和有關(guān)軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作的計劃很難制定。軟件人員與用戶的交流存在障礙,使得獲取的需求不充分或存在錯誤。軟件開發(fā)過程不規(guī)范。如,沒有真正了解用戶的需求就開始編程序。隨著軟件規(guī)模的增大,其復(fù)雜性往往會呈指數(shù)級升高。需要很多人分工協(xié)作,不僅涉及技術(shù)問題,更重要的是必須有科學(xué)嚴格的管理。缺少有效的軟件評測手段,提交用戶的軟件質(zhì)量不能完全保證。1.1軟件與軟件危機徹底消除“軟件就是程序”的錯誤觀念。充分認識到軟件開發(fā)應(yīng)該是一種組織良好、管理嚴密、各類人員協(xié)同配合、共同完成的工程項目。推廣和使用在實踐中總結(jié)出來的開發(fā)軟件的成功技術(shù)、方法和工具。按工程化的原則和方法組織軟件開發(fā)工作。如何擺脫軟件危機?1.1軟件與軟件危機1.2軟件工程及其基本原理軟件工程的概念為了克服軟件危機,1968年10月在北大西洋公約組織(NATO)召開的計算機科學(xué)會議上,F(xiàn)ritzBauer首次提出“軟件工程”的概念,試圖將工程化方法應(yīng)用于軟件開發(fā)。在NATO會議上,F(xiàn)ritzBauer對軟件工程的定義是:“軟件工程就是為了經(jīng)濟地獲得可靠的且能在實際機器上有效地運行的軟件,而建立和使用完善的工程原理。”1993年IEEE給出的定義:“軟件工程是:①把系統(tǒng)的、規(guī)范的、可度量的途徑應(yīng)用于軟件開發(fā)、運行和維護過程,也就是把工程應(yīng)用于軟件;②研究①中提到的途徑。”。1.2軟件工程及其基本原理軟件工程是指導(dǎo)計算機軟件開發(fā)和維護的一門工程學(xué)科。采用工程的概念、原理、技術(shù)和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好技術(shù)結(jié)合起來,以經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效地維護它,這就是軟件工程。1.2軟件工程及其基本原理1.2軟件工程及其基本原理軟件工程的目標軟件工程的目標是運用先進的軟件開發(fā)技術(shù)和管理方法來提高軟件的質(zhì)量和生產(chǎn)率,也就是要以較短的周期、較低的成本生產(chǎn)出高質(zhì)量的軟件產(chǎn)品,并最終實現(xiàn)軟件的工業(yè)化生產(chǎn)。

1.2軟件工程及其基本原理軟件的質(zhì)量特性:功能性、可靠性、可使用性、效率、可維護性和可移植性。功能性是指軟件所實現(xiàn)的功能達到它的設(shè)計規(guī)范和滿足用戶需求的程度;可靠性是指在規(guī)定的時間和條件下,軟件能夠正常維持其工作的能力;可使用性是指為了使用該軟件所需要的能力;效率是指在規(guī)定的條件下用軟件實現(xiàn)某種功能所需要的計算機資源的有效性;可維護性是指當(dāng)環(huán)境改變或軟件運行發(fā)生故障時,為了使其恢復(fù)正常運行所做努力的程度;可移植性是指軟件從某一環(huán)境轉(zhuǎn)移到另一環(huán)境時所做努力的程度。1.2軟件工程及其基本原理質(zhì)量目標之間的關(guān)系(1)關(guān)注大型軟件的構(gòu)造(2)中心課題是控制復(fù)雜性(3)軟件經(jīng)常變化(4)開發(fā)軟件的效率非常重要(5)和諧地合作是開發(fā)軟件的關(guān)鍵(6)軟件必須有效地支持它的用戶(7)在軟件工程領(lǐng)域中是由一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品1.2軟件工程及其基本原理軟件工程的本質(zhì)特性(1)按軟件生存周期分階段制訂計劃并認真實施(2)堅持進行階段評審(3)堅持嚴格的產(chǎn)品控制(4)使用現(xiàn)代軟件開發(fā)技術(shù)(5)明確責(zé)任

(6)用人少而精(7)不斷改進開發(fā)過程1.2軟件工程及其基本原理軟件工程的基本原理1.3軟件生命周期概念

軟件也有一個孕育、誕生、成長、成熟和衰亡的生存過程,我們稱這個過程為軟件生命周期或軟件生存期。軟件生存期由軟件定義、軟件開發(fā)和運行維護3個時期組成,每個時期又可劃分為若干個階段。

1.3軟件生命周期軟件定義時期

主要任務(wù)是解決“做什么”的問題,即確定工程的總目標和可行性;導(dǎo)出實現(xiàn)工程目標應(yīng)使用的策略及系統(tǒng)必須完成的功能;估計完成工程需要的資源和成本;制訂工程進度表。

通常又分為3個階段:問題定義、可行性研究和需求分析。

1.3軟件生命周期軟件開發(fā)時期

主要任務(wù)是解決“如何做”的問題,即具體設(shè)計和實現(xiàn)在前一個時期定義的軟件。

由概要設(shè)計、詳細設(shè)計、編碼和測試4個階段組成。

1.3軟件生命周期軟件運行維護時期主要任務(wù)是使軟件持久地滿足用戶的需要,通常有4類維護活動:改正性維護,也就是診斷和改正在使用過程中發(fā)現(xiàn)的軟件錯誤;適應(yīng)性維護,即修改軟件以適應(yīng)環(huán)境的變化;完善性維護,即根據(jù)用戶的要求改進或擴充軟件,使它更完善;預(yù)防性維護,即修改軟件為將來的維護活動預(yù)先做準備。1.3軟件生命周期開發(fā)過程中的典型文檔①軟件需求規(guī)格說明書:描述將要開發(fā)的軟件做什么。②項目計劃:描述將要完成的任務(wù)及其順序,并估計所需要的時間及工作量。③軟件測試計劃:描述如何測試軟件,使之確保軟件應(yīng)實現(xiàn)規(guī)定的功能,并達到預(yù)期的性能。④軟件設(shè)計說明書:描述軟件的結(jié)構(gòu),包括概要設(shè)計及詳細設(shè)計。⑤用戶手冊:描述如何使用軟件。1.3軟件生命周期各個階段所要完成的基本任務(wù)問題定義與可行性研究本階段要回答的關(guān)鍵問題是“到底要解決什么問題?在成本和時間的限制條件下能否解決問題?是否值得做?”(2)需求分析本階段要回答的關(guān)鍵問題是“目標系統(tǒng)應(yīng)當(dāng)做什么?”(3)軟件設(shè)計設(shè)計是軟件工程的技術(shù)核心。本階段要回答的關(guān)鍵問題是“如何實現(xiàn)目標系統(tǒng)?”1.3軟件生命周期各個階段所要完成的基本任務(wù)(4)程序編碼和單元測試本階段要解決的問題是“正確地實現(xiàn)已做的設(shè)計”,即“如何編寫正確的、可維護的程序代碼?”(5)集成和系統(tǒng)測試測試是控制軟件質(zhì)量的重要手段,本階段的主要任務(wù)是做集成測試和系統(tǒng)測試。(6)軟件運行和維護已交付的軟件投入正式使用,便進入運行階段。這一階段可能持續(xù)若干年。軟件在運行中可能由于多方面的原因,需要對它進行修改。

1.4軟件工程方法學(xué)概念軟件工程包含技術(shù)和管理兩方面的內(nèi)容,是技術(shù)和管理緊密結(jié)合所形成的工程學(xué)科。通常將軟件開發(fā)全過程中使用的一整套技術(shù)方法的集合稱為方法學(xué)(methedology),也稱為范型(paradigm)。目前使用最廣泛的軟件工程方法學(xué):傳統(tǒng)方法(結(jié)構(gòu)化方法),面向?qū)ο蠓椒ā?.4軟件工程方法學(xué)三要素:方法、工具和過程。軟件工程方法為軟件開發(fā)提供了“如何做”的技術(shù);軟件工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)框架,它規(guī)定了完成各項任務(wù)的工作步驟。1.4軟件工程方法學(xué)結(jié)構(gòu)化方法也稱為生命周期方法學(xué)或結(jié)構(gòu)化范型。將軟件生命周期的全過程依次劃分為若干個階段,采用結(jié)構(gòu)化技術(shù)來完成每個階段的任務(wù)。特點:

(1)強調(diào)自頂向下順序地完成軟件開發(fā)的各階段任務(wù);(2)結(jié)構(gòu)化方法要么面向行為,要么面向數(shù)據(jù),缺乏使兩者有機結(jié)合的機制。1.4軟件工程方法學(xué)面向?qū)ο蠓椒ㄊ菍?shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法。軟件開發(fā)過程是多次反復(fù)迭代的演化過程。面向?qū)ο蠓椒ㄔ诟拍詈捅硎痉椒ㄉ系囊恢滦?,保證了各項開發(fā)活動之間的平滑過渡。對于大型、復(fù)雜及交互性比較強的系統(tǒng),使用面向?qū)ο蠓椒ǜ袃?yōu)勢。1.5軟件工程知識體系及知識域介紹軟件工程教育(3個歷史時期)

(1)1978年以前:軟件工程教育以計算機專業(yè)的一門孤立的課程形式存在。

(2)1978—1988年期間:早期的研究生學(xué)位教育,開始建立軟件工程專業(yè)的研究生學(xué)位教育項目。

(3)1988年以后:快速發(fā)展的研究生學(xué)科教育,使軟件工程的理論快速發(fā)展,其中,卡內(nèi)基·梅隆大學(xué)軟件工程研究所(SEI)的影響不可忽視。

1.5軟件工程知識體系及知識域介紹軟件工程知識體軟件工程已從計算機科學(xué)與技術(shù)中脫離出來,逐漸形成了一門獨立的學(xué)科。對其知識體系的研究從20世紀90年代初就開始了。標志是美國Embry-Riddle航空大學(xué)計算與數(shù)學(xué)系ThomasB.Hilburn教授的“軟件工程知識體系指南”(GuidetoSoftwareEngineeringBodyofKnowledge,SWEBOK)研究項目。1.5軟件工程知識體系及知識域介紹軟件工程知識體系指南的目標(1)促使軟件工程本體知識成為世界范圍的共識。(2)澄清軟件工程與其他相關(guān)學(xué)科,如與計算機科學(xué)、項目管理、計算機工程以及計算機數(shù)學(xué)之間的關(guān)系,并且確定軟件工程學(xué)科的范圍。(3)反映軟件工程學(xué)科內(nèi)容的特征。(4)確定軟件工程本體知識的各個專題。(5)為相應(yīng)的課程和職業(yè)資格認證材料的編寫奠定基礎(chǔ)。

1.5軟件工程知識體系及知識域介紹軟件工程知識體系指南的內(nèi)容

SWEBOK指南將軟件工程知識體系劃分為10個知識域(knowledgeareas,KA),分為兩類過程。一類是開發(fā)與維護過程,包括軟件需求、軟件設(shè)計、軟件構(gòu)造、軟件測試和軟件維護;另一類是支持和組織過程,包括軟件配置管理、軟件工程管理、軟件工程過程、軟件工程工具與方法和軟件質(zhì)量。每個知識域還可進一步分解為若干論題。

1.5軟件工程知識體系及知識域介紹軟件工程知識體系指南的內(nèi)容1.5軟件工程知識體系及知識域介紹每個知識域又可分解為若干子知識域,如表所示。1.6軟件產(chǎn)業(yè)的形成與發(fā)展我國軟件產(chǎn)業(yè)的形成

軟件產(chǎn)業(yè)是以開發(fā)、研究、經(jīng)營、銷售軟件產(chǎn)品或軟件服務(wù)為主的企業(yè)組織及其在市場上的相互關(guān)系的集合。軟件產(chǎn)業(yè)是信息產(chǎn)業(yè)的核心,是國民經(jīng)濟基礎(chǔ)性、戰(zhàn)略性產(chǎn)業(yè),直接關(guān)系國家政治、經(jīng)濟和社會的安全。目前我國軟件產(chǎn)業(yè)鏈已經(jīng)初步形成,在其形成的過程中,我國的軟件產(chǎn)業(yè)主要經(jīng)歷了萌芽期、起步期、進入期和發(fā)展期4個階段。進入了2000年以后,中國的軟件企業(yè)開始進入網(wǎng)絡(luò)軟件時期。

1.6軟件產(chǎn)業(yè)的形成與發(fā)展全球軟件產(chǎn)業(yè)的發(fā)展到目前為止,全球軟件產(chǎn)業(yè)的發(fā)展已經(jīng)經(jīng)歷了比較完整的5代。第一代:早期專業(yè)的服務(wù)公司(1949—1959年)第二代:早期軟件產(chǎn)品公司(1959—1969年)第三代:強大的企業(yè)解決方案提供商的出現(xiàn)(1969—1981年)第四代:客戶大眾市場軟件(1981—1994年)第五代:互聯(lián)網(wǎng)增值服務(wù)(1994年至今)

1.6軟件產(chǎn)業(yè)的形成與發(fā)展軟件產(chǎn)業(yè)的發(fā)展模式目前得到公認的產(chǎn)業(yè)發(fā)展模式有美國模式、印度模式、愛爾蘭模式、日本模式等。

美國模式——技術(shù)與服務(wù)領(lǐng)導(dǎo)型美國的軟件產(chǎn)業(yè)主要由3個部分組成。

(1)以商業(yè)銷售或租賃為目的,設(shè)計和生產(chǎn)軟件產(chǎn)品的公司。

(2)開發(fā)因特網(wǎng)和電子商務(wù)技術(shù),提供網(wǎng)上信息和服務(wù)的公司。

(3)專為計算機提供軟件服務(wù)的公司。1.6軟件產(chǎn)業(yè)的形成與發(fā)展軟件產(chǎn)業(yè)的發(fā)展模式印度模式——國際加工服務(wù)型

印度的軟件產(chǎn)業(yè)屬于外向型的產(chǎn)業(yè),以外包服務(wù)為主,軟件企業(yè)對于促進印度的出口起了十分重要的作用。

愛爾蘭模式——生產(chǎn)本地化型根據(jù)歐洲市場20多種不同語言的實際需要,愛爾蘭將自己定位為美國軟件公司產(chǎn)品歐洲化版本的加工基地,吸引跨國軟件公司和國際知名學(xué)府在國內(nèi)建立研發(fā)和分支機構(gòu),實現(xiàn)國外軟件產(chǎn)品本地化。1.6軟件產(chǎn)業(yè)的形成與發(fā)展軟件產(chǎn)業(yè)的發(fā)展模式日本和歐洲模式——嵌入式系統(tǒng)開發(fā)型日本以硬件帶動軟件發(fā)展,其軟件屬于嵌入式的。松下、東芝、日立等跨國公司都有自己的軟件公司,他們研發(fā)的軟件產(chǎn)品往往隨著企業(yè)的各類產(chǎn)品出口世界各地。德國模式——企業(yè)級應(yīng)用及自主研發(fā)型德國軟件產(chǎn)業(yè)可分為“主要軟件企業(yè)”和“輔助軟件企業(yè)”兩類。第一類除從事數(shù)據(jù)處理服務(wù)的企業(yè)外,還包括數(shù)據(jù)處理設(shè)備制造商。第二類是指機械制造、電子、通信、汽車、金融服務(wù)等行業(yè)的企業(yè)。

1.6軟件產(chǎn)業(yè)的形成與發(fā)展軟件工程在軟件產(chǎn)業(yè)中的作用一方面,軟件產(chǎn)業(yè)離不開軟件工程理論及標準的指導(dǎo);另一方面,軟件產(chǎn)業(yè)的發(fā)展需要大量軟件工程人才。軟件工程理論是人們從長期的軟件工程實踐中總結(jié)出來的,對軟件開發(fā)起著重要的指導(dǎo)作用。軟件產(chǎn)業(yè)的發(fā)展需要大量的軟件工程人才。實際情況已經(jīng)證明,軟件產(chǎn)業(yè)的競爭不僅是技術(shù)和資本的競爭,從根本上來講是人才的競爭。

小結(jié)對軟件及軟件工程進行了概要介紹介紹了軟件的作用、概念、特性及軟件危機的主要表現(xiàn);對軟件工程的概念、軟件工程的基本原理以及軟件工程知識體系進行了簡要介紹;最后介紹了軟件產(chǎn)業(yè)的形成與發(fā)展以及軟件工程在軟件產(chǎn)業(yè)中的重要性。小結(jié)介紹了軟件生命周期方法軟件生命周期方法將軟件生命周期劃分為若干個相對獨立的階段,每個階段都完成一定的任務(wù);基本上按順序完成各個階段的任務(wù);在完成每個階段的任務(wù)時采用結(jié)構(gòu)化技術(shù)和適當(dāng)?shù)能浖ぞ?;在每個階段結(jié)束之前都進行嚴格的技術(shù)復(fù)審和管理復(fù)審。

軟件生命周期方法使軟件開發(fā)結(jié)束了之前的混亂狀態(tài)。That'sAll!第一部分軟件工程基礎(chǔ)第2章軟件需求獲取與確定2.1軟件需求獲取的任務(wù)軟件需求(softwarerequirement)是為了解決用戶的問題或?qū)崿F(xiàn)用戶的目標,用戶所需的軟件必須滿足的能力和條件。獲取軟件需求要涉及到多種人員,每種人員對需求的描述是不同的主要的需求種類業(yè)務(wù)需求:描述了使用軟件系統(tǒng)要達到什么目標。系統(tǒng)需求:為了滿足用戶解決問題需要的條件或能力,系統(tǒng)或系統(tǒng)成分必須滿足或具有的條件或能力。功能需求:規(guī)定了軟件必須實現(xiàn)的功能性需求。非功能需求:在滿足功能需求的基礎(chǔ)上,軟件系統(tǒng)還必須具有一定的特性和必須遵循一定的約束,非功能需求描述相應(yīng)的特性和約束。2.2軟件需求的獲取與確認過程2.3快速原型化方法原型法(prototyping)是這樣的一種軟件開發(fā)技術(shù),通過開發(fā)軟件的初期版本讓用戶進行反饋來確定軟件的可行性,研究開發(fā)技術(shù)或開發(fā)過程支持的其他問題??焖僭突╮apidprototyping)是一種原型法,它的重點是在開發(fā)過程的早期就開發(fā)出原型,使反饋和分析提前,以支持開發(fā)過程[1]。2.3快速原型化方法(1)演示原型通過演示原型向用戶展示一些界面,讓用戶判斷基于該原型的系統(tǒng)是否能夠滿足他們的要求。(2)技術(shù)驗證原型該原型在技術(shù)層上實現(xiàn)軟件的部分功能,以驗證技術(shù)上的可行性。2.4基于用況的方法基于用況的方法通過建立用況模型來獲取與確定需求。在建立用況模型時,要確定系統(tǒng)邊界,找出在系統(tǒng)邊界以外與系統(tǒng)交互的事物,然后從這些事物與系統(tǒng)進行交互的角度,通過用況來描述這些事物怎樣使用系統(tǒng),以及系統(tǒng)向它們提供什么功能。2.4.1系統(tǒng)邊界系統(tǒng)邊界是系統(tǒng)的所有內(nèi)部成分與系統(tǒng)以外各種事物的分界線。系統(tǒng)只通過邊界上的有限個接口與外部的系統(tǒng)使用者(人員、設(shè)備或外系統(tǒng))進行交互。

2.4.1系統(tǒng)邊界現(xiàn)實世界中的事物與系統(tǒng)的關(guān)系包括如下幾種情況:■某些事物位于系統(tǒng)邊界內(nèi),作為系統(tǒng)成分。■

某些事物位于系統(tǒng)邊界外,作為參與者?!瞿承┦挛锟赡芗扔幸粋€對象作為其抽象描述,而本身(作為現(xiàn)實世界中的事物)又是在系統(tǒng)邊界以外與系統(tǒng)進行交互的參與者?!瞿承┦挛锛词箤儆趩栴}域,也與系統(tǒng)責(zé)任沒有什么關(guān)系。認識清楚上述事物之間的關(guān)系,也就劃分出了系統(tǒng)邊界。2.4.2參與者參與者(actor)定義了一組在功能上密切相關(guān)的角色,當(dāng)一個事物與系統(tǒng)交互時,該事物可以扮演這樣的角色。參與者的表示法2.4.2參與者識別參與者參與者是在系統(tǒng)之外的與系統(tǒng)進行交互的任何事物。這些事物可為人員、外部系統(tǒng)或設(shè)備。

2.4.2參與者人員 直接使用系統(tǒng)的人員是參與者。這里強調(diào)的是直接使用,而不是間接使用。外部系統(tǒng) 所有與本系統(tǒng)交互的外部系統(tǒng)都是參與者。相對于當(dāng)前在正在開發(fā)的系統(tǒng)而言,外部系統(tǒng)可以是其他子系統(tǒng)、下級系統(tǒng)或上級系統(tǒng),也即任何與它進行協(xié)作的系統(tǒng),但對這樣的系統(tǒng)的開發(fā)并不是開發(fā)本系統(tǒng)的人員的責(zé)任。設(shè)備 識別所有與系統(tǒng)交互的設(shè)備:這樣的設(shè)備與系統(tǒng)相連并向系統(tǒng)提供外界信息,也可能系統(tǒng)要向這樣的設(shè)備提供信息,設(shè)備在系統(tǒng)的控制下運行。2.4.3用況用況(usecase)是描述系統(tǒng)的一項功能的一組動作序列,這樣的動作序列表示參與者與系統(tǒng)間的交互,系統(tǒng)執(zhí)行該動作序列要為參與者產(chǎn)生結(jié)果。用況名用況的表示法2.4.3用況使用用況來可視化、詳述、構(gòu)造和文檔化所希望的系統(tǒng)行為。盡管用況中描述的行為是系統(tǒng)級的,但在用況內(nèi)所描述的交互中的動作應(yīng)該是詳細的,準則是對用況的理解不產(chǎn)生歧義即可。若描述得過于綜合,則不易認識清楚系統(tǒng)的功能。用況描述中的一個動作應(yīng)該描述參與者或系統(tǒng)要完成的交互中的一個步驟。在用況中只描述參與者和系統(tǒng)彼此為對方直接地做了些什么事,不描述怎么做,也不描述間接地做了些什么。系統(tǒng)所產(chǎn)生的結(jié)果,是指系統(tǒng)對參與者的動作要做出響應(yīng)。用況描述的是參與者所使用的一項系統(tǒng)功能,該項功能應(yīng)該相對完整。也即應(yīng)該保證用況是某一項功能的完整的規(guī)格說明,而不能只是其中的一個片段。在用況描述中,由參與者首先發(fā)起交互的可能性較大,但有些交互也可能是由系統(tǒng)首先發(fā)起的。收款員收款輸入開始本次收款的命令;作好收款準備,應(yīng)收款總數(shù)置為0,輸出提示信息;for顧客選購的每種商品do

輸入商品編號;

if此種商品多于一件then

輸入商品數(shù)量

endif;檢索商品名稱及單價;貨架商品數(shù)減去售出數(shù);

if貨架商品數(shù)低于下限then

通知供貨員請求上貨

endif;計算本種商品總價并打印編號、名稱、數(shù)量、單價、總價;總價累加到應(yīng)收款總數(shù);endfor;打印應(yīng)收款總數(shù);輸入顧客交來的款數(shù);計算應(yīng)找回的款數(shù),打印以上兩個數(shù)目,應(yīng)收款數(shù)計入帳冊。例2.4.3用況用況與參與者之間的關(guān)系

一個參與者可以同多個用況交互,一個用況也可以同多個參與者交互。把參與者與用況間的這種交互關(guān)系稱為關(guān)聯(lián)。若沒做具體的規(guī)定,交互是雙向的,即參與者能夠?qū)ο到y(tǒng)進行請求,系統(tǒng)也能夠要求參與者采取某些動作。把參與者和用況之間的關(guān)聯(lián)表示成參與者和用況之間的一條實線。若要明確地指出參與者和用況之間的通訊是單向的,就在關(guān)聯(lián)線上接收通訊的那端加一個箭頭,用以指示方向。

2.4.3用況收款檢查售貨員統(tǒng)計員2.4.3用況1)包含

A……用況XA……用況YA(A)……(A)……用況X用況Y<<include>>

<<include>>

2.4.3用況

從基用況到被包含用況的包含關(guān)系表明:基用況在它內(nèi)部說明的某一(些)位置上顯式地使用供應(yīng)者用況的行為的結(jié)果。通過一個敞開的虛線箭頭表示用況之間的包含關(guān)系,該箭頭從基用況指向被包含的用況。這個箭頭用關(guān)鍵字<<include>>標記。被包含用況基用況<<include>>2.4.3用況2.4.3用況1)擴展

If…AIF…C……IF…AIF…C……用況X用況YACIF…(A)IF…(C)……IF…(A)IF…(C)……用況X用況Y<<extend>>

<<extend>>

2.4.3用況

從基用況到擴展用況的擴展關(guān)系表明:按基用況中指定的擴展條件,把擴展用況的行為插入到由基用況中的擴展點定義的位置。

通過敞開的虛線箭頭表示用況之間的擴展關(guān)系,該箭頭從提供擴展的用況指向基用況。這個箭頭用關(guān)鍵字<<extend>>標記??梢栽谶@個關(guān)鍵字附近表示這個關(guān)系的條件。基用況擴展用況<<extend>>基用況是可單獨存在的,但是在一定的條件下,它的行為可以被另一個用況的行為擴展。在擴展用況中可定義一組行為增量,在其中定義的行為離開基用況單獨是沒意義的。一個擴展用況可以擴展多個用況,一個用況也可以被多個用況擴展,甚至一個擴展用況自身也可以被其他擴展用況來擴展。2.4.3用況

一個擴展點是基用況中的一個位置,在這樣的位置上,如果擴展條件為真,就在其中插入擴展用況中描述的全部動作序列或其中的一部分,并予以執(zhí)行。執(zhí)行完后,基用況繼續(xù)執(zhí)行擴展點下面的行為。如果擴展條件為假,擴展不會發(fā)生。

可以把擴展點列在用況中的一個題頭為“擴展點”的分欄中。以一種適當(dāng)?shù)姆绞浇o出擴展點的位置描述,通常采用普通的文本。

基用況擴展用況2.4.3用況3)泛化用況之間的泛化關(guān)系就像類之間的泛化關(guān)系一樣。子用況繼承父用況的行為和含義;子用況還可以增加或覆蓋父用況的行為;子用況可以出現(xiàn)在父用況出現(xiàn)的任何位置(父和子均有具體的實例)。用一個指向父用況的帶有封閉的空心箭頭的實線來表示用況之間的泛化關(guān)系。

BA捕獲用況1)利用參與者捕獲用況

對所有的參與者(把自己作為參與者),提問下列問題:■

每個參與者的主要任務(wù)是什么?——粗粒度■

它們參加了什么在本質(zhì)上是不同的過程?能完成特定功能的每一項活動明確地是一個用況。這些參與者參與的活動,通常會導(dǎo)致其它用況。

2.4.3用況2)從系統(tǒng)功能角度捕獲用況(1)以窮舉的方式檢查用戶對系統(tǒng)的功能需求是否能在各個用況中體現(xiàn)出來。(2)以窮舉的方式考慮每一個參與者與系統(tǒng)的交互情況,看看每個參與者要求系統(tǒng)提供什么功能,以及參與者的每一項輸入信息將要求系統(tǒng)作出什么反映,進行什么處理。(3)考慮對例外情況的處理。針對用況描述的基本流,要詳盡地考慮各種其他的情況

(4)

一個用況描述一項功能,這項功能不能過大。例如,把一個企業(yè)信息管理系統(tǒng)粗略地分為生產(chǎn)管理、供銷管理、財務(wù)管理和人事管理等幾大方面的功能,就顯得粒度太大了,應(yīng)該再進行細化。(5)一個用況應(yīng)該是一個完整的任務(wù),通常應(yīng)該在一個相對短的時間段內(nèi)完成。如果一個用況的各部分被分配在不同的時間段,尤其被不同的參與者執(zhí)行,最好還是將各部分作為單獨的用況對待。2.4.3用況場景用況抽象3)、使用場景技術(shù)

如果不能順利地確定一個用況的描述,可“角色扮演”技術(shù)。2.4.3用況描述用況用況文檔模板用況名描述:對該用況的一句或兩句的描述。參與者:該用況的參與者。包含:該用況所包含的用況,以及包含它的用況。擴展:該用況可以擴展的用況,以及擴展它的用況。泛化:該用況的子用況和父用況。前置條件:啟動該用況所必須具備的條件。細節(jié):該用況的細節(jié)。(基本流與可選流)后置條件:在該用況結(jié)束時確保成立的條件。例外:在該用況的執(zhí)行的過程中可能引起的例外*。限制:在應(yīng)用中可能出現(xiàn)的任何限制*。注釋:對該用況是重要的任何附加信息。2.4.3用況2.4.4用況圖用況圖是一幅由一組參與者、一組用況以及這些元素之間的關(guān)系組成的圖。處理取款單業(yè)務(wù)員輸入處理取款命令I(lǐng)nclude檢查口令收集客戶的取款單上的信息;加急(擴展點){如果客戶選擇了加急}extend處理加急取款單……檢查口令基本流:系統(tǒng)提示客戶輸入密碼??蛻舭存I輸入密碼,并按“輸入”按鈕確認。系統(tǒng)校驗這個密碼,如果有效,系統(tǒng)承認這次登錄??蛇x流:客戶可以在任何時間按“取消”按鈕取消輸入,然后該用況重新開始??蛇x流:客戶可以在確認之前的任何時刻清除密碼,并重新輸入密碼??蛇x流:如果客戶輸入了一個無效的密碼,用況重新開始。如果連續(xù)3次無效,系統(tǒng)將禁止用戶再次輸入口令。2.5需求管理(1)需求標識和分類 若功能需求的數(shù)目較大且以后往往要發(fā)生變化,需要為每個功能性需求指定一個唯一的標識,為以后的引用需求、變更需求、跟蹤需求和復(fù)用需求提供便利。 最簡單的方式是為每個需求賦予一個唯一的序列號。可以為序列號規(guī)定一個結(jié)構(gòu),如用序列號的前2項描述需求的類型。 也可以按功能需求的抽象層次來進行數(shù)字編號

2.5需求管理若需求量較大,則應(yīng)該進行分類組織,以便編寫文檔和使用。采用數(shù)字編號的方式為需求指定標識時,也可能涉及對需求分類的問題。常見的分類方式有:現(xiàn)場記錄下來的用戶工作場景;從場景抽象出來的用況;業(yè)務(wù)規(guī)則;功能性需求;軟件質(zhì)量的屬性,如安全、可靠和易用等;外部接口需求,如用戶界面、硬件接口與其它軟件的接口等;對設(shè)計與實現(xiàn)等約束;業(yè)務(wù)數(shù)據(jù)項的定義,如數(shù)據(jù)項的數(shù)據(jù)格式、數(shù)據(jù)類型、缺省值等;等等。2.5需求管理(2)變更管理需求變化是不可避免的。在軟件利益相關(guān)者對軟件需求達到共識后,需要定義需求基線。需求基線是經(jīng)過正式評審與同意、用作下一步開發(fā)的基礎(chǔ)的軟件需求。后續(xù)的需求變更必須遵循正式的變更控制過程。按照上述要求,進行需求管理要定義控制需求變更的過程,用以管理所有提議的變更。2.5需求管理(3)需求跟蹤即使進行簡單的需求變更都會影響軟件的其它地方。進行需求追蹤的一種常見做法是建立需求跟蹤矩陣。通常用矩陣的列給出需求項,行給出與該需求項相關(guān)的其它需求項、實現(xiàn)元素或測試用例等??筛鶕?jù)需要定義需求矩陣中的需求關(guān)系,如依賴關(guān)系、從屬關(guān)系、精化關(guān)系和實現(xiàn)關(guān)系等。

2.5需求管理第2部分結(jié)構(gòu)化軟件開發(fā)方法第3章結(jié)構(gòu)化分析建模3.1軟件需求分析階段的任務(wù)可以把軟件需求分析階段的工作分為4個步驟,即獲取需求、分析需求、定義需求和驗證需求,如圖所示。

軟件需求分析階段的工作步驟3.1軟件需求分析階段的任務(wù)需求獲取通過啟發(fā)、引導(dǎo)從客戶(或用戶)那里得到的原始需求是他們的業(yè)務(wù)要求(needs),簡稱為N。這是分析之前獲取的需求,其中可能存在一些實際問題,這些問題只有通過分析才能得到解決,直接把獲取的需求作為軟件設(shè)計階段的依據(jù)將會導(dǎo)致嚴重的后果。

3.1軟件需求分析階段的任務(wù)需求分析

認真研究獲取的需求,必須考慮以下幾方面:

(1)完整性:每項獲取的需求都應(yīng)給出清楚的描述,使得軟件開發(fā)工作能夠取得設(shè)計和實現(xiàn)該功能所需要的全部必要信息。

(2)正確性:獲取的每項需求必須是準確無誤的,并且需求描述無歧義性。

(3)合理性:各項需求之間、軟件需求與系統(tǒng)需求之間應(yīng)是協(xié)調(diào)一致的,不應(yīng)存在矛盾和沖突。

3.1軟件需求分析階段的任務(wù)需求分析

(4)可行性:包括技術(shù)可行性、經(jīng)濟可行性、社會可行性。

(5)充分性:獲取的需求是否全面、周到。

3.1軟件需求分析階段的任務(wù)需求分析由于分析的過程會對獲取的需求做部分調(diào)整,也即從獲取的需求N中去掉了一些a,又補充了一些c,從而得到的是分析的需求R1(b+c)。

3.1軟件需求分析階段的任務(wù)需求定義將已經(jīng)過分析的需求清晰、全面、系統(tǒng)、準確地描述成為正式的文檔,這一步定義需求的工作就是編寫需求規(guī)格說明。

3.1軟件需求分析階段的任務(wù)需求驗證為了確保已定義的需求(需求規(guī)格說明)準確無誤,并能為客戶(或用戶)理解和接受,需要對其進行嚴格的評審。

3.2結(jié)構(gòu)化分析方法簡介結(jié)構(gòu)化分析方法傳統(tǒng)的分析建模方法稱為結(jié)構(gòu)化分析(structuredanalysis,SA)方法。最有代表性的是一種面向數(shù)據(jù)流進行需求分析的方法,最初于20世紀70年代由D.Ross提出,后來又經(jīng)過擴充,形成了今天的結(jié)構(gòu)化分析方法的框架。

3.2結(jié)構(gòu)化分析方法簡介結(jié)構(gòu)化分析模型結(jié)構(gòu)化分析方法是一種建模技術(shù),它建立的分析模型如圖所示。3.3功能建模概念功能建模的思想就是用抽象模型的概念,按照軟件內(nèi)部數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,直到找到滿足功能要求的所有可實現(xiàn)的軟件為止。功能模型用數(shù)據(jù)流圖來描述。3.3功能建模數(shù)據(jù)流圖的基本圖形符號3.3功能建模

多個數(shù)據(jù)流之間的關(guān)系

3.3功能建模環(huán)境圖環(huán)境圖(contextdiagram)也稱為頂層數(shù)據(jù)流圖(或0層數(shù)據(jù)流圖),它僅包括一個數(shù)據(jù)處理過程,也就是要開發(fā)的目標系統(tǒng)。環(huán)境圖的作用是確定系統(tǒng)在其環(huán)境中的位置,通過確定系統(tǒng)的輸入和輸出與外部實體的關(guān)系確定其邊界。3.3功能建模典型的環(huán)境圖招生系統(tǒng)需求描述學(xué)校首先公布招生條件,考生根據(jù)自己的條件報名,之后系統(tǒng)進行資格審查,并給出資格審查信息;對于資格審查合格的考生可以參加答卷,系統(tǒng)根據(jù)學(xué)校提供的試題及答案進行自動判卷,并給出分數(shù)及答題信息,供考生查詢;最后系統(tǒng)根據(jù)學(xué)校的錄取分數(shù)線進行錄取,并將錄取信息發(fā)送給考生。3.3功能建模招生系統(tǒng)的環(huán)境圖3.3功能建模數(shù)據(jù)流圖的分層對于稍微復(fù)雜一些的實際問題,在數(shù)據(jù)流圖上常常出現(xiàn)十幾個甚至幾十個加工,這樣的數(shù)據(jù)流圖看起來不直觀,不易理解,分層的數(shù)據(jù)流圖能很好地解決這一問題。按照系統(tǒng)的層次結(jié)構(gòu)進行逐步分解,并以分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系,能清楚地表達和容易理解整個系統(tǒng)。

3.3功能建模招生系統(tǒng)的分層數(shù)據(jù)流圖

3.3功能建模數(shù)據(jù)流圖的分層示意圖

3.3功能建模實例研究銀行儲蓄系統(tǒng)的業(yè)務(wù)流程:儲戶填寫的存款單或取款單由業(yè)務(wù)員鍵入系統(tǒng);如果是存款則系統(tǒng)記錄存款人姓名、住址(或電話號碼)、身份證號碼、存款類型、存款日期、到期日期、利率、密碼(可選)等信息,并印出存單給儲戶;如果是取款而且開戶時留有密碼,則系統(tǒng)首先核對儲戶密碼,若密碼正確或存款時未留密碼,則系統(tǒng)計算利息并印出利息清單給儲戶。要求畫出分層的數(shù)據(jù)流圖,并細化到2層數(shù)據(jù)流圖。3.3功能建模(1)識別外部實體及輸入輸出數(shù)據(jù)流。外部實體:儲戶、業(yè)務(wù)員。輸入數(shù)據(jù):如果需要儲戶輸入密碼,儲戶才直接與系統(tǒng)進行交互。儲戶填寫的存款或取款信息通過業(yè)務(wù)員鍵入系統(tǒng),可以將存款及取款信息抽象為事務(wù)。輸出數(shù)據(jù):存款單,利息清單。

3.3功能建模(2)畫出環(huán)境圖(頂層數(shù)據(jù)流圖)

3.3功能建模(3)畫出一層數(shù)據(jù)流圖

3.3功能建模(4)畫出二層數(shù)據(jù)流圖對一層圖中的“處理存款”及“處理取款”進行進一步分解,得到二層數(shù)據(jù)流圖,即處理存款的數(shù)據(jù)流圖和處理取款的數(shù)據(jù)流圖。

處理存款的數(shù)據(jù)流圖3.3功能建模(4)畫出二層數(shù)據(jù)流圖處理取款的數(shù)據(jù)流圖3.4數(shù)據(jù)建模在結(jié)構(gòu)化分析方法中,使用實體—關(guān)系建模技術(shù)來建立數(shù)據(jù)模型。這種技術(shù)是在較高的抽象層次(概念層)上對數(shù)據(jù)庫結(jié)構(gòu)進行建模的流行技術(shù)。實體—關(guān)系模型表示為可視化的實體—關(guān)系圖(entity-relationshipdiagram,ERD),也稱為ER圖。ER圖中僅包含3種相互關(guān)聯(lián)的元素:數(shù)據(jù)對象(實體)、描述數(shù)據(jù)對象的屬性及數(shù)據(jù)對象彼此間相互連接的關(guān)系。

3.4數(shù)據(jù)建模數(shù)據(jù)對象數(shù)據(jù)對象是目標系統(tǒng)所需要的復(fù)合信息的表示,所謂復(fù)合信息是具有若干不同屬性的信息。在ER圖中用矩形表示數(shù)據(jù)對象。在實際問題中,數(shù)據(jù)對象(實體)可以是外部實體、事物、角色、行為或事件、組織單位、地點或結(jié)構(gòu)等。

3.4數(shù)據(jù)建模屬性屬性定義數(shù)據(jù)對象的特征,如數(shù)據(jù)對象學(xué)生的學(xué)號、姓名、性別、專業(yè)等,課程的課程編號、課程名稱、學(xué)分等。在ER圖中用橢圓或圓角矩形表示屬性,并用無向邊將屬性與相關(guān)的數(shù)據(jù)對象連接在一起。

3.4數(shù)據(jù)建模關(guān)系不同數(shù)據(jù)對象的實例之間是有關(guān)聯(lián)關(guān)系的,在ER圖上用無向邊表示。在無向邊的兩端應(yīng)標識出關(guān)聯(lián)實例的數(shù)量,也稱為關(guān)聯(lián)的重數(shù)。從關(guān)聯(lián)重數(shù)的角度可以將關(guān)聯(lián)分為3種。(1)一對一(1:1)關(guān)聯(lián)(2)一對多(1:m)關(guān)聯(lián)(3)多對多(m:n)關(guān)聯(lián)實例關(guān)聯(lián)還有“必須”和“可選”之分。

3.4數(shù)據(jù)建模關(guān)聯(lián)數(shù)量的表示在ER圖中用圓圈表示所關(guān)聯(lián)的實例是可選的,隱含表示“0”,沒有出現(xiàn)圓圈就意味著是必須的。出現(xiàn)在連線上的短豎線可以看成是“1”。

3.4數(shù)據(jù)建模關(guān)聯(lián)關(guān)系舉例3.4數(shù)據(jù)建模關(guān)系的屬性關(guān)系本身也可能有屬性,這在多對多的關(guān)系中尤其常見,如學(xué)生和課程之間的關(guān)系可起名為“選課”,其屬性應(yīng)該有學(xué)期、成績等。關(guān)系屬性的表示:在表示關(guān)系的無向邊上再加一個菱形框,并在菱形框中標明關(guān)系的名字,關(guān)系的屬性同樣用橢圓形或圓角矩形表示,并用無向邊將關(guān)系與其屬性連接起來。

3.4數(shù)據(jù)建模關(guān)系的屬性3.4數(shù)據(jù)建模銀行儲蓄系統(tǒng)的ER圖3.5行為建模狀態(tài)轉(zhuǎn)換圖(簡稱狀態(tài)圖)通過描繪系統(tǒng)的狀態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件,來表示系統(tǒng)的行為。狀態(tài)圖中使用的主要符號如圖所示。3.5行為建模狀態(tài)狀態(tài)是任何可以被觀察到的系統(tǒng)行為模式,一個狀態(tài)代表系統(tǒng)的一種行為模式,狀態(tài)規(guī)定了系統(tǒng)對事件的響應(yīng)方式。狀態(tài)可能有:初態(tài)(初始狀態(tài))、終態(tài)(最終狀態(tài))和中間態(tài)。在一張狀態(tài)圖中只能有一個初態(tài),而終態(tài)則可以有多個,也可以沒有。

3.5行為建模狀態(tài)的表示:初態(tài)用實心圓表示,終態(tài)用牛眼圖形表示,中間態(tài)用圓角矩形表示。3.5行為建模狀態(tài)轉(zhuǎn)換狀態(tài)圖中兩個狀態(tài)之間帶箭頭的連線稱為狀態(tài)轉(zhuǎn)換。狀態(tài)的變遷通常是由事件觸發(fā)的,在這種情況下應(yīng)在表示狀態(tài)轉(zhuǎn)換的箭頭線上標出觸發(fā)轉(zhuǎn)換的事件表達式。如果在箭頭線上未標明事件,則表示在源狀態(tài)的內(nèi)部活動執(zhí)行完之后自動觸發(fā)轉(zhuǎn)換。3.5行為建模狀態(tài)轉(zhuǎn)換下圖為計算機應(yīng)用軟件的啟動過程,在這個過程中沒有外部事件觸發(fā),每個狀態(tài)下的活動完成時,狀態(tài)發(fā)生轉(zhuǎn)換。

3.5行為建模事件事件是在某個特定時刻發(fā)生的事情,它是對引起系統(tǒng)做動作或從一個狀態(tài)轉(zhuǎn)換到另一個狀態(tài)的外部事件的抽象。事件表達式的語法如下:

事件說明(守衛(wèi)條件)/動作表達式(1)事件說明的語法如下:

事件名(參數(shù)表)(2)守衛(wèi)條件是一個布爾表達式。如果同時使用守衛(wèi)條件和事件說明,則當(dāng)且僅當(dāng)事件發(fā)生且布爾表達式成立時,狀態(tài)轉(zhuǎn)換才發(fā)生。如果只有守衛(wèi)條件沒有事件說明,則只要守衛(wèi)條件為真,狀態(tài)轉(zhuǎn)換就發(fā)生。(3)動作表達式是一個過程表達式,當(dāng)狀態(tài)轉(zhuǎn)換開始時執(zhí)行該表達式。3.5行為建模存款過程的狀態(tài)圖(考慮新開戶)3.5行為建模取款過程的狀態(tài)圖3.6數(shù)據(jù)字典數(shù)據(jù)字典以詞條方式定義在數(shù)據(jù)模型、功能模型和行為模型中出現(xiàn)的數(shù)據(jù)對象及控制信息的特性,給出它們的準確定義,包括數(shù)據(jù)流、加工、數(shù)據(jù)文件、數(shù)據(jù)元素,以及數(shù)據(jù)源點、數(shù)據(jù)匯點等。

數(shù)據(jù)字典成為把3種分析模型黏合在一起的“黏合劑”,是分析模型的“核心”。3.6數(shù)據(jù)字典詞條描述對于在數(shù)據(jù)流圖中每一個被命名的圖形元素均加以定義;其內(nèi)容包括圖形元素的名字,圖形元素的別名或編號,圖形元素類別(如加工、數(shù)據(jù)流、數(shù)據(jù)文件、數(shù)據(jù)元素、數(shù)據(jù)源點或數(shù)據(jù)匯點等)、描述、定義、位置等。

3.6數(shù)據(jù)字典數(shù)據(jù)流詞條數(shù)據(jù)流是數(shù)據(jù)結(jié)構(gòu)在系統(tǒng)內(nèi)傳播的路徑,數(shù)據(jù)流詞條應(yīng)包括以下幾項內(nèi)容。①數(shù)據(jù)流名:要求與數(shù)據(jù)流圖中該圖形元素的名字一致。②簡述:簡要介紹它產(chǎn)生的原因和結(jié)果。③組成:數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu)。④來源:數(shù)據(jù)流來自哪個加工或作為哪個數(shù)據(jù)源的外部實體。⑤去向:數(shù)據(jù)流流向哪個加工或作為哪個數(shù)據(jù)匯點的外部實體。⑥流通量:單位時間數(shù)據(jù)的流通量。⑦峰值:流通量的極限值。3.6數(shù)據(jù)字典數(shù)據(jù)元素詞條數(shù)據(jù)流圖中的每個數(shù)據(jù)結(jié)構(gòu)都是由數(shù)據(jù)元素構(gòu)成的,數(shù)據(jù)元素是數(shù)據(jù)處理中最小的、不可再分的單位,它直接反映事物的某一特征。①類型:數(shù)據(jù)元素分為數(shù)字型與文字型。數(shù)字型又分為離散值和連續(xù)值,文字的類型用編碼類型和長度區(qū)分。②取值范圍:離散值的取值或是枚舉的(如3,17,21),或是介于上下界的一組數(shù)(如2..100);連續(xù)值一般是有取值范圍的實數(shù)集(如0.0..100.0)。對于文字型,文字的取值需加以定義。③相關(guān)的數(shù)據(jù)元素及數(shù)據(jù)結(jié)構(gòu)。3.6數(shù)據(jù)字典數(shù)據(jù)存儲文件詞條數(shù)據(jù)存儲文件是數(shù)據(jù)保存的地方。一個數(shù)據(jù)存儲文件詞條應(yīng)有以下幾項內(nèi)容。①文件名:要求與數(shù)據(jù)流圖中該圖形元素的名字一致。②簡述:簡要介紹存放的是什么數(shù)據(jù)。③組成:文件的數(shù)據(jù)結(jié)構(gòu)。④輸入:從哪些加工獲取數(shù)據(jù)。⑤輸出:由哪些加工使用數(shù)據(jù)。⑥存取方式:分為順序、直接、關(guān)鍵碼等不同存取方式。⑦存取頻率:單位時間的存取次數(shù)。3.6數(shù)據(jù)字典加工詞條加工可以使用諸如判定表、判定樹、結(jié)構(gòu)化語言等形式表達,主要描述如下。①加工名:要求與數(shù)據(jù)流圖中該圖形元素的名字一致。②編號:用以反映該加工的層次和父子關(guān)系。③簡述:加工邏輯及功能簡述。④輸入:加工的輸入數(shù)據(jù)流。⑤輸出:加工的輸出數(shù)據(jù)流。⑥加工邏輯:簡述加工程序和加工順序。3.6數(shù)據(jù)字典數(shù)據(jù)源點及數(shù)據(jù)匯點詞條對于一個數(shù)據(jù)處理系統(tǒng)來說,數(shù)據(jù)源點和數(shù)據(jù)匯點應(yīng)比較少。

①名稱:要求與數(shù)據(jù)流圖中該外部實體的名字一致。②簡述:簡要描述是什么外部實體。③有關(guān)數(shù)據(jù)流:該實體與系統(tǒng)交互時涉及哪些數(shù)據(jù)流。④數(shù)目:該實體與系統(tǒng)交互的次數(shù)。3.6數(shù)據(jù)字典數(shù)據(jù)結(jié)構(gòu)描述在數(shù)據(jù)字典的編制中,分析員最常用的描述數(shù)據(jù)結(jié)構(gòu)的方式有定義式、Warnier圖等。定義式。在數(shù)據(jù)流圖中,數(shù)據(jù)流和數(shù)據(jù)文件都具有一定的數(shù)據(jù)結(jié)構(gòu),因此,必須以一種清晰、準確、無二義性的方式來描述數(shù)據(jù)結(jié)構(gòu)。Warnier圖。Warnier圖是表示數(shù)據(jù)結(jié)構(gòu)的另一種圖形工具,它用樹形結(jié)構(gòu)來描繪數(shù)據(jù)結(jié)構(gòu)。3.6數(shù)據(jù)字典定義式中的符號3.6數(shù)據(jù)字典定義式舉例:存折3.6數(shù)據(jù)字典存折的定義格式存折=戶名+所號+賬號+開戶日+性質(zhì)+(印密)+

1{存取行}50所號=“001”..“999”戶名=2{字母}24賬號=“00000000001”..“99999999999”開戶日=年+月+日性質(zhì)=“1”..“6”

印密=(“0”|“000001”..“999999”)

存取行=日期+(摘要)+支出+存入+余額+操作+復(fù)核日期=年+月+日年=“0001”..“9999”月=“01”..“12”日=“01”..“31”3.6數(shù)據(jù)字典存折的定義格式摘要=1{字母}4支出=金額存入=金額余額=金額金額=“0000000.01”..“9999999.99”操作=“00001”..“99999”復(fù)核=“00001”..“99999”字母=[“a”..“z”|“A”..“Z”]3.6數(shù)據(jù)字典Warnier圖舉例:存折3.7加工規(guī)格說明在對數(shù)據(jù)流圖的分解中,位于層次樹最低層的加工也稱為基本加工或原子加工,對于每一個基本加工都需要進一步說明,這稱為加工規(guī)格說明。在編寫基本加工的規(guī)格說明時,主要目的是要表達“做什么”,而不是“怎樣做”。3.7加工規(guī)格說明加工規(guī)格說明應(yīng)滿足如下的要求:(1)對數(shù)據(jù)流圖的每一個基本加工,必須有一個加工規(guī)格說明。(2)加工規(guī)格說明必須描述基本加工如何把輸入數(shù)據(jù)流變換為輸出數(shù)據(jù)流的加工規(guī)則。(3)加工規(guī)格說明必須描述實現(xiàn)加工的策略而不是實現(xiàn)加工的細節(jié)。(4)加工規(guī)格說明中包含的信息應(yīng)是充足的,完備的,有用的,沒有重復(fù)的多余信息。

3.7加工規(guī)格說明決策表決策表由4個部分組成:左上部分是條件茬,在此區(qū)域列出了各種可能的單個條件;左下部分是動作茬,在此區(qū)域列出了可能采取的單個動作;右上部分是條件項,在此區(qū)域列出了針對各種條件的每一組條件取值的組合;右下部分是動作項,這些動作項與條件項緊密相關(guān),它指出了在條件項的各組取值的組合情況下應(yīng)采取的動作。3.7加工規(guī)格說明決策表舉例商店業(yè)務(wù)處理系統(tǒng)中“檢查訂貨單”的決策表。3.7加工規(guī)格說明決策表的改進

如果表中有兩條或更多的處理規(guī)則具有相同的動作,并且其條件項之間存在著某種關(guān)系,就可設(shè)法將它們合并。

3.7加工規(guī)格說明建立決策表的步驟(1)列出與一個具體過程(或模塊)有關(guān)的所有處理。(2)列出過程執(zhí)行期間的所有條件(或所有判斷)。(3)將特定條件取值組合與特定的處理相匹配,消去不可能發(fā)生的條件取值組合。(4)將右部每一縱列規(guī)定為一個處理規(guī)則,即對于某一條件取值組合將有什么動作。3.7加工規(guī)格說明決策樹決策樹(decisiontree)也是用來表達加工邏輯的一種工具,有時侯它比決策表更直觀。檢查訂貨單的決策樹

3.8需求規(guī)格說明需求分析階段的重要任務(wù)之一是根據(jù)分析的結(jié)果編寫需求規(guī)格說明,經(jīng)過嚴格評審并得到用戶確認之后,作為這個階段的最終成果。按照國家標準GB/T8567—2006《計算機軟件文檔編制規(guī)范》,涉及需求規(guī)格說明的文檔有“軟件需求規(guī)格說明(SRS)”、“數(shù)據(jù)需求說明(DRD)”等。小結(jié)傳統(tǒng)軟件工程方法學(xué)使用結(jié)構(gòu)化分析技術(shù)完成用戶需求的分析工作。需求分析是發(fā)現(xiàn)、求精、建模、規(guī)格說明和復(fù)審的過程。為了更好地理解問題,人們常常采用建立模型的方法,結(jié)構(gòu)化分析實質(zhì)上就是一種建?;顒?,在需求分析階段通常建立數(shù)據(jù)模型、功能模型和行為模型。That'sAll!第2部分結(jié)構(gòu)化軟件開發(fā)方法第4章總體設(shè)計4.1軟件設(shè)計的概念及目標軟件設(shè)計的概念

設(shè)計是一項核心的工程活動。在20世紀90年代早期,Lotus1-2-3的發(fā)明人MitchKapor在Dr.Dobbs雜志上發(fā)表了“軟件設(shè)計宣言”,其中指出:“什么是設(shè)計?設(shè)計是你站在兩個世界——技術(shù)世界和人類的目標世界——而你嘗試將這兩個世界結(jié)合在一起……”。4.1軟件設(shè)計的概念及目標軟件設(shè)計的概念

羅馬建筑批評家Vitruvius提出了這樣一個觀念:“設(shè)計良好的建筑應(yīng)該展示出堅固、適用和令人賞心悅目”。4.1軟件設(shè)計的概念及目標軟件設(shè)計的目標軟件設(shè)計的目標涉及性能、可靠性、成本、維護等多個方面的目標。一般來說,可以從需求規(guī)格說明書中選擇重要的質(zhì)量屬性,作為設(shè)計目標,如性能目標、可靠性目標等,而成本和維護方面往往需要從客戶和供應(yīng)商那里得到。4.1軟件設(shè)計的概念及目標性能準則

性能準則包括對系統(tǒng)速度和空間的需求。4.1軟件設(shè)計的概念及目標可靠性準則可靠性準則決定了對減少系統(tǒng)崩潰及隨后所造成危害所做的努力程度。4.1軟件設(shè)計的概念及目標成本準則成本準則包括開發(fā)、配置和管理系統(tǒng)的成本。成本準則不僅包括設(shè)計上的考慮,還包括管理上的考慮。4.1軟件設(shè)計的概念及目標維護準則護準則確定在完成開發(fā)后再改變系統(tǒng)的困難程度。4.1軟件設(shè)計的概念及目標最終用戶準則最終用戶準則包括從用戶視點出發(fā)所需的屬性,但并沒有覆蓋性能準則和可靠性準則。

4.1軟件設(shè)計的概念及目標設(shè)計目標的某些權(quán)衡空間與速度交付時間與功能交付時間與質(zhì)量交付時間與人員配置

4.2軟件設(shè)計的任務(wù)軟件設(shè)計的主要任務(wù)是要解決如何做的問題,要在需求分析的基礎(chǔ)上,建立各種設(shè)計模型,并通過對設(shè)計模型的分析和評估,來確定這些模型是否能夠滿足需求。軟件設(shè)計是將用戶需求準確地轉(zhuǎn)化成為最終的軟件產(chǎn)品的唯一途徑,在需求到構(gòu)造之間起到了橋梁作用。在軟件設(shè)計階段,往往存在多種設(shè)計方案,通常需要在多種設(shè)計方案之中進行決策和折中,并使用選定的方案進行后續(xù)的開發(fā)活動。4.2軟件設(shè)計的任務(wù)軟件設(shè)計的階段與任務(wù)從工程管理的角度,可以將軟件設(shè)計分為概要設(shè)計階段和詳細設(shè)計階段。從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計劃分為體系結(jié)構(gòu)設(shè)計、數(shù)據(jù)設(shè)計、接口設(shè)計和過程設(shè)計4部分;面向?qū)ο蠓椒▌t將軟件設(shè)計劃分為體系結(jié)構(gòu)設(shè)計、類設(shè)計/數(shù)據(jù)設(shè)計、接口設(shè)計和構(gòu)件級設(shè)計4部分。4.2軟件設(shè)計的任務(wù)軟件設(shè)計的階段與任務(wù)從管理和技術(shù)兩個不同的角度對設(shè)計的認識。4.2軟件設(shè)計的任務(wù)軟件設(shè)計的階段與任務(wù)體系結(jié)構(gòu)設(shè)計:體系結(jié)構(gòu)設(shè)計定義軟件的主要結(jié)構(gòu)元素及其之間的關(guān)系。類設(shè)計:類設(shè)計對分析階段所建立的分析類模型進行細化,轉(zhuǎn)化為設(shè)計類的實現(xiàn)及軟件實現(xiàn)所要求的數(shù)據(jù)結(jié)構(gòu)。

數(shù)據(jù)設(shè)計:傳統(tǒng)方法主要根據(jù)需求階段所建立的實體—關(guān)系圖(ER圖)來確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)及數(shù)據(jù)庫的表結(jié)構(gòu)。4.2軟件設(shè)計的任務(wù)軟件設(shè)計的階段與任務(wù)接口設(shè)計:接口設(shè)計描述用戶界面,軟件和其他硬件設(shè)備、其他軟件系統(tǒng)及使用人員的外部接口,以及各種構(gòu)件之間的內(nèi)部接口。構(gòu)件級設(shè)計:構(gòu)件級設(shè)計將軟件體系結(jié)構(gòu)的結(jié)構(gòu)元素變換為對軟件構(gòu)件的過程性描述。過程設(shè)計:過程設(shè)計的主要工作是確定軟件各個組成部分內(nèi)的算法及內(nèi)部數(shù)據(jù)結(jié)構(gòu),并選定某種過程的表達形式來描述各種算法。4.2軟件設(shè)計的任務(wù)結(jié)構(gòu)化設(shè)計與結(jié)構(gòu)化分析的關(guān)系結(jié)構(gòu)化分析的結(jié)果為結(jié)構(gòu)化設(shè)計提供了最基本的輸入信息。兩者的關(guān)系如圖所示。4.2軟件設(shè)計的任務(wù)結(jié)構(gòu)化設(shè)計方法的實施要點(1)研究、分析和審查數(shù)據(jù)流圖。(2)根據(jù)數(shù)據(jù)流圖決定問題的類型:變換型和事務(wù)型。針對兩種不同的類型分別進行分析處理。(3)由數(shù)據(jù)流圖推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖。(4)利用一些啟發(fā)式原則來改進系統(tǒng)的初始結(jié)構(gòu)圖,直到得到符合要求的結(jié)構(gòu)圖為止。(5)根據(jù)分析模型中的實體關(guān)系圖和數(shù)據(jù)字典進行數(shù)據(jù)設(shè)計,包括數(shù)據(jù)庫設(shè)計或數(shù)據(jù)文件的設(shè)計。(6)在上面設(shè)計的基礎(chǔ)上,并依據(jù)分析模型中的加工規(guī)格說明、狀態(tài)轉(zhuǎn)換圖進行過程設(shè)計。(7)制定測試計劃。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)模塊結(jié)構(gòu)及表示一般通過功能劃分過程來完成軟件結(jié)構(gòu)設(shè)計。功能劃分過程從需求分析確立的目標系統(tǒng)的模型出發(fā),對整個問題進行分割,使其每一部分用一個或幾個軟件模塊加以解決,整個問題就解決了。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)模塊一個軟件系統(tǒng)通常由很多模塊組成,結(jié)構(gòu)化程序設(shè)計中的函數(shù)和子程序都可稱為模塊,它是程序語句按邏輯關(guān)系建立起來的組合體。模塊用矩形框表示,并用模塊的名字標記它。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)模塊的分類4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)模塊的結(jié)構(gòu)模塊結(jié)構(gòu)最普通的形式就是樹狀結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu),如圖所示。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)圖結(jié)構(gòu)圖(structurechart,SC)是精確表達模塊結(jié)構(gòu)的圖形表示工具。

(1)模塊的調(diào)用關(guān)系和接口:在結(jié)構(gòu)圖中,兩個模塊之間用單向箭頭連接。(2)模塊間的信息傳遞:當(dāng)一個模塊調(diào)用另一個模塊時,調(diào)用模塊把數(shù)據(jù)或控制信息傳送給被調(diào)用模塊,以使被調(diào)用模塊能夠運行。

4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)圖模塊間的調(diào)用關(guān)系和接口表示4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)圖(3)條件調(diào)用和循環(huán)調(diào)用:當(dāng)模塊A有條件地調(diào)用另一個模塊B時,在模塊A的箭頭尾部標以一個菱形符號;當(dāng)一個模塊A反復(fù)地調(diào)用模塊C和模塊D時,在調(diào)用箭頭尾部則標以一個弧形符號。

4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)圖(4)結(jié)構(gòu)圖的形態(tài)特征。在圖中,上級模塊調(diào)用下級模塊,它們之間存在主從關(guān)系。相關(guān)概念:寬度、深度、扇入、扇出。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)及表示數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的各個元素之間邏輯關(guān)系的一種表示。

數(shù)據(jù)結(jié)構(gòu)設(shè)計應(yīng)確定數(shù)據(jù)的組織、存取方式、相關(guān)程度,以及信息的不同處理方法。數(shù)據(jù)結(jié)構(gòu)的組織方法和復(fù)雜程度可以靈活多樣,但典型的數(shù)據(jù)結(jié)構(gòu)種類是有限的,它們是構(gòu)成一些更復(fù)雜結(jié)構(gòu)的基本構(gòu)件塊。4.3模塊結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)典型的數(shù)據(jù)結(jié)構(gòu)4.4創(chuàng)建良好設(shè)計的原則分而治之和模塊化

分而治之是人們解決大型復(fù)雜問題時通常采用的策略,將大型復(fù)雜的問題分解為許多容易解決的小問題,原來的問題也就容易解決了。軟件的體系結(jié)構(gòu)設(shè)計和模塊化設(shè)計都是分而治之策略的具體表現(xiàn)。4.4創(chuàng)建良好設(shè)計的原則模塊化模塊化是將整體軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責(zé)。每個模塊可獨立地開發(fā)、測試,最后組裝成完整的軟件。

4.4創(chuàng)建良好設(shè)計的原則模塊化盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。模塊大小、模塊數(shù)目與成本的關(guān)系如下圖。

4.4創(chuàng)建良好設(shè)計的原則模塊獨立性模塊的獨立性是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他的模塊的接口是簡單的。

一般采用兩個準則度量模塊獨立性,即模塊間的耦合和模塊的內(nèi)聚。耦合是模塊之間的相對獨立性(互相連接的緊密程度)的度量。內(nèi)聚是模塊功能強度(模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。模塊獨立性比較強的模塊應(yīng)是高度內(nèi)聚、松散耦合的模塊。

4.4創(chuàng)建良好設(shè)計的原則松散耦合

耦合性是程序結(jié)構(gòu)中各個模塊之間相互關(guān)聯(lián)的度量。它取決于各個模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。一般模塊之間可能的連接方式有7種,構(gòu)成耦合性的7種類型,它們之間的關(guān)系如圖所示。4.4創(chuàng)建良好設(shè)計的原則(1)非直接耦合。如果兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的,這就是非直接耦合。這種耦合的模塊獨立性最強。(2)數(shù)據(jù)耦合。如果一個模塊訪問另一個模塊時,彼此之間是通過數(shù)據(jù)參數(shù)(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來交換輸入、輸出信息的,則稱這種耦合為數(shù)據(jù)耦合。(3)標記耦合。如果一組模塊通過參數(shù)表傳遞記錄信息,就是標記耦合。

4.4創(chuàng)建良好設(shè)計的原則(4)控制耦合。如果一個模塊通過傳送開關(guān)、標志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合,如圖所示。(5)外部耦合。一組模塊都訪問同一全局簡單變量而不是同一全局數(shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。

4.4創(chuàng)建良好設(shè)計的原則(6)公共耦合。若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共耦合的復(fù)雜程度隨耦合模塊的個數(shù)增加而顯著增加。如圖所示,若只是兩個模塊之間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。4.4創(chuàng)建良好設(shè)計的原則(7)內(nèi)容耦合。如果發(fā)生下列情形,兩個模塊之間就發(fā)生了內(nèi)容耦合,如圖所示。4.4創(chuàng)建良好設(shè)計的原則高度內(nèi)聚

內(nèi)聚程度高的模塊應(yīng)當(dāng)只完成軟件過程中的一個單一的任務(wù)。一般模塊的內(nèi)聚性分為7種類型,它們的關(guān)系如圖所示。4.4創(chuàng)建良好設(shè)計的原則(1)巧合內(nèi)聚。又稱為偶然內(nèi)聚,當(dāng)模塊內(nèi)各部分之間沒有聯(lián)系,或者即使有聯(lián)系,這種聯(lián)系也很松散,則稱這種模塊為巧合內(nèi)聚模塊,它是內(nèi)聚程度最低的模塊。

4.4創(chuàng)建良好設(shè)計的原則(2)邏輯內(nèi)聚。這種模塊把幾種相關(guān)的功能組合在一起,每次被調(diào)用時,由傳送給模塊的判定參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。4.4創(chuàng)建良好設(shè)計的原則(3)時間內(nèi)聚。又稱經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行,如初始化模塊和終止模塊。(4)過程內(nèi)聚。如果一個模塊內(nèi)的處理是相關(guān)的,而且必須以特定次序執(zhí)行,則稱這個模塊為過程內(nèi)聚模塊。(5)通信內(nèi)聚。如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。

4.4創(chuàng)建良好設(shè)計的原則(6)信息內(nèi)聚。這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點。4.4創(chuàng)建良好設(shè)計的原則(7)功能內(nèi)聚。一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的,則稱該模塊為功能內(nèi)聚模塊。

4.4創(chuàng)建良好設(shè)計的原則提高抽象層次在進行軟件設(shè)計時,設(shè)計開始時應(yīng)盡量提高軟件的抽象層次,按抽象級別從高到低進行軟件設(shè)計。將軟件的體系結(jié)構(gòu)按自頂向下方式,對各個層次的過程細節(jié)和數(shù)據(jù)細節(jié)逐層細化,直到用程序設(shè)計語言的語句能夠?qū)崿F(xiàn)為止,從而最后確立整個系統(tǒng)的體系結(jié)構(gòu)。4.4創(chuàng)建良好設(shè)計的原則復(fù)用性設(shè)計復(fù)用是指同一實體不做修改或稍加修改就可以多次重復(fù)使用,將復(fù)用的思想用于軟件開發(fā),稱為軟件復(fù)用。在軟件的設(shè)計階段,就要考慮軟件復(fù)用問題,并進行復(fù)用性設(shè)計。復(fù)用性設(shè)計有兩方面的含義:一是盡量使用已有的構(gòu)件;二是如果確實需要創(chuàng)建新的構(gòu)件,則在設(shè)計時應(yīng)該考慮將來的可重復(fù)使用性。4.4創(chuàng)建良好設(shè)計的原則靈活性設(shè)計在設(shè)計中引入靈活性的方法如下。(1)降低耦合并提高內(nèi)聚(易于提高替換能力);(2)建立抽象(創(chuàng)建有多態(tài)操作的接口和父類);(3)不要將代碼寫死(消除代碼中的常數(shù));(4)拋出異常(由操作的調(diào)用者處理異常);(5)使用并創(chuàng)建可復(fù)用的代碼。4.4創(chuàng)建良好設(shè)計的原則預(yù)防過期

在設(shè)計中應(yīng)遵循的預(yù)防過期的規(guī)則如下:(1)避免使用早期發(fā)布的技術(shù)。(2)避免使用針對特定環(huán)境的軟件庫。(3)避免使用軟件庫中文檔不全或很少使用的功能。(4)避免使用小公司或可能不提供長期支持的公司提供的可復(fù)用構(gòu)件或特殊硬件。(5)使用眾多廠商支持的標準語言和技術(shù)。4.4創(chuàng)建良好設(shè)計的原則可移植性設(shè)計

軟件的可移植性指的是軟件不經(jīng)修改或稍加修改就可以運行于不同軟硬件環(huán)境(CPU、OS和編譯器)的能力,可移植性是軟件的質(zhì)量要素之一。良好的可移植性可以延長軟件的生命周期,拓展軟件的應(yīng)用環(huán)境??梢浦残栽O(shè)計的主要目標是讓軟件在盡可能多的平臺上運行。

4.4創(chuàng)建良好設(shè)計的原則可移植性設(shè)計

實現(xiàn)可移植性的規(guī)則主要有:(1)軟件設(shè)計時應(yīng)該將“設(shè)備相關(guān)程序”與“設(shè)備無關(guān)程序”分開,將“功能模塊”與“用戶界面”分開,這樣可以提高可移植性。(2)避免使用特定環(huán)境的專有功能。(3)使用不依賴特定平臺的程序設(shè)計語言。(4)小心使用可能依賴某一平臺的類庫。(5)了解其他語言可能依賴特殊硬件結(jié)構(gòu)的功能和文本文件的差異。4.4創(chuàng)建良好設(shè)計的原則可測試性設(shè)計

實現(xiàn)在進行可測試性設(shè)計時,需要堅持以下原則。(1)堅持測試驅(qū)動設(shè)計(測試先行)的方法。一般先編寫驗收測試代碼,再編寫單元測試代碼,編寫和實現(xiàn)迭代進行。(2)函數(shù)小型化。盡量做到一個函數(shù)對應(yīng)一個操作,使函數(shù)小型化。(3)數(shù)據(jù)的顯示與控制分離。將處理代碼與圖形用戶界面(GUI)分離。這樣,各種GUI動作就變成了模型上的簡單方法調(diào)用。

4.4創(chuàng)建良好設(shè)計的原則防御性設(shè)計

防御性設(shè)計技術(shù)的主要思想如下:(1)被調(diào)用操作為正常執(zhí)行必須滿足的條件稱為前置條件,在調(diào)用一個操作時要確保該操作的前置條件成立。(2)被調(diào)用操作正常執(zhí)行所得到的結(jié)果必須滿足的條件稱為后置條件,在被調(diào)用操作返回后要確保該操作的后置條件成立。(3)被調(diào)用操作在執(zhí)行時一直保持成立的條件稱為不變式。(4)前置條件、后置條件和不變式都是布爾表達式,其計算結(jié)果為假,表示有錯誤發(fā)生。(5)可以使用斷言機制,在重要構(gòu)件的邊界應(yīng)始終保留嚴格的斷言檢測。4.5面向數(shù)據(jù)流的設(shè)計方法面向數(shù)據(jù)流的設(shè)計方法也稱為過程驅(qū)動的設(shè)計方法;這種方法與軟件需求分析階段的結(jié)構(gòu)化分析方法相銜接,可以很方便地將用數(shù)據(jù)流圖表示的信息轉(zhuǎn)換成程序結(jié)構(gòu)的設(shè)計描述;這種方法還能和編碼階段的“結(jié)構(gòu)化程序設(shè)計方法”相適應(yīng),成為常用的結(jié)構(gòu)化設(shè)計方法。4.5面向數(shù)據(jù)流的設(shè)計方法設(shè)計過程基于數(shù)據(jù)流方法的設(shè)計過程4.5面向數(shù)據(jù)流的設(shè)計方法典型的數(shù)據(jù)流類型和系統(tǒng)結(jié)構(gòu)典型的數(shù)據(jù)流類型有變換型數(shù)據(jù)流和事務(wù)型數(shù)據(jù)流,數(shù)據(jù)流的類型不同,得到的系統(tǒng)結(jié)構(gòu)也不同。通常,一個系統(tǒng)中的所有數(shù)據(jù)流都可以認為是變換流,但是,當(dāng)遇到有明顯事務(wù)特性的數(shù)據(jù)流時,建議采用事務(wù)型映射方法進行設(shè)計。4.5面向數(shù)據(jù)流的設(shè)計方法變換型數(shù)據(jù)流

變換型數(shù)據(jù)處理問題的工作過程大致分為3步,即取得數(shù)據(jù)、變換數(shù)據(jù)和給出數(shù)據(jù),如圖所示。4.5面向數(shù)據(jù)流的設(shè)計方法變換型系統(tǒng)結(jié)構(gòu)圖

變換型系統(tǒng)的結(jié)構(gòu)圖由輸入、中心變換和輸出3部分組成。

4.5面向數(shù)據(jù)流的設(shè)計方法事務(wù)型數(shù)據(jù)流

通常接受一項事務(wù),根據(jù)事務(wù)處理的特點和性質(zhì),選擇分派一個適當(dāng)?shù)奶幚韱卧缓蠼o出結(jié)果。完成選擇分派任務(wù)的部分稱為事務(wù)處理中心,或分派部件。

4.5面向數(shù)據(jù)流的設(shè)計方法事務(wù)型系統(tǒng)結(jié)構(gòu)圖

4.5面向數(shù)據(jù)流的設(shè)計方法簡化的事務(wù)型系統(tǒng)結(jié)構(gòu)圖

事務(wù)型系統(tǒng)的結(jié)構(gòu)圖可以有多種不同的形式,如有多層操作層或沒有操作層。如果調(diào)度模塊并不復(fù)雜,可將其歸入事務(wù)中心模塊。4.5面向數(shù)據(jù)流的設(shè)計方法變換型映射方法系統(tǒng)數(shù)據(jù)處理問題的處理流程總能表示為變換型數(shù)據(jù)流圖,進一步可采用變換型映射方法建立系統(tǒng)的結(jié)構(gòu)圖。也可能遇到明顯的事務(wù)數(shù)據(jù)處理問題,這時可采用事務(wù)型映射方法。4.5面向數(shù)據(jù)流的設(shè)計方法變換分析方法的步驟

(1)重畫數(shù)據(jù)流圖。在需求分析階段得到的數(shù)據(jù)流圖側(cè)重于描述系統(tǒng)如何加工數(shù)據(jù),而重畫數(shù)據(jù)流圖的出發(fā)點是描述系統(tǒng)中的數(shù)據(jù)是如何流動的。(2)在數(shù)據(jù)流圖上區(qū)分系統(tǒng)的邏輯輸入、邏輯輸出和中心變換部分。

4.5面向數(shù)據(jù)流的設(shè)計方法變換分析方法的步驟

(3)進行一級分解,設(shè)計系統(tǒng)模塊結(jié)構(gòu)的頂層和第一層。自頂向下設(shè)計的關(guān)鍵是找出系統(tǒng)樹形結(jié)構(gòu)圖的根或頂層模塊。首先設(shè)計一個主模塊,并用程序的名字為它命名,然后將它畫在與中心變換相對應(yīng)的位置上。第1層設(shè)計:為每個邏輯輸入設(shè)計一個輸入模塊,它的功能是為主模塊提供數(shù)據(jù);為每個邏輯輸出設(shè)計一個輸出模塊,它的功能是將主模塊提供的數(shù)據(jù)輸出;為中心變換設(shè)計一個變換模塊,它的功能是將邏輯輸入轉(zhuǎn)換成邏輯輸出。4.5面向數(shù)據(jù)流的設(shè)計方法變換分析方法的步

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論