导语工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于系统开发、架构设计、网络通信等几个方面让大家对后台来发有一个清晰的了解,讲解全面易懂。(作者:willlv)
系統開發
- 高內聚/低耦合
高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。一个完整的系统,模块与模块之间,尽可能的使其独立存在。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
- 過度設計
過度設計就是進行了過多的面向未來的設計或者說把相對簡單的事情想複雜了,過度追求模塊化、可擴展性、設計模式等,為系統增加了不必要的複雜度。
- 過早優化
過早指的不是在開發過程的早期,而是在還沒弄清楚需求未來的變化的走向的時候。你的優化不僅可能導致你無法很好地實現新的需求,而且你對優化的預期的猜測有可能還是錯的,導致實際上你除了把代碼變複雜以外什麼都沒得到。
正确的方法是,先有质量地实现你的需求,写够testcase,然后做profile去找到性能的瓶颈,这个时候才做优化。
- 重構 (refactoring)
重構(refactoring)就是通過調整程式代碼改善軟體的質量、性能,使其程式的設計模式和架構更趨合理,提高軟體的擴展性和維護性。
- 破窗效應
又稱破窗理論,破窗效應(broken windows theory)是犯罪學的一個理論。此理論認為環境中的不良現象如果被放任存在,會誘使人們仿效,甚至變本加厲。一幢有少許破窗的建築為例,如果那些窗不被修理好,可能將會有破壞者破壞更多的窗戶。最終他們甚至會闖入建築內,如果發現無人居住,也許就在那裡定居或者縱火。
应用在软件工程上就是,一定不能让系统代码或者架构设计的隐患有冒头的机会,否则随着时间的推移,隐患会越来越重。反之,一个本身优质的系统,会让人不由自主的写出优质的代码。
- 互不信任原則
指在程式運行上下游的整個鏈路中,每個點都是不能保證絕對可靠的,任何一個點都可能隨時發生故障或者不可預知的行為,包括機器網絡、服務本身、依賴環境、輸入和請求等,因此要處處設防。
- 持久化 (persistence)
持久化是將程式數據在臨時狀態和持久狀態間轉換的機制。通俗的講,就是臨時數據(比如內存中的數據,是不能永久保存的)持久化為持久數據(比如持久化至資料庫或者本地磁碟中,能夠長久保存)。
- 臨界區
臨界區用來表示一種公共資源或者說是共享數據,可以被多個線程使用,但是每一次,只能有一個線程使用它,一旦臨界區資源被占用,其他線程要想使用這個資源,就必須等待。
- 阻塞/非阻塞
阻塞和非阻塞通常形容多線程間的相互影響。比如一個線程占用了臨界區資源,那麼其他所有需要這個資源的線程就必須在這個臨界區中進行等待,等待會導致線程掛起。這種情況就是阻塞。此時,如果占用資源的線程一直不願意釋放資源,那麼其他所有阻塞在這個臨界區上的線程都不能工作。而非阻塞允許多個線程同時進入臨界區。
- 同步/異步
通常同步和異步是指函數/方法調用方面。
同步就是在發出一個函數調用時,在沒有得到結果之前,該調用就不返回。異步調用會瞬間返回,但是異步調用瞬間返回並不代表你的任務就完成了,他會在後台起個線程繼續進行任務,等任務執行完畢後通過回調 callback 或其他方式通知調用方。
- 並發/並行
并行(parallel)
指在同一時刻,有多條指令在多個處理器上同時執行。所以無論從微觀還是從宏觀來看,二者都是一起執行的。
并发(concurrency)
指在同一時刻只能有一條指令執行,但多個進程指令被快速的輪換執行,使得在宏觀上具有多個進程同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干段,使多個進程快速交替的執行。
架構設計
- 高並發 (high concurrency)
由於分布式系統的問世,高並發(high concurrency)通常是指通過設計保證系統能夠同時並行處理很多請求。通俗來講,高並發是指在同一個時間點,有很多用戶同時的訪問同一 api 接口或者 url 地址。它經常會發生在有大活躍用戶量,用戶高聚集的業務場景中。
- 高可用 (high availability)
高可用 ha(high availability)是分布式系統架構設計中必須考慮的因素之一,它通常是指,一個系統經過專門的設計,以減少停工時間,而保持其服務的高度可用性。
- 讀寫分離
為了確保資料庫產品的穩定性,很多資料庫擁有雙機熱備功能。也就是,第一台資料庫伺服器,是對外提供增刪改業務的生產伺服器;第二台資料庫伺服器,主要進行讀的操作。
- 冷備/熱備
冷备:两个服务器,一台运行,一台不运行作为备份。这样一旦运行的服务器宕机,就把备份的服务器运行起来。冷备的方案比较容易实现,但冷备的缺点是主机出现故障时备机不会自动接管,需要主动切换服务。热备:即是通常所说的active/standby方式,服务器数据包括数据库数据同时往两台或多台服务器写。当 active 服务器出现故障的时候,通过软件诊测(一般是通过心跳诊断)将 standby 机器激活,保证应用在短时间内完全恢复正常使用。当一台服务器宕机后,自动切换到另一台备用机使用。
- 異地多活
异地多活一般是指在不同城市建立独立的数据中心,“活”是相对于冷备份而言的,冷备份是备份全量数据,平时不支撑业务需求,只有在主机房出现故障的时候才会切换到备用机房,而多活,是指这些机房在日常的业务中也需要走流量,做业务支撑。
- 負載均衡 (load balance)
負載均衡,是對多台伺服器進行流量分發的負載均衡服務。可在多個實例間自動分配應用程式的對外服務能力,通過消除單點故障提升應用系統的可用性,讓您實現更高水平的應用程式容錯能力,從而無縫提供分配應用程式流量所需的負載均衡容量,為您提供高效、穩定、安全的服務。
- 動靜分離
動靜分離是指在 web 伺服器架構中,將靜態頁面與動態頁面或者靜態內容接口和動態內容接口分開不同系統訪問的架構設計方法,進而提升整個服務訪問性能和可維護性。
- 集群
單台伺服器的並發承載能力總是有限的,當單台伺服器處理能力達到性能瓶頸的時,將多台伺服器組合起來提供服務,這種組合方式稱之為集群,集群中每台伺服器就叫做這個集群的一個“節點”,每個節點都能提供相同的服務,從而成倍的提升整個系統的並發處理能力。
- 分布式
分布式系統就是將一個完整的系統按照業務功能拆分成很多獨立的子系統,每個子系統就被稱為“服務”,分布式系統將請求分揀和分發到不同的子系統,讓不同的服務來處理不同的請求。在分布式系統中,子系統獨立運行,它們之間通過網絡通信連接起來實現數據互通和組合服務。
- cap 理論
cap 理論,指的是在一個分布式系統中,consistency(一致性)、availability(可用性)、partition tolerance(分區容錯性),不能同時成立。
一致性:它要求在同一時刻點,分布式系統中的所有數據備份都相同或者都處於同一狀態。
可用性:在系統集群的一部分節點宕機後,系統依然能夠正確的響應用戶的請求。
分區容錯性:系統能夠容忍節點之間的網絡通信的故障。
简单的来说,在一个分布式系统中,最多能支持上面的两种属性。但显然既然是分布式注定我们是必然要进行分区,既然分区,我们就无法百分百避免分区的错误。因此,我们只能在一致性和可用性去作出选择。
在分布式系統中,我們往往追求的是可用性,它的重要性比一致性要高,那麼如何實現高可用,這裡又有一個理論,就是 base 理論,它給 cap 理論做了進一步的擴充。
- base 理論
base 理論指出:
basically available(基本可用)
soft state(軟狀態)
eventually consistent(最終一致性)
BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
- 水平擴展/垂直擴展
水平扩展 Scale Out通过增加更多的服务器或者程序实例来分散负载,从而提升存储能力和计算能力。垂直扩展 Scale Up提升单机处理能力。
垂直擴展的方式又有兩種:
(1)增强单机硬件性能,例如:增加 CPU 核数如 32 核,升级更好的网卡如万兆,升级更好的硬盘如 SSD,扩充硬盘容量如 2T,扩充系统内存如 128G;
(2)提升单机软件或者架构性能,例如:使用 Cache 来减少 IO 次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;
- 平行擴容
與水平擴展類似。集群伺服器中的節點均為平行對等節點,當需要擴容時,可以通過添加更多節點以提高集群的服務能力。一般來說伺服器中關鍵路徑(如伺服器中的登錄、支付、核心業務邏輯等)都需要支持運行時動態平行擴容。
- 彈性擴容
指對部署的集群進行動態在線擴容。彈性擴容系統可以根據實際業務環境按照一定策略自動地添加更多的節點(包括存儲節點、計算節點、網絡節點)來增加系統容量、提高系統性能或者增強系統可靠性,或者同時完成這三個目標。
- 狀態同步/幀同步
- 狀態同步:狀態同步是指伺服器負責計算全部的遊戲邏輯,並且廣播這些計算的結果,客戶端僅僅負責發送玩家的操作,以及表現收到的遊戲結果。
特征:状态同步安全性高,逻辑更新方便,断线重连快,但是开发效率较低,网络流量随游戏复杂度增加,服务器需要承载更大压力。
帧同步:服务端只转发消息,不做任何逻辑处理,各客户端每秒帧数一致,在每一帧都处理同样的输入数据。
特徵:幀同步需要保證系統在相同的輸入下,要有相同的輸出。幀同步開發效率高,流量消耗低而且穩定,對伺服器的壓力非常小。但是網絡要求高,斷線重連時間長,客戶端計算壓力大。
網絡通信
- 連接池
預先建立一個連接緩衝池,並提供一套連接使用、分配、管理策略,使得該連接池中的連接可以得到高效、安全的復用,避免了連接頻繁建立、關閉的開銷。
- 斷線重連
由於網絡波動造成用戶間歇性的斷開與伺服器的連接,待網絡恢復之後伺服器嘗試將用戶連接到上次斷開時的狀態和數據。
- 會話保持
會話保持是指在負載均衡器上的一種機制,可以識別客戶端與伺服器之間交互過程的關連性,在作負載均衡的同時還保證一系列相關連的訪問請求都會分配到一台機器上。用人話來表述就是:在一次會話過程中發起的多個請求都會落到同一台機器上。
- 長連接/短連接
通常是指 tcp 的長連接和短連接。長連接就是建立 tcp 連接後,一直保持這個連接,一般會中間彼此發送心跳來確認對應的存在,中間會做多次業務數據傳輸,一般不會主動斷開連接。短連接一般指建立連接後,執行一次事務後(如:http 請求),然後就關掉這個連接。
- 流量控制/擁塞控制
流量控制防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。拥塞控制防止发送方发的太快,使得网络来不及处理产生拥塞,进而引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿。
- 驚群效應
驚群效應也有人叫做雷鳴群體效應,不過叫什麼,簡言之,驚群現象就是多進程(多線程)在同時阻塞等待同一個事件的時候(休眠狀態),如果等待的這個事件發生,那麼他就會喚醒等待的所有進程(或者線程),但是最終卻只可能有一個進程(線程)獲得這個時間的“控制權”,對該事件進行處理,而其他進程(線程)獲取“控制權”失敗,只能重新進入休眠狀態,這種現象和性能浪費就叫做驚群。
- NAT
nat(network address translation,網絡地址轉換),就是替換 ip 報文頭部的地址信息。nat 通常部署在一個組織的網絡出口位置,通過將內部網絡 ip 地址替換為出口的 ip 地址提供公網可達性和上層協議的連接能力。
故障異常
- 宕機
宕機,一般情況下指的就是計算機主機出現意外故障而死機。其次,一些伺服器例如資料庫死鎖也可以稱為宕機,一些伺服器的某些服務掛掉了,就可以這麼說。
- coredump
當程式出錯而異常中斷時,os 會把程式工作的當前狀態存儲成一個 coredunmp 文件。通常情況下 coredump 文件包含了程式運行時的內存,寄存器狀態,堆棧指針,內存管理信息等。
- 緩存穿透/擊穿/雪崩
緩存穿透:緩存穿透是指查詢一個一定不存在的數據,由於緩存是不命中時需要從資料庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到資料庫去查詢,進而給資料庫帶來壓力。
緩存擊穿:緩存擊穿是指熱點 key 在某個時間點過期的時候,而恰好在這個時間點對這個 key 有大量的並發請求過來,從而大量的請求打到 db。
緩存雪崩:緩存雪崩是指緩存中數據大批量到過期時間,而查詢數據量巨大,引起資料庫壓力過大甚至 down 機。
與緩存擊穿不同的是:存擊穿是熱點 key 失效,緩存雪崩是大量的 key 同時失效。
- 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 錯誤可能是程式語言錯誤,其餘的報錯,都大概可以理解為伺服器或者伺服器配置出現問題。
- 內存溢出/內存泄漏
内存溢出:内存溢出(Out Of Memory)指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储 int 类型数据的存储空间,但是你却存储 long 类型的数据,那么结果就是内存不够用,此时就会报错 OOM,即所谓的内存溢出。内存泄漏:内存泄漏(Memory Leak)指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
- 句柄泄漏
句柄泄漏是進程在調用系統文件之後,沒有釋放已經打開的文件句柄。一般句柄泄漏後的現象是,機器變慢,cpu 飆升,出現句柄泄漏的 cgi 或 server 的 cpu 使用率增加。
- 死鎖
死鎖是指兩個或兩個以上的線程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都抑制處於阻塞狀態並無法進行下去,此時稱系統處於死鎖狀態或系統產生了死鎖。
- 軟中斷/硬中斷
硬中断:我们通常所说的中断指的是硬中断(hardirq)。
由與系統相連的外設(比如網卡、硬碟)自動產生的。
主要是用來通知作業系統系統外設狀態的變化。
软中断:1、通常是硬中断服务程序对内核的中断;2、为了满足实时系统的要求,中断处理应该是越快越好。
linux 為了實現這個特點,當中斷發生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之後來完成,也就是軟中斷(softirq)來完成。
- 毛刺
在短暫的某一刻,伺服器性能指標(如流量、磁碟 io、cpu 使用率等)遠大於該時刻前後時間段。毛刺的出現代表這伺服器資源利用不均勻,不充分,容易誘發其他更嚴重的問題。
- 重放攻擊
攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。它是一種攻擊類型,這種攻擊會不斷惡意或欺詐性地重複一個有效的數據傳輸,重放攻擊可以由發起者,也可以由攔截並重發該數據的敵方進行。攻擊者利用網絡監聽或者其他方式盜取認證憑據,之後再把它重新發給認證伺服器。
- 網絡孤島
網絡孤島指集群環境中,部分機器與整個集群失去網絡連接,分裂為一個小集群並且發生數據不一致的狀況。
- 數據傾斜
對於集群系統,一般緩存是分布式的,即不同節點負責一定範圍的緩存數據。我們把緩存數據分散度不夠,導致大量的緩存數據集中到了一台或者幾台服務節點上,稱為數據傾斜。一般來說數據傾斜是由於負載均衡實施的效果不好引起的。
- 腦裂
腦裂是指在集群系統中,部分節點之間網絡不可達而引起的系統分裂,不同分裂的小集群會按照各自的狀態提供服務,原本的集群會同時存在不一致的反應,造成節點之間互相爭搶資源,系統混亂,數據損壞。
監控告警
- 服務監控
服務監控主要目的在服務出現問題或者快要出現問題時能夠準確快速地發現以減小影響範圍。服務監控一般有多種手段,按層次可劃分為:
系統層(cpu、網絡狀態、io、機器負載等)
應用層(進程狀態、錯誤日誌、吞吐量等)
業務層(服務/接口的錯誤碼、響應時間)
用戶層(用戶行為、輿情監控、前端埋點)
- 全鏈路監控
- 服務撥測:服務撥測是探測服務(應用)可用性的監控方式,通過撥測節點對目標服務進行周期性探測,主要通過可用性和響應時間來度量,撥測節點通常有異地多個。
- 節點探測:節點探測是用來發現和追蹤不同的機房(數據中心)節點之間網絡可用性和通暢性的監控方式,主要通過響應時間、丟包率、跳數來度量,探測方法一般是 ping、mtr 或其他私有協議。
- 告警過濾:對某些可預知的告警進行過濾,不進入告警統計的數據,如少量爬蟲訪問導致的 http 響應 500 錯誤,業務系統自定義異常信息等。
- 告警去重:當一個告警通知負責人後,在這個告警恢復之前,不會繼續收到相同的告警。
- 告警抑制:為了減少由於系統抖動帶來的干擾,還需要實現抑制,例如伺服器瞬間高負載,可能是正常的,只有持續一段時間的高負載才需要得到重視。
- 告警恢復:開發/運維人員不僅需要收到告警通知,還需要收到故障消除告警恢復正常的通知。
- 告警合併:對同一時刻產生的多條相同告警進行合併,如某個微服務集群同一時刻出現多個子服務負載過高的告警,需要合併成為一條告警。
- 告警收斂:有時某個告警產生時,往往會伴隨著其他告警。這時可以只對根本原因產生告警,其他告警收斂為子告警一併發送通知。如雲伺服器出現 cpu 負載告警時往往伴隨其搭載的所有系統的可用性告警。
- 故障自愈:實時發現告警,預診斷分析,自動恢復故障,並打通周邊系統實現整個流程的閉環。
服務治理
- 微服務
微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間相互協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務和服務之間採用輕量級的通信機制相互溝通(通常是基於 http 的 restful api).每個服務都圍繞著具體的業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。
- 服務發現
服務發現是指使用一個註冊中心來記錄分布式系統中的全部服務的信息,以便其他服務能夠快速的找到這些已註冊的服務。服務發現是支撐大規模 soa 和微服務架構的核心模塊,它應該儘量做到高可用。
- 流量削峰
如果觀看抽獎或秒殺系統的請求監控曲線,你就會發現這類系統在活動開放的時間段內會出現一個波峰,而在活動未開放時,系統的請求量、機器負載一般都是比較平穩的。為了節省機器資源,我們不可能時時都提供最大化的資源能力來支持短時間的高峰請求。所以需要使用一些技術手段,來削弱瞬時的請求高峰,讓系統吞吐量在高峰請求下保持可控。削峰也可用於消除毛刺,使伺服器資源利用更加均衡和充分。常見的削峰策略有隊列,限頻,分層過濾,多級緩存等。
- 版本兼容
在升級版本的過程中,需要考慮升級版本後,新的數據結構是否能夠理解和解析舊數據,新修改的協議是否能夠理解舊的協議以及做出預期內合適的處理。這就需要在服務設計過程中做好版本兼容。
- 過載保護
過載是指當前負載已經超過了系統的最大處理能力,過載的出現,會導致部分服務不可用,如果處置不當,極有可能引起服務完全不可用,乃至雪崩。過載保護正是針對這種異常情況做的措施,防止出現服務完全不可用的現象。
- 服務熔斷
服務熔斷的作用類似於我們家用的保險絲,當某服務出現不可用或響應超時的情況時,為了防止整個系統出現雪崩,暫時停止對該服務的調用。
- 服務降級
服務降級是當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常運行。降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。
根據服務方式:可以拒接服務,可以延遲服務,也有時候可以隨機服務。
根據服務範圍:可以砍掉某個功能,也可以砍掉某些模塊。
总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好。
- 熔斷 vs 降級
相同点:
目标一致,都是从可用性和可靠性出发,为了防止系统崩溃;用户体验类似,最终都让用户体验到的是某些功能暂时不可用;不同点:
触发原因不同,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;
- 服務限流
限流可以認為服務降級的一種,限流就是限制系統的輸入和輸出流量已達到保護系統的目的。一般來說系統的吞吐量是可以被測算的,為了保證系統的穩定運行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的。比如:延遲處理,拒絕處理,或者部分拒絕處理等等。
- 故障屏蔽
將故障機器從集群剔除,以保證新的請求不會分發到故障機器。
測試方法
- 黑盒/白盒測試
黑盒测试不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书。一般会有一个输入值,一个输入值,和期望值做比较。
白盒测试主要应用在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构,测试手段有:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖
- 單元/集成/系統/驗收測試
軟體測試一般分為 4 個階段:單元測試、集成測試、系統測試、驗收測試。
单元测试:单元测试是对软件中的最小可验证单元进行检查和验证,如一个模块、一个过程、一个方法等。单元测试粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。集成测试:集成测试也叫做组装测试,通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。系统测试:系统测试时将经过集成测试的软件,作为计算机系统的一部分,与系统中其他部分结合起来,在实际运行环境下进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。验收测试:验收测试也称交付测试,是针对用户需求、业务流程进行的正式的测试,以确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行。
- 回歸測試
當發現並修改缺陷後,或在軟體中添加新的功能後,重新測試。用來檢查被發現的缺陷是否被改正,並且所做的修改沒有引發新的問題。
- 冒煙測試
這一術語源自硬體行業。對一個硬體或硬體組件進行更改或修復後,直接給設備加電。如果沒有冒煙,則該組件就通過了測試。在軟體中,“冒煙測試”這一術語描述的是在將代碼更改嵌入到產品的源樹中之前對這些更改進行驗證的過程。
冒煙測試是在軟體開發過程中的一種針對軟體版本包的快速基本功能驗證策略,是對軟體基本功能進行確認驗證的手段,並非對軟體版本包的深入測試。
比如:對於一個登錄系統的冒煙測試,我們只需測試輸入正確的用戶名、密碼,驗證登錄這一個核心功能點,至於輸入框、特殊字符等,可以在冒煙測試之後進行。
- 性能測試
性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬於性能測試,兩者可以結合進行。
通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。
壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。
- 基準測試
基準測試(benchmark)也是一種性能測試方式,用來測量機器的硬體最高實際運行性能,以及軟體優化的性能提升效果, 同時也可以用來識別某段代碼的 cpu 或者內存效率問題.許多開發人員會用基準測試來測試不同的併發模式, 或者用基準測試來輔助配置工作池的數量, 以保證能最大化系統的吞吐量.
- a/b 測試
a/b 測試,是用兩組及以上隨機分配的、數量相似的樣本進行對比,如果實驗組和對比組的實驗結果相比,在目標指標上具有統計顯著性,那就可以說明實驗組的功能可以導致你想要的結果,從而幫你驗證假設或者做出產品決定。
- 代碼覆蓋測試
代碼覆蓋(code coverage)是軟體測試中的一種度量,描述程式中原始碼被測試的比例和程度,所得比例稱為代碼覆蓋率。在做單元測試時,代碼覆蓋率常常被拿來作為衡量測試好壞的指標,什至,用代碼覆蓋率來考核測試任務完成情況,比如,代碼覆蓋率必須達到 80%或 90%。於是乎,測試人員費盡心思設計案例覆蓋代碼。
發布部署
- DEV/PRO/FAT/UAT
DEV(Development environment):开发环境,用于开发人员调试使用,版本变化较大。FAT(Feature Acceptance Test environment):功能验收测试环境,用于软件测试人员测试使用。UAT(User Acceptance Test environment):用户验收测试环境,用于生产环境下的功能验证,可作为预发布环境。PRO(Production environment):生产环境,正式线上环境。
- 灰度發布
灰度發布是指在升級版本過程中,通過分區控制,白名單控制等方式對一部分用戶先升級產品特性,而其餘用戶則保持不變,當一段時間後升級產品特性的用戶沒有反饋問題,就逐步擴大範圍,最終向所有用戶開放新版本特性,灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現、修改問題,以保證其影響度。
- 回滾 (rollback)
指的是程式或數據處理錯誤時,將程式或數據恢復到上一次正確狀態(或者是上一個穩定版本)的行為。