2017年電大-軟件工程期末考試小抄版_第1頁
2017年電大-軟件工程期末考試小抄版_第2頁
2017年電大-軟件工程期末考試小抄版_第3頁
2017年電大-軟件工程期末考試小抄版_第4頁
2017年電大-軟件工程期末考試小抄版_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【2017年電大考試整理】2017年電大軟件工程期末考試小抄版【2017年電大考試整理】2017年電大軟件工程期末考試小抄版【最新資料Word版可自由編輯!】【最新資料Word版可自由編輯!】1.什么是軟件危機,有哪些具體表現(xiàn)形式?簡單地講,軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。這些問題表現(xiàn)在以下幾個方面:1)軟件發(fā)展速度跟不上硬件的發(fā)展和用戶的需求2)對軟件成本和進度估計不準確,用戶不滿意3)軟件產品質量差,可靠性不能保證4)軟件產品可維護性差5)軟件沒有合適的文檔資料2.為什么會產生軟件危機?概況來說,產生軟件危機的原因可以歸結于以下兩個方面:一方面與軟件本身的特點有關。軟件是邏輯部件,軟件開發(fā)過程沒有統(tǒng)一的、公認的方法論和規(guī)范指導,造成軟件維護困難。另一方面與軟件開發(fā)的方式、方法、技術和軟件開發(fā)人員本身有關。隨著軟件規(guī)模越來越大,軟件復雜程度越來越高,原有軟件開發(fā)方式、方法與技術遠遠滿足不了軟件發(fā)展的需求,給軟件開發(fā)、維護帶來了一系列嚴重的問題;同時,軟件開發(fā)人員缺乏對軟件產品正確認識,造成制定計劃盲目、編程草率等問題。3.解決軟件危機的途徑?1)應該加強軟件開發(fā)過程的管理。2)推廣使用開發(fā)軟件的成功技術與方法,并且不斷探索更好的技術與方法。3)開發(fā)和使用好的軟件工具,建立軟件工程支持環(huán)境??傊?,為了解決軟件危機,既要有技術措施(好的方法和工具),又要有必要的組織管理措施。4.軟件工程的定義及目標?從不同的角度,軟件工程有各種不同的定義:1)FritzBauer認為:“軟件工程是為了經濟地獲得能夠在實際機器上有效運行的可靠軟件而建立和使用的一系列完善的工程化原則?!?)IEEE認為:“軟件工程是開發(fā)、運行、維護和修復軟件的系統(tǒng)方法”,其中,“軟件”的定義為:計算機程序、方法、規(guī)則、相關的文檔資料以及在計算機上運行時所必需的數(shù)據(jù)。3)中華人民共和國國家標準GB/T11457—1995《軟件工程術語》的定義是:“軟件工程是軟件開發(fā)、運行、維護和引退的系統(tǒng)方法”。軟件工程的目標可概括為:在給定成本、進度的前提下,開發(fā)出具有可修改性、有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可追蹤性和可互操作性并滿足用戶要求的軟件產品。5.軟件工程的基本原理軟件工程的7條基本原理:1)用分階段的生命周期計劃嚴格管理2)堅持進行階段評審3)實行嚴格的產品控制4)采用現(xiàn)代程序設計技術5)軟件工程結果應能清楚地審查6)開發(fā)小組的人員應該少而精7)承認不斷改進軟件工程實踐的必要性6.什么是軟件生存周期,包含哪些階段?軟件生存周期是指從設計軟件產品開始到產品不能使用為止的時間周期。概括地說,軟件生命周期由軟件定義、軟件開發(fā)和軟件維護3個時期組成。劃分為問題定義、可行性研究、需求分析、軟件設計(含:總體設計與詳細設計兩個階段)、編碼和單元測試、綜合測試、運行/維護7個階段。7.常用的軟件生存周期模型有哪些?1)瀑布模型:也稱線性順序模型或軟件生存周期模型,遵循軟件生存期的劃分,明確規(guī)定各個階段的任務,各個階段的工作自上而下、順序展開。2)快速原型模型:快速建立一個能反映用戶主要需求的原型系統(tǒng),降低了由于軟件需求不明確帶來的開發(fā)風險。3)增量模型:將整個產品分解成若干個構件進行逐步交付,使得軟件開發(fā)可以較好地適應需求的變化。4)螺旋模型:將瀑布模型與增量模型結合起來,并且加入兩種模型均忽略了的風險分析。1.問題定義是什么,必須明確哪些問題?問題定義即是明確該軟件開發(fā)項目要解決什么問題。必須明確以下問題:1)軟件系統(tǒng)要完成的總體目標是什么?2)要開發(fā)軟件的功能和性能是什么?3)軟件系統(tǒng)在可靠性和質量上有何具體要求?4)開發(fā)該軟件系統(tǒng)是否具備可行的技術?5)當前市場和競爭對手的情況怎樣?6)開發(fā)該軟件系統(tǒng)是否有成本和進度約束?7)該軟件系統(tǒng)將來可能進行哪些擴充?2.可行性研究的主要目的是什么?可行性研究的主要目的是用極少的代價在最短的時間內決定被開發(fā)的軟件是否能開發(fā)成功。3.可行性研究包括哪幾方面的內容?1)經濟可行性:通過對被開發(fā)軟件系統(tǒng)的成本效益的分析,估算系統(tǒng)的開發(fā)成本,估計系統(tǒng)可能取得的效益,確定待開發(fā)系統(tǒng)是否值得投資開發(fā)。2)技術可行性:從問題定義規(guī)格說明書提出的系統(tǒng)功能、性能以及實際系統(tǒng)的各種約束來分析,確定當前的技術及條件是否能實現(xiàn)整個系統(tǒng)。3)法律可行性:分析在系統(tǒng)開發(fā)的全部過程中可能出現(xiàn)和涉及的法律問題,如合同、責任、知識產權、專利等問題。4)運行可行性:判斷新系統(tǒng)的運行方式是否可行。4.可行性研究的主要工具是什么,有何作用?在進行可行性研究時,使用的主要工具為系統(tǒng)流程圖。系統(tǒng)流程圖的基本作用是:以黑盒方式描述系統(tǒng)各部件(如人工處理、程序、數(shù)據(jù)庫、圖表等),它只描述了信息在系統(tǒng)各部件中的流動情況,不對信息在系統(tǒng)中的加工細節(jié)進行描述,所以它不同于程序流程圖。5.需求分析的基本任務是什么?準確定義未來系統(tǒng)的目標,確定為了滿足用戶的需要系統(tǒng)必須做什么。6.常用的需求獲取方法?1)訪談和會議2)市場調查3)訪問用戶和用戶領域的專家4)考察現(xiàn)場,跟蹤現(xiàn)場業(yè)務流程5)開發(fā)人員和用戶共同組成聯(lián)合小組7.需求分析的描述工具有哪些?實體-關系圖(ER)、數(shù)據(jù)流圖(DFD)、數(shù)據(jù)字典(DD)、判定表、判定樹、結構化語言、層次方框圖、Warnier圖、IPO圖和需求描述語言等。8.結構化分析方法的定義?結構化分析就是使用DFD、DD、結構化語言、判定表和判定樹等工具,來建立一種新的稱為結構化說明書的目標文檔。9.什么是實體—聯(lián)系圖,具有哪些基本成分?實體聯(lián)系圖簡稱為E-R圖。E-R圖中包含了實體(即數(shù)據(jù)對象)、聯(lián)系和屬性等3種基本成分。1)數(shù)據(jù)對象:可以由一組屬性來定義的實體都可以被認為是數(shù)據(jù)對象。在E-R圖中用矩形框表示。2)屬性:屬性定義了數(shù)據(jù)對象的特征。它可用來:為數(shù)據(jù)對象的實例命名;描述這個實例;建立對另一個數(shù)據(jù)對象的另一個實例的引用。在E-R圖中用圓角矩形框表示。3)聯(lián)系:數(shù)據(jù)對象彼此之間相互連接的方式稱為聯(lián)系,也稱為關系。實體與實體之間的關系,在E-R圖中用連接兩個實體的菱形框表示。聯(lián)系可分有3種類型:一對一(1:1)、一對多(1:m)、多對多(n:m)。10.為什么數(shù)據(jù)流圖要分層?畫分層的DFD要遵循哪些原則?分層的目的:便于逐步細化、結構清晰。畫分層的DFD要遵循哪些原則:1)父圖與子圖之間數(shù)據(jù)要平衡。2)分解的深度和層次達到使加工足夠簡單、易于理解的基本加工為止。3)區(qū)分局部文件和局部外部項(局限于數(shù)據(jù)流中某一層或某幾層的文件和外部項)。4)不要把控制流作為數(shù)據(jù)流。5)忽略瑣碎的枝節(jié)。6)每個數(shù)據(jù)流要有一個合適的名字,盡量使用現(xiàn)實系統(tǒng)中有具體意義的名字。11.系統(tǒng)流程圖與數(shù)據(jù)流程圖有什么區(qū)別?系統(tǒng)流程圖描述系統(tǒng)物理模型的工具,數(shù)據(jù)流程圖描述系統(tǒng)邏輯模型的工具;系統(tǒng)流程圖從系統(tǒng)功能的角度抽象的描述系統(tǒng)的各個部分及其相互之間信息流動的情況;數(shù)據(jù)流程圖從數(shù)據(jù)傳送和加工的角度抽象的描述信息在系統(tǒng)中的流動和數(shù)據(jù)處理的工作狀況。12.數(shù)據(jù)字典包括哪些內容?它的作用是什么?數(shù)據(jù)字典是描述數(shù)據(jù)流圖中數(shù)據(jù)的信息的集合。它對數(shù)據(jù)流圖上每一個成分:數(shù)據(jù)項、文件(數(shù)據(jù)結構)、數(shù)據(jù)流、數(shù)據(jù)存儲、加工和外部項等給以定義和說明;它主要由數(shù)據(jù)流描述、加工描述和文件描述三部分組成。對用戶來講,數(shù)據(jù)字典為他們提供了數(shù)據(jù)的明確定義;對系統(tǒng)分析員來講,數(shù)據(jù)字典幫助他們比較容易修改已建立的系統(tǒng)邏輯模型。4.什么是模塊?模塊具有哪些基本屬性、特性?模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序對象的集合,可以單獨命名且可通過名字來訪問。模塊具有3個基本屬性:1)功能:模塊實現(xiàn)的功能(含該模塊調用的子模塊的功能)。2)邏輯:描述模塊內部怎么做。3)狀態(tài):模塊使用時的環(huán)境和條件。模塊具有內部和外部兩個特性:1)外部特性:模塊的名字、參數(shù)表等。2)內部特性:完成模塊功能的程序代碼和模塊內部數(shù)據(jù)。5.什么是模塊化?模塊設計的準則?模塊化是按規(guī)定的原則將一個大型軟件劃分為一個個較小的、相對獨立但又相關的模塊。模塊設計的準則:1)改進軟件結構,提高模塊獨立性:在對初步模塊進行合并、分解和移動的分析、精化過程中力求提高模塊的內聚,降低藕合。2)模塊大小要適中:大約50行語句的代碼,過大的模塊應分解以提高理解性和可維護性;過小的模塊合并到上級模塊中。3)軟件結構圖的深度、寬度、扇入和扇出要適當。一般模塊的調用個數(shù)不要超過5個。4)盡量降低模塊接口的復雜程度;5)設計單入口、單出口的模塊。6)模塊的作用域應在控制域之內。7.變換分析設計的步驟?1)區(qū)分傳入、傳出和變換中心三部分,劃分DFD圖的分界線;2)完成第一級分解:建立初始SC圖的框架;3)完成第二級分解:分解SC圖的各個分支;4)對初始結構圖按照設計準則進行精化與改進。8.事務型數(shù)據(jù)流由哪幾部分組成?事務型數(shù)據(jù)流圖由接受事務、事務中心和若干處理單元輸出結果部分組成。9.事務分析設計的步驟?1)在DFD圖中確定事務中心、接收部分和發(fā)送部分;2)畫出SC圖框架,把DFD圖的三部分分別映射為事務控制模塊、接收模塊和動作發(fā)送模塊。一般得到SC圖的頂層和第一層;3)分解和細化接收分支和動作分支,完成初始的SC圖;4)對初始結構圖按照設計準則進行精化與改進。10.比較層次圖和結構圖的異同?層次方框圖描繪數(shù)據(jù)的層次結構,結構圖描繪的是軟件結構。二者都采用多層次矩形框樹形結構。層次方框圖的頂層矩形框代表完整的數(shù)據(jù)結構,下面各層矩形框依次代表上個框數(shù)據(jù)的子集;結構圖是在層次圖的每一個方框內注明模塊的名字或主要功能,方框之間的直線表示模塊的調用關系,用帶注解的箭頭表示模塊調用過程中傳遞的信息。1.選擇編碼語言通常需要考慮的因素有哪些?1)系統(tǒng)的應用領域2)系統(tǒng)用戶的要求3)軟件的執(zhí)行環(huán)境4)目標系統(tǒng)的性能要求5)程序員的知識水平6)軟件的可移植性要求7)算法和數(shù)據(jù)結構的復雜性2.編碼風格的指導原則?源程序文檔化:適當?shù)臉俗R符、適當?shù)淖⒔?、程序清單的合理布局與清晰。數(shù)據(jù)說明:數(shù)據(jù)結構或數(shù)據(jù)類型的說明次序標準化;變量名稱盡量有意義。對復雜的數(shù)據(jù)結構在注解中要說明在程序設計中實現(xiàn)這個數(shù)據(jù)結構的方法。語句結果:語句的構造簡單明了:不要為節(jié)省空間將多個語句寫在同一行;盡量避免復雜的條件及“非”條件的測試;避免大量使用循環(huán)嵌套和條件嵌套;括號的使用是為了使邏輯表達式和算術表達式的運算順序清晰直觀。效率:考慮程序運行的時間存儲器效率、輸入/輸出的效率;在處理程序正確性、清晰與效率之間的關系時先求程序正確后求快;先求清楚后求快;保持程序簡單以求快;書寫清楚,不為“效率”犧牲清晰。3.什么是軟件測試?軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f,軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內部結構而精心設計一批測試用例,并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤的過程。4.軟件測試與軟件調試的主要區(qū)別?1)測試從一個側面證明程序員的失?。徽{試證明程序員的正確;2)測試從已知條件開始,使用預先定義的程序,且有預知的結果,不可預見的僅是程序是否通過測試;調試從不可知內部條件開始,除統(tǒng)計性調試外,結果是不可預見的;3)測試有計劃并且要進行測試設計;調試不受時間約束;4)測試是發(fā)現(xiàn)錯誤、改正錯誤、重新測試的過程;調試是一個推理的過程;5)測試執(zhí)行是有規(guī)程的;調試執(zhí)行要求程序員進行必要的推理;6)測試由獨立的測試組在不了解軟件設計的件下完成;調試由了解詳細設計的程序員完成;7)大多數(shù)測試的執(zhí)行和設計可由工具支持;調試用的工具主要是調試器。5.軟件測試的方法有哪些?按照測試過程是否執(zhí)行程序來分,有靜態(tài)分析和動態(tài)測試。1)靜態(tài)分析不執(zhí)行被測軟件,通常對需求分析說明書、軟件設計說明書與源程序作結構檢查、流程圖分析、編碼分析等來發(fā)現(xiàn)軟件錯誤,這是十分有效的軟件質量控制方法。2)動態(tài)測試以執(zhí)行程序并分析程序來查錯。需要事先準備好測試數(shù)據(jù):輸入數(shù)據(jù)和預期的輸出結果。把輸入數(shù)據(jù)和與之對應的預期輸出結果稱為測試用例。怎樣設計測試用例是動態(tài)測試的關鍵。按照測試數(shù)據(jù)的設計依據(jù),可分為黑盒法與白盒法。1)黑盒測試是把測試對象看做一個黑盒子,測試人員完全不考慮程序內部的邏輯結構和內部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明。2)白盒測試把測試對象看做一個透明的盒子,它允許測試人員利用程序內部的邏輯結構及有關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試。6.軟件測試的步驟?測試過程按5個步驟進行:即模塊測試、子系統(tǒng)測試、系統(tǒng)測試、驗收測試、平行運行。1)模塊測試也稱為單元測試。在設計比較好的軟件系統(tǒng)中,每個模塊完成一個清晰定義的子功能,而且這個子功能和同級模塊之間沒有相互依賴關系。2)子系統(tǒng)測試是把已測試過的模塊組裝起來,形成一個子系統(tǒng)進行測試。著重測試模塊間的接口。這個階段所發(fā)現(xiàn)的往往是概要設計階段的錯誤。3)系統(tǒng)測試是把經過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試。4)驗收測試把軟件系統(tǒng)作為單一的實體進行測試,測試內容與系統(tǒng)測試基本類似,但是它是在用戶積極參與下進行的,而且可能主要使用實際數(shù)據(jù)進行測試。5)平行運行同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結果。7.人工測試有哪些方法?人工測試的主要方法有桌前檢查、代碼審查和走查。桌前檢查由程序員自己檢查自己編寫的程序。代碼會審由若干程序員和測試員組成一個會審小組,通過閱讀、討論和爭議,對程序進行靜態(tài)分析的過程。走查:先把材料先發(fā)給走查小組每個成員,讓他們認真研究程序,后再開會;首先由測試組成員為被測程序準備一批有代表性的測試用例,提交給走查小組。走查小組開會,集體扮演計算機角色,讓測試用例沿程序的邏輯運行一遍,隨時記錄程序的蹤跡,供分析和討論用。8.黑盒測試主要采用的技術有哪些?黑盒測試主要采用的技術有:等價類劃分、邊界值分析、錯誤推測、因果圖和功能圖。所謂等價劃分就是把所有可能的輸入數(shù)據(jù)劃分為若干等價類,即子集,使每類中的任何一個測試用例,都能代表同一等價類中的其他測試用例。邊界值分析就是要把測試的重點放在各個等價類的邊界上,選取剛好等于、大于和小于邊界值的數(shù)據(jù)為測試數(shù)據(jù),并據(jù)此設計出測試用例。錯誤推測法是指人們可以通過經驗或直覺推測程序中可能存在的各種錯誤,從而有針對性設計測試用例。9.白盒測試主要采用的技術有哪些?白盒測試主要采用的技術有:路徑測試技術和事務處理流程技術,對包含有大量邏輯判斷或條件組合的程序采用基于邏輯的測試技術。10.路徑測試技術中幾種主要覆蓋的含義?語句覆蓋:至少執(zhí)行程序中所有語句一次。判定覆蓋:使被測程序中的每一個分支至少執(zhí)行一次。故也稱為分支覆蓋。條件覆蓋:執(zhí)行所有可能的穿過程序的控制路流程。判定-條件覆蓋:即是要求各個判斷的所有可能的條件取值組合至少執(zhí)行一次。條件組合測試:設計足夠的測試用例,使每個判定中的所有可能條件取值組合至少執(zhí)行一次。路徑覆蓋:設計足夠的測試用例,覆蓋程序中所有可能的路徑。1.軟件的維護一般分為哪幾類?改正性維護:滿足用戶對已開發(fā)產品的性能與運行環(huán)境不斷提高的要求,進而達到延長軟件壽命的目的。適應性維護:對程序使用期間發(fā)現(xiàn)的程序錯誤進行診斷和改正的過程,配合變化了的環(huán)境進行修改軟件的活動;完善性維護:滿足用戶在使用過程中提出增加新的功能或修改已有功能的建議而進行的工作;預防性維護:為了改善未來的可維護性或可靠性而修改軟件的工作。2.影響軟件維護的因素有哪些?開發(fā)方法:采用模塊化詳細設計文檔有助于理解軟件的結構、界面功能和內部流程;開發(fā)過程中嚴格而科學的管理規(guī)劃及清晰可靠的文檔資料對發(fā)生錯誤后的理解與糾錯是至關重要的;開發(fā)過程中模塊的獨立程度越高,對軟件修改越容易,對軟件的改進和移植越方便。開發(fā)條件:軟件開發(fā)及維護人員的水平決定了軟件開發(fā)的質量和維護的效率;開發(fā)過程中使用標準的程序設計語言和標準的操作系統(tǒng)接口,可以大大提高軟件的可維護性;在測試過程中用例的有效性,可極大地減少軟件存在的錯誤;其次使用規(guī)范化的文檔資料可為維護提供更好的依據(jù)。3.決定軟件可維護性的因素?1)軟件的可理解性、可測試性、可修改性;2)文檔描述符合要求、用戶文檔簡潔明確、系統(tǒng)文檔完整并且標準。4.軟件價格應該計入維護成本嗎?為什么?在軟件的生命周期中,軟件維護的工作量非常大,不同應用領域的維護成本差別也很大。一般大型軟件的維護成本遠遠高于開發(fā)成本若干倍。因此軟件價格中應該計入維護成本。精品Word文檔用心整理,可以編輯精心整理編輯word版可自由編輯第頁1.漸增式與非漸增式各有何優(yōu)、缺點?為什么通常采用漸增式?答:非漸增式是將所有的模塊一次連接起來,簡單、易行,節(jié)省機時,但測試過程中難于查錯,發(fā)現(xiàn)錯誤也很難定位,測試效率低。漸增式是將模塊一個一個的連入系統(tǒng),每連入一個模塊,都要對新系統(tǒng)進行測試。這種組裝測試方案比較非漸增式,容易查出錯誤及進行錯誤定位,有利于查出模塊接口部分的錯誤,因此測試效率高。因此通常采用漸增式。2.自頂而下漸增與自底而上漸增各有何優(yōu)、缺點?答:自頂而下漸增優(yōu)點:能夠盡早發(fā)現(xiàn)系統(tǒng)主控方面的問題。缺點:無法驗證樁模塊是否完全模擬了下屬模塊的功能。自底而上漸增優(yōu)點:驅動模塊較容易編寫樁模塊,能夠盡早查出底層涉及較復雜的算法和實際的I/O模塊中的錯誤。3.等價分類法的基本思想是什么?答:根據(jù)程序的輸入特性,將程序的定義域劃分為有限個等價區(qū)段—“等價類”,從等價類中選擇出的用例具有“代表性”,即測試某個等價類的代表值就等價于對這一類其它值的測試。如果某個等價類的一個輸入數(shù)據(jù)(代表值)測試中查出了錯誤,也即是該等價類中的其它值也會查出同樣的錯誤。4.一般,驅動模塊比樁模塊容易設計,為什么?答:因為驅動模塊是模擬主程序或者調用模塊的功能,處于被測試模塊的上層,所以驅動模塊只需要模擬向被測模塊傳遞數(shù)據(jù),接收、打印從被測模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論