閱讀周記 - 測試人員如何面對複雜的軟體?

現在的軟體複雜度已遠遠超越人的理解能力

身為一個測試人員 該如何面對這樣的情況呢?

這一篇的心得來自於 微軟測試之鑰 微軟一線測試專家技術精華  這一本書的第一章第一節,以下簡稱為此書

拍攝於此書的第 1-2 頁

 此書作者由 Spolsky 提出「抽象漏洞定律」的經驗法則帶入軟體是很容易出現漏洞的

ps : Spolsky 是 trello 的創建者,想知道更多到 wiki 上看看他的相關資訊~

抽象漏洞定律:「所有不平凡的抽象,在某種程度上,都存在漏洞。」


節錄自此書第 1-4 頁

我想 Spolsky 想表達的是,雖然抽象的語言提升了開發者的生產力,但開發者如果對於抽象概念並不熟悉的條件下,是很容易設計出錯誤的程式碼或架構,進而容易出現漏洞

此書作者再提出另一件事

軟體技術只是軟體複雜性的一部分。


節錄自此書第 1-4 頁

這句話想表達的是軟體技術只是軟體的其中一部份,專案相關人員經過「研究」、「創造」、「應用」後選出目前最合適完成專案項目所需的技術,在「研究」、「創造」、「應用」的過程中,團隊就會遭遇到許多的挑戰與困難。

光是在需求釐清其實就已經是一個困難的挑戰

圖片來源: The Expert (Short Comedy Sketch)

以上討論不難看出,軟體複雜度包含技術、領域、設計等多個方面。


節錄自此書第 1-5 頁

此書作者簡單的陳述一些基本態度和方法來讓測試人員知道該如何面對這樣複雜的軟體,我把它條列成以下幾點

  • 多方管道來理解被測項目

  • 重複實施測試

  • 累積與學習測試技術

  • 拆解被測項目(建立產品模型)

  • 不可對「小量變更」的程式碼掉以輕心

  • 利用自動化測試

接下來我針對上述的 6 點來稍微描述一下我的心得和想法

多方管道來理解被測項目

在面對一個複雜軟體或複雜的需求時,我們沒辦法一步到位,無法直接開發到完整,更無法直接測試到完整,甚至有時候在理解需求和軟體時可能會造成一些偏誤。

為了更加了解軟體與需求,測試人員需要與多方合作,包含PO、RD、UI/UX以及測試同事等,透過多方面向來理解被測項目的內容是什麼,哪些部分是需要被測試的,哪些部分事需要多加注意的。

重複實施測試

因為軟體的複雜度,大多數的測試人員在專案的初期都不會太了解軟體,擬定出來的測試策略和項目都很有可能帶有錯誤的理解。

一個注重實際效益的測試人員,通常會承認他自己的測試方案是不完備的,所以他們會重複的實施測試,並透過持續的測試過程來思考如何加強現有的測試方案。

累積與學習測試技術

在這個軟體複雜度極高的世界中,「窮舉」測試是不可行的,如果給測試人員一個軟體,我相信專業的測試人員可以列出無限個測試項目,但列出這麼多的測試項目是有意義的嗎?

題外話 : 某一部分的公司會要求測試人員列出N個測試項目來納入他們的KPI,這跟要求開發人員寫幾行程式碼來列入KPI一樣沒有意義。

所謂的測試技術,就是可以使用他來評估軟體,測試技術五花八門,但任何一種測試技術都有「無法正確評估軟體」的風險
所以測試人員必須掌握、學習、累積多種測試技術,綜合運用他們,並隨著專案的不同去挑選適合的測試技術來綜合使用,如此一來才較能夠避免重大的測試遺漏。

跟開發人員一樣的概念
掌握的測試技術越多,那你的測試廣度就越廣。

拆解被測項目(建立產品模型)

對於複雜的項目進行拆解處理,是人們常用的作法,也是敏捷開發中會使用的方法

測試也是一樣,針對複雜性高的軟體,測試人員需要將被測項目拆解成各個模型,藉以突出哪一些部分是重要的、必須的。

邰曉梅老師的書中有特別講述如何Modeling產品,之後會再將她的文章內容寫成自己的心得給大家參考參考~

不可對「小量變更」的程式碼掉以輕心

在大規模的軟體中,對於小量變更的程式碼絕對不能掉以輕心,因為對於開發者、Code Reviewer、Tester 來說,都難以預料這段程式碼被使用的情境和執行後的影響

例如,程式設計師要修改網頁瀏覽器(如IE、Chrome、Firefox等)排版引擎的一個排版缺陷,通常需要執行大規模的的回歸測試。
因為全世界的網頁千差萬別,很難預測這段程式碼會排版成何種網頁,也很難預測這段程式碼是否會破壞某些精心編排的頁面,只有執行大規模測試,才能保證程式碼變更的正確性。


節錄自此書第 1-6 頁

PS: 我相信很多人應該有因為某些小量變更而不進行測試直接上線之後而造成悲劇的經驗。

利用自動化測試

自動化測試是很值得讓測試人員使用的工具,他可以執行簡單而重複性高的測試內容,這就是電腦能夠且擅長做的事。

人類對於重複性高的動作容易厭倦,容易犯錯,在面對複雜度高的軟體勢必有更多的地方是重複性高且簡單的動作是可以交給電腦來執行和驗證的

但並不是每一項東西都能夠或是必須使用自動化測試,測試人員應該謹慎的評估哪些是需要被自動化測試的,哪些是手動測試比較好的。

結語

這本書真的很棒,光是第一章我就覺得十分的有感,未來將會再針對自己很有感覺的部分進行整理和心得分享!!!

在這裡想問大家 1 個問題

大家是用甚麼樣的心態來執行測試的呢?

以上 感謝各位大大的觀看 <(_ _)>

如果內容有誤,煩請糾正~ 謝謝