微服務測試:如何破解測試所面臨的問題?測試的類型和範圍你懂嗎

2020-12-23 騰訊網

測試概述

軟體測試的目的,一方面是為了檢測出軟體中的Bug,另一方 面是為了檢驗軟體系統是否滿足需求。

然而,在傳統的軟體開發企業中,測試工作往往得不到技術人員的足夠重視。隨著Web應用的興起,特別是以微服務為代表的分布式系統的發展,傳統的測試技術也面臨著巨大的變革。

傳統的測試所面臨的問題

總結起來,傳統的測試工作主要面臨以下問題。

1.開發與測試對立

在傳統軟體公司組織結構裡面,開發與測試往往分屬不同部門,擔負不同的職責。開發人員為了實現功能需求,從而生產出代碼;測試人員則是為了查找出更多功能上的問題,迫使開發人員返工,從而對代碼進行修改。表面上看,好像是測試人員在給開發人員「找茬」,無法很好地相處,因此開發與測試的關係處於對立。

2.事後測試

按照傳統的開發流程,以敏捷開發模式為例,開發團隊在迭代過程結束過後,會發布一個版本,以提供給測試團隊進行測試。由於在開發過程中,迭代周期一般是以月計,因此從輸出一個迭代,

到這個迭代的功能完全測試完成,往往會經歷數周時間。也就是說,等到開發人員拿到測試團隊的測試報告時,報告裡面所反饋的問題,極有可能已經距離發現問題一個多月 了。別說讓開發人員去看一個月前的代碼,即便是開發人員自己在一個星期前寫的代碼,讓他們記憶起來也是挺困難的。

開發人員不得不花大量時間再去熟悉原有的代碼,以查找錯誤產生的根源。

所以說,對於測試工作而言,這種事後測試的流程,時間間隔得越久,修復問題的成本也就越高。

3.測試方法老舊

很多企業的測試方法往往比較老舊,無法適應當前軟體開發的大環境。很多企業測試職位仍然是屬於人力密集型的,即往往需要進行大量的手工測試。手工測試在整個測試過程中必不可少,但如果手工測試比重較大,往往會帶來極大的工作量,而且由於其機械重複性質,也大大限制了測試人員的水平。測試人員不得不處於這種低級別的重複工作中,無法發揮其才智,也就無法對企業的測試提出改進措施。

4.技術發生了巨大的變革

網際網路的發展急劇加速了當今計算機技術的變革。當今的軟體設計、開發和部署方式,也發生了很大的改變。隨著越來越多的公司從桌面應用轉向Web應用,很多風靡一時的測試書籍裡面所提及的測試方法和最佳實踐,在當前的網際網路環境下效率會大大下降,或者是毫無效果,甚至起了副作用。

5.測試工作被低估

大家都清楚測試的重要性,一款軟體要交付給用戶,必須要經過測試才能放心。但相對於開發工作而言,測試工作往往會被「看低一等」 ,畢竟在大多數人眼裡,開發工作是負責產出的,而測試往往只是默默地工作在背後。大多數技術人員也心存偏見,認為從事測試工作的人員,都是因為其技術水平不夠,才會選擇做測試職位。

6.發布緩慢

在傳統的開發過程中,版本的發布必須要經過版本的測試。由於傳統的測試工作採用了其事後測試的策略,修復問題的時間周期被拉長了,時間成本被加大了,最終導致產品發布的延遲。延期的發布又會導致需求無法得到客戶及時的確認,需求的變更也就無法得到提前實現,這樣,項目無疑就陷入了惡性循環的「泥潭」。

如何破解測試面臨的問題

針對上面所列的問題,解決的方法大致歸納為以下幾種。

1.開發與測試混合

在How Google Tests Sofiware-一文中,關於開發、測試及質量的關係,表述為:「質量不等於測試。當你把開發過程和測試放到一起,就像在攪拌機裡混合攪拌那樣,直到不能區分彼此的時候,你就得到了質量。

這意味著質量更像是一種預防行為, 而不是檢測。質量是開發過程的問題,而不是測試問題。

所以要保證軟體質量,必須讓開發和測試同時開展。開發一段代碼就 立刻測試這段代碼,完成更多的代碼就做更多的測試。

在Google公司有一個專門的職位,稱為「軟體測試開發工程師( Software Engineer inTest)」,簡稱SET。Google 認為,沒有人比實際寫代碼的人更適合做測試,所以將測試納入開發過程,成為開發中必不可少的一部分。當開發過程和測試一起聯合時,即是質量達成之時。

2.測試角色的轉變

在GTAC 2011大會上,James Whittaker和Alberto Savoia發表演講,稱為「Test is Dead (測試已死)」。當然,這裡所謂的「測試已死」並不是指測試人員或測試工作不需要了,而是指傳統的測試流程及測試組織架構要進行調整。測試的角色已然發生了轉變,新興的軟體測試工作也不再只是傳統的測試人員的職責了。

在Google,負責測試工作的部門稱為「工程生產力團隊」,他們推崇「You build it, you breakit, you fix it!"的理念,即自己的代碼所產生的Bug需要開發人員自己來負責。這樣,傳統的測試角色將會消失,取而代之的是開發人員測試和自動化測試。與依賴於手工測試人員相比,未來的軟體團隊將依賴內部全體員工測試、Beta 版大眾測試和早期用戶測試。

測試角色往往是租賃形式的,這樣就可以在各個項目組之間流動,而且測試角色並不承擔項目組主要的測試任務,只是給項目組提供測試方面的指導,測試工作由項目組自己來完成。這樣保證了測試角色人員比較少,並可以最大化地將測試技術在公司內部蔓延。

3.積極發布,及時得到反饋

在開發實踐中推崇持續集成和持續發布。持續集成和持續發布的成功實踐,有利於形成「需求開發集成測試部署」的可持續的反饋閉環,從而使需求分析、產品的用戶體驗及互動設計、開發、測試、運維等角色密切協作,減少了資源的浪費。

一些網際網路的產品,甚至打出了「永遠Beta版本」的口號,即產品在沒有完全定型時就直接上線交付給了用戶使用,通過用戶的反饋來持續對產品進行完善。特別是一些開源的 、社區驅動的產品,由於其功能需求往往來自真正的用戶、社區用戶及開發者,這些用戶對產品的建議往往會被項目組所採納,從而納入技術。比較有代表性的例子是Linux和GitHub。

4.增大自動化測試的比例

最大化自動測試的比例有利於減少企業的成本,同時也有利於測試效率的提升。

Google刻意保持測試人員的最少化,以此保障測試力量的最優化。最少化測試人員還能迫使開發人員在軟體的整個生命期間都參與到測試中,尤其是在項目的早期階段:測試基礎架構容易建立的時候。

如果測試能夠自動化進行,而不需要人類智慧判斷,那就應該以自動化的方式實現。當然有些手工測試仍然是無可避免的,如涉及用戶體驗、保留的數據是否包含隱私等。還有一些是探索性的測試,往往也依賴於手工測試。

5.合理安排測試的介入時機

測試工作應該及早介入,一般認為,測試應該在項目立項時介入,並伴隨整個項目的生命周期。

在需求分析出來以後,測試不止是對程序的測試,文檔測試也是同樣重要的。需求分析評審的時候,測試人員應該積極參與,因為所有的測試計劃和測試用例都會以客戶需求為準繩。需求不但是開發的工作依據,同時也是測試的工作依據。

測試的類型和範圍

在當今的網際網路開發模式中,雖然傳統的測試角色已經發生了巨大的變革,但就其測試工作而言,其本質並未改變,其目的都是檢驗軟體系統是否滿足需求,以及檢測軟體中是否存在Bug。下面就對常用的測試方案做下探討。

測試類型

圖4-1展示的是一個通用性的測試金字塔。

在這個測試金字塔中,從下向上形象地將測試分為不同的類型。

1.單元測試

單元測試是在軟體開發過程中要進行的最低級別的測試活動,軟體的獨立單元將在與程序的其他部分相隔離的情況下進行測試。

單元測試的範圍局限在服務內部,它是圍繞著- -組 相關聯的案例編寫的。例如,在C語言中,單元通常是指一-個函數; 在Java等面向對象的程式語言中,單元通常是指一個類。所謂的單元,就是指人為規定的最小的被測功能模塊。因為測試範圍小,所以執行速度很快。

單元測試用例往往由編寫模塊的開發人員來編寫。在TDD ( Test Driven Development, 測試驅動開發)的開發實踐中,開發人員在開發功能代碼之前,就需要先編寫單元測試用例代碼,測試代碼確定了需要編寫什麼樣的產品代碼。TDD在敏捷開發中被廣泛採用。

單元測試往往可以通過xUnit等框架來自動化進行測試。例如,在Java平臺中,JUnit 測試框( htt:nit.rg/ )已是用於單元測試的事實上的標準。

2.集成測試

集成測試主要用於測試各個模塊能否正確交互,並測試其作為子系統的交互性,以查看接口是否存在缺陷。

集成測試的目的在於,通過集成模塊檢查路徑暢通與否,來確認模塊與外部組件的交互情況。

集成測試可以結合CI (持續集成)的實踐,來快速找到外部組件間的邏輯回歸與斷裂,從而有助於評估各個單獨模塊中所含邏輯的正確性。

集成測試按照不同的項目類型,有時也細分為組件測試、契約測試等。例如,在微服務架構中,微服務中的組件測試是使用測試替代與內部API端點通過替換外部協作的組件,來實現對各個組件的獨立測試。組件測試提供給測試者- -個受控的測試環境,並幫助他們從消費者角度引導測試,允許綜合測試,提高測試的執行次數,並通過儘量減少可移動部件來降低整體構件的複雜性。組件測試也能確認微服務的網絡配置是否正確,以及是否能夠對網絡請求進行處理。而契約測試會測試外部服務的邊界,以查看服務調用的輸入/輸出,並測試該服務能否符合契約預期。

3.系統測試

系統測試用於測試集成系統運行的完整性,這裡面涉及應用系統的前端界面和後臺數據存儲。

該測試可能會涉及外部依賴資源,如資料庫、文件系統、網絡服務等。系統測試在一些面向服務的系統架構中被稱為「端到端測試」。因此在微服務測試方案中,端到端測試佔據了重要的角色。在微服務架構中有一些執行相同行為的可移動部件,端到端測試時需要找出覆蓋缺口,並確保在架構重構時業務功能不會受到影響。

由於系統測試是面向整個系統來進行測試的,因此測試的涉及面將更廣,所需要的測試時間也更長。.

測試範圍及比例

1.測試範圍

不同的測試類型,其對應的測試範圍也是不同的。單元測試所需要的測試範圍最小,意味著其隔離性更好,同時也能在最快的時間內得到測試結果。單元測試有助於及早發現程序的缺陷,降低修復的成本。系統測試涉及的測試範圍最廣,所需要的測試時間也最長。如果在系統測試階段發現缺陷,則修復該缺陷的成本自然也就越高。

在Google公司,對於測試的類型和範圍,一般按照規模劃分為小型測試、中型測試、大型測試,也就是平常理解的單元測試、集成測試、系統測試。

小型測試:小型測試是為了驗證一個代碼單元的功能,一般 與運行環境隔離。小型測試是所有測試類型裡範疇最小的。在預設的範疇內,小型測試可以提供更加全面的底層代碼覆蓋率。小型測試中外部的服務,如文件系統、網絡、資料庫等,必須通過mock或fake來實現。這樣可以減少被測試類所需要的依賴。小型測試可以擁有更加頻繁的執行頻率,並且可以很快發現問題並修復問題。

●中型測試:中型測試主要是用於驗證多個模塊之間的交互是否正常。一般情況下,在Google由SET來執行中型測試。對於中型測試,推薦使用mock來解決外部服務的依賴問題。有時出於性能考慮,在不能使用mock的場景下,也可以使用輕量級的fake。

大型測試:大型測試是在一個較高的層次 上運行的,以驗證系統作為一個整體是否工作正常。

2.測試比例

每種測試類型都有其優缺點,特別是系統測試,涉及的範圍很廣,花費的時間成本也很高。所以在實際的測試過程中,要合理安排各種測試類型的測試比例。正如測試金字塔所展示的,越是底層,所需要的測試數量將會越大。那麼每種測試類型需要佔用多大的比例呢?實際上,這裡並沒有一個具體的數字,按照經驗來說,順著金字塔從上往下,下面一層的測試數量要比上面一層的測試數量多出-一個數量級。

當然,這種比例也並非固定不變的。如果當前的測試比例存在問題,那麼就要及時調整並嘗試不同類型的測試比例,以符合自己項目的實際情況。

本篇給大家介紹的內容是如何破解測試所面臨的問題、測試的類型和範圍兩塊內容!

1.下篇內容給大家介紹如何進行微服務的測試;

2.覺得文章還不錯的朋友,可以轉發關注小編一下;

3.感謝大家的支持!!

相關焦點

  • 沒經過這些測試,你的微服務架構也敢進入生產環境?
    微服務架構是指將應用程式拆分為一系列較小、且直接用於解決具體問題的組件的實踐方案。以此為基礎,架構中的每一個組件都將通過各類常規協議(例如 HTTP 或者更輕量化的 TCP)相互通信。說到這裡,大家可能會好奇,對於微服務架構來說,測試真的很重要嗎?答案當然是重要!
  • 最棘手的聊天,如何破解女生的廢物測試,讓你從此不再迷茫
    是因為你在面對女生的廢物測試的時候,你卻不知道該如何作答,不理解女生說這句話後面的真正含義,於是導致許多的兄弟們死在了廢物測試上面,難道廢物測試真有那麼難嗎?廢物測試簡單的說。就是女生通過一個問題拋給你,然後看你的反應,來測試你是一個什麼樣的人,通常來說通過廢物測試,我們可以更好的了解對方,更好的知道彼此是否合適,所以廢物測試幾乎無時無刻都在我們和女生聊天的過程中廢物測試的作用是什麼可能很多兄弟不理解,廢物測試的目的有什麼用,那是因為你接觸的女生太少,又或者說你的社交APP上面的異性資源太少,不曾體會過,那麼呢,我舉個例子,一般女生會更好的拿捏廢物測試
  • 單元測試 vs 集成測試,你該怎麼選?
    這意味著你可以頻繁運行單元測試。隨著軟體的成熟,一套單元測試是防止回歸和降低維護成本的有力工具。追溯單元測試在考慮將單元測試添加到現有軟體時,需要考慮成本和收益。單元測試的一個關鍵假設是,被測試的軟體很容易分成不同的單元。在沒有考慮單元測試編寫的軟體中,這個假設很少成立。
  • 關於軟體測試/測試用例的問題,答案都在這裡了
    新項目和維護項目從本質上看沒有區別,維護產品,無非就是新增功能和缺陷修復兩大類,和新項目相比,唯一需要注意的就是新增\修復的功能是否對其他部分有影響,這裡就涉及到一個回歸策略的問題——老功能要測多少。一般來說,需要和開發討論確定受影響的範圍,然後制定測試範圍。當然最理想的情況就是整個系統全測,因為一旦系統複雜了,沒有哪個開發能說清楚影響範圍。
  • 破舊立新,精準測試之道
    前言第一次聽到精準測試是在幾年前了,那一瞬間就對這個流派充滿了好奇和探索的欲望,最近幾年逐漸得到了各領域各行業中測試人員的廣泛關注,那麼問題來了:什麼是精準測試;精準測試的意義和價值在哪裡;精準測試整體方案如何落地;傳統測試的痛點測試效率低下常規的測試類型包括功能測試、回歸測試、自動化測試、接口測試等,非常依賴於測試人員的測試經驗,基於人工主觀分析的黑盒測試,藉助常規的用例設計方法來確保產品質量
  • 左右腦年齡測試刷爆朋友圈!程式設計師破解代碼發現……
    今早南都君親測了一次測試共包括8道問題每題有2-4個選項問題包括:「這個男人的眼睛是在一條直線上嗎?」「你能看到圖中的字母嗎?」就在「左右腦年齡測試」小遊戲熱傳後,有網友發布了一張圖稱,有程式設計師「扒出了」這個小遊戲的測試代碼,其中出現了可以得出隨機數的代碼,稱左右腦年齡是隨機分配的數字,而並非是根據所出題目科學分析出來的結果。程式設計師破解的測試代碼昨天,記者聯繫到浙江一家科技有限公司的程式設計師陳先生,陳先生在測試遊戲「火」了之後也根據網址破解了測試代碼。
  • 七種不同類型的遊戲測試技術
    七種不同類型的遊戲測試技術 本文將向您介紹七種不同類型的遊戲測試技術,以便您能夠儘早地修復那些關鍵性的錯誤,並能交付出讓用戶滿意的軟體產品。
  • 測試裝置和測試系統在手機開發過程中的運用
    行動電話已經發展成為綜合了語音和數據功能的複雜行動裝置,因此要求在開發過程中執行廣泛的高效的測試,實現快速上市的目標,本文詳細介紹在無線設備開發中的七種類型測試,以及如何將結合起來形成一個完整的開發測試解決方案的方法。本文引用地址:http://www.eepw.com.cn/article/194016.htm
  • 聽說你30+了,還只會點點點功能測試,未來你怎麼辦?
    以下列出除了功能測試點點點,測試人員,你最應該加強的地方這些領域你做好了一個都是你的亮點,你出去找工作都是閃閃發光的!指標的缺陷以及如何減輕它們在大型產品解決方案中公開和報告風險促進產品開發了解產品正在解決的核心問題為測試人員構建和傳達產品上下文確保測試活動符合要解決的核心問題促進UAT並協作以使該過程有效企業管理與高級執行官進行社交和協作語音質量相關問題能夠說明問題並獲得
  • 如何去面試一個測試工程師崗位?
    做測試培訓不少年頭了,積累了一些面試的經驗和技巧,接下來幾期打算重點說一下如何去面試軟體測試崗位以及面試所遇到的問題,希望能夠幫到大家,也祝大家找到滿意的軟體測試工作。01 去外包還是直招的公司?02 如何面試不同的崗位--軟體測試員葵花寶典說完外包和直招,我剖析下面試不同的崗位問的問題,不同崗位問的肯定是不一樣的,分為三個等級:· 初級崗位如何面試· 中級崗位如何面試· 高級崗位如何面試
  • 精準測試
    精確的度量方法和生產的高度量化控制以及智能化的輔助工具,是一個行業真正發展所需要的最基本的條件,而這一切正是幾乎完全依賴於人工業務經驗的軟體測試行業所最欠缺的。軟體測試的發展遭遇尷尬境地,其主要原因是面臨一些測試技術瓶頸問題目前沒有突破。其實,造成軟體維護困難的深層次的原因在於:軟體測試的整個過程和方法完全面對一個不知內部結構的BLACK BOX。
  • PCB設計裸板測試:夾具測試和飛針測試
    打開APP PCB設計裸板測試:夾具測試和飛針測試 上海韜放電子 發表於 2020-12-18 13:43:58 有時,您會遇到一些PCB上的問題,這些問題在組裝和部署之前是無法發現的。 例如,蝕刻工藝可能會留下連接兩個焊盤的微小銅片,或者由於處理不當或工藝缺陷而導致走線斷開。多層PCB的製造更加複雜,這增加了裸板PCB上出現缺陷的風險。 假設PCB處於完好狀態或製造商將自動執行製造後測試是錯誤的。在完成數百個PCB的工單時,我曾經錯過了特定的測試說明。
  • 如何編寫測試用例?
    ,列出需求的框架,包括測試範圍即各個功能點,測試的場景等;確定一些測試可以提前介入的工作等。另外測試用例完成後就會進入一個用例評審的階段,在用例評審階段,會有用例評審人,針對你的用例作出的評審,主要檢查你的用例是否有測試點遺漏,場景遺漏,描述模糊,測試結果輸出模糊等問題,針對用例評審人提出的問題,我們也要及時的更改我們的用例。
  • 只寫測試用例不管代碼?懶人如何高效的做回歸測試
    ,腳本中仍然存在業務邏輯,這樣業務的變化會引起腳本的更改,而關鍵字驅動系統數據文件的設計將業務和測試輸入數據都集成在數據表格中,雖然設計複雜,但當業務發生變化時,無需更改測試所用的腳本,從而提高了測試的效率。
  • 如何正確解讀MVP測試指標?
    解讀MVP測試指標是產品經理常做的事情,那MVP測試指標究竟是什麼?又該如何正確解讀呢?本文介紹了解讀MVP測試指標需要注意的問題和制定測試指標的大致邏輯,與大家分享!一、MVP需要完美嗎?MVP的概念是隨著Eric Ries 《精益創業》的受追捧而逐漸火爆起來。
  • MAP測試是什麼,一篇文章讓你懂!
    通過這樣的個性化調整,MAP測試能精準評估每位考生的真實學業水平,得到一份專屬於自己的成績報告,讓考生及時發現自己知識點上的缺環,以便查漏補缺;而老師和家長也可以通過學生成績報告調整相應的教學計劃。這部分數據市場上很多測試都做不到,而MAP測試做到了。MAP測試擁有非常強大的資料庫和樣本量,收錄了約1000多萬個美國本土的測試數據,以及40多萬個美國以外國家的數據,可信度很高。
  • 五分鐘測試,看透你的內心
    分享會開始前丁總先介紹了學習九型人格的目的和意義、以及相關基礎知識,希望通過《九型人格》的測試,提升自我認知,讓你更了解你自己,幫助處理你的人際關係,並把你個性中的潛在能力挖掘出來。你真正了解自己嗎你真正了解你身邊的人嗎我們的性格是否健全你知道自己屬於九型人格中哪個類型嗎課前互動 首先填寫問卷測試自己的性格特徵
  • 證監會發布實施《證券期貨業軟體測試指南 軟體安全測試》等三項...
    近日,證監會發布《證券期貨業軟體測試指南 軟體安全測試》《證券期貨業移動網際網路應用程式安全規範》《證券期貨業於銀行間業務數據交換協議 第1部分:三方存管、銀期轉帳和結售匯業務》等三項金融行業標準,自公布之日起施行。
  • 測試案例:如何快捷的使用接口測試框架Karate創建一個API測試?
    應用場景:在API的測試中,測試某些具體數據值,比如返回的結果是否是需求的類型,文件是否是符合且具備完整的數據結構。這些都是必須且很細緻的測試工作。另外,組織、運行測試場景,以及演示測試結果這些也都使得測試人員要更加快速的找到合適的API測試方法。今天就詳細地介紹如何用Karate組織、運行測試場景,以及驗證Json 文件數據的正確性。
  • 邁爾斯-布裡格斯(MBTI) 性格測試
    實際用這個測試來招聘和提升員工邁爾斯-布裡格斯性格類型指標的歷史也就是MBTI測試以及它如何成為評估性格類型最著名的方法之一的凱薩琳·布裡格斯和伊莎貝爾·布裡格斯·邁爾斯回答了「人們如何尋找和吸取經驗」這一關鍵問題他們用四種二分類型回答這些問題這些二分法構成了我們的性格類型讓我們繼續探索這些問題