從事軟體測試應該具備的基本功底
- 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級自動化測試,模擬用戶真實操作,改進測試過程的效率
- 介面級自動化測試,驗證系統、服務、模組間的調用關係及響應數據
- 性能測試,採集系統性能指標、挖掘系統瓶頸,預估系統未來擴容的可行性
- 安全測試,挖掘系統安全漏洞,規劃系統、數據等安全
- 數據測試,過濾臟數據,確保數據的有效性、精確性,挖掘數據的價值
- 其他可自動化測試的
提供測試技術實施成功率的幾個重要保障:
- 定義自動化測試的邊界,即抓住最典型的用戶場景和異常場景,忌通吃
- 做好自動化業務場景對應的元素定位技術分析
- 定義好自動化測試執行方式,即全自動調度測試、半自動、手工觸發方式
- 做好自動化測試數據規劃,數據驅動流程是一種很好的方式
總結
基本功底先分享這麼多,後續還有關於基本功底的分享,例如測試數據規劃、過程度量等等。