好的軟件少不了測試? | 文章 – 滙豐機滙

tl;dr, 沒有測試談不上好軟件!

軟件編碼的質素和一間公司發展的關係,在之前的文章《Code 寫得好對公司有用嗎?》已有討論,那麼有什麼因素會左右編碼的質素?其中一樣就是軟件測試。

軟件測試(Software testing),指的是透過測試以作鑑定軟件的品質,及早找出軟件中的程式錯漏,並驗證軟件是否適合使用。軟件測試主要以運行軟件的某部分元件,評估該部分是否正常運作或合乎一些基本標準,如:

- 符合軟件設計及開發要求;
- 正確地回應各類型的輸入;
- 在可接受的時間內執行所需功能;
- 軟件功能可使用度高;
- 可以在預期的環境中安裝和運行;
- 可以達到持份者期望的總體結果;

每一個軟件中的元件,理論上都可以有無窮盡可行的測試,但資源並非無限.。所以實際上,軟件測試會傾向有策略地利用現有的時間及資源,去選擇一些比較有價值的可行測試,從而去嘗試運行該軟件並找出程式的錯漏。

不少軟件公司都會聘請專責品質保證 (Quality Assurance,縮寫為 QA) 的員工,在軟件推出之前進行一系列的人手測試。不過,這種比較傳統的測試方法往往有不少問題。

一是若果軟件本身規模大的時候,開發一方就要投放比較多的人力資源,以作出較快而全面的測試;而當每一個程式錯漏出現,品質保證人員和開發人員都必須一一檢視。

二是因為每一次重大的軟件更新,都必須經過全面的測試,才能確保軟件沒有因為更新期間編碼上的改動而產生紕漏,結果往往花費很多時間才能將新的版本推出。

近年DevOps的出現,就嘗試解決QA的工序冗長問題。在DevOps的環境下,開發人員 (Dev)、技術運營(Ops)和品質保證並非各自運行,而是傾向在每一次程式發布都有緊密合作。DevOps 希望藉著採用敏捷(Agile)般的開發方式,減少每一次編碼的變更範圍,使得每次部署不會對軟件生產系統造成巨大影響,軟件得以平滑的速率逐漸生長。開發人員亦使用各種自動化的測試,配合持續交付( Continuous delivery,縮寫為 CD)和持續整合( Continuous integration,縮寫為 CI),確保軟件本身不受編碼改動影響之餘,亦能將QA繁瑣重複的工作分攤, 減少每次部署出錯。

與傳統開發方法那種大規模的、不頻繁的發布(通常以「季度」或「年」為單位)相比,敏捷方法大大提升了發布頻率(通常以「天」或「周」為單位) 

以下三種測試是軟件開發中經常利用到的自動測試模式,包括:

  1. 單元測試 Unit test,是針對軟件組成的元件進行測試,其目的在於檢驗軟件基本組成單位是否正常運作。
  2. 整合測試 Integration test,是將程式模組採用適當的整合組裝,並對系統的介面及整合後的功能進行測試,其目的在於檢查軟件單位之間的介面是否運作正常。
  3. 功能測試 Functional test,是針對軟件功能進行測試,其目的在於檢驗軟件是否正常運作,並是否實現業務上的要求。

單元測試的好處在於能在很早期的開發階段就能夠發現問題。它能夠將其所針對的元件中從整個軟件架構分離,並提供嚴謹的測試以確保該元件運作正常。開發人員能夠利用單元測試,在編碼的層面上自動測試每個單元最基本的功能,而毋須品質保證的人員親自檢驗。

而基於這種由下而上的結構,各個元件已經經過單元測試,而系統就能夠透過整合測試去專注檢驗元件之間是否正常運作,而功能測試則能在各部件間得以確保有效整合之下,集中在用家的層面測試軟件是否符合原有的軟件設計。

這三種測試在開發的不同時段都各有需求:

  1. 當軟件進行開發時,測試主要為了配合開發人員工作,盡快從系統得到回饋,所以多以單元測試為主;
  2. 在預備環境,這階段主要偵測問題,如問題發生,則停止軟件部署。通常所有測試皆符合此階段;
  3. 在生產環境,主要會運行如冒煙測試(smoke test)等比較快速的功能測試,在有限的時間內廣泛涵蓋測試軟件的主要功能。

所以我們可以說,雖然編寫測試所花費的時間不短,但對於持續開發來說,確是能夠透過預防因為編碼改動而產生的問題,來減輕長遠的技術債項,加快開發的速度,大大減輕開發的成本。


我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software