日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

coverity代码检测工具介绍_兴业证券:静态代码检测最佳实践

發(fā)布時間:2023/12/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 coverity代码检测工具介绍_兴业证券:静态代码检测最佳实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、 引言

谷歌發(fā)布的代碼規(guī)范中指出,80% 的缺失是由 20% 的代碼所引起的。規(guī)范的代碼可以消除過于強烈的個人風格,有助于代碼在項目間高效的流轉(zhuǎn);提升代碼的正確性,降低低級問題產(chǎn)生的可能性;同時也降低了項目的維護成本。良好的編碼習慣,可以促進團隊的合作,可以減少莫名的bug,可以降低代碼維護的成本,可以降低代碼審查的難度,可以提升代碼的健壯性,助力整個團隊代碼品質(zhì)的提升。
  但相當多團隊的代碼規(guī)范只是一份文檔,原因在哪里呢?通過一些研發(fā)人員的調(diào)研,得到圖1的數(shù)據(jù)。圖1 代碼規(guī)范落地難原因調(diào)查1、不想改占比69.77%,主要原因為:
● 人工review代碼太浪費時間,項目太趕,沒時間。
● 我也知道這么寫不好,可既有代碼就是這么寫的,只改一處也沒用。
● 有些規(guī)范也很差,還不如我寫的規(guī)范。
● 不能全盤進行代碼規(guī)范的落地,都是暫時性工作,沒啥效果。
2、不愿改占比18.60%,主要原因為:
● 代碼規(guī)范就是浪費時間,沒用。
3、不會改占比11.63%,主要原因為:
● 實現(xiàn)不太好,缺乏指引。
  縱觀以上數(shù)據(jù)發(fā)現(xiàn)代碼規(guī)范的落地的確是一個復雜的問題,既有組織層面上對代碼規(guī)范重要性、必要性、一致性認知的缺失,也有缺乏高效可落地的檢測工具,另外對新人組織宣貫的缺失也是問題。那就需要從組織層面、工具層面、培訓層面抽絲剝繭的來逐層將問題個個擊破,確保規(guī)范的有效,準確落地執(zhí)行。二、 代碼規(guī)范落地實踐2.1. 組織建設(shè)為保證規(guī)范落地的準確性和有效性,建議以圖2 組織形式組織角色。圖2組織角色及職責● 技術(shù)委員會,建議系統(tǒng)架構(gòu)師,技術(shù)帶頭人,技術(shù)經(jīng)理參與,負責規(guī)范、規(guī)則梳理、評審、引入已經(jīng)新增規(guī)范的代碼編寫。是規(guī)則的制定者、是仲裁。
● 執(zhí)行小組,建議QA、PMO、QC人員參與,負責項目數(shù)據(jù)的整理,問題的跟蹤、改進效果展示,反饋問題的收集。階段性對引進的新規(guī)范,有爭議規(guī)范以及爭議問題的評審。階段性更新代碼編碼規(guī)范,是此項活動的裁判員。
● 項目接口人,項目接入,項目構(gòu)建,掃描結(jié)果分析、修正,以及爭議問題反饋。項目成員是此項活動的主體即運動員。
  因為專業(yè)的事必須交給專業(yè)的人來做,代碼規(guī)范的制定應該由在一線摸爬滾打很多年的程序員主導,由多人參與共同制定,技術(shù)委員會可以是一個虛擬的組織,由一線的開發(fā)經(jīng)理組成,盡量貼近業(yè)務。2.2. 運營思路在運營過程中我們大致規(guī)劃了三個階段:
● 規(guī)范做成:吸收既有規(guī)范,如阿里的JAVA代碼規(guī)范、規(guī)范插件等從嚴重等級,影響范圍維度梳理,將核心的、易識別、爭議少的代碼規(guī)范留存至規(guī)則共享平臺。但每條規(guī)范的通過需由技術(shù)委員會評審通過,在組織內(nèi)部達成一致。此過程是吸收內(nèi)化的過程,可保障每條規(guī)范的有效性。對規(guī)范的制定要公開透明,規(guī)范內(nèi)容要細致深入,針對代碼規(guī)范每一條的詳細解釋,說清楚為什么要這么制定代碼規(guī)范,它背后有哪些技術(shù)上和工程過程中的故事,說得人心服口服,用技術(shù)說服。
● 規(guī)范發(fā)布:由規(guī)則共享平臺導出代碼規(guī)范文檔1.0版本,內(nèi)部宣貫。并通過工具化,服務化的手段將將發(fā)布的代碼規(guī)范可自動化的檢測,反饋。通過IDE插件或能力集成的方式將檢測的能力集成至pipline當中,形成研發(fā)的質(zhì)量門檻,保障其質(zhì)量規(guī)范的切實執(zhí)行。此期間可通過質(zhì)量評分、質(zhì)量排名等曝光手段推動規(guī)范的落地。
● 規(guī)范運維:持續(xù)運維,納入質(zhì)量體系。通過開發(fā)反饋,QA統(tǒng)計匯總反饋,技術(shù)委員會評審和裁定,落地代碼規(guī)范,持續(xù)監(jiān)督,定期更新。此階段在代碼規(guī)范已經(jīng)較穩(wěn)定運行后,依據(jù)規(guī)則共享平臺的反饋對代碼規(guī)范進行增刪,以此保障代碼規(guī)范的更新迭代。技術(shù)更新很快,工程過程中遇到的問題也是層出不窮,因此,代碼規(guī)范也不會是一招定論的,需要不斷地更新、補充、完善,這樣才能與時俱進,保持生命力。
  通過全員參與形成完備的閉環(huán)回路,通過專家評審形成統(tǒng)一認識,通過規(guī)范標準的建立達成質(zhì)量標準的認識。周期性的反饋,不斷完善規(guī)范的版本,達到代碼規(guī)范的落地實施。2.3. 工具平臺僅僅有組織支撐,規(guī)范指導是不夠的,必須有簡單易用的賦能工具,向開發(fā)人員提供檢測工具或者插件,自動化實現(xiàn)對于代碼規(guī)范是否執(zhí)行到位的檢測,而不是依靠人工。2.3.1. SonarQube以入門簡單的SonarQube示例,其實有眾多的代碼檢測工具可供選擇如:Flawfinder、Checkstyle或者商業(yè)的Coverity作為掃描的引擎,將掃描引擎集成至開發(fā)的pipline當中,無感知的提供服務進行代碼的分析、度量、反饋。通過不同的對掃描結(jié)果進行加工處理,以量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進行代碼質(zhì)量管理。圖3 示例流程設(shè)計圖通過對代碼倉庫、掃描引擎、集成工具和規(guī)則共享平臺進行集成,我們很簡單的搭建出面向多角色的一體化框架,從而滿足各類需求。
  (1)開發(fā)者將代碼提交到svn工具;
  (2)持續(xù)集成工具Jenkins自動觸發(fā)檢查代碼執(zhí)行源碼掃描、分析;
  (3)分析報告?zhèn)鬟f給SonarQube server進行加工處理;
  (4)SonarQube進行處理分析、將數(shù)據(jù)保存到數(shù)據(jù)庫中;
  (5)SonarQube服務將分析結(jié)果推送至規(guī)則共享平臺進行UI展現(xiàn);
  (6)規(guī)則共享平臺也能夠?qū)⑿碌拇a掃描規(guī)范配置到SonarQube服務;
  (7)平臺可將掃描結(jié)果反饋至相關(guān)項目組,提醒及時修改;
  (8)項目經(jīng)理、開發(fā)經(jīng)理、運維經(jīng)理、測試經(jīng)理等通過共享平臺進行代碼相關(guān)報表的查看和管理,技術(shù)專家可通過平臺定制相關(guān)規(guī)則。2.3.2. 規(guī)則共享平臺通過規(guī)則共享平臺產(chǎn)出代碼規(guī)范以及落地實施,規(guī)則的產(chǎn)出和準實時監(jiān)控則是核心。代碼規(guī)范的評審,監(jiān)督,統(tǒng)計全部通過規(guī)則共享平臺完成。
  平臺實現(xiàn)三個功能:
  1、規(guī)則評審,對規(guī)則錄入,審核,實施,廢棄。
  2、每次代碼變更實施后進行規(guī)則掃描,并統(tǒng)計起結(jié)果,對存量、新增問題進行統(tǒng)計分析。為后續(xù)的規(guī)范增刪打下元數(shù)據(jù)基礎(chǔ)。
  3、對項目在時間段內(nèi)的違規(guī)統(tǒng)計。
  實現(xiàn)規(guī)則的生成,評審,生效,監(jiān)督,廢棄完整生命周期的管理,為全員規(guī)則的生成、審核打下基礎(chǔ)。
  此平臺受眾為三種角色,開發(fā)者,開發(fā)經(jīng)理、技術(shù)委員會,他們的所想所得用以下表格梳理:表1 規(guī)則共享平臺角色定位1、面向開發(fā)者:每次提交代碼后10min內(nèi)得到代碼規(guī)范郵件反饋結(jié)果。圖4 示例項目代碼規(guī)范郵件反饋結(jié)果注:BUG即規(guī)范沖突點,漏洞為安全規(guī)范。鏈接直接提供修改方案,解決“怎么改”的問題。圖5 檢測摘要圖5為單次的檢測摘要,可將全量以及增量問題落地。進入詳情頁后,展示問題的級別(阻斷,嚴重,主要,次要,提示 五級),以及問題的分布。并展示問題位址(文件名以及行數(shù))如圖6,以及問題原因,錯誤示范以及修改方案如圖7。圖6 問題定位圖7 規(guī)范示例2、面向項目管理者:周期性統(tǒng)計本組內(nèi)各開發(fā)人員質(zhì)量數(shù)據(jù)。圖8 項目維度開發(fā)質(zhì)量統(tǒng)計3、面向技術(shù)委員會:可實現(xiàn)對規(guī)范的評審以及管理,以及有效性數(shù)據(jù)的收集。圖9 代碼規(guī)范管理通過以上組織建設(shè)、切實運營以及工具平臺的建設(shè)搭建了代碼規(guī)范的運營平臺,通過全員參與,自動化檢測,量化反饋,周期性迭代更新,對規(guī)范的產(chǎn)生、落地、更新有一個閉環(huán)的管理。徹底解決了傳統(tǒng)代碼規(guī)范不好落地的問題,通過系統(tǒng)解決不愿改,不想改,不會改的問題,如圖10。在代碼提交階段,通過代碼規(guī)范的服務化度量,為代碼規(guī)范落地實施提供了一種可控手段。并可集成至CI過程中,提供了自動化的服務,在整個CI工具鏈上豐富了自動化組件,提升測試服務化能力和質(zhì)量反饋維度。圖10 代碼規(guī)范落地實踐總結(jié)三、 總結(jié)實行良好的代碼規(guī)范,從長遠看最大的受益人往往是團隊本身。可能因為繁瑣的規(guī)范付出了很多額外的工作,但是這些得失,看似無用的東西往往會通過慢慢的積累由量變而到質(zhì)變,才能感受到其價值所在。
  但代碼規(guī)范的制定、落地是一個辛苦、瑣碎、緩慢見效的過程,但也是一個程序員走向成熟的必經(jīng)之路,唯有你定義的東西能夠服眾,才能被長久傳承下去。
  愿我們能在最美好的年華做最有價值事,獻給在路上的程序員們。
  PS:調(diào)研的檢測工具檢測規(guī)范重點,讀者可以從各自項目實際情況選擇切入點。Checkstyle:
  ● Javadoc 注釋:檢查類及方法的 Javadoc 注釋
  ● 命名約定:檢查命名是否符合命名規(guī)范
  ● 標題:檢查文件是否以某些行開頭
  ● Import 語句:檢查 Import 語句是否符合定義規(guī)范
  ● 代碼塊大小,即檢查類、方法等代碼塊的行數(shù)
  ● 空白:檢查空白符,如 tab,回車符等
  ● 修飾符:修飾符號的檢查,如修飾符的定義順序
  ● 塊:檢查是否有空塊或無效塊
  ● 代碼問題:檢查重復代碼,條件判斷,魔數(shù)等問題
  ● 類設(shè)計:檢查類的定義是否符合規(guī)范,如構(gòu)造函數(shù)的定義等問題FindBugs:
  ● Bad practice 壞的實踐:常見代碼錯誤,用于靜態(tài)代碼檢查時進行缺陷模式匹配
  ● Correctness 可能導致錯誤的代碼,如空指針引用等
  ● 國際化相關(guān)問題:如錯誤的字符串轉(zhuǎn)換
  ● 可能受到的惡意攻擊,如訪問權(quán)限修飾符的定義等
  ● 多線程的正確性:如多線程編程時常見的同步,線程調(diào)度問題
  ● 運行時性能問題:如由變量定義,方法調(diào)用導致的代碼低效問題PMD:
  ● 可能的 Bugs:檢查潛在代碼錯誤,如空 try/catch/finally/switch 語句
  ● 未使用代碼(Dead code):檢查未使用的變量,參數(shù),方法
  ● 復雜的表達式:檢查不必要的 if 語句,可被 while 替代的 for 循環(huán)
  ● 重復的代碼:檢查重復的代碼
  ● 循環(huán)體創(chuàng)建新對象:檢查在循環(huán)體內(nèi)實例化新對象
  ● 資源關(guān)閉:檢查 Connect,Result,Statement 等資源使用之后是否被關(guān)閉掉

參考文獻

[1]Sonar?https://blog.sonarsource.com/[2]Findbugs?http://findbugs.sourceforge.net/[3]Checkstylehttp://checkstyle.sourceforge.net/[4]PMD?https://pmd.github.io/

作者:李旭 高美鈴 /興業(yè)證券股份有限公司

(來自:上交所技術(shù)服務)

總結(jié)

以上是生活随笔為你收集整理的coverity代码检测工具介绍_兴业证券:静态代码检测最佳实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。