狠狠撸

狠狠撸Share a Scribd company logo
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com
Unit Testing
Using NUnit
程序設計的P D C A
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com
自我介紹
2015/4/21
Unit Testing Using Nunit
2
Name Ken Tseng
Education 靜宜大學-資訊傳播工程學系
Experience 剛破一萬小時的dotNET開發者
Interest 籃球、慢跑、游泳、電影…等等
Skill ?HTML5、JavaScript、CSS3
?ASP.NET & MS-SQL
?OOP、Design Pattern
Certificate ?An Introduction to Interactive Programming in Python (Coursera)
?C Language (School)
?MS-Office (TQC)
Group ------------ Now ------------
DevTainan社群 - https://www.facebook.com/groups/devtainan/
------------ University ------------
足球社團、學生議會
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
What’s PDCA?
? PDCA(Plan-Do-Check-Action的簡稱)
循環是品質管理循環,針對品質工作
按規劃、執行、查核與行動來進行活
動,以確保可靠度目標之
達成,並進而促使品質
持續改善。
? http://zh.wikipedia.org/wiki/PDCA
Plan
規劃
Do
執行
Check
查核
Action
修正
2015/4/21 3
Unit Testing Using Nunit
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
PDCA in Software
Plan
需求訪談
與規劃
Do
實作功能
Check
與客戶查
核
Action
修正錯誤
2015/4/21 4
Unit Testing Using Nunit
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
軟體工程 – 三大陣營
? Agile Method
– 敏捷軟體開發(英語:Agile software development),又稱敏捷開
發,是一種從1990年代開始逐漸引起廣泛關注的一些新型軟體開
發方法,是一種應對快速變化的需求的一種軟體開發能力。
? RUP
– 統一軟體開發過程(英語:Rational Unified Process,縮寫為RUP),
一種軟體工程方法,為迭代式軟體開發流程。描述了如何有效地
利用商業的可靠的方法開發和部署軟體,是一種重量級過程(也
被稱作厚方法學),因此特別適用於大型軟體團隊開發大型項目。
? CMMI
– 能力成熟度模型整合(英文:Capability Maturity Model Integration,
簡稱CMMI或「希邁」)是一個過程改進方法,它的目的是幫助組
織改進他們的績效的。可以被用於啟動橫貫一個專案、一個部門
或一個完整的組織的過程改進。
2015/4/21 5
Unit Testing Using Nunit
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
PDCA in Developer
2015/4/21
Unit Testing Using Nunit
6
Plan
如何實作
安排時間
Do
實際撰寫
Check
??
Action
修正錯誤
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
如何測試?
自己點一下
2015/4/21
Unit Testing Using Nunit
7
交給客戶交給測試人員/PM
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
2015/4/21
Unit Testing Using Nunit
8
使用Code來測試
唯有電腦能瞭解電腦!
否則
公說公有理,婆說婆有理。
相信滿「兩萬小時」的前輩,
還是技術長?
誰都不相信,只相信測試!
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
程式為什麼不會動?
? 第 20 名:這很奇怪喔。
? 第 19 名:以前從來不會這樣啊!
? 第 18 名:昨天明明會動的啊!
? 第 17 名:怎麼可能~
? 第 16 名:這一定是機器的問題。
? 第 15 名:你到底是打了什麼才讓程
式當掉的?
? 第 14 名:一定是你的資料有問題。
? 第 13 名:我已經好幾個禮拜沒碰那
一段程式了。
? 第 12 名:你一定是用到舊版了。
? 第 11 名:一定是巧合!為什麼這種
壞運氣只讓你碰上。
? 第 10 名:我不可能什麼功能都測試
到吧,有 bug 是正常的!
? 第 9 名:這個不可能是那個的原始碼!
? 第 8 名:這程式應該是會動的,只是
我寫好後還沒做測試。
? 第 7 名:可惡!一定有人改了我的程
式。
? 第 6 名:你有檢查過你的電腦有沒有
病毒嗎?
? 第 5 名:儘管這功能還不能動啦,你
覺得他如何?
? 第 4 名:在你的系統不能用那一個版
本的程式啦!
? 第 3 名:你幹嘛要那樣操作,都是你
的問題。
? 第 2 名:程式發生問題時你在哪裡?
? 第 1 名:在我的機器明明就可以動啊!
2015/4/21
Unit Testing Using Nunit
9
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
測試種類
? 單元測試 - 是對軟體組成單元進行測試,其目的是檢驗軟體基本組成單位的正確性,測試的
物件是軟體設計的最小單位:模組。
? 整合測試-也稱綜合測試、組裝測試、聯合測試,將程式模組採用適當的整合策略組裝起來,
對系統的介面及整合後的功能進行正確性檢測的測試工作。
其主要目的是檢查軟體單位之間的介面是否正確,整合測試的物件是已經經過單元測試的模
組。
? 系統測試-主要包括功能測試、介面測試、可靠性測試、易用性測試、效能測試。 功能測試
主要針對包括功能可用性、功能實作程度(功能流程&業務流程、資料處理&業務資料處理)
方面測試。
? 回歸測試-指在軟體維護階段,為了檢測代碼修改而引入的錯誤所進行的測試活動。回歸測試
是軟體維護階段的重要工作,有研究表明,回歸測試帶來的耗費占軟體生命周期的1/3總費用
以上。
與普通的測試不同,在回歸測試過程開始的時候,測試者有一個完整的測試用例集可供使用,
因此,如何根據代碼的修改情況對已有測試用例集進行有效的復用是回歸測試研究的重要方
向,此外,回歸測試的研究方向還涉及自動化工具,物件導向回歸測試,測試用例優先級,
回歸測試用例補充生成等。
? http://zh.wikipedia.org/zh-tw/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95
2015/4/21
Unit Testing Using Nunit
10
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
What’s Unit Test?
? 簡單來說,一個單元就是在程式當中最基
本、最小的一個單位,最常見的是一個方
法。
? 單元測試就是為了去檢驗這個單元所執行
的結果是否正確,換句話說,也就是去檢
查程式的結果和程式設計師的預期規劃是
否相同。
2015/4/21
Unit Testing Using Nunit
11
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
NUnit
? 官方網站
http://www.nunit.org/
? 如何使用
? http://www.nunit.org/index.php?p=getStarte
d&r=2.6.4
2015/4/21
Unit Testing Using Nunit
12
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
安裝
? 下一步…直到 Finished
? 或使用NuGet安裝
2015/4/21
Unit Testing Using Nunit
13
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
使用
? 快速開始
http://www.nunit.org/index.php?p=quickStart
&r=2.6.4
? 斷言
http://www.nunit.org/index.php?p=classicMo
del&r=2.6.4
2015/4/21
Unit Testing Using Nunit
14
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
結果
2015/4/21
Unit Testing Using Nunit
15
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com
以上就是官網的教學,
但是就只有這麼簡單嗎?
讓我們繼續看下去…
2015/4/21
Unit Testing Using Nunit
16
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
GitHub
? 下載程式碼
https://github.com/vul3yo6/NUnit
2015/4/21
Unit Testing Using Nunit
17
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
單元測試-3A
? Arrange :
初始化目標物件、相依物
件、方法參數、預期結果,
或是預期與相依物件的互
動方式。
? Act :
呼叫目標物件的方法。
? Assert :
驗證是否符合預期。
2015/4/21
Unit Testing Using Nunit
18
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
屬性 - 1
? TestFixture – 標示此類別為測試類。
? Test – 標示此方法為自動化測試。
? TestCase – 參數化測試。
? Ignore – 忽略測試。
2015/4/21
Unit Testing Using Nunit
19
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
屬性 - 2
? Category – 設定測試群組。
2015/4/21
Unit Testing Using Nunit
20
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
屬性 – 不建議使用
? SetUp – 每次測試前,都會進行的方法。
? TearDown -每次測試後,都會進行的方法。
? ExpectedException – 測試異常。
2015/4/21
Unit Testing Using Nunit
21
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
Assert類別
2015/4/21
Unit Testing Using Nunit
22
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
單元測試-三種類型
? 方法回傳值
? 類別狀態
? 測試事件
2015/4/21
Unit Testing Using Nunit
23
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
編寫可測試代碼
? 存根(stub) – 依賴項的可控制替代物。
– 一個測試,可以多個存根。
? 模擬對象(mock)
– 會對模擬對象斷言,不會對存根斷言。
– 一個測試,最好只有一個模擬對象。
? 偽對象(fake)
2015/4/21
Unit Testing Using Nunit
24
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
結論
敏捷軟體開發宣言
http://agilemanifesto.org/
2015/4/21 25
Unit Testing Using Nunit
藉著親自並協助他人進行軟體開發,
我們正致力於發掘更優良的軟體開發方法。
透過這樣的努力,我們已建立以下價值觀:
個人與互動 重於 流程與工具
可用的軟體 重於 詳盡的文件
與客戶合作 重於 合約協商
回應變化 重於 遵循計劃
也就是說,雖然右側項目有其價值,
但我們更重視左側項目。
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
遺珠之憾
? 隔離框架
? TDD
? ATDD
? BDD
2015/4/21
Unit Testing Using Nunit
26
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
2015/4/21
Unit Testing Using Nunit
27
Unit Testing
https://msdn.microsoft.com/zh-tw/library/dn194488.aspx
TDD
測試驅動開發(Test-driven development)是極限編程中倡
導的程序開發方法,以其倡導先寫測試程序,然後編
碼實現其功能得名。
https://msdn.microsoft.com/zh-tw/library/dn167673.aspx
ATDD
驗收測試(Acceptance Testing)是系統行為與功能面的規
範,用來說明某一個 user story ,系統在特定情況下應
該完成什麼樣功能,以及針對某一些輸入,應該具備
怎樣的輸出結果。
https://msdn.microsoft.com/zh-tw/library/dn296491.aspx
BDD
BDD 的全名為 Behavior-driven development ,在 2003 年由
Dan North 所命名,用來作為 TDD 的輔助。
BDD 是透過 DSL ( Domain-specific language )來描述系統的
行為。
透過屬於該 Domain 的表達方式,來描述系統的 Feature 與
使用者的 Scenario ,並且依據這些 Scenario 產生對應
的 code flow template ,接著可結合 Unit Test 的 3A 原
則 ( Arrange, Act, Assert ),來驗證系統功能是否有滿足
這些 Scenario 。
https://msdn.microsoft.com/zh-tw/library/dn308251.aspx
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
共勉
? 人生的PDCA,累積一個又一個小突破
? 計畫(Plan)
職涯是人生的大問題,但是你不應該想要
一步到位的找到解答;相反的,一開始時,
你應該要專注在你下一步的解法。
? 實作(Do)
在執行的時候,請專注在執行,就當作自己被騙,呆呆地盡全力衝刺,
衝到下一個審核的時間點。
? 審核(Check)
以三個月為一個單位,問問自己,你喜歡這個工作的哪個部分?不喜
歡這個工作的哪個部分?
? 修正(Action)
每次換新的作法或新工作時,會更接近你的理想,也會慢慢發現真正
想投入的領域與熱情,這些經驗和想法都不是捧著教科書能夠理解的。
? http://punnode.com/archives/29216
2015/4/21
Unit Testing Using Nunit
28
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
? 很多時候得把自己的過去給砍了。
? 其實創業本來就跟「不受大公司束縛,做自己想做的事
情」根本搭不上關係,那頂多只能算是 SOHO 族,甚至
是避世獨立去了。
? 真正的創業是為了非達到不可的目標,而願意去做自己
不願意做的事情,並且把那件事情徹底搞懂。然後還得
把自己想盡情做的事情交給比自己更適合、更有才能的
人去做。自己必須能接受這件事:那就是世界上就是有
人比自己優秀,而我們的任務是找到這些人來做事。我
們對一件事有愛,因為愛想成就一些事情而創業,很諷
刺地,第一就是要放棄這份愛。
? http://punnode.com/archives/29216
2015/4/21
Unit Testing Using Nunit
29
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
參考資料
? 30天快速上手TDD
http://www.dotblogs.com.tw/hatelove/category/6685.aspx
https://msdn.microsoft.com/zh-tw/library/dn743856.aspx
? 單元測試的藝術(第2版)(簡體書)
http://www.m.sanmin.com.tw/product/index/004650380
2015/4/21 30
Unit Testing Using Nunit
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
2015/4/21 31
Unit Testing Using Nunit
?The Art of Unit Testing: With Examples in .Net
簡體中文:NET單元測試的藝術
?Test Driven: TDD and Acceptance TDD for Java Developers
簡體中文:测试驱动开发的艺术
?Refactoring: Improving the Design of Existing Code
繁體中文:重構:改善既有程式的設計 (二版)
簡體中文:重构:改善既有代码的设计
?Refactoring to Patterns
繁體中文:重構-向範式前進
簡體中文:重構與模式
?Agile Principles, Patterns, and Practices in C#
簡體中文:敏捷软件开发:原则、模式与实践
?Growing Object-Oriented Software, Guided by Tests
簡體中文:測試驅動的面向對象軟體開發
?Emergent Design: The Evolutionary Nature of Professional Software Development
簡體中文:浮现式设计:专业软件开发的演进本质
?Brownfield Application Development in .Net
繁體中文:軟體構築美學:當專案團隊遇上失控程式,最真實的解決方案
? Succeeding with Agile: Software Development Using Scrum
簡體中文:Scrum敏捷软件开发
?Scrum and XP from the Trenches (Enterprise Software Development)
簡體中文:硝烟中的Scrum和XP:我们如何实施Scrum
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
Q & A
2015/4/21
Unit Testing Using Nunit
32
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com
補充資料
? [30天快速上手TDD][Day 8]Integration Testing &
Web UI Testing – Selenium
http://www.dotblogs.com.tw/hatelove/archive/2
012/12/10/learning-tdd-in-30-days-day8-
integration-testing-and-web-ui-testing-by-
selenium-and-webdriver.aspx
? [Tool]SourceMonitor - 程式碼掃瞄
http://www.dotblogs.com.tw/hatelove/archive/2
010/02/10/sourcemonitor.aspx
? 自動測試與 TDD 實務開發(使用C#) 第三梯
http://skilltree.my/events/ebg
2015/4/21
Unit Testing Using Nunit
33
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com
贊助商
2015/4/21
Unit Testing Using Nunit
34
Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com
台南社群
2015/4/21
Unit Testing Using Nunit
35
MOSUT
https://www.facebook.com/gro
ups/mosut/
Tainan.py
http://www.meetup.com/Taina
n-py-Python-Tainan-User-
Group/
HPX 台南讀書會
https://www.facebook.com/gro
ups/tainanbookclub/
Business Jungle Thursday
https://www.facebook.com/gro
ups/businessjunglethursday/
DevTainan
https://www.facebook.com/gro
ups/devtainan/

More Related Content

Unit test

  • 1. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com Unit Testing Using NUnit 程序設計的P D C A
  • 2. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com 自我介紹 2015/4/21 Unit Testing Using Nunit 2 Name Ken Tseng Education 靜宜大學-資訊傳播工程學系 Experience 剛破一萬小時的dotNET開發者 Interest 籃球、慢跑、游泳、電影…等等 Skill ?HTML5、JavaScript、CSS3 ?ASP.NET & MS-SQL ?OOP、Design Pattern Certificate ?An Introduction to Interactive Programming in Python (Coursera) ?C Language (School) ?MS-Office (TQC) Group ------------ Now ------------ DevTainan社群 - https://www.facebook.com/groups/devtainan/ ------------ University ------------ 足球社團、學生議會
  • 3. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com What’s PDCA? ? PDCA(Plan-Do-Check-Action的簡稱) 循環是品質管理循環,針對品質工作 按規劃、執行、查核與行動來進行活 動,以確保可靠度目標之 達成,並進而促使品質 持續改善。 ? http://zh.wikipedia.org/wiki/PDCA Plan 規劃 Do 執行 Check 查核 Action 修正 2015/4/21 3 Unit Testing Using Nunit
  • 4. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com PDCA in Software Plan 需求訪談 與規劃 Do 實作功能 Check 與客戶查 核 Action 修正錯誤 2015/4/21 4 Unit Testing Using Nunit
  • 5. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 軟體工程 – 三大陣營 ? Agile Method – 敏捷軟體開發(英語:Agile software development),又稱敏捷開 發,是一種從1990年代開始逐漸引起廣泛關注的一些新型軟體開 發方法,是一種應對快速變化的需求的一種軟體開發能力。 ? RUP – 統一軟體開發過程(英語:Rational Unified Process,縮寫為RUP), 一種軟體工程方法,為迭代式軟體開發流程。描述了如何有效地 利用商業的可靠的方法開發和部署軟體,是一種重量級過程(也 被稱作厚方法學),因此特別適用於大型軟體團隊開發大型項目。 ? CMMI – 能力成熟度模型整合(英文:Capability Maturity Model Integration, 簡稱CMMI或「希邁」)是一個過程改進方法,它的目的是幫助組 織改進他們的績效的。可以被用於啟動橫貫一個專案、一個部門 或一個完整的組織的過程改進。 2015/4/21 5 Unit Testing Using Nunit
  • 6. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com PDCA in Developer 2015/4/21 Unit Testing Using Nunit 6 Plan 如何實作 安排時間 Do 實際撰寫 Check ?? Action 修正錯誤
  • 7. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 如何測試? 自己點一下 2015/4/21 Unit Testing Using Nunit 7 交給客戶交給測試人員/PM
  • 8. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 2015/4/21 Unit Testing Using Nunit 8 使用Code來測試 唯有電腦能瞭解電腦! 否則 公說公有理,婆說婆有理。 相信滿「兩萬小時」的前輩, 還是技術長? 誰都不相信,只相信測試!
  • 9. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 程式為什麼不會動? ? 第 20 名:這很奇怪喔。 ? 第 19 名:以前從來不會這樣啊! ? 第 18 名:昨天明明會動的啊! ? 第 17 名:怎麼可能~ ? 第 16 名:這一定是機器的問題。 ? 第 15 名:你到底是打了什麼才讓程 式當掉的? ? 第 14 名:一定是你的資料有問題。 ? 第 13 名:我已經好幾個禮拜沒碰那 一段程式了。 ? 第 12 名:你一定是用到舊版了。 ? 第 11 名:一定是巧合!為什麼這種 壞運氣只讓你碰上。 ? 第 10 名:我不可能什麼功能都測試 到吧,有 bug 是正常的! ? 第 9 名:這個不可能是那個的原始碼! ? 第 8 名:這程式應該是會動的,只是 我寫好後還沒做測試。 ? 第 7 名:可惡!一定有人改了我的程 式。 ? 第 6 名:你有檢查過你的電腦有沒有 病毒嗎? ? 第 5 名:儘管這功能還不能動啦,你 覺得他如何? ? 第 4 名:在你的系統不能用那一個版 本的程式啦! ? 第 3 名:你幹嘛要那樣操作,都是你 的問題。 ? 第 2 名:程式發生問題時你在哪裡? ? 第 1 名:在我的機器明明就可以動啊! 2015/4/21 Unit Testing Using Nunit 9
  • 10. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 測試種類 ? 單元測試 - 是對軟體組成單元進行測試,其目的是檢驗軟體基本組成單位的正確性,測試的 物件是軟體設計的最小單位:模組。 ? 整合測試-也稱綜合測試、組裝測試、聯合測試,將程式模組採用適當的整合策略組裝起來, 對系統的介面及整合後的功能進行正確性檢測的測試工作。 其主要目的是檢查軟體單位之間的介面是否正確,整合測試的物件是已經經過單元測試的模 組。 ? 系統測試-主要包括功能測試、介面測試、可靠性測試、易用性測試、效能測試。 功能測試 主要針對包括功能可用性、功能實作程度(功能流程&業務流程、資料處理&業務資料處理) 方面測試。 ? 回歸測試-指在軟體維護階段,為了檢測代碼修改而引入的錯誤所進行的測試活動。回歸測試 是軟體維護階段的重要工作,有研究表明,回歸測試帶來的耗費占軟體生命周期的1/3總費用 以上。 與普通的測試不同,在回歸測試過程開始的時候,測試者有一個完整的測試用例集可供使用, 因此,如何根據代碼的修改情況對已有測試用例集進行有效的復用是回歸測試研究的重要方 向,此外,回歸測試的研究方向還涉及自動化工具,物件導向回歸測試,測試用例優先級, 回歸測試用例補充生成等。 ? http://zh.wikipedia.org/zh-tw/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95 2015/4/21 Unit Testing Using Nunit 10
  • 11. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com What’s Unit Test? ? 簡單來說,一個單元就是在程式當中最基 本、最小的一個單位,最常見的是一個方 法。 ? 單元測試就是為了去檢驗這個單元所執行 的結果是否正確,換句話說,也就是去檢 查程式的結果和程式設計師的預期規劃是 否相同。 2015/4/21 Unit Testing Using Nunit 11
  • 12. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com NUnit ? 官方網站 http://www.nunit.org/ ? 如何使用 ? http://www.nunit.org/index.php?p=getStarte d&r=2.6.4 2015/4/21 Unit Testing Using Nunit 12
  • 13. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 安裝 ? 下一步…直到 Finished ? 或使用NuGet安裝 2015/4/21 Unit Testing Using Nunit 13
  • 14. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 使用 ? 快速開始 http://www.nunit.org/index.php?p=quickStart &r=2.6.4 ? 斷言 http://www.nunit.org/index.php?p=classicMo del&r=2.6.4 2015/4/21 Unit Testing Using Nunit 14
  • 15. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 結果 2015/4/21 Unit Testing Using Nunit 15
  • 16. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com 以上就是官網的教學, 但是就只有這麼簡單嗎? 讓我們繼續看下去… 2015/4/21 Unit Testing Using Nunit 16
  • 17. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com GitHub ? 下載程式碼 https://github.com/vul3yo6/NUnit 2015/4/21 Unit Testing Using Nunit 17
  • 18. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 單元測試-3A ? Arrange : 初始化目標物件、相依物 件、方法參數、預期結果, 或是預期與相依物件的互 動方式。 ? Act : 呼叫目標物件的方法。 ? Assert : 驗證是否符合預期。 2015/4/21 Unit Testing Using Nunit 18
  • 19. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 屬性 - 1 ? TestFixture – 標示此類別為測試類。 ? Test – 標示此方法為自動化測試。 ? TestCase – 參數化測試。 ? Ignore – 忽略測試。 2015/4/21 Unit Testing Using Nunit 19
  • 20. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 屬性 - 2 ? Category – 設定測試群組。 2015/4/21 Unit Testing Using Nunit 20
  • 21. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 屬性 – 不建議使用 ? SetUp – 每次測試前,都會進行的方法。 ? TearDown -每次測試後,都會進行的方法。 ? ExpectedException – 測試異常。 2015/4/21 Unit Testing Using Nunit 21
  • 22. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com Assert類別 2015/4/21 Unit Testing Using Nunit 22
  • 23. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 單元測試-三種類型 ? 方法回傳值 ? 類別狀態 ? 測試事件 2015/4/21 Unit Testing Using Nunit 23
  • 24. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 編寫可測試代碼 ? 存根(stub) – 依賴項的可控制替代物。 – 一個測試,可以多個存根。 ? 模擬對象(mock) – 會對模擬對象斷言,不會對存根斷言。 – 一個測試,最好只有一個模擬對象。 ? 偽對象(fake) 2015/4/21 Unit Testing Using Nunit 24
  • 25. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 結論 敏捷軟體開發宣言 http://agilemanifesto.org/ 2015/4/21 25 Unit Testing Using Nunit 藉著親自並協助他人進行軟體開發, 我們正致力於發掘更優良的軟體開發方法。 透過這樣的努力,我們已建立以下價值觀: 個人與互動 重於 流程與工具 可用的軟體 重於 詳盡的文件 與客戶合作 重於 合約協商 回應變化 重於 遵循計劃 也就是說,雖然右側項目有其價值, 但我們更重視左側項目。
  • 26. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 遺珠之憾 ? 隔離框架 ? TDD ? ATDD ? BDD 2015/4/21 Unit Testing Using Nunit 26
  • 27. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 2015/4/21 Unit Testing Using Nunit 27 Unit Testing https://msdn.microsoft.com/zh-tw/library/dn194488.aspx TDD 測試驅動開發(Test-driven development)是極限編程中倡 導的程序開發方法,以其倡導先寫測試程序,然後編 碼實現其功能得名。 https://msdn.microsoft.com/zh-tw/library/dn167673.aspx ATDD 驗收測試(Acceptance Testing)是系統行為與功能面的規 範,用來說明某一個 user story ,系統在特定情況下應 該完成什麼樣功能,以及針對某一些輸入,應該具備 怎樣的輸出結果。 https://msdn.microsoft.com/zh-tw/library/dn296491.aspx BDD BDD 的全名為 Behavior-driven development ,在 2003 年由 Dan North 所命名,用來作為 TDD 的輔助。 BDD 是透過 DSL ( Domain-specific language )來描述系統的 行為。 透過屬於該 Domain 的表達方式,來描述系統的 Feature 與 使用者的 Scenario ,並且依據這些 Scenario 產生對應 的 code flow template ,接著可結合 Unit Test 的 3A 原 則 ( Arrange, Act, Assert ),來驗證系統功能是否有滿足 這些 Scenario 。 https://msdn.microsoft.com/zh-tw/library/dn308251.aspx
  • 28. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 共勉 ? 人生的PDCA,累積一個又一個小突破 ? 計畫(Plan) 職涯是人生的大問題,但是你不應該想要 一步到位的找到解答;相反的,一開始時, 你應該要專注在你下一步的解法。 ? 實作(Do) 在執行的時候,請專注在執行,就當作自己被騙,呆呆地盡全力衝刺, 衝到下一個審核的時間點。 ? 審核(Check) 以三個月為一個單位,問問自己,你喜歡這個工作的哪個部分?不喜 歡這個工作的哪個部分? ? 修正(Action) 每次換新的作法或新工作時,會更接近你的理想,也會慢慢發現真正 想投入的領域與熱情,這些經驗和想法都不是捧著教科書能夠理解的。 ? http://punnode.com/archives/29216 2015/4/21 Unit Testing Using Nunit 28
  • 29. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com ? 很多時候得把自己的過去給砍了。 ? 其實創業本來就跟「不受大公司束縛,做自己想做的事 情」根本搭不上關係,那頂多只能算是 SOHO 族,甚至 是避世獨立去了。 ? 真正的創業是為了非達到不可的目標,而願意去做自己 不願意做的事情,並且把那件事情徹底搞懂。然後還得 把自己想盡情做的事情交給比自己更適合、更有才能的 人去做。自己必須能接受這件事:那就是世界上就是有 人比自己優秀,而我們的任務是找到這些人來做事。我 們對一件事有愛,因為愛想成就一些事情而創業,很諷 刺地,第一就是要放棄這份愛。 ? http://punnode.com/archives/29216 2015/4/21 Unit Testing Using Nunit 29
  • 30. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 參考資料 ? 30天快速上手TDD http://www.dotblogs.com.tw/hatelove/category/6685.aspx https://msdn.microsoft.com/zh-tw/library/dn743856.aspx ? 單元測試的藝術(第2版)(簡體書) http://www.m.sanmin.com.tw/product/index/004650380 2015/4/21 30 Unit Testing Using Nunit
  • 31. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 2015/4/21 31 Unit Testing Using Nunit ?The Art of Unit Testing: With Examples in .Net 簡體中文:NET單元測試的藝術 ?Test Driven: TDD and Acceptance TDD for Java Developers 簡體中文:测试驱动开发的艺术 ?Refactoring: Improving the Design of Existing Code 繁體中文:重構:改善既有程式的設計 (二版) 簡體中文:重构:改善既有代码的设计 ?Refactoring to Patterns 繁體中文:重構-向範式前進 簡體中文:重構與模式 ?Agile Principles, Patterns, and Practices in C# 簡體中文:敏捷软件开发:原则、模式与实践 ?Growing Object-Oriented Software, Guided by Tests 簡體中文:測試驅動的面向對象軟體開發 ?Emergent Design: The Evolutionary Nature of Professional Software Development 簡體中文:浮现式设计:专业软件开发的演进本质 ?Brownfield Application Development in .Net 繁體中文:軟體構築美學:當專案團隊遇上失控程式,最真實的解決方案 ? Succeeding with Agile: Software Development Using Scrum 簡體中文:Scrum敏捷软件开发 ?Scrum and XP from the Trenches (Enterprise Software Development) 簡體中文:硝烟中的Scrum和XP:我们如何实施Scrum
  • 32. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com Q & A 2015/4/21 Unit Testing Using Nunit 32
  • 33. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.comKen Tseng | 0958-121-177 | vul3yo6@hotmail.com 補充資料 ? [30天快速上手TDD][Day 8]Integration Testing & Web UI Testing – Selenium http://www.dotblogs.com.tw/hatelove/archive/2 012/12/10/learning-tdd-in-30-days-day8- integration-testing-and-web-ui-testing-by- selenium-and-webdriver.aspx ? [Tool]SourceMonitor - 程式碼掃瞄 http://www.dotblogs.com.tw/hatelove/archive/2 010/02/10/sourcemonitor.aspx ? 自動測試與 TDD 實務開發(使用C#) 第三梯 http://skilltree.my/events/ebg 2015/4/21 Unit Testing Using Nunit 33
  • 34. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com 贊助商 2015/4/21 Unit Testing Using Nunit 34
  • 35. Ken Tseng | 0958-121-177 | vul3yo6@hotmail.com 台南社群 2015/4/21 Unit Testing Using Nunit 35 MOSUT https://www.facebook.com/gro ups/mosut/ Tainan.py http://www.meetup.com/Taina n-py-Python-Tainan-User- Group/ HPX 台南讀書會 https://www.facebook.com/gro ups/tainanbookclub/ Business Jungle Thursday https://www.facebook.com/gro ups/businessjunglethursday/ DevTainan https://www.facebook.com/gro ups/devtainan/