從事軟體測試應該具備的基本功底

  • 2019 年 11 月 22 日
  • 筆記

筆者針對測試從業者必須掌握的基本功做了個分層:

1、作業系統層

在這個層面,至少需要去了解作業系統類型、生產廠商、劃時代的版本、典型的應用場景。

一般而言,作業系統類型可以分為:unix、linux、windows,咦蘋果系統去哪了? 蘋果系統的核是unix的一個分支。當然了要是細分下去會更多,大家大體了解這三種足夠(也可以把mac os列為獨立的一種、android則自動歸為linux系列)

從應用的場景又可以分為:桌面版本、伺服器版本、行動版本,獨立生態的蘋果,對於每種所佔據的市場地位,也是眾所皆知的,如果你不清楚,那你平時就應該多多看看相關科技資訊資訊了。

從作業系統生產商發行版本來看:

windows分兩大類: 以往桌面版的windows系列和伺服器版本的Server系列以及現在桌面、移動合一的windows 10。

unix:這個就比較多了,例如AIX(工作站、大型電腦常用)、原sun發布的Solaris、惠普發布的HP-UX、A/UX(即蘋果系統)

linux:這個就更多了,例如centos、fedaro、ubutun、debian、opensuse、redhat、kali等等,中國的就不列,大家自己去搜索下。

不管是哪種類型的作業系統,您都應該去了解下POSIX,POSIX標準定義了作業系統應該為應用程式提供的介面標準,是IEEE為要在各種UNIX作業系統上運行的軟體而定義的一系列API標準的總稱,其正式稱呼為IEEE 1003,而國際標準名稱為ISO/IEC 9945。

通過對POSIX的了解,你能更深入的了解什麼是作業系統。

2、協議層

協議是什麼? 協議就是遊戲規則,如果你不具備打破規則的能力,那請遵循遊戲規則,否則沒人和你玩。

對測試從業者而已,需要掌握:

  • 網路協議由誰定義?
  • 在哪裡可以查閱協議定義原文?
  • 在哪裡可以查閱中文版協議定義原文?
  • 測試人員應該掌握哪些協議?

下面回答下上述四個問題:

幾乎所有的網際網路標準都收錄在RFC(Request For Comments)中,RFC是一系列以編號排定的文件。文件收集了有關網際網路相關資訊,以及UNIX和網際網路社群的軟體文件。目前RFC文件是由Internet Society(ISOC)所贊助發行。

RFC原文你可以從這裡獲取:https://www.rfc-editor.org/

RFC中文版你可以從這裡獲取:http://man.chinaunix.net/develop/rfc/default.htm

對於協議的掌握,一是掌握協議機制;二是協議報文格式;三是抓包分析工具。對測試人員而言,必須掌握的機制是:

  • IP/TCP三次握手機制。

必須掌握的報文格式:

  • IP協議
  • TCP協議
  • HTTP協議

抓包分析工具:

  • 首推wireshark
  • 其他的比如httpWatch、fiddler

對於具體的資訊請大家自行去找相關文檔查閱和實踐。

3、基礎服務

這裡大致分幾個類,大家就清楚了,我們應該掌握:

  • Web Server類,例如tomcat、apache、weblogic、IIS等等
  • 資料庫:例如Oracel、MySQL、mongodb等等
  • Docker類容器等等

當然還有其他的,不過這些就算沒直接接觸,應該要去了解:

  • 其應用場景是什麼樣的
  • 其部署方式及可能帶來的性能影響
  • 同類型基礎服務間的優劣對比
  • 關鍵性的配置

在這個基礎上,大家根據自己踩過的坑再繼續發揮下,會有更多的收穫。

4、編程能力

在這裡所說的編程能力,不僅僅包括C、C++、java等等這類的開發語言,同樣包括SQL、html等等。

從軟體測試招聘的要求和未來發展來看,深入掌握一門程式語言是必備的基本能力,同時對各種語言能有所了解、甚至理解也將成為優勢。

從編程角度和職場要求來看,測試人員應該掌握以下幾個方面的能力:

  • 熟練掌握一門程式語言,並能將該語言服務於測試過程效率的改進
  • 了解常見的演算法的時間消耗和空間消耗
  • debug分析能力
  • 軟體工程思想

當然還有其他能力,但我想,上述四種能力是最為基礎的,也是最為核心的。對於上述幾種能力的掌握推薦基本書吧:

編程方面,推薦xx核心編程,例如python就推薦: 《Python核心編程》

演算法方面:《演算法導論》

debug能力:這個要靠實踐中積累了,需要各種知識的綜合應用和經驗積累。一般來講三板斧:

一是print;二是log(日誌);三是IDE自帶debug功能(單步調試等)。

軟體工程思想:比較強力推薦林銳博士的《軟體工程思想》通俗易懂,語言犀利,深刻透徹。

5、基本命令

這裡的基本命令是指windows、linux、unix等作業系統下的常用的命令,對於這些命令我們需要掌握哪些呢?這裡我們不列舉具體的命令。

下面我們說明下要掌握的命令分類和其典型代表命令:

  • 系統管理類,例如用戶管理、進程管理、記憶體、CPU監控等等
  • 文件管理類,例如文件比較、 創建、查找、拷貝、刪除、賦權等等
  • 磁碟管理類,例如目錄創建、刪除、掛載等等
  • 系統設置類,例如環境變數設置、計劃任務管理等等
  • 備份壓縮類,例如文件備份、各種格式文件解壓縮等等

當然還有其他分類的命令,但上述這些是日常工作中,必須會的。

6、軟體測試

這個就太多太多了,簡直無以言表。我試著就軟體測試進行濃縮,僅供大家參考:

  • 博弈論
  • 動態規劃
  • 求同存異

思緒良久,沒有嘗試出通俗易懂的表達方式,也不想闡述過多的理論或細節,最終選擇了上述幾個關鍵詞。

下面我介紹下這兩個關鍵詞的含義,我想應該可以給大家一些發散的原點。

博弈論:主要研究公式化了的激勵結構間的相互作用,是研究具有鬥爭或競爭性質現象的數學理論和方法。

動態規劃:是求解決策過程(decision process)最優化的數學方法。

求同存異:是周恩來處理複雜關係、解決複雜矛盾一以貫之的思想方法和行為模式,中國外交政策之一。

在反覆回顧過程的測試實踐和對測試領域未來的發展,認為這三個詞能代表測試領域的特色[註:這三個詞也可以用於其他任何領域吧。萬金油,哪都可以用^_^]

人生苦短,我做測試!

7、測試技術

測試技術應當說是測試實踐過程中最為簡潔的事了,但卻成為了測試人員進一步提升的攔門虎,有些意外,有些無奈,讓人很迷茫。

這裡簡單的說明下測試技術方向的想法,要想掌握測試技術,首先得了解以下分層:

  • UI級自動化測試,模擬用戶真實操作,改進測試過程的效率
  • 介面級自動化測試,驗證系統、服務、模組間的調用關係及響應數據
  • 性能測試,採集系統性能指標、挖掘系統瓶頸,預估系統未來擴容的可行性
  • 安全測試,挖掘系統安全漏洞,規劃系統、數據等安全
  • 數據測試,過濾臟數據,確保數據的有效性、精確性,挖掘數據的價值
  • 其他可自動化測試的

提供測試技術實施成功率的幾個重要保障:

  • 定義自動化測試的邊界,即抓住最典型的用戶場景和異常場景,忌通吃
  • 做好自動化業務場景對應的元素定位技術分析
  • 定義好自動化測試執行方式,即全自動調度測試、半自動、手工觸發方式
  • 做好自動化測試數據規劃,數據驅動流程是一種很好的方式

總結

基本功底先分享這麼多,後續還有關於基本功底的分享,例如測試數據規劃、過程度量等等。