# AppWorks School Week9 Part1
---
1. What is Test Automation Pyramid?
2. What is Test Driven Development (TDD) and Behaviour Driven Development (BDD)?
3. What is Verification & Validation?
3. Verification & Validation
1. 工程規格 vs. 客戶需求
驗證(Verification) : 開發階段中,評估工程(或軟體)是否符合開發階段前所定義的規格,舉例來說,你在建造一間浴室所使用的建材是否和建築設計師所要求的一樣。即「以正確的方式製造產品」(you built it right)。
確認(Validation :) 在開發階段後,評估工程(或軟體)是否符合原先開發的目的,延續上面的例子,當你蓋完浴室後,量出來的坪數、高度、顏色、裝潢是不是符合設計圖的規劃與客戶的要求。即「製造出正確的產品」(you built the right thing)。
2. 開發中 vs. 完成後
驗證(Verification):確認是否滿足規格。確認是否把事情做對。產品開發中的檢驗程序。The process of evaluating if do the things right.
確認(Validation):確認是否滿足目的,確認是否做對的事。產品完成後的檢驗程序。The process of evaluating if do the right thing.
例如開發產品時,在產品開發階段要經過Verification確保開發的功能滿足PM提出的產品規格。產品開發完後,要經過Validation確保產品能滿足使用者或客戶的需求。
Verification沒通過是工程師的問題,因為沒有滿足PM的規格,沒有依規格做好。Validation沒通過是PM的問題,因為沒有把使用者或客戶需求搞清楚,沒有做對的產品
[驗證及確認(Verification & Validation)之差別](https://medium.com/vincent-chen/%E9%A9%97%E8%AD%89%E5%8F%8A%E7%A2%BA%E8%AA%8D-verification-validation-%E4%B9%8B%E5%B7%AE%E5%88%A5-fa1437c479cf)
---
## 眾人之力
Michael
自動化測試金字塔

1. Unit: 從開發工程師撰寫 單元測試 開始,是工程師需確保自己寫程式碼基本邏輯是正常為前提,然而這個測試的成本是最低也是最快(撰寫速度/執行的速度),通常只要 單元測試 足夠多,也能盡量降低後期測試成本,因為若有問題 CI 階段一定會無法通過。
2. Service/Integration: 主要是會整合其他服務的邏輯,確保某個業務邏輯是正確的,同時也是在確保系統整塊本身是否正常,同常需要具備一定的技術含量且測試複雜度高。
3. UI: 也就是我們常在說的 手動/自動化 驗證,光是條列 Test Case 就非常耗時了,寫成自動化也是要花費撰寫時間的,測試角度都以使用者為出發。 所以 UI 測試不管是在 人事成本(e.g. 找會寫自動化的人才)、工作成本(e.g. 驗證時間) 都是相到高的。

從單元測試到 UI 測試等,越往上越是接近 UI 層級,它執行時間就越長、成本也就越高,不論是人工執行,還是將其寫成自動化都一樣。

Allen
1. What is Test Driven Development (TDD) and Behaviour Driven Development (BDD)?
- TDD(Test-Driven Development),是一種開發流程,中文是「測試驅動開發」。用一句白話形容,就是「**先寫測試再開發**」。先寫測試除了能確保測試程式的撰寫,還有一個好處:有助於**在開發初期釐清程式介面如何設計**。
- **「紅燈/綠燈/重構」循環**
- BDD (Behaviour-Driven Development),其精神在於能更有效地發現問題、方便協作和示範 (BDD is about discovery, collaboration and examples)。
- BDD 比 TDD 更進一步,在寫測試前先寫測試規格書。這份測試規格會用更**接近人類語意的自然語言**來描述軟體功能和測試案例。而且這份規格不是單純的敘述文件,而是一份「**可以被執行的規格**」,也就是可以被轉成自動化測試。
- **Cucumber**
-----
## Reference
###### tags: `AppsWorks School`