SlideShare una empresa de Scribd logo
1 de 12
單元測試
Allen liu 2021-09-05
大綱
1. 理論概念簡介
2. 為什麼不寫測試 / 寫測試好處
3. 測試有哪些分類
4. UnitTest .Net MSTest 專案實作
理論概念簡介
軟體測試:
在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體品質,
並對軟體是否能滿足設計要求,進行評估的過程。
開發團隊寫測試,通常有三種模式:
1. 先寫測試再開發。2. 開發完成再寫測試。3. 無招勝有招—不寫測試(誤)。
TDD 測試驅動開發:是一種開發流程,白話就是先寫測試再開發。
寫測試的好處:
1. 測試幫助檢查代碼正確性,減少 bug。2. 節省現在的時間,快速定位 bug。
3. 提高代碼質量,重構更簡單。 4. 減少調試時間,買未來的時間。
為什麼不寫測試:
1. 框架對單元測試不友好。 2. 代碼耦合性太高。
( 可能未確實設計模式 S.O.L.I.D / OOP / FP,越確實測試越好寫 )
3. 業務繁重時間、人手不足。 4. 需求不確定、價值性不高。
Kent Beck 在《Test Driven Development By Example》書中提到,
3個步驟:
1. Red。2. Green。3. Refactor。
重複這些步驟直到功能做完。
那測試到底要怎麼寫呢?
測試方法分類
進程 ( aplpha / beta ) 、方法 ( 黑箱 / 白盒 ) 、類型 ( 功能 / 系統 / 極限值 / 效能 / 壓力 )階
段 ( 單元 / 整合 / 系統 / 回歸 ) ...
程式分類
( Unit Test ) 單元測試 / ( Integration Test ) 整合測試 / ( End to End Test ) 端對端
驗收測試 整合測試 單元測試
角度 使用端角度、驗證系統功能 黑箱測試角度、驗證服務或模組 呼叫物件方法角度、驗證物件
粒度 最粗 中等 最細
環境 擬真或真實環境 含外部資源的測試環境 獨立環境、不需外部資源
需求異動穩定性 最低 中等 最高
開發成本 最低 低 最高
執行速度 最慢 中等 最快
測試案例撰寫角色 PO、SA、QA 為主開發人員為輔 QA、開發人員為主 開發人員為主
例子 登入頁面 身分驗證服務 雜湊演算法物件
( End to End Test ) 端對端測試
以 User 的角度去做測試,需要模擬最完整的環境去做測試,
e.g. 商業邏輯 PASS / 資料庫連結 PASS / MVC 使用者介面
由 User 登入介面測試所有的功能是否處理好了,
通常交由專職測試工程師處理。
例如可由 E2E Test Framework Selenium 一鍵執行多個動作。
( Integration Test ) 整合測試
多個單元互相整合再一起做測試,主要針對不同模組互動去做測試。
e.g. ( 資料連接模組 / 商業邏輯模組 ) 互動測試,看會產生什麼結果,
如果 Unit Test 都 Pass 但 Integration Test Fail,
提早發現問題則可以盡快改正程式碼。
( Unit Test ) 單元測試
以最小單位進行測試,範圍小數度快,在測試專案中是比例最多的。
最小單位在不同場合有不同做法,以 A Class 內的所有 Method 做測試,
或甚至是一個個的 Method 是否有符合 input / output。
單
元
測
試
實
作
比較表
討論
比較
程式碼
單元測試實
作
https://blog.miniasp.com/post/2019/02/18/Unit-testing-Integration-testing-e2e-testing
https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-mstest
https://www.youtube.com/watch?v=vjiFZCNl3YE&ab_channel=HiSKIO
https://xdite.gitbooks.io/rspec-101/content/chapters/chapter-1-1-extra-1.html
https://www.jondjones.com/architecture/unit-testing/nunit/ms-test-vs-nunit-vs-xunit-which-ones-the-best-you-decide/
https://www.huanlintalk.com/2018/04/test-projects-in-visual-studio-2017.html
https://blog.turn.tw/?p=2821
https://www.jianshu.com/p/fa41fb80d2b8
https://xdite.gitbooks.io/rspec-101/content/contents/why-test/
https://juejin.im/post/6844904032264273934
https://tw.alphacamp.co/blog/tdd-test-driven-development-example
https://www.google.com/search?sxsrf=ALeKk02w8VuJHv7g0W6XmCn-jmWUgVhU8A%3A1603257519826&ei=r8SPX7CPMvCOr7wPmK-
gyA4&q=MSTest%E3%80%81NUnit%E3%80%81+xUnit+%E5%B7%AE%E5%88%A5&oq=MSTest%E3%80%81NUnit%E3%80%81+xUnit+%E5%B7%AE%E5%88%A5&gs_lcp=CgZwc3ktYWIQAzoFCAAQzQI6BQ
ghEKABULMOWNtCYPREaAtwAHgAgAFgiAH7BpIBAjE1mAEAoAEBqgEHZ3dzLXdpesABAQ&sclient=psy-ab&ved=0ahUKEwjwos_X98TsAhVwx4sBHZgXCOkQ4dUDCA0&uact=5
https://www.youtube.com/watch?v=0bLBv5KL7aE&t=94s&ab_channel=HiSKIO
https://www.slideshare.net/kingkongbruce/ss-51063660
參考

Más contenido relacionado

La actualidad más candente

소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅영기 김
 
Test case management using jira
Test case management using jiraTest case management using jira
Test case management using jiraQMetry
 
測試是什麼
測試是什麼測試是什麼
測試是什麼Yvonne Yu
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스철민 신
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
QA Best Practices in Digital Marketing [whitepaper]
QA Best Practices in Digital Marketing [whitepaper]QA Best Practices in Digital Marketing [whitepaper]
QA Best Practices in Digital Marketing [whitepaper]Jim Spillson
 
Machine learning in software testing
Machine learning in software testingMachine learning in software testing
Machine learning in software testingThoughtworks
 
What is Software Testing | Edureka
What is Software Testing | EdurekaWhat is Software Testing | Edureka
What is Software Testing | EdurekaEdureka!
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법SangIn Choung
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
Career in Software Testing | Skills Required for Software Test Engineer | Edu...
Career in Software Testing | Skills Required for Software Test Engineer | Edu...Career in Software Testing | Skills Required for Software Test Engineer | Edu...
Career in Software Testing | Skills Required for Software Test Engineer | Edu...Edureka!
 
設計をする上で役にたった制約について
設計をする上で役にたった制約について設計をする上で役にたった制約について
設計をする上で役にたった制約についてIkki Takahashi
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Alan Tsai
 
Basic interview questions for manual testing
Basic interview questions for manual testingBasic interview questions for manual testing
Basic interview questions for manual testingJYOTI RANJAN PAL
 
工作團隊與團隊協作方法 B2-1-詹翔霖教授
工作團隊與團隊協作方法 B2-1-詹翔霖教授工作團隊與團隊協作方法 B2-1-詹翔霖教授
工作團隊與團隊協作方法 B2-1-詹翔霖教授翔霖 詹
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsChang Hak Yeon
 

La actualidad más candente (20)

소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅
 
Test case management using jira
Test case management using jiraTest case management using jira
Test case management using jira
 
測試是什麼
測試是什麼測試是什麼
測試是什麼
 
10 Benefits of Automated Testing
10 Benefits of Automated Testing10 Benefits of Automated Testing
10 Benefits of Automated Testing
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스
 
Requisitos Ágeis
Requisitos ÁgeisRequisitos Ágeis
Requisitos Ágeis
 
TDD refresher
TDD refresherTDD refresher
TDD refresher
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
QA Best Practices in Digital Marketing [whitepaper]
QA Best Practices in Digital Marketing [whitepaper]QA Best Practices in Digital Marketing [whitepaper]
QA Best Practices in Digital Marketing [whitepaper]
 
Machine learning in software testing
Machine learning in software testingMachine learning in software testing
Machine learning in software testing
 
What is Software Testing | Edureka
What is Software Testing | EdurekaWhat is Software Testing | Edureka
What is Software Testing | Edureka
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
Career in Software Testing | Skills Required for Software Test Engineer | Edu...
Career in Software Testing | Skills Required for Software Test Engineer | Edu...Career in Software Testing | Skills Required for Software Test Engineer | Edu...
Career in Software Testing | Skills Required for Software Test Engineer | Edu...
 
設計をする上で役にたった制約について
設計をする上で役にたった制約について設計をする上で役にたった制約について
設計をする上で役にたった制約について
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
 
Basic interview questions for manual testing
Basic interview questions for manual testingBasic interview questions for manual testing
Basic interview questions for manual testing
 
工作團隊與團隊協作方法 B2-1-詹翔霖教授
工作團隊與團隊協作方法 B2-1-詹翔霖教授工作團隊與團隊協作方法 B2-1-詹翔霖教授
工作團隊與團隊協作方法 B2-1-詹翔霖教授
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + Jenkins
 

Similar a UnitTest.pptx

有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppttest499702
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程hhliu
 
Frank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank Lee
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹williewu
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan志龍 陳
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列Chris Wang
 
分布式系统测试实践
分布式系统测试实践分布式系统测试实践
分布式系统测试实践drewz lin
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
关于敏捷测试思想的分享Cici 20110826
关于敏捷测试思想的分享Cici 20110826关于敏捷测试思想的分享Cici 20110826
关于敏捷测试思想的分享Cici 20110826izhuzhume
 
让测试敏捷起来(段念)
让测试敏捷起来(段念)让测试敏捷起来(段念)
让测试敏捷起来(段念)Jay Ren
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)Rick Hwang
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪奕孝 陳
 
Duannian agile
Duannian agileDuannian agile
Duannian agiled0nn9n
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012Qiao Liang
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012Qiao Liang
 
Agile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyAgile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyJen-Chieh Ko
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 

Similar a UnitTest.pptx (20)

有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppt
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程
 
PHP 单元测试
PHP 单元测试PHP 单元测试
PHP 单元测试
 
Frank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testing
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列
 
分布式系统测试实践
分布式系统测试实践分布式系统测试实践
分布式系统测试实践
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
关于敏捷测试思想的分享Cici 20110826
关于敏捷测试思想的分享Cici 20110826关于敏捷测试思想的分享Cici 20110826
关于敏捷测试思想的分享Cici 20110826
 
让测试敏捷起来(段念)
让测试敏捷起来(段念)让测试敏捷起来(段念)
让测试敏捷起来(段念)
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
 
Unit test
Unit testUnit test
Unit test
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
 
Duannian agile
Duannian agileDuannian agile
Duannian agile
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
 
Agile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing StrategyAgile Summit Taipei 2019 - Agile Testing Strategy
Agile Summit Taipei 2019 - Agile Testing Strategy
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
Xpp
XppXpp
Xpp
 

UnitTest.pptx

Notas del editor

  1. 查看簡報 下拉 找筆記 f11 全螢幕
  2. 軟體測試其實就是有一套自視的規範只要程式符合規範則完成測試
  3. 1. 可能要寫比現在要開發的程式量乘倍數的測試 Code 這邊除了程式需要確實 SOLID 物件導向設計 物件導向程式設計 (Object-oriented programming) 函数式编程(Functional Programming, FP) 再來則是時間與 需求明確度與價值 ----- 可以在下一個版本的 Code 時 run 測試,可以馬上知道代碼的正確性 --- Single responsibility principle(單一職責原則):指一個類模組包甚至系統都應該有單一的原則。 Open-closed principle(開閉原則):你應該能夠擴充套件類的行為,而不需要修改它。 Liskov substitution principle(里氏替換原則):簡答理解就是如果想要可替換的元件來構建軟體系統,那麼這些元件就必須遵守共同一個約定,以便讓這些元件可以相互替換。 Interface segregation principle(介面隔離原則):使細粒度介面特定於客戶端,主要告誡設計師應該在設計中避免不必要的依賴。 Dependency Inversion Principle(依賴倒置原則):依賴抽象,而非具體實現。此原則指出高層策略性程式碼不應該依賴實現的程式碼,相反,那些底層實現應該依賴於高層策略程式碼。
  4. 那測試到底要怎麼寫呢?其實只要實作這三點,測試就不會太難寫 開發就以實作測試為基礎,其實就達到測試驅動開發 TTD 1. Red:寫個能表達你打算如何使用那段code的測試,還有你期待它做什麼。這個測試會失敗。很多介面會用紅色訊息來表示它。 2. Green:寫出足夠的code來讓那個測試成功,但別多寫。如果你想寫更多code,像是檢查某些錯誤的話,那就先另寫一個測試表達它。當下只要寫剛好夠的code去通過測試即可。 3. Refactor 綠肥特:把多餘的code清理一下,然後改善整體設計。之後再跑一次測試,確保沒弄壞什麼地方。
  5. 上面不多獎 WIKI 能查到更多細節 這邊可以大致上看一下比較表,開發人員主要還是以單元測試與整合測試為主
  6. 通常 run 一次的時間較長,整個專案中佔的比例較少
  7. 代表兩個模組都沒問題,但互動上出了問題, 整合測試需要整理相對於單元測試更完整的環境來完成測試工作, 在專案中比例相較於單元測試數量較少。
  8. 照畫面講
  9. C# 有許多單元測試的框架可以實作單元測試,目前看比較表 NUnit 是提供最多功能的,但實際上並不會用到那麼多標籤,所以三種其實差不多 主要就是以往 mstest 功能比較不完善,所以大家都用 ntest,到現在基本功能都差不多了,一般開發其實都夠用
  10. 通常是在現有的方案附加測試專案 痾瑞居 安排所有必要的前提條件和輸入。 欸可特 對被測對像或方法採取行動。 痾色特 斷言已發生預期的結果。 右鍵偵錯測試,斷點看哪錯 註解 最後成功 檢視測試畫面 explorer 偵錯 然後講解 結果跟時間等等 (看畫面講) 然後 解 bug ( 密碼 ) 然後繼成功 秀 最後帶到 create 單子 環境必須跟 開發環境或是真實執行環境相同 config 必須要對 依賴注入的資料要注入 等等 需要考慮的環節更多 使用情境 流程較複雜時可以 幫忙產測試資料