關(guān)于我們
書單推薦
新書推薦
|
軟件工程基礎(chǔ)與應(yīng)用
本書第2版選擇學(xué)生廣為熟知的案例為導(dǎo)引, 系統(tǒng)地介紹軟件工程的基本概念、軟件生命周期、需求的獲取及可行性研究的內(nèi)容, 特別是結(jié)構(gòu)化方法、面向?qū)ο蠹夹g(shù)與UM建模等主流開發(fā)方法的基本原理、特點(diǎn)、一般工具及其在項(xiàng)目開發(fā)過程中的具體運(yùn)用, 以及軟件測試的常用方法、項(xiàng)目管理的一般知識等。
序
軟件工程學(xué)科的發(fā)展有其歷史的必然。近半個(gè)世紀(jì)以來,隨著通信、計(jì)算機(jī)、網(wǎng)絡(luò)應(yīng)用的普及,作為其靈魂的軟件的開發(fā)顯得越來越重要。無數(shù)的反例證明,如果軟件產(chǎn)品的質(zhì)量達(dá)不到要求,帶來的損失是極其嚴(yán)重的。為保證或提高軟件產(chǎn)品的質(zhì)量,最關(guān)鍵的問題就是從技術(shù)和管理兩方面雙管齊下,使用得到實(shí)際考驗(yàn)的一系列最佳軟件開發(fā)實(shí)踐,作為我們工作的指導(dǎo)原則,切實(shí)做好軟件開發(fā)的各項(xiàng)活動。 有人講,軟件工程課程學(xué)不學(xué)沒有用處。事實(shí)上是這樣嗎?絕對不是。我在給清華大學(xué)計(jì)算機(jī)系的工程碩士上軟件工程課的時(shí)候,他們說,他們上的所有課程中,這門課最有用。因?yàn)樗麄兌际菑氖萝浖_發(fā)多年的在職研究生,他們反映,多年來困惑他們的很多問題,從課程中都能找到對應(yīng)的解決方法。有時(shí),看上去是一句普通的“原則”,在實(shí)踐上卻能解決大問題。所以,雖然課本中講了許多條條框框,其實(shí)都是有其實(shí)踐背景的。 還有人講,軟件工程這門課程太枯燥,聽不懂,做不會,學(xué)習(xí)起來提不起興趣。這就是學(xué)習(xí)方法問題了。軟件工程有一條主線,即軟件生命周期過程。它的特點(diǎn)是分階段、有迭代。 從軟件開發(fā)方法來看,不論是傳統(tǒng)的結(jié)構(gòu)化方法,還是面向?qū)ο蠓椒,或新的面向服?wù)架構(gòu),它們都有各自的適用領(lǐng)域,有不同的視角、不同的活動組織方式和不同的架構(gòu)。 從軟件工程過程來看,最基本的是開發(fā)過程、運(yùn)行過程和維護(hù)過程,此外還有各種支持過程和組織過程,它們?yōu)榛具^程提供輔助支持和各種保證。 從軟件工程管理來看,有整體管理,包括啟動、計(jì)劃、執(zhí)行、控制和收尾5大過程,此外,還要考慮需求、成本、進(jìn)度、質(zhì)量、人員、溝通和風(fēng)險(xiǎn)等方面的管理活動。 如果我們明確了軟件工程的主要方面,就可以有目的、系統(tǒng)地進(jìn)行課程的學(xué)習(xí)了。 總之,對于軟件工程,應(yīng)首先想到它是有用的,也可能將來工作后用不到操作系統(tǒng)原理、計(jì)算機(jī)原理等課程所講的內(nèi)容,但只要是從事軟件開發(fā),軟件工程就是回避不了的。其次,要有它不難學(xué)的思想。關(guān)鍵是對將來自己工作的領(lǐng)域要有規(guī)劃,找準(zhǔn)方向,有針對性地學(xué)習(xí)。特別地,由于社會需求〖1〗軟件工程基礎(chǔ)與應(yīng)用(第2版)序[3]〖3〗是不斷變化的,軟件開發(fā)技術(shù)是不斷進(jìn)步的,軟件開發(fā)工具是層出不窮的,我們不要一味追求新的,而應(yīng)該從最成熟、最可靠的技術(shù)和工具學(xué)起。在學(xué)校里打好基礎(chǔ),將來在工作中就很容易接受新東西。 馬小軍老師從事軟件工程的教學(xué)已經(jīng)20多年了,我與她的相識是在20世紀(jì)90年代初她聽我的軟件工程課的時(shí)候。她是一位對工作很認(rèn)真的老師,在這么多年的教學(xué)中已經(jīng)積累了豐富的教學(xué)經(jīng)驗(yàn),并領(lǐng)導(dǎo)了許多軟件開發(fā)項(xiàng)目,從如何培養(yǎng)應(yīng)用型技術(shù)人才角度出發(fā),對軟件工程的教學(xué)體系、課程內(nèi)容選材和實(shí)踐活動組織等各方面都有很好的想法,這本教材的編寫就體現(xiàn)了她的教學(xué)思路和多年教學(xué)的體會,有理論,有案例,全書在內(nèi)容組織方面注重科學(xué)性和系統(tǒng)性,在行文敘述方面頗具簡潔性和可讀性。我推薦同學(xué)們認(rèn)真閱讀,切實(shí)領(lǐng)會其實(shí)質(zhì),不斷進(jìn)步。 清華大學(xué)計(jì)算機(jī)系教授殷人昆 2013年7月
第1章概述/1
1.1軟件的基本概念及特點(diǎn)1 1.1.1軟件是什么1 1.1.2軟件的分類3 1.1.3軟件的發(fā)展5 1.2軟件工程的提出6 1.2.1軟件工程提出的導(dǎo)火索6 1.2.2軟件工程的原理8 1.2.3軟件工程的目標(biāo)9 1.3軟件開發(fā)方法10 1.3.1結(jié)構(gòu)化方法10 1.3.2原型化方法11 1.3.3面向?qū)ο蠓椒?2 1.3.4敏捷開發(fā)方法13 1.4軟件工程師的職業(yè)道德與素質(zhì)14 本章小結(jié)15 習(xí)題16 第2章軟件生存周期模型/17 2.1軟件生存周期及其組成17 2.1.1軟件生存周期的概念和提出的意義17 2.1.2軟件生存周期的劃分與組成18 2.2軟件開發(fā)模型19 2.2.1瀑布模型20 2.2.2快速原型模型21 2.2.3增量模型22 2.2.4螺旋模型22 2.2.5噴泉模型23 2.3常用軟件建模工具24 2.3.1Microsoft Visio24〖1〗軟件工程基礎(chǔ)與應(yīng)用(第2版)目錄[3]〖3〗2.3.2Rational Rose27 本章小結(jié)28 習(xí)題29 第3章用戶需求調(diào)研與可行性分析/30 3.1用戶需求調(diào)研30 3.1.1關(guān)于需求30 3.1.2用戶需求調(diào)研的必要性30 3.1.3需求調(diào)研方法32 3.1.4調(diào)研內(nèi)容和步驟32 3.2業(yè)務(wù)描述35 3.2.1業(yè)務(wù)流程定義35 3.2.2業(yè)務(wù)流程圖36 3.3軟件項(xiàng)目可行性分析39 3.4成本/效益分析41 3.4.1軟件開發(fā)成本估算41 3.4.2軟件效益分析42 本章小結(jié)44 習(xí)題44 第4章基于結(jié)構(gòu)化方法的需求分析/45 4.1需求分析簡述45 4.1.1何為需求分析45 4.1.2需求分析的主要任務(wù)46 4.1.3需求分析的原則47 4.1.4需求分析方法的分類48 4.2結(jié)構(gòu)化分析48 4.2.1結(jié)構(gòu)化分析的特點(diǎn)和原則48 4.2.2結(jié)構(gòu)化分析的主要工具49 4.3數(shù)據(jù)流程圖的構(gòu)建50 4.3.1構(gòu)建數(shù)據(jù)流程圖的作用50 4.3.2數(shù)據(jù)流程圖的基本符號51 4.3.3構(gòu)建數(shù)據(jù)流程圖的步驟52 4.3.4構(gòu)建數(shù)據(jù)流程圖需要注意的問題53 4.4數(shù)據(jù)字典56 4.4.1構(gòu)建數(shù)據(jù)字典的意義和用途56 4.4.2數(shù)據(jù)字典的主要內(nèi)容56 4.4.3構(gòu)建數(shù)據(jù)字典使用的符號57 4.4.4數(shù)據(jù)字典舉例58 4.5結(jié)構(gòu)化分析建模綜合舉例58 4.5.1系統(tǒng)數(shù)據(jù)流程圖58 4.5.2系統(tǒng)數(shù)據(jù)字典61 本章小結(jié)64 習(xí)題64 第5章系統(tǒng)概要設(shè)計(jì)/66 5.1簡述66 5.1.1概要設(shè)計(jì)基本任務(wù)66 5.1.2概要設(shè)計(jì)基本方法67 5.2概要設(shè)計(jì)基本原理69 5.2.1模塊化69 5.2.2抽象70 5.2.3逐步求精70 5.2.4信息隱藏和局部化71 5.2.5模塊獨(dú)立性71 5.3結(jié)構(gòu)化系統(tǒng)設(shè)計(jì)74 5.3.1軟件結(jié)構(gòu)圖種形式74 5.3.2數(shù)據(jù)流程圖的分類75 5.3.3變換型設(shè)計(jì)76 5.3.4事務(wù)型設(shè)計(jì)77 5.4軟件結(jié)構(gòu)的其他描述工具——HIPO圖81 5.5軟件結(jié)構(gòu)的優(yōu)化準(zhǔn)則83 5.6結(jié)構(gòu)化設(shè)計(jì)綜合舉例85 本章小結(jié)88 習(xí)題88 第6章詳細(xì)設(shè)計(jì)與編碼實(shí)現(xiàn)/90 6.1詳細(xì)設(shè)計(jì)的基本任務(wù)90 6.2詳細(xì)設(shè)計(jì)的常用工具90 6.2.1程序流程圖91 6.2.2盒圖92 6.2.3PAD圖93 6.2.4判定表與判定樹93 6.2.5過程設(shè)計(jì)語言的使用95 6.3人機(jī)界面的設(shè)計(jì)96 6.3.1人機(jī)界面一般風(fēng)格97 6.3.2人機(jī)界面設(shè)計(jì)原則及相關(guān)問題99 6.3.3人機(jī)界面設(shè)計(jì)過程100 6.4詳細(xì)設(shè)計(jì)綜合舉例100 6.4.1人機(jī)界面100 6.4.2數(shù)據(jù)庫表設(shè)計(jì)101 6.4.3模塊設(shè)計(jì)103 6.5編碼實(shí)現(xiàn)106 6.5.1編碼工具介紹106 6.5.2編碼工具的選擇107 6.5.3編碼原則107 6.5.4編碼舉例108 本章小結(jié)111 習(xí)題112 第7章面向?qū)ο蠹夹g(shù)/113 7.1面向?qū)ο蟾攀?13 7.1.1面向?qū)ο筇岢龅谋尘?13 7.1.2面向?qū)ο蠓椒ê喗?14 7.1.3面向?qū)ο蠡靖拍?15 7.1.4面向?qū)ο蟮奶卣?18 7.2面向?qū)ο蠓治?19 7.2.1面向?qū)ο蠓治鋈蝿?wù)概述119 7.2.2面向?qū)ο蠓治瞿P?20 7.2.3面向?qū)ο蠓治鲞^程126 7.3面向?qū)ο笤O(shè)計(jì)128 7.3.1面向?qū)ο笤O(shè)計(jì)任務(wù)128 7.3.2面向?qū)ο笤O(shè)計(jì)與面向?qū)ο蠓治龅年P(guān)系129 7.3.3面向?qū)ο笤O(shè)計(jì)基本原則130 7.3.4面向?qū)ο笤O(shè)計(jì)模型132 7.3.5面向?qū)ο笤O(shè)計(jì)過程132 本章小結(jié)135 習(xí)題135 第8章UML建模/137 8.1UML概述137 8.1.1發(fā)展歷史137 8.1.2UML簡介138 8.1.3視圖138 8.1.4UML中的圖139 8.2用例模型的構(gòu)建140 8.2.1用例圖的模型元素141 8.2.2確定參與者142 8.2.3確定用例142 8.3靜態(tài)模型的構(gòu)建146 8.3.1類圖和對象圖146 8.3.2標(biāo)識類的方法150 8.3.3包圖153 8.4動態(tài)模型的構(gòu)建156 8.4.1順序圖156 8.4.2協(xié)作圖157 8.4.3狀態(tài)圖和活動圖158 8.5物理體系結(jié)構(gòu)的構(gòu)建161 8.5.1組件圖161 8.5.2部署圖162 8.6綜合實(shí)例163 8.6.1系統(tǒng)分析163 8.6.2系統(tǒng)設(shè)計(jì)172 8.6.3物理結(jié)構(gòu)設(shè)計(jì)176 本章小結(jié)180 習(xí)題181 第9章測試與維護(hù)/183 9.1軟件測試簡介183 9.1.1測試定義183 9.1.2軟件測試的原則184 9.1.3軟件測試的對象185 9.2軟件測試模型185 9.2.1V模型185 9.2.2W模型186 9.3軟件測試的一般過程187 9.3.1測試需求分析階段187 9.3.2測試計(jì)劃階段187 9.3.3測試方案設(shè)計(jì)階段188 9.3.4測試用例實(shí)現(xiàn)階段188 9.3.5測試執(zhí)行階段188 9.3.6評價(jià)與關(guān)閉階段189 9.4軟件測試常用方法189 9.4.1黑盒測試與白盒測試189 9.4.2黑盒測試法189 9.4.3白盒測試法194 9.5面向?qū)ο鬁y試197 9.6軟件測試自動化與測試工具199 9.6.1軟件測試自動化199 9.6.2軟件測試工具200 9.7軟件調(diào)試201 9.7.1軟件調(diào)試基本概念201 9.7.2軟件測試和軟件調(diào)試的區(qū)別201 9.7.3軟件調(diào)試的步驟201 9.7.4軟件調(diào)試方法202 9.8軟件維護(hù)203 9.8.1軟件維護(hù)的定義203 9.8.2影響維護(hù)工作量的因素203 9.8.3軟件維護(hù)成本204 9.8.4軟件維護(hù)過程204 9.8.5軟件的可維護(hù)性與提高方法206 本章小結(jié)207 習(xí)題207 第10章軟件項(xiàng)目管理/209 10.1軟件規(guī)模估算209 10.1.1軟件規(guī)模估算概述209 10.1.2軟件規(guī)模估算常用方法210 10.2風(fēng)險(xiǎn)管理211 10.2.1軟件項(xiàng)目風(fēng)險(xiǎn)定義及管理重要性211 10.2.2風(fēng)險(xiǎn)識別212 10.2.3風(fēng)險(xiǎn)分析及量化212 10.2.4風(fēng)險(xiǎn)應(yīng)對計(jì)劃212 10.2.5風(fēng)險(xiǎn)監(jiān)控213 10.3人員組織213 10.3.1團(tuán)隊(duì)管理概述213 10.3.2軟件項(xiàng)目組織計(jì)劃213 10.3.3項(xiàng)目組織形式214 10.3.4團(tuán)隊(duì)的組建215 10.3.5團(tuán)隊(duì)合作與溝通217 10.4進(jìn)度管理217 10.4.1進(jìn)度管理定義217 10.4.2進(jìn)度管理過程217 10.4.3軟件項(xiàng)目任務(wù)分解218 10.4.4軟件項(xiàng)目進(jìn)度計(jì)劃219 10.4.5進(jìn)度控制223 10.5質(zhì)量管理224 10.5.1軟件質(zhì)量的定義224 10.5.2軟件質(zhì)量模型225 10.5.3軟件質(zhì)量保證226 10.5.4軟件質(zhì)量控制226 本章小結(jié)228 習(xí)題228 參考文獻(xiàn)/230
第5章系統(tǒng)概要設(shè)計(jì)需求分析中得到的系統(tǒng)分析模型解決了“系統(tǒng)必須做什么”的問題,而“系統(tǒng)怎么做”是由系統(tǒng)概要設(shè)計(jì)來完成的。概要設(shè)計(jì)的基本目的就是回答“系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個(gè)問題。通過這個(gè)階段的工作將劃分出組成系統(tǒng)的物理元素: 模塊、文件、數(shù)據(jù)庫等等,但是每個(gè)物理元素仍然為“黑盒子”——即內(nèi)部結(jié)構(gòu)是不可見、不明確的。概要設(shè)計(jì)階段的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系。
本章主要介紹系統(tǒng)概要設(shè)計(jì)的任務(wù)、基本原理、概要設(shè)計(jì)的基本方法以及軟件結(jié)構(gòu)的描述工具。 本章要點(diǎn): 概要設(shè)計(jì)的基本任務(wù); 概要設(shè)計(jì)基本原理; 內(nèi)聚和耦合; 結(jié)構(gòu)化設(shè)計(jì): 軟件結(jié)構(gòu)圖、變換型和事務(wù)型設(shè)計(jì); 軟件結(jié)構(gòu)的優(yōu)化。 5.1簡述 我們知道,軟件設(shè)計(jì)是把一個(gè)軟件需求轉(zhuǎn)換為軟件表示的過程,而概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))就是軟件設(shè)計(jì)最初形成的一個(gè)表示(這里的表示是一個(gè)名詞),它描述了軟件總的體系結(jié)構(gòu)。簡單地說,軟件概要設(shè)計(jì)就是設(shè)計(jì)出軟件的總體結(jié)構(gòu)框架。 5.1.1概要設(shè)計(jì)基本任務(wù) 軟件概要設(shè)計(jì)階段要完成的任務(wù)主要體現(xiàn)在這樣4個(gè)方面: 軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)、編寫概要設(shè)計(jì)文檔、設(shè)計(jì)評審。 1. 軟件結(jié)構(gòu)設(shè)計(jì) 在需求分析階段,采用結(jié)構(gòu)化技術(shù)已經(jīng)通過抽象確定出軟件系統(tǒng)的功能,并按自頂向下分層描述的方法構(gòu)建出功能模型——數(shù)據(jù)流程圖,而在概要設(shè)計(jì)階段,需要進(jìn)一步分解,將邏輯功能轉(zhuǎn)化為功能模塊,并按層次體現(xiàn)模塊間的結(jié)構(gòu)。具體過程如下: (1) 采用某種設(shè)計(jì)方法,將一個(gè)復(fù)雜的系統(tǒng)按功能劃分成模塊。所謂模塊就是可獨(dú)立存在、有唯一的命名且可直接訪問的程序單元,每個(gè)模塊完成一個(gè)相對獨(dú)立的功能,通常具有功能、邏輯、接口和狀態(tài)等4個(gè)基本屬性。 (2) 確定每個(gè)模塊的功能。 (3) 確定模塊之間的調(diào)用關(guān)系。 (4) 軟件工程基礎(chǔ)與應(yīng)用(第2版)第5章系統(tǒng)概要設(shè)計(jì)[3]〖3〗(4) 確定模塊之間的接口,即模塊之間傳遞的信息。 (5) 評價(jià)模塊結(jié)構(gòu)的質(zhì)量。 2. 數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì) 對于大型數(shù)據(jù)處理的軟件系統(tǒng),數(shù)據(jù)是系統(tǒng)的核心內(nèi)容和處理對象,對數(shù)據(jù)進(jìn)行準(zhǔn)確定義和描述是系統(tǒng)概要設(shè)計(jì)的重要工作,其中包括數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)兩方面的內(nèi)容。 (1) 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。逐步細(xì)化的方法也適用于數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。在需求分析階段,已通過數(shù)據(jù)字典對數(shù)據(jù)的組成、操作約束、數(shù)據(jù)之間的關(guān)系等方面進(jìn)行了描述,確定了數(shù)據(jù)的結(jié)構(gòu)特性,在概要設(shè)計(jì)階段要進(jìn)一步細(xì)化。 (2) 數(shù)據(jù)庫的設(shè)計(jì)。數(shù)據(jù)庫的設(shè)計(jì)指數(shù)據(jù)存儲文件的設(shè)計(jì),主要進(jìn)行以下幾方面設(shè)計(jì): 邏輯設(shè)計(jì)。在ER模型的基礎(chǔ)上,結(jié)合具體的DBMS特征來建立數(shù)據(jù)庫的邏輯結(jié)構(gòu)。對于關(guān)系型的DBMS來說,將概念結(jié)構(gòu)轉(zhuǎn)換為數(shù)據(jù)庫表結(jié)構(gòu),要給出數(shù)據(jù)庫表結(jié)構(gòu)的定義,即定義所含的數(shù)據(jù)項(xiàng)、類型、長度及它們之間的層次或相互關(guān)系的表格等。 物理設(shè)計(jì)。物理設(shè)計(jì)就是設(shè)計(jì)數(shù)據(jù)模式的物理細(xì)節(jié),如數(shù)據(jù)項(xiàng)存儲要求、存取方式、索引的建立等。 3. 編寫概要設(shè)計(jì)文檔 按照軟件工程的理念和生存周期的要求,在概要設(shè)計(jì)結(jié)束之前,需要編寫概要設(shè)計(jì)文檔,為后期軟件實(shí)現(xiàn)、修改和升級打下基礎(chǔ),同時(shí)也為用戶使用提供幫助。在概要設(shè)計(jì)階段,主要有以下文檔需要編寫: (1) 概要設(shè)計(jì)說明書。 (2) 數(shù)據(jù)庫設(shè)計(jì)說明書。 (3) 用戶手冊。 (4) 測試計(jì)劃的修訂版。 4. 評審 概要設(shè)計(jì)的最后一個(gè)任務(wù)就是評審,在概要設(shè)計(jì)中,對設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能和性能要求、設(shè)計(jì)方案的可行性、關(guān)鍵的處理和內(nèi)外部接口定義正確性與有效性以及各部分之間的一致性等都要進(jìn)行評審,以免在后續(xù)設(shè)計(jì)實(shí)現(xiàn)中出現(xiàn)大的問題而返工。 以上就是軟件概要設(shè)計(jì)的4個(gè)基本任務(wù),可以用8個(gè)字總結(jié)概括: 兩類結(jié)構(gòu),文檔評審。 5.1.2概要設(shè)計(jì)基本方法 軟件概要設(shè)計(jì)的方法主要有結(jié)構(gòu)化設(shè)計(jì)、面向?qū)ο蟮脑O(shè)計(jì)和面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。本節(jié)主要介紹這幾種廣泛使用的概要設(shè)計(jì)方法。 1. 結(jié)構(gòu)化設(shè)計(jì)方法 結(jié)構(gòu)化設(shè)計(jì)方法是基于模塊化、自頂向下細(xì)化、結(jié)構(gòu)化程序設(shè)計(jì)等技術(shù)思想的基礎(chǔ)上發(fā)展起來的。結(jié)構(gòu)化設(shè)計(jì)方法給出一組幫助設(shè)計(jì)人員在模塊層次上區(qū)分設(shè)計(jì)質(zhì)量的原理與技術(shù),與結(jié)構(gòu)化分析方法銜接起來使用,以數(shù)據(jù)流程圖為基礎(chǔ)導(dǎo)出軟件的模塊結(jié)構(gòu)。在設(shè)計(jì)過程中,它從整個(gè)軟件的結(jié)構(gòu)出發(fā),利用軟件結(jié)構(gòu)圖表述模塊之間的調(diào)用關(guān)系。 結(jié)構(gòu)化設(shè)計(jì)的步驟如下: (1) 評審和細(xì)化數(shù)據(jù)流程圖。 (2) 分析并確定數(shù)據(jù)流程圖的類型。 (3) 基于上層數(shù)據(jù)流程圖映射出軟件模塊結(jié)構(gòu)的上層框架。 (4) 基于下層數(shù)據(jù)流程圖逐步分解高層模塊,設(shè)計(jì)中下層模塊結(jié)構(gòu)。 (5) 對模塊結(jié)構(gòu)進(jìn)行優(yōu)化,得到更為合理的軟件結(jié)構(gòu)。 (6) 描述模塊接口。 2. 面向?qū)ο笤O(shè)計(jì)方法 面向?qū)ο笤O(shè)計(jì)方法是面向?qū)ο蠹夹g(shù)中的一個(gè)環(huán)節(jié),是對面向?qū)ο蠓治龅哪P瓦M(jìn)行完善設(shè)計(jì)。面向?qū)ο蠓治龇椒ㄊ前褑栴}當(dāng)作一組相互作用的實(shí)體,并確定實(shí)體間的關(guān)系。而面向?qū)ο笤O(shè)計(jì)更多地關(guān)心對象間的協(xié)作。 面向?qū)ο笤O(shè)計(jì)的主要作用是對分析模型進(jìn)行整理,生成設(shè)計(jì)模型,為面向?qū)ο缶幊烫峁╅_發(fā)依據(jù)。面向?qū)ο笤O(shè)計(jì)內(nèi)容包括架構(gòu)設(shè)計(jì)、用例設(shè)計(jì)、子系統(tǒng)設(shè)計(jì)和類設(shè)計(jì)等。其中,架構(gòu)設(shè)計(jì)的重點(diǎn)在于系統(tǒng)的體系框架的合理性,保證系統(tǒng)架構(gòu)在系統(tǒng)的各個(gè)非功能性需求中保持一種平衡;子系統(tǒng)設(shè)計(jì)一般是采用縱向切割,關(guān)注的是系統(tǒng)的功能劃分;類設(shè)計(jì)是通過一組對象交互展示系統(tǒng)的邏輯實(shí)現(xiàn)。具體論述詳見7.3節(jié)。 3. Jackson設(shè)計(jì)方法 該方法由M.A.Jackson提出,其特點(diǎn)是從目標(biāo)系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導(dǎo)出程序框架結(jié)構(gòu),再補(bǔ)充其他細(xì)節(jié),即能夠得到完整的程序結(jié)構(gòu)圖。這一方法對輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應(yīng)用中的文件表格處理。該方法也可與其他方法結(jié)合,用于模塊的詳細(xì)設(shè)計(jì)。 Jackson方法有時(shí)也稱為面向數(shù)據(jù)結(jié)構(gòu)的軟件設(shè)計(jì)方法。該方法一般通過以下5個(gè)步驟來完成設(shè)計(jì): (1) 分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson結(jié)構(gòu)圖來表示這些數(shù)據(jù)結(jié)構(gòu)。 (2) 找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的數(shù)據(jù)單元。 (3) 按以下的規(guī)則由輸入、輸出的數(shù)據(jù)結(jié)構(gòu)導(dǎo)出程序結(jié)構(gòu)。 為每一對在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的單元畫一個(gè)處理框。 為輸入和輸出數(shù)據(jù)結(jié)構(gòu)中剩余的數(shù)據(jù)單元畫一個(gè)處理框。所有處理框在程序結(jié)構(gòu)圖上的位置,應(yīng)與由它處理的數(shù)據(jù)單元在數(shù)據(jù)結(jié)構(gòu)Jackson圖上的位置一致。必要時(shí),可以對映射導(dǎo)出的程序結(jié)構(gòu)圖進(jìn)行進(jìn)一步的細(xì)化。 (4) 列出對每一對輸入、輸出數(shù)據(jù)結(jié)構(gòu)所做的基本操作以及操作的條件,并把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。 (5) 用偽碼寫出每個(gè)處理框的算法。 5.2概要設(shè)計(jì)基本原理 本節(jié)講述在軟件設(shè)計(jì)過程中應(yīng)該遵循的基本原理和相關(guān)概念。 5.2.1模塊化 如前所述已知,模塊是具有特定功能且可以獨(dú)立存在的單元,對后期編碼而言,就是程序代碼和數(shù)據(jù)結(jié)構(gòu)的集合體。按照模塊的定義,過程、函數(shù)、子程序和宏等都可視為模塊。面向?qū)ο蠓椒▽W(xué)中的類是模塊,類內(nèi)的方法(或稱為服務(wù))也可以是模塊。模塊是構(gòu)成軟件的基本單元。 模塊化就是把一個(gè)大的軟件系統(tǒng)劃分為多個(gè)模塊的過程,其中的每個(gè)模塊完成一個(gè)簡單功能,把這些模塊集成起來構(gòu)成一個(gè)軟件系統(tǒng),可以滿足用戶的需求,完成指定的功能。 如果一個(gè)軟件系統(tǒng)僅設(shè)計(jì)為由一個(gè)模塊組成,它的復(fù)雜性將增加,很難被人理解,也不可能做到全面考慮。所以,在軟件設(shè)計(jì)時(shí)一般要將一個(gè)大的系統(tǒng)基于模塊化進(jìn)行分解,降低軟件開發(fā)的復(fù)雜度。根據(jù)人類解決問題的一般規(guī)律,模塊越復(fù)雜,開發(fā)的難度也越大。具體理由論述如下。 ……
你還可能感興趣
我要評論
|