Soumettre la recherche
Mettre en ligne
除錯、測試與效能
•
Télécharger en tant que PPTX, PDF
•
1 j'aime
•
510 vues
Justin Lin
Suivre
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 50
Télécharger maintenant
Recommandé
6. 非同步設計
6. 非同步設計
Justin Lin
並行、平行與非同步
並行、平行與非同步
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
除錯、測試與效能
除錯、測試與效能
Justin Lin
9. meta-programming
9. meta-programming
Justin Lin
异步和队列分享
异步和队列分享
Tony Deng
工作坊總結
工作坊總結
Shengyou Fan
Clipper@datacon.2019.tw
Clipper@datacon.2019.tw
Wei-Yu Chen
Recommandé
6. 非同步設計
6. 非同步設計
Justin Lin
並行、平行與非同步
並行、平行與非同步
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
除錯、測試與效能
除錯、測試與效能
Justin Lin
9. meta-programming
9. meta-programming
Justin Lin
异步和队列分享
异步和队列分享
Tony Deng
工作坊總結
工作坊總結
Shengyou Fan
Clipper@datacon.2019.tw
Clipper@datacon.2019.tw
Wei-Yu Chen
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
Shengyou Fan
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
Bruce Chen
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
How to choose web framework
How to choose web framework
Bo-Yi Wu
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
Shengyou Fan
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
pop2008
Entity Framework實戰
Entity Framework實戰
國昭 張
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
TypeScript-twmvc#16
TypeScript-twmvc#16
twMVC
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
Kyle Shen
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
pop2008
7. 錯誤處理
7. 錯誤處理
Justin Lin
Javascript primer plus
Javascript primer plus
Dongxu Yao
Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事
Szuping Wang
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
俊仁 陳
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
Shihpeng Lin
課程簡介
課程簡介
Shengyou Fan
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime database
Szuping Wang
Mobile app的測試v2
Mobile app的測試v2
Mr PM
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Max Lai
Contenu connexe
Tendances
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
Shengyou Fan
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
Bruce Chen
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
How to choose web framework
How to choose web framework
Bo-Yi Wu
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
Shengyou Fan
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
pop2008
Entity Framework實戰
Entity Framework實戰
國昭 張
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
TypeScript-twmvc#16
TypeScript-twmvc#16
twMVC
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
Kyle Shen
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
pop2008
7. 錯誤處理
7. 錯誤處理
Justin Lin
Javascript primer plus
Javascript primer plus
Dongxu Yao
Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事
Szuping Wang
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
俊仁 陳
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
Shihpeng Lin
課程簡介
課程簡介
Shengyou Fan
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime database
Szuping Wang
Tendances
(20)
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
How to choose web framework
How to choose web framework
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
Entity Framework實戰
Entity Framework實戰
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
TypeScript-twmvc#16
TypeScript-twmvc#16
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
7. 錯誤處理
7. 錯誤處理
Javascript primer plus
Javascript primer plus
Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
課程簡介
課程簡介
CH11:執行緒與並行API
CH11:執行緒與並行API
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime database
Similaire à 除錯、測試與效能
Mobile app的測試v2
Mobile app的測試v2
Mr PM
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Max Lai
Tutorial of eclipse
Tutorial of eclipse
netdbncku
Tip for Editors
Tip for Editors
Chun-Yu Tseng
PHPUnit
PHPUnit
jameslabs
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan
志龍 陳
PHPUnit slide formal
PHPUnit slide formal
jameslabs
Foundation of software development 1
Foundation of software development 1
netdbncku
Refactoring with Patterns in PHP
Refactoring with Patterns in PHP
Jace Ju
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
潘 冠辰
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011
Yi Xu
敏捷测试中的工具实现
敏捷测试中的工具实现
drewz lin
Xpp
Xpp
drewz lin
TDD 介紹
TDD 介紹
williewu
Chapter2
Chapter2
Fang-Ling Lin
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
Fong Liou
Foundation of software development 2
Foundation of software development 2
netdbncku
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
01_智慧英文評分系統 Evaluate Student Summaries
01_智慧英文評分系統 Evaluate Student Summaries
IttrainingIttraining
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Chen Cheng-Wei
Similaire à 除錯、測試與效能
(20)
Mobile app的測試v2
Mobile app的測試v2
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Tutorial of eclipse
Tutorial of eclipse
Tip for Editors
Tip for Editors
PHPUnit
PHPUnit
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan
PHPUnit slide formal
PHPUnit slide formal
Foundation of software development 1
Foundation of software development 1
Refactoring with Patterns in PHP
Refactoring with Patterns in PHP
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011
敏捷测试中的工具实现
敏捷测试中的工具实现
Xpp
Xpp
TDD 介紹
TDD 介紹
Chapter2
Chapter2
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
Foundation of software development 2
Foundation of software development 2
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
01_智慧英文評分系統 Evaluate Student Summaries
01_智慧英文評分系統 Evaluate Student Summaries
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Plus de Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch04 會話管理
Ch04 會話管理
Justin Lin
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
14. 進階主題
14. 進階主題
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
11. 常用內建模組
11. 常用內建模組
Justin Lin
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
9. 資料結構
9. 資料結構
Justin Lin
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
Plus de Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
14. 進階主題
14. 進階主題
13.並行、平行與非同步
13.並行、平行與非同步
11. 常用內建模組
11. 常用內建模組
10. 資料永續與交換
10. 資料永續與交換
9. 資料結構
9. 資料結構
8. open() 與 io 模組
8. open() 與 io 模組
除錯、測試與效能
1.
2.
12. 除錯、測試與效能 • 學習目標 –
使用 pdb 模組除錯 – 對程式進行單元測試 – 使用 timeit 評測程式片段 – 使用 cProfile(profile) 察看評測數據 2
3.
除錯 • 檢測錯誤的時候,有個順手的工具可以加 速錯誤的檢出,其中 Debugger
是最常使 用也是最基本的工具之一 – 中斷點 – 檢視變數 – 逐步執行 3
4.
4
5.
5
6.
6
7.
• Step Over
就是執行程式碼的下一步,如 果下步是個函式,會執行完該函式至返回 • 使用 Step Into,若下一步是個函式呼叫, 就會進入函式逐步執行,以便查看函式中 的演算與每一步執行結果 • 如果目前正在某個函式之中,接下來不想 逐步檢視函式中剩餘之程式碼,可以執行 Step Out 7
8.
使用 pdb 模組 •
如果手邊正好沒有整合開發環境,只能在 文字模式下執行程式進行除錯,那麼可以 使用 Python 內建的 pdb 模組 • 直接使用 python -m pdb,指定想要除 錯的 .py 檔案 8
9.
9
10.
10
11.
11
12.
12
13.
• 如果想要單點針對某個函式進行除錯,可 以使用 pdb.run()函式,通常可以在 REPL
中進行這類動作 13
14.
14
15.
• 可以將 pdb.set_trace()
直接撰寫在原 始碼中,當程式執行到 pdb.set_trace() 時,就會進入 (Pdb) 指令提示 • 若程式因為例外而無法繼續下去的話,可 以再使用 pdb.pm() 回到例外發生時的上 一步 15
16.
16
17.
17
18.
測試 • Python 變數沒有型態,如果有型態上的操 作錯誤,基本上會是在執行時期運行至該 段程式碼時,才會產生錯誤訊息 •
檢查出型態不正確的任務,必須由開發者 來承擔,而減輕這個負擔的最好方式之一, 就是撰寫良好的測試程式 18
19.
• 撰寫測試的相關工具 – assert –
doctest – unittest – 第三方測試工具(像是 nose、pytest 等) 19
20.
• 要在程式中安插斷言,可以使用 assert •
使用 assert expression 的話,相當於 以下的程式片段: • 如果有兩個 expression,例如 assert expression1, expression2: 20
21.
• __debug__ 是個內建變數,一般情況下會 是
True • 如果執行時需要最佳化時(在執行時加上- O 引數)則會是 False 21
22.
22
23.
• 何時該使用斷言呢? – 前置條件斷言客戶端呼叫函式前,已經準備好 某些條件。 –
後置條件驗證客戶端呼叫函式後,具有函式承 諾之結果。 – 類別不變量(Class invariant)驗證物件某個 時間點下的狀態。 – 內部不變量(Internal invariant)使用斷言取 代註解。 – 流程不變量(Control-flow invariant)斷言程 式流程中絕不會執行到的程式碼部份。 23
24.
24
25.
25
26.
26
27.
撰寫 doctest • doctest
模組一方面是測試程式碼,一方 面也用來確認 DocStrings 的內容沒有過期 • 使用互動式的範例來執行驗證,開發者只 要為套件撰寫 REPL 形式的文件就可以 27
28.
28
29.
29
30.
• 獨立地撰寫在另一個文字檔案中 30
31.
31
32.
使用 unittest 單元測試 •
unittest 模組有時亦稱為"PyUnit",是 JUnit 的Python 語言實現 • JUnit 是個 Java 實現的單元測試(Unit test)框架 • 單元測試指的是測試一個工作單元(a unit of work)的行為 32
33.
• 測試一個單元,基本上要與其他的單元獨 立,否則會是在同時測試兩個單元的正確 性,或是兩個單元之間的合作行為 • 就軟體測試而言,單元測試通常指的是測 試某個函式(或方法) 33
34.
• unittest 模組主要包括四個部份: –
測試案例(Test case) – 測試設備(Test fixture) – 測試套件(Test suite) – 測試執行器(Test runner) 34
35.
測試案例 35
36.
36
37.
測試設備 • 如果有定義 setUp()
方法,那麼執行每個 test 開頭的方法前,都會呼叫一次 setUp() • 如果有定義 tearDown()方法,那麼執行 每個 test 開頭的方法後,都會呼叫一次 tearDown() • 可以使用 setUp()、tearDown()來分別 定義每次單元測試前後的資源建立與銷毀 37
38.
測試套件 • 想要將不同的測試組合在一起 • 想要自動載入某個
TestCase 子類別中所 有 test_xxx 方法 38
39.
• 將某個測試套件與某個 TestCase
中的 test_xxx 方法組合為另一個測試套件: • 將許多測試套件再全部組合為另一個測試 套件: 39
40.
測試執行器 • 在程式碼中直接使用 TextTestRunner: •
在命令列中使用 unittest 模組來運行模 組、類別或甚至個別的測試方法: 40
41.
timeit 模組 • 用來量測一個小程式片段的執行時間 41
42.
• 到底是使用 +
時比較快,還是 join() 比 較快呢? 42
43.
43
44.
• 效能是整體程式結合之後的執行考量,並 不是單一元素快慢的問題,也不是憑空猜 測,而是要有實際的評測作為依據 • timeit
預設是執行程式片段 1,000,000 次, 然後取平均時間 • 執行次數可透過 number 參數控制 44
45.
• 以下是幾個直接透過 API
運行的範例: 45
46.
46
47.
使用 cProfile(profile) • cProfile
用來收集程式執行時的一些時 間數據,提供各種統計數據,對大多數的 使用者來說是不錯的工具 • 這是用 C 撰寫的擴充模組,在評測時有較 低的額外成本,不過並不是所有系統上都 有提供 • profile 介面上仿造了cProfile,是用 純Python 來實現的模組,因此有較高的互 通性 47
48.
48
49.
• ncalls:"number of
calls"的縮寫,也就是對 特定函式的呼叫次數。 • tottime:"total time"的縮寫,花費在函式上 的執行時間(不包括子函數 • 呼叫的時間)。 • percall:tottime 除以ncalls 的結果。 • cumtime:"cumulative time"的縮寫,花費 在函式與所有子函式的時間 • (從呼叫至離開)。 • percall:cumtime 除以ncalls 的結果。 • filename:lineno(function):提供程式碼執行 時的位置資訊。 49
50.
• 可以使用 pstats
對 cProfile 的結果, 進行各種運算與排序 50
Télécharger maintenant