日韩福利首页在线观看网站-日韩福利免费网站视频在线-日韩福利局二区视频-日韩福利-日韩二区在线-日韩二区三区四区-日韩二区三-日韩电影中文字幕

半岛外围网上直营

C++代碼質(zhì)量掃描主流工具深度比較

轉(zhuǎn)帖|對比評測|編輯:龔雪|2016-06-02 14:39:12.000|閱讀 1861 次

概述:統(tǒng)計(jì)證明,在整個(gè)軟件開發(fā)生命周期中,30%至70%的代碼邏輯設(shè)計(jì)和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。 本文中,將對C++代碼質(zhì)量掃描主流工具進(jìn)行深度對比。

# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

相關(guān)鏈接:

一、引言

靜態(tài)代碼分析是指無需運(yùn)行被測代碼,通過詞法分析、語法分析、控制流、數(shù)據(jù)流分析等技術(shù)對程序代碼進(jìn)行掃描,找出代碼隱藏的錯(cuò)誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語句,錯(cuò)誤的遞歸,非法計(jì)算,可能出現(xiàn)的空指針引用等等。統(tǒng)計(jì)證明,在整個(gè)軟件開發(fā)生命周期中,30%至70%的代碼邏輯設(shè)計(jì)和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。

在C++項(xiàng)目開發(fā)過程中,因?yàn)槠錇榫幾g執(zhí)行語言,語言規(guī)則要求較高,開發(fā)團(tuán)隊(duì)往往要花費(fèi)大量的時(shí)間和精力發(fā)現(xiàn)并修改代碼缺陷。所以C++靜態(tài)代碼分析工具能夠幫助開發(fā)人員快速、有效的定位代碼缺陷并及時(shí)糾正這些問題,從而極大地提高軟件可靠性并節(jié)省開發(fā)成本。

C/C++代碼審查工具Parasoft C/C++test

資源下載

靜態(tài)代碼分析工具的優(yōu)勢:

  1. 自動執(zhí)行靜態(tài)代碼分析,快速定位代碼隱藏錯(cuò)誤和缺陷。
  2. 幫助代碼設(shè)計(jì)人員更專注于分析和解決代碼設(shè)計(jì)缺陷。
  3. 減少在代碼人工檢查上花費(fèi)的時(shí)間,提高軟件可靠性并節(jié)省開發(fā)成本。

二、業(yè)界主流靜態(tài)代碼掃描工具概況

目前市場上的C++靜態(tài)代碼分析工具種類繁多且各有千秋,本文將分別介紹TSC團(tuán)隊(duì)自主研發(fā)的tscancode工具和當(dāng)前4種主流C++靜態(tài)代碼分析工具(cppcheck、coverity、clang、pclint),并從功能、效率、易用性等方面對它們進(jìn)行分析和比較,以期幫助C++開發(fā)人員更清晰靜態(tài)代碼分析工具的工作效果、適用場景和擴(kuò)展空間,同時(shí)在其對應(yīng)項(xiàng)目特征中選擇合適的工具應(yīng)用到項(xiàng)目開發(fā)環(huán)節(jié)中。

以下為工具在付費(fèi)價(jià)格、規(guī)則數(shù)量、準(zhǔn)確率、掃描效率、編譯依賴、IDE支持、跨平臺支持、可擴(kuò)展開發(fā)方面的對比數(shù)據(jù)。注:本次競品分析的選擇了3款游戲項(xiàng)目(約500萬行代碼)。

在可擴(kuò)展性上,TSC有專人維護(hù),定期根據(jù)用戶需求擴(kuò)展規(guī)則或新增功能特性,cppcheck和clang是開源工具,工具更新較慢,但如果用戶有特殊需求可以自己擴(kuò)展開發(fā),pclint和coverity是商業(yè)軟件,難以進(jìn)行功能擴(kuò)展。

同時(shí),TSC有完整代碼質(zhì)量管理閉環(huán)平臺QOC支持;coverity和clang可用web端的結(jié)果展示,但無法自行管理問題流,需要進(jìn)行二次開發(fā);cppcheck和pclint缺少web端結(jié)果展示。

以下重點(diǎn)比較具體檢查規(guī)則和有效問題報(bào)錯(cuò)率。

三、檢查規(guī)則大比拼

1.規(guī)則大類

針對業(yè)內(nèi)大量掃描工具在實(shí)際項(xiàng)目中掃描結(jié)果的影響比較,我們將代碼質(zhì)量問題分為以下幾大類:

  1. 致命類:可能導(dǎo)致程序宕機(jī)、無響應(yīng)等影響范圍極大的錯(cuò)誤;
  2. 邏輯類:可能造成程序不能達(dá)到預(yù)期邏輯結(jié)果的錯(cuò)誤;
  3. 編碼規(guī)范及其他類:可能造成程序的可讀性、可維護(hù)性較差的錯(cuò)誤(不可達(dá)代碼,無效的變量聲明等);

2.規(guī)則大類分布

根據(jù)3大影響分類,其嚴(yán)重程度分別為高、中、低,各類型規(guī)則數(shù)量分布為:

從規(guī)則分類占比來看:

  1. TSC針對互聯(lián)網(wǎng)產(chǎn)品高效開發(fā)修復(fù)原則,工具定位為針對致命和邏輯類問題,相對傳統(tǒng)、軍事、安全領(lǐng)域,并不關(guān)注編碼規(guī)范及編譯錯(cuò)誤;
  2. coverity作為商業(yè)化軟件,在付費(fèi)后添加規(guī)則上,達(dá)到覆蓋率最全面,除致命和邏輯類規(guī)則外,還有大量編碼規(guī)范、安全和針對其他語言(如java,C#)的規(guī)則;
  3. cppcheck作為開源工具,應(yīng)用范圍廣泛,根據(jù)開源社區(qū)場景搜集,在各方面都有規(guī)則添加,但場景較為粗獷,場景雖多,但有效率不高。例如:cppcheck在初始化檢查上有5個(gè)子規(guī)則,樣本代碼共掃描出312個(gè)問題,其中有效問題僅8個(gè),有效率僅為3%。
  4. pclint作為商業(yè)化軟件,在付費(fèi)后添加規(guī)則上,達(dá)到覆蓋率最全面,除致命和邏輯類規(guī)則外,還有大量編碼規(guī)范、安全的規(guī)則;
  5. clang作為開源軟件,規(guī)則較少,但規(guī)則類型分布較為均勻,在致命、邏輯類,還有編碼規(guī)范、安全類都有規(guī)則添加。

3.規(guī)則報(bào)錯(cuò)數(shù)量

整體規(guī)則數(shù)量上:pclint[915]>coverity[515]>cppcheck[245]>clang[74]>TSC[67]

可以看出pclint和coverity規(guī)則最多,TSC和clang規(guī)則最少,原因有如下3點(diǎn):

  1. pclint和coverity作為商業(yè)化軟件,需求來源于傳統(tǒng)軟件、軍事、安全各個(gè)領(lǐng)域,其規(guī)則總數(shù)最多,其編碼規(guī)范類規(guī)則數(shù)量分別高達(dá)646條和382條;排除掉低價(jià)值的編碼規(guī)范類規(guī)則,規(guī)則數(shù)量排序?yàn)椋?br /> pclint[269]>cppcheck[151]>coverity[133]>TSC[67]>clang[44]
  2. 在規(guī)則實(shí)際報(bào)錯(cuò)數(shù)量上,以3款游戲500萬行代碼的結(jié)果覆蓋度來看;

    注:規(guī)則總數(shù)指工具所有的規(guī)則總數(shù),報(bào)錯(cuò)規(guī)則數(shù)指開啟工具所有規(guī)則情況下,掃描樣本代碼所覆蓋的規(guī)則數(shù)量。

    從實(shí)際項(xiàng)目掃描結(jié)果來看:

    掃描出問題的規(guī)則數(shù)/規(guī)則總數(shù):

    TSC[60%]>cppcheck[27%]>clang[19%]>coverity[10%]>pclint[9%]

    pclint、coverity、cppcheck雖然規(guī)則數(shù)量很多,但因?yàn)槠涠ㄖ萍尤氲拇蟛糠忠?guī)則普遍適用度不高,大量規(guī)則可能在多個(gè)項(xiàng)目中都無法掃描出問題。有些規(guī)則卻在多個(gè)項(xiàng)目中掃描出大量非核心的問題,如:函數(shù)沒有被調(diào)用、未使用的變量、存在多余的頭文件等。

  3. 規(guī)則數(shù)量多來源于兩個(gè)方面,一方面是規(guī)則覆蓋更全面,另一方面是規(guī)則粒度劃分得更細(xì);

通過對具體規(guī)則進(jìn)行分析,發(fā)現(xiàn)在規(guī)則劃分粒度由細(xì)到出排序?yàn)閇pclint,coverity,cppcheck,clang,TSC]

pclint和coverity劃分粒度最細(xì),cppcheck,clang次之,TSC最粗。

例如:coverity的除0報(bào)錯(cuò)分為整型除0,浮點(diǎn)數(shù)除0,取模除0;數(shù)組下標(biāo)越界也細(xì)分為訪問越界、讀越界、寫越界。Pclint和cppcheck初始化分為變量未初始化、結(jié)構(gòu)體成員未初始化、類成員未初始化、string未初始化、data未初始化、union未初始化、全局靜態(tài)變量未初始化等;而TSC則合并了一些過細(xì)的規(guī)則,未初始化上只分為變量未初始化和成員未初始化。

粒度劃分越細(xì)既有優(yōu)點(diǎn)也有缺點(diǎn):

優(yōu)點(diǎn):可以針對細(xì)分規(guī)則靈活配置開關(guān),關(guān)掉準(zhǔn)確率低的規(guī)則

缺點(diǎn):規(guī)則數(shù)量太多, 用戶配置相當(dāng)麻煩,新用戶很難理解多個(gè)相似的規(guī)則之前的區(qū)別。

TSC為降低用戶配置難度,在規(guī)則粒度劃分上相對粗獷,但會從中提取出其中準(zhǔn)確率低的場景,作為單獨(dú)規(guī)則,從而達(dá)到可以關(guān)掉低準(zhǔn)確率規(guī)則的目的。

四、同類規(guī)則效果對比分析

本文針對每個(gè)工具在關(guān)鍵報(bào)錯(cuò)項(xiàng),如:空指針、越界、變量未初始化、內(nèi)存泄露、邏輯上的報(bào)錯(cuò)結(jié)果進(jìn)行分析。

樣本代碼——3款游戲項(xiàng)目(約500萬行代碼)代碼

測試對象——tscancode2.0、coverity7.5、cppcheck1.68、pclint9.0、clang3.4

有效報(bào)錯(cuò)數(shù)——某類規(guī)則在3款游戲項(xiàng)目的有效報(bào)錯(cuò)數(shù)總和

準(zhǔn)確率——某類規(guī)則在3款游戲項(xiàng)目的平均準(zhǔn)確率,準(zhǔn)確率=有效報(bào)錯(cuò)數(shù)/報(bào)錯(cuò)總數(shù)*100%

綜合評分——綜合有效報(bào)錯(cuò)數(shù)和準(zhǔn)確率的評分,有效報(bào)錯(cuò)數(shù)和準(zhǔn)確率的權(quán)值暫定為45:55,綜合評分=有效報(bào)錯(cuò)/最大有效報(bào)錯(cuò)數(shù)*100*45%+準(zhǔn)確率*100*55%

1.空指針規(guī)則

空指針檢查規(guī)則主要檢查是否存在對賦值為空的指針解引用的情況,空指針是c/c++中最大的問題,經(jīng)常造成程序崩潰的致命錯(cuò)誤。因此,C++靜態(tài)代碼分析工具對空指針的檢查能力顯得尤為重要。

圖為五個(gè)工具對樣本代碼掃描結(jié)果:

有效報(bào)錯(cuò)數(shù):TSC [401] >coverity[219]>>clang[57] >cppcheck[20]>pclint[14]

準(zhǔn)確率:coverity[95%]≈TSC[92%] ≈clang[90%]>>cppcheck[28%]>pclint[14%]

綜合評分:TSC[96分] >coverity[77分] >clang[56分]>cppcheck[18分]>pclint[8分]

  1. 從準(zhǔn)確率來看,在空指針檢查方面,不考慮掃描效率和掃描環(huán)境搭建復(fù)雜度,TSC、coverity和clang都很優(yōu)秀,三者準(zhǔn)確率都很高。cppcheck, pclint在結(jié)果準(zhǔn)確率上和數(shù)量上都較差,不推薦使用。
  2. 從空指針規(guī)則細(xì)分程度來看,TSC和coverity相當(dāng),細(xì)分場景挖掘更多,cppcheck規(guī)則并未細(xì)分空指針規(guī)則,從實(shí)際項(xiàng)目結(jié)果來看,只能檢查出dereferenceBeforeCheck場景的錯(cuò)誤。Clang和pclint在空指針細(xì)分上維度跟TSC和coverity不同,比如:它們區(qū)分是參數(shù)指針解引用還是局部變量解引用,細(xì)分粒度不夠且覆蓋場景較少,其覆蓋場景基本都被TSC和coverity包含。

    cppcheck掃描出來的問題存在大量誤報(bào),誤報(bào)主要是冗余的判空,并不會引起實(shí)際問題,具體誤報(bào)場景如下:

  3. 從有效報(bào)錯(cuò)數(shù)量上,TSC有效報(bào)錯(cuò)數(shù)量更多,細(xì)分場景挖掘更多,無疑是掃描 空指針最佳選擇;clang覆蓋的場景較少,其有效報(bào)錯(cuò)基本都能被coverity和TSC覆 蓋,不過由于其準(zhǔn)確率較高且免費(fèi),與TSC搭配使用也是不錯(cuò)的選擇;而coverity雖然覆蓋場景多但因?yàn)橹粫?bào)完全可信的問題,因此會漏掉部分有效報(bào)錯(cuò),例如:指針變量 來源于函數(shù)返回值,而函數(shù)返回值是否為NULL依賴于用戶輸入,在靜態(tài)分析中 coverity無法判斷其是否會為NULL,為保證準(zhǔn)確率會漏掉該指針報(bào)錯(cuò)。若項(xiàng)目對空指 針漏報(bào)容忍度較高,且有足夠預(yù)算采購商業(yè)軟件,可以選擇coverity;而cppcheck和 pclint檢查出的有效問題極少并伴隨大量誤報(bào),同上結(jié)論,不宜使用。
  4. 在易用性上,coverity和clang編譯環(huán)境構(gòu)建復(fù)雜,編譯時(shí)長增加較多;TSC在易用性上也有一個(gè)缺點(diǎn),即為提高準(zhǔn)確率,在個(gè)別項(xiàng)目存在一次性配置工作。原因是個(gè)別項(xiàng)目存在自定義判空宏,但由于不依賴編譯,TSC掃描的代碼可能并不完整,導(dǎo)致個(gè)別自定義判空宏找不到,需要在cfg.ini中配置自定義判空宏。當(dāng)然,如果掃描的代碼完整度同編譯環(huán)境,則無此問題。

2.越界規(guī)則

越界一般來講是指數(shù)組下標(biāo)越界,或者緩沖區(qū)讀寫越界。這類錯(cuò)誤會導(dǎo)致非法內(nèi)存的訪問,引發(fā)程序崩潰或者錯(cuò)誤。

下圖是五個(gè)工具對樣本代碼掃描結(jié)果:

注:越界對誤報(bào)判定的規(guī)則比較嚴(yán)格,即使場景識別本身無誤,但是通過代碼邏輯可以推斷該場景不會越界的也判定為誤報(bào)。

例如:

這里由found變量間接推斷出data[region_index]不會越界,將其判定為誤報(bào)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):coverity[98]>>TSC [18]>pclint[16] >cppcheck[6]> clang[4]

準(zhǔn)確率:clang[100%] >coverity[80%]>TSC[70%] >cppcheck[67%]>>pclint[2%]

綜合評分:coverity[90分] >TSC[54分]≈clang[55分]>cppcheck[40分]>pclint[1分]

  1. 在報(bào)錯(cuò)數(shù)量上,coverity在越界檢查上有較大的優(yōu)勢,因?yàn)閏overity有較強(qiáng)的符 號查找和場景識別能力,能識別相對復(fù)雜的越界場景。其他四個(gè)工具同coverity相比還 有差距,其中pclint存在大量誤報(bào),表現(xiàn)最差。如:TSC和cppcheck只能識別數(shù)組變量 本身越界,但如果是一個(gè)指針p指向數(shù)組的第一個(gè)元素,通過p[i]訪問時(shí)的越界,TSC 和cppcheck都無法檢查,而coverity能找到p所指向的數(shù)組定義,得到數(shù)組大小,從而 判斷p[i]是否越界。
  2. clang越界這塊的準(zhǔn)確率雖然最高為100%,但其覆蓋的場景單一(strncpy使用越界報(bào)了4條),其報(bào)錯(cuò)都被TSC和coverity覆蓋,數(shù)量上和其他工具有較大差距。TSC越界檢查結(jié)果要略好于cppcheck,clang和pclint,TSC增加了對變量取值范圍的推斷,檢測出是否存在越界的風(fēng)險(xiǎn)。比如:

    (TSC越界有效報(bào)錯(cuò)場景)

對于數(shù)組下標(biāo)iCountry的判定存在風(fēng)險(xiǎn),代碼執(zhí)行到當(dāng)前上下文時(shí),iCountry可能 取值為MAX_QT_COUNTRY_JIFEN_ITEM_CNT,而這正是數(shù)組m_astDataInDB的長 度,也就是說在這種邊界情況下會造成了數(shù)組訪問越界。對于如上場景,應(yīng)該將代碼修 改為iCountry>= MAX_QT_COUNTRY_JIFEN_ITEM_CNT。

3.變量未初始化規(guī)則

變量未初始化顧名思義:變量聲明后沒有賦初值,其分配的內(nèi)存值是隨機(jī)的。這也是代碼中容易出現(xiàn)的問題,會導(dǎo)致不確定的程序行為,造成嚴(yán)重的后果。

下圖是五個(gè)工具對樣本代碼掃描結(jié)果:

注:結(jié)果排除了3個(gè)工具都有的檢查項(xiàng)——構(gòu)造函數(shù)中是否存在未初始化成員變量。在實(shí)際項(xiàng)目中發(fā)現(xiàn),C++類構(gòu)造函數(shù)中對成員變量不做初始化的情況是普遍的,很多代碼會采用“延遲初始化”,即在實(shí)際用到該對象的時(shí)候調(diào)用類似Initialize的方法進(jìn)行初始化。因此在此次對比中并沒有把這條規(guī)則納入進(jìn)來。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):coverity[75]>>pclint[25] >TSC [9]>cppcheck[8]> clang[1]

準(zhǔn)確率:TSC[75%] >coverity[68%]>pclint[26%] > clang[17%] >cppcheck[3%]

綜合評分:coverity[82分] > TSC[47分] >pclint[30分] > clang[10分] >cppcheck[6分]

  1. 在報(bào)錯(cuò)數(shù)量上,coverity初始化檢查場景覆蓋比其他四個(gè)工具要全,TSC為保持 準(zhǔn)確率,規(guī)則覆蓋上比較保守,而cppcheck存在比較嚴(yán)重的誤報(bào)問題,準(zhǔn)確率僅為 3%。pclint的誤報(bào)也相對很高,clang在初始化這塊顯得無能為力。從上圖可以很容易發(fā) 現(xiàn)cppcheck的誤報(bào)數(shù)量相當(dāng)?shù)酶?,cppcheck會將如下的場景判定為未初始化:
    (cppcheck誤報(bào)場景)

    SMD_POS是一個(gè)簡單的結(jié)構(gòu)體,它包含了一個(gè)空的構(gòu)造函數(shù),cppcheck依據(jù)這點(diǎn) 判定這是一個(gè)未初始化的錯(cuò)誤。但這樣的場景不會有什么問題,算是一個(gè)誤報(bào)。這導(dǎo)致 了cppcheck在未初始化規(guī)則的結(jié)果可信度大大降低。

  2. coverity在未初始化這塊的場景覆蓋比較全,特別是對結(jié)構(gòu)體對象的字段的初始 化情況的檢測,因?yàn)槠浠诰幾g可對變量做路徑跟蹤,例如:構(gòu)造函數(shù)里面調(diào)用了init() 函數(shù),coverity會繼續(xù)跟蹤init()函數(shù)中是否有對變量的賦值,所以掃描覆蓋場景最全。 coverity的誤報(bào)主要分為兩類:一類是對幾種未初始化場景的識別上存在問題,如:,變 量在某個(gè)分支的確沒有初始化,但用了一個(gè)狀態(tài)標(biāo)識其未初始化,當(dāng)使用這個(gè)變量前會 使用狀態(tài)標(biāo)記來判斷其是否沒有初始化,保證使用的變量都是初始化過了的。另一類就 是上面提到的“低價(jià)值報(bào)錯(cuò)”,即通過代碼邏輯或者做了代碼保護(hù),保證變量不會因?yàn)?沒有初始化而產(chǎn)生實(shí)際的問題。如:一個(gè)表示時(shí)間的結(jié)構(gòu)體,里面字段有year, month,day,hour,min,day這個(gè)字段沒有初始化,但實(shí)際代碼中也沒有用到這個(gè)字段,因此并不會產(chǎn)生任何問題。

    TSC在未初始化變量的檢查因不具備路徑分析能力,而以分支作用域檢查特定變量 在各個(gè)代碼分支的初始化情況,誤報(bào)率保持在相對低的一個(gè)水平。但場景覆蓋較少,沒 有針對結(jié)構(gòu)體字段的初始化場景做覆蓋。因?yàn)閷Y(jié)構(gòu)字段的初始化方式相對比較多樣: 逐個(gè)字段初始化,函數(shù)調(diào)用初始化,構(gòu)造函數(shù)初始化等。

4.內(nèi)存/資源泄露規(guī)則

內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存,從而造成了內(nèi) 存浪費(fèi)的情況。內(nèi)存泄漏是靜態(tài)下很難檢測的一種錯(cuò)誤,一般需要?jiǎng)討B(tài)分析工具進(jìn)行檢 測,如valgrind工具會捕獲malloc()/free()/new/delete的調(diào)用,監(jiān)控內(nèi)存分配和釋放,從 動態(tài)上檢測程序是否存在內(nèi)存泄漏。因此,靜態(tài)代碼分析能檢查的內(nèi)存泄漏就非常有限 了,當(dāng)前各工具主要是從代碼寫法上檢查內(nèi)存分配和釋放是否配對使用。比如:fopen 打開文件后在退出函數(shù)前是否有執(zhí)行fclose,new[]和delete[]是否配對使用等。

下圖是五個(gè)工具對樣本代碼掃描結(jié)果:

注:以上數(shù)據(jù)排除了cppcheck35個(gè)低價(jià)值報(bào)錯(cuò),這里排除的cppcheck35個(gè)報(bào)錯(cuò)都是基本數(shù)據(jù)類型的new和delete不匹配(如char* p=new char[100];delete p;)雖然這種寫法不規(guī)范,但由于實(shí)際上不會造成內(nèi)存泄漏,很多項(xiàng)目不會對此進(jìn)行修復(fù)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):pclint[55] >TSC[40]>coverity [29]>cppcheck[28]> clang[0]

準(zhǔn)確率:coverity[100%]=cppcheck[100%] >TSC[73%]>pclint[23%] > clang[N/A]

綜合評分:coverity[79分] ≈ TSC [73分]≈cppcheck[77分]>pclint[57分]>clang[0分]

從報(bào)錯(cuò)數(shù)量上看出,在內(nèi)存泄漏檢查方面,pclint雖然發(fā)現(xiàn)有效問題最多,但誤報(bào)很高,不推薦使用。TSC的有效錯(cuò)誤數(shù)比coverity和cppcheck多,但誤報(bào)也相對較高。clang則不具備泄露類場景的檢測能力。

注:由于靜態(tài)掃描能檢查的內(nèi)存泄露場景都非常明確,因此一般都不會出現(xiàn)問題,TSC的15個(gè)誤報(bào)也非場景識別有誤而是工具底層bug導(dǎo)致,后續(xù)會對底層bug進(jìn)行修復(fù)。如:#ifdef 和#else分支中各有一個(gè)fopen,實(shí)際編譯時(shí)只會走其中1個(gè)分支識別1次fopen,但由于底層bug識別了2次fopen,導(dǎo)致誤報(bào)。

5.邏輯錯(cuò)誤規(guī)則

邏輯錯(cuò)誤:指可能存在的邏輯問題,如if不同分支內(nèi)容相同,在switch內(nèi)缺少break等,對指針使用sizeof進(jìn)行空間分配等問題。

下圖是五個(gè)工具對樣本代碼掃描結(jié)果:

注:這些報(bào)錯(cuò)中剔除了一些無修改意義且結(jié)果數(shù)量很多規(guī)則:如:coverity掃描存在7484條Logically dead code(邏輯代碼不可達(dá))報(bào)錯(cuò)。cppcheck存在2246條unusedFunction(函數(shù)未被使用)報(bào)錯(cuò)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效數(shù)量:TSC[293]>coverity[164]>clang[142] >cppcheck [120]>pclint[116]

準(zhǔn)確率:clang[97%] >TSC[93%]>coverity(88%)>pclint[72%] >cppcheck[55%]

綜合評分:coverity[94分] > TSC[86分] > clang[80分] >cppcheck[63分] >pclint[27分]

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率上可以看出TSC可以更有效的發(fā)現(xiàn)邏輯類問題。但各工具邏輯類場景各有特色,互為互補(bǔ),可以一同選擇掃描,但cppcheck和pclint準(zhǔn)確率較低,可以較少選擇。clang的準(zhǔn)確率最高,但clang掃描出來的邏輯錯(cuò)誤中有一大半為低價(jià)值的邏輯錯(cuò)誤,比如clang掃描出來的142條邏輯錯(cuò)誤中就有140條“變量賦值但沒有使用”錯(cuò)誤。

①TSC,coverity具備較強(qiáng)宏展開能力

以DuplicateExpression規(guī)則為例,TSC發(fā)現(xiàn)DuplicateExpression規(guī)則報(bào)錯(cuò)32條,cppcheck發(fā)現(xiàn)DuplicateExpression規(guī)則報(bào)錯(cuò)12條。因?yàn)門SC可以對宏進(jìn)行更有效展開,例如:

這種報(bào)錯(cuò)TSC可以準(zhǔn)確的識別出來,宏MAX_TASK_TAB_SIZE和MAX_TASK_RES_NUM為相同的數(shù)值,而cppcheck無法區(qū)分發(fā)現(xiàn)這類問題,只能進(jìn)行簡單的文本匹配。coverity在推斷能力上也不差,在這點(diǎn)也明顯優(yōu)于cppcheck。

②TSC規(guī)則類型更有效

經(jīng)過篩選,TSC只保留價(jià)值更高的推斷和有效規(guī)則;

Ø增加一些函數(shù)檢查規(guī)則,如:MemsetZeroBytes,這種錯(cuò)誤的Memset寫法:memset(ctYear, sizeof(ctYear),0);可疑的數(shù)組下標(biāo)使用等這些規(guī)則在coverity邏輯類檢查中并沒有體現(xiàn),而coverity只會報(bào)出非常準(zhǔn)確的報(bào)錯(cuò)如:if分支完全相同等檢查項(xiàng)。

Ø剔除價(jià)值低的無效規(guī)則,如coverity規(guī)則Logically dead code,指一些邏輯上不可達(dá)的廢棄代碼;cppcheck規(guī)則memsetClassFloatc指對存在Float類型成員變量的Class
使用Memset,當(dāng)時(shí)代碼中發(fā)現(xiàn)基本都是Memset為0,并不會有數(shù)據(jù)丟失等問題。故這類規(guī)則發(fā)現(xiàn)有效問題很低,在數(shù)量較大的情況下,需要耗費(fèi)大量的人力來確認(rèn),性價(jià)比不高,TSC已經(jīng)將這種規(guī)則剔除。

總的來說,TSC在發(fā)現(xiàn)問題和準(zhǔn)確率方面表現(xiàn)都不錯(cuò),可以節(jié)省大量的人力在鎖定邏輯類型錯(cuò)誤。

TSC在某些細(xì)小規(guī)則的推斷能力上比coverity要稍微弱一些,如規(guī)則Missing break in switch:coverity發(fā)現(xiàn)全部準(zhǔn)確的報(bào)錯(cuò),TSC存在一定的誤報(bào),這些復(fù)雜場景需要較強(qiáng)的動態(tài)計(jì)算如:

五、常見誤報(bào)場景

1.空指針常見誤報(bào)場景

誤報(bào)場景一(cppcheck)

以上538行代碼報(bào)quiz_set_ptt存在空指針訪問。

誤報(bào)原因:538行只是指針的比較,并沒有解引用,這是一個(gè)比較低級的誤報(bào)。

誤報(bào)場景二(coverity)

以上119行代碼報(bào)actor存在空指針訪問,判定邏輯如下:112行對actor進(jìn)行了判空,說明actor在當(dāng)前上下文可能為空。所以119行actor可能為空。

誤報(bào)原因:xy_assert_retval是個(gè)宏,展開后包含有return語句,即如果actor為空115行就返回了,119行actor不會為空。

2.越界常見誤報(bào)場景

誤報(bào)場景一(TSC)

以上83行代碼報(bào)第數(shù)組訪問可能越界,判定邏輯如下:第61行的if語句對req_list.num的取值范圍作了限制,req_list.num在當(dāng)前上下文的最大值可以是
MAX_RECRUIT_REQ_LIST_SIZE(4);83行req_list._數(shù)組對象用req_list.num作為其數(shù)組訪問的下標(biāo),當(dāng)req_list.num取值為MAX_RECRUIT_REQ_LIST_SIZE時(shí)發(fā)生越界(req_list._數(shù)組的長度為MAX_RECRUIT_REQ_LIST_SIZE(4))。

誤報(bào)原因:第79行的if條件保證了之后的代碼req_list.num的值不會等于MAX_RECRUIT_REQ_LIST_SIZE,所以這是一個(gè)誤報(bào)。

誤報(bào)場景二(cppcheck)

以上第691行代碼報(bào)t_index_map可能取值-1越界,判定邏輯如下:665行聲明t_index_map并賦值為-1,t_index_map的賦值在681行,但681行在for循環(huán)里面,而for循環(huán)存在不能進(jìn)入的可能性,所以在691行使用t_index_map可能未初始化。

誤報(bào)原因:進(jìn)入691行代碼的前提條件是found變量為true,而found為true保證了t_index_map被賦值了。

誤報(bào)場景三(coverity)

以上第146行代碼報(bào)src_index + 1可能取值為4越界,判定邏輯如下:139行對src_idx的取值范圍進(jìn)行了限定:[0, 3](TEAM_MEMBER_MAX長度為4),因此146行src_idx + 1可能為4導(dǎo)致對team_ptr->team_member訪問越界。

誤報(bào)原因:144行對src_idx的取值范圍進(jìn)行了過濾,保證了src_idx+1不會越界。

3.未初始化常見誤報(bào)場景

誤報(bào)場景一(cppcheck)

以上第462行代碼報(bào)ret未初始化錯(cuò)誤,判定邏輯如下:ret變量在第434行聲明,在switch中的兩個(gè)case中均有初始化代碼,但是在default分支中沒有對ret進(jìn)行初始化,因此判定462行可能會返回一個(gè)沒有初始化的ret。

誤報(bào)原因:default分支中的xy_assert_retval是一個(gè)宏,因?yàn)閏ppcheck宏查找策略的原因?qū)е略摵隂]有展開。實(shí)際上宏展開包含了return語句,也就是說如果進(jìn)入default分支就函數(shù)就直接返回而不會執(zhí)行到462行代碼。

誤報(bào)場景二(coverity)

以上第284行代碼報(bào)careers未初始化錯(cuò)誤,判定邏輯如下:careers數(shù)組在第278行聲明,但在for循環(huán)對每個(gè)數(shù)組成員進(jìn)行了初始化。這可能造成careers完全沒有初始化,或者只初始化了一部分。因此在284行使用careers存在未初始化錯(cuò)誤。

誤報(bào)原因:通過代碼邏輯可知,career_num代表的是careers被初始化的長度,在訪問careers數(shù)組元素的時(shí)候,通過career_num進(jìn)行了保護(hù),因此不會出現(xiàn)未初始化的錯(cuò)誤。

4.泄露類常見誤報(bào)場景

誤報(bào)場景一(TSC)

以上第63行代碼報(bào)fp存在資源泄露風(fēng)險(xiǎn)錯(cuò)誤,判定邏輯如下:xy_assert_retnone宏展開后,含有return語句,也就是說fp在調(diào)用fclose之前可能返回,存在泄露風(fēng)險(xiǎn)。

誤報(bào)原因:實(shí)際上代碼邏輯決定了函數(shù)return的前提條件fp為空。這個(gè)時(shí)候是沒有必要調(diào)用fclose的,不存在泄露風(fēng)險(xiǎn)。

誤報(bào)場景二(pclint)

以上第139行代碼(~CGIProcessor(), 析構(gòu)函數(shù))報(bào)存在資源泄露風(fēng)險(xiǎn)錯(cuò)誤,因?yàn)闆]有釋放_cgiContainer。判定邏輯如下:_cgiContainer作為CGIProcessor的一個(gè)指針成員(第149行),需要在析構(gòu)函數(shù)中進(jìn)行釋放,否則為內(nèi)存泄露。

誤報(bào)原因:CGIProcessor對象并不own _cgiContainer指向的對象,不需要它來釋放。

5.邏輯類常見誤報(bào)場景

誤報(bào)場景一(cppcheck)

以上4596行代碼報(bào)“對包含有float成員的對象調(diào)用memset方法”錯(cuò)誤。

誤報(bào)原因:利用memset對一個(gè)對象的數(shù)據(jù)字段清零是比較常見的做法,float成員清零后值也為0,不會造成什么問題。

原文轉(zhuǎn)載自:


標(biāo)簽:測試優(yōu)化代碼優(yōu)化C/C++軟件測試

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn


為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
相關(guān)產(chǎn)品
軟件
  • 產(chǎn)品功能:測試分析
  • 源 碼:非開源
  • 產(chǎn)品編號:13140
  • 當(dāng)前版本:v2025.1 [銷售以商家最新版為準(zhǔn),如需其他版本,請來電咨詢]
  • 開 發(fā) 商: Parasoft 正式授權(quán)
  • ">Parasoft C/C++test

    針對 C/C++ 軟件開發(fā)提供統(tǒng)一、完全集成的測試解決方案。

    軟件
  • 產(chǎn)品功能:測試分析
  • 源 碼:非開源
  • 產(chǎn)品編號:13559
  • 當(dāng)前版本:v2025 [銷售以商家最新版為準(zhǔn),如需其他版本,請來電咨詢]
  • 開 發(fā) 商: Gimpel Software 正式授權(quán)
  • ">PC-lint Plus

    PC-lint Plus是針對C和C ++的綜合靜態(tài)分析解決方案

    title
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    利記足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 最大網(wǎng)上PM娛樂城盤口(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)雷火競技官方買球(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 雷火競技權(quán)威十大網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) boyu·博魚信譽(yù)足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 權(quán)威188BET足球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)188BET足球大全(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 高清免费视频一区二区三区 | 人成精品视频三区二区一区 | 成人向日葵app污 | 亚洲精品日韩一区 | 最新md传 | 国产精品萌白酱永久在线观看 | 欧美精品一区在线观看 | 久青草国产在视频在线观看 | 国产精品区1日本午夜影院 亚洲精品高清 | 国产乱码精品在线播放 | 国产91最新欧美在线 | 日韩欧美中文字幕在线观看一区 | 国产重口 | 国产国产人免费人成免费视频 | 国产精品亚洲小说专区 | 亚洲国产欧美日韩v一区二区 | 牛牛精品一区二区三区 | 视频在线一区二区三区 | 码一码二码w358cc | 搡老女人露脸 | 99亚洲国产精品精华液 | 无限国产资源好片2025 | 国产很色很黄很大爽的视频 | 日本成a人v网站在线观看 | 精品欧美一区二区在线看片 | 日本一本二本三区免费2025 | 在线观看精品国产免费 | 飘雪免费手机全集在线观看 | 亚洲日产综合欧美一区二区 | 欧美中文字幕一区二区三区 | 国产人成视频免费看 | 国产鲁鲁视频在线观看免费 | 国产中文字 | 国产网红主播 | 日韩欧美综合在线另类 | 欧美黑人巨大多p杂交 | 欧美五级在线观看视频播放 | 国产亚洲精品成 | 日韩亚洲国产女同二区三区 | 日本三级理论一区二区三区 | 韩国日本免费高清观看 | 国产欧美亚洲精品一二三区 | 欧美亚洲国产一区二区 | 欧美大肥婆大肥bbbbb | 91国内视频在线 | 日韩精品午 | 国产乱码一二三区精品 | 国产日本欧美在线观看 | 国产一区二区精品夜夜嗨 | 日韩二区在线 | 中日欧美精品在线播放 | 福利第二页精品推荐在线观看 | 成人福利国产精品视频 | 97色伦97色伦国产在线 | 国产精品专区第一页在线观看 | 日本欧美一区二区三区高清 | 国产老熟女狂叫对白 | 男女激情 | 91最新人成在线观看 | 国产精品2025在线 | 欧美一区二区三区免费播放 | 免费观看黄a一级视频日本 精品露脸 | 成人va视频国产 | 日韩一线二线伦理片免 | 欧美一区午夜免费爱aaa | 亚洲精品自拍愉拍第二 | 级欧美一级一级国产 | 欧美精品一区二区三区在线观看 | 国产视频第一页bt天堂 | 欧美草逼网站 | 亚洲欧美另类国产综合 | 欧美日韩不卡视频一区二区三区 | 国语自产偷成人精品视频 | 国产美女自卫慰水免费视频 | 欧美日韩国产乱了伦 | 国产欧美乱夫不卡无乱码 | 国产欲乱一级视频 | 亚欧洲乱码视频在线专区网站 | 天天搞夜夜 | 日韩综合一区在线观看 | 亚洲高清免费观看 | 国产中文| 黑人巨大精品欧美一区二区免费 | 国产免费爱在线观 | 乱伦日本影视国产 | 国产日本韩国91 | 日韩欧综合精品 | 亚欧乱色国产精品免费九库 | 亚洲一区二区三区中文字幕在线 | 精品免费视在线观看 | 妖小槡bbbb槡bbbb槡 | 国产精品福利电影一 | 91成人午 | 日本本亚洲三级在线播放 | 免费看欧美一级特黄a大片一 | 日韩视频在线 | 欧美日韩一区二区综合视频 | 亚洲国产精品隔壁老王 | 日本高清免费不卡视频 | 国产一级a毛一级a在线观看 | 区小说区激情区 | 欧美亚洲福利精品二区 | 女儿的男朋友5中汉字晋通话 | 国产99视频在线观看免费 | 欧美日韩精品伊人影院在线 | 日韩精品亚洲专 | 亚洲国产一级在线观看 | 不卡无在线一区二区三区观 | 激情亚洲一区国产精品 | 717电影琪琪午夜理论 | 欧美88888在线观看国产 | 日本成人大片一区二区 | 国产厨房一区二区三区 | 日本免费一区高清观看 | aa级毛| 免费精品一区二区三区在线观看 | 香蕉成人伊视频在线观看 | 国产极品美女在线观看 | 欧美黑人又粗又大又爽免费 | 高清在线精品一 | 日韩女同性恋一区二区三区 | 乱伦高清综合免 | 一区二区视频 | 国产精品永久在线观看 | 国产公妇仑在线观看 | 另类在线观看网站 | 国产小比孩网站 | 国产午夜福利精品在线观看不卡 | 欧美午夜婷婷国产电影 | 国产97碰免费视频 | 日韩r级电影在线观看 | 国产只有精品 | 在线视频欧美日韩 | 亚洲91精品一区 | 写真福利理论片在线播放 | 国语第一次处破女 | 日韩乱码一区 | 中文字幕一区二区三区免费看 | 日韩一级欧美一级一级国产 | 99re国产精品视频首页 | 99久在线精品99re8 | 99精品视频免费热播 | 亚洲欧美丝袜另类清纯 | 国产偷v国产偷v亚洲 | 另类亚洲综合区图片小说区 | 99九九精品国产高清自在线 | 黑人巨大精品欧美一区二区在线 | 国产又色又爽又黄的视频网站 | 国产精品日韩欧美在线第一页 | 女高中生第一次破苞出血视频 | 日本久中 | 真实国产乱子伦精品 | 99精品国产高清一区 | 男女午夜爽爽大片免费 | 亚洲色大成网 | 亚洲v欧美v国产v在线观看 | 国内外成人激情免费在线视频 | 成人午夜天 | 亚洲欧美日| 日韩欧美国产一区精品 | 在线观看国产亚洲视频免费 | 国产在线看片免费人成视频 | 日韩国产欧美二区手机在线 | 成人a大片高 | 欧美日韩国产综合视频在线看 | 精品国精品国产自在久国产 | 国内精品一区二区三区蜜月 | 欧美日韩精品一区在线播放 | 国产中国三级在线视频 | 99re热视频这里只有 | 欧洲亚洲精品免费二区 | 国产在线精品50页 | 国产精品17p | 日韩欧美另类视频在线观看 | 午夜影视免费体验区一分钟 | 噼里啪啦hd免费观看动漫 | 青青国产精品 | 亚洲综合另类小说色区一 | 三年片最新电影免费观看 | 中文字幕资源网在线观看免费 | 精品国产v | 国产丝袜视频在线 | 色哟哟网站入口在线观看视频 | 午夜视频| 国产一区二区在线影院 | 国产在线不卡精品网站互動交 | 精品国产二区三区不卡毛 | 亚洲国产美国国产综合一区 | 18以下勿进色禁网站免费看 | 中文字幕一区二区三区 | 国产精品自拍91 | 国产福利在线观看永久免费 | 天天综合天天做 | 国内精品视频在线播放 | 大地影院高清mv在线观看 | 亚洲精品理论电影在线观看 | 国产老熟女狂 | 朋友的妈妈2在完整有限中字第 | 蜜汁娇妻有点甜全文阅读 | 猛又大的视频在线播放 | 51视频精品全部免费日产mv | 国产精品午夜片在线观看 | 一级特黄aaa大 | 色偷偷人人澡人人添老妇人 | 国产乱码精品一区二区三区四川人 | 蜜桃臀v福日本福利一区 | 亚洲视频一区二区在线观看 | 变态拳头交视频一区二区 | 亚洲欧美中文字幕专区 | 成人午夜福利 | 秋霞免费理论片鲁丝在线观看 | 欧洲日韩一区二区三区四区 | 国产精品污www在线观看 | 国产vr精品亚洲欧美咪咕爱 | 日本高清免费中字 | 91精品啪在线观看国产色 | 在线成人免费观看国产精品 | 国产人妖爆视频在线观看 | 视频在线观看播放免费 | 精品国产日韩无影视 | 欧美一级高清片国产特黄大 | 欧美午夜理伦三 | 成年动漫h视频在线观看 | 99国产精 | 国产在线精品一区二区三区直播 | 草莓视频在线免费看 | 亚洲v乱码专区国产乱码 | 精品视频在线观看视频免费视频 | 日韩精品中文字幕高清在线 | 欧美日韩一区二区三区四 | 国内精品视频九九九九 | 日韩欧美在线观看成人 | 91精品国产| 欧美亚洲日韩国产 | 99精品免费视频 | 国产精品不卡一区二区三区 | 欧美与黑人午夜性猛交 | 女教师韩版中字 | 俄罗斯美女真人性做爰 | 一本之道高清乱 | 国产在线地址2025 | 亚洲欧美日韩国产精选在线观看 | 日韩精品武 | 国产精选在线播 | 日韩一二区 | 亚洲熟女精品一区二区成人 | 国产欧美日韩在线视频观看 | 国产人在 | 一级a一片在线播放国产 | 日韩欧美一区二区尤物 | 精品一区二区在线观看 | 欧美日韩一区二区三 | 综合亚洲欧美日韩一区二区 | 国产真实乱xxxⅹ | 成人免费观看做爰视频胸大 | 成人国产欧美日韩在线观看 | 玖玖国产在线 | 韩国三级中文字 | 日韩高清国产精品亚洲 | 国内精品久 | 国产亚洲精品综合网在线观看 | 99香蕉国产线观看免费 | 男女车车的车车网站w98免费 | 欧美三级大片在 | 国产伦精品一区二 | 国产乱子伦农村xxxx | 欧美精产国 | 明星国产欧美日韩在线观看 | 欧美第一页 | 国产又色又爽又黄的视频免费看 | 不卡视频在线播放 | 日韩一区二区高清视频免费在线 | 国产激爽大片在线观看 | 在线免费观看视频a | 两个人高清在线观 | 九色91| 丰满岳乱一区二区三区在线观看 | 欧美jizzhd精品欧美巨大 | 国精品日韩欧美一区二区三区 | 肉色超薄丝袜脚交 | 国语自产拍在线视视频 | 日韩国产不卡在 | 国产精品你 | 乱码视频午夜间在线观看 | 亚洲欧美日韩专区一区二区三区 | 国产欧美 | 国产精品亚洲专一区二区三区 | 99国产一区二区三区亚洲一区 | 欧美日韩国产激情电影 | 亚洲精品在看在线观看 | 国产性生大 | 国产精品一卡二卡3卡四卡网站 | 十九岁中国电影在线观看免费 | 热门电视剧免费在线观看 | 欧美日韩国产中文精品字幕 | 三区免费视频 | 精品欧美激情在线观看 | 国产精品玖玖视频 | 乱无伦码中文视频在线 | 欧美顶级情欲片在线播放 | 好吊妞在线视频免费观看综合网 | 欧美专区三级在线观看 | 欧美男男激情videos高清 | 国产+欧美+日韩+另类 | 国产精品亚洲午夜不卡 | 日韩午夜在线视频 | 爽又丰满 | 中文字幕第一页亚洲 | 在线日本妇人成熟免费 | 日韩免费高清大片在线 | 多马影院 | 欧美亚洲日韩国产综合视频网站 | 在线观看精品国产福利片87 | 亚洲第一视频在线 | 91精品免 | 99久在线国内在线播放 | 亚洲成ā人v欧美综合天 | 欧美高清一区二区三区 | 欧美日本综合一区二区三区 | 99精品视频在线播放 | 国产精品午夜小视频观看 | 热99r| 日韩亚洲欧美精品性爱 | 亚洲区精品在线观看 | 国产激情精品一区二区三区 | 拍拍拍无挡国产精品 | 日本高清中文字幕高清在线 | 欧美特黄三级在线观看 | 国产白丝jk学生在线播放 | 国产综合亚洲欧美日韩一区二区 | 色老头免费视频精品三区 | 最新好看的影视大全在线观看 | 老司机深夜免费福利 | 乱淫视频 | 日本人妖在线观看一区二区 | 可以看黄的网 | 在线点播亚洲日韩国产欧美 | 国产在线观看免费观看不卡 | 9cao在| 午夜欧美性视频在线播放 | 精品免费一区二区三 | 日本视频在线免费观看 | 国产精品偷伦视频 | 亚洲欧美性另类春色 | 51精品国产人成在线 | 97精品在线播放 | 日韩欧美国产综合在线播放 | 国产黄大片在线观看视频 | 国产91蜜臀精品对白在线播放 | 精品一区二区三区在线免 | 亚洲国产日韩a不卡线欧美 国产精品成人一区二区三区 | 国产亚洲日本精品成人专区 | 亚洲加勒 | 国产精品自产拍高 | 亚洲欧美大片在线观看 | 亚洲欧美成va人在线观看 | 欧美在线看片免费观看 | 亚洲免费在线 | 国产亚洲欧美 | 精品日韩中文字幕在线 | 欧美人与物v | 裸妇厨房风流在线观看 | 欧美日韩中文国产v?另类 | 日韩国产私拍在线观看 | 亚洲三级一区二区在线观看 | 国产99在线a视频 | 污免费网站入口 | 国产在线精品一区二区三区 | 天堂草原电视 | 欧美精品色精品一区二区三区 | 亚洲国内自拍欧美 | 最新全网影视大全电影电视剧 | 青草精品| 国产综合色在线视频区 | 国产玉足脚交极品在线视频 | 国产精品初高中精品免费观看 | 欧美亚洲日韩 | 国产日韩影院在线 | 97午夜理论片在线影院 | 国产日韩在线欧美视频 | 免费的视频app网站 最新欧美精品一区二区三 亚洲美女影院 | 九九免费视频网站 | 99热精品免费 | 99精品国产一区二区婷婷 | 日韩欧美综合在线另类 | 国产亚洲欧美日韩在线三区 | 国产亚洲欧美色 | 精品国产福利一区二区在线 | 欧美亚欧日韩 | 国产乱子伦不卡视频 | 国产a∨国片精品青草视频 韩国精品一区二区三区在线 | aⅴ一区二| 精品国产乱码aaa一区二区 | 天天看片无| 国产亚洲精品不卡 | 精品深夜 | 日韩欧美理论在线观 | 爽妇网国产精品 | 夜爽8888视频在线观看 | 玖玖玖视频在线观看视频6 日韩精品搭讪在线视频播放 | 噼里啪啦的视频免费观看 | 国内精品自产拍在线观看 | 亚洲综合一区二区三区四区五区 | 乱码视频午夜间在线观看 | 成人天堂资源在线观看 | 国产欧美日韩另类精品 | 精品美女一级在线观看 | 无人视频在线观看 | 精品视频在线播放 | 国产精品久线在线 | 4480yy午夜私人影院 | 欧美日本一区 | αv在线视频免费观看男人 精品区2区 | 欧美高清色高清在线观看 | 国产网站免费精品网站 | 国产精品一品二区三区的使用体验 | 日本高清色| 精品国产品国语在线不卡 | 十分钟在线观看免费直播 | 欧美a级片视频 | 亚洲欧美国产国产一区二区三区 | 亚洲高清国产拍精品动图 | 国产乱xxⅹxx国语对白 | 自拍偷拍亚洲 | 欧美日韩中文综合第一页 | 欧美日韩综合另类 | 九一短视频 | 成人高清在线观看播放 | 成都在线观看免费观看 | 日本一本二本三区免费2025 | 日韩精品影片 | 欧美日韩精品综 | 美女禁区a级全片免费观看 黑人巨大跨种族video | 日本不卡高清视频v | 欧美日韩a∨在线 | 国产m3u8在线观看 | 亚洲一区在线播放蜜臀 | 欧美日韩亚洲第一页 | 韩国日本免费高清观看网址 | 国产亚洲播放在线 | 国产乱码一区 | 午夜国产福利在线直播 | 狠狠热精品免费视频 | 国产一区二区三区四区免费观看 | 精品国产一区二区三区香 | 欧美日韩国产色 | 国产精品综合视频一区二区 | 国产精品进线69影院在线 | 国产96在线| 在线欧美鲁香蕉94色 | 中文国产欧美不卡 | 99国产在线观看 | 欧美日韩动漫亚洲 | 免费在线宅男精品视频 | 国产在线观看永久免费 | 国产婷婷综合在线精品尤物 | 不卡在线播放中文字幕在线 | 欧美日韩国产首页 | 国产女人成人精品视频 | 国产美女自拍视频 | 日韩亚洲欧美高清在线观看 | 不卡中文字幕系 | 好吊操视 | 另类99精品国产 | 岛国免费aⅴ在线观看 | 国产91爱剪辑直播在线观看 | 韩国视频一 | 国产最新进 | 日本aⅴ精品一区二区三区 国产精品亚 | 亚洲精品视在线看1 | 成人精品亚洲欧美日韩 | 国产免费不卡的视频在线 | 国产精品交换 | 国产又大又粗又长免费视频 | 免费国产高清在线精 | 精品美脚玉足 | 在线观看成人年视频免费 | 午夜dj免费视频在线观看 | gratis喷潮| 最近新免费韩国直 | 91精品国产免费青青碰在线观看 | 国产黑色丝袜视频在线 | 一区二区视频传媒有限公 | 国产原创剧情经理在线播放 | 国产理论在线观 | 欧一美一性一交一乱一性一 | 国内揄拍国 | 国产区亚洲天堂一区二区三 | 天天澡日日澡狠狠欧美老妇 | 国产成在线观看免费视频成本 | 国产日韩精品视频 | 精品一区二区日本高清 | 日韩一区二区三区高清中文字幕 | 蜜桃视频一区二区三区在线观看 | 欧美日韩亚洲中文综合视频 | 国产精品第一区第27 | 看片免费人成视频 | 欧美激情人成视频在线观看 | aⅴ网站亚洲国产小电影 | 好看的韩剧在线 | 日本高清视频网址 | 美女胸又www | 国产日本韩国91 | 精品欧美视频第二页在线观看 | 国产午夜福利精品在线观看不 | 精品91一区二区三区 | 国产色产综合色产在线观看视频 | 日韩伦理电影在线免费观看 | 国产不卡 | 日韩xxxx在线免费观看 | 欧美日韩国产亚洲沙发 | 人免费va视频综合网 | 精品日本免费一区二区三区 | 日本午夜电影一区二区三区 | 欧美日韩国产在线人成 | 日本国产美国日韩欧美mv | 日本高清色本 | 国产网站在线 | 欧美日韩精品综 | 国内成人精品亚洲 | a欧美日韩国产不卡免费 | 日本美女日b视频 | 欧美激情视频一区二区 | 国产精品97 | 国产精品亚洲综合—区在线观看 | 在线天堂免费中文字幕 | 日本日本乱码伦视频在线观 | 中国国产免费毛卡片 | 亚洲一区在线播放蜜臀 | 欧美精品1区国新欲乱视频 国产精品一区二区无线 | 99精品国产高清自在线看超 | 全网热播最新电影电视剧 | 欧美日韩精品一区二区免费高清 | 亚洲欧美日韩另类精品一区二 | 91污视频| 成人a级高清视频在线观看 成人人电影 | 欧美乱子 | 国产精品区一区二区三在线播放 | 99亚洲国产精品精华液 | 精品国产丝袜 | 自拍偷自拍亚洲精品偷一 | 男女车车的车车网站w98免费 | 日本高清com| 欧美日韩中国一区二区三区 | 免费电影 | 日本高清www午色夜com | 三年片大全在线观看 | 欧美一级精品视频一区 | 午夜成人理论福利片 | 国产一在线精品一区在线观看 | 日本高清动作 | 日韩国产欧美视频二区在线观看 | 成人影片在线官网 | 动漫精品一区视频在线观看 | 日韩性freexxxx在线观看 | 国产日韩一区在线精品 | 国产无吗 | 天堂а√中文在线官网 | 日韩欧美一区二区三区不卡视频 | 一区二区三区四区电影 | 国产女主播回放在线观看 | 欧美一级特黄高清视频 | 国产精品白丝喷水在 | 欧美高清在线视频在线99精品 | 亚洲国产亚洲片在线观看播放 | 涩涩热热国产丝袜一区 | 国产精品自产拍在线观看中文 | 国内视频一区在线播放 | 免费国产最新进精品视频 | 亚洲欧美日韩国产综合在线看片 | 日韩亚色五月 | 69天堂网在线视频精品 | 国产经典在线观看一区 | 日本亚洲一区二区 | 最新在线观看视频国产91 | 亚洲一区二区观看 | 黄页网址大全免费观看 | 国产精品va欧美精品v日韩 | 国产黄a三级三级三级看 | 欧美日本日韩五月天 | 亚洲国产欧美一区二区三区 | 国产原创剧 | 韩国午夜理论在线观看 | 日韩欧美精品小视频 | 精品一精品国产一级 | 欧美又大粗又爽又黄大片视频 | 精品一区二区三区三区 | 日本乱理伦片在线观看真人 | 成人午夜天| 免费大片 | 精品国自产拍网站 | 区二区三区 | 深夜影院 | 日韩四级片在线看 | 国产精品免费视频一区二区三 | 99青草青草久热精品视频 | 国产精品露脸国语对白 | 欧美一区韩国二区老 | 国产福利免费的网址 | 日韩精品电影一区 | 全黄裸片一29分钟免费真人版 | 日韩精品免费 | 乱伦日韩中文字幕 | 日韩高清在线观看 | 日韩偷拍福 | 呦交小u女国产 | 成人爽爽激| 日韩区欧美国产区在线 | 天黑黑影院免费观看视频在线播放 | 日韩一二三区 | 国产性猛交xxxx乱大交 | 日本高清一区二区免费2025 | 成色伊人 | 日本特黄特黄 | 国产日产精品 | 国产91高清免费 | 91夫妻论坛| 欧美一区二区三区日韩免费播 | gogogo手机高清在线观看 | 另类癖好 | 欧美精品性夜视频在线观看 | 97国产伦子在线观看 | 国产高清精品一级 | 热门免费电影大片 | 日韩欧美一区二区尤物 | 免费二级c片在线观看a | 免费国产黄线在线观看 | 国产日韩亚洲欧洲一区二区三区 | 日韩欧美在线一区二区不卡 | 8天堂资| aaa亚洲欧美日韩 | 国产精品日韩欧美一区2区3区 | 国产午夜羞羞 | 国产精品va欧美精品v日韩 | 最新好看的影视大全在线观看 | 国产乱理 | 五月婷婷深爱激 | 欧美一级视频在 | 手机免费在线日韩电影大片 | 国语自产视频在线 | 97国产在线公开免费观看 | 真实国产乱子伦视频 | j8又粗又大又长又爽又硬电影 | 亚洲成国产人片在线观看 | 日本免费一区二区三区在线看 | 国产午夜理论 | 国产一区视频在线观看 | 精品乱码一区二区三区四区 | 九九热在 | 日本精品中文字幕阿v免费 日韩精品亚洲精品第一页 视频在线播放在线观看 | 国产最新进 | 中日韩精品一区二区三区成人 | 多人伦交性欧美 | 亚洲桃色| 国产精品产品视频 | 91短视频污下载app | 夜鲁鲁鲁夜夜综合视频欧美 | 少女频道在线观看高清 | 中文字幕丰满伦孑 | 色久悠悠色久在线观看 | 精品国在线观看视频在线播放 | 欧美激情都市国产 | 日本一区二区三区四区视频 | 欧美日韩国产亚洲综合网一区 | 最好看的中文字幕高清电影 | 欧美日韩亚洲精品瑜伽裤 | 国产亚洲日韩在线播放不卡 | 国产精品网站在线观看 | 91高清免费国产自产拍不卡 | 国产美女视频国产视视频 | 国产一级特黄aaa大片在 | 国产一区二区不卡视频 | 成人国产一区二区精品小说 | 精品一区二区三区中文字幕 | 日本熟女性爱中文字幕视频 | 午夜淫片| 成人爽免费视频在线观看 | 国产精品香蕉在线观看 | 国产精品直播手机在线 | 青青精品导航 | 日本亚洲综合在线 | 日韩精品一区二区三区四区 | 中文字幕亚洲欧美一区 | 亚洲精品色午夜 | 三级网址 | 97精品依人久 | 日韩亚洲不卡中文字幕在线 | 国产乱伦网站国 | 日韩一区二区三区免费体验 | 欧美乱妇日本 | 中文字幕在线有码高清 | 星空天美麻花视频大全 | 日韩色婷 | 黄动漫在| 日韩精品免费一线在线观看 | 亚洲欧美日韩综合一区 | 国产青草精 | 五月综合激情婷婷六月色窝 | 日韩丝袜| 国产亚洲欧美精品91 | 热门电影综艺电视剧手机在线观看 | 自偷自拍三级全 | 国产疯狂女同互磨高 | 欧美蜜桃臀在线观看一区 | 成人免费观看黄ā大片夜月 | 日韩欧美在线视频一区二区 | 年轻的母亲4韩剧免费中文版 | 亚洲激情婷婷 | 日本一线二线三卡四卡区别 | 久章草在线视 | 免费电影在线 | 日韩伦理在线播放成 | 91视频在线观看网 | 午夜射精日韩 | 日韩欧美一区二区三区视频 | а√天堂资源在线官网 | 国产香蕉一区二区在线观看 | 欧美破苞在线 | 亚洲欧美色国产综合 | 97色成人| 国产福利不卡免费视频在线观 | 日韩午夜在线一区二区三区 | 国产一卡二卡三卡四卡在线看 | 污软件不收费软 | 欧美激情狠狠14p | 欧美+日韩+中文字幕 | 91香蕉榴莲丝瓜草莓黄瓜榴莲 | 成全在线观看免费完整版 | 免费人成年激情视频在线观看 | 青青久热| 色国产视频 | 日本深夜18免费看片 | 99热这里只有精 | 午夜欧美视频在线 | 中文字字幕乱码高清二本道资源站 | a级孕妇高清免 | 精品香蕉免费大视频日韩亚洲欧 | 欧美日韩中文字幕在线播放 | 欧美小视频在线 | 欧美亚洲国产日韩在线播放 | 国产视频精选 | 国内精品在线一区二区 | 免费在线观看电视剧大全 | 91网站免费观看直播 | 91九色国产社区在线观看 | 亚洲一区二区影视 | 国产呦系列(771vip观看) | 亚洲aⅴ精品国产首次亮相 日韩美女aa高清在线观看 | 男女直接做无 | 日本xxxx1819| 国产精品亚洲在线播放 | 国产真实乱子伦精品视频 | 国产乱子伦视频 | 国产香蕉大片在线视频 | 欧美经典 | 国产黄a三级三级看三级 | 好看的电视剧在线观看 | 国产日韩亚洲欧美第一区 | 99亚洲国产精品精华液 | 精品女同一区二区三区 | 成人国产亚洲日本在线 | 区二区视频免费看 | jizz国| 欧美日韩国产在线 | 国产又猛又黄又爽在线视频无 | 久视频国产精品免费观看 | 国产va免费高清在线观看 | 中文字幕国产日韩 | 亚洲va在线观看 | 日本三区视频 | 最新福利电影在线看 | 五月天一区二区在线观看 | 日韩欧美美女视频网 | 国产色秀视 | 永久成人免| 777米奇 | 国产香线蕉手机视频在线观看 | 无人一码二码三码4码免费 国产精品欧美一区二区三区不卡 | 国产精品任我爽爆在线播放 | 国产欧美 | 国产亚洲束缚综合在线 | 老司机影院 | 一区二区三区国产亚洲网站 | 在线高清mv视频 | 欧美xx| 亚洲精品国产美女在线观看 | 果冻剧精品传媒入口 | 爱情岛论坛| 亚洲中文精品视频在线 | 国产一级性爱视频在线观看 | 国产欧美综合在线一区二 | 亚洲免费网站在线观看 | 国产九九99视频在线播放 | 男女之间的唏唏哩哩二人世界 | 亚洲日本在线中文字幕 | 91社区国产在线播放 | 成人国产经典视频在线观看 | 欧美自拍无毒不卡 | 日韩欧美中文字幕在线三区 |