---
# System prepended metadata

title: 軟體工程CH3
tags: [軟體工程]

---

# 軟體工程CH3
###### tags: `軟體工程`
## Agile Manifesto
  - definition : manifesto for Agile Software Development

  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**

## What is Agility?
customer and developers need to work together on the team

## Agile process
- 定義 : is driven by customer descriptions of what is required
- characteristics : 
    - adaptable : manage unpredictable changes
    - responsive : rely on customer feedback
    - incremental : on the delivery of software increments in short timeframes

## Traditional team v.s. Agile team
![](https://i.imgur.com/m4BhqMr.png)

## Agile process model
##### Extreme Programming
  - 核心: 降低因需求變更所帶來的成本
  
  - planning : customers and developers work together to decide how to group stories.
  
  - design : 
      - **follow KIS**
      - 鼓勵使用 CRC card
      - 對於比較困難的問題建議使用 spike solution(一種雛形)
      - 鼓勵 **refactoring**，不會更動到程式的模組，只會更動到內部邏輯設計
  
  - coding : 
      - 建立 unit test
      - **Pair Programming** : two people work together at one computer workstation to create code for a story. This provides time problem solving and time quality assurance.
          - driver : coding
          - observer : 檢查code ， 提出問題，分享經驗
  
  - testing : 
      - regression test : 每天做測試並把其他人的城市整合後測試
      - acceptance test : 測試是否符合客戶需求
  - Test Driven Design : 「先寫測試再開發」。先寫測試除了能確保測試程式的撰寫，和助於在開發初期釐清程式介面如何設計。
      - 過程 : 
          - 選定一個功能，新增測試案例
          - 執行測試，得到 Failed
          - 實作「夠用」的產品程式
          - 再次執行測試，得到 Passed
          - 重構程式
  - CRC card : 
  是一個標準索引卡集合，包括三個部分: 類名、類的職責、類的協作關係，每一張卡片表示一個類。
    - 類(Class): 代表一系列對象的集合，這些對象是對系統設計的抽象建模，可以是一個人、一件物品等等。類名寫在整個CRC card的最上方。
    - 職責(Responsibility): 可以從此類別之屬性(attributes)與操作、功能(operations)，獲取其職責。這個部分在CRC card的左邊。
    - 協作(Collaborator): 通過另一類別獲取我們想要的資訊或者相關操作，該類別即為協作者。這個部分在CRC card的右邊。
  

## Scrum開發流程的核心概念以及相關名詞

 - 核心 : 團隊主要分成三個角色
        - **Product Owner:** 關注產品目標和客戶需求，並驗收開發的功能
        - **Scrum Master:** 管理團隊流程
        - **Development Team:** 實現並測試產品功能
 
 - Scrum meeting : short(typically 15 minutes) meeting held daily by the Scrum team. In the meeting , there are three key questions are asked and answered by all team members : 
     1. 自從上一次開會以來你做了什麼事情?
     2. 遇到了什麼困難?
     3. 你打算在在下次開會前完成什麼?

 - Sprint : consist of work units that are required to achieve a requirement defined in the backlog that must be fit into a predefined time-box(typically 30 days).