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

下載本文檔

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

文檔簡介

什么是軟件軟件的分類軟件的發(fā)展軟件生存期

軟件工程軟件工程的目的和要求第一章軟件工程概論軟件是計算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關(guān)文檔的完整集合。程序是按事先設(shè)計的功能和性能要求執(zhí)行的指令序列數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu)文檔是與程序開發(fā),維護(hù)和使用有關(guān)的圖文材料什么是軟件?軟件的特點軟件是一種邏輯實體,而不是具體的物理實體。因而它具有抽象性軟件的生產(chǎn)與硬件不同,在它的開發(fā)過程中沒有明顯的制造過程在軟件的運(yùn)行和使用期間,沒有硬件那樣的機(jī)械磨損,老化問題軟件的開發(fā)和運(yùn)行常受到計算機(jī)系統(tǒng)的限制,對計算機(jī)系統(tǒng)有著不同程度的依賴性軟件的開發(fā)至今尚未完全擺脫手工藝的開發(fā)方式軟件本身是復(fù)雜的實際問題的復(fù)雜性程序邏輯結(jié)構(gòu)的復(fù)雜性軟件成本相當(dāng)昂貴相當(dāng)多的軟件工作涉及到社會因素軟件的分類按軟件的功能進(jìn)行劃分:系統(tǒng)軟件操作系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)設(shè)備驅(qū)動程序通信處理程序等

支撐軟件文本編輯程序文件格式化程序磁盤向磁帶向數(shù)據(jù)傳輸?shù)某绦虺绦驇煜到y(tǒng)支持需求分析、設(shè)計、實現(xiàn)、測試和支持管理的軟件

應(yīng)用軟件商業(yè)數(shù)據(jù)處理軟件工程與科學(xué)計算軟件計算機(jī)輔助設(shè)計/制造軟件系統(tǒng)仿真軟件智能產(chǎn)品嵌入軟件醫(yī)療、制藥軟件事務(wù)管理、辦公自動化軟件計算機(jī)輔助教學(xué)軟件按軟件規(guī)模進(jìn)行劃分:類別參加人員數(shù)研制期限源程序行數(shù)

微型 1 1~4周0.5k小型1 1~6月1k~2k中型2~5 1~2年5k~50k大型5~20 2~3年50k~100k甚大型100~10004~5年1M(=1000k)極大型2000~50005~10年1M~10M

按軟件工作方式劃分:實時處理軟件分時軟件交互式軟件批處理軟件按軟件服務(wù)對象的范圍劃分:項目軟件產(chǎn)品軟件按使用的頻度進(jìn)行劃分:一次使用頻繁使用按軟件失效的影響進(jìn)行劃分:高可靠性軟件一般可靠性軟件軟件發(fā)展階段程序設(shè)計階段—50至60年代程序系統(tǒng)階段—60至70年代 軟件工程階段—70年代以后軟件工程過程軟件規(guī)格說明:規(guī)定軟件的功能及其運(yùn)行的限制軟件開發(fā):產(chǎn)生滿足規(guī)格說明的軟件軟件確認(rèn):確認(rèn)軟件能夠完成客戶提出的要求軟件演進(jìn):為滿足客戶的變更要求,軟件必須在使用的過程中演進(jìn)軟件工程過程的特性易理解性可見性可支持性可接受性可靠性健壯性可維護(hù)性速度軟件生存期lifecycle軟件有一個孕育、誕生、成長、成熟、衰亡的生存過程。這個過程即為計算機(jī)軟件的生存期軟件生存期的六個步驟,即制定計劃、需求分析、設(shè)計、程序編碼、測試及運(yùn)行維護(hù)瀑布模型

RETURN制定計劃確定要開發(fā)軟件系統(tǒng)的總目標(biāo)給出功能、性能、可靠性以及接口等方面的要求完成該軟件任務(wù)的可行性研究估計可利用的資源

(硬件,軟件,人力等)、成本、效益、開發(fā)進(jìn)度制定出完成開發(fā)任務(wù)的實施計劃,連同可行性研究報告,提交管理部門審查需求分析和定義對用戶提出的要求進(jìn)行分析并給出詳細(xì)的定義編寫軟件需求說明書或系統(tǒng)功能說明書及初步的系統(tǒng)用戶手冊提交管理機(jī)構(gòu)評審軟件設(shè)計概要設(shè)計

—把各項需求轉(zhuǎn)換成軟件的體系結(jié)構(gòu)。結(jié)構(gòu)中每一組成部分都是意義明確的模塊,每個模塊都和某些需求相對應(yīng)詳細(xì)設(shè)計

—對每個模塊要完成的工作進(jìn)行具體的描述,為源程序編寫打下基礎(chǔ)編寫設(shè)計說明書,提交評審。程序編寫把軟件設(shè)計轉(zhuǎn)換成計算機(jī)可以接受的程序代碼,即寫成以某一種特定程序設(shè)計語言表示的“源程序清單”寫出的程序應(yīng)當(dāng)是結(jié)構(gòu)良好、清晰易讀的,且與設(shè)計相一致的軟件測試單元測試,查找各模塊在功能和結(jié)構(gòu)上存在的問題并加以糾正組裝測試,將已測試過的模塊按一定順序組裝起來按規(guī)定的各項需求,逐項進(jìn)行有效性測試,決定已開發(fā)的軟件是否合格,能否交付用戶使用運(yùn)行/維護(hù)改正性維護(hù)運(yùn)行中發(fā)現(xiàn)了軟件中的錯誤需要修正適應(yīng)性維護(hù)為了適應(yīng)變化了的軟件工作環(huán)境,需做適當(dāng)變更完善性維護(hù)為了增強(qiáng)軟件的功能需做變更軟件生存期模型軟件生存期模型是跨越整個生存期的系統(tǒng)開發(fā)、運(yùn)作和維護(hù)所實施的全部過程、活動和任務(wù)的結(jié)構(gòu)框架瀑布模型演化模型螺旋模型噴泉模型智能模型演化模型由于在項目開發(fā)的初始階段人們對軟件的需求認(rèn)識常常不夠清晰,因而使得開發(fā)項目難于做到一次開發(fā)成功,出現(xiàn)返工再開發(fā)在所難免。做兩次第一次只是試驗開發(fā),其目標(biāo)只是在于探索可行性,弄清軟件需求第二次則在此基礎(chǔ)上獲得較為滿意的軟件產(chǎn)品螺旋模型螺旋模型沿著螺線旋轉(zhuǎn),在四個象限上分別表達(dá)四個方面的活動,即:制定計劃──確定軟件目標(biāo),選定實施方案,弄清項目開發(fā)的限制風(fēng)險分析──分析所選方案,考慮如何識別和消除風(fēng)險實施工程──實施軟件開發(fā)客戶評估──評價開發(fā)工作,提出修正建議

噴泉模型迭代重復(fù)演進(jìn)無間隙各階段間無明顯界限軟件工程的定義Boehm:運(yùn)用現(xiàn)代科學(xué)技術(shù)知識來設(shè)計并構(gòu)造計算機(jī)程序及為開發(fā)、運(yùn)行和維護(hù)這些程序所必需的相關(guān)文件資料IEEE:軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法FritzBauer:建立并使用完善的工程化原則,以較經(jīng)濟(jì)的手段獲得能在實際機(jī)器上有效運(yùn)行的可靠軟件的一系列方法軟件工程三要素:

方法、工具和過程軟件工程方法為軟件開發(fā)提供了“如何做”的技術(shù)軟件工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境軟件工程過程定義了:

方法使用的順序要求交付的文檔資料為保證質(zhì)量和適應(yīng)變化所需要的管理軟件開發(fā)各個階段完成的里程碑

某些元素的一個集合或排列這些元素被組織起來以實現(xiàn)某種方法,過程或借助處理信息進(jìn)行控制。基于計算機(jī)的系統(tǒng)基于計算機(jī)系統(tǒng)的系統(tǒng)元素系統(tǒng)元素軟件—

計算機(jī)程序、數(shù)據(jù)結(jié)構(gòu)、相關(guān)文檔硬件—

電子計算設(shè)備(如CPU,存儲器)和外部機(jī)電設(shè)備(如傳感器、馬達(dá)等)人—

硬件和軟件的用戶數(shù)據(jù)庫—

一個大型的有組織的信息集合文檔—

手冊、表格和其它用以描述系統(tǒng)使用和操作的信息過程—

定義每一種系統(tǒng)元素的特定使用步驟,或系統(tǒng)駐留的過程性環(huán)境系統(tǒng)的層次結(jié)構(gòu)基于計算機(jī)的系統(tǒng)本身可以成為一個更大的基于計算機(jī)系統(tǒng)中的一個元素,并稱為那個更大系統(tǒng)的宏元素。工廠自動化

系統(tǒng)計算機(jī)系統(tǒng)工程計算機(jī)系統(tǒng)工程是一個問題求解活動,目的是揭示、分析所期望的功能,并把它們分配到各個單獨的系統(tǒng)元素中去。系統(tǒng)工程師的任務(wù)與用戶合作確認(rèn)用戶的目標(biāo)和約束導(dǎo)出功能、性能、接口、設(shè)計約束和信息結(jié)構(gòu)的表示將它們分配到每一個系統(tǒng)元素中

計算機(jī)系統(tǒng)工程師選擇硬件元件的某種組合以構(gòu)成基于計算機(jī)系統(tǒng)的硬件元素硬件工程過程可以分為三個階段計劃和定義階段設(shè)計和樣機(jī)實現(xiàn)階段生產(chǎn)、銷售和售后服務(wù)階段硬件和硬件工程

軟件與軟件工程為實現(xiàn)要求的功能和性能,必須制作或獲取一系列軟件部件軟件元素分為兩類

應(yīng)用軟件用來實現(xiàn)信息處理的功能

系統(tǒng)軟件完成使應(yīng)用軟件能與其它系統(tǒng)元素交互的控制功能

人類工程是應(yīng)用從心理學(xué)和方法論導(dǎo)出的知識來確定和設(shè)計高質(zhì)量HCI的多學(xué)科活動人類工程過程包括以下步驟(1)活動分析──環(huán)境交互及劃分任務(wù),進(jìn)行任務(wù)分析

(2)語義分析和設(shè)計──動作精確定義,“對話”設(shè)計(3)語法和詞法設(shè)計──各個動作和命令的形式,硬件與軟件實現(xiàn)

(4)用戶環(huán)境設(shè)計──將硬件、軟件和其它系統(tǒng)生成元素組合起來形成用戶環(huán)境(5)原型──從人的角度出發(fā)來評價HCI數(shù)據(jù)庫和數(shù)據(jù)庫工程數(shù)據(jù)庫工程(包括數(shù)據(jù)庫分析、設(shè)計和實現(xiàn))對于使用數(shù)據(jù)庫的系統(tǒng),信息倉庫往往是所有功能的核心數(shù)據(jù)庫工程的應(yīng)用是在數(shù)據(jù)庫的信息域定義完成之后

系統(tǒng)工程師的作用是

定義數(shù)據(jù)庫中包含的信息處理查詢的類型數(shù)據(jù)存取的方式數(shù)據(jù)庫的容量等數(shù)據(jù)分析和設(shè)計是基本的軟件工程活動系統(tǒng)分析的目標(biāo)識別用戶要求評價系統(tǒng)的可行性進(jìn)行經(jīng)濟(jì)分析和技術(shù)分析把功能分配給硬件、軟件、人、數(shù)據(jù)庫和其它系統(tǒng)元素建立成本和進(jìn)度限制生成系統(tǒng)規(guī)格說明,形成所有后續(xù)工程的基礎(chǔ)需求識別系統(tǒng)分析過程的第一步就是識別用戶要求分析員必須考慮以下問題:功能和性能

可靠性和質(zhì)量

總的系統(tǒng)目標(biāo)

成本與進(jìn)度限制制造需求

市場與競爭情況

有效的技術(shù)

將來可能的擴(kuò)充系統(tǒng)分析的任務(wù)識別希望的功能和性能范圍確定系統(tǒng)的功能、性能、約束和接口將功能賦予一個或多個系統(tǒng)元素(即軟件、硬件、人等)提出一些候選方案并做評價

項目考慮商業(yè)考慮技術(shù)分析生產(chǎn)評估

對同一功能,可以分配不同的系統(tǒng)元素為選取最有效的分配方案,使用一組權(quán)衡準(zhǔn)則進(jìn)行評價人員問題環(huán)境界面法律考慮1、項目考慮在預(yù)估的成本與進(jìn)度范圍內(nèi)所選的系統(tǒng)配置能否實現(xiàn)?與成本與進(jìn)度估算相關(guān)的風(fēng)險有哪些?

2、商業(yè)考慮所選的系統(tǒng)配置是最可能有效益的解決方案嗎?能否成功地占領(lǐng)市場?最終的報償是否能表明所冒的開發(fā)風(fēng)險是值得的?

3、技術(shù)分析是否具備開發(fā)所有系統(tǒng)元素的技術(shù)實力?能否確保功能和性能得到滿足?能否對這種系統(tǒng)配置進(jìn)行充分的維護(hù)?是否具備技術(shù)資源?與技術(shù)相關(guān)的風(fēng)險有哪些?

4、生產(chǎn)評估生產(chǎn)工具與設(shè)備是否有效?必需的過程是否短缺?是否充分地實施了質(zhì)量保證?

5、人員問題開發(fā)人員是否得到培訓(xùn)?是否存在政治問題?用戶是否了解這個系統(tǒng)將要做什么?

6、環(huán)境界面所提交的系統(tǒng)配置與系統(tǒng)的外部環(huán)境的接口是否合適?機(jī)器與機(jī)器、人與機(jī)器之間的通信是否以智能方式處理?

7、法律考慮這種配置是否會引入違法的責(zé)任風(fēng)險?對責(zé)任問題是否給予了足夠的保護(hù)?是否存在潛在的破壞問題?

可行性研究問題識別市場調(diào)查分析準(zhǔn)備環(huán)境分析物理分析功能分析信息分析動態(tài)分析確立系統(tǒng)方案,作出各種估算模型評審

問題的初步認(rèn)識了解系統(tǒng)應(yīng)解決的問題,這些問題使如何提出的設(shè)想這些問題如何解決才能滿足要求了解問題的結(jié)構(gòu)

市場調(diào)查了解市場對待開發(fā)軟件的需求情況調(diào)查市場上已有的類似軟件系統(tǒng)的功能、性能、價格情況

分析準(zhǔn)備確立分析計劃規(guī)定由誰參加分析作業(yè),任務(wù)分配對參加分析的人員進(jìn)行必要的培訓(xùn)

環(huán)境分析明確系統(tǒng)的目的和限制條件使用單位的狀況、經(jīng)營方針和組織機(jī)構(gòu)使用單位的計算機(jī)利用情況相關(guān)的硬件、軟件及其它接口部分用戶的操作環(huán)境及操作要求習(xí)慣、法律、制度上對軟件的制約開發(fā)能具備的技術(shù)條件和設(shè)備條件

物理分析了解實際業(yè)務(wù)活動狀況,特別對一些活動要點進(jìn)行分析明確在這些要點之間什么東西在流動,如何進(jìn)行流動對物理流量進(jìn)行分析對其模型化,得到實際業(yè)務(wù)系統(tǒng)(當(dāng)前系統(tǒng))的物理模型

功能分析決定系統(tǒng)應(yīng)具備的功能(工作域)分析功能的結(jié)構(gòu):功能展開和功能分配分析各功能之間的關(guān)系,整理它們之間傳遞的信息利用數(shù)據(jù)流圖,描述信息在系統(tǒng)流動與處理的情況

信息分析調(diào)查系統(tǒng)的輸入、輸出、保存信息明確信息的結(jié)構(gòu)及各信息之間的關(guān)系調(diào)查各信息的信息量調(diào)查各種報表和文件的格式建立粗略的數(shù)據(jù)詞典,定義系統(tǒng)中使用的數(shù)據(jù)

動態(tài)分析系統(tǒng)內(nèi)每一部分有幾種狀態(tài)各種狀態(tài)轉(zhuǎn)換的條件同步產(chǎn)生的條件與同步后狀態(tài)的變化

確立系統(tǒng)方案,進(jìn)行各種估算粗略地估算成本估算可能取得的效益提出可能需要的資源,包括人員、硬件、軟件等提出大概的進(jìn)度安排

軟件需求分析的任務(wù)深入描述軟件的功能和性能確定軟件設(shè)計的約束和軟件同其它系統(tǒng)元素的接口細(xì)節(jié)定義軟件的其它有效性需求需求分析研究的對象是軟件項目的用戶要求準(zhǔn)確地表達(dá)被接受的用戶要求確定被開發(fā)軟件系統(tǒng)的系統(tǒng)元素將功能和信息結(jié)構(gòu)分配到這些系統(tǒng)元素中需求分析的任務(wù)就是借助于當(dāng)前系統(tǒng)的邏輯模型導(dǎo)出目標(biāo)系統(tǒng)的邏輯模型,解決目標(biāo)系統(tǒng)的“做什么”的問題。通常軟件開發(fā)項目是要實現(xiàn)目標(biāo)系統(tǒng)的物理模型目標(biāo)系統(tǒng)的具體物理模型是由它的邏輯模型經(jīng)實例化,即具體到某個業(yè)務(wù)領(lǐng)域而得到的需求分析的過程(1)問題識別從系統(tǒng)的角度來理解軟件并評審軟件范圍是否恰當(dāng)確定對目標(biāo)系統(tǒng)的綜合要求,即軟件的需求提出這些需求實現(xiàn)條件,以及需求應(yīng)達(dá)到的標(biāo)準(zhǔn)軟件的需求包括:功能需求性能需求環(huán)境需求可靠性需求安全保密要求用戶界面需求資源使用需求成本消耗需求開發(fā)進(jìn)度需求預(yù)先估計以后系統(tǒng)可能達(dá)到的目標(biāo)問題識別的另一項工作是建立分析所需要的通信途徑,以保證能順利地對問題進(jìn)行分析。(2)分析與綜合從信息流和信息結(jié)構(gòu)出發(fā),逐步細(xì)化所有的軟件功能,找出系統(tǒng)各元素之間的聯(lián)系、接口特性和設(shè)計上的約束,分析它們是否滿足功能要求,是否合理。剔除其不合理的部分,增加其需要部分。最終綜合成系統(tǒng)的解決方案,給出目標(biāo)系統(tǒng)的詳細(xì)邏輯模型。常用的分析方法面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法(SA)面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法(JSD)面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)系統(tǒng)開發(fā)方法(DSSD)面向?qū)ο蟮姆治龇椒?OOA)等(3)編制需求分析階段的文檔軟件需求說明書數(shù)據(jù)要求說明書初步的用戶手冊修改、完善與確定軟件開發(fā)實施計劃(4)需求分析評審系統(tǒng)定義的目標(biāo)是否與用戶的要求一致;系統(tǒng)需求分析階段提供的文檔資料是否齊全;文檔中的所有描述是否完整、清晰、準(zhǔn)確反映用戶要求;與所有其它系統(tǒng)成分的重要接口是否都已經(jīng)描述;被開發(fā)項目的數(shù)據(jù)流與數(shù)據(jù)結(jié)構(gòu)是否足夠,確定;所有圖表是否清楚,在不補(bǔ)充說明時能否理解;主要功能是否已包括在規(guī)定的軟件范圍之內(nèi),是否都已充分說明;設(shè)計的約束條件或限制條件是否符合實際;開發(fā)的技術(shù)風(fēng)險是什么;是否考慮過軟件需求的其它方案;是否考慮過將來可能會提出的軟件需求;是否詳細(xì)制定了檢驗標(biāo)準(zhǔn),它們能否對系統(tǒng)定義是否成功進(jìn)行確認(rèn);需求分析流程軟件需求分析的原則需要能夠表達(dá)和理解問題的信息域和功能域要能以層次化的方式對問題進(jìn)行分解和不斷細(xì)化要給出系統(tǒng)的邏輯視圖和物理視圖軟件需求規(guī)格說明的原則從現(xiàn)實中分離功能,即描述要“做什么”而不是“怎樣實現(xiàn)”要求使用面向處理的規(guī)格說明語言(或稱系統(tǒng)定義語言)如果被開發(fā)軟件只是一個大系統(tǒng)中的一個元素,那么整個大系統(tǒng)也包括在規(guī)格說明的描述之中規(guī)格說明必須包括系統(tǒng)運(yùn)行環(huán)境規(guī)格說明必須是一個認(rèn)識模型規(guī)格說明必須是可操作的規(guī)格說明必須容許不完備性并允許擴(kuò)充規(guī)格說明必須局部化和松散耦合軟件需求方法需求分析方法由對軟件問題的信息域和功能域的系統(tǒng)分析過程及其表示方法組成大多數(shù)的需求分析方法是由信息驅(qū)動的信息域具有三種屬性:信息流、信息內(nèi)容和信息結(jié)構(gòu)。結(jié)構(gòu)化分析方法

面向數(shù)據(jù)流進(jìn)行需求分析的方法結(jié)構(gòu)化分析方法適合于數(shù)據(jù)處理類型軟件的需求分析具體來說,結(jié)構(gòu)化分析方法就是用抽象模型的概念,按照軟件內(nèi)部數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,直到找到滿足功能要求的所有可實現(xiàn)的軟件為止結(jié)構(gòu)化分析方法使用工具:

數(shù)據(jù)流圖數(shù)據(jù)詞典結(jié)構(gòu)化英語判定表與判定樹數(shù)據(jù)流圖數(shù)據(jù)流圖中的主要圖形元素數(shù)據(jù)加工(數(shù)據(jù)變換)數(shù)據(jù)源點或終點(外部實體)數(shù)據(jù)流數(shù)據(jù)存儲文件描述銀行取款過程的數(shù)據(jù)流圖數(shù)據(jù)流與數(shù)據(jù)加工之間的關(guān)系數(shù)據(jù)流圖的層次結(jié)構(gòu)為了表達(dá)數(shù)據(jù)處理過程的數(shù)據(jù)加工情況,需要采用層次結(jié)構(gòu)的數(shù)據(jù)流圖。按照系統(tǒng)的層次結(jié)構(gòu)進(jìn)行逐步分解,并以分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系,能清楚地表達(dá)和容易理解整個系統(tǒng)分層的數(shù)據(jù)流圖在多層數(shù)據(jù)流圖中,頂層流圖僅包含一個加工,它代表被開發(fā)系統(tǒng)。它的輸入流是該系統(tǒng)的輸入數(shù)據(jù),輸出流是系統(tǒng)所輸出數(shù)據(jù)底層流圖是指其加工不需再做分解的數(shù)據(jù)流圖,它處在最底層中間層流圖則表示對其上層父圖的細(xì)化。它的每一加工可能繼續(xù)細(xì)化,形成子圖。結(jié)構(gòu)化分析方法步驟示例

商店業(yè)務(wù)處理系統(tǒng)這個數(shù)據(jù)流圖只是一個高層的系統(tǒng)邏輯模型,它反映了目標(biāo)系統(tǒng)要實現(xiàn)的功能數(shù)據(jù)流圖繪制步驟首先確定系統(tǒng)的輸入和輸出根據(jù)商店業(yè)務(wù),畫出頂層數(shù)據(jù)流圖,以反映最主要業(yè)務(wù)處理流程

經(jīng)過分析,商店業(yè)務(wù)處理的主要功能應(yīng)當(dāng)有銷售、采購、會計三大項。主要數(shù)據(jù)流輸入的源點和輸出終點是顧客和供應(yīng)商。然后從輸入端開始,根據(jù)商店業(yè)務(wù)工作流程,畫出數(shù)據(jù)流流經(jīng)的各加工框,逐步畫到輸出端,得到第一層數(shù)據(jù)流圖第一層數(shù)據(jù)流圖加細(xì)每一個加工框 銷售細(xì)化采購細(xì)化檢查和修改數(shù)據(jù)流圖的原則數(shù)據(jù)流圖上所有圖形符號只限于前述四種基本圖形元素數(shù)據(jù)流圖的主圖必須包括前述四種基本元素,缺一不可數(shù)據(jù)流圖的主圖上的數(shù)據(jù)流必須封閉在外部實體之間每個加工至少有一個輸入數(shù)據(jù)流和一個輸出數(shù)據(jù)流在數(shù)據(jù)流圖中,需按層給加工框編號。編號表明該加工所處層次及上下層的親子關(guān)系規(guī)定任何一個數(shù)據(jù)流子圖必須與它上一層的一個加工對應(yīng),兩者的輸入數(shù)據(jù)流和輸出數(shù)據(jù)流必須一致。此即父圖與子圖的平衡可以在數(shù)據(jù)流圖中加入物質(zhì)流,幫助用戶理解數(shù)據(jù)流圖圖上每個元素都必須有名字?jǐn)?shù)據(jù)流圖中不可夾帶控制流初畫時可以忽略瑣碎的細(xì)節(jié),以集中精力于主要數(shù)據(jù)流數(shù)據(jù)詞典數(shù)據(jù)詞典與數(shù)據(jù)流圖配合,能清楚地表達(dá)數(shù)據(jù)處理的要求詞條描述——對于在數(shù)據(jù)流圖中每一個被命名的圖形元素,均加以定義,其內(nèi)容有:名字,別名或編號,分類,描述,定義,位置,其它,等(1)數(shù)據(jù)流詞條描述數(shù)據(jù)流名:說明:簡要介紹作用即它產(chǎn)生的原因和結(jié)果數(shù)據(jù)流來源:來自何方數(shù)據(jù)流去向:去向何處數(shù)據(jù)流組成:數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)量流通量:數(shù)據(jù)量,流通量(2)數(shù)據(jù)元素詞條描述數(shù)據(jù)元素名:類型:數(shù)字(離散值,連續(xù)值),文字(編碼類型)長度:取值范圍:相關(guān)的數(shù)據(jù)元素及數(shù)據(jù)結(jié)構(gòu):(3)數(shù)據(jù)文件詞條描述數(shù)據(jù)文件名:簡述:存放的是什么數(shù)據(jù)輸入數(shù)據(jù):輸出數(shù)據(jù):數(shù)據(jù)文件組成:數(shù)據(jù)結(jié)構(gòu)存儲方式:順序,直接,關(guān)鍵碼存取頻率:(4)加工邏輯詞條描述加工名:加工編號:反映該加工的層次簡要描述:加工邏輯及功能簡述輸入數(shù)據(jù)流:輸出數(shù)據(jù)流:加工邏輯:簡述加工程序,加工順序(5)源點及匯(終)點詞條描述名稱:外部實體名簡要描述:什么外部實體有關(guān)數(shù)據(jù)流:數(shù)目:數(shù)據(jù)結(jié)構(gòu)的描述

符號

含義

舉例=被定義為+與

x=a+b[...,...]或[...|...]或

x=[a,b],x=[a|b]{...}或m{...}n重復(fù)

x={a},x=3{a}8(...)可選

x=(a)“...”基本數(shù)據(jù)元素

x=“a”.. 連結(jié)符

x=1..9存折格式存折=戶名+所號+帳號+開戶日+性質(zhì)+(印密)+1{存取行}50戶名=2{字母}24所號=“001”..“999”帳號=“00000001”..“99999999”開戶日=年+月+日性質(zhì)=“1”..“6”注:“1”表示普通戶,“5”表示工資戶等印密=“0”注:印密在存折上不顯示存取行=日期+(摘要)+支出+存入+余額+操作+復(fù)核

對數(shù)據(jù)流圖的每一個基本加工,必須有一個基本加工邏輯說明基本加工邏輯說明必須描述基本加工如何把輸入數(shù)據(jù)流變換為輸出數(shù)據(jù)流的加工規(guī)則加工邏輯說明必須描述實現(xiàn)加工的策略而不是實現(xiàn)加工的細(xì)節(jié)加工邏輯說明中包含的信息應(yīng)是充足的,完備的,有用的,無冗余的基本加工邏輯說明用于寫加工邏輯說明的工具

結(jié)構(gòu)化英語判定表判定樹(1)結(jié)構(gòu)化英語結(jié)構(gòu)化英語的詞匯表由英語命令動詞數(shù)據(jù)詞典中定義的名字有限的自定義詞邏輯關(guān)系詞IF_THEN_ELSE、

CASE_OF、

WHILE_DO、

REPEAT_UNTIL等組成。是一種介于自然語言和形式化語言之間的語言語言的正文用基本控制結(jié)構(gòu)進(jìn)行分割,加工中的操作用自然語言短語來表示其基本控制結(jié)構(gòu)有三種:簡單陳述句結(jié)構(gòu):避免復(fù)合語句;重復(fù)結(jié)構(gòu):while_do

repeat_until結(jié)構(gòu)。判定結(jié)構(gòu):if_then_else

case_of結(jié)構(gòu);商店業(yè)務(wù)處理系統(tǒng)中“檢查發(fā)貨單”if發(fā)貨單金額超過$500then

if

欠款超過了60天then

在償還欠款前不予批準(zhǔn)

else

(欠款未超期)發(fā)批準(zhǔn)書,發(fā)貨單

else

(發(fā)貨單金額未超過$500)

if

欠款超過60天then

發(fā)批準(zhǔn)書,發(fā)貨單及賒欠報告

else

(欠款未超期)發(fā)批準(zhǔn)書,發(fā)貨單

(2)判定表如果數(shù)據(jù)流圖的加工需要依賴于多個邏輯條件的取值,使用判定表來描述比較合適以“檢查發(fā)貨單”為例(3)判定樹判定樹也是用來表達(dá)加工邏輯的一種工具。有時侯它比判定表更直觀。檢查發(fā)貨單金額>$500金額

$500

欠款>60天不發(fā)出批準(zhǔn)書

欠款

60天發(fā)貨單發(fā)出批準(zhǔn)書、

欠款>60天發(fā)出批準(zhǔn)書、發(fā)貨單及賒欠報告

欠款

60天發(fā)出批準(zhǔn)書、發(fā)貨單原型化方法在開發(fā)初期,要想得到一個完整準(zhǔn)確的規(guī)格說明不是一件容易的事。特別是對一些大型的軟件項目。用戶往往對系統(tǒng)只有一個模糊的想法,很難完全準(zhǔn)確地表達(dá)對系統(tǒng)的全面要求。軟件開發(fā)者對于所要解決的應(yīng)用問題認(rèn)識更是模糊不清隨著開發(fā)工作向前推進(jìn),用戶可能會產(chǎn)生新的要求,或因環(huán)境變化,要求系統(tǒng)也能隨之變化;開發(fā)者又可能在設(shè)計與實現(xiàn)的過程中遇到些沒有預(yù)料到的實際困難,需要以改變需求來解脫困境。因此規(guī)格說明難以完善、需求的變更、以及通信中的模糊和誤解,都會成為軟件開發(fā)順利推進(jìn)的障礙。為解決這些問題,逐漸形成了軟件系統(tǒng)的快速原型的概念。軟件原型的分類在軟件開發(fā)中,原型是軟件的一個早期可運(yùn)行的版本,它反映最終系統(tǒng)的部分重要特性。

探索型:目的是要弄清對目標(biāo)系統(tǒng)的要求,確定所希望的特性,并探討多種方案的可行性。

實驗型:這種原型用于大規(guī)模開發(fā)和實現(xiàn)之前,考核方案是否合適,規(guī)格說明是否可靠。

進(jìn)化型:這種原型的目的不在于改進(jìn)規(guī)格說明,而是將系統(tǒng)建造得易于變化,在改進(jìn)原型的過程中,逐步將原型進(jìn)化成最終系統(tǒng)。原型使用策略

廢棄策略追加策略

建立快速原型,進(jìn)行系統(tǒng)的分析和構(gòu)造的好處:

增進(jìn)軟件者和用戶對系統(tǒng)服務(wù)需求的理解,使比較含糊的具有不確定性的軟件需求(主要是功能)明確化。軟件原型化方法提供了一種有力的學(xué)習(xí)手段。

使用原型化方法,可以容易地確定系統(tǒng)的性能,確認(rèn)各項主要系統(tǒng)服務(wù)的可應(yīng)用性,確認(rèn)系統(tǒng)設(shè)計的可行性,確認(rèn)系統(tǒng)作為產(chǎn)品的結(jié)果。軟件原型的最終版本,有的可以原封不動地成為產(chǎn)品,有的略加修改就可以成為最終系統(tǒng)的一個組成部分,這樣有利于建成最終系統(tǒng)。

原型開發(fā)技術(shù)可執(zhí)行規(guī)格說明基于腳本(scenario)的設(shè)計自動程序設(shè)計專用語言可復(fù)用(reusable)的軟件簡化假設(shè)可執(zhí)行規(guī)格說明可執(zhí)行規(guī)格說明是用于需求規(guī)格說明的一種自動化技術(shù)。使用這種方法,人們可以直接觀察他們用語言規(guī)定的任何系統(tǒng)性行為。包括

代數(shù)規(guī)格說明

有限狀態(tài)模型

可執(zhí)行的數(shù)據(jù)流圖

(1)代數(shù)規(guī)格說明代數(shù)規(guī)格說明使用集合、定義于這些集合上的函數(shù)和定義于這些函數(shù)上的方程來描述對象。規(guī)格說明的操作語義用這些方程表示。

NEW_STACK:→StackPUSH:Stack,Element→StackPOP:Stack→(Element|Undefined)POP(NEW_STACK())=UndefinedPOP(PUSH(stk,elem))=elem其中,前三行定義了操作的語法,后兩行把它們的語義定義為一些方程。舉例:定義一個無界的棧及其操作

(2)有限狀態(tài)模型parnas提出的使用最廣泛的一種可執(zhí)行規(guī)格說明形式。從一個初始狀態(tài)開始接收輸入,到產(chǎn)生輸出,狀態(tài)在推移變化。施加在狀態(tài)元素上的約束確定了有效狀態(tài)的推移。舉例:建立用戶/程序?qū)υ?/p>

(3)可執(zhí)行的數(shù)據(jù)流圖數(shù)據(jù)流圖是基于結(jié)構(gòu)化開發(fā)方法的結(jié)構(gòu)化規(guī)格說明用一種可執(zhí)行的語言程序代替定義處理邏輯的結(jié)構(gòu)化英語,數(shù)據(jù)流圖就成為由可執(zhí)行語言程序模塊組成的網(wǎng)絡(luò),在一定環(huán)境或工具的支持下就可成為一個可以執(zhí)行的原型系統(tǒng)。

基于腳本的設(shè)計腳本是指用戶界面的原型。一個腳本用以模擬在系統(tǒng)運(yùn)行期間用戶經(jīng)歷的事件。它提供了輸入─處理─輸出的屏幕格式和有關(guān)對話的模型。因此,軟件開發(fā)者能夠給用戶顯示系統(tǒng)的逼真的視圖,使用戶得以判斷是否符合他的意圖??稍谌我荒_本中使用一套可復(fù)用的軟件模塊,以表達(dá)某一方面的要求。可使用一種原型語言來描述原型系統(tǒng)。原型開發(fā)過程中用這種語言來定義屏幕、數(shù)據(jù)項、及其相關(guān)的操作。從系統(tǒng)的外部描述開始,開發(fā)與數(shù)據(jù)庫的接口、錯誤處理和恢復(fù)過程等系統(tǒng)的與外部視圖一致的細(xì)節(jié)。

自動程序設(shè)計自動程序設(shè)計是指在程序自動生成環(huán)境的支持下,利用計算機(jī)實現(xiàn)軟件的開發(fā)。它可以自動地或半自動地把用戶的非過程式問題規(guī)格說明轉(zhuǎn)換為某種高級語言程序:

演繹綜合手段:基于數(shù)學(xué)推理的構(gòu)造式證明。程序變換手段:將一程序轉(zhuǎn)換成另一功能等價的程序,并保持其正確性不變。實例推廣手段:從實例特征出發(fā),將它推廣為待編程序的特征,最后得到程序。

過程化手段:研究甚高級語言的編譯和知識的過程化。

專用語言專用語言是應(yīng)用領(lǐng)域的模型化語言。在原型開發(fā)中使用專用語言,可方便用戶和軟件開發(fā)者在計劃中的系統(tǒng)特性方面的交流。

軟件復(fù)用技術(shù)利用可復(fù)用的模塊,做出適當(dāng)?shù)慕M合,就可得到快速構(gòu)造的原型系統(tǒng)。為了快速地構(gòu)造原型,這些模塊首先必須有簡單而清晰的界面;其次它們應(yīng)當(dāng)盡量不依賴其它的模塊或數(shù)據(jù)結(jié)構(gòu);第三,它們應(yīng)具有一些通用的功能。

簡化假設(shè)簡化假設(shè)是在開發(fā)過程中使設(shè)計者迅速得到一個簡化的系統(tǒng)所做的假設(shè)。盡管這些假設(shè)可能實際上并不能成立,但它們在原型開發(fā)過程中可以使開發(fā)者的注意力集中在一些主要的方面。

在修改一個文件時,可以假設(shè)這個文件確實存在在存取文件時,待存取的記錄總是存在一旦計劃中的系統(tǒng)滿足用戶所有的要求,就可以撤消這些假設(shè),并追加一些細(xì)節(jié)。系統(tǒng)動態(tài)分析系統(tǒng)的需求規(guī)格說明通常是用自然語言來敘述的,但是用自然語言描述往往會出現(xiàn)歧義性。為了直觀地分析系統(tǒng)的動作,從特定的視點出發(fā)描述系統(tǒng)的行為,需要采用動態(tài)分析的方法。最常用的動態(tài)分析方法狀態(tài)遷移圖時序圖Petri網(wǎng)狀態(tài)遷移圖狀態(tài)遷移圖是描述系統(tǒng)的狀態(tài)如何相應(yīng)外部的信號進(jìn)行推移的一種圖形表示。

圓圈“○”表示可得到的系統(tǒng)狀態(tài)

箭頭“→”表示從一種狀態(tài)向另一種狀態(tài)的遷移。例如,當(dāng)有多個申請占用CPU運(yùn)行的進(jìn)程時,有關(guān)CPU分配的進(jìn)程的狀態(tài)遷移??傻玫降臓顟B(tài)=就緒,運(yùn)行,等待生成的事件=t1,t2,

t3,

t4

t1─

中斷事件

t2─

中斷已處理

t3─

分配CPU

t4─

用完CPU時間狀態(tài)遷移圖的優(yōu)點狀態(tài)之間的關(guān)系能夠直觀地捕捉到由于狀態(tài)遷移圖的單純性,能夠機(jī)械地分析許多情況,可很容易地建立分析工具在系統(tǒng)分析中,用時序圖于對比在系統(tǒng)中處理事件的時序和相應(yīng)的處理時間。在右圖中,對于事件e,功能1~功能3

的處理時間總計為(T1

+T2+T3)其中功能間切換時間0。時序圖采用擴(kuò)充時序圖可表示進(jìn)程間的通信流,用于分析幾個事件的交錯現(xiàn)象。,C1與C2,R1與R2是交錯的。因此,可以做如下分析:“必須設(shè)計成HOST1在等待C1的回答R1期間要能接收從HOST2發(fā)出的命令C2。”Petri網(wǎng)

Petri網(wǎng)已廣泛地應(yīng)用于硬件與軟件系統(tǒng)的開發(fā)中,它適用于描述與分析相互獨立、協(xié)同操作的處理系統(tǒng),也就是并發(fā)執(zhí)行的處理系統(tǒng)。Petri網(wǎng)簡稱PNG(PetriNetGraph),它有兩種結(jié)點:位置(place):符號為“○”,它用來表示系統(tǒng)的狀態(tài)。轉(zhuǎn)移(transition):符號為“

”,它用來表示系統(tǒng)中的事件。

圖中的有向邊表示對轉(zhuǎn)移的輸入,或由轉(zhuǎn)移的輸出標(biāo)記,或稱令牌(token),是表明系統(tǒng)當(dāng)前處于什么狀態(tài)的標(biāo)志

處理兩個進(jìn)程的同步問題

數(shù)據(jù)及數(shù)據(jù)庫需求在數(shù)據(jù)詞典中,強(qiáng)調(diào)對數(shù)據(jù)存儲結(jié)構(gòu)的邏輯設(shè)計,并用數(shù)據(jù)結(jié)構(gòu)表達(dá)數(shù)據(jù)項之間的邏輯關(guān)系。但任何一個軟件系統(tǒng)都可能有成千上萬個數(shù)據(jù)項,僅僅描述這些數(shù)據(jù)項是不夠的,更重要的是如何把它們以最優(yōu)的方式組織起來,以滿足系統(tǒng)對數(shù)據(jù)的要求。有關(guān)數(shù)據(jù)庫的基本概念在軟件系統(tǒng)中需要處理的數(shù)據(jù)是現(xiàn)實世界中存在的事物及其聯(lián)系的反映。人們通常將與數(shù)據(jù)處理有關(guān)的的領(lǐng)域分為三個世界:

現(xiàn)實世界信息世界數(shù)據(jù)世界現(xiàn)實世界是存在于人們頭腦之外的客觀世界,現(xiàn)實世界中的事物可分成對象和性質(zhì)兩大類。對象可以是人、是物,還可以是實際的東西或概念的東西,例如,大學(xué)、城市等。對象還可以指事物與事物間的聯(lián)系。性質(zhì)則是指事物的性質(zhì)或特征。信息世界也叫做觀念世界,是現(xiàn)實世界在人們頭腦中的反映??陀^世界中的事物在信息世界中叫做實體,反映事物之間聯(lián)系的叫做實體模型。實體是由若干屬性的屬性值組成。屬性是實體某一方面的特征,相應(yīng)于事物的性質(zhì)。例如,一個學(xué)生實體是如下的一個5元組:(951149,袁秋慧,女,19,軟件)5元組中每一元素是學(xué)生的某一屬性的屬性值。他們對應(yīng)的屬性集合是:這些屬性集合表征了“學(xué)生”實體的類型,叫做實體型。同一類型的實體的集合叫做實體集。數(shù)據(jù)世界則是信息世界中信息的數(shù)據(jù)化,現(xiàn)實世界中的事物及其聯(lián)系在數(shù)據(jù)世界中用數(shù)據(jù)模型描述。(學(xué)號,姓名,性別,年齡,專業(yè))描述每一實體的數(shù)據(jù)稱為記錄,描述屬性的數(shù)據(jù)叫做數(shù)據(jù)項或字段。與實體集相對應(yīng)的稱為文件。例如,學(xué)生文件就由多個記錄組成,這些記錄放在一起構(gòu)成一個二維表。表中每一橫排叫做一個記錄或元組,每一縱列叫做一個屬性。

記錄由數(shù)據(jù)項組成,正如實體由若干屬性的屬性值組成一樣。一般數(shù)據(jù)項沿用屬性名。用做屬性名時表示觀念信息,用做數(shù)據(jù)項名時表示數(shù)據(jù)信息。每個數(shù)據(jù)項包括兩個特征:即數(shù)據(jù)類型和數(shù)據(jù)長度。若干同類型的記錄構(gòu)成文件。為了對文件中的記錄有效組織和存取,通常指定一個數(shù)據(jù)項進(jìn)行區(qū)別,這個數(shù)據(jù)項叫做關(guān)鍵字。E-R方法(Entity-RelationshipApproach)和實體模型在需求分析階段進(jìn)行數(shù)據(jù)庫邏輯設(shè)計過程中,使用E-R圖,可定義一個實體模型。實體模型是現(xiàn)實世界的純表示,它不涉及數(shù)據(jù)世界的數(shù)據(jù)結(jié)構(gòu)、存取路徑、存取效率等問題。因此,它可以轉(zhuǎn)換成數(shù)據(jù)庫中的數(shù)據(jù)模型。數(shù)據(jù)可以按相應(yīng)數(shù)據(jù)模型進(jìn)行組織。E-R圖中表示實體聯(lián)系的符號如下:在E-R圖中,每個方框表示實體型或?qū)傩裕娇蛑g的連線表示實體之間,或?qū)嶓w與屬性之間的聯(lián)系。出現(xiàn)在連線上的短豎線可以看成是“1”,而圓圈隱含表示“0”。例如,在教學(xué)管理中,一個教師可以教授零門、一門或多門課程,每位學(xué)生也需要學(xué)習(xí)幾門課程。因此,教學(xué)管理中涉及的對象(實體型)有學(xué)生、教師和課程。用E-R圖描述它們之間的聯(lián)系,得下圖。其中,學(xué)生與課程是多對多的聯(lián)系,而教師與課程的聯(lián)系是零、一對多。進(jìn)一步,要確定屬性。例如,學(xué)生具有學(xué)號、姓名、性別、年齡、專業(yè)(其它略)等屬性;課程具有課程號、課程名、學(xué)分、學(xué)時數(shù)等屬性;教師具有職工號、姓名、年齡、職稱等屬性。此外,學(xué)生通過學(xué)號、分?jǐn)?shù)與課程發(fā)生聯(lián)系。如此可得教學(xué)實體模型。教學(xué)實體模型數(shù)據(jù)結(jié)構(gòu)的規(guī)范化信息域分析需要確定數(shù)據(jù)的內(nèi)容,每個數(shù)據(jù)項要用表格列出,最后組織成文件的邏輯結(jié)構(gòu),即面向應(yīng)用而不是面向存儲的結(jié)構(gòu)。為了便于數(shù)據(jù)庫的設(shè)計,常常要對這種結(jié)構(gòu)做一些簡化,其中最常見的一種方法就是規(guī)范化技術(shù)?!耙?guī)范化”將數(shù)據(jù)的邏輯結(jié)構(gòu)歸結(jié)為滿足一定條件的二維表(關(guān)系)。

表格中每個信息項必須是一個不可分割的數(shù)據(jù)項,不可是組項。

表格中每一列(列表示屬性)中所有信息項必須是同一類型,各列的名字(屬性名)互異,列的次序任意。

表格中各行(行表示元組)互不相同,行的次序任意。不滿足上述要求的二維表或關(guān)系,叫做非規(guī)范化關(guān)系。對于非規(guī)范化的關(guān)系,必須將它規(guī)范化,即利用更單純、更規(guī)則的關(guān)系來代替原來的關(guān)系。規(guī)范化的目的是:

消除數(shù)據(jù)冗余,即消除表格中數(shù)據(jù)的重復(fù);消除多義性,使關(guān)系中的屬性含義清楚、單一;使關(guān)系的“概念”單一化,讓每個數(shù)據(jù)項只是一個簡單的數(shù)或字符串,而不是一個組項或重復(fù)組;方便操作。使數(shù)據(jù)的插入、刪除與修改操作可行并方便;使關(guān)系模式更靈活,易于實現(xiàn)接近自然語言的查詢方式。用教學(xué)管理例說明如何規(guī)范化有三個實體型,即課程、學(xué)生和教師,用三個關(guān)系保存它們的信息:

學(xué)生(學(xué)號,姓名,性別,年齡,專業(yè),籍貫)

教師(職工號,姓名,年齡,職稱,工資級別,工資)

課程(課程號,課程名,學(xué)分,學(xué)時,課程類型)為表示實體型之間的聯(lián)系,又建立兩個關(guān)系:

選課

(學(xué)號,課程號,聽課出勤率,作業(yè)完成率,分?jǐn)?shù))

教課

(職工號,課程號)這五個關(guān)系,組成了數(shù)據(jù)庫的模型。在每個關(guān)系中,屬性名下加下劃線)指明關(guān)鍵字。并規(guī)定關(guān)鍵字能唯一地標(biāo)識一個元組。關(guān)系規(guī)范化的程度,通常按屬性間的依賴程度來區(qū)分,并以范式NF(NormalForm)來表達(dá)。常用的范式分為第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。設(shè)R是一個關(guān)系,X和Y是R中的兩個屬性。若對于X的任一個值,Y僅有一個值與之對應(yīng),則稱R的屬性Y函數(shù)依賴于屬性X。例如,教師(職工號,姓名,年齡,)其中,屬性“姓名”,“年齡”等都函數(shù)依賴于屬性“職工號”。屬性X可以是復(fù)合屬性,如:選課(學(xué)號,課程號,聽課出勤率,)如果屬性Y函數(shù)依賴于復(fù)合屬性X,而不與X的任何真子集函數(shù)依賴,則稱屬性Y完全函數(shù)依賴于復(fù)合屬性X。例如在“選課”關(guān)系中,屬性“聽課出勤率”、“作業(yè)完成率”和“分?jǐn)?shù)”等表示某個學(xué)生學(xué)習(xí)某門課程時的學(xué)習(xí)情況。只有同時指定“學(xué)號”和“課程號”,才能準(zhǔn)確地說明是哪位學(xué)生學(xué)習(xí)哪門課程時的學(xué)習(xí)情況。因此,“分?jǐn)?shù)”等屬性完全函數(shù)依賴于“學(xué)號,課程號”。判斷規(guī)范化程度的條件是:

關(guān)系中所有屬性都是“單純域”,即不出現(xiàn)“表中有表”

非主屬性完全函數(shù)依賴于關(guān)鍵字

非主屬性相互獨立,即任何非主屬性間不存在函數(shù)依賴。如果一個關(guān)系連條件

都不滿足,則這個關(guān)系是非規(guī)范化的。如果一個關(guān)系僅滿足條件

,則這個關(guān)系滿足第一范式(1NF)。如果一個關(guān)系滿足條件

、

,但不滿足

,則這個關(guān)系滿足第二范式(2NF)。如果一個關(guān)系同時滿足條件

,則這個關(guān)系表滿足第三范式(3NF)。當(dāng)數(shù)據(jù)模型達(dá)到3NF,一般情況下就能滿足數(shù)據(jù)庫應(yīng)用的需要。數(shù)據(jù)庫分析的過程在需求分析階段進(jìn)行數(shù)據(jù)庫分析的流程為開發(fā)一個系統(tǒng)所使用的數(shù)據(jù)庫,在開始分析數(shù)據(jù)庫的需求前,分析員必須了解該系統(tǒng)的總目標(biāo)和范圍。然后建立一個完整并高度細(xì)化的信息模型。此信息模型應(yīng)包括一個綜合的數(shù)據(jù)詞典,定義所有在開發(fā)數(shù)據(jù)庫時用到的數(shù)據(jù)項。接著數(shù)據(jù)庫分析定義數(shù)據(jù)庫的邏輯特性和物理特性。以信息模型和系統(tǒng)規(guī)格說明為指導(dǎo),定義數(shù)據(jù)庫的邏輯數(shù)據(jù)結(jié)構(gòu)。這種邏輯結(jié)構(gòu)必須適應(yīng)數(shù)據(jù)存取、修改、關(guān)聯(lián)性及其它相關(guān)需求。一旦邏輯數(shù)據(jù)結(jié)構(gòu)建立起來,就可以研制數(shù)據(jù)庫的物理結(jié)構(gòu)。物理數(shù)據(jù)庫結(jié)構(gòu)定義文件結(jié)構(gòu)、記錄格式、與硬件相關(guān)的處理方式以及數(shù)據(jù)庫管理系統(tǒng)的特性。最后,要對模式和物理特性進(jìn)行完全的評審。在數(shù)據(jù)庫分析過程中所考慮的因素間存在著復(fù)雜的相互聯(lián)系。改變其中的任何一個因素都會(潛在地)影響其它的因素。所以必須在各個因素之間進(jìn)行折衷。這種折衷包括專用性和通用性的折衷,信息關(guān)聯(lián)程度、擴(kuò)充潛力及操作特性等方面的折衷??紤]信息關(guān)聯(lián)程度和擴(kuò)充潛力(包括信息規(guī)模和信息內(nèi)容兩方面)主要基于需求分析和設(shè)計階段分派給數(shù)據(jù)庫的專用性程度。專用的數(shù)據(jù)庫要為系統(tǒng)特定的信息需求服務(wù),因此信息結(jié)構(gòu)要設(shè)計得能適應(yīng)要求的關(guān)聯(lián)性和預(yù)計的擴(kuò)充。通用的數(shù)據(jù)庫可以適應(yīng)更為廣泛的各種信息需求,但是為了獲得通用性要付出代價。軟件設(shè)計的目標(biāo)和任務(wù)根據(jù)用信息域表示的軟件需求,以及功能和性能需求,進(jìn)行數(shù)據(jù)設(shè)計系統(tǒng)結(jié)構(gòu)設(shè)計過程設(shè)計。數(shù)據(jù)設(shè)計側(cè)重于數(shù)據(jù)結(jié)構(gòu)的定義。系統(tǒng)結(jié)構(gòu)設(shè)計定義軟件系統(tǒng)各主要成份之間的關(guān)系。過程設(shè)計則是把結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性描述。在編碼步驟,根據(jù)這種過程性描述,生成源程序代碼,然后通過測試最終得到完整有效的軟件。開發(fā)階段的信息流程序模塊測試編碼設(shè)計信息域需求功能與性能需求數(shù)據(jù)設(shè)計過程設(shè)計系統(tǒng)結(jié)構(gòu)設(shè)計組裝好的有效的軟件軟件設(shè)計是后續(xù)開發(fā)步驟及軟件維護(hù)工作的基礎(chǔ)。如果沒有設(shè)計,只能建立一個不穩(wěn)定的系統(tǒng)結(jié)構(gòu)軟件設(shè)計任務(wù)從工程管理的角度來看,軟件設(shè)計分兩步完成。

概要設(shè)計,將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。

詳細(xì)設(shè)計,即過程設(shè)計。通過對結(jié)構(gòu)表示進(jìn)行細(xì)化,得到軟件的詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和算法。軟件設(shè)計過程1.制定規(guī)范在進(jìn)入軟件開發(fā)階段之初,首先應(yīng)為軟件開發(fā)組制定在設(shè)計時應(yīng)該共同遵守的標(biāo)準(zhǔn),以便協(xié)調(diào)組內(nèi)各成員的工作。包括:

閱讀和理解軟件需求說明書,確認(rèn)用戶要求能否實現(xiàn),明確實現(xiàn)的條件,從而確定設(shè)計的目標(biāo),以及它們的優(yōu)先順序根據(jù)目標(biāo)確定最合適的設(shè)計方法規(guī)定設(shè)計文檔的編制標(biāo)準(zhǔn)規(guī)定編碼的信息形式,與硬件,操作系統(tǒng)的接口規(guī)約,命名規(guī)則2.軟件系統(tǒng)結(jié)構(gòu)的總體設(shè)計基于功能層次結(jié)構(gòu)建立系統(tǒng)。采用某種設(shè)計方法,將系統(tǒng)按功能劃分成模塊的層次結(jié)構(gòu)確定每個模塊的功能建立與已確定的軟件需求的對應(yīng)關(guān)系確定模塊間的調(diào)用關(guān)系確定模塊間的接口評估模塊劃分的質(zhì)量3.處理方式設(shè)計確定為實現(xiàn)系統(tǒng)的功能需求所必需的算法,評估算法的性能確定為滿足系統(tǒng)的性能需求所必需的算法和模塊間的控制方式

周轉(zhuǎn)時間響應(yīng)時間吞吐量精度確定外部信號的接收發(fā)送形式4.數(shù)據(jù)結(jié)構(gòu)設(shè)計確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)以及數(shù)據(jù)庫的模式、子模式,進(jìn)行數(shù)據(jù)完整性和安全性的設(shè)計確定輸入,輸出文件的詳細(xì)的數(shù)據(jù)結(jié)構(gòu)結(jié)合算法設(shè)計,確定算法所必需的邏輯數(shù)據(jù)結(jié)構(gòu)及其操作確定對邏輯數(shù)據(jù)結(jié)構(gòu)所必需的那些操作的程序模塊(軟件包)限制和確定各個數(shù)據(jù)設(shè)計決策的影響范圍若需要與操作系統(tǒng)或調(diào)度程序接口所必須的控制表等數(shù)據(jù)時,確定其詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和使用規(guī)則數(shù)據(jù)的保護(hù)性設(shè)計

防衛(wèi)性設(shè)計:在軟件設(shè)計中就插入自動檢錯,報錯和糾錯的功能

一致性設(shè)計:保證軟件運(yùn)行過程中所使用的數(shù)據(jù)的類型和取值范圍不變在并發(fā)處理過程中使用封鎖和解除封鎖機(jī)制保持?jǐn)?shù)據(jù)不被破壞冗余性設(shè)計:針對同一問題,由兩個開發(fā)者采用不同的程序設(shè)計風(fēng)格不同的算法設(shè)計軟件,當(dāng)兩者運(yùn)行結(jié)果之差不在允許范圍內(nèi)時,利用檢錯系統(tǒng)予以糾正,或使用表決技術(shù)決定一個正確結(jié)果。

5.可靠性設(shè)計可靠性設(shè)計也叫做質(zhì)量設(shè)計在運(yùn)行過程中,為了適應(yīng)環(huán)境的變化和用戶新的要求,需經(jīng)常對軟件進(jìn)行改造和修正。在軟件開發(fā)的一開始就要確定軟件可靠性和其它質(zhì)量指標(biāo),考慮相應(yīng)措施,以使得軟件易于修改和易于維護(hù)。6.編寫概要設(shè)計階段的文檔概要設(shè)計階段完成時應(yīng)編寫以下文檔:

概要設(shè)計說明書數(shù)據(jù)庫設(shè)計說明書用戶手冊制定初步的測試計劃7.概要設(shè)計評審可追溯性:確認(rèn)該設(shè)計是否復(fù)蓋了所有已確定的軟件需求,軟件每一成份是否可追溯到某一項需求接口:確認(rèn)該軟件的內(nèi)部接口與外部接口是否已經(jīng)明確定義。模塊是否滿足高內(nèi)聚和低耦合的要求。模塊作用范圍是否在其控制范圍之內(nèi)風(fēng)險:確認(rèn)該設(shè)計在現(xiàn)有技術(shù)條件下和預(yù)算范圍內(nèi)是否能按時實現(xiàn)

實用性:確認(rèn)該設(shè)計對于需求的解決方案是否實用技術(shù)清晰度:確認(rèn)該設(shè)計是否以一種易于翻譯成代碼的形式表達(dá)可維護(hù)性:確認(rèn)該設(shè)計是否考慮了方便未來的維護(hù)質(zhì)量:確認(rèn)該設(shè)計是否表現(xiàn)出良好的質(zhì)量特征各種選擇方案:看是否考慮過其它方案,比較各種選擇方案的標(biāo)準(zhǔn)是什么限制:評估對該軟件的限制是否現(xiàn)實,是否與需求一致其它具體問題:對于文檔、可測試性、設(shè)計過程..等進(jìn)行評估在詳細(xì)設(shè)計過程中,需要完成的工作是:確定軟件各個組成部分內(nèi)的算法以及各部分的內(nèi)部數(shù)據(jù)組織選定某種過程的表達(dá)形式來描述各種算法。進(jìn)行詳細(xì)設(shè)計的評審詳細(xì)設(shè)計軟件設(shè)計基礎(chǔ)

自頂向下,逐步細(xì)化

軟件結(jié)構(gòu)

程序結(jié)構(gòu)

結(jié)構(gòu)圖

模塊化

抽象化

信息隱蔽自頂向下,逐步細(xì)化將軟件的體系結(jié)構(gòu)按自頂向下方式,對各個層次的過程細(xì)節(jié)和數(shù)據(jù)細(xì)節(jié)逐層細(xì)化,直到用程序設(shè)計語言的語句能夠?qū)崿F(xiàn)為止,從而最后確立整個的體系結(jié)構(gòu)。軟件結(jié)構(gòu)軟件結(jié)構(gòu)包括兩部分。程序的模塊結(jié)構(gòu)和數(shù)據(jù)的結(jié)構(gòu)軟件的體系結(jié)構(gòu)通過一個劃分過程來完成。該劃分過程從需求分析確立的目標(biāo)系統(tǒng)的模型出發(fā),對整個問題進(jìn)行分割,使其每個部分用一個或幾個軟件成份加以解決,整個問題就解決了程序結(jié)構(gòu)程序結(jié)構(gòu)表明了程序各個部件(模塊)的組織情況,是軟件的過程表示。

結(jié)構(gòu)圖結(jié)構(gòu)圖反映程序中模塊之間的層次調(diào)用關(guān)系和聯(lián)系:它以特定的符號表示模塊、模塊間的調(diào)用關(guān)系和模塊間信息的傳遞①

模塊:模塊用矩形框表示,并用模塊的名字標(biāo)記它。②

模塊的調(diào)用關(guān)系和接口:模塊之間用單向箭頭聯(lián)結(jié),箭頭從調(diào)用模塊指向被調(diào)用模塊。③

模塊間的信息傳遞:當(dāng)一個模塊調(diào)用另一個模塊時,調(diào)用模塊把數(shù)據(jù)或控制信息傳送給被調(diào)用模塊,以使被調(diào)用模塊能夠運(yùn)行。而被調(diào)用模塊在執(zhí)行過程中又把它產(chǎn)生的數(shù)據(jù)或控制信息回送給調(diào)用模塊④

在模塊A的箭頭尾部標(biāo)以一個菱形符號,表示模塊A有條件地調(diào)用另一個模塊B。當(dāng)一個在調(diào)用箭頭尾部標(biāo)以一個弧形符號,表示模塊A反復(fù)調(diào)用模塊C和模塊D。程序的系統(tǒng)結(jié)構(gòu)圖模塊化軟件系統(tǒng)的模塊化是指整個軟件被劃分成若干單獨命名和可編址的部分,稱之為模塊。這些模塊可以被組裝起來以滿足整個問題的需求。把問題/子問題的分解與軟件開發(fā)中的系統(tǒng)/子系統(tǒng)或系統(tǒng)/模塊對應(yīng)起來,就能夠把一個大而復(fù)雜的軟件系統(tǒng)劃分成易于理解的比較單純的模塊結(jié)構(gòu)。抽象化軟件系統(tǒng)進(jìn)行模塊設(shè)計時,可有不同的抽象層次。在最高的抽象層次上,可以使用問題所處環(huán)境的語言概括地描述問題的解法。在較低的抽象層次上,則采用過程化的方法。(1)過程的抽象

在軟件工程中,從系統(tǒng)定義到實現(xiàn),每進(jìn)展一步都可以看做是對軟件解決方法的抽象化過程的一次細(xì)化。

在軟件需求分析階段,用“問題所處環(huán)境的為大家所熟悉的術(shù)語”來描述軟件的解決方法。

在從概要設(shè)計到詳細(xì)設(shè)計的過程中,抽象化的層次逐次降低。當(dāng)產(chǎn)生源程序時到達(dá)最低抽象層次。例:開發(fā)一個CAD軟件的三層抽象抽象層次Ⅰ.

用問題所處環(huán)境的術(shù)語來描述這個軟件:

該軟件包括一個計算機(jī)繪圖界面,向繪圖員顯示圖形,以及一個數(shù)字化儀界面,用以代替繪圖板和丁字尺。所有直線、折線、矩形、圓及曲線的描畫、所有的幾何計算、所有的剖面圖和輔助視圖都可以用這個CAD軟件實現(xiàn)……。抽象層次Ⅱ.

任務(wù)需求的描述。

CADSOFTWARETASKS

userinteractiontask;

2-Ddrawingcreationtask;graphicsdisplaytask;

drawingfilemanagementtask;

end.

在這個抽象層次上,未給出“怎樣做”的信息,不能直接實現(xiàn)。抽象層次Ⅲ.

程序過程表示。以2-D(二維)繪圖生成任務(wù)為例:

PROCEDURE:2-Ddrawingcreation

REPEATUNTIL(drawingcreationtaskterminates)

DOWHILE(digitizerinteractionoccurs)digitizerinterfacetask;

DETERMINEdrawingrequestCASE;

line:linedrawingtask;

rectangle:rectangledrawingtask;

circle:circledrawingtask;

……(2)數(shù)據(jù)抽象

在不同層次上描述數(shù)據(jù)對象的細(xì)節(jié),定義與該數(shù)據(jù)對象相關(guān)的操作。

例如,在CAD軟件中,定義一個叫做drawing的數(shù)據(jù)對象。可將drawing規(guī)定為一個抽象數(shù)據(jù)類型,定義它的內(nèi)部細(xì)節(jié)為:

TYPEdrawingISSTRUCTUREDEFIND

numberISSTRINGLENGTH(12);

geometryDEFIND……

notesISSTRINGLENGTH(256);

BOMDEFIND

ENDdrawingTYPE;數(shù)據(jù)抽象drawing本身由另外一些數(shù)據(jù)抽象,如geometry、BOM(billofmaterials)構(gòu)成定義drawing的抽象數(shù)據(jù)類型之后,可引用它來定義其它數(shù)據(jù)對象,而不必涉及drawing的內(nèi)部細(xì)節(jié)例如,定義:

blue-printISINSTANCEOFdrawing;

schematicISINSTANCEOFdrawing;

信息隱蔽由parnas方法提倡的信息隱蔽是指,每個模塊的實現(xiàn)細(xì)節(jié)對于其它模塊來說是隱蔽的。也就是說,模塊中所包含的信息(包括數(shù)據(jù)和過程)不允許其它不需要這些信息的模塊使用。模塊的獨立性模塊(Module) “模塊”,又稱“組件”。它一般具有如下三個基本屬性:功能:描述該模塊實現(xiàn)什么功能邏輯:描述模塊內(nèi)部怎么做狀態(tài):該模塊使用時的環(huán)境和條件在描述一個模塊時,還必須按模塊的外部特性與內(nèi)部特性分別描述模塊的外部特性模塊的模塊名、參數(shù)表、其中的輸入?yún)?shù)和輸出參數(shù),以及給程序以至整個系統(tǒng)造成的影響模塊的內(nèi)部特性完成其功能的程序代碼和僅供該模塊內(nèi)部使用的數(shù)據(jù)模塊獨立性模塊獨立性,是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其它的模塊的接口是簡單的例如,若一個模塊只具有單一的功能且與其它模塊沒有太多的聯(lián)系,則稱此模塊具有模塊獨立性一般采用兩個準(zhǔn)則度量模塊獨立性。即模塊間耦合和模塊內(nèi)聚

耦合是模塊之間的互相連接的緊密程度的度量。

內(nèi)聚是模塊功能強(qiáng)度(一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。模塊獨立性比較強(qiáng)的模塊應(yīng)是高內(nèi)聚低耦合的模塊。模塊間的耦合

非直接耦合(NondirectCoupling)

兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的。非直接耦合的模塊獨立性最強(qiáng)。數(shù)據(jù)耦合(DataCoupling)

一個模塊訪問另一個模塊時,彼此之間是通過簡單數(shù)據(jù)參數(shù)

(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來交換輸入、輸出信息的。標(biāo)記耦合(StampCoupling)

一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量??刂岂詈?ControlCoupling)

如果一個模塊通過傳送開關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。外部耦合(ExternalCoupling)

一組模塊都訪問同一全局簡單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。公共耦合(CommonCoupling)

若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。公共耦合的復(fù)雜程度隨耦合模塊的個數(shù)增加而顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。松散公共耦合和緊密公共耦合。內(nèi)容耦合(ContentCoupling)

如果發(fā)生下列情形,兩個模塊之間就發(fā)生了內(nèi)容耦合

(1)一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù);

(2)一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部;

(3)兩個模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中);

(4)一個模塊有多個入口。

c

模塊內(nèi)聚功能內(nèi)聚

(FunctionalCohesion)

一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱該模塊為功能內(nèi)聚模塊。信息內(nèi)聚

(InformationalCohesion)

這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點。這個模塊將根據(jù)不同的要求,確定該執(zhí)行哪一個功能。由于這個模塊的所有功能都是基于同一個數(shù)據(jù)結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的模塊。信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的組合,并且達(dá)到信息的隱蔽。即把某個數(shù)據(jù)結(jié)構(gòu)、資源或設(shè)備隱蔽在一個模塊內(nèi),不為別的模塊所知曉。通信內(nèi)聚

(CommunicationCohesion)

如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。過程內(nèi)聚(ProceduralCohesion)

使用流程圖做為工具設(shè)計程序時,把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。例如,把流程圖中的循環(huán)部分、判定部分、計算部分分成三個模塊,這三個模塊都是過程內(nèi)聚模塊。時間內(nèi)聚(ClassicalCohesion)

時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。邏輯內(nèi)聚(LogicalCohesion)

這種模塊把幾種相關(guān)的功能組合在一起,每次被調(diào)用時,由傳送給模塊的判定參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。巧合內(nèi)聚(CoincidentalCohesion)

巧合內(nèi)聚(偶然內(nèi)聚)。當(dāng)模塊內(nèi)各部分之間沒有聯(lián)系,或者即使有聯(lián)系,這種聯(lián)系也很松散,則稱這種模塊為巧合內(nèi)聚模塊,它是內(nèi)聚程度最低的模塊。結(jié)構(gòu)化設(shè)計方法首先研究、分析和審查數(shù)據(jù)流圖。從軟件的需求規(guī)格說明中弄清數(shù)據(jù)流加工的過程,對于發(fā)現(xiàn)的問題及時解決。然后根據(jù)數(shù)據(jù)流圖決定問題的類型。數(shù)據(jù)處理問題典型的類型有兩種:變換型和事務(wù)型。針對兩種不同的類型分別進(jìn)行分析處理。

由數(shù)據(jù)流圖推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖。利用一些啟發(fā)式原則來改進(jìn)系統(tǒng)的初始結(jié)構(gòu)圖,直到得到符合要求的結(jié)構(gòu)圖為止。修改和補(bǔ)充數(shù)據(jù)詞典。制定測試計劃。

在系統(tǒng)結(jié)構(gòu)圖中的模塊傳入模塊─從下屬模塊取得數(shù)據(jù),經(jīng)過某些處理,再將其傳送給上級模塊。它傳送的數(shù)據(jù)流叫做邏輯輸入數(shù)據(jù)流。傳出模塊─從上級模塊獲得數(shù)據(jù),進(jìn)行某些處理,再將其傳送給下屬模塊。它傳送的數(shù)據(jù)流叫做邏輯輸出數(shù)據(jù)流。變換模塊─它從上級模塊取得數(shù)據(jù),進(jìn)行特定的處理,轉(zhuǎn)換成其它形式,再傳送回上級模塊。它加工的數(shù)據(jù)流叫做變換數(shù)據(jù)流。協(xié)調(diào)模塊─對所有下屬模塊進(jìn)行協(xié)調(diào)和管理的模塊。變換型系統(tǒng)結(jié)構(gòu)圖變換型數(shù)據(jù)處理問題的工作過程大致分為三步,即取得數(shù)據(jù),變換數(shù)據(jù)和給出數(shù)據(jù)。相應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù),變換型系統(tǒng)結(jié)構(gòu)圖由輸入、中心變換和輸出等三部分組成。事務(wù)型系統(tǒng)結(jié)構(gòu)圖它接受一項事務(wù),根據(jù)事務(wù)處理的特點和性質(zhì),選擇分派一個適當(dāng)?shù)奶幚韱卧?,然后給出結(jié)果。在事務(wù)型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按所接受的事務(wù)的類型,選擇某一事務(wù)處理模塊執(zhí)行。各事務(wù)處理模塊并列。每個事務(wù)處理模塊可能要調(diào)用若干個操作模塊,而操作模塊又可能調(diào)用若干個細(xì)節(jié)模塊。變換分析變換分析方法由以下四步組成:重畫數(shù)據(jù)流圖;區(qū)分有效(邏輯)輸入、有效(邏輯)輸出和中心變換部分;進(jìn)行一級分解,設(shè)計上層模塊;進(jìn)行二級分解,設(shè)計輸入、輸出和中心變換部分的中、下層模塊。①

在選擇模塊設(shè)計的次序時,必須對一個模塊的全部直接下屬模塊都設(shè)計完成之后,才能轉(zhuǎn)向另一個模塊的下層模塊的設(shè)計。②

在設(shè)計下層模塊時,應(yīng)考慮模塊的耦合和內(nèi)聚問題,以提高初始結(jié)構(gòu)圖的質(zhì)量。③使用“黑箱”技術(shù):在設(shè)計當(dāng)前模塊時,先把這個模塊的所有下層模塊定義成“黑箱”,在設(shè)計中利用它們時,暫時不考慮其內(nèi)部結(jié)構(gòu)和實現(xiàn)。在這一步定義好的“黑箱”,在下一步就可以對它們進(jìn)行設(shè)計和加工。這樣,又會導(dǎo)致更多的“黑箱”。最后,全部“黑箱”的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。④

在模塊劃分時,一個模塊的直接下屬模塊一般在5個左右。如果直接下屬模塊超過10個,可設(shè)立中間層次。⑤如果出現(xiàn)了以下情況,就停止模塊的功能分解:

當(dāng)模塊不能再細(xì)分為明顯的子任務(wù)時;

當(dāng)分解成用戶提供的模塊或程序庫的子程序時;

當(dāng)模塊的界面是輸入/輸出設(shè)備傳送的信息時;

當(dāng)模塊不宜再分解得過小時。

事務(wù)分析在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或多個處理,這些處理能夠完成該作業(yè)要求的功能。這種數(shù)據(jù)流就叫做事務(wù)。與變換分析一樣,事務(wù)分析也是從分析數(shù)據(jù)流圖開始,自頂向下,逐步分解,建立系統(tǒng)到結(jié)構(gòu)圖。

事務(wù)分析過程①

識別事務(wù)源

利用數(shù)據(jù)流圖和數(shù)據(jù)詞典,從問題定義和需求分析的結(jié)果中,找出各種需要處理的事務(wù)。通常,事務(wù)來自物理輸入裝置。有時,設(shè)計人員還必須區(qū)別系統(tǒng)的輸入、中心加工和輸出中產(chǎn)生的事務(wù)。②

規(guī)定適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu)

在確定了該數(shù)據(jù)流圖具有事務(wù)型特征之后,根據(jù)模塊劃分理論,建立適當(dāng)?shù)氖聞?wù)型結(jié)構(gòu)。③

識別各種事務(wù)和它們定義的操作。

從問題定義和需求分析中找出的事務(wù)及其操作所必需的全部信息,對于系統(tǒng)內(nèi)部產(chǎn)生的事務(wù),必須仔細(xì)地定義它們的操作。④

注意利用公用模塊

在事務(wù)分析的過程中,如果不同事務(wù)的一些中間模塊可由具有類似的語法和語義的若干個低層模塊組成,則可以把這些低層模塊構(gòu)造成公用模塊。⑤

對每一事務(wù),或?qū)β?lián)系密切的一組事務(wù),建立一個事務(wù)處理模塊;

如果發(fā)現(xiàn)在系統(tǒng)中有類似的事務(wù),可以把它們組成一個事務(wù)處理模塊。⑥

對事務(wù)處理模塊規(guī)定它們?nèi)康南聦硬僮髂K⑦對操作模塊規(guī)定它們的全部細(xì)節(jié)模塊

變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法。一般,一個大型的軟件系統(tǒng)是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。所以,我們通常利用以變換分析為主,事務(wù)分析為輔的方式進(jìn)行軟件結(jié)構(gòu)設(shè)計。

軟件模塊結(jié)構(gòu)的改進(jìn)模塊功能的完善化

一個完整的模塊應(yīng)當(dāng)有以下幾部分:

①執(zhí)行規(guī)定的功能的部分;

②出錯處理的部分。當(dāng)模塊不能完成規(guī)定的功能時,必須回送出錯標(biāo)志,出現(xiàn)例外情況的原因。

③如果需要返回數(shù)據(jù)給它的調(diào)用者,在完成數(shù)據(jù)加工或結(jié)束時,應(yīng)當(dāng)給它的調(diào)用者返回一個狀態(tài)碼。

消除重復(fù)功能,改善軟件結(jié)構(gòu)

完全相似:在結(jié)構(gòu)上完全相似,可能只是在數(shù)據(jù)類型上不一致。此時可以采取完全合并的方法。

②局部相似:找出其相同部分,分離出去,重新定義成一個獨立的下一層模塊。還可以與它的上級模塊合并。模塊的作用范圍應(yīng)在控制范圍之內(nèi)

模塊的控制范圍包括它本身及其所有的從屬模塊。模塊的作用范圍是指模塊內(nèi)一個判定的作用范圍,凡是受這個判定影響的所有模塊都屬于這個判定的作用范圍。如果一個判定的作用范圍包含在這個判定所在模塊的控制范圍之內(nèi),則這種結(jié)構(gòu)是簡單的,否則,它的結(jié)構(gòu)是不簡單的。

盡可能減少高扇出結(jié)構(gòu),隨著深度增大扇入。

如果一個模塊的扇出數(shù)過大,就意味著該模塊過分復(fù)雜,需要協(xié)調(diào)和控制過多的下屬模塊。應(yīng)當(dāng)適當(dāng)增加中間層次的控制模塊。

避免或減少使用病態(tài)聯(lián)接

應(yīng)限制使用如下三種病態(tài)聯(lián)接:

直接病態(tài)聯(lián)接即模塊A直接從模塊B內(nèi)部取出某些數(shù)據(jù),或者把某些數(shù)據(jù)直接送到模塊B內(nèi)部。

公共數(shù)據(jù)域病態(tài)聯(lián)接模塊A和模塊B通過公共數(shù)據(jù)域,直接傳送或接受數(shù)據(jù),而不是通過它們的上級模塊。這種方式將使得模塊間的耦合程度劇增。它不僅影響模塊A和模塊B,而且影響與公共數(shù)據(jù)域有關(guān)聯(lián)的所有模塊。③

通信模塊聯(lián)接即模塊A和模塊B通過通信模塊TABLEIT傳送數(shù)據(jù)。從表面看,這不是病態(tài)聯(lián)接,因為模塊A和模塊B都未涉及通信模塊TABLEIT的內(nèi)部。然而,它們之間的通信(即數(shù)據(jù)傳送)沒有通過它們的上級模塊。從這個意義上講,這種聯(lián)接是病態(tài)的。模塊的大小要適中

模塊的大小,可以用模塊中所含語句的數(shù)量的多少來衡量。把模塊的大小限制在一定的范圍之內(nèi)。通常規(guī)定其語句行數(shù)在50~100左右,保持在一頁紙之內(nèi),最多不超過500行。設(shè)計功能可預(yù)測的模塊,但要避免過分受限制的模塊一個功能可預(yù)測的模塊,不論內(nèi)部處理細(xì)節(jié)如何,但對相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的結(jié)果。但是,如果模塊內(nèi)部蘊(yùn)藏有一些特殊的鮮為人知的功能時,這個模塊就可能是不可預(yù)測的。對于這種模塊,如果調(diào)用者不小心使用,其結(jié)果將不可預(yù)測。

如果一個模塊的局部數(shù)據(jù)結(jié)構(gòu)的大小、控制流的選擇或者與外界(人、硬軟件)的接口模式被限制死了,則很難適應(yīng)用戶新的要求或環(huán)境的變更。為了能夠適應(yīng)將來的變更,軟件模塊中局部數(shù)據(jù)結(jié)構(gòu)的大小應(yīng)當(dāng)是可控制的,控制流的選擇對于調(diào)用者來說,應(yīng)當(dāng)是可預(yù)測的。而與外界的接口應(yīng)當(dāng)是靈活的。

軟件包應(yīng)滿足設(shè)計約束和可移植性

為了使得軟件包可以在某些特定的環(huán)境下能夠安裝和運(yùn)行,對軟件包提出了一些設(shè)計約束和可移植的要求。例如,設(shè)計約束有時要求一個程序段在存儲器中覆蓋自身。當(dāng)這種情況出現(xiàn)時,設(shè)計出來的軟件程序結(jié)構(gòu)不得不根據(jù)重復(fù)程度、訪問頻率、調(diào)用間隔等等特性,重新加以組織。設(shè)計的后處理為每一個模塊寫一份處理說明為每一個模塊提供一份接口說明確定全局?jǐn)?shù)據(jù)結(jié)構(gòu)和局部數(shù)據(jù)結(jié)構(gòu)指出所有的設(shè)計約束和限制進(jìn)行概要設(shè)計的評審進(jìn)行設(shè)計的優(yōu)化(如果需要和可能的話)數(shù)據(jù)設(shè)計及文件設(shè)計數(shù)據(jù)設(shè)計的原則文件設(shè)計數(shù)據(jù)設(shè)計的原則R.S.Pressman數(shù)據(jù)設(shè)計的過程

為在需求分析階段所確定的數(shù)據(jù)對象選擇邏輯表示,需要對不同結(jié)構(gòu)進(jìn)行算法分析,以便選擇一個最有效的結(jié)構(gòu);設(shè)計對于這種邏輯數(shù)據(jù)結(jié)構(gòu)的一組操作,以實現(xiàn)各種所期望的運(yùn)算。

確定對邏輯數(shù)據(jù)結(jié)構(gòu)所必需的那些操作的程序模塊(軟件包),以便限制或確定各個數(shù)據(jù)設(shè)計決策的影響范圍。Pressman提出了一組原則,用來定義和設(shè)計數(shù)據(jù)。實際上,在進(jìn)行需求分析時往往就開始了數(shù)據(jù)設(shè)計。1.用于軟件的系統(tǒng)化方法也適用于數(shù)據(jù)。在導(dǎo)出、評審和定義軟件的需求和軟件系統(tǒng)結(jié)構(gòu)時,必須定義和評審其中所用到的數(shù)據(jù)流、數(shù)據(jù)對象及數(shù)據(jù)結(jié)構(gòu)的表示。應(yīng)當(dāng)考慮幾種不同的數(shù)據(jù)組織方案,還應(yīng)當(dāng)分析數(shù)據(jù)設(shè)計給軟件設(shè)計帶來的影響。2.確定所有的數(shù)據(jù)結(jié)構(gòu)和在每種數(shù)據(jù)結(jié)構(gòu)上施加的操作。設(shè)計有效的數(shù)據(jù)結(jié)構(gòu),必須考慮到要對該數(shù)據(jù)結(jié)構(gòu)進(jìn)行的各種操作。3.應(yīng)當(dāng)建立一個數(shù)據(jù)詞典并用它來定義數(shù)據(jù)和軟件的設(shè)計。數(shù)據(jù)詞典清楚地說明了各個數(shù)據(jù)之間的關(guān)系和對數(shù)據(jù)結(jié)構(gòu)內(nèi)各個數(shù)據(jù)元素的約束。

4.低層數(shù)據(jù)設(shè)計的決策應(yīng)推遲到設(shè)計過程的后期進(jìn)行。在進(jìn)行需求分析時確定的總體數(shù)據(jù)組織,應(yīng)在概要設(shè)計階段加以細(xì)化,在詳細(xì)設(shè)計階段才規(guī)定具體的細(xì)節(jié)。5.數(shù)據(jù)結(jié)構(gòu)的表示只限于那些必須直接使用該數(shù)據(jù)結(jié)構(gòu)內(nèi)數(shù)據(jù)的模塊才能知道。此原則就是信息隱蔽和與此相關(guān)的耦合性原則。6.應(yīng)當(dāng)建立一個存放有效數(shù)據(jù)結(jié)構(gòu)及相關(guān)操作的庫。數(shù)據(jù)結(jié)構(gòu)應(yīng)

溫馨提示

  • 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

提交評論