提升程式設計師的面試力 - Ch 11 - 測試
提升程式設計師的面試力 - Ch 11 - 測試
面試所遇到的與測試相關的問題大致上分為四大類
- 測試真實物體
- 測試軟體
- 為一個功能撰寫測試程式碼
- 解決已知問題
面試官想看到什麼
整體的理解程度
主要在測驗你是不是一個真正了解軟體的人,能不能適當的排出測試案例的優先順序。
知道如何化零為整
主要在測驗你是不是真的理解軟體如何運作,還有軟體是否適合其所在的生態圈。
組織能力
主要在測驗你在處理問題的方式是否是有條理的。
實際性
主要在測驗你是否可以實際制定合理的測試計畫。
測試真實的物體
題目:如何測試一個迴紋針
- 誰將使用它?為什麼?
- 使用該產品的人是誰?如何使用?
- 使用情境是什麼?
- 盡可能列出使用的情境
- 使用限制是什麼?
- 如標題,就是探討關於使用方面的限制
- 壓力、故障條件是什麼?
- 探討故障條件是否是該產品可以接受的
- 你會怎麼做測試?
- 測試方面的細節
測試軟體
軟體測試跟測試實際的物體很類似,不過會更著重測試的細節
而軟體測試有兩個核心的方面:
- 手動測試和自動測試
- 黑箱測試與白箱測試
底下描述一下測試軟體的脈絡
- 我們要做的是黑箱測試還是白箱測試?
- 可以詢問面試官他想做的是黑箱或是白箱,這樣在你之後步驟地回答方向就比較好掌握關於考官的偏好
- 誰將使用它?為什麼?
- 使用情境是什麼?
- 使用限制是什麼?
- 壓力、故障條件是什麼?
- 你會怎麼做測試?
- 這部分就可以針對黑箱或是白箱去擬定測試的細節,其中還可以提及是不是有部分的測試可以自動化,而關於自動化的優缺點也可以提及
測試一個函式
舉例來說,如果考官出了一個題目,請你測試一個排序的 function,那麼我們可以照下面的步驟去進行
1. 定義測試案例
可以分為底下幾種狀況去考慮
- 正常狀況
- 極端狀況
- null 與「不合法的輸入」
- 奇怪的輸入
2. 定義期望結果
各種測試案例下期望獲得的回傳結果或是造成的效果
3. 撰寫測試程式碼
除錯
還有一類的面試問題是在考驗你如何除錯或排除現有問題,而遇到這樣的問題的時候,可以依照以下的脈絡去回答
- 瞭解場景
- 盡可能了解造成問題的當下發生了什麼事情,如何復刻問題
- 分解問題
- 將流程分割為可測試的單元,試圖去找出問題發生的細節
- 建立具體的、可行的測試
- 對於問題建立測試的程式碼
題目
11.1
請找出以下程式碼中的錯誤
1 | unsigned int i |
ans
這段程式碼中存在兩個錯誤
第一個是因為我們指定了 unsigned int
所以在 for
裡面的條件設定應該改為 i > 0
第二個是使用 %u
代替 %d
,因為我們要印出的是不帶正負號的整數(%u
與 %d
的差異)
因此,正確程式碼修正為
1 | unsigned int i |
這樣我們就可以順利輸出 100 到 1 的數字