国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【軟件工程】山東大學(xué)軟件工程復(fù)習(xí)提綱

這篇具有很好參考價(jià)值的文章主要介紹了【軟件工程】山東大學(xué)軟件工程復(fù)習(xí)提綱。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

涵蓋所有考點(diǎn),復(fù)習(xí)絕對(duì)高效,點(diǎn)贊+留郵箱獲取pdf版本

軟件工程復(fù)習(xí)提綱

本提綱可以完全摘抄,考試命中率100%,先上考試帶的A4紙:
山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言
山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

1. 名詞解釋題

1. 軟件工程三要素

  • 方法:為軟件開發(fā)提供了“如何做 ”的技術(shù),如項(xiàng)目計(jì)劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計(jì)等;
  • 工具:為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境,如把軟件工具集成起來(lái),建立起稱之為計(jì)算機(jī)輔助軟件工程 (CASE) 的軟件開發(fā)支撐系統(tǒng)。CASE 將各種軟件工具、開發(fā)機(jī)器和一個(gè)存放開發(fā)過(guò)程信息的工程數(shù)據(jù)庫(kù)組合起來(lái)形成一個(gè)軟件工程環(huán)境;
  • 過(guò)程:將軟件工程的方法和工具綜合起來(lái)以達(dá)到合理、及時(shí)地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的,它定義了:方法使用的順序,要求交付的文檔資料,為保證質(zhì)量和適應(yīng)變化所需要的管理,軟件開發(fā)各個(gè)階段完成的里程碑。

2. 軟件工程原則

  • 抽象:抽取事物最基本的特性和行為,忽略非基本的細(xì)節(jié),采用分層次抽象,自頂向下、逐層細(xì)化的辦法控制軟件開發(fā)過(guò)程的復(fù)雜性;
  • 信息隱蔽:將模塊設(shè)計(jì)成“黑箱”,實(shí)現(xiàn)的細(xì)節(jié)隱藏在模塊內(nèi)部,不讓模塊的使用者直接訪問(wèn)。這就是信息封裝,使用與實(shí)現(xiàn)分離的原則,使用者只能通過(guò)模塊接口訪問(wèn)模塊中封裝的數(shù)據(jù);
  • 模塊化:模塊是程序中邏輯上相對(duì)獨(dú)立的成分,是獨(dú)立的編程單位,應(yīng)有良好的接口定義。如C語(yǔ)言程序中的函數(shù)過(guò)程,C++語(yǔ)言程序中的類。模塊化有助于信息隱蔽和抽象,有助于表示復(fù)雜的系統(tǒng);
  • 確定性:軟件開發(fā)過(guò)程中所有概念的表達(dá)應(yīng)是確定的、無(wú)歧義性的、規(guī)范的。這有助于人們之間在交流時(shí)不會(huì)產(chǎn)生誤解、遺漏,保證整個(gè)開發(fā)工作協(xié)調(diào)一致;
  • 一致性:整個(gè)軟件系統(tǒng)(包括程序、文檔和數(shù)據(jù))的各個(gè)模塊應(yīng)使用一致的概念、符號(hào)和術(shù)語(yǔ)。程序內(nèi)部接口應(yīng)保持一致。軟件和硬件、操作系統(tǒng)的接口應(yīng)保持一致。系統(tǒng)規(guī)格說(shuō)明與系統(tǒng)行為應(yīng)保持一致。用于形式化規(guī)格說(shuō)明的公理系統(tǒng)應(yīng)保持一致;
  • 完備性:軟件系統(tǒng)不丟失任何重要成分,可以完全實(shí)現(xiàn)系統(tǒng)所要求功能的程度。為了保證系統(tǒng)的完備性,在軟件開發(fā)和運(yùn)行過(guò)程中需要嚴(yán)格的技術(shù)評(píng)審;
  • 可驗(yàn)證性:開發(fā)大型的軟件系統(tǒng)需要對(duì)系統(tǒng)自頂向下、逐層分解。系統(tǒng)分解應(yīng)遵循系統(tǒng)易于檢查、測(cè)試、評(píng)審的原則,以確保系統(tǒng)的正確性。

3. 軟件生命周期

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

4. 軟件開發(fā)過(guò)程

按照項(xiàng)目的進(jìn)度、成本和質(zhì)量限制,開發(fā)和維護(hù)滿足用戶需求的軟件所必需的一組有序的軟件開發(fā)活動(dòng)集合。

5. 統(tǒng)一開發(fā)過(guò)程

不僅僅是一個(gè)簡(jiǎn)單的軟件過(guò)程,而是一個(gè)通用的過(guò)程框架,可用于不同類型的應(yīng)用系統(tǒng),它是基于構(gòu)件的,所構(gòu)造的軟件系統(tǒng)是由軟件構(gòu)件通過(guò)明確定義的接口相互鏈接所建造起來(lái)的。并且它使用 UML 語(yǔ)言來(lái)制定系統(tǒng)的所有藍(lán)圖。

6. 軟件過(guò)程模型

軟件過(guò)程模型是軟件開發(fā)全過(guò)程中軟件開發(fā)活動(dòng)以及它們之間關(guān)系的結(jié)構(gòu)框架,用于指導(dǎo)軟件的開發(fā)。常用的軟件過(guò)程模型有:

瀑布模型

瀑布模型將開發(fā)階段描述為從一個(gè)階段瀑布般地轉(zhuǎn)換到另一個(gè)階段,一個(gè)階段必須在另一個(gè)階段開始之前完成,每一個(gè)階段都伴隨著定義明確的里程碑和可交付產(chǎn)品。順序?yàn)椋?/p>

  • 需求分析:軟件需求規(guī)格說(shuō)明書;
  • 系統(tǒng)設(shè)計(jì):軟件系統(tǒng)設(shè)計(jì)文檔;
  • 程序設(shè)計(jì):軟件功能模塊算法和數(shù)據(jù)描述文檔;
  • 編碼:源程序和注釋;
  • 單元和集成測(cè)試:?jiǎn)卧图蓽y(cè)試報(bào)告;
  • 系統(tǒng)測(cè)試:系統(tǒng)測(cè)試報(bào)告;
  • 驗(yàn)收測(cè)試:驗(yàn)收測(cè)試報(bào)告;
  • 運(yùn)行和維護(hù):維護(hù)報(bào)告;

優(yōu)點(diǎn):中間產(chǎn)品和接口的定義明確,開發(fā)人員可以專注于完成每一個(gè)小的階段,測(cè)試和審核流程完備,系統(tǒng)整體質(zhì)量高;

缺點(diǎn):缺乏靈活性,速度慢,不能反映實(shí)際的代碼開發(fā)方式;對(duì)開發(fā)人員的要求很高,必須在項(xiàng)目開始前說(shuō)明全部需求;最終產(chǎn)品直到最后才出現(xiàn),而軟件客戶無(wú)法在早期直到軟件原型。

適用場(chǎng)合:①有穩(wěn)定的產(chǎn)品定義和需求分析;②容易理解但很復(fù)雜的項(xiàng)目;③質(zhì)量需求高于成本需求和進(jìn)度需求;④開發(fā)團(tuán)隊(duì)的技術(shù)力量較弱或缺乏經(jīng)驗(yàn)。

原型模型

開發(fā)人員在與用戶進(jìn)行需求分析時(shí),以較小代價(jià)快速建立一個(gè)能反映用戶需求的原型系統(tǒng),綜合用戶的意見對(duì)原型系統(tǒng)進(jìn)行完善,然后再由用戶評(píng)價(jià),重復(fù)這一過(guò)程直到用戶滿意,再開始正式設(shè)計(jì)。

優(yōu)點(diǎn):符合人們認(rèn)識(shí)事物的規(guī)律,縮短了用戶和開發(fā)人員之間的距離,確保設(shè)計(jì)的軟件是符合用戶要求的,縮短了整體開發(fā)周期;

缺點(diǎn):難以模擬大型系統(tǒng)和批處理系統(tǒng),文檔容易被忽略,項(xiàng)目難以清晰地規(guī)劃和管理。

適用場(chǎng)合:①不能預(yù)先確切定義需求的軟件系統(tǒng);②開發(fā)人員不能很好地交流的情況。

增量模型

先開發(fā)系統(tǒng)的主要功能,然后,隨著時(shí)間推進(jìn),不斷增加新的次要功能,最終開發(fā)出一個(gè)完整的軟件產(chǎn)品。

優(yōu)點(diǎn):①有利于增加客戶對(duì)系統(tǒng)的信心;②降低系統(tǒng)失敗風(fēng)險(xiǎn);提高系統(tǒng)可靠性,穩(wěn)定性和可維護(hù)性;

缺點(diǎn):①增量粒度難以選擇;②每個(gè)增量必須依賴之前的增量,耦合度增加;③容易退化為邊做邊改,失去軟件過(guò)程的整體性。

適用場(chǎng)合:①進(jìn)行已有產(chǎn)品升級(jí)或新版本開發(fā);②完成期限嚴(yán)格要求的產(chǎn)品;③已有原型系統(tǒng);④開發(fā)人員整體水平有限,可以邊學(xué)習(xí)邊開發(fā)。

螺旋模型

螺旋模型的基本做法是在“瀑布模型”的每?個(gè)開發(fā)階段前,引入?個(gè)非常嚴(yán)格的風(fēng)險(xiǎn)識(shí)別、風(fēng)險(xiǎn)分析和風(fēng)險(xiǎn)控制。它把軟件項(xiàng)目分解成?個(gè)個(gè)小項(xiàng)目,每個(gè)小項(xiàng)目都標(biāo)識(shí)?個(gè)或多個(gè)主要風(fēng)險(xiǎn),直到所有的主要風(fēng)險(xiǎn)因素都被確定。

四象限:螺旋模型每次迭代有四個(gè)任務(wù),依次是:計(jì)劃、目標(biāo)/可選方案、風(fēng)險(xiǎn)評(píng)估、 開發(fā)與測(cè)試;

四循環(huán):螺旋模型共有四次迭代,依次是:操作概念、軟件需求、軟件設(shè)計(jì)、開發(fā)與測(cè)試。

優(yōu)點(diǎn):①支持需求的動(dòng)態(tài)變化,具有良好的擴(kuò)展性;②易于用戶和開發(fā)人員共同理解需求,還可作為繼續(xù)開發(fā)的基礎(chǔ);③強(qiáng)調(diào)風(fēng)險(xiǎn)分析,使軟件最終的安全性和穩(wěn)定性都大大提升;

缺點(diǎn):①需要開發(fā)人員有豐富的風(fēng)險(xiǎn)評(píng)估知識(shí);②開發(fā)周期長(zhǎng),迭代次數(shù)多,可能延遲項(xiàng)目驗(yàn)收時(shí)間。

敏捷開發(fā)模型

為緩和傳統(tǒng)開發(fā)模型固守成規(guī)的缺點(diǎn),提出了敏捷開發(fā)模型,它以用戶的需求進(jìn)化為核心,采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開發(fā),總體目標(biāo)是:盡早地、持續(xù)性地交付有價(jià)值的軟件,使客戶滿意。

敏捷宣言:

  • 個(gè)人和交互 > 過(guò)程和工具:面對(duì)面溝通而不是文檔溝通;
  • 軟件的生產(chǎn) > 文檔的編寫:成功的指標(biāo)是軟件正確工作的程度;
  • 與客戶合作 > 合同和談判:以客戶的需求為主導(dǎo)核心;
  • 對(duì)變化的反應(yīng) > 遵循計(jì)劃:不可能在開始時(shí)就能預(yù)測(cè)到所有變化。

極限編程:

是典型的敏捷開發(fā)方法,包含 4 個(gè)理念:①交流:客戶與開發(fā)人員之間持續(xù)地交換看法;②簡(jiǎn)單性:選擇簡(jiǎn)單的實(shí)現(xiàn)來(lái)滿足客戶的需要;③勇氣:盡早和經(jīng)常性地做出交付的承諾;④反饋:各種反饋活動(dòng)應(yīng)該貫穿整個(gè)過(guò)程。

敏捷管理實(shí)踐:

  • 每日站立會(huì)議:每日工作前,由 Scrum Master 帶領(lǐng)團(tuán)隊(duì)成員準(zhǔn)時(shí)例行溝通項(xiàng)目進(jìn)展和解決方案;
  • 可視化管理:將項(xiàng)目狀態(tài)通過(guò)物理實(shí)體實(shí)時(shí)展示,讓團(tuán)隊(duì)所有成員直觀地獲取當(dāng)前項(xiàng)目進(jìn)展信息;
  • 用戶故事:站在用戶的視角,用簡(jiǎn)短的語(yǔ)句描述用戶需求;
  • 結(jié)對(duì)編程:使用一個(gè)鍵盤,兩個(gè)結(jié)成對(duì)的程序員,一個(gè)負(fù)責(zé)敲入代碼,而另外一個(gè)實(shí)時(shí)檢視每一行敲入的代碼;
  • 測(cè)試驅(qū)動(dòng)開發(fā):在編寫任何代碼之前,首先編寫定義代碼功能的測(cè)試用例,編寫的代碼要通過(guò)用例;
  • 持續(xù)集成:團(tuán)隊(duì)的成員經(jīng)常集成他們的工作,通常每人每天至少集成一次,大幅度縮短反饋周期;

優(yōu)點(diǎn):①采用簡(jiǎn)單計(jì)劃策略,不需要長(zhǎng)期計(jì)劃和復(fù)雜模型,開發(fā)周期短;②在全過(guò)程采用迭代增量開發(fā)、反饋修正和反復(fù)測(cè)試的方法,能夠適應(yīng)用戶經(jīng)常變化的需求;③注重市場(chǎng)快速反應(yīng)能力,客戶前期滿意度高;

缺點(diǎn):①注重人員的溝通,忽略文檔的重要性,若項(xiàng)目人員流動(dòng)大太,給維護(hù)帶來(lái)不少難度;②對(duì)編碼人員的經(jīng)驗(yàn)要求高,若項(xiàng)目存在新手比較多時(shí),老員工比較累。

適用范圍:①項(xiàng)目經(jīng)常發(fā)生變更;②高風(fēng)險(xiǎn)的項(xiàng)目實(shí)施;③開發(fā)人員水平高,可以參與決策;④有優(yōu)秀的敏捷顧問(wèn)。

7. 跟蹤項(xiàng)目進(jìn)展

  • 項(xiàng)目進(jìn)度:項(xiàng)目進(jìn)度是對(duì)特定項(xiàng)目的軟件開發(fā)周期的刻畫。包括對(duì)項(xiàng)目階段、步驟、活動(dòng)的分解,對(duì)各個(gè)離散活動(dòng)的交互關(guān)系的描述,以及對(duì)各個(gè)活動(dòng)完成時(shí)間及整個(gè)項(xiàng)目完成時(shí)間的初步估算。

  • 活動(dòng):項(xiàng)目的一部分,一般占用項(xiàng)目進(jìn)度計(jì)劃的一段時(shí)間;

  • 里程碑:特定的時(shí)間節(jié)點(diǎn),標(biāo)志著活動(dòng)的結(jié)束,通常伴隨著提交產(chǎn)物;

  • WBS:Work Breakdown Structure,項(xiàng)?按?定的原則分解,項(xiàng)?分解成任務(wù),任務(wù)再分解成?項(xiàng)項(xiàng)?作,再把?項(xiàng)項(xiàng)?作分配到每個(gè)?的??;顒?dòng)中,直到分解不下去為?,樹形表示;

  • WBS 分解方法:①類比法:參考類似的項(xiàng)目方法或模板;②自頂向下法;③自底向上法;

  • 活動(dòng)圖:描述活動(dòng)之間的依賴關(guān)系,圖中結(jié)點(diǎn)是項(xiàng)目里程碑,線表示活動(dòng);

  • AOE 網(wǎng)絡(luò):有向圖 G 中,若用頂點(diǎn)代表事件,有向邊表示活動(dòng),有向邊上的權(quán)值表示一項(xiàng)活動(dòng)持續(xù)的時(shí)間,則稱圖 GAOE 網(wǎng)絡(luò);

    • 關(guān)鍵路徑:從源點(diǎn)到匯點(diǎn)的最長(zhǎng)路徑;
    • 關(guān)鍵活動(dòng):關(guān)鍵路徑上的活動(dòng)?;?qū)φ麄€(gè)工程的最短完成時(shí)間有影響的活動(dòng)。即如它不能按期完成就會(huì)影響整個(gè)工程。;
  • 項(xiàng)目組織:

    • 民主制程序員組:小組成員完全平等,互相交流以做出決策,適用規(guī)模較小的組織;
    • 主程序員組:每個(gè)小組成員必須經(jīng)常與主程序員交流,而不必與其他小組成員交流;
    • 現(xiàn)代程序員組:結(jié)合民主制程序員組和主程序員組的優(yōu)點(diǎn),“主程序員”由兩人擔(dān)任,技術(shù)負(fù)責(zé)人負(fù)責(zé)小組的技術(shù)活動(dòng),行政負(fù)責(zé)人負(fù)責(zé)所有非技術(shù)的管理決策。

8. 軟件規(guī)模評(píng)估方法

①代碼行分析法;②功能點(diǎn)分析法;③專家判斷技術(shù);④標(biāo)準(zhǔn)回歸技術(shù);⑤神經(jīng)網(wǎng)絡(luò)技術(shù);⑥貝葉斯分析技術(shù);⑦類比法。

9. 軟件風(fēng)險(xiǎn)

使軟件項(xiàng)目的實(shí)施受到影響和損失、甚至導(dǎo)致失敗的、可能會(huì)發(fā)生的事件。

  • 風(fēng)險(xiǎn)影響:發(fā)生風(fēng)險(xiǎn)后會(huì)造成的損失;
  • 風(fēng)險(xiǎn)概率:發(fā)生風(fēng)險(xiǎn)的概率;
  • 風(fēng)險(xiǎn)暴露:= 風(fēng)險(xiǎn)影響 × 風(fēng)險(xiǎn)概率,量化風(fēng)險(xiǎn)所造成的影響;
  • 降低風(fēng)險(xiǎn)的三種策略:
    • 避免風(fēng)險(xiǎn):通過(guò)改變軟件的性能或功能需求;
    • 轉(zhuǎn)移風(fēng)險(xiǎn):把風(fēng)險(xiǎn)分配到其它系統(tǒng)中,或購(gòu)買保險(xiǎn);
    • 控制風(fēng)險(xiǎn):預(yù)先假設(shè)風(fēng)險(xiǎn)會(huì)發(fā)生,接受并采取措施提前控制;
  • 風(fēng)險(xiǎn)杠桿:= (降低前的風(fēng)險(xiǎn)暴露 - 降低后的風(fēng)險(xiǎn)暴露) / 降低風(fēng)險(xiǎn)的成本,如果杠桿值不夠高,不足以證明采取措施的理由,那么可以采取其它措施降低風(fēng)險(xiǎn)。

10. CASE

計(jì)算機(jī)輔助軟件工程,用來(lái)支持管理系統(tǒng)開發(fā)的、由各種計(jì)算機(jī)輔助軟件和工具組成的大型綜合性軟件開發(fā)環(huán)境,如圖工具、流程建模工具、文檔編寫工具、集成測(cè)試工具的集合。

11. 需求

需求是對(duì)期望的行為的表達(dá),是用戶需解決某一問(wèn)題或達(dá)到某一目標(biāo)所需的軟件功能;

  • 功能需求:描述系統(tǒng)預(yù)期提供的功能或服務(wù);
  • 非功能需求:指那些不直接與系統(tǒng)具體功能相關(guān)的一類需求,如并發(fā)性,響應(yīng)時(shí)間,可靠性;
  • 領(lǐng)域需求:源于系統(tǒng)的應(yīng)用領(lǐng)域需求,如敏感信息下載后要及時(shí)刪除;

12. OCL(對(duì)象約束語(yǔ)言)

Object Constraint Language,是一個(gè)形式化語(yǔ)言,和 ER 圖或 UML 緊密結(jié)合在一起,用于表示類圖中的不變量、前置條件、后置條件、轉(zhuǎn)移條件等,幫助類圖表示地更清晰。

13. 原型化需求

開發(fā)人員快速構(gòu)建一個(gè)原型以確保是否符合用戶需求,在需求確定后再開始正式開發(fā);

  • 拋棄型原型:編寫快速但不考慮質(zhì)量的原型,可以迅速抓住問(wèn)題的核心,一旦確定需求就拋棄掉它,速度快但可迭代性差;
  • 演化型原型:編寫的原型不僅要抓住問(wèn)題核心,還要迭代成為最終產(chǎn)品,速度慢但可迭代性高;
  • 快速原型化:上述兩種方法統(tǒng)稱為快速原型化。

14. 設(shè)計(jì)過(guò)程模型:

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

軟件系統(tǒng)設(shè)計(jì)是一個(gè)迭代的過(guò)程,最終結(jié)果是軟件體系結(jié)構(gòu)文檔(SAD)。

15. 分解

自頂向下地分解軟件涉及的每一個(gè)模塊,幫助開發(fā)者更好地把握軟件設(shè)計(jì)流程,幾個(gè)流行的分解方案為:

  • 面向功能的分解:把功能或需求分解成模塊;
  • 面向特征的分解:也是把功能或需求分解成模塊,但是為模塊制定了細(xì)化的特征;
  • 面向數(shù)據(jù)的分解:將數(shù)據(jù)分解成模塊;
  • 面向進(jìn)程的分解:將系統(tǒng)分解成一系列并發(fā)的進(jìn)程;
  • 面向事件的分解:將系統(tǒng)處理的事件分解成模塊;
  • 面向?qū)ο蟮姆纸猓簩?duì)象分解成模塊;

16. 模塊化的

當(dāng)系統(tǒng)的每個(gè)活動(dòng)都僅由對(duì)應(yīng)的軟件單元實(shí)現(xiàn),并且每個(gè)軟件單元的輸入和輸出都已經(jīng)明確地被定義時(shí),設(shè)計(jì)才可以說(shuō)是模塊化的;

17. 定義明確的

如果一個(gè)軟件單元的接口能夠準(zhǔn)確無(wú)誤地指定該單元的外部可見行為,則稱該軟件單元是定義明確的;

18. 視圖

將軟件分解形成為構(gòu)件后,將它們合適地排列以展示各個(gè)構(gòu)件之間的交互和系統(tǒng)整體的架構(gòu)的一種表示形式;體系結(jié)構(gòu)視圖包含以下幾種:

  • 分解視圖:例如 UML 用例圖,是層次化的分解,使用了多種模型,每個(gè)模塊是可編程的;
  • 依賴視圖:展示了軟件單元之間的依賴關(guān)系,幫助確定哪些單元是獨(dú)立的,哪些是耦合的;
  • 泛化視圖:展示了一個(gè)軟件單元是否被另一個(gè)單元所泛化,在設(shè)計(jì)抽象單元時(shí)經(jīng)常使用;
  • 執(zhí)行視圖:傳統(tǒng)的 方框->箭頭 視圖,展示了系統(tǒng)運(yùn)行時(shí)的結(jié)構(gòu),每個(gè)構(gòu)件都是執(zhí)行實(shí)體;
  • 實(shí)現(xiàn)視圖:在代碼單元和源文件之間建立映射,有助于管理源代碼;
  • 部署視圖:在運(yùn)行實(shí)體和 IT 資源之間建立映射,幫助分析系統(tǒng)的底層設(shè)計(jì);
  • 工作分配視圖:每個(gè)構(gòu)件是分配給團(tuán)隊(duì)成員的任務(wù),有助于項(xiàng)目管理;

19. 體系結(jié)構(gòu)風(fēng)格

體系結(jié)構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語(yǔ)義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)。

經(jīng)典的體系結(jié)構(gòu)風(fēng)格:

  • 管道/過(guò)濾器:將數(shù)據(jù)輸入到過(guò)濾器中得到輸出數(shù)據(jù),通過(guò)管道將數(shù)據(jù)從一個(gè)過(guò)濾器中傳輸?shù)较乱粋€(gè)過(guò)濾器;

    • 優(yōu)點(diǎn):
      • 各個(gè)模塊相對(duì)獨(dú)立,在輸入和輸出定義清楚后,便于模塊化開發(fā)和測(cè)試;
      • 支持一些特定的分析,例如吞吐量計(jì)算和死鎖檢測(cè);
      • 并發(fā)性高,當(dāng)一個(gè)模塊的吞吐量達(dá)到瓶頸后,可以新增一個(gè)同樣的構(gòu)建分擔(dān)壓力;
    • 缺點(diǎn):
      • 交互式處理能力弱;
      • 具體實(shí)現(xiàn)比較復(fù)雜,例如要考慮數(shù)據(jù)流同步問(wèn)題和數(shù)據(jù)加解密問(wèn)題;
  • 層次結(jié)構(gòu):整個(gè)系統(tǒng)被組織成一個(gè)分層結(jié)構(gòu),每一層為上層提供服務(wù),并作為下一層的客戶。

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    • 優(yōu)點(diǎn):

      • 層次結(jié)構(gòu)風(fēng)格支持系統(tǒng)設(shè)計(jì)過(guò)程中的逐級(jí)抽象;
      • 基于層次結(jié)構(gòu)風(fēng)格的系統(tǒng)具有較好的可擴(kuò)展性;
      • 層次結(jié)構(gòu)風(fēng)格支持軟件復(fù)用;
    • 缺點(diǎn):

      • 并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式;
      • 很難找到一個(gè)合適的、正確的層次抽象方法;
  • C/S 風(fēng)格:C/S 體系結(jié)構(gòu)有三個(gè)主要組成部分:客戶機(jī)、服務(wù)器和專用的網(wǎng)絡(luò);

    • 優(yōu)點(diǎn):①界面豐富,可操作性高;②安全性高;③響應(yīng)速度快;
    • 缺點(diǎn):①適用范圍窄;②用戶群固定;③維護(hù)成本高;④需安裝專門的軟件;
  • B/S 風(fēng)格:B/S體系結(jié)構(gòu)有三個(gè)主要組成部分:瀏覽器、 Web 服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器;

    • 優(yōu)點(diǎn):①維護(hù)和升級(jí)方式簡(jiǎn)單;②交互性強(qiáng);③對(duì)客戶機(jī)的配置要求低;
    • 缺點(diǎn):①在速度和安全性上需要花費(fèi)巨大的成本;②需要刷新頁(yè)面;③通信開銷大;

20. 設(shè)計(jì)原則

設(shè)計(jì)原則是指把系統(tǒng)功能和行為分解成模塊的指導(dǎo)方針。

六種重要的設(shè)計(jì)原則:

  • 模塊化:把系統(tǒng)中各不相關(guān)的部分進(jìn)行分離的原則,以便于各部分能夠獨(dú)立研究,也稱為關(guān)注點(diǎn)分離,每個(gè)模塊都有自己唯一的目的,并且相對(duì)獨(dú)立于其它模塊。

    使用兩個(gè)概念來(lái)度量模塊的獨(dú)立程度:耦合度和內(nèi)聚度;

    • 耦合度:兩個(gè)模塊之間存在著很強(qiáng)的依賴關(guān)系稱為緊密耦合,兩個(gè)模塊之間存在較少依賴關(guān)系稱為松散耦合,模塊之間沒(méi)有任何依賴關(guān)系稱為無(wú)耦合。耦合越松散,模塊之間的聯(lián)系就越小,模塊的獨(dú)立性就越強(qiáng)。

      常見的耦合類型:

      • 非直接耦合:兩個(gè)模塊都能獨(dú)立地工作而不需要另一個(gè)模塊的存在,耦合度最低;
      • 數(shù)據(jù)耦合:兩個(gè)模塊彼此之間通過(guò)傳參交換數(shù)據(jù),稱為數(shù)據(jù)耦合;
      • 標(biāo)記耦合:兩個(gè)模塊之間傳參交換復(fù)雜的數(shù)據(jù)結(jié)構(gòu)變量,如數(shù)組、類名;
      • 控制耦合:兩個(gè)模塊之間傳遞的信息是控制信息,表現(xiàn)在循環(huán)和條件判斷語(yǔ)句中;
      • 公共耦合:各模塊訪問(wèn)同一個(gè)公共數(shù)據(jù),如共享內(nèi)存區(qū),只讀的公共耦合是松散耦合,讀寫的公共耦合是緊密耦合;
      • 內(nèi)容耦合:耦合度最高,①一個(gè)模塊直接訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);②一個(gè)模塊通過(guò)分支進(jìn)入了另一個(gè)模塊;③模塊之間的代碼發(fā)送重疊;

      盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共耦合的范圍,完全不采用內(nèi)容耦合。

    • 內(nèi)聚度:內(nèi)聚是衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度,一個(gè)模塊內(nèi)聚程度越高,說(shuō)明該模塊內(nèi)部各元素之間的關(guān)聯(lián)也就越強(qiáng)。

      內(nèi)聚度由低到高為:

      • 偶然內(nèi)聚:只是因?yàn)榍珊匣蚍奖愕脑?,不相關(guān)的功能、進(jìn)程或數(shù)據(jù)處于同一個(gè)模塊中,是最差的一種內(nèi)聚,模塊不易理解,不易維護(hù),不易重用;
      • 邏輯內(nèi)聚:模塊中的各個(gè)部分只通過(guò)代碼的邏輯結(jié)構(gòu)相關(guān)聯(lián),但實(shí)際功能沒(méi)有關(guān)聯(lián);
      • 時(shí)間內(nèi)聚:各個(gè)元素必須在同一時(shí)間內(nèi)執(zhí)行(比如系統(tǒng)初始化),優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是模塊結(jié)合了許多無(wú)關(guān)的任務(wù),一旦模塊失敗,難以定位錯(cuò)誤位置;
      • 過(guò)程內(nèi)聚:元素之間有順序關(guān)系,調(diào)用前面元素之后,緊接著調(diào)用后面的,例如必須先進(jìn)行詞法分析,才能進(jìn)行語(yǔ)法分析;
      • 通信內(nèi)聚:模塊各功能部分都操作同一輸入 ,或產(chǎn)生同一輸出,例如語(yǔ)法分析和語(yǔ)義分析都操作詞法分析的結(jié)果,都輸出中間代碼;
      • 順序內(nèi)聚:模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行,前一元素的輸出就是下一元素的輸入,例如將詞法分析–>語(yǔ)法分析–>語(yǔ)義分析和中間代碼生成整合成一個(gè)模塊;順序內(nèi)聚模塊中的各個(gè)部分在功能和執(zhí)行順序上都密切相關(guān),構(gòu)成個(gè)不可分割的整體,因此內(nèi)聚程度高且易于理解;
      • 功能內(nèi)聚:一個(gè)模塊內(nèi)所有處理元素僅為完成功能而協(xié)同工作,緊密聯(lián)系,不可分割,且沒(méi)有副作用,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。在設(shè)計(jì)時(shí)應(yīng)盡可能使模塊到達(dá)功能內(nèi)聚這一級(jí)。
  • 接口:接口定義了模塊能正確工作的環(huán)境,以及格式化的輸入輸出,隱藏了模塊實(shí)現(xiàn)細(xì)節(jié);

  • 信息隱藏:對(duì)使用模塊的用戶隱藏模塊實(shí)現(xiàn)相關(guān)的信息,例如用戶只需要知道函數(shù)能夠排序,而不需管其底層是冒泡排序還是快速排序;

  • 增量式開發(fā):將每個(gè)模塊看作一個(gè)增量組件,并按優(yōu)先級(jí)分批次分析、設(shè)計(jì)、開發(fā)、測(cè)試和交付增量組件;

  • 抽象:忽略細(xì)節(jié),提煉出模塊之間的共性,或建設(shè)整體視圖,或設(shè)計(jì)接口類;

  • 通用性:開發(fā)軟件時(shí),盡量使其成為通用的軟件,以便在將來(lái)將其復(fù)用到另一系統(tǒng)中;

21. 面向?qū)ο笕笤瓌t

封裝、繼承和多態(tài);

22. 面向?qū)ο笤O(shè)計(jì)原則

  • 單一職責(zé)原則:一個(gè)類只負(fù)責(zé)一個(gè)職責(zé),這樣可以增加模塊的可復(fù)用性,系統(tǒng)整體高內(nèi)聚、低耦合;

  • 開閉原則:一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,即在不改變本身代碼的情況下其行為能擴(kuò)展,面臨新的需求時(shí),不要更改已有的代碼,而是在其基礎(chǔ)上進(jìn)行擴(kuò)展;

    • 抽象化是開閉原則的關(guān)鍵;
  • 里氏代換原則:一個(gè)軟件如果使用的是一個(gè)父類的話,那么一定適用于其子類,而察覺(jué)不出父類對(duì)象和子類對(duì)象的區(qū)別。也即是說(shuō),在軟件里面,把父類替換成它的子類,程序的行為不會(huì)有變化,簡(jiǎn)單地說(shuō),子類型必須能夠替換掉它們的父類型;

    • 反過(guò)來(lái)則不成立,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類的話,那么它不一定能夠使用基類;
    • 在程序中盡量使用基類類型來(lái)對(duì)對(duì)象進(jìn)行定義,而在運(yùn)行時(shí)再確定其子類類型,用子類對(duì)象來(lái)替換父類對(duì)象;
    • 子類可以擴(kuò)展父類的方法,但是不能修改父類的方法,本質(zhì)上也是對(duì)開閉原則的一種完善;
  • 依賴倒轉(zhuǎn)原則:高層模塊不應(yīng)該依賴低層模塊,它們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。

    • 要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程;
    • 常用實(shí)現(xiàn)方式之一是在代碼中使用抽象類,而將具體類放在配置文件中;
    • 以抽象方式耦合是依賴倒轉(zhuǎn)原則的關(guān)鍵;

    例如,下圖1未實(shí)現(xiàn)依賴倒轉(zhuǎn)原則,圖2實(shí)現(xiàn)了依賴倒轉(zhuǎn)原則:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 合成復(fù)用原則:盡量使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)用的目的;

    • 復(fù)用時(shí)要盡量使用 組合/聚合 關(guān)系,少用繼承;
    • 繼承復(fù)用稱為白箱復(fù)用,因?yàn)楦割悓?duì)子類是完全透明的,組合/聚合 復(fù)用是黑箱復(fù)用;

    例如,下圖1是繼承復(fù)用,冗余項(xiàng)多且龐雜,圖2是聚合復(fù)用,簡(jiǎn)介且易維護(hù):

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 迪米特法則:又稱為最少知識(shí)原則,一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用,這樣,當(dāng)一個(gè)模塊修改時(shí),就會(huì)盡量少的影響其他的模塊,擴(kuò)展會(huì)相對(duì)容易;

    • 可以降低類之間的耦合度,從而允許它們獨(dú)立地被開發(fā)、優(yōu)化、使用和修改;
    • 迪米特法則的主要用途在于控制信息的過(guò)載,例如應(yīng)盡量創(chuàng)造松耦合的類,盡量降低對(duì)類成員變量和函數(shù)的訪問(wèn)權(quán)限,盡量降低類對(duì)象對(duì)其它對(duì)象的引用次數(shù);

    例如,下圖1未使用迪米特原則,圖2使用了迪米特原則:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

23. 面向?qū)ο笤O(shè)計(jì)模式

是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),設(shè)計(jì)模式通過(guò)實(shí)現(xiàn)面向?qū)ο笃叽笤瓌t,從而達(dá)到了代碼復(fù)用、增加可維護(hù)性的目的。

  • 單例模式:這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類提供了一種訪問(wèn)其唯一的對(duì)象的方式,可以直接訪問(wèn),不需要實(shí)例化該類的對(duì)象。

    • 為避免其它程序過(guò)多地建立該類的對(duì)象,先禁止其它程序建立該類對(duì)象實(shí)例;
    • 餓漢式:對(duì)象預(yù)先加載,線程是安全的,在類創(chuàng)建好的同時(shí)對(duì)象生成,調(diào)用獲得對(duì)象實(shí)例的方法反應(yīng)速度快,代碼簡(jiǎn)練;
    • 懶漢式:對(duì)象延遲加載,效率高,只有在使用的時(shí)候才實(shí)例化對(duì)象,若設(shè)計(jì)不當(dāng)線程會(huì)不安全,代碼相對(duì)于餓漢式復(fù)雜,第一次加載類對(duì)象的時(shí)候反應(yīng)不快。
  • 建造者模式:將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,這樣的設(shè)計(jì)模式被稱為建造者模式。它是將一個(gè)復(fù)雜的對(duì)象分解為多個(gè)簡(jiǎn)單的對(duì)象,然后一步一步構(gòu)建而成。它將變與不變相分離,即產(chǎn)品的組成部分是不變的,但每一部分是可以靈活選擇的。

    • 實(shí)例:

      用建造者(Builder)模式描述客廳裝修。

      分析:客廳裝修是一個(gè)復(fù)雜的過(guò)程,它包含墻體的裝修、電視機(jī)的選擇、沙發(fā)的購(gòu)買與布局等??蛻舭蜒b修要求告訴項(xiàng)目經(jīng)理,項(xiàng)目經(jīng)理指揮裝修工人一步步裝修,最后完成整個(gè)客廳的裝修與布局,所以本實(shí)例用建造者模式實(shí)現(xiàn)比較適合。

      這里客廳是產(chǎn)品,包括墻、電視和沙發(fā)等組成部分。具體裝修工人是具體建造者,他們負(fù)責(zé)裝修與墻、電視和沙發(fā)的布局。項(xiàng)目經(jīng)理是指揮者,他負(fù)責(zé)指揮裝修工人進(jìn)行裝修。

      另外,客廳類中提供了 show() 方法,可以將裝修效果圖顯示出來(lái)。客戶端程序通過(guò)對(duì)象生成器類 ReadXML 讀取 XML 配置文件中的裝修方案數(shù)據(jù),調(diào)用項(xiàng)目經(jīng)理進(jìn)行裝修。其類圖如圖所示:

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      • 建造者模式的主要優(yōu)點(diǎn)如下:

        • 客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過(guò)程解耦,使得相同的創(chuàng)建過(guò)程可以創(chuàng)建不同的產(chǎn)品對(duì)象;
        • 每一個(gè)具體建造者都相對(duì)獨(dú)立,與其他的具體建造者無(wú)關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,擴(kuò)展方便,符合開閉原則;
        • 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過(guò)程;
      • 其缺點(diǎn)如下:

        • 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),其組成部分相似,如果產(chǎn)品之間的差異性很大,不適合使用建造者模式,因此其使用范圍受到一定的限制;
        • 如果產(chǎn)品的內(nèi)部變化復(fù)雜,可能會(huì)需要定義很多具體建造者類來(lái)實(shí)現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大,增加了系統(tǒng)的理解難度和運(yùn)行成本。
  • 觀察者模式:觀察者(Observer)是指多個(gè)對(duì)象間存在一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。這種模式有時(shí)又稱作發(fā)布-訂閱模式、模型-視圖模式,它是對(duì)象行為型模式。

    • 模式動(dòng)機(jī):建立一種對(duì)象與對(duì)象之間的依賴關(guān)系,一個(gè)對(duì)象發(fā)生改變時(shí)將自動(dòng)通知其他對(duì)象,其他對(duì)象將相應(yīng)做出反應(yīng)。在此,發(fā)生改變的對(duì)象稱為觀察目標(biāo),而被通知的對(duì)象稱為觀察者,一個(gè)觀察目標(biāo)可以對(duì)應(yīng)多個(gè)觀察者,而且這些觀察者之間沒(méi)有相互聯(lián)系,可以根據(jù)需要增加和刪除觀察者,使得系統(tǒng)更易于擴(kuò)展,這就是觀察者模式的模式動(dòng)機(jī)。

    • 實(shí)例:

      利用觀察者模式設(shè)計(jì)一個(gè)程序,分析人民幣匯率的升值或貶值對(duì)進(jìn)口公司進(jìn)口產(chǎn)品成本或出口公司的出口產(chǎn)品收入以及公司利潤(rùn)率的影響。

      分析:當(dāng)“人民幣匯率”升值時(shí),進(jìn)口公司的進(jìn)口產(chǎn)品成本降低且利潤(rùn)率提升,出口公司的出口產(chǎn)品收入降低且利潤(rùn)率降低;當(dāng)“人民幣匯率”貶值時(shí),進(jìn)口公司的進(jìn)口產(chǎn)品成本提升且利潤(rùn)率降低,出口公司的出口產(chǎn)品收入提升且利潤(rùn)率提升。

      這里的匯率(Rate)類是抽象目標(biāo)類,它包含了保存觀察者(Company)的 List 和增加/刪除觀察者的方法,以及有關(guān)匯率改變的抽象方法 change(int number);而人民幣匯率(RMBrate)類是具體目標(biāo), 它實(shí)現(xiàn)了父類的 change(int number) 方法,即當(dāng)人民幣匯率發(fā)生改變時(shí)通過(guò)相關(guān)公司;公司(Company)類是抽象觀察者,它定義了一個(gè)有關(guān)匯率反應(yīng)的抽象方法 response(int number);進(jìn)口公司(ImportCompany)類和出口公司(ExportCompany)類是具體觀察者類,它們實(shí)現(xiàn)了父類的 response(int number) 方法,即當(dāng)它們接收到匯率發(fā)生改變的通知時(shí)作為相應(yīng)的反應(yīng)。下圖所示是其 UML 結(jié)構(gòu)圖。

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    • 觀察者模式的優(yōu)點(diǎn):

      • 具體目標(biāo)和具體觀察者是松耦合關(guān)系,觀察者接口的引入降低了系統(tǒng)的復(fù)雜度;
      • 觀察模式滿足“開-閉原則”。目標(biāo)接口僅僅依賴于觀察者接口,系統(tǒng)的可復(fù)用性和可擴(kuò)展性得到提升。
    • 觀察者模式的缺點(diǎn):

      • 如果一個(gè)觀察者關(guān)聯(lián)很多實(shí)例的話,將所有的實(shí)例都通知到會(huì)花費(fèi)很多時(shí)間;
      • 如果在觀察者和觀察目標(biāo)之間有循環(huán)依賴的話,觀察目標(biāo)會(huì)觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,可能導(dǎo)致系統(tǒng)崩潰;
      • 觀察者模式?jīng)]有相應(yīng)的機(jī)制讓觀察者知道所觀察的目標(biāo)對(duì)象是怎么發(fā)生變化的,而僅僅只是知道觀察目標(biāo)發(fā)生了變化。
  • 中介者模式:定義一個(gè)中介對(duì)象來(lái)封裝一系列對(duì)象之間的交互,使原有對(duì)象之間的耦合松散,且可以獨(dú)立地改變它們之間的交互。中介者模式又叫調(diào)停模式,它是迪米特法則的典型應(yīng)用。

    • 實(shí)例:

      用中介者模式編寫一個(gè)“房地產(chǎn)交流平臺(tái)”程序。

      分析:首先,定義一個(gè)中介公司(Medium)接口,它是抽象中介者,它包含了客戶注冊(cè)方法 register(Customer member) 和信息轉(zhuǎn)發(fā)方法 relay(String from,String ad);再定義一個(gè)房地產(chǎn)中介(EstateMedium)公司,它是具體中介者類,它包含了保存客戶信息的 List 對(duì)象,并實(shí)現(xiàn)了中介公司中的抽象方法。

      然后,定義一個(gè)客戶(Customer)類,它是抽象同事類,其中包含了中介者的對(duì)象,和發(fā)送信息的 send(String ad) 方法與接收信息的 receive(String from,String ad) 方法的接口,由于本程序是窗體程序,所以本類繼承 JPmme 類,并實(shí)現(xiàn)動(dòng)作事件的處理方法 actionPerformed(ActionEvent e)。

      最后,定義賣方(Seller)類和買方(Buyer)類,它們是具體同事類,是客戶(Customer)類的子類,它們實(shí)現(xiàn)了父類中的抽象方法,通過(guò)中介者類進(jìn)行信息交流,其結(jié)構(gòu) UML 圖如下:

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    • 中介者模式的優(yōu)點(diǎn)為:

      • 類之間各司其職,符合迪米特法則;
      • 降低了對(duì)象之間的耦合性,使得對(duì)象易于獨(dú)立地被復(fù)用;
      • 將對(duì)象間的一對(duì)多關(guān)聯(lián)轉(zhuǎn)變?yōu)橐粚?duì)一的關(guān)聯(lián),提高系統(tǒng)的靈活性,使得系統(tǒng)易于維護(hù)和擴(kuò)展;
    • 中介者模式的缺點(diǎn)為:

      • 中介者模式將原本多個(gè)對(duì)象直接的相互依賴變成了中介者和多個(gè)同事類的依賴關(guān)系。當(dāng)同事類越多時(shí),中介者就會(huì)越臃腫,變得復(fù)雜且難以維護(hù)。

24. 復(fù)用

有兩種類型的復(fù)用:生產(chǎn)者復(fù)用和消費(fèi)者復(fù)用;

  • 生產(chǎn)者復(fù)用:正在設(shè)計(jì)的構(gòu)件要在以后的應(yīng)用中進(jìn)行復(fù)用;
  • 消費(fèi)者復(fù)用:正在使用的構(gòu)件是之前為其它應(yīng)用開發(fā)的構(gòu)件;

25. 編程過(guò)程

XP、結(jié)對(duì)編程、融合、小組協(xié)同;

26. 軟件測(cè)試術(shù)語(yǔ)

  • 錯(cuò)誤(error):往往是人為導(dǎo)致的故障;
  • 故障(fault):程序中不正確的步驟,過(guò)程或者數(shù)據(jù)定義,導(dǎo)致程序出現(xiàn)了非故意的、不可預(yù)料的行為,通常是由 error 導(dǎo)致的;
  • 失效(failure):一個(gè)系統(tǒng)或者組件不能完成它被要求的功能,通常是 fault 導(dǎo)致的;

27. 故障類型

  • 算法故障:源代碼編寫或算法設(shè)計(jì)上的一些錯(cuò)誤導(dǎo)致的故障;
  • 計(jì)算故障和精度故障:算術(shù)表達(dá)式錯(cuò)誤或計(jì)算結(jié)果未達(dá)到要求的精度;
  • 文檔故障:文檔與程序?qū)嶋H做的事情不一致;
  • 能力故障或邊界故障:系統(tǒng)活動(dòng)到達(dá)指定的極限時(shí),系統(tǒng)性能會(huì)變得不可接受;
  • 計(jì)時(shí)故障或協(xié)調(diào)故障:實(shí)時(shí)系統(tǒng)的并發(fā)進(jìn)程之間同步互斥關(guān)系出現(xiàn)故障;
  • 吞吐量故障或性能故障:系統(tǒng)不能以需求規(guī)定的速度執(zhí)行;
  • 標(biāo)準(zhǔn)和過(guò)程故障:代碼規(guī)范或風(fēng)格不合符組織的要求;

28. 軟件測(cè)試基本步驟

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 單元測(cè)試:將系統(tǒng)中的每個(gè)程序構(gòu)件與其它構(gòu)件隔離,單獨(dú)測(cè)試每個(gè)構(gòu)件是否能正常運(yùn)行;
  • 集成測(cè)試:確保構(gòu)件之間的接口能正常運(yùn)行,各構(gòu)件正常協(xié)作;
  • 功能測(cè)試:是對(duì)系統(tǒng)的整體評(píng)估,以確定集成的系統(tǒng)是否確實(shí)執(zhí)行了需求規(guī)格中描述的功能,其結(jié)果是一個(gè)可運(yùn)轉(zhuǎn)的系統(tǒng);
  • 性能測(cè)試:測(cè)試系統(tǒng)在客戶的實(shí)際工作環(huán)境中能否成功執(zhí)行,其結(jié)果是一個(gè)確認(rèn)的系統(tǒng);
  • 驗(yàn)收測(cè)試:與客戶交換意見,以確定滿足了客戶的預(yù)期,與客戶進(jìn)行確認(rèn)后完成驗(yàn)收;
  • 安裝測(cè)試:將驗(yàn)收后的系統(tǒng)安裝在它實(shí)際工作的環(huán)境中,確保能正確工作。

29. 單元測(cè)試方法

  • 靜態(tài)測(cè)試(程序不執(zhí)行):一般是檢查代碼的風(fēng)格和規(guī)范。

    • 靜態(tài)分析器(自動(dòng)工具);
    • 代碼評(píng)審(人工方式);
  • 動(dòng)態(tài)測(cè)試(程序執(zhí)行):通過(guò)選擇適當(dāng)?shù)臏y(cè)試用例,執(zhí)行程序。

    • 黑盒測(cè)試(測(cè)試功能):不考慮程序的內(nèi)部結(jié)構(gòu)與特性,只根據(jù)程序功能或程序的外部特性設(shè)計(jì)測(cè)試用例。

      • 等價(jià)類分類法:將可能的輸入劃分成若干等價(jià)的類,每一個(gè)類選擇一個(gè)測(cè)試用例;

        • 有效等價(jià)類:有意義、合理的輸入數(shù)據(jù),用于評(píng)估系統(tǒng)功能;
        • 無(wú)效等價(jià)類:無(wú)意義、不合理的輸入數(shù)據(jù),用于檢測(cè)程序異常;

        例如,注冊(cè)某網(wǎng)站。要求:用戶名的長(zhǎng)度為812的數(shù)字與字母組合而成的字符,,密碼長(zhǎng)度為616位的數(shù)字、字母的組合。請(qǐng)寫出測(cè)試案例:

        山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

        確定了等價(jià)類之后我們就可以設(shè)計(jì)測(cè)試用例了,測(cè)試用例需要覆蓋到所有的等價(jià)類,即有效等價(jià)類和無(wú)效等價(jià)類。具體情況請(qǐng)看下表:

        山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      • 邊值分析法:對(duì)輸入的邊界值進(jìn)行測(cè)試,例如,對(duì)16-bit 的整數(shù)而言 32767 和 -32768 是邊界;屏幕上光標(biāo)在最左上、最右下位置。

      • 錯(cuò)誤推測(cè)法:在測(cè)試程序時(shí),人們可以根據(jù)經(jīng)驗(yàn)或直覺(jué)推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性地編寫檢查這些錯(cuò)誤的測(cè)試用例的方法。

      • 因果圖法:適合輸入條件比較多的情況,可以測(cè)試所有的輸入條件的排列組合?!?因 ” 就是輸入條件,“ 果 ” 就是輸出結(jié)果。

    • 白盒測(cè)試(測(cè)試結(jié)構(gòu)):分析程序的內(nèi)部邏輯結(jié)構(gòu),注意選擇適當(dāng)?shù)母采w標(biāo)準(zhǔn),設(shè)計(jì)測(cè)試用例,對(duì)主要路徑進(jìn)行盡可能多的測(cè)試。

      白盒法又稱為邏輯覆蓋法,常用的邏輯覆蓋標(biāo)準(zhǔn):

      • 語(yǔ)句覆蓋:程序中每個(gè)語(yǔ)句至少都能被執(zhí)行一次;
      • 判定覆蓋:程序中每個(gè)判定至少為 truefalse 各一次;
      • 條件覆蓋:判定語(yǔ)句中的每個(gè)條件表達(dá)式都至少為 truefalse 各一次,滿足條件覆蓋的,不一定滿足判定覆蓋;
      • 判定/條件覆蓋: 同時(shí)滿足判定覆蓋和條件覆蓋;
      • 條件組合覆蓋: 判定中條件的各種可能組合都至少出現(xiàn)一次,例如判定語(yǔ)句 in 個(gè)條件,每個(gè)條件有 truefalse 選項(xiàng),則至少需要 2^n 個(gè)用例才能覆蓋語(yǔ)句 i。

30. 集成測(cè)試

把功能模塊或程序單元組合起來(lái)進(jìn)行測(cè)試,發(fā)現(xiàn)模塊在組合過(guò)程中的缺陷。

  • 驅(qū)動(dòng)模塊:用于模擬待測(cè)模塊的上級(jí)模塊。驅(qū)動(dòng)模塊在集成測(cè)試中接受測(cè)試數(shù)據(jù),將相關(guān)的數(shù)據(jù)傳送給待測(cè)模塊,啟動(dòng)待測(cè)模塊,并打印出相應(yīng)的結(jié)果;
  • 樁模塊:用于模擬待測(cè)模塊工作過(guò)程中所調(diào)用的模塊。樁模塊由待測(cè)模塊調(diào)用,它們一般只進(jìn)行很少的數(shù)據(jù)處理,以便于檢驗(yàn)待測(cè)模塊與下級(jí)模塊的接口。

集成測(cè)試的分類:

  • 非增量式集成策略:對(duì)所有模塊進(jìn)行單元測(cè)試后,將各模塊連接起來(lái),把連接后的程序當(dāng)作一個(gè)整體進(jìn)行測(cè)試。

  • 增量式集成策略:逐次將未曾集成測(cè)試的模塊和已經(jīng)集成測(cè)試的模塊(或子系統(tǒng))結(jié)合成程序包,再將這些模塊集成為較大系統(tǒng),在集成的過(guò)程中邊連接邊測(cè)試,以發(fā)現(xiàn)連接過(guò)程中產(chǎn)生的問(wèn)題。

    增量式集成測(cè)試又可以分為三種不同的方法:

    • 自頂向下增量式測(cè)試:模塊集成的順序是首先集成主控模塊(主程序),然后依照控制層次結(jié)構(gòu)向下進(jìn)行集成。從屬于主控模塊的按 DFSBFS 方式集成到結(jié)構(gòu)中去。

      整個(gè)過(guò)程由 3 個(gè)步驟完成:

      • 主控模塊作為測(cè)試驅(qū)動(dòng)器;
      • 下層的樁模塊一次一次地被替換為真正的模塊;
      • 每個(gè)模塊被集成時(shí),都必須進(jìn)行單元測(cè)試。重復(fù)第2步,直到整個(gè)系統(tǒng)被測(cè)試完成。

      例題:對(duì)如下結(jié)構(gòu)采用自頂向下深度優(yōu)先策略進(jìn)行測(cè)試:

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      優(yōu)缺點(diǎn)分析:

      • 優(yōu)點(diǎn):①較早地驗(yàn)證了主要控制和判斷點(diǎn);②可以首先實(shí)現(xiàn)和驗(yàn)證一個(gè)完整的軟件功能;③功能較早證實(shí),帶來(lái)信心;④只需一個(gè)驅(qū)動(dòng),減少驅(qū)動(dòng)器開發(fā)的費(fèi)用;
      • 缺點(diǎn):①樁的開發(fā)量大;②底層驗(yàn)證被推遲;
      • 適用范圍:①產(chǎn)品控制結(jié)構(gòu)比較清晰和穩(wěn)定;②高層接口變化較小;③底層接口未定義或經(jīng)??赡鼙恍薷?;④產(chǎn)品控制組件具有較大的技術(shù)風(fēng)險(xiǎn),需要盡早被驗(yàn)證;⑤希望盡早能看到產(chǎn)品的系統(tǒng)功能行為。
    • 自底向上增量式測(cè)試:最常用的集成策略,從具有最小依賴性的底層組件開始,按照依賴關(guān)系樹的結(jié)構(gòu),逐層向上集成,以檢驗(yàn)系統(tǒng)的穩(wěn)定性。

      整個(gè)過(guò)程由 4 個(gè)步驟完成:

      • 起始于模塊依賴關(guān)系樹的底層葉子模塊;
      • 使用驅(qū)動(dòng)模塊對(duì)步驟1選定的模塊進(jìn)行測(cè)試;
      • 用實(shí)際模塊代替驅(qū)動(dòng)模塊,與它已測(cè)試的直屬子模塊組裝成一個(gè)更大的模塊進(jìn)行測(cè)試;
      • 重復(fù)上面的行為,直到系統(tǒng)最頂層模塊被加入到已測(cè)系統(tǒng)中。

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      優(yōu)缺點(diǎn)分析:

      • 優(yōu)點(diǎn):①對(duì)底層組件行為較早驗(yàn)證;②工作最初可以并行集成,比自頂向下效率高;減少了樁的工作量;③能較好鎖定軟件故障所在位置。

      • 缺點(diǎn):①驅(qū)動(dòng)的開發(fā)工作量大;②對(duì)高層的驗(yàn)證被推遲,設(shè)計(jì)上的錯(cuò)誤不能被及時(shí)發(fā)現(xiàn)。

      • 適用范圍:①適應(yīng)于底層接口比較穩(wěn)定;②高層接口變化比較頻繁;③底層組件較早被完成。

    • 三明治增量式測(cè)試:把系統(tǒng)劃分成三層,中間一層為目標(biāo)層,目標(biāo)層之上采用自頂向下集成,之下采用自底向上集成。

      山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

      整個(gè)過(guò)程由 4 個(gè)步驟完成:

      • 首先對(duì)目標(biāo)層之上一層使用自頂向下集成;
      • 其次對(duì)目標(biāo)層之下一層使用自底向上集成;
      • 其三,把目標(biāo)層下面一層與目標(biāo)層集成;
      • 最后,把三層集成到一起。

      優(yōu)缺點(diǎn)分析:

      • 優(yōu)點(diǎn):集合了自頂向下和自底向上兩種策略的優(yōu)點(diǎn);
      • 缺點(diǎn):中間層測(cè)試不充分,難以選擇;
      • 適用范圍:適應(yīng)于大部分軟件開發(fā)項(xiàng)目。

31. 軟件缺陷數(shù)目估計(jì)方法

  • 播撒模型:

    • Mills 模型:人工隨機(jī)置入錯(cuò)誤 M 個(gè)錯(cuò)誤,測(cè)試得出 m 個(gè)人工置入的錯(cuò)誤,n 個(gè)程序固有的錯(cuò)誤,則估算系統(tǒng)固有錯(cuò)誤為:
      N = n × M m N=\frac{n×M}{m} N=mn×M?

    • Hyman 模型:兩人同時(shí)進(jìn)行測(cè)試,A 發(fā)現(xiàn) n 個(gè)錯(cuò)誤,B 發(fā)現(xiàn) m 個(gè)錯(cuò)誤,其中共同錯(cuò)誤有 q 個(gè),則估算系統(tǒng)的固有錯(cuò)誤為:
      N = m × n q N=\frac{m×n}{q} N=qm×n?

  • 靜態(tài)模型:根據(jù)軟件的規(guī)模和復(fù)雜性進(jìn)行估計(jì)。

  • 根據(jù)測(cè)試覆蓋率的預(yù)測(cè)模型:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2. 綜合題

2.1 繪制 AOE 網(wǎng)

步驟:

  • 計(jì)算事件的最早發(fā)生時(shí)間表,earliest(j) = max{earliest(i) + w(i, j)};
  • 計(jì)算事件的最晚發(fā)生時(shí)間表,latest(i) = mim{latest(j) - w(i, j)};

例1

如下圖所示的AOE網(wǎng)(弧上權(quán)值代表活動(dòng)的持續(xù)天數(shù),求:

1)繪制事件的最早發(fā)生時(shí)間和最晚發(fā)生時(shí)間;

2)繪制活動(dòng)的最早開始時(shí)間和最晚開始時(shí)間;

3)哪些是關(guān)鍵活動(dòng),給出關(guān)鍵路徑;

4)完成此工程最少所需要多少天。

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.2 COCOMO 模型

基本工作量計(jì)算公式如下:
E = a × K L O C b × F E=a×KLOC^b×F E=a×KLOCb×F

① 基本 COCOMO:
方式 a b
有機(jī) 2.4 1.05
半有機(jī) 3.0 1.12
嵌入式 3.6 1.2

E = a × K L O C b × 1 E=a×KLOC^b×1 E=a×KLOCb×1

一個(gè) 33.3 KLOC 的軟件開發(fā)項(xiàng)目,屬于中等規(guī)模、半有機(jī)型的項(xiàng)目,采用基本COCOMO:a = 3.0,b = 1.12,則:
E = 3.0 × 33. 3 1.12 × 1 = 152 p m E= 3.0×33.3^{1.12}×1=152pm E=3.0×33.31.12×1=152pm

② 中等 COCOMO:
方式 a b
有機(jī) 2.8 1.05
半有機(jī) 3.0 1.12
嵌入式 3.2 1.2

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言
F = ∏ i = 1 17 E M i F=\prod_{i=1}^{17}{EM_i} F=i=117?EMi?

E = a × K L O C b × F E=a×KLOC^b×F E=a×KLOCb×F

一個(gè) 33.3 KLOC 的軟件開發(fā)項(xiàng)目,屬于中等規(guī)模、半有機(jī)型的項(xiàng)目,采用中等 COCOMO 模型。 a = 3.0,b=1.12,則:
F = 0.70 × 0.85 × . . . × 1.15 = 1.09 F=0.70×0.85×...×1.15=1.09 F0.70×0.85×...×1.15=1.09

E = 3.0 × 33. 3 1.12 × 1.09 = 16 p m E=3.0×33.3^{1.12}×1.09=16pm E=3.0×33.31.12×1.0916pm

③ 高級(jí) COCOMO:

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言
b = 0.91 + 0.01 ∑ i = 1 5 b i b=0.91+0.01\sum_{i=1}^{5}{b_i} b=0.91+0.01i=15?bi?
山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言
F = ∏ i = 1 17 E M i F=\prod_{i=1}^{17}{EM_i} F=i=117?EMi?

E = a × K L O C b × F E=a×KLOC^b×F E=a×KLOCb×F

a 是校正常數(shù),通常取值 2.94(根據(jù)公司大量數(shù)據(jù)進(jìn)行調(diào)整)。

2.3 決策樹分析

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.4 E-R 圖

在 ER 圖中有如下 4 個(gè)成分:

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 矩形框:表示實(shí)體,在框中記入實(shí)體名;
  • 菱形框:表示實(shí)體和實(shí)體之間的聯(lián)系,在框中記入聯(lián)系名;
  • 橢圓形框:表示實(shí)體或聯(lián)系的屬性,將屬性名記入框中,對(duì)于主屬性名應(yīng)加入下劃線;
  • 連線:實(shí)體與屬性之間;實(shí)體與聯(lián)系之間;聯(lián)系與屬性之間用直線相連,并在直線上標(biāo)注聯(lián)系的類型;
    • 對(duì)于一對(duì)一聯(lián)系(1 ∶1):要在兩個(gè)實(shí)體連線方向各寫1;
    • 對(duì)于一對(duì)多聯(lián)系(1 ∶N) :要在一的一方寫1,多的一方寫N;
    • 對(duì)于多對(duì)多關(guān)系(N∶M) : 則要在兩個(gè)實(shí)體連線方向各寫 N,M。

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

例題1:用圖書、作者兩個(gè)實(shí)體及其屬性和聯(lián)系構(gòu)建E-R圖。

  • 圖書的屬性:書號(hào)、書名、出版社、價(jià)格;
  • 作者的屬性:身份證號(hào)、姓名、年齡;

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

例題2:某企業(yè)集團(tuán)有若干工廠,每個(gè)工廠生產(chǎn)多種產(chǎn)品,且每一種產(chǎn)品可以在多個(gè)工廠生產(chǎn),每個(gè)工廠按照固定的計(jì)劃數(shù)量生產(chǎn)產(chǎn)品,計(jì)劃數(shù)量不低于300;每個(gè)工廠聘用多名職工,且每名職工只能在一個(gè)工廠工作,工廠聘用職工有聘期和工資。工廠的屬性有工廠編號(hào)、廠名、地址,產(chǎn)品的屬性有產(chǎn)品編號(hào)、產(chǎn)品名、規(guī)格,職工的屬性有職工號(hào)、姓名、技術(shù)等級(jí)。

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.5 UML 圖

類圖以反映類的結(jié)構(gòu)(屬性、操作)以及類之間的關(guān)系為主要目的,描述了軟件系統(tǒng)的結(jié)構(gòu),是一種靜態(tài)建模方法。從上到下分為三部分,分別是類名、屬性和操作。

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

類圖中的關(guān)系:

  • 依賴關(guān)系:描述了一個(gè)類的變化對(duì)依賴于它的類產(chǎn)生影響的情況;

    虛線 + 箭頭表示

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 關(guān)聯(lián)關(guān)系:用帶箭頭的線段表示,表示類之間的聯(lián)結(jié),一個(gè)類使用了另一個(gè)類的方法;

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 聚合關(guān)系:特殊關(guān)聯(lián)關(guān)系,指明一個(gè)聚集(整體)和組成部分之間的關(guān)系。例如,多名學(xué)生聚合成了一個(gè)班級(jí),學(xué)生不會(huì)因?yàn)榘嗉?jí)的解散而無(wú)法存在,教室需要同時(shí)知道班級(jí)和學(xué)生的信息,二者的生命周期是獨(dú)立的;

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 組合關(guān)系:語(yǔ)義更強(qiáng)的聚合,部分和整體具有相同的生命周期。例如,學(xué)生由器官組成,器官的生命周期被嚴(yán)格封裝在學(xué)生中,只需要了解學(xué)生的信息即可;

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 泛化關(guān)系:在面向?qū)ο笾幸话惴Q為繼承關(guān)系,存在于父類與子類、父接口與子接口之間;

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 實(shí)現(xiàn)關(guān)系:對(duì)應(yīng)于類和接口之間的關(guān)系;

    虛線 + 空心三角形表示

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.6 Petri 網(wǎng)

例題1

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

例題2

有一工業(yè)生產(chǎn)線,要完成兩項(xiàng)操作,分別為變遷 t1 和 t2 表示,變遷 t1 將進(jìn)入生產(chǎn)線,半成品 s1s2 用兩個(gè)部件 s3 固定在一起,后形成中間件 s4。然后第2個(gè)變遷 t2 將 s4 和 s5 用 3 個(gè)部件 s3 固定在一起形成中間件 s6。完成 t1 和 t2 都需要用到工具 s7。

假設(shè)受空間限制,s2、s5 最多不能超過(guò) 100 件, s4 最多不能超過(guò) 5 件,s3 最多不能超過(guò) 1000 件。

其 Petri 網(wǎng)結(jié)果如下:

2.7 數(shù)據(jù)流圖

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

頂層圖:中間的橢圓是需要開發(fā)的系統(tǒng) , 周邊的矩形表示外部實(shí)體人或組織;

中層圖:將 “頂層數(shù)據(jù)流圖” 進(jìn)行細(xì)化,外部實(shí)體不變;

底層圖:針對(duì)每個(gè)加工 節(jié)點(diǎn) , 將其拆分 , 繪制其中的更詳細(xì)的數(shù)據(jù)流轉(zhuǎn)情況;

**例題:**圖書預(yù)訂系統(tǒng):書店向顧客發(fā)放訂單,顧客將所填訂單交由系統(tǒng)處理,系統(tǒng)首先依據(jù)圖書目錄對(duì)訂單進(jìn)行檢查并對(duì)合格訂單進(jìn)行處理,處理過(guò)程中根據(jù)顧客情況和訂單數(shù)目將訂單分為優(yōu)先訂單與正常訂單兩種,隨時(shí)處理優(yōu)先訂單,定期處理正常訂單。最后系統(tǒng)根據(jù)所處理的訂單匯總,并按出版社要求發(fā)給出版社。

  • 第一步,畫出關(guān)聯(lián)數(shù)據(jù)流圖:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 第二步,逐層分解加工,畫出下層 DFD:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 第三步,細(xì)化中間過(guò)程,畫出底層 DFD:

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.8 UML 用例圖

類似于頂層的數(shù)據(jù)流圖,描述了系統(tǒng)和用戶的上層交互情況。

  • 用例圖中的關(guān)系及解釋

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 例題1:

    參與者:經(jīng)理,安全主管,保安

    用例:管理人事,批準(zhǔn)預(yù)算,批準(zhǔn)安全證書,監(jiān)視周邊

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

  • 例題 2:

    短途旅行但汽車的油不足以應(yīng)付全部路程。那么為汽車加油的動(dòng)作在旅行的每個(gè)場(chǎng)景(事件流)中都會(huì)出現(xiàn),不加油就不會(huì)完成旅行。吃飯則可以由司機(jī)決定是否進(jìn)行,不吃飯不會(huì)影響旅行的完成。

    山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

2.9 故障樹分析

故障樹是一種為研究系統(tǒng)某功能故障而建立的一種倒樹狀的邏輯因果關(guān)系圖。

山東大學(xué) 軟件工程與實(shí)踐 復(fù)習(xí),學(xué)校課程,軟件工程,java,開發(fā)語(yǔ)言

割集樹的邊緣就是故障樹的割集,表示引起樹頂失效所需事件的最小集合。

若已知故障樹的割集以及底事件發(fā)送的概率,則頂事件發(fā)送的概率為各割集元素發(fā)生概率之和。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-548108.html

到了這里,關(guān)于【軟件工程】山東大學(xué)軟件工程復(fù)習(xí)提綱的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 山東大學(xué)2022-2023多核復(fù)習(xí)課題目答案整理/往年題整理

    山東大學(xué)2022-2023多核復(fù)習(xí)課題目答案整理/往年題整理

    快說(shuō)謝謝劉老師,一般按照復(fù)習(xí)題考原題?。。?下面是2022-2023的版本,每年基本不變,今年新增CUDA部分,本文已包含相關(guān)考點(diǎn) MPI 基本使用方法在筆記中 矩陣向量乘法中,行數(shù)或者列數(shù)不能被線程數(shù)整除的情況下,如何分配數(shù)據(jù)? 基本思路就是小于余數(shù)的rank多算一份,然后

    2024年02月07日
    瀏覽(44)
  • 山東大學(xué)軟件學(xué)院2021-2022軟件測(cè)試期末試題

    1.系統(tǒng)缺陷 2.測(cè)試自動(dòng)化 3.回歸測(cè)試 4.系統(tǒng)測(cè)試 5.I18N 1.單元測(cè)試與代碼調(diào)試的區(qū)別 2.簡(jiǎn)述比較集成測(cè)試的不同模式、不同方法 3.比較4種導(dǎo)向中的正向思維、逆向思維,并說(shuō)明為什么這兩種導(dǎo)向現(xiàn)今不再流行 4.ST、ET的優(yōu)缺點(diǎn)比較 給出了一段程序。每一小問(wèn)給了測(cè)試用例,問(wèn)是

    2024年02月09日
    瀏覽(39)
  • 山東大學(xué)軟件學(xué)院2022軟件測(cè)試技術(shù)期末試題回憶

    前言:本篇博客記錄2022大三下軟件測(cè)試技術(shù)期末試題。 復(fù)習(xí)資料:山東大學(xué)軟件學(xué)院軟件測(cè)試技術(shù)期末復(fù)習(xí)知識(shí)總結(jié) 一(15\\\') 1、軟件缺陷 2、系統(tǒng)測(cè)試 3、回歸測(cè)試 4、軟件國(guó)際化 5、測(cè)試自動(dòng)化 二(20\\\') 1、單元測(cè)試和代碼調(diào)試 2、比較集成測(cè)試的不同模式,簡(jiǎn)述集成測(cè)試

    2024年02月09日
    瀏覽(31)
  • 山東大學(xué)軟件學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)期末考試考點(diǎn)

    單播 :只有一個(gè)發(fā)送方和一個(gè)接收方的點(diǎn)到點(diǎn)傳輸。 組播 :將一個(gè)數(shù)據(jù)包發(fā)送給一組機(jī)器,即所有機(jī)器的一個(gè)子集。 廣播 :將一個(gè)數(shù)據(jù)包發(fā)送給所有的目標(biāo)機(jī)器。 面向連接的服務(wù) :按照電話系統(tǒng)建模,服務(wù)用戶首先必須建立一個(gè)連接,然后使用該連接傳輸數(shù)據(jù),最后釋放連接。

    2024年02月03日
    瀏覽(31)
  • 山東大學(xué)軟件學(xué)院算法設(shè)計(jì)與分析期末考試回憶版

    山東大學(xué)軟件學(xué)院算法設(shè)計(jì)與分析期末考試回憶版

    2021年12月13日上午10:10-12:10 本次考試是山東大學(xué)軟件學(xué)院2019級(jí)軟件工程專業(yè)大三上算法期末考試 本學(xué)期的算法課上課時(shí)間為2-7周,9-14周(實(shí)際上13周就結(jié)束了),第15周考試 考試范圍:除了并查集和35章近似算法不考,其他在老師PPT上的內(nèi)容都是考試范圍 本次算法考試一共有

    2024年02月10日
    瀏覽(27)
  • 2022山東大學(xué)軟件學(xué)院區(qū)塊鏈原理與技術(shù)期末考試(回憶版)

    這是限選課孔連菊老師的區(qū)塊鏈,還是要復(fù)習(xí)重點(diǎn),考試內(nèi)容不多,有點(diǎn)超出想象,和往年題內(nèi)容形式還是有點(diǎn)出入,眾所周知,孔老師絕不透露和考試有關(guān)的半點(diǎn)內(nèi)容。。。。分享給學(xué)弟學(xué)妹們漲點(diǎn)人品。 題量不大甚至可以說(shuō)是非常小,但是個(gè)人答的確實(shí)不咋樣,復(fù)習(xí)半天

    2024年02月11日
    瀏覽(73)
  • 山東大學(xué)軟件學(xué)院2022-2023數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)挖掘期末考試(回憶版)

    山東大學(xué)軟件學(xué)院2022-2023數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)挖掘期末考試(回憶版)

    前言 1、考試時(shí)間:2023/2/14 14:30-16:30 (因疫情推遲到開學(xué)考的期末考試) 2、考試科目:數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)挖掘(老師:PanPeng) 3、考試語(yǔ)言:中文 4、考試題型:簡(jiǎn)答、計(jì)算、畫圖(最好帶個(gè)尺子,容易畫圖)。 5、考后感想:題量 比較大 ,需要對(duì)題目比較熟練,題目類型和ppt上差

    2024年02月08日
    瀏覽(19)
  • 山東大學(xué)軟件學(xué)院網(wǎng)絡(luò)攻擊與防范2022-2023林豐波100詞詳解

    本篇博客僅對(duì)100詞作解釋,干背的話會(huì)發(fā)現(xiàn)真的很難背完,可以結(jié)合攻防思路來(lái)看這一份提綱,沒(méi)必要連著看。 比如攻擊流程從信息收集到最后隱藏撤退,中間相關(guān)的流程和工具都是什么 防守呢?常識(shí)類?Linux類?等等 這份提綱整理起來(lái)還是很折磨的,謝謝ChatGPT老師 希望大

    2024年02月08日
    瀏覽(27)
  • 山東大學(xué)軟件學(xué)院2022-2023數(shù)據(jù)科學(xué)導(dǎo)論知識(shí)點(diǎn)整理【軟工大數(shù)據(jù)課組】

    山東大學(xué)軟件學(xué)院2022-2023數(shù)據(jù)科學(xué)導(dǎo)論知識(shí)點(diǎn)整理【軟工大數(shù)據(jù)課組】

    CSDN的排版能力有限,因此留pdf版本,祝大伙全部95+,呼呼 山東大學(xué)軟件學(xué)院2022-2023數(shù)據(jù)科學(xué)導(dǎo)論知識(shí)點(diǎn)整理【軟工大數(shù)據(jù)課組】-統(tǒng)計(jì)分析文檔類資源-CSDN文庫(kù) 總體上是概論部分,可能考的也就名詞解釋了,總結(jié)如下: 什么是大數(shù)據(jù),大數(shù)據(jù)的界限,4V? 大數(shù)據(jù)是一種數(shù)據(jù)規(guī)

    2024年02月06日
    瀏覽(32)
  • 山東大學(xué)增強(qiáng)現(xiàn)實(shí)實(shí)驗(yàn)四

    山東大學(xué)增強(qiáng)現(xiàn)實(shí)實(shí)驗(yàn)四

    注意:本人尚處在opencv的入門學(xué)習(xí)階段,本博客僅為個(gè)人學(xué)習(xí)筆記見解,如有不當(dāng),歡迎指出 (實(shí)驗(yàn)/理論)平面標(biāo)志物的視覺(jué)跟蹤,要求: 選擇一個(gè)標(biāo)志物,可以是人工標(biāo)志物,也可以是自然標(biāo)志物;實(shí)現(xiàn)和實(shí)驗(yàn)二相同的效果。 用手機(jī)或攝像頭拍攝標(biāo)志物的影像,建議讀取視

    2024年02月08日
    瀏覽(77)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包