#系統開發
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.動靜分離
動靜分離是指在網頁伺服器架構中,將靜態頁面與動態頁面或靜態內容介面和動態內容介面分開不同系統存取的架構設計方法,進而提升整個服務存取效能和可維護性。
8. 叢集
單一伺服器的同時承載能力總是有限的,當單一伺服器處理能力達到效能瓶頸的時,將多台伺服器組合起來提供服務,這種組合方式稱之為集群,集群中每台伺服器就叫做這個集群的一個“節點”,每個節點都能提供相同的服務,從而成倍的提升整個系統的並發處理能力。
9. 分散式
分散式系統就是將一個完整的系統按照業務功能拆分成很多獨立的子系統,每個子系統就被稱為“服務”,分散式系統將請求分類和分發到不同的子系統,讓不同的服務來處理不同的請求。在分散式系統中,子系統獨立運行,它們之間透過網路通訊連接起來實現資料互通和組合服務。
10. CAP理論
CAP理論,指的是在一個分散式系統中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分區容錯性),不能同時成立。
- 一致性:它要求在同一時刻點,分散式系統中的所有資料備份都相同或都處於相同狀態。
- 可用性:在系統叢集的一部分節點宕機後,系統依然能夠正確的回應使用者的請求。
- 分區容錯性:系統能夠容忍節點之間的網路通訊的故障。
簡單的來說,在一個分散式系統中,最多能支援上面的兩個屬性。但顯然既然是分散式註定我們是必然要進行分區,既然分區,我們就無法百分之百避免分區的錯誤。因此,我們只能在一致性和可用性下做出選擇。
在分散式系統中,我們往往追求的是可用性,它的重要性比一致性要高,那麼如何實現高可用,這裡又有一個理論,就是BASE 理論,它給CAP 理論做了進一步的擴充。
11. BASE理論
BASE 理論指出:
- Basically Available(基本上可用)
- 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:內部服務錯誤,一般是伺服器遇到意外狀況,而無法完成要求。可能原因:
501 Not implemented:伺服器不理解或不支援請求的HTTP請求。
502 Bad Gateway:WEB伺服器故障,可能是由於程式進程不夠,請求的php-fpm已經執行,但是由於某種原因而沒有執行完畢,最終導致php-fpm進程終止。可能原因:
#503 Service Unavailable:伺服器目前無法使用。系統維護伺服器暫時的無法處理客戶端的請求,這只是暫時狀態。可以聯繫下伺服器提供者。
504 Gateway Timeout:伺服器504錯誤表示逾時,是指客戶端所發出的請求沒有到達網關,請求沒有到可以執行的php-fpm,一般是與nginx.conf的設定有關。
505 HTTP 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. 服務監控
服務監控主要目的在服務出現問題或快要出現問題時能夠準確快速地發現以減小影響範圍。服務監控一般有多種手段,依層次可劃分為:
2. 全鏈路監控
服務撥測:服務撥測是探測服務(應用)可用性的監控方式,透過撥測節點對目標服務進行週期性探測,主要透過可用性和回應時間來度量,撥測節點通常有異地多個。
節點探測:節點探測是用來發現和追蹤不同的機房(資料中心)節點之間網路可用性和通暢性的監控方式,主要透過回應時間、丟包率、跳數來度量,探測方法一般是ping、mtr或其他私有協定。
警告過濾:對某些可預測的警告進行過濾,不進入警告統計的數據,如少量爬蟲訪問導致的http響應500錯誤,業務系統自定義異常信息等。
告警去重:當一個告警通知負責人後,在這個告警恢復之前,不會繼續收到相同的告警。
警告抑制:為了減少由於系統抖動帶來的干擾,也需要實現抑制,例如伺服器瞬間高負載,可能是正常的,只有持續一段時間的高負載才需要得到重視。
警告恢復:開發/維警人員不僅需要收到警告通知,還需要收到故障消除警告恢復正常的通知。
警告合併:對同一時刻產生的多個相同警告進行合併,如某個微服務集群同一時刻出現多個子服務負載過高的告警,需要合併成為一則告警。
告警收斂:有時某個告警產生時,往往會伴隨著其它告警。這時可以只對根本原因產生告警,其它告警收斂為子告警一並發送通知。如雲端伺服器出現CPU負載警告時往往伴隨其搭載的所有系統的可用性警告。
故障自癒:即時發現告警,預診斷分析,自動恢復故障,並打通週邊系統實現整個流程的閉環。
服務治理
1. 微服務
#微服務架構是一種架構模式,它提倡將單一應用程式分割成一組小的服務,服務之間相互協調、互相配合,為使用者提供最終價值。每個服務運行在其獨立的進程中,服務和服務之間採用輕量級的通信機制相互溝通(通常是基於HTTP的Restful API).每個服務都圍繞著具體的業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。
2. 服務發現
服務發現是指使用一個註冊中心來記錄分散式系統中的全部服務的信息,以便其他服務能夠快速的找到這些已註冊的服務。服務發現是支撐大規模 SOA 和微服務架構的核心模組,它應該盡量做到高可用。
3. 流量削峰
如果觀看抽獎或秒殺系統的請求監控曲線,你會發現這類系統在活動開放的時間內會出現一個波峰,而在活動未開放時,系統的請求量、機器負載一般都是比較平穩的。為了節省機器資源,我們不可能時時都提供最大化的資源能力來支援短時間的高峰請求。所以需要使用一些技術手段,來削弱瞬時的請求高峰,讓系統吞吐量在高峰請求下保持可控。削峰也可用於消除毛刺,使伺服器資源利用更加均衡和充分。常見的削峰策略有佇列,限頻,分層過濾,多層快取等。
4. 版本相容
在升級版本的過程中,需要考慮升級版本後,新的資料結構是否能夠理解和解析舊數據,新修改的協定是否能夠理解舊的協議以及做出預期內合適的處理。這就需要在服務設計過程中做好版本相容。
5. 過載保護
過載是指當前負載已經超過了系統的最大處理能力,過載的出現,會導致部分服務不可用,如果處置不當,極有可能引起服務完全不可用,乃至雪崩。過載保護正是針對這種異常情況所做的措施,防止服務完全不可用的現象。
6. 服務熔斷
服務熔斷的作用類似於我們家用的保險絲,當某服務出現不可用或響應超時的情況時,為了防止整個系統出現雪崩,暫時停止對該服務的調用。
7. 服務降級
服務降級是當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常運作。降級往往會指定不同的級別,面對不同的異常等級執行不同的處理。另外,搜尋公眾號Java架構師技術後台回覆“Spring”,取得一份驚喜禮包。
根據服務方式:可以拒接服務,可以延遲服務,也有時候可以隨機服務。
根據服務範圍:可以砍掉某個功能,也可以砍掉某些模組。
總之服務降級需要根據不同的業務需求採用不同的降級策略。主要的目的就是服務雖然有損但是總比沒有好。
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)
指的是程式或資料處理錯誤時,將程式或資料還原到上一次正確狀態(或是上一個穩定版本)的行為。