軟件測試該學習什麼技能?

開發工程師,何爲開發?測試工程師,何爲測試?
從簡單的軟件開發流程談起。 瀑布模型:   計劃→需求分析→設計→編碼→測試→運行維護   計劃、需求是產品的活;設計是UI的活,編碼是開發的活,測試是測試的活,運行維護是運維的活。   開發一詞是指以荒地、礦山、森林、水力等自然資源爲對象進行勞動,以達到利用的目的;通俗的講,就是根據自己掌握的資源,通過自己的技能,完成一項既定的“任務”。   測試,是動詞、名詞。測試行爲,一般發生於爲檢測特定的目標是否符合標準而採用專用的工具或者方法進行驗證,並最終得出特定的結果。多麼生動的描述啊!   如果說開發的任務是建造一座房子,那麼測試的任務就是對房子的材料,設計圖紙(文檔),外觀,抗震性,舒適性等等進行綜合驗證,並得出一份“質檢報告”。   而開發往往對自己的代碼“高度”自信,認爲自己建造的房子就是最完美的,無可挑剔的;而測試往往反其道行之,認爲開發建造的房子肯定是不完美的,肯定是有“缺陷”的,也就是所謂的“破壞性測試”;所以,測試在開發眼裏,就是來“找茬”的;實際不然,測試的目的是爲了更好地驅動開發,做出完美的產品。   而對開發的代碼懷有一種“天生”的質疑,是測試工程師所必須的;正如前文舉開發“造房”爲例,評價一個軟件的是否合格,同樣需要對其進行各方面的測試,不同方面的測試,需要不同的測試方法,甚至不同的測試人員來完成;事實證明,對一個軟件的測試工作的進行的越早,那麼對發現問題並修復所承擔的成本就越低,所以測試工作貫穿於整個項目週期。也正是這一點,決定了絕大多數測試工程師不可能掌握(精通)整個項目週期所要求的測定技能。   因此,測試崗位根據不同的測試方向與技能劃分爲:功能測試工程師,性能測試工程師,自動化測試工程師,測試開發工程師。 測試職位具體劃分 功能測試工程師 想必大多數測試人員都是從功能測試開始做起的,或者至今一直在從事功能測試工作;顧名思義,功能測試也稱爲黑盒測試,產品就像一個黑盒子,我們無需關心其內部構造是怎樣的,只需要對其進行輸入參數,將輸出的參數和預期的參數進行對比,驗證是否滿足需求文檔裏所定義的那樣。簡言之,功能測試的目的就是驗證所測產品的“功能”是否滿足甚至超出產品設計所要求結果的預期;比如,需求文檔裏要求實現一個加法功能,那麼就要通過各個方面來驗證產品是否具備“加法”功能。   因此,功能測試重心就是測試用例的設計。而測試用例的設計,取決於測試人員對產品需求的理解;對產品需求的理解取決於測試人員對業務的“接受”程度。這也是功能測試發展往往會遇到“瓶頸”的原因,過多的項目只不過是在反覆地學習不同的業務;因此功能測試工程師往往要具備一定的測試管理能力,掌握一定的測試策略,發展通道一般是管理方向。   性能測試工程師 產品,實際上是指產品的功能和質量兩個方面。功能是構成競爭力的首要要素。用戶購買某個產品,首先是購買它的功能,也就是實現其所需要的某種行爲的能力。質量是指產品能實現其功能的程度和在使用期內功能的保持性,質量可以定義爲“實現功能的程度和持久性的度量”。   想必大家都聽說甚至經歷過12306網站買火車票崩潰的例子。12306網站也不僅僅滿足於大家能通過它進行網上購買火車票單純這一功能,更需要滿足N多人在使用它同時進行買票且不出錯。這就是性能。性能可以分爲穩定性,可靠性,安全性,易用性,兼容性等等,不同的產品要求的性能也不近相同;比如說公司有些部門研發的滬(深)交易所使用的交易系統,在傳統金融領域,對系統穩定性的要求往往高於其他需求。而相應的性能測試,可以針對不同的性能指標分爲負載測試,壓力測試,併發測試,可靠性測試,基準測試等等。   性能測試往往要求測試工程師不但具備對產品基本的功能以及業務知識,還要對產品所“在”(部署)的環境有必須的瞭解。這就要求性能測試工程師必須掌握一定的系統知識,如服務器硬件知識(CPU、MEM、NETWORK、IO),數據庫(ORACLE,MYSQL),中間件(TOMCAT,NGINX),操作系統等知識。   自動化測試工程師 反覆的手工測試勢必會讓測試人員開始思考人生。工作中幾乎每個測試人員都會遇到過一些重複性比較高,而且必須要做的工作,如迴歸測試,冒煙測試等;顧名思義,自動化測試就是爲了把測試人員從一些重複性高,而且需求變化不大的工作中解放出來;比如web自動化測試,可以通過selenium編寫測試腳本,一次寫完,就可以反覆用到需求變動不大的任務中。   測試開發工程師 測試開發崗位,工作的目的就是爲了更高效,更快捷地讓測試工程師進行測試工作;測試開發崗位一般要求一定的開發能力,解決問題的能力尤爲重要。比如我們項目組的測試開發小夥伴就經常開發一些腳本自動生成工具給我們使用,這也直接提高了我們的測試效率,間接地縮短了測試周期,可以更好更快地交付產品給客戶使用。   測試需要掌握哪些技能 把自己工作中接觸到的和非接觸的到的知識羅列一下。   開發能力:JAVA(集合,泛型,基礎知識,調試,代碼閱讀),JavaScript/CSS/HTML(基礎知識,能結合知識實現項目),Python(基礎知識);   框架:Spring Boot,Spring MVC;Vuejs;   開發成果:可以單獨開發JAVAWEB後臺系統,前端項目;管理系統;   興趣愛好:機器學習(理解常用的機器學習知識與算法原理,以及簡單機器學習實現);   計算機網絡知識:TCP/IP協議(HTTP,DNS);   操作系統:LINUX服務器常用指令,服務器硬件指標分析,shell編程基礎;   中間件:TOMCAT,NGINX(負載均衡,結合keepalive高可用架構),Mycat(分表分庫),Redis,Zookeeper;   數據庫:Oracle/MySQL,複雜查詢;   測試工具:JMeter,Postman等;   版本管理:GIT,SVN;   調度工具:JENKINS(理解);   大數據:Hadoop(理解架構),Hive;   以上知識,都是工作中接觸到的並且運用到的,當然測試工作中有些可能不需要精通掌握,只僅限於“使用”;而我個人更傾向於問題驅動學習,所以項目的多寡也決定了我對一些知識的理解深淺;工作前半年,接觸的項目少,但是自己也自學了一些用不到的知識,現在想想當時已經“掌握”的知識,長時間不用也會“褪色”,所以建議大家不要爲了學習而學習。   一定要用問題/項目驅動才能高效地掌握某項知識。工作之餘,也要多看一些機器學習,區塊鏈的知識,好讓自己不“脫節”


  學習更多互聯網的課程,纔可以讓自己立於不敗之地,也歡迎大家前來艾特家學習。

掃碼關注可進行課程諮詢

更多精彩等你來

今天因爲你的分享,讓我元氣滿滿!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章