# 軟體工程 Chapter2
###### tags: `軟體工程`
## Three phase of the work associated with software engineering
- definetion phase : what?
- development phase : how?
- support phase : change associated with correction , adaptaion , enhancement , and prevention
## Framework Activites
:::success
- communication
- planning
- modeling
- analysis of requirements
- design
- construction
- code generation
- testing
- deployment
:::
## Umbrella Activities
:::success
- software project management
- formal technical reviews
- software quality assurance
- software configuration management
- document preparation and production
- reusability management
- measurement
- risk management
:::
## Types of process flow
1. linear flow

2. iterative flow

3. evolution flow

4. parallel flow

## Process Models
**Linear process model**
:::success
##### Waterfall model
- 定義 :

- 問題 :
很少有project能按照sequential flow完成,客戶也很難把所有需求表達出來
- 適合的專案類型 :
well-defined and stable requirements
##### V model
- 定義 :
為瀑布式開發的變形,每⼀階段皆會進⾏測試,以確保該階段之產物符合要求。
- 適合的專案類型 :
適用於專案需求明確、結構穩定、風險較低的專案開發項目,如: 傳統桌面軟體開發、醫療器械軟體開發等等。

:::
**Prototyping model**
:::success
- 定義 : 從poorly understood requirements開始,目標為理解整個系統的需求
- 問題 : 半成品,compromise while implementation

:::
:::info
##### Waterfall model with prototyping

:::
**Incremental model**
- 定義 :
combine elements of linear and parallel process flows,start with well-understood requirements,work with customers to evovle a final system.

- waterfall v.s. incremental
waterfall比較適合簡單的project,incremental適合複雜的。
- evolutionary v.s. incremental
一開始從部分完整功能開始,逐漸產生其他功能,最後形成一個完整系統

一開始從完整版的雛型開始,慢慢調整系統功能

**Spiral model**
- 定義 : software is developed in a series of evolutionary releases
- 問題 :
- uncertain number of cycles to construct product
- 需要專業評估風險的人(增加cost)
- problem will occur if a major risk is not uncovered and managed
- 適合的專案類型 : development of large-scale system

**Concurrent development model**
- 定義 : define a series of events that will trigger transition from state to state , used to represent iterative and concurrent elements of any process models
- 
**Specialized process model**
:::success
##### Componenet-based development model(元件式開發模型)
- 定義 : 將一些可重複使用的元件調整後加入到新的project裡面

:::
:::info
##### Formal methods model
- 定義 : apply when a mathematical specification is to be developed , ambiguity , incompleteness , and inconsistency can be discovered and corrected more easily.
- 問題 : time-consuming and expensive
:::
:::warning
##### Aspect-oriented software development(AOSD)
- Aspect : customer concerns that cut across multiple system functions , features and information
e.g.
user interface aspects
distribution aspects
persistence aspects
security aspects
transaction aspects
- 定義 : provide a process and methodological approach for defining , specifying , designing , and constructing aspects ; it usually adopts evolutionary and concurrent process model
:::
## Unified process
**phase** :
- inception : 了解客戶需求,開始初步規劃
- elaboration : 詳細、擴充規劃和use-case
- construction : 寫程式
- transition : 利用beta版本或是使用手冊測試
- production

## Personal software process(PSP)
- framework activites
- planning
- high-level design
- high-level design review
- development
- postmortem : 紀錄bug的發生原因,所有activities皆要留下紀錄
- PSP represents a disciplined , metrics-based(量化指標) approach to software engineering
## Team software process(TSP)
- 定義 : provide a defined process framework for managing , tracking and reporting the team's progress
- framework activities:
- launch
- high-level design
- implementation
- integration and test
- postmortem
## PSP , TSP , and CMMI

## The primary goal of software process
High quality = project timeliness , less work