軟體系統是以構成計算機系統一部分的軟體為基礎的內部通訊元件的系統。本文的主要內容是透過對軟體系統通訊節點的識別,分享軟體系統的測試思路。
如圖1-1所示,在一套軟體系統中,我們對其進行層次劃分,可以分為四層,分別為使用者層、展示層、服務層和關聯層。四個層次間含有三個關鍵的通訊節點,這裡分別定義為通訊上節點、通訊中節點和通訊下節點。
圖1-1 軟體系統
在整個軟體系統的通訊中,使用者與客戶端(手機/電腦)進行互動,觸發資訊流動,資訊先是至下而上流轉到服務層,而後從上而下反饋至使用者,從而完成資訊傳遞的閉環。為了驗證資訊在整個閉環中流轉的正確性,本質上我們要驗證資訊在系統中每一個節點的流轉都是穩定且正確的。下文將分享軟體系統中三個關鍵通訊節點的測試思路。
一、通訊下節點系統第一個關鍵節點為系統中使用者與展示層的通訊節點,如圖2-1所示,這裡定義它為通訊下節點。
圖2-1 通訊下節點
為了驗證資訊在這個通訊節點間流轉的正確性,我們需要在理解業務內容和產品需求的基礎上,作為軟體產品的第一批使用者,透過與客戶端互動的方式來開展黑盒測試(功能測試),儘可能完整地模擬使用者所處的環境和各業務場景下可能產生的資料流,驗證業務流程能夠得到正確的實現。透過黑盒測試,我們以使用者的角色最直接地驗證系統的功能性和易用性,但這種方式驗證系統的弊端也比較明顯:對整個系統通訊的驗證只停留在表層。
二、通訊中節點系統第二個關鍵節點為展示層與服務層的通訊節點,如圖3-1所示,這裡定義它為通訊中節點。
圖3-1 通訊中節點
相對於上文的通訊下節點,通訊中節點的資訊互動對於普通使用者是不可見的。通訊中節點的互動方式主要是透過定義好的網路通訊協議及API介面進行資料互動。這裡的網路通訊協議可以理解為是兩個人約定的交流語言(類似中文or英語),API介面可以理解為包含特定語言語法的對話方式(音訊or影片)。為了保障客戶端與服務層進行的通訊是準確高效的,我們需要在理解需求資料點和介面API定義的基礎上開展灰盒測試(介於黑盒測試和白盒測試的一種測試)。在這個節點中,通訊輸入的內容是客戶端傳送的資料資訊,通訊輸出的內容是服務層響應的資料資訊。針對通訊中節點的資料流轉,我們需要驗證展示層發起正確的請求資訊,服務層返回正確的響應資訊,以及展示層正確地展示服務層響應的資料這三個部分。
識別通訊中節點後,為了更直接地驗證資料在這個節點流轉的正確性,我們可以對上下層服務進行拆分,建立代理層,如圖3-2所示。
圖3-2 通訊中節點(代理層)
透過建立代理層,我們可以暫時解除展示層與服務層的強依賴,分別與節點上下游進行直接對話,透過代理層捕獲展示層地資料校驗起是否發起正確的請求資訊,透過偽造不同場景請求資料驗證服務層是否返回正確的響應資料,以及透過偽造不同場景的響應資料驗證展示層是否正確展示,從而擺脫只能透過操作底層客戶端進行系統驗證的侷限。
2.1 服務層:服務端與資料庫間通訊節點透過在通訊中節點建立代理層,我們可以透過模擬介面請求資料和校驗響應資料的方法來校驗服務層輸入及輸出的正確性,但是我們可能無法保證資料在服務內部(儲存層和邏輯層間)的通訊是否正確。如圖3-3所示,圖中的黃色箭頭為服務端與資料庫間通訊節點,為了驗證系統服務層的正確性,我們也需要明確服務端和資料庫通訊機制和通訊資料,驗證服務端與資料庫之間資料流轉的正確性。
圖3-3 服務端與資料庫間通訊節點(服務層)
我們可以透過測試工具直接與資料庫建立連線,獲取對資料增刪改查的許可權。可以透過直接校驗外部資料輸入經過服務端邏輯處理後資料(資料儲存)是否正確儲存,也可以直接修改或刪除資料庫資料模擬不同業務場景去校驗資料經過服務端邏輯處理(資料轉化)是否正確輸出。
2.2 服務端內部通訊節點分析完服務層內部服務端與資料庫間的通訊節點及資料流轉,服務層對於我們已經不再是完全的黑盒。如果我們想更加深入驗證服務端內部資料流轉的正確性,我們就需要分析下服務端(邏輯處理)內部的通訊節點。如圖3-4所示,資料A在服務內部的可能經過四個節點,為了驗證資料A能夠正確轉換成資料B,實際上需要我們驗證資料A在每個節點都能有正確的輸出,我們也同樣可以透過節點間建立代理(打樁)的方法對系統開展基於程式碼模組的測試(白盒測試)。
圖3-4 服務端內部通訊節點(服務層)
三、通訊上節點系統第三個關鍵節點及為服務層與關聯層的通訊節點,如圖4-1所示,這裡定義它為通訊上節點。
圖4-1 通訊上節點
由於通訊上節點關聯服務層和上游服務,測試服務層及以下環節過程中,一方面我們難以保證上游服務的測試環境總是穩定的,另一方面為了驗證上游不同型別的資料場景,我們通常需要從服務層下游進行資料輸入,增加了資料流轉的鏈路。因此,如圖4-2所示,我們可以在通訊上節點增加代理層隔離上游,既可以降低對上游服務的強依賴,也可以減少資料流轉的鏈路。
圖4-2 通訊上節點(代理層)
除了增加代理層的方法外,如圖4-3所示,我們也可以讓服務層的服務下沉到本地(本地除錯),在本地啟用服務,透過本地代理工具模擬上游輸入進行除錯(白盒測試),驗證服務層內部資料流轉的正確性。
圖4-3 服務層本地除錯
四、總結作為測試工程師,我們需要與產品經理、UI/UX、運營、運維以及各個崗位的研發人員交流,共同協作完成一個專案的設計、開發、測試、運營及運維工作。在工作中我們相對重視加強與人的溝通,但是我們卻忽視了加強與計算機系統的溝通。不僅因為工作內容限制了我們與計算機系統的溝通機會,也因為計算機系統的抽象性和複雜性容易使我們望而卻步。
本文透過介紹軟體系統層級及系統關鍵通訊節點,透過建立代理層達到能夠直接對話節點上下游服務的能力,從而探索軟體系統的全鏈路測試。本文想分享的核心內容是分而治之的思想以及由表及裡的探索式測試思路。為了提升我們直接與計算機的對話能力,我們可以嘗試由表及裡地去識別計算機中可能的通訊節點,循序漸進去了解與系統節點間的通訊方式和通訊細節,結合工具逐步加強與各通訊節點的對話能力。如圖5-1所示,現實中的軟體系統可能更為複雜,但是,我們依然可以以通訊節點的識別和拆分為基礎,嘗試去思考如何分而測之。最後,歡迎大家對本文進行指點糾錯,分享你們的思考。
圖5-1 軟體系統(擴充套件)
作者簡介:Chaofan, 愛測角裡的一名永久打工人。