2015/02/13

合格的 Qualified Software Tester

我的朋友 David Ko 在 FB 上轉貼了一篇 yunmu.wgl 寫的《新时代的测试工程师》,裏面說:...重新树立新时达的测试工程师形象,个人认为得做到以下几点:
1.写得了代码
2.抓得住bug
3.看得了产品
4.懂得了用户


不過,我覺得 yunmu.wgl 的觀點不夠完整,所以寫這篇文章回應 David Ko。只是在寫的過程又找到 David Ko 寫的這篇《如何找好的測試人員》,裏面也寫到 David Ko 找 Tester 的思維,所以我在這篇文章一併回應自己的想法。

簡單地說,我認為可以用三個抽象的面向:觀念(Concept)、領域知識(Domain Knowledge)、工具(Tool),來建構不同產業的不同職位。

這三個面向中,我認為以觀念(Concept)最重要。但這個部份,是 yunmu.wgl 的論述中所欠缺,但 David Ko 沒有直接提到的。

且聽我娓娓道來。

先說 David Ko 對 Tester 的要求


David Ko 在《如何找好的測試人員》一文說:
以下這幾個面向是我以前老闆強烈要求的
1. 快速學習的能力
2. 主動積極的態度
3. 創新能力
4. 如何克服低潮


但 David Ko 所強調的這四項,就我來看卻可以同時適用於不同的職務。難道 SW RD 不需要「快速學習的能力」嗎?難道 Sales 不需要知道「如何克服低潮」?PM 不需要有「創新能力」?

我當然知道這不是 David Ko 的本意,因為就前後文來看,也確實不是這個意思!

所以我想強調,這四項對 Tester 的要求並非 Tester 的真正要件!反而而比較像是一個團隊的文化與風氣,以致於候選人需要具備這些特質與技巧,才能融入這個團隊,而非僅針對 Tester 這個職務的特定要求。

也就是說,即使是 SW RD 或是 PM,也同樣需要這些特質。

再說 yunmu.wgl 對 Tester 的要求


如果用前面我對 David Ko 觀點的疑問,反觀 yunmu.wgl 對 Tester 的四項要求:...重新树立新时达的测试工程师形象,个人认为得做到以下几点:
1.写得了代码
2.抓得住bug
3.看得了产品
4.懂得了用户


我同樣也發現 yunmu.wgl 的這四項要求仍不夠完整。就以我們公司目前 ODM 專案的成員來說:從 SW RD、SQA、再到 SWPM,都能做到「写得了代码」(SWPM 以前就是 SW RD)、「看得了产品」、「懂得了用户」,只是工作中應用的程度不同。至於「抓得住bug」,就實務上來看,某些 Bug 還得請 SW RD 協助後 SQA 才有辦法抓出來,難道表示 SW RD 抓不住 bug?

我當然相信 yunmu.wgl 應該不會有這樣的想法,只是單純以 yunmu.wgl 過於簡單的要求來描述 Tester 時,就是會有偏移。

所以,我才會對 David Ko 說 yunmu.wgl 對 Tester 的要求不夠貼切。

職務三個面向


我前面說到職務三個面向是:觀念、領域知識、工具。

「觀念」(Concept):是每個職位最重要的價值與思考方法。很接近 yunmu.wgl 說的「2.抓得住bug」和「1.写得了代码」。

「領域知識」(Domain Knowledge):是每間公司所在產業的領域知識、以及每個職位在產業的知識。很接近 yunmu.wgl 說的「3.看得了产品」和「4.懂得了用户」。

「工具」(Tool):是每個領域的不同職位所使用到的東西都是工具。從英文、程式語言、測試設備、表單。

舉例來說,我在大學修過基本會計學,但同樣是會計理論,在一般民間公司的會計、和銀行會計、或政府部門會計,會計所需的「觀念」和使用的「工具」的差異可能不大,但「領域知識」的差異卻導致最基本的會計科目就完全不同,更別說是核算、計帳、會計憑證了。

再舉例來說,防毒軟體和嵌入式電腦都是軟體,但因為產品的歷史演進、應用重點、產品架構、特徵、使用方式都不同(「領域知識」不同),以致於測試的重點、邏輯、原則、知識都很不同(工具也不同),但對 Tester 的「觀念」卻差異不大。

所以這三個面向,是我解釋不同公司的不同職位、或不同公司的相同職位的方法。

但如果從這三個面向來看 David Ko 的要求時,我發現:
  1. 「快速學習的能力」:1/2 屬於「觀念」;1/2 屬於「工具」。人必須有學習的「意願」後,才可能在經過訓練後習得「快速學習的技巧」。而我認為「意願」屬於「觀念」,而「快速學習的技巧」屬於「工具」。
  2. 「主動積極的態度 :屬於「觀念」。這個要求在不同域領的每個職務都需要。
  3. 「創新能力」:1/2 屬於「觀念」;1/2 屬於「工具」。人必須有創新的「意願」後,才可能在經過訓練後習得「創新的方法」。而我認為「意願」屬於「觀念」,而「創新的方法」屬於「工具」。
  4. 「如何克服低潮」:屬於「觀念」。這個要求在不同域領的每個職務都需要。

從我的整理來看,David Ko 雖然沒有使用這三個面向來描述他對 Tester 的要求,但他的要求幾乎都落在我強調的「觀念」上,只是我們的表述方式和表述的重點不同。

「觀念」最重要


我曾在《貓在鋼琴上昏倒了 Cat collapsed on the piano》一文說明了我如何挑選一個 Tester,最後我選的人其實還是不大有 Tester 經驗的人。

為什麼我會挑了一個沒有 Tester 經驗的人擔任 Tester?最主要的原因是她有「觀念」!

我所謂的「觀念」簡單地說,就是一種思維,或者說,是一種能很快切入主題的思考方法。

所以,當我一問應徵者「貓在鋼琴上昏倒了,你怎麼想這個問題?」時,只有她能很快地回答「貓在什麼鋼琴上昏倒?」、「貓昏倒前做了什麼?」、「貓是怎麼昏倒的?是不是有可能只是睡覺呢?」、「別的貓也會在鋼琴上昏倒嗎?」...,所以我錄取了這位應徵者。

因為我知道自己只需要教她必要的「領域知識」和「工具」,而不需要特別花時間教她如何思考如何做好目前的工作。

事實也證明,在經過適當訓練後,證實這位應徵者確實是一位稱職可靠的 Tester。一直到了我離開這間公司後的第四年,這位應徵者仍然一直留在 Tester 的位子上,繼續稱職地工作。甚至誇張一點的說,我留給這間公司最大的供獻是幫它們找到了一位好的 Tester。

「觀念」的重要性


為什麼我如此重視「觀念」?

因為當我看到某些 SQA 不合格時,不是因為他們沒有「領域知識」或「工具」,而是因為「觀念」不到位。當一個人的「觀念」不到位時,他們沒有辦法用對的方式思考,這也導致他們的行為表現在一段時間後會有行為偏差,而不自覺!

重點在沒有自覺!

當我深究這些不合格的 SQA 後,發現他們缺少了最重要的 SQA 精神,以致於他們以為自己在做 QA、但實際上只是 QC!

因為他們並不知道為什麼 SQA 要做這件事、而不做那件事?為什麼 SQA 要先做這件事、而不先做那件事?更不知道要如何理解目前的問題,而繼續期望舊的工作方法能解決新的問題。

我自己認為,只要是資質符合自然分配(在 3 個標準差以內)的應徵者,在進入某個領域後,都不難學會領域及職務所需要的「領域知識」和「工具」,反而是「觀念」最難培養,更難學會!(我對學會的定義:是長久的行為改變。)

我甚至發現,「觀念」中的某部份是經由天生或是後天長時間培養的,所以我才會寫了一篇《貓要怎麼學會游泳?回應噗友 BigNews》,因為並非每件事都能在用心學習後就學會。

以我自己為例


像我一直到最近三個月才發現,自己之所以能扮演好 SQA 的角色的原因之一,極可能是因為我有「非預期強迫症」。

在工作中,只要遇到預期以外的結果時,我就會不由自主地想要知道為什麼?所以當我聽到一個沒見過、不知道的專有名詞時,就會上網去查詢,或是找 Wiki,然後當我下次再遇到時,就不會再被困擾,我就因此從不懂的事情中學會很多不同的知識。

這個「症頭」也會讓我一直思考 root cause,同時懷疑我的所見所聞,然後一直問「真的嗎?」然後做更多的事,來證實/否認自己的假設。

說到底,我的工作其實就是在這個「問題 -> 懷疑 -> 假設 -> 證實/否認 -> 等待下一個問題 -> 懷疑...」的循環下,不斷地累積了許多的知識、方法與經驗。

換句話說,當別人給了我一個框框時,我會問一連串的問題:為什麼需要有個框框?這個框框的用處?這個框框的極限?...

我最記得 11 年前找到的一個 bug,是某個 DVR 中設定閏月的問題。那時 RD 說他們已經完成了這個功能了,所以,我花了一點時間,先了解如何設閏月後,開始假設可能出現問題的地方,然後設計了一個劇本來測試閏月的功能。才半天,我就已經報了一堆 Bug,我當時的主管很好奇為什麼我能很快地測出來?

因為我的想法大多數的人不同,所以我的行為也和其他人不同:我假設設計的點可能都有問題,然後我就設計許多 Test Case 去檢驗自己的每個假設。(後來我才知道,原來這個精神就是 TDD 的做法)。

反過來說,如果你已經認定不會有問題,那麼即使你看到問題了,這些問題也會從眼前過去。

原來,Tester 的「觀念」很簡單,就是要會做假設,然後不受人影響地思考,接著用實際的行動去檢驗這些假設。

但即使 Tester 的「觀念」如此簡單,要在工作中貫徹這個觀念卻很不容易做到!

因為,你雖然知道有某些觀念,但要自己放棄原本的想法去接受新觀念卻很難,以致於我們會發現某些人即使努力克服想法了,但他們在某些職務上的行為仍然格格不入,就投入和產出來看是事倍功半。

小結


在這篇文章,我用抽象化的三個面向:觀念、領域知識、工具,來描述不同產業的不同職位。大家可以用這個矩陣去代換不同產業內的不同職務,就可以了解這些到達這些職務的路徑。

利用這個矩陣,大家可以從自己擁有的觀念、領域知識、工具,客觀的分析最適合自己的產業與職業。我之所以會當 SQA,就是利用這個矩陣所找出最大效益後的選擇。

但最重要的還是「觀念」!

  1. yunmu.wgl -《新时代的测试工程师
  2. David Ko -《如何找好的測試人員

沒有留言:

張貼留言