SE(軟件工程)
軟件工程的概念在導論這門課介紹的比較清楚。這個地方,我們回想這幾個概念,有個自己的理解就好:
- 理解軟件工程
- 爲什麼學軟工?
- 軟工的知識體系
- 若干重要概念
- 軟工的演變與趨勢
OOAD
幾個課外的概念
- software crisis:
- is a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time
- Constructive Cost Model(COCOMO):
- an algorithmic software cost estimation model developed by Barry W. Boehm. The model uses a basic regression formula with parameters that are derived from historical project data and current as well as future project characteristics.
- 必須要了解software engineering body of knowledge中本課涉及的KA(knowledge areas)
- software requirements, software design, software construction,software development process, software engineering models and methods
- 必須瞭解三種開發生命週期的特點
- Waterfall development: 試圖在編程之前詳細定義所有或大部分需求
- 優勢1: 定義了軟件開發基本流程,創意階段描述問題、市場、關鍵技術等,分析階段調查問題與需求
- 劣勢1: 人力資源問題,知識技能需求不同,人員數量要求不同
- 劣勢2: 容錯問題能力,再後期發現需求問題,工作量難接受
- 劣勢3: 前後依賴問題,前面需求模糊,後面工作無法開展
- Iterative and incremental developmen:允許在不完整的工作、不完美的知識儲備下開始
- 優勢1: 逐步趨向穩定
- 優勢2: 有效管理需求變化
- 優勢3: 持續集成
- 優勢4: 儘早接觸整個系統
- 優勢5: 在線風險評估
- Agile development:
- 軟件企業的評價指標Capabilty Maturity Model Integration(CMMI)中的5個等級
- Initial: 無序,自發生產模式
- Managed: 建立了基本的項目管理,制定了必要的過程紀律
- Defined:將軟件管理和工程過程文檔化、標準化
- Quantitatively Managed: 定量理解與控制, 定量預測性能
- Optimizing:工程量化反饋,不斷改進
書本基本概念
- Analysis:
- 對問題和需求的調查, 在問題域中發現關鍵的概念類, “概念”
- Design
- 滿足需求的概念上的一個解決方案,將概念類映射到軟件類,在問題域外發現實現所需要的類設計框架等, “協作”
UML, 一種可視化語言
- 三種應用UML的方式:
- 草圖:普通的使用方式, agile modeling 強調的
- 藍圖:逆向工程-根據源碼生成UML類圖、包圖, 前向工程-根據UML圖生成源碼
- 編程語言: 自動生成可執行代碼
- 三種應用UML的perspective
- conceptual perspective:描述現實世界
- Specification perspective(少用): 描述軟件中的實現,但是不說明技術
- implementation perspective: 特定技術(如C++)中的軟件實現
- 不同perspective 中的類的概念
- conceptual class: 真實世界中的概念
- software class:過程或方法中,表示軟件實現的類
- implementation class: 特定語言中的類
Iterative, evolutionary, and agile
Unified Process
- UP
- the process is scalable, effective, improves productivity, Iterative and incremental approach 允許從不完整的工作和不完備的知識開始
- UP workflow:定義了一系列要執行的活動:
- Business Modeling:定義問題等,建立用力模型
- Requirements Analysis: 定義領域模型等
- Design: 建立設計模型,設計用例在物理上的實現
- Implementation: 編碼
- Test and Integration
- Use Case Driven
- 意味着團隊從編程和測試中收集發現的需求,應用use case
- Architecture Centric
- 軟件系統的整體結構、結構元素、結構元素之間的協作
Iterative and Evolutionary
- Agile Methods and Attitude
- 優先級最高的是,通過早期和持續交付有價值的軟件來滿足客戶
- 歡迎變更需求,即使在開發後期
- 等等等等
- Agile Modeling
- 採用敏捷方法不是意味着不建模
- 建模的目的主要是爲了理解和溝通,不是爲了交文檔
- 不要對所有軟件都建模
- 所有模型都可能不準確,最終代碼和設計會與模型有差異
- Worker參與系統的開發,Actor是使用系統的人,
- stakeholder包括了workers和actors
- Artifacts(製品),包括用例模型、領域模型、源碼等等
- Activities 表示的是工作流中要完成的任務,包括:迭代計劃、找到用例和actors、執行迭代測試