国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 后端開(kāi)發(fā) php教程 與Jenkins分析PHP項(xiàng)目

與Jenkins分析PHP項(xiàng)目

Feb 19, 2025 am 11:41 AM

Jenkins:PHP項(xiàng)目的持續(xù)集成與交付利器

Jenkins,這款開(kāi)源自動(dòng)化服務(wù)器,在PHP項(xiàng)目的持續(xù)集成和持續(xù)交付中扮演著關(guān)鍵角色,它能夠?qū)崟r(shí)檢測(cè)和解決bug,并持續(xù)反饋代碼質(zhì)量改進(jìn)建議。

Jenkins與PHP工具集成的強(qiáng)大功能

Jenkins與眾多PHP項(xiàng)目工具兼容,包括PHP CodeSniffer、PHP MD、PHP CPD、PHP Depend、PHPLOC、PHPUnit和PHPDox等,每個(gè)工具都提供獨(dú)特的代碼分析見(jiàn)解和指標(biāo)。Jenkins的優(yōu)勢(shì)在于它能夠生成圖表和概覽,比命令行檢索更有效地呈現(xiàn)問(wèn)題,從而更輕松地識(shí)別和解決代碼中的問(wèn)題。

除了已設(shè)置的工具外,Jenkins還會(huì)收集其他信息,例如PHP CodeSniffer、PHP MD和PHP CPD違規(guī)情況的概述,以及顯示每次構(gòu)建之間所有提交的“更改”概述。

Jenkins結(jié)果解讀:項(xiàng)目視圖和構(gòu)建視圖

Jenkins的結(jié)果來(lái)自不同的工具,并將放置在Jenkins GUI的不同位置。我們將瀏覽兩個(gè)不同的頁(yè)面。首先是項(xiàng)目視圖頁(yè)面,其頂部顯示項(xiàng)目名稱。在此頁(yè)面上,您可以獲得項(xiàng)目的總體概述,并可以輕松比較多個(gè)構(gòu)建。您可以通過(guò)從默認(rèn)概述頁(yè)面單擊項(xiàng)目來(lái)訪問(wèn)此頁(yè)面。除了項(xiàng)目視圖頁(yè)面外,我們還有構(gòu)建視圖頁(yè)面。您可以通過(guò)單擊側(cè)邊欄中的構(gòu)建編號(hào)來(lái)導(dǎo)航到此頁(yè)面。在這里,您可以查看有關(guān)此特定構(gòu)建的各種詳細(xì)信息。

本文將逐步介紹每個(gè)工具及其報(bào)告內(nèi)容。最后,我們還將查看Jenkins為我們收集的一些額外詳細(xì)信息。由于我們多次構(gòu)建相同的項(xiàng)目,因此我們的圖表中將顯示直線。在實(shí)際項(xiàng)目中,圖表會(huì)波動(dòng)。

PHP CodeSniffer

CodeSniffer是一個(gè)工具,用于檢查您的代碼是否符合通用規(guī)則集或您自己的自定義規(guī)則集。在本例中,我們配置了希望根據(jù)PSR2測(cè)試我們的工具。我們?cè)赽uild.xml文件中定義了這一點(diǎn)。

<arg value="--standard=PSR2" />

在概述頁(yè)面上,您將看到一個(gè)名為“Checkstyle Trend”的圖表。此圖表表示每次構(gòu)建中PSR2問(wèn)題的數(shù)量。在我們的代碼中,我們幾乎完全符合PSR2標(biāo)準(zhǔn),因此我們的圖表只顯示一個(gè)問(wèn)題。

Analyzing a PHP Project with Jenkins

頁(yè)面下方還有一個(gè)圖表,它結(jié)合了來(lái)自3個(gè)工具的數(shù)據(jù)。CodeSniffer是其中之一。

要查看問(wèn)題所在位置,您可以單擊最新構(gòu)建的左側(cè)菜單中的“checkstyle warnings”,或者單擊特定構(gòu)建,然后單擊該特定構(gòu)建的“checkstyle warnings”。

Analyzing a PHP Project with Jenkins

在此頁(yè)面上,您可以清楚地看到問(wèn)題的描述。請(qǐng)注意,您可以使用多個(gè)過(guò)濾器。在頂部欄中,您可以清楚地看到有多少問(wèn)題是新的,有多少問(wèn)題已修復(fù)。您可以單擊數(shù)字以清楚地查看更改。在摘要中,您可以快速查看按優(yōu)先級(jí)分類的問(wèn)題。

PHP MD

MD代表Mess Detector(混亂檢測(cè)器)。此工具嘗試指示代碼中的幾個(gè)問(wèn)題。這可能是潛在的錯(cuò)誤、未使用的代碼或復(fù)雜的方法。有關(guān)可用檢查的完整列表,您可以查看此頁(yè)面。請(qǐng)注意,我們并非檢查每個(gè)規(guī)則。您可以在phpmd.xml文件中定義要檢查的規(guī)則。

與PHP CodeSniffer一樣,我們?cè)陧?xiàng)目視圖頁(yè)面上看到一個(gè)圖表,該圖表指示我們的混亂檢測(cè)如何隨著時(shí)間的推移而進(jìn)展。

Analyzing a PHP Project with Jenkins

要找出問(wèn)題所在,您可以單擊左側(cè)菜單中的“pmd warnings”以轉(zhuǎn)到最新構(gòu)建。如果您希望查看不同的構(gòu)建,請(qǐng)單擊一個(gè)構(gòu)建,然后選擇“pmd warnings”。您將到達(dá)一個(gè)類似于PHP CodeSniffer頁(yè)面的頁(yè)面。

Analyzing a PHP Project with Jenkins

在頂部,您可以再次看到有多少問(wèn)題是新的,有多少問(wèn)題已修復(fù)。除此之外,您還可以看到每個(gè)問(wèn)題的優(yōu)先級(jí)。

在詳細(xì)信息頁(yè)面中,您可以獲得有關(guān)在何處找到問(wèn)題的更多信息。有許多選項(xiàng)卡可用于以不同的方式提供相同的信息。例如,您可以單擊“types”以了解有關(guān)每種類型的更多信息。

Analyzing a PHP Project with Jenkins

如您所見(jiàn),“UnusedFormalParameter”是我們最大的問(wèn)題。通過(guò)單擊它,我們將再次看到哪些文件有未使用的參數(shù)。

PHP CPD

CPD代表Copy Paste Detector(復(fù)制粘貼檢測(cè)器)。此工具將分析所有代碼并查找多個(gè)重復(fù)行。如果您有很多重復(fù)行,則可能意味著您應(yīng)該重寫(xiě)某些部分,以便在多個(gè)類之間共享邏輯。在項(xiàng)目視圖頁(yè)面上,我們將再次看到所有構(gòu)建中的總體進(jìn)度。

Analyzing a PHP Project with Jenkins

在左側(cè)菜單中,我們可以單擊“duplicate code”以獲取所發(fā)現(xiàn)問(wèn)題的概述。與之前一樣,單擊構(gòu)建以獲取有關(guān)該構(gòu)建的更多信息。您會(huì)注意到概述看起來(lái)與之前的頁(yè)面類似。讓我們單擊“details”選項(xiàng)卡以獲取更多信息。

Analyzing a PHP Project with Jenkins

如您所見(jiàn),CompanyFilter類中有58行也位于UserFilter和TimeCategoryFilter類中。根據(jù)此數(shù)據(jù),您可以決定需要某種處理所有3個(gè)類的大部分內(nèi)容的BaseFilter或?qū)崿F(xiàn)服務(wù)。解決方案取決于您的情況,PHP CPD 只告訴您它在哪里發(fā)現(xiàn)了問(wèn)題。

PHP Depend

PHP Depend可能是最難理解的指標(biāo)。PHP Depend對(duì)您的代碼庫(kù)執(zhí)行靜態(tài)代碼分析。它生成2個(gè)圖像和一個(gè)概述頁(yè)面。您可能注意到,在項(xiàng)目視圖頁(yè)面的頂部,有一些HTML應(yīng)該顯示圖像。

圖像未顯示的事實(shí)意味著您必須切換Jenkins配置中的開(kāi)關(guān)。轉(zhuǎn)到“manage jenkins”,然后轉(zhuǎn)到“Configure Global Security”。有一個(gè)選擇框,您可以使用它來(lái)配置“markup formatter”。將其設(shè)置為“Safe HTML”并保存您的設(shè)置。如果您現(xiàn)在返回到項(xiàng)目視圖頁(yè)面,您會(huì)注意到HTML已轉(zhuǎn)換為兩個(gè)圖像。

Analyzing a PHP Project with Jenkins

我建議您閱讀此工具的官方文檔以充分理解這兩個(gè)圖表。有關(guān)金字塔的更多信息,您可以查看此鏈接。有關(guān)抽象不穩(wěn)定性圖表的更多信息,您可以查看此鏈接。

您可以通過(guò)單擊特定構(gòu)建,然后在左側(cè)菜單中選擇“JDepend”來(lái)獲取更多詳細(xì)信息。您將獲得如下概述。

Analyzing a PHP Project with Jenkins

此頁(yè)面的解釋也相當(dāng)龐大而復(fù)雜,因此我將您引導(dǎo)至官方文檔,其中對(duì)所有內(nèi)容進(jìn)行了解釋。

PHPLOC

PHPLOC是一個(gè)快速測(cè)量項(xiàng)目大小的工具。它向您顯示代碼的總行數(shù)、靜態(tài)方法的總數(shù)等。在左側(cè)菜單中,您可以單擊“plots”以獲取此工具的結(jié)果。您可以使用11個(gè)圖表來(lái)查找此信息。下面,您將看到一個(gè)圖表的屏幕截圖,該圖表指示代碼和注釋的總行數(shù)以及方法、類、特性和函數(shù)的總數(shù)。

Analyzing a PHP Project with Jenkins

Analyzing a PHP Project with Jenkins

PHPUnit

Jenkins 中的大量統(tǒng)計(jì)數(shù)據(jù)是由 PHPUnit 生成的。僅在概述中,您將看到由 PHPUnit 數(shù)據(jù)生成的 3 個(gè)圖表。

Analyzing a PHP Project with Jenkins

第一個(gè)圖表指示有多少代碼被測(cè)試覆蓋。在本例中,為 71.1%。為了生成此覆蓋率,后臺(tái)使用了 xdebug。

第二個(gè)圖表指示您的 CRAP 水平。CRAP 代表更改風(fēng)險(xiǎn)分析和預(yù)測(cè)。通過(guò)檢查代碼的復(fù)雜性以及對(duì)代碼執(zhí)行的測(cè)試量來(lái)計(jì)算 CRAP。如果您瀏覽了 PHP MD 規(guī)則,您可能已經(jīng)注意到 PHP MD 也能夠檢查代碼的復(fù)雜性,但沒(méi)有考慮單元測(cè)試。請(qǐng)閱讀此處以了解 PHP MD 如何計(jì)算您的復(fù)雜性。

最后的圖表顯示了有多少測(cè)試成功以及有多少測(cè)試失敗。在本例中,它們都成功了。

在我們的左側(cè)欄菜單中,我們有兩個(gè)由 PHPUnit 生成的項(xiàng)目。第一個(gè)是 Crap。在此頁(yè)面上,您可以看到幾個(gè)圖表的概述,這些圖表指示您當(dāng)前的 CRAP 水平有多高。在底部,您實(shí)際上會(huì)看到哪些方法被標(biāo)記為 CRAP。您會(huì)注意到一列指示覆蓋率和復(fù)雜性。

第二個(gè)菜單項(xiàng)是“clover HTML report”。在此頁(yè)面中,您可以按目錄概述有多少內(nèi)容被您的單元測(cè)試覆蓋。

Analyzing a PHP Project with Jenkins

您可以單擊目錄以深入了解您的源代碼。如果您到達(dá)一個(gè)文件,您可以打開(kāi)該文件并逐行查看有多少內(nèi)容被覆蓋。使用顏色,它指示哪些部分正在測(cè)試,哪些部分沒(méi)有測(cè)試。將鼠標(biāo)懸停在一行上會(huì)指示您的單元測(cè)試已調(diào)用該行多少次。

Analyzing a PHP Project with Jenkins

在本例中,我們可以清楚地看到 if 語(yǔ)句中的部分沒(méi)有被單元測(cè)試調(diào)用。在本例中這是正確的。此方法只執(zhí)行 GET 請(qǐng)求,而不執(zhí)行 POST 請(qǐng)求。如果我們?cè)趩卧獪y(cè)試中實(shí)現(xiàn) POST 請(qǐng)求,則此 if 語(yǔ)句將被標(biāo)記為綠色。這樣,您可以輕松發(fā)現(xiàn)單元測(cè)試中任何缺失的部分。

PHPDox

有很多工具可以根據(jù)您的代碼和注釋生成文檔。PHPDox 只是另一個(gè)可以為您執(zhí)行此任務(wù)的工具。在左側(cè)菜單中,您可以單擊“API Documentation”以轉(zhuǎn)到您的文檔。PHPDox 的好處是它還包括所有其他工具的結(jié)果。

Analyzing a PHP Project with Jenkins

通過(guò)頂部的導(dǎo)航,您可以獲得所有類的概述,但您也可以深入研究一個(gè)類并獲得所有方法和描述的概述。您還可以查看文件的歷史記錄和源代碼。

Analyzing a PHP Project with Jenkins

其他頁(yè)面

除了我們?cè)谥暗奈恼轮性O(shè)置的工具外,Jenkins還會(huì)為您收集其他信息。我們安裝的違規(guī)插件會(huì)創(chuàng)建一個(gè)額外的頁(yè)面,該頁(yè)面顯示PHP CodeSniffer、PHP MD和PHP CPD的概述。

您還可以單擊特定構(gòu)建,并在左側(cè)菜單中找到名為“changes”的菜單項(xiàng)。如果您轉(zhuǎn)到此頁(yè)面,您將看到在先前構(gòu)建和此構(gòu)建之間進(jìn)行的所有提交的概述。如果未進(jìn)行任何更改,則頁(yè)面將為空白。

Analyzing a PHP Project with Jenkins

結(jié)論

在本文中,我們仔細(xì)研究了從所有工具獲得的指標(biāo)類型。您檢索到的所有信息也可以在命令行上檢索。Jenkins 的優(yōu)勢(shì)在于您可以創(chuàng)建圖表和概述,這些圖表和概述可以更好地表示問(wèn)題。

在最后一部分中,我們將更換一些工具并添加一些額外的指標(biāo)。我們還將研究如何分析我們的 CSS、JavaScript 和 HTML 代碼。

(此處省略FAQ部分,因?yàn)镕AQ部分內(nèi)容與文章主體內(nèi)容重復(fù)性較高,且篇幅較長(zhǎng),為了避免重復(fù),此處予以省略。)

以上是與Jenkins分析PHP項(xiàng)目的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? 如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在于驗(yàn)證文件類型、重命名文件并限制權(quán)限。1.使用finfo_file()檢查真實(shí)MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機(jī)文件名,存儲(chǔ)至非Web根目錄;3.通過(guò)php.ini和HTML表單限制文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強(qiáng)安全性。這些步驟有效防止安全漏洞,確保文件上傳過(guò)程安全可靠。

PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在于類型檢查的嚴(yán)格程度。==在比較前會(huì)進(jìn)行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會(huì)返回true,例如5==="5"返回false。使用場(chǎng)景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時(shí)使用。

如何與PHP的NOSQL數(shù)據(jù)庫(kù)(例如MongoDB,Redis)進(jìn)行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(kù)(例如MongoDB,Redis)進(jìn)行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過(guò)特定擴(kuò)展或庫(kù)與MongoDB和Redis等NoSQL數(shù)據(jù)庫(kù)交互。首先,使用MongoDBPHP驅(qū)動(dòng)(通過(guò)PECL或Composer安裝)創(chuàng)建客戶端實(shí)例并操作數(shù)據(jù)庫(kù)及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫(kù)或phpredis擴(kuò)展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用于高性能場(chǎng)景,Predis則便于快速部署;兩者均適用于生產(chǎn)環(huán)境且文檔完善。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運(yùn)算的方法如下:1.加法用 號(hào),支持整數(shù)和浮點(diǎn)數(shù),也可用于變量,字符串?dāng)?shù)字會(huì)自動(dòng)轉(zhuǎn)換但不推薦依賴;2.減法用-號(hào),變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號(hào),適用于數(shù)字及類似字符串;4.除法用/號(hào),需避免除以零,并注意結(jié)果可能是浮點(diǎn)數(shù);5.取模用%號(hào),可用于判斷奇偶數(shù),處理負(fù)數(shù)時(shí)余數(shù)符號(hào)與被除數(shù)一致。正確使用這些運(yùn)算符的關(guān)鍵在于確保數(shù)據(jù)類型清晰并處理好邊界情況。

我如何了解最新的PHP開(kāi)發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開(kāi)發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開(kāi)發(fā)? 什么是PHP,為什么它用于Web開(kāi)發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles