健康的靜態(tài)分析策略
作為有關成功程序員的7種習慣的系列文章的一部分,今天,我將討論確保靜態(tài)分析有效且可持續(xù)的幾種方法。
策略
首先,最好從靜態(tài)分析策略開始。有些人想知道為什么這很重要,但這實際上對于成功的靜態(tài)分析計劃至關重要。您的策略將涵蓋諸如應運行哪些規(guī)則,什么時候可以忽略它們,何時必須修復它們,如何執(zhí)行抑制等等之類的事情。您還需要確定需要分析哪些代碼,即通過所有遺留代碼來進行分析。您只是坐在那里,我們將在稍后討論。
如果沒有一致的策略,靜態(tài)分析將迅速演變?yōu)榕紶枅?zhí)行的錯誤查找程序,從而縮小了您從中獲得的價值。如果您從事醫(yī)療或汽車等合規(guī)性業(yè)務,則無論如何都必須進行靜態(tài)分析,這樣一來,您就可以正確地進行分析并獲得一定的價值。
工具選擇
獲得正確的工具很重要。該工具需要在您使用的操作系統(tǒng)上的代碼編輯器(IDE)中使用您所使用的語言進行工作。該工具應支持服務器和in-IDE執(zhí)行,in-IDE(對于開發(fā)人員)和基于Web的報告(對于管理人員)。您需要能夠?qū)⒐ぞ吲渲脼閮H執(zhí)行所需的規(guī)則(而不僅僅是工具供應商希望您運行的規(guī)則)。成熟的工具具有開箱即用的啟動配置,可讓您采用MISRA,OWASP,CWE和PCI等行業(yè)計劃。
能夠使用自己的規(guī)則,想法和最佳實踐來擴展該工具對您的長期成功也很重要。而且不要忘了技術支持–有人可以查看有關嘈雜規(guī)則的問題并幫助您解決這些問題嗎?您要使用開源并自己進行修復嗎?通常,您是否使用供應商服務來幫助您快速啟動項目并朝正確的方向前進?
這些以及更多是選擇工具時要考慮的所有事情。不要陷入困境——它提供了關于工具是否真正能夠滿足您的需要的有用信息,而靜態(tài)分析工具的工作方式卻有所不同。
規(guī)則選擇
如上所述,很容易陷入陷阱,只需打開靜態(tài)分析工具中的任何規(guī)則即可。一些供應商積極鼓勵這樣做,另一些甚至要求!每個人的軟件測試需求都不同。默認配置可以幫助您入門,但是要成功,您必須自己進行配置。
需要做的一些事情包括關閉嘈雜的規(guī)則并設置嚴重性級別以符合您自己的實際做法(您不希望工具在您認為嚴重性較低時就說出一些關鍵內(nèi)容)。一個不明顯的提示是關閉您喜歡但不打算立即解決的規(guī)則。如果您有時間解決違規(guī)問題,請先打開規(guī)則,而不要先打開規(guī)則。當告知開發(fā)人員并非所有規(guī)則都重要時,在報告它們時忽略它們只會導致沮喪和不良習慣。
您正在運行的規(guī)則應與您在現(xiàn)場遇到的問題,您可能會合理預期的問題,安全性問題,在代碼檢查過程中發(fā)現(xiàn)的問題以及任何合規(guī)性項目有關-您必須運行的規(guī)則。
壓制
即使您擁有正確的規(guī)則,有時上下文也會使特定的靜態(tài)分析在代碼的一部分中顯得不重要,而在另一部分中仍然至關重要。您這里有一些選擇,其中最有價值的就是挫敗并關閉規(guī)則。如果您知道該規(guī)則可以在某些領域提供價值,那么這是一個錯誤的選擇。如果您的工具無法正確配置和抑制,則您選擇了錯誤的工具,返回上述步驟2。
一些陷入的陷阱是對結(jié)果進行一些手動管理并散發(fā)出重要的結(jié)果。這是勞動密集型的,不可伸縮的,不可維護的,您將最終解決不那么重要的事情,而錯過了更重要的事情。您需要一個以數(shù)據(jù)為依據(jù)的流程,以幫助您評估哪些違規(guī)問題需要解決,哪些違規(guī)問題可以安全地忽略,然后提供一種標記這些違規(guī)情況的方法,以免再次發(fā)生。理想情況下,這可以由開發(fā)人員直接在代碼所在的IDE中以及由管理人員,架構師等在基于Web的UI中完成。
有些人將這些抑制作用放在單獨的系統(tǒng)中。這樣的好處是從不更改代碼,但是冒著在分支或重構或存在某些同步問題時要求進行返工的風險。其他人則以特殊注釋的形式對代碼進行了更改。盡管這確實需要進行代碼更改,但它是持久且準確的,并且還記錄了禁止的內(nèi)容-如果您經(jīng)過審核,那就很棒。考慮您的需求,并選擇最適合您的環(huán)境的方法。如果您的工具不支持這兩種工具,請返回步驟2。
舊版代碼
舊版代碼與禁止相關。決定要如何處理舊代碼很重要。同樣,這取決于您的需求,但是我在下面介紹了幾種方法。
一些組織選擇僅在存在涉及這些代碼行的未解決的現(xiàn)場錯誤報告的情況下,才修復遺留代碼中的靜態(tài)分析違規(guī)問題——文件中的其他內(nèi)容都不應被觸及。如果您的代碼確實很舊,或者更改的風險很高,那么這是一個完全合理的策略。它將風險最小化。
另一個想法是,無論如何,都可以修復文件中的所有內(nèi)容。這帶來了變更的風險,但是如果您有一個好的單元測試套件(我們將在下一次討論),那么您不必擔心太多。從積極的方面來說,您觸摸的任何代碼都將具有最新的必需代碼標準和最佳實踐。過時的代碼將比以前少過時了。
您也可以執(zhí)行混合方法,或者只是在某個日期之前忽略所有舊代碼,而僅使用靜態(tài)分析。找出可以實現(xiàn)的目標并以這種方式做到。首先,請考慮一下您提出的策略的風險和收益。
靜態(tài)分析是軟件質(zhì)量/安全性庫中最有價值的工具之一。正確執(zhí)行將帶來巨大的價值,但是錯誤執(zhí)行可能會使組織中的新一代編碼人員注定要使用過時的過時質(zhì)量和安全流程。如果您有任何疑問,請在下面的評論中讓我知道——很樂意就如何使靜態(tài)分析發(fā)揮作用進行討論。