《软件工程》 课后思考题
第一章 軟件工程概述
1. 結合你之前的工程經驗以及任正非致員工信,談談你對軟件工程的看法。
隨著科技的發展,軟件開發的需求量以及開發規模都在不斷地增大,規模越大的軟件工程,各方面需要考慮的問題就越多,所耗費的人力物力就越大。我認為軟件工程的作用就是運用一系列科學的方法,在滿足各方面需求并保證軟件效率的前提下,統籌管理好開發過程的每一步,以最少的人力物力耗費來實現期望的目標。
2.軟件開發就是編碼么?談談你對軟件開發的本質的認識。
編碼是軟件開發的一部分,也是程序員們的工作。我認為軟件開發的過程中除了編碼以外,更重要的是開發人員和客戶的一個不斷地交流,隨著開發過程的進行,客戶的需求也許會發生變化,弄清楚了為什么要寫代碼,要寫怎樣的代碼,實現怎樣的功能,才能夠更好地實現預期的目標。
3.舉例說明軟件的特點有哪些?
4.什么是軟件危機?軟件危機出現的原因及解決手段有哪些?
軟件危機是指落后的軟件生產方式無法滿足迅速增長的計算機軟件需求,從而導致軟件開發與維護過程中出現一系列嚴重問題的現象。
出現軟件危機的原因主要有:
解決手段:
??在軟件工程理論的指導下,建立起較為完備的軟件工業化生產體系,形成強大的軟件生產能力 。軟件標準化與可重用性得到了工業界的高度重視,在避免重用勞動,可以緩解軟件危機。
5.軟件工程的要素有哪些,各有什么作用?
軟件工程的三種基本要素是方法、工具和過程。
第三章 軟件過程模型
1.簡述軟件過程、軟件生存周期、軟件過程模型(軟件生存周期模型)三者之間的概念區別。
2.軟件過程就是軟件開發過程么?為什么?
不是,軟件過程是指軟件整個生命周期,從需求獲取、需求分析、設計、實現、測試、發布和維護一個過程模型。一個軟件過程定義了軟件開發中采用的方法,但軟件過程還包含該過程中應用的技術——技術方法和自動化工具。
3.請選擇兩個常見的軟件過程模型,談談你對他們的理解?并進行比較
瀑布模型的優點:
- 有利于大型軟件開發過程中人員的組織、管理。
- 有利于軟件開發方法和工具的研究,從而提高了大型軟件項目開發的質量和效率。
瀑布模型的缺點:
- 開發過程一般不能逆轉,否則代價太大;
- 實際的項目開發很難嚴格按該模型進行;
- 客戶往往很難清楚地給出所有的需求,而該模型卻要求如此。
- 軟件的實際情況必須到項目開發的后期客戶才能看到,這要求客戶有足夠的耐心。
瀑布模型的使用范圍:
- 用戶的需求非常清楚全面,且在開發過程中沒有或很少變化;
- 開發人員對軟件的應用領域很熟悉;
- 用戶的使用環境非常穩定;
- 開發工作對用戶參與的要求很低。
增量模型的優點:
- 采用增量模型的優點是人員分配靈活,剛開始不用投入大量人力資源;
- 如果核心產品很受歡迎,則可增加人力實現下一個增量;
- 可先發布部分功能給客戶,對客戶起到鎮靜劑的作用。
增量模型的缺點:
- 并行開發構件有可能遇到不能集成的風險,軟件必須具備開放式的體系結構;
- 增量模型的靈活性可以使其適應這種變化的能力大大優于瀑布模型和快速原型模型,但也很容易退化為邊做邊改模型,從而是軟件過程的控制失去整體性。
增量模型的使用范圍:
- 進行已有產品升級或新版本開發,增量模型是非常適合的;
- 對完成期限嚴格要求的產品,可以使用增量模型;
- 對所開發的領域比較熟悉而且已有原型系統,增量模型也是非常適合的。
4.根據你當前所在的團隊項目,你更傾向于選擇哪一種軟件過程模型?為什么?
瀑布模型,項目規模比較小,項目的需求也比較清晰,開發過程對用戶的依賴較小。
第五章 軟件需求分析
1.需求分析的目的是什么,有什么作用?
需求分析的目的:是要求開發人員準確地理解用戶需要什么,進行細致地調查分析,將用戶的需陳述轉化為完整的需求定義,再由需求定義轉化為相應的軟件需求規格說明。
需求分析的作用:通過需求分析,可以使開發人員深入細致地調研和分析項目,準確理解用戶對項目的功能、性能、可靠性等具體要求,從而確定軟件開發的方向而少走彎路。
2.需求分析有哪些分類,請舉例說明?
- 業務需求:業務需求就是系統目標,它必須是業務導向、可度量、合理、可行的。業務需求描述了組織為什么要開發一個系統,即組織希望達到的一個什么樣的目標。通常來自項目投資人、購買產品的客戶、實際用戶的管理者、市場營銷部分或產品策劃部門,比如房地產市場的開發商。
- 用戶需求:用戶要求系統必須實現的功能,從產品使用者的用戶角度考慮,比如買房的人。
- 功能需求:開發人員必須在產品中實現的軟件功能,用戶使用這些功能來滿足業務需求。比如房子
- 非功能需求:非功能需求主要與系統的總體特征有關,是一些限制性要求,是對實際使用環境所做的要求。如一個網站完全加載出來的時間必須在1s中之內。
3.需求分析過程有哪些步驟?
4.需求獲取方法有哪些?
- 會談技術:分為非正式會談和正式會談,提出一些可自由回答的問題和事先準備好的議題,從不同的角度,與不同的角色進行會談,以了解不同用戶的需求。
- 調查技術:通過非正式會談、調查問卷等調查方式來獲取用戶需求,注意檢驗調查結果的可信度。
- 場景分析技術:分析用戶和軟件系統交互的過程,捕獲這些場景的細節。
- 快速原型法:快速建立軟件原型的核心是用交互的、快速建立起來的原型取代了形式的、僵硬的(不易修改的)規格說明,用戶通過在計算機上實際運行和試用原型而向開發者提供真實的反饋意見。
第六章 結構化分析
1.結構化分析的特點是什么?
- 采用自頂向下、逐層分解的方法求解復雜問題。
- 方法簡單、清晰,易于學習掌握和使用。
- 結構化分析的實施步驟是先分析當前環境中已存在的人工系統,在此基礎上再構思即將開發的目標系統,這符合人們認識世界改造世界的一般規律,從而大大降低了問題的復雜程度。
- 結構化分析采用了圖形描述方式,用數據流圖為即將開發的系統描述了一個可見的模型,也為相同的審查和評價提供了有力的條件,才上到下把大問題分解成若干個小問題,然后分別解決問題。
2.數據流圖的建模元素有哪些?如何構建數據流圖?有哪些注意事項?
2.1 數據流圖有以下幾種主要元素:
- 數據流:數據流是數據在系統內傳播的路徑,因此由一組成分固定的數據組成。如訂票單由旅客姓名、年齡、單位、身份證號、日期、目的地等數據項組成。由于數據流是流動中的數據,所以必須有流向,除了與數據存儲之間的數據流不用命名外,數據流應該用名詞或名詞短語命名。
- 數據源或宿(“宿”表示數據的終點):代表系統之外的實體,可以是人、物或其他軟件系統。
- 對數據的加工(處理):加工是對數據進行處理的單元,它接收一定的數據輸入,對其進行處理,并產生輸出。
- 數據存儲:表示信息的靜態存儲,可以代表文件、文件的一部分、數據庫的元素等。
2.2 構建數據流圖的步驟
2.3 注意事項
3.數據字典有哪些要素(條目)定義?
- 數據流條目:通常列出該數據流的各組成數據項
- 數據項條目:數據流的組成成員是數據項,數據項條目是不可再分解的數據單位。
- 數據存儲條目:與數據流條目一樣。對存儲數據的定義用數據存儲條目。
- 加工處理條目:通常采用輸入——處理——輸出(IPO,Input-Progress-Output)視圖描述。
第七章 軟件設計
1.軟件設計的目標及主要任務有哪些?
軟件設計的目標:軟件系統設計是把軟件需求“變換”為用于構造軟件的藍圖,“輸入”是需求分析各種模型元素,“輸出”是軟件設計模型和表示,軟件設計階段的基本目標是構造系統“怎么做”的模型描述 ,“設計先于編碼”,這是軟件工程“推遲實現”的基本原則。
主要任務:主要有以下幾類設計活動
- 總體設計:也稱為概要設計,軟件結構設計,或高層設計。
- 體系結構設計:定義軟件模塊(構件)及模塊之間的關系。
- 接口設計:包括用戶接口(界面),外部接口,內部接口。
- 數據設計:軟件涉及的數據結構,文件系統結構,數據庫的表結構等。
- 軟件詳細設計:也稱為模塊過程設計,或低層設計。
- 模塊內部細節設計:包括模塊所需的算法和數據結構等。
2.什么是模塊(構件)化設計思想
- 模塊是一個獨立命名的,擁有明確定義的輸入、輸出和特性的程序實體。
- 把一個大型軟件系統的全部功能,按照一定的原則合理地劃分為若干個模塊,每個模塊完成一個特定的子功能,所有的這些模塊以某種結構形式組成一個整體,這就是軟件的模塊化設計。
- 軟件模塊化設計可以簡化軟件的設計和實現,提高軟件的可理解性和可測試性,并使軟件更容易得到維護。
- 分解、抽象、逐步求精、信息隱蔽和模塊獨立性,是軟件模塊化設計的指導思想。
3.模塊獨立性的兩個度量標準是什么?
模塊獨立性愈高,則塊內聯系越強,塊間聯系越弱,即高內聚,低耦合。
4.內聚和耦合的含義是什么?各有哪些種類?請舉例說明每一類型。
內聚的含義:內聚性是從功能的角度對模塊內部聚合能力的量度。高內聚是模塊獨立性追求的目標。
內聚的種類(從上到下內聚性依次減弱):
1.功能性內聚:模塊各個成分結合在一起,完成一個特定的功能,功能性模塊具有內聚性最強,與其它模塊聯系少的特點。例如:解析XML文檔模塊(解析XML元素,解析XML屬性,解析XML注釋等)。
2.順序性內聚:模塊內的各個任務是順序執行的。通常,上一個任務的輸出是下一個任務的輸入。例如:規則引擎:一個任務讀配置,輸出執行計劃,另一個任務以執行計劃為輸入,執行該計劃。
3.通信性內聚:模塊內部的各個任務靠公用數據聯系在一起,即都使用同一個輸入數據,或者產生同一個輸出數據。例如:學生管理系統的數據庫CRUD操作,都對學生信息進行增刪改查操作。
4.過程性內聚:模塊內個各個任務必須按照某一特定次序執行。例如:讀/寫文件操作:判斷文件是否存在,判斷文件是否有相應權限,打開文件,讀,寫文件。
5.時間性內聚:模塊內的各個子任務由相同的執行時間聯系在一起。例如:初始化模塊,異常處理模塊,某個異常處理模塊封裝了“釋放資源”,“記錄日志”,“通知用戶”等幾個任務。
6.邏輯性內聚:模塊通常由若干個邏輯功能相似的任務組成,通過模塊外引入的一個開關量選擇其一執行。這種內聚增大了模塊間的耦合。例如:一個輸出設備模塊將打印機類和顯示器類封裝到同一個包里,該包即輸出設備模塊。打印機類和顯示器類雖然都具有輸出功能,但是具有不同的職責。
7.偶然性內聚:模塊內的各個任務在功能上沒有實質性聯系,純屬“偶然”因素組合子塊內各個互不相關的任務。例如:一個處理正方形的模塊有兩個功能,計算面積,畫出這個正方形。
內聚性總結:在軟件設計中,應力求做到高內聚、盡量少用中內聚,不用低內聚。一般來說,在系統較高層次上的模塊功能復雜,內聚要低一些;而較低層次上的模塊內聚程度較高,達到功能內聚的可能性比較大。
耦合的含義:耦合性是對一個軟件結構內不同模塊之間的互連程度的度量。耦合性的強弱取決于模塊間接口的復雜程度,以及通過接口的數據類型和數目。弱耦合是模塊獨立性追求的目標。
耦合的種類(從上到下耦合性依次增強):
1.非直接耦合:同級模塊相互之間沒有信息傳遞,即沒有耦合。非常底層的模塊,自給自足,可以無耦合。較高層的模塊,通常需要重用其他模塊的功能,產生耦合。
2.數據耦合:調用下屬模塊時,如果交換的都是簡單變量,便構成數據耦合。
3.特征耦合(數據結構耦合):調用下屬模塊時,如果交換的是數據結構,便構成數據特性耦合。由于傳遞的是數據結構,不僅數據量增加,而且會使模塊的相關性增加。
4.控制耦合:模塊間傳遞的信息不是一般的數據,而是作為控制信息的開關值或標志量。
5.外部耦合:若允許一組模塊訪問同一個全局變量,可稱他們為外部耦合。
6.公共耦合:若允許一組模塊訪問同一個全局性的數據結構,則稱他們為公共耦合。全局性的數據結構可以是共享的通信區,公共的內存區域,任何存儲介質文件,物理設備等。
7.內容耦合:若一個模塊可以直接訪問為另一個模塊中的內部數據,或者一個模塊直接轉到另一個模塊的內部,或者一個模塊有多個入口,則稱為內容耦合。
耦合性總結:耦合是影響模塊結構和軟件復雜程度的一個重要因素,應該遵循如下的設計原則:盡量使用數據耦合,少用控制耦合,限制公共耦合,完全不用內容耦合。
5.為什么要高內聚低耦合?高內聚低耦合是否意味著內聚越高越好,耦合越低越好?
高內聚,低耦合的好處體現在系統持續發展的過程中,高內聚,低耦合的系統具有更好的重用性,維護性,擴展性,可以更高效的完成系統的維護開發,持續的支持業務的發展,而不會成為業務發展的障礙。
1.并不是內聚越高越好,耦合越低越好,真正好的設計是在高內聚和低耦合間進行平衡,也就是說高內聚和低耦合是沖突的。
2.最強的內聚莫過于一個類只寫一個函數,這樣內聚性絕對是最高的。但這會帶來一個明顯的問題:類的數量急劇增多,這樣就導致了其它類的耦合特別多,于是整個設計就變成了“高內聚高耦合”了。由于高耦合,整個系統變動同樣非常頻繁。
3.對于耦合來說,最弱的耦合是一個類將所有的函數都包含了,這樣類完全不依賴其它類,耦合性是最低的。但這樣會帶來一個明顯的問題:內聚性很低,于是整個設計就變成了“低耦合低內聚”了。由于低內聚,整個類的變動同樣非常頻繁。
4.真正做到高內聚、低耦合是很難的,很多時候未必一定要這樣,更多的時候“最適合”的才是最好的,不過、審時度勢、融會貫通、人盡其才、物盡其用,才是設計的王道。
第八章 結構化設計
1. 軟件結構圖的形態特征有哪些指標?各有什么含義?
深度:指結構圖控制的層次,即模塊的層數。
寬度:指一層中最大的模塊個數。
扇出:指一個模塊直接下屬模塊的個數。
扇入:指一個模塊直接上屬模塊的個數。
2. 軟件結構有哪些優化原則?
3. 數據流模型的類型有哪些?各有什么特點?
4. 簡述面向數據流的變換以及事務設計方法的步驟。
變換設計方法
事務設計方法
5. 結構化詳細設計工具有哪幾種?各有什么特點?
圖形工具:把過程的細節表示成一個圖的組成部分,在這個圖上,邏輯構造用具體的圖形來表示。
流程圖、盒圖、PAD圖
列表工具:用一個表來表示過程的細節,這個表列出了各種操作及其相應的條件,即描述了輸入、處理和輸出信息。
判定表、判定樹
語言工具:用偽代碼來表示過程的細節,這種偽代碼很接近于編程語言。
PDL語言
第十一章 面向對象設計
1. 面向對象的分析與設計方法與結構化的分析設計方法有什么不同?
2. 面向對象的分析與設計之間有什么樣的聯系?
面向對象分析的輸入是用戶的功能需求,輸出是簡單的、理性化的分析模型,此階段的工作更多側重于如何了理解軟件的功能需求。
面向對象設計的輸入是面向對象分析的結果,輸出最終的細化后的設計模型,此階段的工作更多側重于如何得到一個合適的、完整的解決方案。
主要區別:
參考書籍:《軟件工程方法與實踐》 竇萬峰
總結
以上是生活随笔為你收集整理的《软件工程》 课后思考题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3174):react-hel
- 下一篇: 安卓地图的实现附源码