More Related Content
Similar to 12. 除錯、測試與效能 (20)
More from Justin Lin (20)
12. 除錯、測試與效能
- 7. • Step Over 就是執行程式碼的下一步,如
果下步是個函式,會執行完該函式至返回
• 使用 Step Into,若下一步是個函式呼叫,
就會進入函式逐步執行,以便查看函式中
的演算與每一步執行結果
• 如果目前正在某個函式之中,接下來不想
逐步檢視函式中剩餘之程式碼,可以執行
Step Out
7
- 8. 使用 pdb 模組
• 如果手邊正好沒有整合開發環境,只能在
文字模式下執行程式進行除錯,那麼可以
使用 Python 內建的 pdb 模組
• 直接使用 python -m pdb,指定想要除
錯的 .py 檔案
8
- 15. • 可以將 pdb.set_trace() 直接撰寫在原
始碼中,當程式執行到 pdb.set_trace()
時,就會進入 (Pdb) 指令提示
• 若程式因為例外而無法繼續下去的話,可
以再使用 pdb.pm() 回到例外發生時的上
一步
15
- 27. 撰寫 doctest
• doctest 模組一方面是測試程式碼,一方
面也用來確認 DocStrings 的內容沒有過期
• 使用互動式的範例來執行驗證,開發者只
要為套件撰寫 REPL 形式的文件就可以
27
- 32. 使用 unittest 單元測試
• unittest 模組有時亦稱為"PyUnit",是
JUnit 的Python 語言實現
• JUnit 是個 Java 實現的單元測試(Unit
test)框架
• 單元測試指的是測試一個工作單元(a unit
of work)的行為
32
- 37. 測試設備
• 如果有定義 setUp() 方法,那麼執行每個
test 開頭的方法前,都會呼叫一次
setUp()
• 如果有定義 tearDown()方法,那麼執行
每個 test 開頭的方法後,都會呼叫一次
tearDown()
• 可以使用 setUp()、tearDown()來分別
定義每次單元測試前後的資源建立與銷毀
37
- 47. 使用 cProfile(profile)
• cProfile 用來收集程式執行時的一些時
間數據,提供各種統計數據,對大多數的
使用者來說是不錯的工具
• 這是用 C 撰寫的擴充模組,在評測時有較
低的額外成本,不過並不是所有系統上都
有提供
• profile 介面上仿造了cProfile,是用
純Python 來實現的模組,因此有較高的互
通性
47
- 49. • ncalls:"number of calls"的縮寫,也就是對
特定函式的呼叫次數。
• tottime:"total time"的縮寫,花費在函式上
的執行時間(不包括子函數
• 呼叫的時間)。
• percall:tottime 除以ncalls 的結果。
• cumtime:"cumulative time"的縮寫,花費
在函式與所有子函式的時間
• (從呼叫至離開)。
• percall:cumtime 除以ncalls 的結果。
• filename:lineno(function):提供程式碼執行
時的位置資訊。 49