




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第5章 總體設(shè)計(jì)25.1 設(shè)計(jì)過程5.2 設(shè)計(jì)原理5.3 啟發(fā)規(guī)則5.4 描繪軟件結(jié)構(gòu)的圖形工具5.5 面向數(shù)據(jù)流的設(shè)計(jì)5.6 小結(jié)主要內(nèi)容主要內(nèi)容軟件過程模型軟件生命周期5 總體設(shè)計(jì)4軟件設(shè)計(jì) 階段需求開發(fā)體系結(jié)構(gòu)設(shè)計(jì)界面設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)過程設(shè)計(jì)編程與測試總體設(shè)計(jì)詳細(xì)設(shè)計(jì)5678DFD91、模塊化2、抽象3、逐步求精4、信息隱藏和局部化5、模塊獨(dú)立5.2 設(shè)計(jì)原理105.2.1 模塊化(Modularity)模塊模塊:由邊界元素限定邊界元素限定的相鄰程序元素的序列,而且有一個(gè)總體標(biāo)識符代表它。(本質(zhì):本質(zhì):具有相對獨(dú)立性的程序段)E.g.,PASCAL語言中的BeginEnd,或者C、C+與J
2、ava中的對,都是邊界元素。注:注:過程、函數(shù)、子程序、宏等都可作為模塊。模塊是構(gòu)成程序的基本構(gòu)件模塊是構(gòu)成程序的基本構(gòu)件。模塊化:模塊化:把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來構(gòu)成一個(gè)整體,可以完成用戶指定的功能以滿足用戶的需求。為什么采用模塊化u經(jīng)驗(yàn):一個(gè)大問題拆成多個(gè)小問題解決更容易u(yù)但是也不要無限的細(xì)分模塊12各個(gè)擊破各個(gè)擊破結(jié)構(gòu)清晰可修改性好易測試和調(diào)試13 模塊化和成本的關(guān)系接口成本接口成本圖5.1 模塊化和軟件成本規(guī)模145.2.2 抽象什么是抽象?認(rèn)識復(fù)雜事物的思維工具抽取事物的本質(zhì)特性,暫時(shí)不考慮它們的細(xì)節(jié) 處理處理復(fù)雜系統(tǒng)復(fù)雜系統(tǒng)
3、的唯一有效的方法是用的唯一有效的方法是用層次層次的方式構(gòu)造和分析它的方式構(gòu)造和分析它。 一個(gè)復(fù)雜的動態(tài)系統(tǒng)首先可以用一些一個(gè)復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念高級的抽象概念構(gòu)造和理解構(gòu)造和理解 高級概念又可以用一些較高級概念又可以用一些較低級的概念構(gòu)造低級的概念構(gòu)造和理解,如此進(jìn)行下去,和理解,如此進(jìn)行下去,直至直至最低層次最低層次的具體元素。的具體元素。 在最高的抽象層次上,以概括的方式概括的方式敘述問題的解法;在較低的抽象層次上,則采用過程化的方法過程化的方法;在最低抽象層次上,以直接直接實(shí)現(xiàn)的方式實(shí)現(xiàn)的方式敘述問題的解法。上下級關(guān)系的層次結(jié)構(gòu)上下級關(guān)系的層次結(jié)構(gòu) 15在軟件工程過
4、程中,從系統(tǒng)定義到實(shí)現(xiàn),每進(jìn)展一步都可以看做是對軟件解決方案的抽象化過程的一次細(xì)化。5.2.2 抽象 可行性研究階段可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件完整部件;需求分析期間需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述;由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡時(shí),抽象的程度也就隨之減少減少了;源程序源程序?qū)懗鰜硪院螅簿瓦_(dá)到了抽象的最低層最低層。逐步求精逐步求精16可以把逐步求精定義為:“為了能集中精力解決主要問題而盡量推遲對問題細(xì)節(jié)的考慮。”求精是細(xì)化過程。5.2.3 逐步求精 逐步求精:抽象-具體u忽略細(xì)節(jié),u分層理解問題,u自頂向下層層加細(xì)175.2.3 逐步求精
5、進(jìn)門進(jìn)門走到門前走到門前;摸到把手摸到把手;開門開門;走進(jìn)去走進(jìn)去;關(guān)門關(guān)門;while(門沒打開門沒打開) 轉(zhuǎn)動把手轉(zhuǎn)動把手; if(把手轉(zhuǎn)不動把手轉(zhuǎn)不動) 掏出鑰匙掏出鑰匙; 找到正確的鑰匙找到正確的鑰匙; 插入鎖孔插入鎖孔; 轉(zhuǎn)動鑰匙轉(zhuǎn)動鑰匙; 推推/拉拉門門;18Miller法則:一個(gè)人在任何時(shí)候都只能把注意力集中在(72)個(gè)知識塊上。但是,在開發(fā)軟件的過程中,軟件工程師在一段時(shí)間內(nèi)需要考慮的知識塊數(shù)遠(yuǎn)遠(yuǎn)多于7。例如,一個(gè)程序通常不止使用個(gè)數(shù)據(jù),一個(gè)用戶也往往有不止7個(gè)方面的需求。逐步求精方法的強(qiáng)大作用就在于,它能幫助軟件工程師把精力集中在與當(dāng)前開發(fā)階段最相關(guān)的那些方面上,而忽略目前還
6、不需要考慮的細(xì)節(jié),這些細(xì)節(jié)將留到以后再考慮。5.2.3 逐步求精19 應(yīng)用模塊化原理時(shí),自然會產(chǎn)生的一個(gè)問題是:“為了得到最好的一組模塊,應(yīng)該怎樣分解軟件呢?”信息隱藏原理指出信息隱藏原理指出:應(yīng)該這樣設(shè)計(jì)和確定模塊:一個(gè)模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。5.2.4 信息隱藏20局部化局部化的概念和信息隱藏概念是密切相關(guān)的。所謂局部化局部化是指把一些關(guān)系密切關(guān)系密切的軟件元素物理地放得彼此靠近。在模塊中使用局部數(shù)據(jù)元素是局部化的一個(gè)例子。局部化有助于實(shí)現(xiàn)信息隱藏。隱藏的一般是模塊的實(shí)現(xiàn)細(xì)節(jié),故又稱隱藏的一般是模塊的實(shí)現(xiàn)細(xì)節(jié),故又稱“細(xì)節(jié)隱藏細(xì)節(jié)隱藏”21
7、接口模塊5.2.4 信息隱藏“秘密”用戶 算法算法 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 外部接口的實(shí)現(xiàn)細(xì)節(jié)外部接口的實(shí)現(xiàn)細(xì)節(jié) 資源分配方式資源分配方式 .接口225.2.4 信息隱藏為什么要信息隱藏?u減少局部設(shè)計(jì)對全局的影響u強(qiáng)調(diào)通過接口來進(jìn)行通信u不鼓勵(lì)使用全局?jǐn)?shù)據(jù)u有助于實(shí)現(xiàn)封裝u有助于提高軟件的質(zhì)量23模塊化、抽象、信息隱藏和局部模塊化、抽象、信息隱藏和局部化的直接結(jié)果化的直接結(jié)果?模塊獨(dú)立模塊獨(dú)立245.2.5 模塊獨(dú)立 開發(fā)具有獨(dú)立功能而且和其他模塊間沒有過多的相互作用的模塊,就可以做到模塊獨(dú)立。即:每個(gè)模塊有相對獨(dú)立的特定功能,與其他模塊間的關(guān)系較為簡單. 模塊獨(dú)立性的重要性:(1)具有獨(dú)立模塊的
8、軟件容易開發(fā);(2)獨(dú)立的模塊容易測試與維護(hù)。 模塊獨(dú)立是好設(shè)計(jì)的關(guān)鍵,而設(shè)計(jì)又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)。 模塊的獨(dú)立程度可由兩個(gè)定性標(biāo)準(zhǔn)度量:(1)耦合耦合:衡量不同模塊間相互依賴的緊密程度;(2)內(nèi)聚內(nèi)聚:衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度25耦合程度越低,模塊之間的獨(dú)立性越好26數(shù)據(jù)耦合 定義:定義:如果兩個(gè)模塊間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),屬于低耦合低耦合范疇 系統(tǒng)中至少必須必須存在這種耦合; 一般來說,一個(gè)系統(tǒng)內(nèi)可以只包含只包含數(shù)據(jù)耦合27main()int sum (int result, int n) int i; int sum = 0; for (i
9、= 0; i n; i +) sum += resulti; return sum;float division (int sum, int n) if (n!=0) return sum/n;學(xué)生成績?nèi)藬?shù)成績之和平均成績成績和,人數(shù)28控制耦合一個(gè)模塊通過傳送開關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,屬于中等程度中等程度的耦合。2930A:.A1=V1+V2.B:.V1 = B1.Global: V1 、 V2Global: V1、V2A:.V1 +.B:.V2 = B1+V1.32導(dǎo)致的問題導(dǎo)致的問題公共環(huán)境耦合特點(diǎn)公共環(huán)境耦合特點(diǎn):公共部分的改動公共部分的改動將影響所有調(diào)
10、用它的模塊公共部分的數(shù)據(jù)存取無法控?cái)?shù)據(jù)存取無法控制系統(tǒng)復(fù)雜程度系統(tǒng)復(fù)雜程度隨耦合模塊的個(gè)數(shù)增加而增加33ABA:.goto label.C:.lable: .DC34影響耦合強(qiáng)弱因素:3536內(nèi)聚標(biāo)志一個(gè)模塊內(nèi),各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。設(shè)計(jì)目標(biāo):高內(nèi)聚高內(nèi)聚理想的內(nèi)聚模塊只做一件事。模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合內(nèi)聚 Cohesion37在偶然內(nèi)聚的模塊中,各種元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個(gè)模塊,在另一種應(yīng)用場合又不允許這種修改,從而陷入困境。如果一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的38 或者
11、一組語句在兩處或多處出現(xiàn)(作為一個(gè)模塊以節(jié)省內(nèi)存):ABACAcall ABcall AC39如果一個(gè)模塊完成的任務(wù),在邏輯上屬于相同或相似的一類40int ReadInputs (int device) switch (device) case 0: return ReadFromDisk(); case 1: return ReadFromTape(); case 2: return ReadFromKeyboard(); . 把邏輯上功能相似的數(shù)據(jù)和代碼放在同一把邏輯上功能相似的數(shù)據(jù)和代碼放在同一個(gè)模塊里個(gè)模塊里41void Initialize() InitScreen(); Init
12、Memery(); InitLogFile(); .void Failure() CancelAllServices(); NotifyOperator(); RecordFailure(); .42根據(jù)程序程序流程圖流程圖確定的模塊劃分,這樣得到的往往是過程內(nèi)聚的模塊4344順序內(nèi)聚:順序內(nèi)聚:如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行通常一個(gè)處理元素的輸出數(shù)據(jù)作為下一個(gè)下一個(gè)處理元素的輸人輸人數(shù)據(jù)數(shù)據(jù)根據(jù)數(shù)據(jù)流數(shù)據(jù)流圖圖劃分模塊時(shí),得到的往往是順序內(nèi)聚的模塊int average (int result, int n) int i; int sum = 0; i
13、nt ave; for (i = 0; i 描繪軟件結(jié)構(gòu)的層次圖結(jié)構(gòu)的層次圖定義了一些不同的“映射”,利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu)。64背景材料Edward Yourdonu軟件領(lǐng)域最有影響力的人士之一u被選入計(jì)算機(jī)名人堂u超過25本專著,包括結(jié)構(gòu)化方法的開山之作結(jié)構(gòu)化方法的開山之作 Structured Design、面向?qū)ο蠓椒ǖ慕?jīng)典面向?qū)ο蠓椒ǖ慕?jīng)典Object Oriented Analysis和Object Oriented Design,項(xiàng)目管理名著項(xiàng)目管理名著Death Marchu創(chuàng)立創(chuàng)立了結(jié)構(gòu)化方法結(jié)構(gòu)化方法和Coad/Yourdon方法u建立建立并領(lǐng)導(dǎo)了YOUR
14、DON咨詢公司65背景材料結(jié)構(gòu)化方法u即SASD方法,也稱為面向功能的開發(fā)方法或面向數(shù)據(jù)流的開發(fā)方法u1978年,由Yourdon和L. L. Constantine提出u1979年,Tom DeMarco對此方法進(jìn)行了完善u它首先用結(jié)構(gòu)化分析結(jié)構(gòu)化分析(SA)進(jìn)行需求分析需求分析,然后用結(jié)構(gòu)化設(shè)計(jì)結(jié)構(gòu)化設(shè)計(jì)(SD)方法進(jìn)行總體設(shè)計(jì)總體設(shè)計(jì),最后是結(jié)構(gòu)化編程結(jié)構(gòu)化編程(SP)u該方法開發(fā)步驟明確,SA-SD-SP一氣呵成,而且給出了兩類典型的軟件結(jié)構(gòu)兩類典型的軟件結(jié)構(gòu)(變換型和事務(wù)型),便于參照,使得開發(fā)成功率大大提高665.5.1 概念數(shù)據(jù)流分類:變換流事務(wù)流 5.5 面向數(shù)據(jù)流的設(shè)計(jì)方法6
15、7信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換成內(nèi)部形式外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過變換中心變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。1. 變換流事實(shí)上所有的信息流都可歸結(jié)為變換流68這種數(shù)據(jù)流是“以事務(wù)為中心的以事務(wù)為中心的”,即數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理處理T,這個(gè)處理T根據(jù)輸入數(shù)據(jù)的類型,在若干個(gè)動作序列中選出一個(gè)來執(zhí)行。處理處理T稱為事務(wù)中心稱為事務(wù)中心,完成下述任務(wù):(1) 接收輸入數(shù)據(jù)(輸入數(shù)據(jù)又稱為事務(wù));(2) 分析每個(gè)事務(wù)以確定它的類型;(3) 根據(jù)事務(wù)類型選取選取一條活動通路。2 事務(wù)流69是一系列設(shè)計(jì)步驟的總稱總稱,經(jīng)過這些步驟,把具有變
16、換流特點(diǎn)的數(shù)據(jù)流圖,按預(yù)先確定的模式,映射映射成軟件結(jié)構(gòu)成軟件結(jié)構(gòu)。下面通過一個(gè)例子說明變換分析的方法。701.例子: 汽車數(shù)字儀表板的設(shè)計(jì)。5.5.2 變換分析智能產(chǎn)品設(shè)計(jì)包含軟件設(shè)計(jì)71假設(shè)的儀表板將完成下述功能功能:(1) 通過模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口;(2) 在發(fā)光二極管面板上顯示數(shù)據(jù);(3) 指示每小時(shí)英里數(shù)(mph),行駛的里程,每加侖油行駛的英里數(shù)(mpg)等等;(4) 指示加速或減速;(5) 超速警告:如果車速超過55英里/小時(shí),則發(fā)出超速警告鈴聲。軟件需求分析階段(需求分析階段(SA)-每條要求以及系統(tǒng)的其他特點(diǎn)進(jìn)行全面的分析評價(jià)-建立起必要的文檔資料(數(shù)據(jù)流圖數(shù)據(jù)流
17、圖DFD).結(jié)構(gòu)化設(shè)計(jì)結(jié)構(gòu)化設(shè)計(jì)SD(面向數(shù)據(jù)流設(shè)計(jì))(面向數(shù)據(jù)流設(shè)計(jì))結(jié)構(gòu)化編程結(jié)構(gòu)化編程SP72設(shè)計(jì)步驟設(shè)計(jì)步驟第第1步步 復(fù)查基本系統(tǒng)模型,確保輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。第第2步步 復(fù)查并精化數(shù)據(jù)流圖精化數(shù)據(jù)流圖。第第3步步 確定數(shù)據(jù)流圖具有變換特性變換特性還是事務(wù)特性事務(wù)特性。第第4步步 確定輸入流和輸出流的邊界邊界,從而孤立出變換中心變換中心。第第5步步 完成“第一級分解一級分解”。第第6步步 完成“第二級分解第二級分解”。第第7步步 使用設(shè)計(jì)度量設(shè)計(jì)度量(耦合與內(nèi)聚)(耦合與內(nèi)聚)和啟發(fā)式規(guī)則啟發(fā)式規(guī)則對第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化。73功能功能:(1) 通過模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳
18、感器和微處理機(jī)接口;(2) 在發(fā)光二極管面板上顯示數(shù)據(jù)顯示數(shù)據(jù);(3) 指示每小時(shí)英里數(shù)每小時(shí)英里數(shù)(mph),行駛的里程行駛的里程,每加侖油行駛每加侖油行駛的英里數(shù)的英里數(shù)(mpg)等等;(4) 指示加速或減速加速或減速;(5) 超速警告超速警告:如果車速超過55英里/小時(shí),則發(fā)出超速警告鈴聲。75輸入流和輸出流的邊界邊界,從而孤立出變換中心變換中心76設(shè)計(jì)步驟設(shè)計(jì)步驟 . 輸入信息處理控制模塊Ca,協(xié)調(diào)對所有輸入數(shù)據(jù)的接收協(xié)調(diào)對所有輸入數(shù)據(jù)的接收; 變換中心控制模塊Ct,管理管理對內(nèi)部形式的數(shù)據(jù)的所有操作操作; 輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息協(xié)調(diào)輸出信息的產(chǎn)生過程。能夠完成控制功能
19、并且保持好的耦合和內(nèi)聚特性的前提下,盡量使第一級控制中的模塊數(shù)目取最小值第一級控制中的模塊數(shù)目取最小值。第第一一級級分分解解77第二級分解第二級分解7879兩條輸入通路(第二層分解)兩條輸入通路(第二層分解)80五條輸出通路(第二層分解)五條輸出通路(第二層分解)81變換中心(第二層分解)變換中心(第二層分解)82第二級分解第二級分解進(jìn)一步精化進(jìn)一步精化83使用設(shè)計(jì)度量(耦合與內(nèi)聚)和啟發(fā)式規(guī)則,進(jìn)一步精化(修改)使用設(shè)計(jì)度量(耦合與內(nèi)聚)和啟發(fā)式規(guī)則,進(jìn)一步精化(修改)輸入結(jié)構(gòu)中的模塊“轉(zhuǎn)換成轉(zhuǎn)換成rpm”和和“收集收集sps”可以合并;模塊“確定加速確定加速/減速減速”可以放在模塊可以放在模塊“計(jì)算計(jì)算mph”下面,以減少耦合;模塊“加速加速/減速顯示減速顯示”可以相應(yīng)地放在模塊“顯示顯示mph”的下面的下面。84注:每個(gè)模塊應(yīng)附一簡要說明描述u進(jìn)出該模塊的信息(接口描述)u模塊內(nèi)部的信息u過程陳述,包括主要判定點(diǎn)及任務(wù)等u對約束和特殊特點(diǎn)的簡短討論總體設(shè)計(jì)與寫程序的區(qū)別:軟件的整體結(jié)構(gòu)全局的高度評價(jià)和精化軟件程序代碼是對某個(gè)功能模塊的實(shí)現(xiàn),不能體現(xiàn)全局高度855.5.3 事務(wù)分析86圖5.20 事務(wù)分析的映射方法l接收分支接收分支l發(fā)送分支發(fā)送分支發(fā)送分
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海底地震預(yù)警系統(tǒng)考核試卷
- 糕點(diǎn)店品牌定位與市場對接考核試卷
- 醫(yī)療健康信息化的投資考核試卷
- 羽絨加工企業(yè)生產(chǎn)流程優(yōu)化與改進(jìn)考核試卷
- 育種方法的創(chuàng)新與進(jìn)展考核試卷
- 電視購物在老齡化社會的市場潛力考核試卷
- 紗線設(shè)備的定制化解決方案考核試卷
- 低溫倉儲的安全管理與應(yīng)急響應(yīng)考核試卷
- 智能教育電子白板租賃及教育資源共享服務(wù)合同
- 淘寶直播基地直播活動策劃與執(zhí)行協(xié)議
- DB13-T 5722-2023 醫(yī)院感染應(yīng)對策略與質(zhì)量控制
- 2《歸去來兮辭并序》公開課一等獎創(chuàng)新教案統(tǒng)編版高中語文選擇性必修下冊
- 中國礦業(yè)大學(xué)《自然辯證法》2022-2023學(xué)年期末試卷
- 西方經(jīng)濟(jì)學(xué)考試題庫(含參考答案)
- 口腔診所消防安全工作管理制度
- 浙江省金華市永康市2024年統(tǒng)編版小升初考試語文試卷(原卷版)
- 管道天然氣居間合同范本
- 近視遺傳研究的民族差異
- 變更勞動合同地址協(xié)議書
- 2024年四川省綿陽市八年級下冊物理期末經(jīng)典試題含解析
- 導(dǎo)地線壓接培訓(xùn)課件
評論
0/150
提交評論