軟體工程 第一章 軟體和軟體工程
軟體的定義
- computer:有硬體與軟體組成
- 硬體:看得見摸得著的電子機械裝置塊
- 軟體:依附在硬體上面的程式,資料和檔案的結合,是指揮計算機工作的神經中樞.
第一階段:軟體:=程式(彈道計算) input:紙帶 output:紙帶
第二階段:軟體:=程式+資料
第三階段:軟體:=程式+資料+文件
第四階段:軟體:=程式+資料+文件+人工智慧
越早開始寫程式碼的人,就是越遲寫程式碼的人
文件的作用
文件=使用者文件+開發文件+測試文件
文件:起到橋樑作用
- 使用者文件
- 使用者手冊
- 操作手冊
- 維護修改建議報告
- 軟體需求規格說明書
- 開發文件
- 軟體需求規格說明書
- 資料說明數
- 詳細設計說明書
- 可行性研究報告
- 專案開發計劃
- 管理文件
- 專案開發計劃
- 測試計劃
- 測試報告
軟體的特性:
- 軟體是設計開發的,不是傳統意義上生產製造的.
- 軟體不會磨損.
- 大多數軟體根據實際顧客需求定製.
軟體互動週期:5~10年
環境,場景->變更
軟體的應用領域
- 系統軟體
- 應用軟體
- 工程/科學軟體(數值水池)
- 嵌入式軟體
- 產品線軟體
- web/移動app
- 人工智慧軟體
軟體變更的原因:
- 軟體需要進行適應性調整
- 軟體必須升級以實現新的商業需求
- 軟體必須擴充套件以具有與OS,DB協同工作的能力
- 軟體體系結構必須進行改建以使之使用不斷演化的計算環境
webApps的特性:
- 網路密集型
- 併發性
- 無法預知的負載量
- 效能:能夠快速響應
- 可用性:全天候訪問
- 資料驅動
- 內容敏感性
- 持續演化
- 即時性
- 安全性
- 美觀性
軟體工程的由來
軟體危機:計算機軟體的開發和維護過程所遇到的一系列嚴重問題.
軟體危機的主要表現:
- 開發成本超出預算
- 使用者對系統不滿意
- 軟體產品指令較差
- 軟體的可維護成都非常之低
- 軟體通常沒有適當的文件資料
- 軟體的成本不斷提高
- 軟體開發生產率的提高趕不上硬體的發展
軟體系統的複雜性不斷增長,複雜性成為系統設計和開發最大的障礙.
軟體工程定義的提出:
- 種子定義(Fritz Bauer)
- IEEE定義
將工程化(系統化,規範化,可量化)的方法全過程(開發,執行,維護)地應用於軟體.
軟體工程三要素:過程層(process),方法層(method),工具層(tool),[質量關注點(a quality focus)]
軟體過程:工作產品構建時所執行的一系列活動,動作和任務的集合.
活動(activity):主要實現寬泛的目標.
動作(action):包括主要產品生產過程的一系列任務.
任務(task):關注小而明確的目標,能夠產生實際產品.
過程框架(process framework):
- 工作任務
- 工作產品
- 里程碑和可交付成果
- QA檢查點
普適性活動(umbrella activity)
框架包含的活動:
- 溝通:與利益相關者溝通需求.
- 策劃:建立軟體專案計劃,進行可行性分析.
- 建模:橫跨軟體需求與設計.為需求與設計提供相關的模型.
- 需求分析
- 設計:舉例功能流程圖,業務流程(文字與模型).
- 構建:對所做設計進行設計,包括編碼與測試.
- 程式碼生成
- 測試
- 部署:根據實際生產情景進行部署.
Polya的建議:
- 理解問題(溝通和分析)
- 誰從問題的解決中獲益?
- 什麼是未知的?
- 問題可以劃分嗎?
- 問題可以圖形化描述嗎?
- 計劃解決方案(建模和軟體設計)
- 以前曾經見過類似問題嗎?
- 類似問題是否解決過?
- 可以定義子問題嗎?
- 能用一種可以很快實現的方式來表達解決方案嗎?
- 實施計劃(程式碼生成)
- 解決方案與計劃一致嗎?
- 解決方案的每個組成部分是否可以證明正確?
- 檢查結果的準確性(測試和質量保證)
- 能否測試解決方案的每個部分?
- 解決方案是否產生了與所要求資料,功能和特性一致的結果?
Hooker的原則:
- 存在價值
- 保持簡潔
- 保持願景
- 關注使用者
- 面向未來
- 提前計劃複用
- 認真思考
NumericalTank