嗨~ 我是 Robin
: )
這系列主要是我讀關於這本書 Google 的軟體測試之道 的一些讀書感想,
所以內容可能會含有大量我個人的想法。
如果有與你的想法相違背,都以你的為主,
但是希望你可以與我分享。
如果你跟我一樣是 QA 亦或是你對 Google 怎麼測試也感到好奇,
那也許你可以看看我的心得文與我討論你的想法,
(如果有興趣也可以自行購買該本書,畢竟我寫出來的可能會有個人的誤解)
那麼~ Let's go~
品質等於測試?
品質不是被測出來的,
什麼意思?
如果一個產品在設計階段就是錯的了,品質就一定不會好。
書中範例: 想像一下如果軟體產品像是汽車一樣,當設計階段時就已經是錯誤的方向了,當產品售出後大量召回品質有問題的產品,那代價是多麽昂貴。
個人想法: 我認為範例想要解釋的是說,這已經不是測試的問題,而是整個產品設計的問題,品質差這件事已經不是被測出來的,而是設計階段就有的問題。
品質不是被測出來的,但是沒有測試不可能開發出有品質的軟體。
原因是連測試都沒做你如何保證你的軟體具有很高的品質呢?
"品質不等於測試,但是沒測試沒辦法確保品質。"
滿微妙的關係 xD
在說 Google 怎麼做之前,
以我在的國家(台灣)而言,相信的多數的軟體公司型態大部分都是,
(個人見識淺薄但是聽到大多數都是這樣的形式,如有冒犯我先道歉QQ)
新功能:
RD 開發-> 丟給QA/QC測 -> 產品出去爆炸 -> 找QA/QC 怎麼沒測到
修 Bug:
RD 修-> 丟給QA/QC測 -> 修好出去發現新 Bug 再爆炸 -> 再找 QA/QC 怎麼沒測到
我個人認為這樣一來一往成本很高,而且有多少 QA/QC 是會進去看 RD 寫的 Code ?
我自己"之前"是都沒在看(但是大多數原因都是因為看也看不懂QQ),
大多數都是看個需求規格書,就開始測了對吧?
試想看看如果 Google 也是這樣做會是什麼樣的情境? xDD
那接著就要分享書中提到 Google 怎麼做的,
停止開發和測試的隔離對立,他們應該並駕齊驅,在把開發過程中加入測試,
完成每段程式碼,就寫相對的測試,寫更多程式碼就應該要有更多的測試,
原因是什麼?
第一個原因:
Google 專職測試人員數量非常稀少,那只有誰能去做? 就是開發人員自己
第二個原因:
相信你已經知道答案了。
試想一下回歸剛剛的情境,假如產品出了問題,第一個跳出來的肯定是寫出導致這個問題的開發人員,而不是沒有測到這 Bug 的測試人員。
(雖然身為測試人員的我其實說真的會非常自責QQ)
這意味著品質不是檢測,而是一種預防行為。
品質則是開發階段的問題而不是測試的問題。
那反觀我上面提到看到大多數的情境,似乎就不太合理,為什麼呢?QQ
(你知我知就不再多說,我們一起進步)
Google 如何提倡這種開發人員自行寫測試的行為?
書中提到:
Google 從 Code review 階段留言說 "你的測試在哪兒?" 再到廁所裡貼著提醒開發者的最佳實踐。
測試是開發過程中不可缺少的一部分,
當開發過程和測試一起攜手聯姻時,就是獲得品質的時候了。
測試不是被測出來的,但是沒有測試不可能開發出有品質的軟體。
應為:品質不是被測出來的,但是沒有測試不可能開發出有品質的軟體。
我個人認為這樣一來一往成本很高,而且有多少 QA/QC 是會進去看 RD 寫的 Code ?
有些公司不允許 QA access source code QQ
而且每個 QA/QC 都應該要去看 Code 嗎?
第一個原因:
Google 專職測試人員數量非常稀少,那只有誰能去做? 就是開發人員自己
這個原因感覺很像如果專職測試的人員很多,開發人員就可以不用做測試
應為:品質不是被測出來的,但是沒有測試不可能開發出有品質的軟體。
感謝勘誤
有些公司不允許 QA access source code QQ
而且每個 QA/QC 都應該要去看 Code 嗎?
我覺得要看是基於什麼原因欸,
如果 QA 沒辦法 access source code,又怎麼能夠幫 RD 更快速的解決問題?
另一個問題是如果可以 access 身為 QA 的人有辦法更快速的幫 RD 找出問題嗎?
甚至講到測試,如果沒看過 code 怎麼又能做出完善的 Test case?
我認為一個好的測試人員應該要能夠看懂,關於 QA/QC 的職責應該是不一樣的,但是在目前大多數的公司看起來是混合使用,可參考這篇,另外下篇也會提到關於 SWT(Software Engineer) 和 SDET (Software Development Engineer in Test) 與 TE (Test Engineer) 在 Google 的角色分配。
這個原因感覺很像如果專職測試的人員很多,開發人員就可以不用做測試。
這樣是好的作法嗎?
一個 Sprint RD 做了10個 feature,QA做了10個相對的測試,
下個 Sprint RD 做了10個 feature,QA再做10個相對的測試,再加上維護原本的10個測試。
週而復始 QA 來得及撰寫新 feature 的測試嗎?
還是忙著維護原本的個測試?
再者 RD 不寫測試直接丟給 QA 來來回回造成的成本應該比RD自己寫測試來的高很多吧?
換個說法如果 RD 寫了測試,測試出錯就知道是他改的部分有問題,甚至不用到QA手上就可以在本地端的環境知道他寫的程式碼有問題。