###### tags: `Agile`
# Agile 專案流程類型、敏捷開發基本概念
## 專案流程類型
### 專案開發方法
瀑布式開發:步驟固定,時程嚴謹
敏捷式開發:適合因應需求更改,循環週期短
---
### 專案開發順序
1. 排序型
>當專案的<font color="red">需求、⽬標、範圍及執⾏⽅式可以被清楚定義及規劃</font>,<font color="red">適合技術成熟、作業標準化普及</font>。排序型也被稱為<font color="red">流瀑式流程(waterfallprocess)</font>。
2. 重疊型
>專案<font color="red">適合需要縮短時程</font>,透過前後階段的重疊來節省時程。
3. 重複型
> <font color="red">適合經常改變、⾵險⾼的新產品/技術研發專案</font>。重複型也被稱為<font color="red">敏捷式開發(agile development)</font>,強調機動性開發。
---
## 敏捷開發基本概念
### 什麼是敏捷開發(Agile)
敏捷開發是⼀種以⼈為中⼼的開發⽅式。在敏捷開發過程,會將專案分成⼤⼩不⼀的⼩項⽬,每個小項目都可以獨⽴運作及測試,因此過程中<font color="red">軟體會⼀直處於可使⽤狀態。</font>
---
### 敏捷宣⾔ The Agile Manifesto
```
1. 個⼈與互動重於流程與⼯具 (Individuals and interactions over processes and tools)
2. 可⽤的軟體重於詳盡的⽂件(Working software over comprehensive documentation)
3. 與顧客合作重於顧客談判(Customer collaboration over contract negotiation)
4. 因應變化重於遵循計劃(Responding to change over following a plan)
```
---
### 敏捷原則 The Agile Principles
* 最為<font color="red">優先</font>的事情是透過早期與<font color="red">持續交付有價值的軟體</font>來使客戶滿意。
* <font color="red">歡迎需求的變動</font>,即使是在開發的晚期。敏捷式流程駕馭變動來作為客戶的競爭優勢。
* 頻繁的交付⼯作產⽣的軟體,⾃數週⾄數⽉,<font color="red">週期越短越好</font>。
* 領域專家與開發成員必須⼀同作業,並貫穿整個專案開發時期。
* <font color="red">使⽤積極的⼯作成員來建構專案</font>,給予他們環境及⽀援所需的⼀切,信任他們能夠完成⼯作。
* 在開發團隊中最快也<font color="red">最有效的傳遞資訊</font>⽅法就是<font color="red">⾯對⾯的溝通</font>。
* ⼯作產⽣的軟體是衡量進度最主要的依據。
* 敏捷式流程倡導⽔平⼀致的軟體開發
* 專案發起者,開發⼈員以及使⽤者都必須持續的維持專案進度。
* <font color="red">持續重視技術的優勢及設計品質</font>
* 最好的架構、需求以及設計會出現在能夠⾃我管理的團隊裡
* 在規律的反覆之間,團隊會反省與思考如何更有效率,然後相對的來調整與修正團隊的開發⽅式
---
### 敏捷式開發框架們
* Kanban : 將故事拆分為單位較⼩的任務(task),並限制同⼀時間執⾏的任務數量
* XP : 極限編程(Extreme programming)即時回饋、雙⼈編程、程式碼共有
* Scrum : 將故事拆分為單位較⼩的任務,並以衝刺(sprint)為時間週期,將每個任務安排在不同週期內去執⾏
#### 開發常見用語
故事 : 將系統分為⼀個個故事(功能)來當估算單位
雙⼈編程 : 兩⼈共同編寫⼀分程式碼,並隨時交換測試、撰寫程式碼的⼯作。
迭代(Sprint) : 通常為期2~4周,在⼀個周期內做同樣的事情: 規劃、設計、寫程式,測試,並且周期結束後都會有成品供測試。
發布規劃 : 以團隊過去的迭代經驗來估算最終產品完成⽇期(或計畫)
---
#### Scrum架構
| 角色 | 會議 | 產出 |
| --- | ---- |---- |
| 產品負責人|衝刺計畫會議 | 任務|
| Scrum Master|Standup Meeting| 使⽤者故事|
| 開發⼈員團隊|回顧會議 | Prototype|
#### Scrum角⾊
產品負責人 : 類似客戶代表、站在客戶/需求⽅的⽴場,去設定產品的待辦項⽬及優先程度,並負責向團隊說明客戶的需求。
Scrum Master : Scrum Master必須熟知整個Scrum敏捷開發流程,以便能夠督促產品負責⼈和團隊的運作。
開發⼈員團隊 : 通常是產品實做者,可能是分析師、測試員、架構師、設計師、⼯程師等等。
#### Scrum會議
衝刺計畫會議 : ⽤來決定該衝刺期間的待辦項⽬,以及團隊的衝刺任務
Standup Meeting : 每位成員報告昨天完成的項⽬、今天預計做的⼯作、執⾏專案遇到的問題
回顧會議 : 檢討上個週期的成果制定下個階段⽬標
---
## Design Thinking
### 設計思考
同理⼼(Empathize) : 觀察、提問
定義問題(Define) : 使⽤者需要___,因為對他來說___很重要
創意發想(Ideate) : 要得到好的點⼦,⾸先要獲得很多點⼦
建⽴原型(Prototype) : 以低時間/金錢成本製作
測試(Test) : 不引導測試者