---
# System prepended metadata

title: 軟體工程 CH3

---

# 軟體工程 CH3

> 第一次用這個寫筆記，醜醜就醜醜

### Agile Manifesto (敏捷宣言)

- Individuals and interactions over processes and tools 
`每個人之間的互動＞選擇的工具及流程`
- Working software over comprehensive documentation
`可用軟體＞複雜文檔`
- Customer collaboration over contract negotiation
`與客戶的溝通＞合約的協商` 
- Responding to change over following a plan 
`應對變化＞遵循計畫`

### Characteristic of an Agile Process (敏捷開發之特點)

- Adaptable
`適應性強`
- Responsive
`反應靈敏`
- Incremental 
`短時間內產量逐漸增加`

### XP : Extreme Programming (極限編程)

- 敏捷開發的其中一種模型
- 使用物件導向
- 四種行為 : 
    1. **XP Planning** 
        - 從創建 user story 開始
        ~~`還是沒搞懂story到底是指三小，我猜就是程式的每一個段落吧`~~
        - 團隊評估每個story後分配所需成本
        - story 會被分為群組，以達到 **deliverable increment**
        `deliverable increment: story 可一步一步被實現並送出，不須等到全部完成後才能使用`
        - 須訂出完成日期
        - 第一個 increment 完成後，根據 **project velocity** 來訂出其他 increment 的期限
        `project velocity: 第一次 release 時 story 達成的數量`
    2. **XP Design**
        - Follows the **KIS (keep it simple)** principle
        `白話到靠北，所以不打中文`
        - Encourage the use of **CRC (Class-Responsibility Collaborator) cards**
        `詳見第八章，所以先略`
        - 在設計上遇到障礙，建議使用 **spike solutions**
        `spike solution: 我猜表示強而有力的解法，但這樣很像廢話所以我不知道`
        - 鼓勵 **refactoring**
        `refactoring: 程式的重建，類似打掉重做的概念，可保持程式的整潔`
    3. **XP Coding**
        - 建議在開始之前都先進行story的單元測試
        `簡單來說就是前面都確認OK之後再進行下一步`
        - 鼓勵 **pair programming**
        `pair programming: 一人撰寫，一人檢查，同時可提出問題或規劃下一步`
    4. **XP Testing**
        - 全部的 unit test 應該被自動化的框架完成
        - 鼓勵 regression test
        `regression test: 回鍋測試，回去run前面的code，一天一測試，bug遠離我`
        - Acceptance tests 由客戶定義，使其能直接看見所有功能
![](https://i.imgur.com/bBiXw0g.png)
### Scrum


- 敏捷開發的其中一種模型
- 三種主要角色
    1. **Product owner**
    2. **Scrum master**
    3. **Development team**
- 開發工作會被分成許多 packet
- 測試和內容是隨著產品開發而進行的
- Work occurs in “**sprints**” and is derived from a “**backlog**” of existing requirements
~~這段真的靠北難翻~~
```
sprint: 類似於週期，通常為1~4週，先決定好工作量後進行短期衝刺以達成目標
backlog: 產品需求清單，依據優先度列出
```
![](https://i.imgur.com/UNhZGuz.png)
- **Scrum meeting**
    1. 時間短，大約15分鐘
    2. 基本上站著 meeting
    3. 每人報告**昨日做了什麼**，**遇到什麼困難**，**接下來要做什麼**
- 固定時間讓客戶看 demo
![](https://i.imgur.com/LzLkwtD.png)