近兩周我的面試非常多,大概一天一個。我是二面面試官,一面是技術面,有一定的難度。按道理來說二面的通過率應該比較高才對,不過最近的二面通過率可能不到50%,一面的通過率一般比較穩定保持在30%以下,所以兩面全過的概率大概只有15%左右,可能更低。
那么二面的通過率為什么那么低呢?我想舉幾個例子就可以說明了。
二面我一般都會問一道用例設計題,大概是給你一袋鹽,或者給你一件衣服,寫出一些測試用例。
我的心理預期是15個可執行的用例。
有的候選人是這么回答的。
假如是一袋鹽,那么要看看裝鹽的袋子是不是會漏?
這時候我一般會反問,那應該是要漏還是不要漏?很多候選人這時候會愣住,可能完全意識不到我為什么會這么問。
我這么問是因為我有個怪癖,那就是我希望測試用例都是可以執行的。可以執行的意思是,你要告訴我你究竟是希望袋子漏還是不漏。如果你希望袋子是不漏的,那么袋子漏的時候測試用例就是不通過的,反之也成立。如果你告訴我看看袋子漏不漏,那么因為我是很笨的,我不知道如何去執行這個用例,因為我不知道袋子究竟是需要漏呢還是不能漏。
與之類似的,在測試衣服的時候,有的候選人會回答要看衣服的尺碼是不是合適。那么我會反問,對於L號,衣服多長是合適,多長又是不合適呢?這是因為合適不合適是沒有執行標准的,對於一個身高不高的人——比如1米49家窮人丑的我——來說,L號是不合適的,太長了。而對於身材勻稱的其他人來說,L應該是合適的。所以合不合適沒法量化,加上又有模棱兩可的是不是這樣的詞語推波助瀾,這種用例執行起來是相當困難的。
所以寫用例,要想可執行,首先的第一條原則是,不要包含一些似是而非的詞語,比如是不是,要不要,有沒有之類的。換句話說,就是用例里大概率要么包含是,要么包含不是這樣的詞。
比如
- 裝鹽的袋子不能(不是)漏
- 衣服的顏色是紅的
- 衣服的材料是80%的棉,20%的滌綸
像這樣的是或者不是的句型,我們可以稱之為斷言。
上面是最基本的用例設計,主要考察的是思維的全面程度,以及設計用例的最基本要求——可以執行,沒有歧義。另外我還喜歡根據候選人的經歷去問一些稍微有技術深度的問題。
如果有候選人有性能測試的經驗,那么我會問他關於他被測系統的系統架構問題,架構圖起碼大致要能畫出來。這是因為如果不了解系統的架構,那么測試環境搭建,測試策略的選擇都會難以下手,測試的結果也比較難有可信度。
如果候選人的簡歷上寫有精通/熟悉mysql調優,那么我就會問為什么mysql用主鍵去查詢會很快?mysql的主鍵和數據都是怎么存儲的?能不能畫一下mysql的B+樹的大體結構?什么是聯合索引?給你幾個真實的例子,你能告訴我索引命中的情況不?這些問題其實做過mysql性能調優的同學應該大體都會,沒做過的話可能就是強人鎖男了。
簡歷上寫精通python的同學我大概率會讓他在現場寫一個生成器的例子,並介紹一下生成器的主要應用場景。寫精通selenium測試的候選人我會隨便開個網頁,指定個元素讓其當場定位。寫精通appium的同學我會讓其解釋appium協議與webdriver協議最大的不同點。諸如此類,在兼顧考察廣度的情況下順便考察深度。
看上去是不是很難?
其實不然。基本上我不是很關注候選人技術深度題有沒有答出來,如果是二面的話。大部分情況下,候選人無法通過面試的原因大抵都是用例設計能力不過關。要么設計的不夠全面,要么就是基本沒有可執行性。
技術不好的話其實是可以教的,用例設計的不好那么入職以后可能還沒等到好好教就出線上問題了。
寫好每一條用例,大概應該是很多測試同學厚積薄發的第一步吧。