史上最全的後端技術大全,你都瞭解哪些技術呢?

2019-09-12 01:18:09


| 導語 工欲善其事,必先利其器;士欲宣其義,必先讀其書。後臺開發作為網際網路技術領域的掌上明珠,一直都是開發者們的追逐的高峰。本文將從後臺開發所涉及到的技術術語出發,基於系統開發、架構設計、網路通訊等幾個方面讓大家對後臺發有一個清晰的瞭解,講解全面易懂。

系統開發


1. 高內聚/低耦合

高內聚指一個軟體模組是由相關性很強的程式碼組成,只負責一項任務,也就是常說的單一責任原則。模組的內聚反映模組內部聯絡的緊密程度。


模組之間聯絡越緊密,其耦合性就越強,模組的獨立性則越差。模組間耦合高低取決於模組間介面的複雜性、呼叫的方式及傳遞的資訊。一個完整的系統,模組與模組之間,儘可能的使其獨立存在。通常程式結構中各模組的內聚程度越高,模組間的耦合程度就越低。


2. 過度設計

過度設計就是進行了過多的面向未來的設計或者說把相對簡單的事情想複雜了,過度追求模組化、可擴充套件性、設計模式等,為系統增加了不必要的複雜度。


3. 過早優化

過早指的不是在開發過程的早期,而是在還沒弄清楚需求未來的變化的走向的時候。你的優化不僅可能導致你無法很好地實現新的需求,而且你對優化的預期的猜測有可能還是錯的,導致實際上你除了把程式碼變複雜以外什麼都沒得到。


正確的方法是,先有質量地實現你的需求,寫夠testcase,然後做profile去找到效能的瓶頸,這個時候才做優化。


4. 重構 (Refactoring)

重構(Refactoring)就是通過調整程式程式碼改善軟體的質量、效能,使其程式的設計模式和架構更趨合理,提高軟體的擴充套件性和維護性。


5. 破窗效應

又稱破窗理論,破窗效應(Broken windows theory)是犯罪學的一個理論。此理論認為環境中的不良現象如果被放任存在,會誘使人們仿效,甚至變本加厲。一幢有少許破窗的建築為例,如果那些窗不被修理好,可能將會有破壞者破壞更多的窗戶。最終他們甚至會闖入建築內,如果發現無人居住,也許就在那裡定居或者縱火。


應用在軟體工程上就是,一定不能讓系統程式碼或者架構設計的隱患有冒頭的機會,否則隨著時間的推移,隱患會越來越重。反之,一個本身優質的系統,會讓人不由自主的寫出優質的程式碼。


6. 互不信任原則

指在程式執行上下游的整個鏈路中,每個點都是不能保證絕對可靠的,任何一個點都可能隨時發生故障或者不可預知的行為,包括機器網路、服務本身、依賴環境、輸入和請求等,因此要處處設防。


7. 持久化 (Persistence)

持久化是將程式資料在臨時狀態和持久狀態間轉換的機制。通俗的講,就是臨時資料(比如記憶體中的資料,是不能永久儲存的)持久化為持久資料(比如持久化至資料庫或者本地磁碟中,能夠長久儲存)。


8. 臨界區

臨界區用來表示一種公共資源或者說是共享資料,可以被多個執行緒使用,但是每一次,只能有一個執行緒使用它,一旦臨界區資源被佔用,其他執行緒要想使用這個資源,就必須等待。


9. 阻塞/非阻塞

阻塞和非阻塞通常形容多執行緒間的相互影響。比如一個執行緒佔用了臨界區資源,那麼其它所有需要這個資源的執行緒就必須在這個臨界區中進行等待,等待會導致執行緒掛起。這種情況就是阻塞。此時,如果佔用資源的執行緒一直不願意釋放資源,那麼其它所有阻塞在這個臨界區上的執行緒都不能工作。而非阻塞允許多個執行緒同時進入臨界區。


10. 同步/非同步

通常同步和非同步是指函式/方法呼叫方面。

同步就是在發出一個函式呼叫時,在沒有得到結果之前,該呼叫就不返回。非同步呼叫會瞬間返回,但是非同步呼叫瞬間返回並不代表你的任務就完成了,他會在後臺起個執行緒繼續進行任務,等任務執行完畢後通過回撥callback或其他方式通知呼叫方。


11. 併發/並行

  • 並行(parallel)指在同一時刻,有多條指令在多個處理器上同時執行。所以無論從微觀還是從巨集觀來看,二者都是一起執行的。

  • 併發(concurrency)指在同一時刻只能有一條指令執行,但多個程序指令被快速的輪換執行,使得在巨集觀上具有多個程序同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干段,使多個程序快速交替的執行。

架構設計


1. 高併發 (High Concurrency)

由於分散式系統的問世,高併發(High Concurrency)通常是指通過設計保證系統能夠同時並行處理很多請求。通俗來講,高併發是指在同一個時間點,有很多使用者同時的訪問同一 API 介面或者 Url 地址。它經常會發生在有大活躍使用者量,使用者高聚集的業務場景中。


2. 高可用 (High Availability)

高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,一個系統經過專門的設計,以減少停工時間,而保持其服務的高度可用性。


3. 讀寫分離

為了確保資料庫產品的穩定性,很多資料庫擁有雙機熱備功能。也就是,第一臺資料庫伺服器,是對外提供增刪改業務的生產伺服器;第二臺資料庫伺服器,主要進行讀的操作。


4. 冷備/熱備

  • 冷備:兩個伺服器,一臺執行,一臺不執行做為備份。這樣一旦執行的伺服器宕機,就把備份的伺服器執行起來。冷備的方案比較容易實現,但冷備的缺點是主機出現故障時備機不會自動接管,需要主動切換服務。

  • 熱備:即是通常所說的active/standby方式,伺服器資料包括資料庫資料同時往兩臺或多臺伺服器寫。當active伺服器出現故障的時候,通過軟體診測(一般是通過心跳診斷)將standby機器啟用,保證應用在短時間內完全恢復正常使用。當一臺伺服器宕機後,自動切換到另一臺備用機使用。


5. 異地多活

異地多活一般是指在不同城市建立獨立的資料中心,“活”是相對於冷備份而言的,冷備份是備份全量資料,平時不支撐業務需求,只有在主機房出現故障的時候才會切換到備用機房,而多活,是指這些機房在日常的業務中也需要走流量,做業務支撐。


6. 負載均衡 (Load Balance)

負載均衡,是對多臺伺服器進行流量分發的負載均衡服務。可在多個例項間自動分配應用程式的對外服務能力,通過消除單點故障提升應用系統的可用性,讓您實現更高水平的應用程式容錯能力,從而無縫提供分配應用程式流量所需的負載均衡容量,為您提供高效、穩定、安全的服務。


7. 動靜分離

動靜分離是指在web伺服器架構中,將靜態頁面與動態頁面或者靜態內容介面和動態內容介面分開不同系統訪問的架構設計方法,進而提升整個服務訪問效能和可維護性。


8. 叢集

單臺伺服器的併發承載能力總是有限的,當單臺伺服器處理能力達到效能瓶頸的時,將多臺伺服器組合起來提供服務,這種組合方式稱之為叢集,叢集中每臺伺服器就叫做這個叢集的一個“節點”,每個節點都能提供相同的服務,從而成倍的提升整個系統的併發處理能力。


9. 分散式

分散式系統就是將一個完整的系統按照業務功能拆分成很多獨立的子系統,每個子系統就被稱為“服務”,分散式系統將請求分揀和分發到不同的子系統,讓不同的服務來處理不同的請求。在分散式系統中,子系統獨立執行,它們之間通過網路通訊連線起來實現資料互通和組合服務。


10. CAP理論

CAP理論,指的是在一個分散式系統中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分割槽容錯性),不能同時成立。

  • 一致性:它要求在同一時刻點,分散式系統中的所有資料備份都相同或者都處於同一狀態。

  • 可用性:在系統叢集的一部分節點宕機後,系統依然能夠正確的響應使用者的請求。

  • 分割槽容錯性:系統能夠容忍節點之間的網路通訊的故障。


簡單的來說,在一個分散式系統中,最多能支援上面的兩種屬性。但顯然既然是分散式註定我們是必然要進行分割槽,既然分割槽,我們就無法百分百避免分割槽的錯誤。因此,我們只能在一致性和可用性去作出選擇。

在分散式系統中,我們往往追求的是可用性,它的重要性比一致性要高,那麼如何實現高可用,這裡又有一個理論,就是 BASE 理論,它給 CAP 理論做了進一步的擴充。


11. BASE理論

BASE 理論指出:

  • Basically Available(基本可用)

  • Soft state(軟狀態)

  • Eventually consistent(最終一致性)


BASE 理論是對 CAP 中的一致性和可用性進行一個權衡的結果,理論的核心思想就是:我們無法做到強一致,但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性。


12. 水平擴充套件/垂直擴充套件

  • 水平擴充套件 Scale Out通過增加更多的伺服器或者程式例項來分散負載,從而提升儲存能力和計算能力。

  • 垂直擴充套件 Scale Up 提升單機處理能力。

垂直擴充套件的方式又有兩種:

    (1)增強單機硬體效能,例如:增加CPU核數如32核,升級更好的網絡卡如萬兆,升級更好的硬碟如SSD,擴充硬碟容量如2T,擴充系統記憶體如128G;

    (2)提升單機軟體或者架構效能,例如:使用Cache來減少IO次數,使用非同步來增加單服務吞吐量,使用無鎖資料結構來減少響應時間;

       

13. 平行擴容

與水平擴充套件類似。叢集伺服器中的節點均為平行對等節點,當需要擴容時,可以通過新增更多節點以提高叢集的服務能力。一般來說伺服器中關鍵路徑(如伺服器中的登入、支付、核心業務邏輯等)都需要支援執行時動態平行擴容。


14. 彈性擴容

指對部署的叢集進行動態線上擴容。彈性擴容系統可以根據實際業務環境按照一定策略自動地新增更多的節點(包括儲存節點、計算節點、網路節點)來增加系統容量、提高系統性能或者增強系統可靠性,或者同時完成這三個目標。


15. 狀態同步/幀同步

  • 狀態同步:狀態同步是指伺服器負責計算全部的遊戲邏輯,並且廣播這些計算的結果,客戶端僅僅負責傳送玩家的操作,以及表現收到的遊戲結果。

特徵:狀態同步安全性高,邏輯更新方便,斷線重連快,但是開發效率較低,網路流量隨遊戲複雜度增加,伺服器需要承載更大壓力。

  • 幀同步:服務端只轉發訊息,不做任何邏輯處理,各客戶端每秒幀數一致,在每一幀都處理同樣的輸入資料。

特徵:幀同步需要保證系統在相同的輸入下,要有相同的輸出。幀同步開發效率高,流量消耗低而且穩定,對伺服器的壓力非常小。但是網路要求高,斷線重連時間長,客戶端計算壓力大。


網路通訊


1. 連線池

預先建立一個連線緩衝池,並提供一套連線使用、分配、管理策略,使得該連線池中的連線可以得到高效、安全的複用,避免了連線頻繁建立、關閉的開銷。


2. 斷線重連

由於網路波動造成使用者間歇性的斷開與伺服器的連線,待網路恢復之後伺服器嘗試將使用者連線到上次斷開時的狀態和資料。


3. 會話保持

會話保持是指在負載均衡器上的一種機制,可以識別客戶端與伺服器之間互動過程的關連性,在作負載均衡的同時還保證一系列相關連的訪問請求都會分配到一臺機器上。用人話來表述就是:在一次會話過程中發起的多個請求都會落到同一臺機器上。


4. 長連線/短連線

通常是指TCP的長連線和短連線。長連線就是建立TCP連線後,一直保持這個連線,一般會中間彼此傳送心跳來確認對應的存在,中間會做多次業務資料傳輸,一般不會主動斷開連線。短連線一般指建立連線後,執行一次事務後(如:http請求),然後就關掉這個連線。


5. 流量控制/擁塞控制

  • 流量控制防止傳送方發的太快,耗盡接收方的資源,從而使接收方來不及處理。

  • 擁塞控制防止傳送方發的太快,使得網路來不及處理產生擁塞,進而引起這部分乃至整個網路效能下降的現象,嚴重時甚至會導致網路通訊業務陷入停頓。


6. 驚群效應

驚群效應也有人叫做雷鳴群體效應,不過叫什麼,簡言之,驚群現象就是多程序(多執行緒)在同時阻塞等待同一個事件的時候(休眠狀態),如果等待的這個事件發生,那麼他就會喚醒等待的所有程序(或者執行緒),但是最終卻只可能有一個程序(執行緒)獲得這個時間的“控制權”,對該事件進行處理,而其他程序(執行緒)獲取“控制權”失敗,只能重新進入休眠狀態,這種現象和效能浪費就叫做驚群。


7. NAT

NAT(Network Address Translation,網路地址轉換),就是替換IP報文頭部的地址資訊。NAT通常部署在一個組織的網路出口位置,通過將內部網路IP地址替換為出口的IP地址提供公網可達性和上層協議的連線能力。


故障異常


1. 宕機

宕機,一般情況下指的就是計算機主機出現意外故障而宕機。其次,一些伺服器例如資料庫死鎖也可以稱為宕機,一些伺服器的某些服務掛掉了,就可以這麼說。


2. coredump

當程式出錯而異常中斷時,OS會把程式工作的當前狀態儲存成一個coredunmp檔案。通常情況下coredump檔案包含了程式執行時的記憶體,暫存器狀態,堆疊指標,記憶體管理資訊等。


3. 快取穿透/擊穿/雪崩

  • 快取穿透:快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,進而給資料庫帶來壓力。

  • 快取擊穿:快取擊穿是指熱點key在某個時間點過期的時候,而恰好在這個時間點對這個Key有大量的併發請求過來,從而大量的請求打到db。

  • 快取雪崩:快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。

  • 與快取擊穿不同的是:存擊穿是熱點key失效,快取雪崩是大量的key同時失效。


4. 500/501/502/503/504/505

  • 500 Internal Server Error:內部服務錯誤,一般是伺服器遇到意外情況,而無法完成請求。可能原因: 1、程式錯誤,例如:ASP或者PHP語法錯誤;2、高併發導致,系統資源限制不能開啟過多的檔案所致。

  • 501Not implemented:伺服器不理解或不支援請求的HTTP請求。

  • 502Bad Gateway:WEB伺服器故障,可能是由於程式程序不夠,請求的php-fpm已經執行,但是由於某種原因而沒有執行完畢,最終導致php-fpm程序終止。可能原因:1、Nginx伺服器,php-cgi程序數不夠用;2、PHP執行時間過長;3、php-cgi程序死掉;

  • 503Service Unavailable:伺服器目前無法使用。系統維護伺服器暫時的無法處理客戶端的請求,這只是暫時狀態。可以聯絡下伺服器提供商。

  • 504Gateway Timeout:伺服器504錯誤表示超時,是指客戶端所發出的請求沒有到達閘道器,請求沒有到可以執行的php-fpm,一般是與nginx.conf的配置有關。

  • 505HTTP Version Not Supported:伺服器不支援請求中所用的 HTTP 協議版本。(HTTP 版本不受支援)


除了500錯誤可能是程式語言錯誤,其餘的報錯,都大概可以理解為伺服器或者伺服器配置出現問題。


5. 記憶體溢位/記憶體洩漏

  • 記憶體溢位:記憶體溢位(Out Of Memory)指程式申請記憶體時,沒有足夠的記憶體供申請者使用,或者說,給了你一塊儲存int型別資料的儲存空間,但是你卻儲存long型別的資料,那麼結果就是記憶體不夠用,此時就會報錯OOM,即所謂的記憶體溢位。

  • 記憶體洩漏:記憶體洩漏(Memory Leak)指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。


6. 控制代碼洩漏

控制代碼洩漏是程序在呼叫系統檔案之後,沒有釋放已經開啟的檔案控制代碼。一般控制代碼洩漏後的現象是,機器變慢,CPU飆升,出現控制代碼洩漏的cgi或server的CPU使用率增加。


7. 死鎖

死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都抑制處於阻塞狀態並無法進行下去,此時稱系統處於死鎖狀態或系統產生了死鎖。


8. 軟中斷/硬中斷

  • 硬中斷:我們通常所說的中斷指的是硬中斷(hardirq)。


    由與系統相連的外設(比如網絡卡、硬碟)自動產生的。

    主要是用來通知作業系統系統外設狀態的變化。

  • 軟中斷:1、通常是硬中斷服務程式對核心的中斷;2、為了滿足實時系統的要求,中斷處理應該是越快越好。


linux為了實現這個特點,當中斷髮生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之後來完成,也就是軟中斷(softirq)來完成。


9. 毛刺

在短暫的某一刻,伺服器效能指標(如流量、磁碟IO、CPU使用率等)遠大於該時刻前後時間段。毛刺的出現代表這伺服器資源利用不均勻,不充分,容易誘發其他更嚴重的問題。


10. 重放攻擊

攻擊者傳送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。它是一種攻擊型別,這種攻擊會不斷惡意或欺詐性地重複一個有效的資料傳輸,重放攻擊可以由發起者,也可以由攔截並重發該資料的敵方進行。攻擊者利用網路監聽或者其他方式盜取認證憑據,之後再把它重新發給認證伺服器。


11. 網路孤島

網路孤島指叢集環境中,部分機器與整個叢集失去網路連線,分裂為一個小叢集並且發生資料不一致的狀況。


12. 資料傾斜

對於集群系統,一般快取是分散式的,即不同節點負責一定範圍的快取資料。我們把快取資料分散度不夠,導致大量的快取資料集中到了一臺或者幾臺服務節點上,稱為資料傾斜。一般來說資料傾斜是由於負載均衡實施的效果不好引起的。


13. 腦裂

腦裂是指在集群系統中,部分節點之間網路不可達而引起的系統分裂,不同分裂的小叢集會按照各自的狀態提供服務,原本的叢集會同時存在不一致的反應,造成節點之間互相爭搶資源,系統混亂,資料損壞。

監控告警


1. 服務監控

服務監控主要目的在服務出現問題或者快要出現問題時能夠準確快速地發現以減小影響範圍。服務監控一般有多種手段,按層次可劃分為:

  • 系統層(CPU、網路狀態、IO、機器負載等)

  • 應用層(程序狀態、錯誤日誌、吞吐量等)

  • 業務層(服務/介面的錯誤碼、響應時間)

  • 使用者層(使用者行為、輿情監控、前端埋點)


2. 全鏈路監控

  • 服務撥測:服務撥測是探測服務(應用)可用性的監控方式,通過撥測節點對目標服務進行週期性探測,主要通過可用性和響應時間來度量,撥測節點通常有異地多個。

  • 節點探測:節點探測是用來發現和追蹤不同的機房(資料中心)節點之間網路可用性和通暢性的監控方式,主要通過響應時間、丟包率、跳數來度量,探測方法一般是ping、mtr或其他私有協議。

  • 告警過濾:對某些可預知的告警進行過濾,不進入告警統計的資料,如少量爬蟲訪問導致的http響應500錯誤,業務系統自定義異常資訊等。

  • 告警去重:當一個告警通知負責人後,在這個告警恢復之前,不會繼續收到相同的告警。

  • 告警抑制:為了減少由於系統抖動帶來的干擾,還需要實現抑制,例如伺服器瞬間高負載,可能是正常的,只有持續一段時間的高負載才需要得到重視。

  • 告警恢復:開發/運維人員不僅需要收到告警通知,還需要收到故障消除告警恢復正常的通知。

  • 告警合併:對同一時刻產生的多條相同告警進行合併,如某個微服務叢集同一時刻出現多個子服務負載過高的告警,需要合併成為一條告警。

  • 告警收斂:有時某個告警產生時,往往會伴隨著其它告警。這時可以只對根本原因產生告警,其它告警收斂為子告警一併傳送通知。如雲伺服器出現CPU負載告警時往往伴隨其搭載的所有系統的可用性告警。

  • 故障自愈:實時發現告警,預診斷分析,自動恢復故障,並打通周邊系統實現整個流程的閉環。


服務治理


1. 微服務

微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間相互協調、互相配合,為使用者提供最終價值。每個服務執行在其獨立的程序中,服務和服務之間採用輕量級的通訊機制相互溝通(通常是基於HTTP的Restful API).每個服務都圍繞著具體的業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。


2. 服務發現

服務發現是指使用一個註冊中心來記錄分散式系統中的全部服務的資訊,以便其他服務能夠快速的找到這些已註冊的服務。服務發現是支撐大規模 SOA 和微服務架構的核心模組,它應該儘量做到高可用。


3. 流量削峰

如果觀看抽獎或秒殺系統的請求監控曲線,你就會發現這類系統在活動開放的時間段內會出現一個波峰,而在活動未開放時,系統的請求量、機器負載一般都是比較平穩的。為了節省機器資源,我們不可能時時都提供最大化的資源能力來支援短時間的高峰請求。所以需要使用一些技術手段,來削弱瞬時的請求高峰,讓系統吞吐量在高峰請求下保持可控。削峰也可用於消除毛刺,使伺服器資源利用更加均衡和充分。常見的削峰策略有佇列,限頻,分層過濾,多級快取等。


4. 版本相容

在升級版本的過程中,需要考慮升級版本後,新的資料結構是否能夠理解和解析舊資料,新修改的協議是否能夠理解舊的協議以及做出預期內合適的處理。這就需要在服務設計過程中做好版本相容。


5. 過載保護

過載是指當前負載已經超過了系統的最大處理能力,過載的出現,會導致部分服務不可用,如果處置不當,極有可能引起服務完全不可用,乃至雪崩。過載保護正是針對這種異常情況做的措施,防止出現服務完全不可用的現象。


6. 服務熔斷

服務熔斷的作用類似於我們家用的保險絲,當某服務出現不可用或響應超時的情況時,為了防止整個系統出現雪崩,暫時停止對該服務的呼叫。


7. 服務降級

服務降級是當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常執行。降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。

  • 根據服務方式:可以拒接服務,可以延遲服務,也有時候可以隨機服務。

  • 根據服務範圍:可以砍掉某個功能,也可以砍掉某些模組。


總之服務降級需要根據不同的業務需求採用不同的降級策略。主要的目的就是服務雖然有損但是總比沒有好。


8. 熔斷VS降級

  • 相同點:目標一致,都是從可用性和可靠性出發,為了防止系統崩潰;使用者體驗類似,最終都讓使用者體驗到的是某些功能暫時不可用;

  • 不同點:觸發原因不同,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;


9. 服務限流

限流可以認為服務降級的一種,限流就是限制系統的輸入和輸出流量已達到保護系統的目的。一般來說系統的吞吐量是可以被測算的,為了保證系統的穩定執行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的。比如:延遲處理,拒絕處理,或者部分拒絕處理等等。


10. 故障遮蔽

將故障機器從叢集剔除,以保證新的請求不會分發到故障機器。


測試方法


1. 黑盒/白盒測試

黑盒測試不考慮程式內部結構和邏輯結構,主要是用來測試系統的功能是否滿足需求規格說明書。一般會有一個輸入值,一個輸入值,和期望值做比較。

白盒測試主要應用在單元測試階段,主要是對程式碼級的測試,針對程式內部邏輯結構,測試手段有:語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋、條件組合覆蓋


2. 單元/整合/系統/驗收測試

軟體測試一般分為4個階段:單元測試、整合測試、系統測試、驗收測試。

  • 單元測試:單元測試是對軟體中的最小可驗證單元進行檢查和驗證,如一個模組、一個過程、一個方法等。單元測試粒度最小,一般由開發小組採用白盒方式來測試,主要測試單元是否符合“設計”。

  • 整合測試:整合測試也叫做組裝測試,通常在單元測試的基礎上,將所有的程式模組進行有序的、遞增的測試。整合測試界於單元測試和系統測試之間,起到“橋樑作用”,一般由開發小組採用白盒加黑盒的方式來測試,既驗證“設計”,又驗證“需求”。

  • 系統測試:系統測試時將經過整合測試的軟體,作為計算機系統的一部分,與系統中其他部分結合起來,在實際執行環境下進行一系列嚴格有效的測試,以發現軟體潛在的問題,保證系統的正常執行。系統測試的粒度最大,一般由獨立測試小組採用黑盒方式來測試,主要測試系統是否符合“需求規格說明書”。

  • 驗收測試:驗收測試也稱交付測試,是針對使用者需求、業務流程進行的正式的測試,以確定系統是否滿足驗收標準,由使用者、客戶或其他授權機構決定是否接受系統。驗收測試與系統測試相似,主要區別是測試人員不同,驗收測試由使用者執行。


3. 迴歸測試

當發現並修改缺陷後,或在軟體中新增新的功能後,重新測試。用來檢查被發現的缺陷是否被改正,並且所做的修改沒有引發新的問題。


4. 冒煙測試

這一術語源自硬體行業。對一個硬體或硬體元件進行更改或修復後,直接給裝置加電。如果沒有冒煙,則該元件就通過了測試。在軟體中,“冒煙測試”這一術語描述的是在將程式碼更改嵌入到產品的源樹中之前對這些更改進行驗證的過程。

冒煙測試是在軟體開發過程中的一種針對軟體版本包的快速基本功能驗證策略,是對軟體基本功能進行確認驗證的手段,並非對軟體版本包的深入測試。

比如:對於一個登入系統的冒煙測試,我們只需測試輸入正確的使用者名稱、密碼,驗證登入這一個核心功能點,至於輸入框、特殊字元等,可以在冒煙測試之後進行。


5. 效能測試

效能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項效能指標進行測試。負載測試壓力測試都屬於效能測試,兩者可以結合進行。

  • 通過負載測試,確定在各種工作負載下系統的效能,目標是測試當負載逐漸增加時,系統各項效能指標的變化情況。

  • 壓力測試是通過確定一個系統的瓶頸或者不能接受的效能點,來獲得系統能提供的最大服務級別的測試。


6. 基準測試

基準測試(Benchmark)也是一種效能測試方式,用來測量機器的硬體最高實際執行效能,以及軟體優化的效能提升效果, 同時也可以用來識別某段程式碼的CPU或者記憶體效率問題. 許多開發人員會用基準測試來測試不同的併發模式, 或者用基準測試來輔助配置工作池的數量, 以保證能最大化系統的吞吐量.


7. A/B測試

A/B測試,是用兩組及以上隨機分配的、數量相似的樣本進行對比,如果實驗組和對比組的實驗結果相比,在目標指標上具有統計顯著性,那就可以說明實驗組的功能可以導致你想要的結果,從而幫你驗證假設或者做出產品決定。


8. 程式碼覆蓋測試

程式碼覆蓋(Code coverage)是軟體測試中的一種度量,描述程式中原始碼被測試的比例和程度,所得比例稱為程式碼覆蓋率。在做單元測試時,程式碼覆蓋率常常被拿來作為衡量測試好壞的指標,甚至,用程式碼覆蓋率來考核測試任務完成情況,比如,程式碼覆蓋率必須達到80%或 90%。於是乎,測試人員費盡心思設計案例覆蓋程式碼。


釋出部署


1. DEV/PRO/FAT/UAT

  • DEV(Development environment):開發環境,用於開發人員除錯使用,版本變化較大。

  • FAT(Feature Acceptance Test environment):功能驗收測試環境,用於軟體測試人員測試使用。

  • UAT(User Acceptance Test environment):使用者驗收測試環境,用於生產環境下的功能驗證,可作為預釋出環境。

  • PRO(Production environment):生產環境,正式線上環境。


2. 灰度釋出

灰度釋出是指在升級版本過程中,通過分割槽控制,白名單控制等方式對一部分使用者先升級產品特性,而其餘使用者則保持不變,當一段時間後升級產品特性的使用者沒有反饋問題,就逐步擴大範圍,最終向所有使用者開放新版本特性,灰度釋出可以保證整體系統的穩定,在初始灰度的時候就可以發現、修改問題,以保證其影響度。


3. 回滾 (Rollback)

指的是程式或資料處理錯誤時,將程式或資料恢復到上一次正確狀態(或者是上一個穩定版本)的行為。

來源:雲加社群

原文:http://t.cn/AiQWteI2

題圖:來自谷歌圖片搜尋

版權:本文版權歸原作者所有

投稿:歡迎投稿,郵箱: editor@hi-linux.com



你可能還喜歡

點選下方圖片即可閱讀

使用 KubeSphere 輕鬆實現微服務灰度釋出與熔斷


已同步到看一看
在看



熱點新聞