1. 程式人生 > >《構建之法》第一章學習

《構建之法》第一章學習

發布 工具 效果 算法和數據結構 核電 而不是 測試 特殊 use

《構建之法》第一章學習

1、軟件工程的定義

軟件工程是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。人們在開發、運營、維護軟件的過程中有很多技術、做法、習慣和思想體系。軟件工程把這些相關的技術和過程統一到一個體系中,叫“軟件開發流程”。軟件開發流程的目的是為了提高軟件開發、運營、維護的效率,並提高軟件的質量、用戶滿意度、可靠性和軟件的可維護性。

1.1軟件的特殊性

軟件是可以運行在計算機及電子設備中的指令和數據的有序集合,軟件的主要形式有:

  • 系統軟件:操作系統、設備驅動程序、工具軟件等
  • 應用軟件:用戶使用它們來完成工作,從管理核電廠到寫文章,或者是通信、遊戲、瀏覽網頁、播放視頻等
  • 惡意軟件:軟件病毒等軟件

軟件開發過程中的五點難題:復雜性;不可見性;易變性;服從性;非連續性(即輸入上很小的變化,會引起輸出上極大的變化)

1.2計算機科學和軟件工程的比較

計算機科學 軟件工程
發現和研究長期的、客觀的真理 短期的實際效果(具體的軟件會過時)
理想化 對各種因素的折衷
確定性、完美、通用性 對不確定性和風險的管理,足夠好,具體的應用
各個學科獨立深入研究,做出成果 關註和應用各個相關學科的知識,解決問題
理論的統一 百花齊放的實踐方法
形式化,追求簡明的公式 在實踐中建立起來的靈感和直覺
正確性 可靠性

2、程序 ->軟件 ->軟件企業

程序=數據結構+算法 
  • 程序,在這裏指的是源程序,就是一行行的代碼。仔細看過去,它們的確是建立在數據結構上的一些算法
  • 程序還要對數據進行操作,這些數據有些是靜態的(例如軟件的圖標、提示信息),有些是動態的(例如程序生成的隨機數字、程序通過網絡下載的數據、用戶的文字或語音輸入等)

軟件工程的核心部分是和軟件開發活動(構建管理、源代碼管理、軟件設計、軟件測試、項目管理)相關的內容。廣義上的軟件工程也包括用戶體驗、用戶界面設計(User Interface Design)等。所以,一個推論是:

軟件=程序+軟件工程

一個擴展的推論是:

軟件企業 = 軟件 + 商業模式

程序(算法、數據結構)是基本功,但是在算法和數據結構之上,軟件工程決定了軟件的質量;商業模式決定了一個軟件企業的成敗。軟件從業人員和軟件企業的道德操守會極大地影響軟件用戶的利益。

3、軟件工程三步曲

1. 研發出符合用戶需求的軟件說明

  • 要通過實際的工作收集、推導、提煉需求,並在軟件發布後通過實際數據驗證需求的確被滿足了
  • 需求來自於實際,而不是自己想象出來的“需求”或者人雲亦雲的需求(例如:圖書館管理系統)

2. 通過一定的軟件流程,在預計的時間內發布“足夠好”的軟件說明

  • 這個軟件是經歷了一定的軟件流程,通過全體團隊成員的努力,在一個時間段內逐步完成的

3. 通過數據和其他方式展現所開發的軟件是可以維護和繼續發展的說明

  • 例如,對用戶需求有詳細的分析,包括對將來這類軟件發展的趨勢的分析
  • 主要功能都有設計文檔,源代碼完整,有修改記錄,並有最後版本
  • 關鍵模塊有可以執行的單元測試、壓力測試腳本,對於已知的bug和將來的工作都有詳細的記錄

《構建之法》第一章學習