软件工程期末复习二
以下是我的一位同學整理的,標注是我做的,希望好好學習,順利通過考試,軟件工程最重要的是畫圖題。
1.什么是軟件危機,它有哪些典型表現?
答: 軟件危機是指在計算機軟件的開發和維護過程中所遇到的一系列嚴重問題。
軟件危機典型表現:對軟件開發成本和進度的估計常常很不準確。
2.簡述產生軟件危機的原因和解決的思路。
答:原因一方面與軟件本身的特點有關,另一方面,是與已有軟件開發、維護的方法不正確有密切關系。
采用工程化的原則和方法組織軟件開發是擺脫軟件危機的一個主要出路。
3.什么是軟件工程?它有哪些本質特性?
答: 軟件工程是指導計算機軟件開發和維護的一門工程學科。采用工程的概念、原理、技術和方法來開發與維護軟件,把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來,以經濟地開發出高質量的軟件并有效地維護它。
軟件工程本質特性:1、軟件工程關注于大型程序的構造;2、軟件工程的中心課題是控制復雜性;3、軟件經常變化;4、開發軟件的效率非常重要;5、和諧地合作是開發軟件的關鍵;6、軟件必須有效地支持它的用戶;7、在軟件工程領域中是由具有一種文化背景的人替具有另一種文化背景的人創造產品。
6.簡述軟件的定義。軟件 = 程序 + 數據 + 文檔
7.軟件工程的目的為高質量的軟件開發(軟件過程目的)提供一個科學的體系框架。
8.什么是軟件工程方法學?軟件工程是一種什么樣的技術?包括哪三大要素?分為哪三個分支?
軟件工程方法學就是指在軟件生命周期全過程中使用的一整套管理和開發技術方法的集合。
軟件工程是一種層次化的技術,有方法、工具和過程三大要素,并分為三個分支:軟件開發技術、軟件項目管理技術、軟件質量管理技術。
9.簡述軟件工程的基本原理。
軟件工程有7條基本原理:
1.嚴格按照軟件生命周期計劃進行管理
2.堅持進行階段評審
3.實行嚴格的產品控制
4.采用先進的程序設計技術
5.結果應能清楚的審查
6.開發小組成員應少而精
7.承認不斷改進軟件工程實踐的必要性
12.什么是軟件過程?它與軟件工程方法學有何關系?
軟件過程是指為了獲得高質量軟件產品,在軟件工具支持下,由軟件人員完成的一系列軟件工程活動。
軟件過程規定了開發軟件所需完成的各項任務步驟。過程步驟的設定與軟件生命周期、生命周期模型、軟件開發工具,以及參與開發的人員等諸方面因素有關。
13.什么是軟件生命周期?什么是軟件生命周期模型?
答: 軟件如同自然界任何事物一樣,都有其孕育、誕生、成長、成熟、衰亡的生存過程。軟件的這一過程,稱為軟件生命周期。
軟件生命周期模型也稱軟件開發過程模型,是為了解決產業環境中的實際問題,而提出的開發策略。是反映整個軟件生命期中,系統開發、運行、維護等實施活動的一種結構框架。
15.試比較瀑布模型、快速原型模型、增量模型和螺旋模型的優缺點,說明它們各自的適用范圍。
1.瀑布模型。瀑布模型廣為人知和歷史悠久,其優勢是規范及文檔驅動的方法。但問題是,往往不能夠真正滿足用戶的需求。適用于傳統軟件工程領域的結構化開發。
2.原型模型。是為了克服瀑布模型的缺點而提出來的。通過快速構建一個在機器上可運行的原型系統,讓用戶試用原型,并收集反饋意見的辦法,來獲取用戶真實的需求。適用于需求不明確,分析需求
3.螺旋模型。螺旋模型適用于內容開發的大型軟件項目,比起之前的其它模型而言,有其一定的優越性,但這些優越性并不是絕對的。主要體現在對開發人員的風險評估經驗和專門知識的要求較高。如果項目風險較大,而開發人員的水平較低,不能準確的識別和分析風險,則勢必造成重大損失。增加了風險分析過程
4.增量模型。具有在軟件開發早期階段使投資獲得明顯回報和交易維護的優點,但是要求軟件具有開放的結構。適用于時間緊迫,能在較短時間內提供可完成部分的產品
5.噴泉模型:面向對象方法學
第二章
1.在軟件開發的早期階段,為什么要進行可行性研究?其目的和任務各是什么?
可行性研究的目的是用最小的代價,在盡可能短的時間內確定問題是否可解決,以及是否值得解決。
可行性研究的任務不是解決問題,而是確定是否可解/值得解。
2.應該從哪些方面研究目標系統的可行性?
1. 技術可行性。以現有技術,能否在預定時間內完成該系統開發。
2. 經濟可行性。通過成本-效益分析,估算系統的整體經濟效益是否滿足要求。
3. 操作可行性。分析系統的運行方式、操作規程是否適應用戶應用需要。
4. 社會可行性。分析系統在法律、社會、市場等方面的認可度。
3.可行性研究有哪些工作步驟?
(1) 復查定義,確定系統規模和目標。
(2) 研究老系統
(3) 導出高層邏輯模型(conceptual design)
(4) 重新定義
(5) 導出多種解法
(6) 推薦行動方針
(7) 開發計劃(粗略)
(8) 審查、存檔
4.簡述系統流程圖在可行性研究中的作用。
系統流程圖可以幫助了解和分析系統,以概括的方式表達對系統的認識,并可以描述未來物理系統的概貌。
5.簡述數據流圖在可行性研究中的作用和用途。
數據流圖在可行性分析中可以幫助分析和描繪數據在軟件中流動和被處理的邏輯過程,用圖形的方式描述系統的邏輯功能,是系統分析員和用戶之間理想的通信工具。
6.簡單描述數據字典但內容和定義數據的方法。
數據字典主要由下列4種元素定義組成:1.數據流2.數據流分量3.數據存儲4.處理
除了數據定義外,數據字典還應包含一些關于數據的其它信息。
定義數據的方法通常采用自頂向下分解的方式。并由順序、選擇、重復三種基本數據元素類型組成數據
第三章
1.為什么要進行需求分析?通常對軟件系統有哪些需求?
一個高質量的軟件,很大程度上取決于對要解決的問題的認識,以及如何準確的表達用戶的需求。需求分析就是要解決這個問題。
通常,對一個軟件系統的需求可以有功能需求、性能需求、可靠性和可用性需求、出錯處理需求、接口需求等多個方面。
2.怎樣與用戶有效地溝通,以獲得用戶的真實需求?
訪談
面向數據流的自頂向下求精
簡易的系統規格說明文檔
創建原型是獲取真實需求的有效方法。
3.需求分析的任務是什么?確定對待開發系統的綜合要求。
4.通常系統的需求可以分為哪幾個層次?
一般可以分成5個層次:
(1) 功能需求:系統必須做什么?
(2) 業務需求:反映客戶組織機構對系統高層次的目標要求。
(3) 運行需求:運行環境、軟硬件配置等。
(4) 屬性需求:包括用戶關心的屬性,如效率、靈活性、完整性、可靠性等;開發者關心的屬性,如可維護性、可復用性、可移植性等。
(5) 未來可能的擴充需求:如HDIS各組的合并,3維虛擬現實的效果等等。
?
5.進行需求分析的步驟有哪些?
1.確定系統的綜合要求
2.分析系統的數據要求
3.導出邏輯模型
4.修正系統開發計劃
6.簡述建立原型模型對軟件需求分析的作用。
可以快速構建旨在演示目標系統主要功能的可運行程序,幫助用戶確定及提供更為精準的需求,以利用戶和開發者能夠在目標系統應該“做什么”這一問題上盡快達成一致。
7.解釋實體-聯系圖及其用途。
實體-聯系圖是按照用戶的觀點對數據建立的模型。描述從用戶角度看到的數據,反映用戶的現實環境,并且與在軟件系統中的實現方法無關。
8.說明為什么需要進行需求驗證及驗證的步驟有哪些?
進行需求驗證是為了確保軟件開發的質量,降低開發成本。
通常對需求進行驗證的步驟有:驗證需求的一致性、驗證需求的現實性、驗證需求的完整性和有效性。
第四章
3.簡單說明系統總體設計的步驟步驟。
典型的總體設計包括以下9個步驟:
1、確定最佳方案2、選取合理方案3、推薦最佳方案4、功能分解5、軟件結構設計6、設計數據庫7、制定測試計劃8、書寫文檔9、審查和復審
?
5.為什么要盡量使用數據耦合,少用控制耦合,限制公共耦合的范圍,完全不用內容耦合?
減少模塊之間的關聯度,提高模塊的獨立性。因為內容耦合會導致一個模塊修改另一個模塊的內容,使得程序邏輯發生嚴重問題。而公共耦合是若干模塊通過一個公共數據環境相互作用,公共部分的改動將影響所有調用它的模塊,公共部分的數據存取無法控制,并且復雜程度也會隨耦合模塊的個數增加而增加。
控制耦合是一個模塊通過傳遞開關、標志、名字等控制信息,明顯地控制選擇另一個模塊的功能。由于接口單一,因此仍然會影響被控模塊的內部邏輯。而數據耦合只是模塊間通過數據參數來交換I/O信息,因此不會對其它模塊產生任何等影響。
6.為什么模塊的規模要適中?
過大不易理解;
太小則接口開銷過大。
7.請說明為什么模塊控制的寬度和深度要適度。
深度過大表示分工過細,而寬度過大則表示系統復雜度大,所以模塊控制的寬度和深度要適度。
10.面向數據流的設計方法主要有哪幾個步驟?
1.復查基本系統模型2.復查并精化數據流圖3.確定數據流圖具有變換特性還是事務特性4.確定輸入流和輸出流動邊界,從而孤立出變換中心5.完成“第一級分解”6.完成“第二級分解”7.使用設計度量和啟發式規則對第一次分割得到的軟件結構進一步精化
?
第五章
1.詳細設計的任務是什么?
包括模塊的算法設計、
模塊內的數據結構設計、
模塊接口設計、
其它根據軟件特點需要完成的設計、
模塊測試用例設計、
設計文檔編寫、
設計評審。
2.在對系統做詳細設計時,應遵循哪些原則?
① 模塊的邏輯描述應清晰易讀、正確可靠;
② 設計的處理過程應該簡明易懂;
③ 選擇恰當的描述工具來描述模塊算法。
3.簡述結構化設計的特點。
① 自頂向下、逐步求精;
② 具有單入、單出的控制結構(取消GOTO語句)
4.結構化程序設計中有哪幾種基本控制結構?分別描繪在程序流程圖、盒圖和PDA圖中這些基本控制的圖例。
PDA圖中這些基本控制的圖例。
(1) 順序結構(2) 選擇結構(3) 先判定型循環結構(4) 后判定型循環結構(5) 多情況選擇
?
?
第六章
1.說明什么是程序編碼?為什么程序設計語言的特點和編碼風格會影響到程序的可靠性、可讀性、可測試性和可維護性?
所謂“編碼”,就是將在低級抽象層次得到的詳細設計結果,翻譯成用某種程序設計語言書寫的程序。是軟件設計的自然結果。
而程序設計語言是否有理想的結構化、模塊化機制,是否有可讀性好的控制結構和數據結構等特性,以及程序設計語言提供的編譯、軟件工具等,再加上程序的設計風格會很深刻的影響軟件的質量和可維護性、可測試性、可靠性等。
6.為什么說軟件界面設計的質量會直接影響到用戶對軟件產品的評價?
用戶界面(User-interface)又稱人機界面(man-computer interface),是用戶和計算機聯系的中間媒介,是系統中最重要、最關鍵的部分之一。用戶界面設計的好壞,直接影響到系統設計的成敗。
這是因為,如果一個界面設計的不好,也即通常所說的用戶界面不友好,可以使用戶在使用時感到不便,甚至制造麻煩,系統就難以發揮應有的效益,甚至可能被用戶棄用。
7.什么是系統響應時間?系統響應時間有哪些重要屬性?
系統響應時間指從用戶完成某個控制動作,到系統給出預期響應的時間。系統響應時間有2個重要的屬性:長度和易變性。
8.在設計軟件系統的用戶幫助設施時,需要注意解決哪些問題?
1.在用戶與系統交互期間,是否任何時候都能獲得關于系統任何功能的幫助信息?
2.用戶怎樣請求幫助?
3.怎樣顯示幫助信息?
4.用戶怎樣返回到正常的交互方式中?
5.怎樣組織幫助信息?
9.軟件出錯處理設計,即軟件安全性設計。一個交互式出錯處理程序應該具備哪些功能和屬性?
1.信息應該使用用戶可以理解的術語描述。
2.信息應該提供有助于從錯誤中恢復的建設性意見。
3.信息應該指出錯誤可能導致的后果。
4.信息應該伴隨感官提示。
5.信息不能帶有指責色彩。
10.測試的最基本目標是什么?
以盡可能小的代價,發現盡可能多的錯誤。
11.軟件測試的原則有哪些?
① 應當把“盡早和不斷的測試”作為座右銘
② 測試應由獨立的專業測試機構來完成
③ 測試工作要全面,但不可能實現“窮舉”
④ 只能盡可能查錯,不能證明程序中沒有錯
⑤ 軟件測試符合2-8(Pareto)原理
⑥ 應妥善保存測試文檔
⑦ 制定嚴格、合理的測試計劃
⑧ 錯誤經過修改后,相關的測試必不可少
19.為什么人工代碼審查十分重要?
一次審查可發現多個錯誤,不必改一個測一個。
30.什么是調試?調試和測試有什么不同?
測試 —— 發現錯誤 ;調試 —— 改正錯誤
調試與測試的區別在于,調試作為測試的后續工作,主要是解決和排除測試中出現的錯誤。
31.簡單說明調試的方法和策略。
調試過程的關鍵不是調試技術,而是用來推斷錯誤原因的基本策略。主要有:1.試探法:憑經驗猜測。
2.回溯法:由癥狀(symptom)最先出現的地方,沿control flow向回檢查。適用于小型程序。
③ 對分法:在關鍵點插入變量的正確值。④? 歸納法:從錯誤癥狀中找出規律,推斷根源。⑤ 演繹法:普通 ? 特殊
32.什么是軟件的可靠性、可用性和正確性?
軟件可靠性是指程序在給定的時間間隔內,按照說明書的規定,成功地運行的概率。
軟件可用性是指程序在給定的時間點,按照說明書的規定,成功地運行的概率。
軟件正確性是指程序的功能正確。
第七章
1.什么是軟件維護?
在軟件已經交付使用之后,為了改正錯誤或滿足新的需要而修改軟件的過程。
2.軟件維護有哪幾種類型?
①改正性維護:診斷和改正錯誤;
②適應性維護:為了和變化了的環境(如軟\硬件升級、新數據庫等)適當地配合而修改軟件;
③完善性維護:為了增加新功能,修改已有功能,改造界面,增加HELP等,而修改軟件;?
④預防性維護:為了改進未來的可維護性或可靠性,或為了給未來的改進奠定更好的基礎而修改軟件。
3.為什么說軟件文檔維護和代碼維護同樣重要?
這是因為,軟件文檔是影響軟件可維護性的決定因素。
4.為什么說維護的代價很高?應該怎樣做才能降低維護的代價?
一般維護的工作量占生存周期70%以上,維護成本約為開發成本的4倍(滿足8-2規則)。維護代價分為:
1.有形代價:費用已上升至總預算的80%;
2.無形代價: a 占用資源以致延誤開發;a修改不及時引起用戶不滿;a 維護引入新錯誤,降低了?? 軟件質量;等等。
3.維護工作量的經驗模型:M = P + K*ec-d
降低維護代價的通常認識是:提高程序的可維護性,這也是軟件工程學的主要目的。
6.什么是軟件的可維護性?
軟件可維護性可定性地定義為:維護人員理解、改正、改動和改進這個軟件的難易程度。
7.如何提高軟件的可維護性?
可以從提高決定軟件可維護性的因素著手,這些因素是:可理解性、可測試性、可修改性、可移植性、可重用性、可靠性、可使用性、效率等。
9.為什么說文檔是影響軟件可維護性的決定因素?
由于長期使用的軟件系統在使用過程中會有多次修改的經歷,而文檔應該記載了這些重要的修改,所以文檔比之代碼更為重要。
10.什么是軟件的系統文檔?
系統文檔是指軟件系統從問題定義、需求說明、設計、實現到驗收測試計劃等一系列和系統實現密切相關的技術文檔。
11.什么是軟件的用戶文檔?
提供用戶了解、使用、操作和安裝系統的文檔資料。
12.什么是可重用性?如何通過提高軟件的可重用性來提高軟件的可維護性?
可重用性是指同一事物不加修改或稍加修改,就可以在不同環境多次重復使用。大量使用可重用軟件構件,可大幅提高軟件的可維護性。主要體現在兩個方面:
1.可重用構件通常都是組裝成功的部件,加上每次重用又都會進一步完善部件,因此可以大幅提高軟件的可靠性,而改正性維護要求會降低。
2.很容易修改可重用的軟件構件,使之適應新的應用環境,因此軟件中使用可重用構件越多,軟件的適應性維護和完善性維護也越容易。
13.為什么要進行軟件可維護性復審?
目的是提高軟件的可維護性。
可維護性復審在軟件開放的不同階段有不同的重點。例如,在分析階段的復審重點是:可靠性、可移植性、可用性。而編碼階段則主要是:可理解性、可修改性、可移植性和效率。
14.什么是軟件的逆向工程和再工程?
軟件逆向工程是指當維護對象缺乏必要的文檔資料時,分析已有程序,尋求比源代碼更高級的抽象表現形式,恢復軟件原有設計的過程。換言之,是一個恢復設計的過程。
軟件再工程則是以軟件工程學為指導,對目標軟件進行重新設計、重新編碼和測試的過程。
15.逆向工程與再工程與軟件的預防性維護有什么樣的關系?
預防性維護是為了改進軟件未來的可維護性或可靠性,或為了給軟件未來的改進奠定更好的基礎而修改軟件的過程。預防性維護就是對軟件將來可能需要的改動,使用逆向工程與再工程方法對軟件進行維護。
???????????????????????? 第八章
1.為什么要引入面向對象方法學?
1、瀑布模型的缺點:僵化
2、SA - SD - SP 技術的缺點:本質上是基于過程的設計不易被理解;且功能變化往往引起結構變化較大,穩定性不好。系統有明確的邊界定義,且系統結構依賴于系統邊界的定義,這樣的系統不易擴充和修改。數據與操作分開處理,可能造成軟構件對具體應用環境的依賴,可重用性(reusability)較差。
2.面向對象方法學有哪4個基本要素?
對象、類、繼承、消息
3.面向對象方法學的優點主要有哪些?
1.以object為核心,強調對現實概念的模擬而不是算法。
2.以object模擬實體,需求變化不會引起結構的整體變化,因為實體相對穩定,故系統也相應穩定。
3.一個class所有的 instances 都可重用它的代碼;由 inheritance 派生出的新的 class 可重用其父類的代碼,并且可以修改、擴充而不影響其父類的使用。
4.從穩定性、Class 的獨立性強、繼承和多態性、容易理解、容易測試、調試等幾方面改善了可維護性。
7.什么是模型?軟件開發為什么要建立模型?
模型就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。
軟件開發建立模型是為了幫助我們思考問題、定義術語、作出適當的假設,并幫助我們保持定義和假設的一致性。
對于較為復雜而不能直接理解的系統,特別需要建立模型,其目的是可以減少復雜性。
8.什么是對象模型?建立對象模型時主要使用哪些圖形符號?這些符號的含義是什么?
描述系統數據結構。對象模型具體是描述系統的靜態結構。
9.什么是動態模型?建立動態模型時主要使用哪些圖形符號?這些符號的含義是什么?
描述系統控制結構。動態模型具體是表示系統瞬時的控制性質。
10.什么是功能模型?建立功能模型時主要使用哪些圖形符號?
描述系統功能。功能模型具體描述的是表明系統應該做什么。
?
?
第九章
1.進行面向對象分析的基本過程是怎么樣的?
需求陳述 T 快速原型 T 模型??????
其中模型 有三個:對象模型、動態模型、功能模型。
2.建立對象模型有哪幾個步驟?
1、確定類與對象:
第1步:列出所有候選對象???? 第2步:去粗取精
2、確定關聯 T 結構層
第1步:收集???? 第2步:篩選刪除???? 第3步:完善
3、劃分主題 4、確立屬性? 5、識別繼承關系及其它修改
3.復雜問題的對象模型有哪5個層次?
主題層、類&對象層、結構層、屬性層、服務層。
4.建立動態模型的步驟有哪些?
1、編寫腳本,描述事件序列:
事件 = 觸發器 + 接收器 + 參數
2、設想用戶界面T 修改原型.3、畫事件跟蹤圖4、畫狀態圖
5.如何建立功能模型?
1.畫出基本系統模型圖2.畫出功能級數據流圖3.描述處理框功能
?
第十一章
1.面向對象實現應該選用哪種程序設計語言?為什么?
應該選擇能夠更完整、更正確地表達問題域語義的面向對象語言。這是由于面向對象語言相對非面向對象的語言,其突出的優點:一致的表示方法、可重用性、可維護性。
2.面向對象程序設計語言主要有哪些技術特點?
面向對象語言的技術特點主要有:
a)? 支持類與對象概念的機制
b)? 實現整體—部分結構的機制
c)?? 實現一般—特殊結構的機制
d)? 實現屬性和服務的機制
e)?? 類型檢查
f)?? 類庫
g)? 效率
h)? 持久保存對象
i)?? 參數化類
j)?? 開發環境
3.選擇面向對象程序設計語言時主要應該考慮哪些因素?
主要應該著重考慮以下因素:將來能否占主導地位、可重用性、類庫和開發環境、其他因素等。
4.良好的面向對象程序設計風格主要有哪些準則?
提高可重用性、提高可擴充性、提高健壯性。
第十二章
1.請簡單描述有哪些進行軟件規模估算的方法。
代碼行技術和功能點技術。
2.在工作量估算技術中,動態多變量模型比靜態單變量模型有哪些優點?
可以更精確地進行估算,估算結果更切合被估算對象的實際。
3.簡述Gantt圖的用途和優缺點。
優點:簡單,能動態地反映開發進展。
缺點:難以反映多個任務間的邏輯關系。
5.目前項目開發時常用的小組組織方法有哪些?
民主制程序員組、主程序員組和現代程序員組。
6.簡述主程序員組的優缺點。
優點主要有:主程序員廣播式發布工作要求,組織管理好、效率高、質量容易保證、成本相對較低。
缺點主要有:人員完整配備較難、不利人才脫穎而出。并且,能夠在技術和管理兩方面都能同時具備優秀品質的主程序員更不多見。
7.什么是軟件質量?
軟件質量就是軟件與明確及隱含的需求相一致的程度。
8.軟件質量保證的措施主要有哪些?
⑴ 審查:由組長、作者、2位評審員(與評審結果有利害關系的)組成審查小組,進行發現、記錄錯誤的工作,并復查返工結果。
⑵ 復查和管理復審:從技術、管理兩方面進行的復查工作。
⑶ 測試
10.簡述技術復審的必要性。
技術復審能夠較早發現軟件錯誤,防止錯誤被帶入到軟件過程的后期階段,從而大大降低后續開發和維護的成本。
11.什么是軟件能力成熟度模型?其基本思想是什么?
軟件能力成熟度模型是用于評價軟件開發機構的軟件過程能力成熟度的模型,其基本思想是,采用能力成熟度模型來幫助軟件開發機構建立一個有規律的、成熟的軟件過程,以開發出質量更好的軟件,免受時間和成本超支之苦。
12.簡述軟件能力成熟度模型的5個等級。
(1)初始級? (2)可重復級? (3)已定義級? (4)已管理級 (5)優化
總結
- 上一篇: SQL语句大全,所有的SQL都在这里 !
- 下一篇: 2015 总结 2016 展望