在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何確保整體代碼質量

lhl545545 ? 來源:C語言與CPP編程 ? 作者:C語言與CPP編程 ? 2022-09-26 09:03 ? 次閱讀

本系列是開源書C++ Best Practises[1]的中文版,全書從工具、代碼風格、安全性、可維護性、可移植性、多線程、性能、正確性等角度全面介紹了現代C++項目的最佳實踐。本文是該系列的第一篇。

C++最佳實踐:

1. 工具(本文)

2. 代碼風格

3.安全性

4.可維護性

5.可移植性及多線程

6.性能

7.正確性和腳本

前言

C++最佳實踐: 支持Fork的編碼標準文檔

本文檔旨在收集對C++最佳實踐所進行的協作性討論,是《Effective C++》(Meyers) 和《C++ Coding Standards》(Alexandrescu, Sutter) 等書籍的補充。在討論如何確保整體代碼質量的同時,補充了一些沒有討論到的較低級別的細節,并提供了具體的風格建議。

在任何情況下,簡單明了都是首選。本文所舉示例是為了說明為什么一種選擇比另一種更受歡迎。在必要情況下,也會用文字說明。

本文檔由Jason Turner編寫,根據知識共享署名-非商業4.0國際許可協議[2]授權。

免責聲明

本文檔的編寫基于個人經驗,你不需要完全同意其中的觀點。本文檔保存于GitHub[3]上,任何人都可以fork供自己使用,或者提交修改建議與大家分享。

本文檔啟發O'Reilly發布了視頻: Learning C++ Best Practices[4]

工具

應該在開發過程的早期建立用于執行這些工具的自動化框架,檢出源代碼、構建和執行測試所使用的命令不應超過2-3個,一旦測試完成,應該對代碼的狀態和質量有接近完整的了解。

源碼管理

對于任何軟件開發項目來說,源碼管理都是絕對必要的,如果還沒有,那就開始使用。

GitHub[5] —— 允許無限制的公共存儲庫和私有存儲庫,支持最多3個協作者。

Bitbucket[6] —— 允許無限制的私人存儲庫,最多5個協作者,免費。

SourceForge[7] —— 僅支持托管開放源碼。

GitLab[8] —— 免費提供無限的公共和私有存儲庫,包括無限的CI執行器(CI Runner)。

Visual Studio Online[9] (http://www.visualstudio.com/what-is-visual-studio-online-vs) —— 無限的公共存儲庫,私有存儲庫收費,支持git或TFVC。另外提供: 問題跟蹤、項目計劃(包括Scrum等多個敏捷模板)、集成托管構建,所有特性都可以集成到Microsoft Visual Studio中,僅支持Windows。

構建工具

使用廣泛接受的行業標準構建工具,可以防止在做探索、鏈接新庫、打包產品等等工作時重復發明輪子。例子包括:

CMake[10]

對于構建性能,請考慮: https://github.com/sakra/cotire

對于增強可用性,請考慮: https://github.com/toeb/cmakepp

使用 https://cmake.org/cmake/help/v3.6/command/target_compile_features.html 作為C++標準flag

考慮使用 https://github.com/cheshirekow/cmake_format 自動格式化CMakeLists.txt文件

CMake特定最佳實踐請參考后續的延伸閱讀[11]部分

cmake --build提供了平臺無關的通用編譯接口

Waf[12]

FASTBuild[13]

Ninja[14] —— 可以極大優化大型項目的增量構建時間,可以作為CMake的target。

Bazel[15] —— 基于網絡工件緩存和遠程執行的快速增量構建

Buck[16] —— 類似于Bazel,對iOSAndroid有很好的支持

gyp[17] —— 谷歌chromium的構建工具

maiken[18] —— 具有maven配置風格的跨平臺構建工具

Qt Build Suite[19] —— 基于Qt的跨平臺構建工具

meson[20] —— 快速、對用戶友好的開源構建系統

premake[21]

請記住,這不僅是構建工具,也是編程語言。請盡量維護良好整潔的構建腳本,并遵循正在使用的工具的推薦實踐。

包管理器

包管理是C++的重要主題,目前還沒有明確的贏家。請考慮使用包管理器來幫助跟蹤項目的依賴關系,從而幫助新人更容易開始參與項目。

Conan[22] —— 跨平臺C++依賴管理器

hunter[23] —— CMake驅動的跨平臺包管理器,適用于C/C++

[C++ Archive Network (CPPAN)](https://cppan.org/ "C++ Archive Network (CPPAN "C++ Archive Network (CPPAN)")") —— 跨平臺C++依賴管理器

qpm[24] —— Qt的包管理器

build2[25] —— 類Cargo的C++包管理器

Buckaroo[26] —— 真正去中心化的跨平臺依賴管理器,適用于C/C++等等

Vcpkg[27] —— 微軟C++庫管理器,支持Windows, Linux和MacOS

持續集成

選擇了構建工具之后,接下來需要設置持續集成環境。

在更改被推送到存儲庫時會觸發持續集成(CI)工具自動構建源代碼,可以私有部署CI工具或使用托管的CI系統。

Travis CI[28]

能很好的與C++一起工作

設計與GitHub一起使用

GitHub公共存儲庫可以免費使用

AppVeyor[29]

支持Windows、MSVC和MinGW

GitHub公共存儲庫可以免費使用

Hudson CI[30] / Jenkins CI[31]

需要Java應用服務器

支持Windows、OS X和Linux

可以通過許多插件進行擴展

TeamCity[32]

對開源項目免費

Decent CI[33]

簡單持續集成,可以將結果發布到GitHub

支持Windows、OS X和Linux

使用ChaiScript[34]

Visual Studio Online[35] (http://www.visualstudio.com/what-is-visual-studio-online-vs)

與Visual Studio Online的源代碼庫緊密集成

使用MSBuild (Visual Studio的構建引擎),可在Windows、OS X和Linux上使用

提供托管的構建代理,也允許用戶提供構建代理

可以在Microsoft Visual Studio中控制和監控

通過Microsoft Team Foundation Server進行內部安裝

GitLab[36]

使用自定義Docker鏡像,因此可用于C++

有免費的共享執行器

提供簡單的覆蓋率結果分析

如果在GitHub上有開源、公開托管的項目:

現在就把Travis Ci和AppVeyor整合起來。關于如何在基于C++ cmake的應用程序中啟用的簡單示例,請參考: https://github.com/ChaiScript/ChaiScript/blob/master/.travis.yml

啟用覆蓋工具(Codecov或Coveralls)

啟用Coverity Scan[37]

這些工具都是免費的,設置起來也相對容易。一旦把它們都設置好,就可以對項目進行持續的構建、測試、分析和報告,并且免費。

編譯器

啟用所有可用、合理的告警選項,有些告警選項只在啟用了優化的情況下才有效,或者優化級別越高,效果越好,例如GCC中的-Wnull-dereference。

應該使用盡可能多的編譯器,每個編譯器對標準的實現略有不同,支持多個編譯器將有助于確保實現最可移植、最可靠的代碼。

GCC / Clang

-Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic

-Wall -Wextra 合理、標準

-Wshadow 如果變量聲明覆蓋了父上下文中的變量,則警告用戶

-Wnon-virtual-dtor 如果帶有虛函數的類有非虛析構函數,則警告用戶,有助于捕獲難以跟蹤的內存錯誤

-Wold-style-cast 對C風格的類型轉換發出警告

-Wcast-align 警告有潛在性能問題的強制類型轉換

-Wunused 警告任何未使用的東西

-Woverloaded-virtual 如果重載(而不是覆蓋)虛函數,則發出警告

-Wpedantic 如果使用了非標準的C++則發出警告(所有版本的GCC, Clang >= 3.2)

-Wconversion 對可能丟失數據的類型轉換發出警告

-Wsign-conversion 對影響到符號的類型轉換發出警告(Clang所有版本,GCC >= 4.3)

-Wmisleading-indentation 如果代碼中有縮進,但沒有對應的代碼塊,則發出警告(僅在GCC >= 6.0中)

-Wduplicated-cond 如果if/else分支有重復條件,則發出警告(僅在GCC >= 6.0中)

-Wduplicated-branches 如果if/else分支有重復的代碼,則發出警告(僅在GCC >= 7.0中)

-Wlogical-op 在可能需要按位操作的地方使用邏輯操作時發出警告(僅在GCC中)

-Wnull-dereference 如果檢測到空解引用將發出警告(僅在GCC >= 6.0中)

-Wuseless-cast 如果執行強制轉換到相同的類型,則會發出警告(僅在GCC >= 4.8中)

-Wdouble-promotion 如果float隱式提升為double則發出警告(GCC >= 4.6, Clang >= 3.8)

-Wformat=2 對輸出格式化函數(即printf)的安全問題發出警告

-Wlifetime 顯示對象生命周期問題(目前只有Clang的特殊分支)

考慮使用-Weverything,并且只在需要的情況下禁用少數警告。

-Weffc++警告模式可能太吵了,但如果對項目適用,也可以使用。

MSVC

/permissive- —— 執行標準一致性[38]

/W4 /w14640 —— 使用并考慮以下內容(參見下面的描述)

/W4 一切合理的警告

/w14242 'identifier': 從'type1'到'type1'的轉換,可能丟失數據

/w14254 'operator': 從“type1:field_bits”到“type2:field_bits”的轉換,可能丟失數據

/w14263 'function': 成員函數不重寫任何基類虛成員函數

/w14265 'classname': 類有虛函數,但析構函數不是該類的虛實例,可能無法正確析構

/w14287 'operator': 無符號/負常數不匹配

/we4289 nonstandard extension used: 'variable': 在for循環中聲明的循環控制變量在for循環作用域之外使用

/w14296 'operator': 表達式總是'布爾值(boolean_value)'

/w14311 'variable': 指針從'type1'轉換到'type2'時被截斷

/w14545 逗號前的表達式計算的是缺少參數列表的函數

/w14546 逗號前的函數調用缺少參數列表

/w14547 'operator': 逗號前的運算符無效,預期運算符有副作用

/w14549 'operator': 逗號前的運算符無效,想要“運算符”嗎?

/w14555 表達式沒有效果,表達式預期帶有副作用

/w14619 pragma warning: 沒有警告號碼

/w14640 在線程不安全的靜態成員初始化時啟用警告

/w14826 從'type1'到'type_2'的轉換會擴展符號,可能會導致意外的運行時行為

/w14905 寬字符串字面量轉換為'LPSTR'

/w14906 字符串字面量轉換為'LPWSTR'

/w14928 非法的拷貝初始化,已隱式應用多個用戶定義轉換

不建議

/Wall 會對標準庫中包含的文件發出警告,有太多額外的警告,因此沒什么用。

通用

一開始就設置非常嚴格的警告,在項目開始后試圖提高警告級別可能會很痛苦。

考慮使用將警告視為錯誤的設置,例如MSVC中的/Wx,以及GCC/Clang中的-Werror。

基于LLVM的工具

基于LLVM的工具與能夠輸出編譯命令數據庫的構建系統(例如cmake)配合得最好,例如:

$cmake-DCMAKE_EXPORT_COMPILE_COMMANDS=ON.

如果沒用這樣的構建系統,可以考慮Build EAR[39],它可以與現有構建系統掛鉤,并生成編譯命令數據庫。

CMake現在也提供了在正常編譯期間調用```clang-tidy```[40]的內置支持。

include-what-you-use[41], 示例結果[42]

clang-modernize[43], 示例結果[44]

clang-check[45]

clang-tidy[46]

靜態檢查

最好的選擇是將靜態分析器作為自動化構建系統的一部分運行,cppcheck和clang可以滿足免費選項的要求。

Coverity Scan

Coverity[47]提供免費(開源)靜態分析工具包,可以用于與Travis CI[48]和AppVeyor[49]集成的每個提交。

PVS-Studio

PVS-Studio[50]是用于檢測用C、C++和C#編寫的程序源代碼中的bug的工具,對個人學術項目、開源非商業項目和個人開發者的獨立項目都是免費的,可以在Windows和Linux環境下工作。

Cppcheck

Cppcheck[51]是免費、開源的。它努力爭取零誤報,并且做得很好。因此,應該啟用所有警告: --enable=all。

備注:

為了正確工作,需要格式完整的頭文件路徑,所以在使用前不要忘記傳遞: --check-config。

查找未使用的頭文件時-j不能大于1。

如果需要檢查所有的代碼,請記住為帶有大量#ifdef的代碼添加--force。

cppclean

cppclean[52]是開源靜態分析器,專注于發現C++源代碼中導致大型代碼庫開發緩慢的問題。

CppDepend

CppDepend[53]通過分析和可視化代碼依賴關系、定義設計規則、進行影響分析以及比較不同版本的代碼,簡化了對復雜C/C++代碼庫的管理,對開源貢獻者是免費的。

Clang的靜態分析器

Clang的分析程序的默認選項適用于各個平臺,可以直接通過CMake使用[54],也可以通過基于llvm的工具[55]中的clang-check和clang-tidy調用。

此外,CodeChecker[56]可以作為clang的靜態分析前端。

clang-tidy可以通過Clang Power Tools[57]擴展輕松的和Visual Studio一起使用。

MSVC的靜態分析器

可以通過/analyze命令行選項[58]啟用,可以使用默認選項。

Flint / Flint++

Flint[59]和Flint++[60]是根據Facebook編碼標準分析C++代碼的linter。

OCLint

OCLint[61]是免費、自由、開源的靜態代碼分析工具,可以通過許多不同的方式提高C++代碼的質量。

ReSharper C++ / CLion

這兩種來自JetBrains[62]的工具都提供了一定程度的靜態分析和自動修復功能,為開源項目負責人提供了免費許可證選項。

Cevelop

基于Eclipse的Cevelop[63] IDE提供了各種靜態分析和重構/代碼修復工具。例如,可以用C++的constexprs替換宏,重構命名空間(提取/內聯using,限定名稱),并將代碼重構為C++11的統一初始化語法。Cevelop是免費的。

Qt Creator

Qt Creator可以插入clang靜態分析器。

clazy

clazy[64]是基于clang的分析Qt使用情況的工具。

IKOS

IKOS[65]是開源靜態分析器,由NASA開發。它以抽象解釋為基礎,用C++編寫,使用LLVM為C和C++提供了分析器。源代碼可以在Github[66]上找到。

運行時檢查

代碼覆蓋率分析

覆蓋率分析工具應該在測試執行時運行,以確保整個應用程序都被測到。不幸的是,覆蓋率分析需要禁用編譯器優化,這將導致測試執行時間大大延長。

Codecov[67]

與Travis CI和AppVeyor集成

對于開源項目免費

Coveralls[68]

與Travis CI和AppVeyor集成

對于開源項目免費

LCOV[69]

有很多配置項

Gcovr[70]

kcov[71]

可與codecov和coveralls集成

不需要特殊的編譯器flag,只需要debug符號,就可以輸出代碼覆蓋率報告

OpenCppCoverage[72]

Windows上的開源代碼覆蓋率工具

Valgrind

Valgrind[73]是運行時代碼分析器,可以檢測內存泄漏、競爭條件和其他相關問題,支持各種Unix平臺。

Dr Memory

和Valgrind類似。http://www.drmemory.org

GCC / Clang Sanitizers

這些工具提供了許多與Valgrind相同的特性,但內置在編譯器中,易于使用,并提供問題報告。

AddressSanitizer

MemorySanitizer

ThreadSanitizer

UndefinedBehaviorSanitizer

注意可用的sanitizer選項,包括運行時選項。https://kristerw.blogspot.com/2018/06/useful-gcc-address-sanitizer-checks-not.html

Fuzzy分析器

如果項目接受用戶定義的輸入,可以考慮運行模糊輸入測試。

這些工具都使用覆蓋率報告來尋找新的代碼執行路徑,并嘗試為代碼提供新的輸入。它們可以發現崩潰、掛起以及一些沒有被考慮到的輸入。

american fuzzy lop[74]

LibFuzzer[75]

KLEE[76] —— 可以為單獨的函數提供模糊測試

變異測試

這些工具獲取在單元測試運行期間執行的代碼,并改變執行的代碼。如果測試在有突變的情況下仍然通過,那可能意味著在測試套件中存在有缺陷的測試。

Dextool Mutate[77]

MuCPP[78]

mull[79]

CCMutator[80]

控制流保護

MSVC的[控制流保護(Control Flow Guard)](https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 "控制流保護(Control Flow Guard "控制流保護(Control Flow Guard)")")增加了高性能的運行時安全檢查。

檢查STL實現

_GLIBCXX_DEBUG與GCC的libstdc++的實現。參見Krister的博客文章[81]。

堆分析

https://epfl-vlsc.github.io/memoro —— 一個詳細的堆分析器

忽略警告

如果團隊一致認為編譯器或分析器對不正確或不可避免的錯誤發出警告,則團隊需要盡可能只在最小的范圍內禁用特定的錯誤警告。

在對一段代碼禁用該警告后,請確保重新啟用該警告,沒人希望禁用的警告被泄露到其他代碼中[82]。

測試

上面提到的CMake有一個用于執行測試的內置框架,請確保使用的任何構建系統都能夠執行內置測試。

為了進一步幫助執行測試,請考慮使用某個單元測試庫,如Google Test[83]、Catch[84]、CppUTest[85]或Boost.Test[86],以幫助組織測試。

單元測試

單元測試針對的是可以獨立測試的小代碼塊和獨立功能。

集成測試

對于提交的每個特性或bug修復,都應該啟用測試。參見上文介紹的代碼覆蓋率分析。這些測試比單元測試級別更高,但仍然應該被限制在單個特性的范圍內。

逆向測試

不要忘記確保測試代碼中的錯誤處理,并且確保其能夠正常工作。如果目標是100%的代碼覆蓋率,很明顯這些錯誤場景也需要被覆蓋的。

調試

uftrace

uftrace[87]可以用來生成程序執行的函數調用圖。

rr

rr[88]是一個免費、開源的反向調試器,支持C++。

其他工具

Lizard

Lizard[89]提供了針對C++代碼庫運行復雜性分析的非常簡單的接口。

Metrix++

Metrix++[90]可以識別并報告代碼中最復雜的部分,從而幫助我們減少復雜代碼,幫助編譯器更好的理解和優化代碼。

ABI Compliance Checker

ABI Compliance Checker[91] (ACC)可以分析兩個庫版本,并生成關于API和C++ ABI變化的詳細兼容性報告,可以幫助庫開發人員發現無意的破壞性更改,以確保向后兼容性。

CNCC

Customizable Naming Convention Checker[92](可自定義的命名約定檢查器)可以報告代碼中不遵循特定命名約定的標識符。

ClangFormat

ClangFormat[93]可以自動檢查并糾正代碼格式,以匹配組織約定。可以參考關于clang-format的系列文章[94]。

SourceMeter

SourceMeter[95]提供了免費版本,可以為代碼提供許多不同的度量,也可以調用cppcheck。

Bloaty McBloatface

Bloaty McBloatface[96]是用于類unix平臺的二進制大小分析器。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4469

    瀏覽量

    86895
  • C++
    C++
    +關注

    關注

    22

    文章

    2116

    瀏覽量

    74567
  • 代碼
    +關注

    關注

    30

    文章

    4880

    瀏覽量

    69993

原文標題:C++最佳實踐 | 1. 工具

文章出處:【微信號:C語言與CPP編程,微信公眾號:C語言與CPP編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    何為高質量代碼?如何寫出高質量代碼

    懂得“數據結構與算法” 寫出高效的代碼,懂得“設計模式”寫出高質量代碼
    發表于 08-02 09:44 ?1000次閱讀
    何為高<b class='flag-5'>質量</b>的<b class='flag-5'>代碼</b>?如何寫出高<b class='flag-5'>質量</b><b class='flag-5'>代碼</b>?

    SMT來料質檢:確保電子生產質量的關鍵

    ,保障公司產品的整體質量水平。 二、電子元器件的檢查 電子元件來料檢查是確保產品質量和生產穩定性不可或缺的步驟,旨在早期識別并解決原材料問題,以維持生產的順暢和產品的可靠性。檢查流程包括以下幾個
    發表于 01-07 16:16

    如何提高嵌入式代碼質量

    嵌入式代碼質量是至關重要的。本文將探討如何通過有效的開發方法和工具來提高嵌入式代碼質量,以確保系統的可靠性和可維護性。 理解嵌入式系
    發表于 01-15 10:48

    淺談影響阻燃輸送帶整體帶芯質量的因素

    分析了骨架材料、捻線質量、編織結構等幾個影響整體帶芯質量的因素,介紹了整體帶芯質量的途徑和方法。
    發表于 02-04 13:39 ?12次下載

    質量革新”方針確保以客戶為本的質量保證

    質量革新”方針確保以客戶為本的質量保證 質量是產品的生命!而對于與消費者人身安全息息相關的汽車電子應用,產品的質量就更加關鍵。村田制作所
    發表于 02-08 16:12 ?720次閱讀

    Softcopy ruler整體圖像質量視覺評測新方法

    利用軟件工具定量分析數字成像系統的性能可以優化整體圖像質量,故這種方法可以把不同屬性的測量結果結合起來,最終預測出整體質量
    發表于 02-18 10:14 ?1354次閱讀

    如何才能度量JavaScript的代碼質量

    為了讓計算精度上升到最高,客觀質量分析以程序化的方式對代碼進行分析。這項任務可以使用編程工具完成,這些工具能夠在多種情況下評估代碼,根據各項指標得到最終的質量得分。本節介紹了靜態
    發表于 08-27 17:29 ?0次下載
    如何才能度量JavaScript的<b class='flag-5'>代碼</b><b class='flag-5'>質量</b>

    微軟是如何確保代碼質量的呢?

    微軟代碼評審是一種被廣泛采用的工程實踐。成千上萬的工程師認為這是一個偉大的最佳實踐。大多數高績效團隊花費大量時間進行代碼評審。
    的頭像 發表于 05-29 14:08 ?3124次閱讀
    微軟是如何<b class='flag-5'>確保</b><b class='flag-5'>代碼</b><b class='flag-5'>質量</b>的呢?

    測試是確保代碼正確的唯一方法

      衡量整個測試過程的有效性對于開發高保證軟件至關重要。了解需要加強測試的地方以及測試過程中存在的差距對于改進代碼整體過程和質量至關重要,并且隨著工具越來越專注于應用程序領域,這種需求也會增加。
    的頭像 發表于 06-19 10:45 ?1071次閱讀
    測試是<b class='flag-5'>確保</b><b class='flag-5'>代碼</b>正確的唯一方法

    測試是確保代碼正確的唯一方法

      衡量整個測試過程的有效性對于開發高保證軟件至關重要。了解需要加強測試的地方以及測試過程中存在的差距對于改進代碼整體過程和質量至關重要,并且隨著工具越來越專注于應用程序領域,這種需求也會增加。
    的頭像 發表于 07-09 07:19 ?804次閱讀
    測試是<b class='flag-5'>確保</b><b class='flag-5'>代碼</b>正確的唯一方法

    靜態分析:對代碼質量至關重要

      讓我們從顯而易見的事情開始:靜態分析本身并不是靈丹妙藥。它不能保證復雜的軍事嵌入式應用程序中的高代碼質量、安全性或安全性。靜態分析也不能確保您的應用程序滿足為程序定義的功能要求。
    的頭像 發表于 11-01 09:30 ?681次閱讀

    幾種檢查代碼質量的利器介紹

    工欲善其事,必先利其器,因此,這篇文章給大家介紹幾種檢查代碼質量的利器,Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs
    的頭像 發表于 11-02 11:04 ?1481次閱讀

    靜態分析:對代碼質量至關重要

      讓我們從顯而易見的事情開始:靜態分析本身并不是靈丹妙藥。它不能保證復雜的軍事嵌入式應用程序中的高代碼質量、安全性或安全性。靜態分析也不能確保您的應用程序滿足為程序定義的功能要求。
    的頭像 發表于 11-08 14:10 ?744次閱讀

    探究Harmony底座OpenHarmony的代碼質量改進

    探究Harmony底座OpenHarmony的代碼質量改進
    的頭像 發表于 04-03 15:23 ?1016次閱讀
    探究Harmony底座OpenHarmony的<b class='flag-5'>代碼</b><b class='flag-5'>質量</b>改進

    DevOps中的質量門工作原理,以及靜態代碼分析Klocwork和Perforce Helix QAC在質量門中的實踐應用

    質量門”正如其名:它們在軟件開發生命周期(SDLC)的各個階段充當質量里程碑(或 "門檻"),防止不良代碼通過,從而確保交付高質量的軟件。
    的頭像 發表于 07-29 15:12 ?700次閱讀
    主站蜘蛛池模板: 操人网站 | 人操人碰 | 欧美就是色 | 亚洲国产成人最新精品资源 | 四虎国产永久在线精品免费观看 | 国产美女特级嫩嫩嫩bbb | 精品三级视频 | 亚洲成人99 | 亚州一级 | 免费网站色| 久久免费看视频 | 日本高清午夜色wwwσ | 男女交性视频免费视频 | 国产主播在线播放 | 日本免费不卡视频 | 五月婷婷丁香久久 | 最近新韩国hd视频 | 亚洲免费在线观看 | 四虎最新网站 | 91久操 | 操美女大逼逼 | 人人看人人玩 | 午夜一级毛片不卡 | 天天操综合视频 | 2021色噜噜狠狠综曰曰曰 | 中国一级特黄高清免费的大片 | 免费高清在线观看a网站 | 久久综合九色综合欧洲 | 亚洲 欧美 综合 | 特黄特级高清免费视频毛片 | 一级特黄aaa大片在线观看视频 | 奇米四色7777 | 国产一区二区精品 | 黄网站在线播放 | 黄网站色| 天堂男人网 | 5252色欧美在线激情 | 日日爱网站 | 成人中文在线 | 手机看片神马午夜 | 在线精品国产第一页 |