譯者 | 朱先忠
審校 | 孫淑娟
引言
一般來說,軟件測試往往是比較簡單的:每個輸入=>已知輸出。然而,縱觀整個軟件測試的歷史,會發(fā)現(xiàn)很多測試往往都停留在猜測水平上。也就是說,測試時由開發(fā)者構想出用戶的操作流程,估計可能出現(xiàn)的負載并分析需要耗費的時間,然后運行測試,并將當前結果與基準答案進行比較。如果我們發(fā)現(xiàn)不存在回歸,那么就認為當前構建方案是正確的;然后,繼續(xù)后面的測試。如果存在回歸,就返回。大多數(shù)時候,我們已經(jīng)知道了輸出結果,盡管它需要更好的定義——回歸的邊界清晰,并不那么模糊。其實,這正是機器學習(ML)系統(tǒng)和預測分析的切入點——結束歧義。
測試完成后,性能工程師所做的工作不僅是查看結果的算術平均值和幾何平均值,他們還會查看有關百分比數(shù)據(jù)。例如,系統(tǒng)運行過程中,往往10%的最慢請求都是由系統(tǒng)錯誤導致的——該錯誤會產(chǎn)生一個總是影響程序運行速度的條件。
雖然我們可以手動關聯(lián)數(shù)據(jù)中可用的屬性,但是ML可能會比您以更快的速度鏈接數(shù)據(jù)屬性。在確定導致10%的錯誤請求的條件后,性能工程師便可以構建測試場景來重現(xiàn)該行為。在修復之前和之后運行測試能夠幫助確定修復已經(jīng)得到更正。
圖1:對績效指標的總體信心
機器學習和數(shù)據(jù)科學的性能
機器學習有助于促進軟件開發(fā),使有關開發(fā)技術更堅固、更好地滿足用戶在不同領域和行業(yè)的需求。我們可以通過將管道和環(huán)境中的數(shù)據(jù)輸入到深度學習算法來暴露因果模式。預測分析算法與性能工程方法相結合,可實現(xiàn)更高效、更快的吞吐量,深入了解終端用戶如何在自然場景下使用軟件,并幫助開發(fā)者降低帶有缺陷的產(chǎn)品應用于生產(chǎn)環(huán)境的可能性。通過及早發(fā)現(xiàn)問題及其原因,您可以在開發(fā)生命周期的早期進行問題糾正,并防止對生產(chǎn)產(chǎn)生影響。總體來看,您可以通過以下方式利用預測分析來提高應用程序性能。
- 確定根本原因。您可以使用機器學習技術來確定可用性或性能問題的根本原因,從而關注其他需要注意的領域。然后,預測分析可以分析每個集群的各種特征,提供我們需要進行更改的見解,以達到理想的性能并避免瓶頸。
- 監(jiān)視應用程序運行狀況。使用機器學習技術執(zhí)行實時應用程序監(jiān)控,有助于企業(yè)能夠及時發(fā)現(xiàn)系統(tǒng)性能降級并迅速作出響應。大多數(shù)應用程序依賴于多個服務來獲得完整應用程序的狀態(tài);預測分析模型能夠在應用程序運行正常時關聯(lián)并分析數(shù)據(jù),以識別傳入數(shù)據(jù)是否為異常值。
- 預測用戶負載。我們依靠峰值用戶流量來調(diào)整基礎設施的規(guī)模,以適應未來訪問應用程序的用戶數(shù)量。這種方法有局限性,因為它不考慮變化或其他未知因素。預測分析有助于顯示用戶負載,并更好地做好應對準備,幫助團隊規(guī)劃其基礎設施需求和容量利用率。
- 在為時已晚之前預測停機。在應用程序停機或停電發(fā)生之前預測它們將有助于采取預防措施。預測分析模型將遵循先前的停電情形,并繼續(xù)監(jiān)測類似情況,以預測未來的故障。
- 停止查看閾值,開始分析數(shù)據(jù)。可觀測性和監(jiān)測產(chǎn)生的大量數(shù)據(jù)每周最多需要幾百兆字節(jié)。即使使用現(xiàn)代分析工具,您也必須事先知道自己在尋找什么。這導致團隊不直接查看數(shù)據(jù),而是設置閾值作為行動的觸發(fā)因素。即使是成熟的團隊也會尋找例外情況,而不是鉆研他們的數(shù)據(jù)。為了緩解這種情況,我們將模型與可用數(shù)據(jù)源集成。然后,模型將篩選數(shù)據(jù)并計算隨時間推移的閾值。使用這種技術,模型被饋送并匯總歷史數(shù)據(jù),提供基于季節(jié)性而不是由人類設定的閾值。基于算法來設置閾值有助于觸發(fā)更少的警報;另一方面,這也帶來更好的可操作性和更高價值。
- 跨數(shù)據(jù)集分析和關聯(lián)。您的數(shù)據(jù)大多是時間序列,因此可以更容易地查看隨時間變化的單個變量。許多趨勢來自多種措施的相互作用。例如,只有在同一目標同時進行各種事務時,響應時間才會下降。對于人類來說,這幾乎是不可能的,但經(jīng)過適當訓練的算法卻有助于發(fā)現(xiàn)這些相關性。
預測分析中數(shù)據(jù)的重要性
“大數(shù)據(jù)”通常指的是數(shù)據(jù)集。不錯,是大數(shù)據(jù)集,速度提升很快,內(nèi)容變化也很大。對于這樣數(shù)據(jù)的分析需要專門的方法,以便我們能夠從中提取模式和信息。近些年來,存儲、處理器、進程并行化以及算法設計的改進都使得系統(tǒng)能夠在合理的時間內(nèi)處理大量數(shù)據(jù),從而允許更廣泛地使用這些方法。為了獲得有意義的結果,您必須確保數(shù)據(jù)的一致性。
例如,每個項目必須使用相同的排名系統(tǒng),因此,如果一個項目使用1作為關鍵值,而另一個項目使用5——就像人們使用“DEFCON 5”表示“DEFCON 1”時一樣;那么,必須在處理之前對這些值進行規(guī)范化處理。預測算法由算法及其輸入的數(shù)據(jù)組成,而軟件開發(fā)產(chǎn)生了大量數(shù)據(jù),直到最近,這些數(shù)據(jù)仍處于閑置狀態(tài),等待刪除。然而,預測分析算法可以處理這些文件,針對我們無法檢測到的模式,根據(jù)這些數(shù)據(jù)提出和回答問題,例如:
- 我們是否在浪費時間測試未使用的場景嗎?
- 性能改進如何與用戶幸福感相關聯(lián)?
- 修復特定缺陷需要多長時間?
這些問題及其答案就是預測分析的用途——更好地理解可能發(fā)生的事情。
算法
預測分析的另一個主要組成部分是算法;您需要仔細選擇或?qū)崿F(xiàn)它。從簡單開始是至關重要的,因為模型往往會變得越來越復雜,對輸入數(shù)據(jù)的變化越來越敏感,并有可能扭曲預測。它們可以解決兩類問題:分類和回歸(見圖2)。
- 分類:分類用于預測集合的結果,方法是從輸入數(shù)據(jù)中推斷標簽(如“向下”或“向上”)開始,將集合劃分為不同的類別。
- 回歸:當輸出變量是一組實值時,回歸用于預測集合的結果。它將處理輸入數(shù)據(jù)來進行預測——例如,使用的內(nèi)存量、開發(fā)人員編寫的代碼行等。最常用的預測模型是神經(jīng)網(wǎng)絡、決策樹以及線性和邏輯回歸。
圖2:分類與回歸
神經(jīng)網(wǎng)絡
神經(jīng)網(wǎng)絡通過實例學習,并使用歷史數(shù)據(jù)和當前數(shù)據(jù)來預測未來價值。它們的架構允許它們識別隱藏在數(shù)據(jù)中的復雜關系,以復制我們大腦檢測模式的方式。它們包含許多層,這些層接受數(shù)據(jù)、計算預測并作為單個預測提供輸出。
決策樹
決策樹是一種分析方法,它將結果呈現(xiàn)在一系列“if/then”選項中,以預測特定選項的潛在風險和收益。它可以解決所有分類問題并回答復雜問題。
如圖3所示,決策樹類似于由算法生成的自頂向下的樹,該算法能夠識別將數(shù)據(jù)分割成分支狀劃分的各種方式,以說明未來的決策并幫助識別決策路徑。
如果加載時間超過三秒,樹中的一個分支可能是放棄購物車的用戶。在這一條之下,另一條分支可能會指明她們是否屬于女性?!皔es”的回答會增加風險,因為分析表明,女性更容易沖動購買,而這種延遲會讓人陷入沉思。
圖3:決策樹示例
線性和邏輯回歸
回歸是最流行的統(tǒng)計方法之一。在估算數(shù)字時,這一點至關重要,例如在“黑色星期五”大促活動期間,我們需要為每項服務增加多少資源。許多回歸算法被設計來估計變量之間的關系,在龐大的和混合的數(shù)據(jù)集中找到關鍵模式,以及它們之間的關系。它的范圍從簡單的線性回歸模型(計算擬合數(shù)據(jù)的直線函數(shù))到邏輯回歸(計算曲線)(圖4)。
線性和邏輯回歸總體對比 | |
線性回歸 | 邏輯回歸 |
用于定義連續(xù)范圍內(nèi)的值,例如接下來幾個月用戶流量峰值的風險。 | 這是一種統(tǒng)計方法,其中參數(shù)是根據(jù)舊的集合預測的。它最適合二進制分類:y=0或1的數(shù)據(jù)集,其中1表示默認類別。它的名字來源于它的轉換函數(shù)(是一個邏輯函數(shù))。 |
它表示為y=a+bx,其中x是用于確定輸出y的輸入集。系數(shù)a和b用于量化x和y之間的關系,其中a是截距,b是直線的斜率。 | 它由邏輯函數(shù)表示: 其中,β0是截距,β1是速率。它使用訓練數(shù)據(jù)來計算系數(shù),將預測結果與實際結果之間的誤差最小化。 |
目標是擬合最接近大多數(shù)點的直線,減少y和直線之間的距離或誤差。 | 它形成S形曲線,其中應用閾值將概率轉換為二進制分類。 |
圖4:線性回歸與邏輯回歸
這些是監(jiān)督學習方法,因為算法解決了特定的屬性。當你心中沒有特定的結果,但想確定可能的模式或趨勢時,可以使用無監(jiān)督學習。在這種情況下,該模型將分析盡可能多的特征組合,以找到人類可以采取行動的相關性。
圖5:有監(jiān)督與無監(jiān)督學習
性能工程中的“左移”
使用以前的算法來衡量消費者對產(chǎn)品和應用程序的看法,使得性能工程更加以消費者為中心。收集所有信息后,必須通過適當?shù)墓ぞ吆退惴▽ζ溥M行存儲和分析。這些數(shù)據(jù)可以包括錯誤日志、測試用例、測試結果、生產(chǎn)事件、應用程序日志文件、項目文檔、事件日志、跟蹤,等等。然后,我們可以將其應用于數(shù)據(jù)中,以獲得各種見解:
- 分析環(huán)境中的缺陷
- 評估對客戶體驗的影響
- 確定問題模式
- 創(chuàng)建更準確的測試場景,等等
該技術支持質(zhì)量方面的左移(shift-left)方法,允許您預測執(zhí)行性能測試所需的時間、可能識別的缺陷數(shù)量以及可能導致生產(chǎn)的缺陷數(shù)量,從而實現(xiàn)性能測試的更好覆蓋,并創(chuàng)建真實的用戶體驗??煞乐购图m正可用性、兼容性、性能和安全性等問題,而不會影響用戶。
以下是一些有助于提高質(zhì)量的信息類型的示例:
- 缺陷類型
- 在哪個階段發(fā)現(xiàn)了缺陷
- 缺陷的根本原因是什么
- 缺陷是否可再現(xiàn)
一旦您了解了這一點,就可以進行更改并創(chuàng)建測試,以更快地防止類似問題。
結論
自編程誕生以來,軟件工程師已經(jīng)做出了成百上千的假設。但是,今天的數(shù)字用戶們更加意識到這一點,而且對錯誤和失敗的容忍度也進一步降低。另一方面,企業(yè)也在競相通過量身定制的服務和越來越難測試的復雜軟件,力圖提供更具吸引力和完美的用戶體驗。
今天,一切都需要無縫工作,并支持所有流行的瀏覽器、移動設備和應用程序。即使是幾分鐘的撞車事故也可能造成數(shù)千或數(shù)百萬美元的損失。為了防止出現(xiàn)問題,團隊必須在整個軟件生命周期中整合可觀測性解決方案和用戶體驗。管理復雜系統(tǒng)的質(zhì)量和性能需要的不僅僅是執(zhí)行測試用例和運行負載測試。趨勢可以幫助您判斷情況是否得到控制、好轉或惡化,以及改善或惡化的速度。機器學習技術可以幫助預測性能問題,使團隊能夠正確進行方案調(diào)整。最后,讓我們來引用本杰明·富蘭克林(Benjamin Franklin)的一句話作為結束語:“一盎司預防抵得上一磅治療?!?/span>
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:??Performance Engineering Powered by Machine Learning??,作者: