天天看點

【Lua篇】靜态代碼掃描分析(一)初步介紹

一、靜态代碼分析

        靜态代碼分析是一種通過檢查代碼而不是執行程式來發現源代碼中錯誤的手段。通常可以幫助我們發現常見的編碼錯誤,例如:

文法錯誤 

違反制定的标準編碼 

未定義的變量

安全性問題

        靜态代碼分析可以通過評估編寫的代碼來提高代碼品質;可以穩定的運作且可以輕松自動化;增加了在源代碼中發現漏洞的可能性,進而提高應用安全;由于是針對源碼掃描可以在離線的開發環境中完成。但是靜态代碼分析并不能完全保證編寫的代碼沒有Bug,它也有一些缺點,例如:

誤報問題,發現了一個不是錯誤的錯誤。

靜态分析的規則需要特定維護,并非總是适用。

系統和第三方庫可能無法分析。

二、為何需對Lua代碼進行靜态分析 

        Lua腳本語言在性能方面非常出色、文法簡單且容易上手。目前有相當多的遊戲伺服器和用戶端程式都是使用它來開發功能業務。Lua屬于解釋性語言,編寫的邏輯代碼隻有在程式運作的過程才會發現邏輯錯誤,而一些較隐藏的分支可能要經過很長時間的運作才能觸發錯誤。未發現的錯誤如果在正式環境中觸發将會産生不可預估的損失。

        如何發現更多的錯誤,除了通過更加詳細的測試外,還可以利用工具來彌補,下面列舉了一些平時常見的錯誤問題,如果使用靜态掃描分析工具是很容易發現的。

    1. 變量的作用域問題[1],定義的變量在超出了作用域外使用。

    2. 變量的作用域問題[2],超出作用域變量作為條件判斷

    3. 參數未定義,經常出現在代碼複制-粘貼的時候,未修改完全

    4. 變量拼寫錯誤,很常見但不易察覺。

    5. 判空邏輯問題[1],先使用變量,後進行空值判斷

    6. 判空邏輯問題[2],判空的覆寫不全,後面繼續使用了空值變量。

    7. 類成員方法聲明寫錯,“.”、“:” 經常寫錯。

    8. 方法調用時,“.”、“:” 寫錯。

        上面這些錯誤來自平時項目中血與淚的教訓,如果能夠通過靜态代碼掃描工具提前發現這些錯誤,那對提高代碼的品質是非常有幫助和有價值的事情。目前市面上可以使用騰訊的TscanCode來對代碼掃描,支援的語言也挺多的。

        我也嘗試花幾篇文章來介紹一下如何編寫一個簡單的Lua代碼掃描工具,主要介紹大體編寫代碼的邏輯流程。

   文章來自我的公衆号,大家如果有興趣可以關注,具體掃描關注下圖。

【Lua篇】靜态代碼掃描分析(一)初步介紹