到達面試地點,面試官很友好的領我去了會議室,坐下自我介紹的同時,也就開始了正式的面試,這場面試我很開心,不是因為沒有面試算法,而是這位面試官不僅僅在於面試,更多的是聊簡歷中寫出來的內容,都是自己做過的,要說起來,自然順暢得多,而遇到不懂的內容,他會很善意的給出引導,我所要做的,無非就是順著他的引導拓展自己的思維,之後給出他想要我思考的內容的答案,這種方式的面試,對我來說,其實相對還是比較遊刃有餘的,畢竟不管做什麼,我最喜歡的就是有人稍微提點一下,以至於我不容易走偏。
面試過程中,首先問我工作中怎么開展某項測試,這裡他問的是兼容性,會考慮到哪幾個方面,對於web或者win32之間兼容性的考慮點的區別,對於兼容性測試與其他測試的區別,在做兼容性測試的時候,遇到最大的困難是什麼?對於這個問題的回答他可能不是很滿意,我說,兼容性測試中遇到最大的困難是跨平台遇到問題該如何找到問題所在,他說這個其實和其他的測試也一樣,當你發現問題的時候,你必須排除是系統問題,是配置問題還是產品本身問題,所以他示意我再想想,我稍作沉思,告訴他,我之前在兼容性測試的過程中主要測試的是產品的補丁包,所以最大的困難是補丁包對向下兼容的問題,他似乎稍微滿意了一些,微微笑了笑。
緊接著,看到我在簡歷中寫出了對項目管理有一定的理解,於是話題轉變到了項目管理上,先問了我自己如何對自己進行管理的,諸如一堆的tasks在手上,你會怎么安排?然後問,如果你手上有一個p1的task,但是這個task需要等某人完成一定的操作後你才能進行你的工作,不過,這個task在那個人手裡是p3,這時候你該怎么辦?最後問如果你是test leader,你的team members的手上已經有很多任務了,但是你又接到了更多的任務,你該怎么做分配?其實無非是考慮如何有效完成所有的任務,說實話,我不知道這些問題的答案是不是有哪本書會教大家怎么做,也不知道這些問題是不是有唯一的答案,我只是憑著自己對任務安排的理解在做資源的協調和分配。
緊接著,也不知道是不是還算管理的問題,反正與測試有關,他先給我描述了一個三層結構的系統,讓我從test scope的角度去描述應該怎么測, 由於描述了三層的結構,我第一反應可能和代碼邏輯有關,結果他反問我,你覺得代碼方面的測試是開發做還是測試做,我不是十分明確,但還是給了他肯定的答案,開發做,於是他點了點頭,說,那你現在可以撇開誰做這樣的底層思維,繼續向上一層思考這個問題,這個時候我才知道他在問什麼,其實他想聽到的答案是系統測試,集成測試等等寬泛而抽象的頂層概念,回答完後,又一一引導我分別對這些測試測什麼做了提問,可以說,每個問題我都會選擇沉思一下再做回答,沉思的時候可能腦子一片空白,但其實也是在努力搜尋頭腦里的埋藏的知識。
在接下來的繼續細化提問前,他一再問了關於資料庫的知識,諸如同樣要查詢一個表的其中幾個欄位,視圖和存儲過程如何做出選擇,視圖、存儲過程和方法呢?說真的,其實就是在考這幾個的區別,但是我真的已經遺忘了。ok,繼續細化測試,對於資料庫層如何測試,對於logic層如何測試,對於呈現層又如何進行測試。其中,問資料庫層如何測試的時候,我回答得最為完善,但是也可以說是沒有思考完全,因為他提問了這么一個問題:現在我們要部署這個系統,用批處理的方式寫代碼去部署,
這個時候,關於資料庫需要考慮哪些內容?說白了,還是兼容性測試,不過最初我沒理解,在他的引導下,我才把能想到的都說了,不過當我說到要考慮軟體的兼容時,他問我哪些軟體,我只舉了一個普通軟體的例子,比如,同樣是sql server,如果機器上安裝了假設sql server XX,而在安裝visual studio的時候又裝了一個express,那么實例如何部署,他問還有什麼的時候,我愣住了,軟體兼容就相當於這個吖,難道我要考慮qq,msn么?就算要考慮,不是也一樣的么?頂多就是會不會出現衝突的現象吖,結果他告訴我,應該再測防毒軟體,因為防毒軟體可能會禁止資料庫連線埠。對啊,這個我怎么給忘記了,上回誰還在群里提到了來著。
回答得最差的應該就是logic層的測試,對於logic層我能測什麼?我沉默了很久,我弱弱地說了句接口調用,他說這個是ui層考慮的問題,這裡他給出了最多的引導,先是一個logic層的驗證性問題,說實話,由於ui層是web呈現,我以為會在ui層做,結果他說,web呈現不過是輕量級的驗證,邏輯的驗證還得再邏輯層做,之後,又提示我協定,由於我對協定完全一竅不通,他用很淺顯的話語描述了協定的意思,結果我第一反應就是要測安全性,然後他搖頭,之前說了不考慮證書問題,這一刻才意識到,協定的安全性測試原來包含證書方面的測試,不得不說,這又是另一個收穫,以前的我根本不知道。在他的提示下,漸漸地,我回答出來一部分測試的設計,當然,更多的,可能還是沒讓他太滿意吧,沒辦法,這一塊我確實很薄弱,也沒怎么接觸過,只能靠他引導的那一條路努力鑽。
慶幸的是在ui層,他問的時候,因為我剛開始做測試的時候就是做ui測試,這一塊回答得相對順風順水,不過依然還是有遺漏,如同他提問完後我的沉默一樣,我在回答的時候,只要他覺得回答得還行,他就沉默著等我說下一個測試設計點,緊跟著沉默一秒鐘到兩秒鐘,意識過來,然後我會回答下一個我想到的點,這一秒鐘兩秒鐘,既是彼此等待對方打破沉默的優勢談判的特點,同時,於我而言,也是表現我在思考的時間,對我是有百利而無一害,但是,這種沉默如果持續時間過長,就要當心了,可能會由於過於安靜的空氣引起自己內心的恐慌,當然,我不會,因為至少那個時候,我已經知道沉默的意義,而等待超過三秒我回答不出的時候,我會選擇和他直接對視,然後告訴他,可能我只能想到這些,而此時,也相當於向他求助,他會很友好地告訴你你回答得如何,或者很友善地開始引導你做出更多的考慮。
他問我,對於我在上一家公司第一個項目的了解程度,我很誠實地告訴他,由於那時候對測試的一竅不通,也對工作相對生疏,我只對自己負責的模組有較多的理解,並沒有去學習整個項目的架構,而我在該項目待的時間比較短,也沒有允許我考慮到去學習整個架構,於是他問我,作為ui team的工作者,有必要去熟悉了解整個架構嗎?這個問題,說真的,我不知道,但是我不能直接這么回答,畢竟我已經有較長時間的工作經驗了,這個問題理所應當去思考。我稍微想了一會會,然後說,如果對於工作內容來說,應該沒有太多必要,畢竟架構了解起來可能花費很長時間,而對自己測試範圍可能幫助不太大,但是要把測試做得更好,理解整個項目還是很有幫助的,它可以擴展測試的思維,讓自己的測試進行得更加全面,而且可能會根據整個項目的架構,找到一些潛在的或者邊緣性的問題。他點點頭,表示對這樣的回答還算滿意。
最後,拿出一個小細節開始問測試用例的設計,有一個日曆控制項,選擇日期這一塊的測試怎么做,我問清楚了沒有from date to date和手動輸入或者複製黏貼等情況之後,說實話,腦袋一片空白,這還要測什麼?測2月有沒有29號?他在提問一開始就說清楚了,
這個日曆就是系統日曆,難道我要懷疑係統日曆有問題么?瘋了瘋了,這個問題究竟在考什麼?能不能不選擇,以及是不是只能選擇今天,選擇未來的某天或者過去的某天是否可行?這幾個點說完後,我覺得我真的要徹底沉默了,因為腦子裡根本想不到任何東西了,於是他提醒我,是不是應該考慮時區?對,還必須考慮日期顯示格式,我幾乎脫口而出,也許我的莽撞吧,他笑了,也點點頭,是的,格式,還有呢?國內外時差的存在,是不是也讓我們需要考慮呢?在我說完了我覺得可能需要考慮的一切的時候,他突然問我,那如果時間要存儲在資料庫里,你覺得是統一存儲然後用代碼進行各個國家時間的轉換還是存儲的時候就先轉換好?
問到這個問題,我簡直要跳起來了,老三吖老三,必須謝謝你吖,你閒著沒事蛋疼地去用convert.datetime()將陽曆的3月29號轉換成中國的農曆,還抱怨vs的bug,讓閒著沒事的我無聊到上網去搜尋c#代碼怎么實現陰陽曆轉換。我說,應該統一存儲然後用代碼的方式去進行轉換,然後他問我用什麼方式呢?我說,具體我方式我不記得了,不過前幾天我朋友遇到過日期轉換的問題,雖然不是各個國家,僅僅只是中國的陰陽曆轉換,上網的時候我有看到 vs自帶了一個dll,叫system.globalization,雖然沒嘗試過,不過我想,可能這個方法行得通,他笑著說,很不錯,這可能是個辦法,不過,就我知道的,vs裡面有一個utc可以做到。
他看了看手機時間,一個小時多一點點,他笑著說,好了,我們的面試就到這裡,整體還是很不錯的。在他送我出門的一段不長的路上,我向他打聽面試的結果什麼時候可以知道,他說會儘快。於是微笑著,我們告別了,不過前腳剛走不久,就接到電話,告知面試通過了。說實話,很久沒有遇到這么happy的面試了,雖然整場面試中說的中文不多,卻感覺是那樣的輕鬆。其實,很多時候,很多事情,真的需要有人稍稍點撥一下下,稍稍作出引導,這樣,我就會有無限的思緒湧出來。