SlideShare a Scribd company logo
1 of 50
Download to read offline
12. 除錯、測試與效能
• 學習目標
– 使用 pdb 模組除錯
– 對程式進行單元測試
– 使用 timeit 評測程式片段
– 使用 cProfile(profile)
察看評測數據
2
除錯
• 檢測錯誤的時候,有個順手的工具可以加
速錯誤的檢出,其中 Debugger 是最常使
用也是最基本的工具之一
– 中斷點
– 檢視變數
– 逐步執行
3
4
5
6
• Step Over 就是執行程式碼的下一步,如
果下步是個函式,會執行完該函式至返回
• 使用 Step Into,若下一步是個函式呼叫,
就會進入函式逐步執行,以便查看函式中
的演算與每一步執行結果
• 如果目前正在某個函式之中,接下來不想
逐步檢視函式中剩餘之程式碼,可以執行
Step Out
7
使用 pdb 模組
• 如果手邊正好沒有整合開發環境,只能在
文字模式下執行程式進行除錯,那麼可以
使用 Python 內建的 pdb 模組
• 直接使用 python -m pdb,指定想要除
錯的 .py 檔案
8
9
10
11
12
• 如果想要單點針對某個函式進行除錯,可
以使用 pdb.run()函式,通常可以在
REPL 中進行這類動作
13
14
• 可以將 pdb.set_trace() 直接撰寫在原
始碼中,當程式執行到 pdb.set_trace()
時,就會進入 (Pdb) 指令提示
• 若程式因為例外而無法繼續下去的話,可
以再使用 pdb.pm() 回到例外發生時的上
一步
15
16
17
測試
• Python 變數沒有型態,如果有型態上的操
作錯誤,基本上會是在執行時期運行至該
段程式碼時,才會產生錯誤訊息
• 檢查出型態不正確的任務,必須由開發者
來承擔,而減輕這個負擔的最好方式之一,
就是撰寫良好的測試程式
18
• 撰寫測試的相關工具
– assert
– doctest
– unittest
– 第三方測試工具(像是 nose、pytest 等)
19
• 要在程式中安插斷言,可以使用 assert
• 使用 assert expression 的話,相當於
以下的程式片段:
• 如果有兩個 expression,例如 assert
expression1, expression2:
20
• __debug__ 是個內建變數,一般情況下會
是 True
• 如果執行時需要最佳化時(在執行時加上-
O 引數)則會是 False
21
22
• 何時該使用斷言呢?
– 前置條件斷言客戶端呼叫函式前,已經準備好
某些條件。
– 後置條件驗證客戶端呼叫函式後,具有函式承
諾之結果。
– 類別不變量(Class invariant)驗證物件某個
時間點下的狀態。
– 內部不變量(Internal invariant)使用斷言取
代註解。
– 流程不變量(Control-flow invariant)斷言程
式流程中絕不會執行到的程式碼部份。
23
24
25
26
撰寫 doctest
• doctest 模組一方面是測試程式碼,一方
面也用來確認 DocStrings 的內容沒有過期
• 使用互動式的範例來執行驗證,開發者只
要為套件撰寫 REPL 形式的文件就可以
27
28
29
• 獨立地撰寫在另一個文字檔案中
30
31
使用 unittest 單元測試
• unittest 模組有時亦稱為"PyUnit",是
JUnit 的Python 語言實現
• JUnit 是個 Java 實現的單元測試(Unit
test)框架
• 單元測試指的是測試一個工作單元(a unit
of work)的行為
32
• 測試一個單元,基本上要與其他的單元獨
立,否則會是在同時測試兩個單元的正確
性,或是兩個單元之間的合作行為
• 就軟體測試而言,單元測試通常指的是測
試某個函式(或方法)
33
• unittest 模組主要包括四個部份:
– 測試案例(Test case)
– 測試設備(Test fixture)
– 測試套件(Test suite)
– 測試執行器(Test runner)
34
測試案例
35
36
測試設備
• 如果有定義 setUp() 方法,那麼執行每個
test 開頭的方法前,都會呼叫一次
setUp()
• 如果有定義 tearDown()方法,那麼執行
每個 test 開頭的方法後,都會呼叫一次
tearDown()
• 可以使用 setUp()、tearDown()來分別
定義每次單元測試前後的資源建立與銷毀
37
測試套件
• 想要將不同的測試組合在一起
• 想要自動載入某個 TestCase 子類別中所
有 test_xxx 方法
38
• 將某個測試套件與某個 TestCase 中的
test_xxx 方法組合為另一個測試套件:
• 將許多測試套件再全部組合為另一個測試
套件:
39
測試執行器
• 在程式碼中直接使用 TextTestRunner:
• 在命令列中使用 unittest 模組來運行模
組、類別或甚至個別的測試方法:
40
timeit 模組
• 用來量測一個小程式片段的執行時間
41
• 到底是使用 + 時比較快,還是 join() 比
較快呢?
42
43
• 效能是整體程式結合之後的執行考量,並
不是單一元素快慢的問題,也不是憑空猜
測,而是要有實際的評測作為依據
• timeit 預設是執行程式片段 1,000,000 次,
然後取平均時間
• 執行次數可透過 number 參數控制
44
• 以下是幾個直接透過 API 運行的範例:
45
46
使用 cProfile(profile)
• cProfile 用來收集程式執行時的一些時
間數據,提供各種統計數據,對大多數的
使用者來說是不錯的工具
• 這是用 C 撰寫的擴充模組,在評測時有較
低的額外成本,不過並不是所有系統上都
有提供
• profile 介面上仿造了cProfile,是用
純Python 來實現的模組,因此有較高的互
通性
47
48
• ncalls:"number of calls"的縮寫,也就是對
特定函式的呼叫次數。
• tottime:"total time"的縮寫,花費在函式上
的執行時間(不包括子函數
• 呼叫的時間)。
• percall:tottime 除以ncalls 的結果。
• cumtime:"cumulative time"的縮寫,花費
在函式與所有子函式的時間
• (從呼叫至離開)。
• percall:cumtime 除以ncalls 的結果。
• filename:lineno(function):提供程式碼執行
時的位置資訊。 49
• 可以使用 pstats 對 cProfile 的結果,
進行各種運算與排序
50

More Related Content

What's hot

選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅Shengyou Fan
 
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)Bruce Chen
 
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架Justin Lin
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Justin Lin
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web frameworkBo-Yi Wu
 
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹Shengyou Fan
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰國昭 張
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16twMVC
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Kyle Shen
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
7. 錯誤處理
7. 錯誤處理7. 錯誤處理
7. 錯誤處理Justin Lin
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Szuping Wang
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發俊仁 陳
 
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Shihpeng Lin
 
CH11:執行緒與並行API
CH11:執行緒與並行APICH11:執行緒與並行API
CH11:執行緒與並行APIJustin Lin
 
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseAPI Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseSzuping Wang
 

What's hot (20)

選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
 
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
 
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
7. 錯誤處理
7. 錯誤處理7. 錯誤處理
7. 錯誤處理
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 
Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息Spock:願你的測試長長久久、生生不息
Spock:願你的測試長長久久、生生不息
 
課程簡介
課程簡介課程簡介
課程簡介
 
CH11:執行緒與並行API
CH11:執行緒與並行APICH11:執行緒與並行API
CH11:執行緒與並行API
 
API Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime databaseAPI Survey #2 - Firebase realtime database
API Survey #2 - Firebase realtime database
 

Similar to 除錯、測試與效能

Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2Mr PM
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
Tutorial of eclipse
Tutorial of eclipseTutorial of eclipse
Tutorial of eclipsenetdbncku
 
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志龍 陳
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHPJace Ju
 
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學潘 冠辰
 
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011Yi Xu
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现drewz lin
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹williewu
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Fong Liou
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2netdbncku
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
01_智慧英文評分系統 Evaluate Student Summaries
01_智慧英文評分系統 Evaluate Student Summaries01_智慧英文評分系統 Evaluate Student Summaries
01_智慧英文評分系統 Evaluate Student SummariesIttrainingIttraining
 
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Chen Cheng-Wei
 

Similar to 除錯、測試與效能 (20)

Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
Tutorial of eclipse
Tutorial of eclipseTutorial of eclipse
Tutorial of eclipse
 
Tip for Editors
Tip for EditorsTip for Editors
Tip for Editors
 
PHPUnit
PHPUnitPHPUnit
PHPUnit
 
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
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
 
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
 
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现
 
Xpp
XppXpp
Xpp
 
TDD 介紹
TDD 介紹TDD 介紹
TDD 介紹
 
Chapter2
Chapter2  Chapter2
Chapter2
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
01_智慧英文評分系統 Evaluate Student Summaries
01_智慧英文評分系統 Evaluate Student Summaries01_智慧英文評分系統 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)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組Justin Lin
 

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 

除錯、測試與效能