讓我們從體育類比開始,以幫助說明這兩種方法之間的區(qū)別。靜態(tài)代碼分析類似于使用練習(xí)網(wǎng)和投球機(jī)練習(xí)棒球揮桿。幾乎沒有什么驚喜。經(jīng)過幾次揮桿后,您確切地知道每次球都在哪里。這有助于基礎(chǔ)知識的工作,并確保您具有良好的狀態(tài)。雖然這有助于改善您的游戲,但它只能使您步入正軌。

動態(tài)代碼分析更像是在帶電投手的情況下練習(xí)揮桿動作,每個投球的類型和位置都會發(fā)生變化。它不僅測試您的基礎(chǔ)知識,還測試您對不同的意外情況做出反應(yīng)的能力。在生產(chǎn)中完成后,就好比在第9根底部裝滿底座的時候完善揮桿動作。我是否提到分?jǐn)?shù)與2局并列?賭注很高。

現(xiàn)在,讓我們從技術(shù)角度比較和對比這兩種不同的樣式。

靜態(tài)代碼分析

靜態(tài)代碼分析是一種調(diào)試方法,通過在運(yùn)行程序之前檢查應(yīng)用程序的源代碼來完成。這通常是通過對照給定的一組規(guī)則或編碼標(biāo)準(zhǔn)來分析代碼來完成的。

這個地址是什么?

這些通??梢越鉀Q代碼漏洞,代碼氣味和遵守公認(rèn)的編碼標(biāo)準(zhǔn)。這些包括常見的開發(fā)人員錯誤,這些錯誤通常在“代碼同行評論”中發(fā)現(xiàn)。

在SDLC(軟件開發(fā)生命周期)的哪個階段可以使用靜態(tài)代碼分析?

這些通常在“代碼開發(fā)”階段之后和“單元/組件/集成”測試階段之前的任何階段合并。在某些情況下,CI / CD管道將靜態(tài)分析報告納入代碼提升的質(zhì)量門。

好處

除其他好處外,識別代碼弱點(diǎn)和遵守嚴(yán)格的開發(fā)標(biāo)準(zhǔn)的能力還有助于減少潛在的生產(chǎn)問題。這些還提供了“測試覆蓋率”報告,這些報告描述了代碼執(zhí)行的程度。

局限性

在現(xiàn)實(shí)生活中,對“喬”有效的方法對“簡”無效。靜態(tài)代碼分析將兩者視為相同,因?yàn)樗床坏綌?shù)據(jù)。

考慮以下偽代碼:

function getFullName(firstName) {

if (firstName == “Joe”)

return “Joe Smith”

if (firstName == “Jane”)

return “Dave”// This is incorrect business logic

if (firstName != “Joe or Jane”)

return “Joey”

}

在上面的示例中,靜態(tài)代碼分析無法理解開發(fā)人員的意圖。預(yù)期“簡氏”全名為“簡氏”的用戶將獲得“戴夫”。其他任何名稱都將返回“ Joey”。任何期望有效用戶的下游應(yīng)用程序現(xiàn)在都將遇到運(yùn)行時錯誤或異常。

靜態(tài)和動態(tài)代碼分析之間有什么區(qū)別,您如何知道使用哪個?

這樣的問題很容易通過“靜態(tài)代碼分析規(guī)則”,JUnits甚至“代碼覆蓋率”報告。生產(chǎn)是“狂野的西部”,通常包含多種商業(yè)風(fēng)味。“生產(chǎn)方案”不遵循任何給定的規(guī)則集。

最后,自動化的靜態(tài)代碼覆蓋工具通常會提供一種錯誤的安全感,即正在驗(yàn)證所有內(nèi)容。事實(shí)是,這些報告僅與管理它們的基本規(guī)則一樣好。

動態(tài)代碼分析

動態(tài)代碼分析是通過在程序運(yùn)行期間或之后檢查應(yīng)用程序進(jìn)行調(diào)試的方法。由于源代碼可以通過各種不同的輸入運(yùn)行,因此沒有一組適用于此樣式的規(guī)則。

這個地址是什么?

這些解決了由于業(yè)務(wù)環(huán)境變化而導(dǎo)致的運(yùn)行時漏洞。例如,上面的代碼片段將通過動態(tài)代碼分析進(jìn)行標(biāo)記。諸如OverOps之類的工具將進(jìn)一步采取這一步驟。

  1. 對于每個運(yùn)行時事件,OverOps都會回答發(fā)生的情況,發(fā)生的時間以及發(fā)生的原因。
  2. OverOps可以在多個方面對所有運(yùn)行時異常進(jìn)行檢測,分類和優(yōu)先級排序。

在SDLC(軟件開發(fā)生命周期)的哪個階段可以使用動態(tài)代碼分析?

這些可以在多個地方使用。

  1. 對于生產(chǎn),動態(tài)代碼分析可提供信息以幫助快速排除生產(chǎn)事件。
  2. 對于預(yù)生產(chǎn),動態(tài)代碼分析可防止不良代碼進(jìn)入生產(chǎn)。這些可以與CI / CD工具結(jié)合使用,作為代碼提升的質(zhì)量門。

好處

在生產(chǎn)中,動態(tài)代碼分析有助于提供對應(yīng)用程序問題的可見性,從而減少生產(chǎn)事件的MTTI。Overops甚至更深了–用變量值確定源代碼的確切違規(guī)行。

局限性

如果代碼沒有運(yùn)行,則不會被分析。此外,動態(tài)代碼分析不能執(zhí)行靜態(tài)代碼分析工具的功能,最好與它們結(jié)合使用。

結(jié)論

就像在機(jī)器和實(shí)地投手上練習(xí)揮桿一樣,這些方法是相輔相成的。靜態(tài)代碼分析通常會在未經(jīng)執(zhí)行的代碼中發(fā)現(xiàn)動態(tài)代碼分析無法發(fā)現(xiàn)的問題。同時,動態(tài)代碼分析涵蓋了靜態(tài)分析所沒有的生產(chǎn)場景。

OverOps提供了一種非常獨(dú)特的動態(tài)代碼分析方法–它在運(yùn)行時分析應(yīng)用程序代碼,并且可以將具有完整上下文的每個問題檢測到True Root Cause中。借助OverOps平臺,DevOps團(tuán)隊能夠根據(jù)實(shí)際代碼情況實(shí)時觀察和監(jiān)視應(yīng)用程序的可靠性。