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

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

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

靜態(tài)代碼分析

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

這個(gè)地址是什么?

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

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

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

好處

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

局限性

在現(xiàn)實(shí)生活中,對(duì)“喬”有效的方法對(duì)“簡(jiǎn)”無(wú)效。靜態(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)代碼分析無(wú)法理解開發(fā)人員的意圖。預(yù)期“簡(jiǎn)氏”全名為“簡(jiǎn)氏”的用戶將獲得“戴夫”。其他任何名稱都將返回“ Joey”。任何期望有效用戶的下游應(yīng)用程序現(xiàn)在都將遇到運(yùn)行時(shí)錯(cuò)誤或異常。

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

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

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

動(dòng)態(tài)代碼分析

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

這個(gè)地址是什么?

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

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

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

這些可以在多個(gè)地方使用。

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

好處

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

局限性

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

結(jié)論

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

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