一、軟件工程的框架
目標、過程、原則
1.目標:正確性、可用性、開銷合宜
軟件工程活動:
需求->設計->實現->確認->支持等活動
需求:問題分析:需求定義
需求分析:功能規約
設計:概要設計:整個軟件體系結構
詳細設計:程序員可用的模塊說明
實現:得到可執行的程序代碼
確認:貫穿於整個開發過程
支持:包括修改和完善
還有管理過程、支持過程、培訓過程等
2.軟件工程過程:
生產一個最終能滿足需求 且 達到工程目標 的軟件產品所需要的步驟。
開發過程、運作過程、維護過程
覆蓋需求、設計、實現、確認、支持及維護等活動
3.軟件工程的原則
圍繞工程設計、工程支持、工程管理在軟件開發過程中必須遵守的原則
1.選取適宜的開發範型
2.選取合適的設計方法
3.提供高質量的工程支持
4.重視開發過程的管理
二、開發模型
1.V模型:快速應用開發模型(RAD),開發和測試同時進行
需求分析:需求規格說明書
概要設計:搭建架構、表述各模塊功能、模塊接口、數據傳遞的實現等事務
詳細設計:達到僞代碼級別,包含數據庫設計說明
軟件編碼
單元測試:主要測試程序代碼,確保各個模塊正確編譯(具體到模塊、類、函數)
集成測試:主要測試各模塊間組合後功能實現情況,模塊接口連接是否成功、數據傳遞是否正確,主要目的是檢查軟件單元之間的接口是否正確
系統測試:按照軟件規格說明書中要求,測試功能性能是否符合需求,系統是否存在漏洞
驗收測試:用戶拿到軟件時,在使用現場按規格說明書做相應測試確定軟件達到效果
缺陷:
僅把測試過程當做編碼之後的一個階段,忽視了對需求分析、系統設計的驗證,需求的滿足情況到後期驗收測試才被驗證
解決思路:測試在軟件做需求分析時就有測試用例的跟蹤
適用範圍:
適用於一些傳統信息系統應用的開發,
而高風險高性能的系統、互聯網軟件或者難以具體模塊化的系統不適用,需要更強調迭代的開發模型或敏捷開發模型
2.瀑布模型:
階段間具有順序性和依賴性:
前一階段完成後一階段才能開始
前一階段輸出文本爲後一階段的輸入文本
推遲實現的觀點
質量保證:每個階段必須交付合格的文檔;對文檔進行審覈
缺點:開始時必須把需求做到最全,懼怕用戶測試中的反饋和需求變更
三、軟件生命週期(SDLC)
軟件的產生直到報廢的生命週期
1.瀑布型生命週期:
包括可行性分析與開發項計劃、需求分析、設計(概要和詳細)、編碼、測試、維護等階段
典型六階段:
1.問題的定義及規劃:主要確定軟件的開發目標及其可行性
2.需求分析:在確定軟件開發可行的情況下,對軟件需要實現的各個功能進行詳細分析。必須制定需求變更計劃來應對變化
3.軟件設計:主要根據需求分析的結果,對整個軟件系統進行設計,如系統框架設計、數據庫設計等
4.程序編碼:將軟件設計的結果轉換成計算機可運行的程序代碼。
5.軟件測試:整個測試過程分爲單元測試、組裝測試、系統測試三階段;測試方法有白盒測試、黑盒測試兩種;應建立詳細測試計劃並按計劃進行測試
6.運行維護:持續時間最長的階段,包括糾錯性維護和改進型維護兩個方面
四、敏捷開發
以用戶的需求進化爲核心,採用迭代、循序漸進的方法進行軟件開發。軟件項目在構建初期被切分爲多個子項目,並分別完成。此過程中軟件一直處於可使用狀態
宣言原則:
1.最重要,儘早、不斷交付有價值的軟件滿足客戶需求
2.能過駕馭變化,保持客戶競爭優勢
3.經常交付可以工作的軟件
4.業務人員與開發者朝夕相處
5.給開發者提供適宜的環境滿足他們的需要
6.相信開發者能夠完成任務
7.開發小組最有效率的信息傳達方式是面對面交流
8.可以工作的軟件是主要度量尺度
9.提倡可持續開發,各方應維持不變的節奏
10.對卓越技術與良好設計的不斷追求有助於提高敏捷性
11.儘可能減少工作量的藝術至關重要
12.最好的架構、需求和設計都源自於自我組織的團隊
13.每隔一段時間都要進行總結
五、高內聚低耦合
1.定義
內聚:描述模塊內的功能聯繫,一個好的內聚模塊應當恰好做一件事
耦合:描述軟件結構中各模塊之間相互聯繫的關係,耦合強弱取決於模塊間接口的複雜程度、進入或訪問一個模塊的點以及通過接口的數據
2.概念
耦合性(塊間聯繫):模塊間的聯繫越緊密,其耦合性越強,模塊間相互獨立性越差。模塊間相互獨立性取決於模塊間接口的複雜性、調用的方式及傳遞的信息
內聚性(塊內聯繫):模塊功能強度的度量,模塊內部各個元素彼此結合的緊密程度。模塊內各元素聯繫越緊密,內聚性越高。
高內聚:單一責任原則,一個模塊由相關性很強的代碼組成,只負責一項任務
低耦合:一個完整的系統,模塊與模塊之間儘可能的獨立存在
3.分類:
a.內容耦合:一個模塊直接訪問另個模塊的內容
b.公共耦合:一組模塊都訪問同一個全局數據結構
較鬆散的:模塊只是向公共數據環境輸入或取出數據
較緊密的:既輸入,又取出
c.外部耦合:一組模塊都訪問同一全局簡單變量,而不通過參數列表傳遞
d.控制耦合:模塊之間傳遞的不是數據信息而是控制信息,如標誌、開關量等
e.標記耦合:調用模塊和被調用模塊之間傳遞數據結構而不是簡單數據,又稱特徵耦合。參數名爲標記,實際傳遞的地址
f.數據耦合:調用模塊和被調用模塊之間只傳遞簡單的數據項參數。相當於高級語言中的值傳遞
g.非直接耦合:兩個模塊之間沒有直接關係,他們之間的聯繫完全是通過主模塊的控制和調用實現。耦合度最低
*設計原則:若模塊間必須存在耦合,應儘量使用數據耦合,少用控制耦合,慎用公共耦合並限制公共耦合的範圍,儘量避免內容耦合
內聚度由弱到強:
a.偶然內聚:一個模塊間各處理元素之間沒有任何聯繫,只是偶然被湊到一起,又稱巧合內聚
b.邏輯內聚:把幾種相關的功能組合在一起,每次被調用時,由參數決定該模塊完成哪種功能
c.時間內聚:需要同時執行的動作組合到一起形成的模塊
d.過程內聚:模塊內處理元素是相關的,且必須按特定次序執行
e.通信內聚:模塊內各個組成部分都是用相同的數據結構或者產生相同的數據結構
f.順序內聚:模塊內前一個處理元素的輸出是後一個處理元素的輸入
g.功能內聚:模塊內各個組成部分全部都爲完成同一個功能而存在,共同完成一個單一的功能,模塊不可再分。
*模塊劃分原則:一個模塊一個功能