本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種代碼質(zhì)量的檢測(cè)方法及裝置。
背景技術(shù):
團(tuán)隊(duì)協(xié)同開(kāi)發(fā)時(shí)通常對(duì)于每個(gè)項(xiàng)目都有至少一個(gè)代碼規(guī)范,代碼規(guī)范中包含對(duì)于代碼編寫的風(fēng)格和規(guī)則要求,可以統(tǒng)稱為對(duì)于代碼編寫的質(zhì)量要求。同一個(gè)項(xiàng)目組的所有開(kāi)發(fā)人員依照該項(xiàng)目的代碼規(guī)范,編寫出的代碼質(zhì)量需要符合該代碼規(guī)范的質(zhì)量要求。比如,某一項(xiàng)目的代碼規(guī)范對(duì)換行的要求以及程序效率的要求(超長(zhǎng)表達(dá)式要換行、盡量減少循環(huán)嵌套層次)等等。但是由于每個(gè)人都有固定的編寫習(xí)慣,并且可能出現(xiàn)一個(gè)開(kāi)發(fā)人員身兼數(shù)職的情況,所以在不經(jīng)意間就會(huì)出現(xiàn)編寫出的代碼質(zhì)量不符合所屬項(xiàng)目代碼規(guī)范的要求。如果一個(gè)開(kāi)發(fā)人員編寫的代碼質(zhì)量不符合所屬項(xiàng)目的代碼規(guī)范要求時(shí),在與該項(xiàng)目其它開(kāi)發(fā)人員編寫出的符合該項(xiàng)目代碼規(guī)范要求的代碼進(jìn)行合并時(shí),就可能導(dǎo)致程序不能成功運(yùn)行。
現(xiàn)有技術(shù),會(huì)為開(kāi)發(fā)人員提供代碼質(zhì)量的檢測(cè)工具,以便開(kāi)發(fā)人員在編寫代碼時(shí),檢測(cè)自己編寫的代碼質(zhì)量是否符合所屬項(xiàng)目的代碼規(guī)范要求。但可能出現(xiàn)同一項(xiàng)目在不同開(kāi)發(fā)階段的代碼規(guī)范不同,從而導(dǎo)致檢測(cè)工具的變化,如果出現(xiàn)開(kāi)發(fā)人員的沒(méi)有及時(shí)更新自己的檢測(cè)工具(比如,項(xiàng)目組長(zhǎng)更新并共享了檢測(cè)工具,但項(xiàng)目組員沒(méi)有及時(shí)更新),還是按照歷史版本的代碼規(guī)范進(jìn)行編寫,在與該項(xiàng)目的其它開(kāi)發(fā)人員按照最新版本的代碼規(guī)范編寫出的代碼進(jìn)行合并時(shí),就會(huì)導(dǎo)致程序不能成功運(yùn)行。此外,如果一個(gè)開(kāi)發(fā)人員如果身兼數(shù)職,會(huì)有不同項(xiàng)目的多個(gè)檢測(cè)工具,如果因?yàn)槭韬觯诓煌?xiàng)目之間,用錯(cuò)了檢測(cè)工具,也會(huì)導(dǎo)致最終的程序不能成功運(yùn)行。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種代碼質(zhì)量的檢測(cè)方法,用于解決按照現(xiàn)有的代碼質(zhì)量檢測(cè)方式,可能導(dǎo)致檢測(cè)通過(guò)的代碼的質(zhì)量不滿足代碼規(guī)范要求的問(wèn)題。
本申請(qǐng)實(shí)施例提供一種代碼質(zhì)量的檢測(cè)裝置,用于解決按照現(xiàn)有的代碼質(zhì)量檢測(cè)方式,可能導(dǎo)致檢測(cè)通過(guò)的代碼的質(zhì)量不滿足代碼規(guī)范要求的問(wèn)題。
本申請(qǐng)實(shí)施例提供一種代碼的發(fā)送方法。
本申請(qǐng)實(shí)施例提供一種代碼的發(fā)送裝置。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種代碼質(zhì)量的檢測(cè)方法,包括:獲取終端發(fā)送的代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息;根據(jù)表示與所述代碼匹配的代碼規(guī)范的信息,獲取與所述代碼匹配的代碼規(guī)范;根據(jù)獲取的代碼規(guī)范檢測(cè)代碼的質(zhì)量。
一種代碼質(zhì)量的檢測(cè)裝置,包括:獲取代碼單元,用于獲取終端發(fā)送的代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息;獲取規(guī)范單元,用于根據(jù)表示與所述代碼匹配的代碼規(guī)范的信息,獲取與所述代碼匹配的代碼規(guī)范;檢測(cè)代碼單元,用于根據(jù)獲取的代碼規(guī)范檢測(cè)代碼的質(zhì)量。
一種代碼的發(fā)送方法,包括:獲取代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息;將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備。
一種代碼的發(fā)送裝置,包括:獲取單元,用于獲取代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息;發(fā)送單元,用于將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備。
本申請(qǐng)實(shí)施例采用的上述至少一個(gè)技術(shù)方案能夠達(dá)到以下有益效果:
由于可以根據(jù)獲取到的代碼和表示與代碼匹配的代碼規(guī)范的信息,獲取到與代碼匹配的代碼規(guī)范,并實(shí)現(xiàn)代碼質(zhì)量的自動(dòng)檢測(cè),從而避免了開(kāi)發(fā)人員自 己利用檢測(cè)工具檢測(cè)代碼質(zhì)量時(shí),由于沒(méi)有及時(shí)更新檢測(cè)工具,導(dǎo)致檢測(cè)出的代碼質(zhì)量不符合最新的代碼規(guī)范要求的問(wèn)題。此外,還能避免開(kāi)發(fā)人員身兼數(shù)職時(shí),由于疏忽造成檢測(cè)工具混用帶來(lái)的問(wèn)題。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為本申請(qǐng)實(shí)施例1提供的一種代碼質(zhì)量的檢測(cè)方法的具體實(shí)現(xiàn)流程示意圖;
圖2為本申請(qǐng)實(shí)施例2提供的一種代碼質(zhì)量的檢測(cè)裝置的具體結(jié)構(gòu)示意圖;
圖3為本申請(qǐng)實(shí)施例3提供的一種代碼的發(fā)送方法的具體實(shí)現(xiàn)流程示意圖;
圖4為本申請(qǐng)實(shí)施例4提供的一種代碼的發(fā)送裝置的具體結(jié)構(gòu)示意圖;
圖5為本申請(qǐng)實(shí)施例5提供的一種應(yīng)用于分布式版本控制系統(tǒng)中代碼質(zhì)量的檢測(cè)方法流程示意圖。
具體實(shí)施方式
為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)具體實(shí)施例及相應(yīng)的附圖對(duì)本申請(qǐng)技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
以下結(jié)合附圖,詳細(xì)說(shuō)明本申請(qǐng)各實(shí)施例提供的技術(shù)方案。
實(shí)施例1
實(shí)施例1提供了一種代碼質(zhì)量的檢測(cè)方法,用于解決按照現(xiàn)有的代碼質(zhì)量檢測(cè)方式,可能導(dǎo)致檢測(cè)通過(guò)的代碼的質(zhì)量不滿足代碼規(guī)范要求的問(wèn)題。假設(shè) 執(zhí)行主體為檢測(cè)設(shè)備,該方法的具體流程示意圖如圖1所示,包括下述步驟:
步驟11,獲取終端發(fā)送的代碼和代碼信息。
針對(duì)步驟11而言,代碼信息包含表示與代碼匹配的代碼規(guī)范的信息。每個(gè)項(xiàng)目,都有至少一個(gè)指定的代碼規(guī)范,比如,項(xiàng)目A下的所有代碼,都需要按照代碼規(guī)范A的要求來(lái)編寫。與代碼匹配的代碼規(guī)范的信息可以是代碼所屬項(xiàng)目的標(biāo)識(shí),通過(guò)該信息,可以找到與代碼匹配的代碼規(guī)范,最終完成對(duì)代碼質(zhì)量的檢測(cè)。比如,某段代碼的代碼信息中,包含的表示與代碼匹配的代碼規(guī)范的信息是project-A,通過(guò)該信息,可以找到用于檢測(cè)該段代碼質(zhì)量的代碼規(guī)范A,最終可以利用代碼規(guī)范A檢測(cè)這段代碼的質(zhì)量。
檢測(cè)設(shè)備獲取終端發(fā)送的代碼和代碼信息,可以是獲取終端直接發(fā)送的代碼和代碼信息,也可以是獲取終端發(fā)送到指定位置的代碼和代碼信息。終端可以是開(kāi)發(fā)人員所用的個(gè)人計(jì)算機(jī)(personal computer,PC),指定位置可以是用于存儲(chǔ)和管理代碼的服務(wù)器。比如,可以獲取開(kāi)發(fā)人員通過(guò)PC發(fā)送過(guò)來(lái)的代碼和代碼信息,也可以獲取開(kāi)發(fā)人員發(fā)送到指定服務(wù)器中的代碼和代碼信息。
在一種實(shí)施方式中,表示與代碼匹配的代碼規(guī)范的信息,也可以包括指定的檢測(cè)要求。比如,該要求可以是“當(dāng)代碼規(guī)范發(fā)生變更以后,需要對(duì)所有代碼進(jìn)行檢測(cè)”;以及“如果代碼規(guī)范未發(fā)生變更,則只需要對(duì)變化的代碼進(jìn)行檢測(cè)”。
在一種實(shí)施方式中,可以將代碼信息存儲(chǔ)為一個(gè)配置文件,以便檢測(cè)工具獲取配置文件中與代碼匹配的代碼規(guī)范的信息,以及對(duì)代碼的檢測(cè)要求。比如,當(dāng)代碼規(guī)范發(fā)生變更以后,可以在配置文件中添加一個(gè)全部檢測(cè)的指令,以便檢測(cè)工具對(duì)所有的代碼文件重新檢測(cè);或在配置文件中添加代碼所屬項(xiàng)目的標(biāo)識(shí),以便檢測(cè)工具能夠根據(jù)該標(biāo)識(shí),找到與代碼匹配的代碼規(guī)范。
在分布式版本控制系統(tǒng)(如git)中,開(kāi)發(fā)人員可以從用于存儲(chǔ)和管理代碼的公共服務(wù)器(簡(jiǎn)稱公共服務(wù)器)上克隆公共服務(wù)器代碼倉(cāng)庫(kù)(用于存放指定項(xiàng)目代碼的位置,git repository)到本地,在本地修改代碼,并提交修改后的 代碼到本地代碼倉(cāng)庫(kù)(local repository),然后將local repository同步到git repository中。
local repository會(huì)為每次提交的代碼文件集合添加數(shù)字簽名,該數(shù)字簽名可以是通過(guò)安全哈希算法計(jì)算出的哈希值(簡(jiǎn)稱SHA1),如果代碼文件發(fā)生改變,計(jì)算出的SHA1值一定不同。當(dāng)開(kāi)發(fā)人員將修改過(guò)的代碼文件集合提交到local repository時(shí),local repository會(huì)為該集合計(jì)算一個(gè)SHA1值,即計(jì)算該集合的SHA1值。本地修改的代碼文件集合可以稱為在后版本的代碼文件集合,修改前的代碼文件集合可以稱為在先版本的代碼文件集合。
可以為git repository添加一個(gè)監(jiān)控裝置(hook),hook可以在git repository發(fā)生變化時(shí),即開(kāi)發(fā)人員將local repository同步到git repository時(shí),獲取在先版本的代碼文件集合的SHA1值(簡(jiǎn)稱before SHA1)和在后版本的代碼文件集合的SHA1值(簡(jiǎn)稱after SHA1)??梢栽趆ook中設(shè)置一個(gè)檢測(cè)設(shè)備的地址,比如一個(gè)統(tǒng)一資源定位符(Uniform Resource Locator,URL),以便hook將before SHA1和after SHA1,發(fā)送到檢測(cè)設(shè)備中。此外,hook還可以在git repository發(fā)生變化時(shí),獲取到發(fā)生變化的git repository的名稱和地址(repository name和repository url),并發(fā)送到檢測(cè)設(shè)備中,該地址和名稱也可以是表示與代碼匹配的代碼規(guī)范的信息。比如,通過(guò)repository name,可以獲取到與該repository name中的代碼匹配的代碼規(guī)范。
由于代碼文件發(fā)生改變,所以分別為在先版本的代碼文件集合和在后版本的代碼文件集合計(jì)算出的SHA1值一定不同。檢測(cè)設(shè)備可以對(duì)before SHA1和after SHA1進(jìn)行解析、比對(duì),可以確定出在后版本的代碼文件集合中發(fā)生變化的文件,然后再去獲取發(fā)生變化的代碼文件,所以,在步驟11之前,方法還可以包括:若判斷出對(duì)項(xiàng)目的在先版本的代碼文件集合進(jìn)行過(guò)檢測(cè),則從終端發(fā)送的項(xiàng)目的在后版本的代碼文件集合中,確定相對(duì)于在先版本的代碼文件集合發(fā)生變化的代碼文件。
具體地,因?yàn)槊恳淮螜z測(cè)都會(huì)有檢測(cè)記錄,該記錄中會(huì)保留已檢測(cè)過(guò)的代 碼文件集合的SHA1值,所以可以先通過(guò)before SHA1,判斷出是否對(duì)在先版本的代碼文件集合進(jìn)行過(guò)檢測(cè),如果判斷出對(duì)在先版本的代碼文件集合進(jìn)行過(guò)檢測(cè),那么僅需要對(duì)發(fā)生變化的文件進(jìn)行檢測(cè)即可??梢酝ㄟ^(guò)before SHA1和after SHA1,確定出發(fā)生變化的代碼文件。比如,在先版本的代碼文件集合(該集合的SHA1值為before SHA1)中包含三個(gè)代碼文件(代碼文件1、代碼文件2、代碼文件3),開(kāi)發(fā)人員對(duì)代碼文件1進(jìn)行了修改,生成了代碼文件1’,并添加了新的代碼文件4,所以在后版本的代碼文件集合(該集合的SHA1值為after SHA1)中包含四個(gè)代碼文件(代碼文件1’、代碼文件2、代碼文件3、代碼文件4),則可以通過(guò)解析、比對(duì)before SHA1和after SHA1,確定出發(fā)生變化的兩個(gè)代碼文件(代碼文件1’和代碼文件4)。
在確定出發(fā)生變化的代碼文件后,就需要對(duì)發(fā)生變化的代碼文件進(jìn)行獲取,所以步驟11,獲取終端發(fā)送的代碼,可以包括:獲取終端發(fā)送的發(fā)生變化的代碼文件中的代碼。
比如,以上文提到的“確定出發(fā)生變化的兩個(gè)代碼文件(代碼文件1’和代碼文件4)”為例,獲取終端發(fā)送的發(fā)生變化的兩個(gè)代碼文件(代碼文件1’和代碼文件4)中的代碼。
需要說(shuō)明的是,由于代碼文件的變化可能是整段代碼的添加或刪除,也有可能一句代碼中添加或刪除一些字符或符號(hào)(比如,添加冒號(hào)“:”等)。如果確定出發(fā)生變化的代碼為整段代碼,那么只對(duì)該段代碼進(jìn)行檢測(cè)是有意義的,但如果僅僅確定出發(fā)生變化的代碼為添加冒號(hào)“:”,那么對(duì)該冒號(hào)“:”進(jìn)行檢測(cè)是沒(méi)有意義的,因?yàn)樵撁疤?hào)只有和代碼中前后搭配時(shí)才能發(fā)揮它的作用。所以,一般情況下,是對(duì)發(fā)生變化的代碼文件中的所有代碼做檢測(cè)。
在實(shí)際應(yīng)用中,有可能出現(xiàn)以前沒(méi)有對(duì)在先版本的代碼文件集合進(jìn)行過(guò)檢測(cè),就需要對(duì)在后版本的代碼文件集合中的所有文件進(jìn)行檢測(cè)。所以,依然以上文提到的“確定出發(fā)生變化的兩個(gè)代碼文件(代碼文件1’和代碼文件4)”為例,方法還可以包括:若判斷出對(duì)項(xiàng)目的在先版本的代碼文件集合未進(jìn)行過(guò) 檢測(cè),比如,判斷出在先版本的代碼文件集合中包含的三個(gè)代碼文件(代碼文件1、代碼文件2、代碼文件3)都沒(méi)有被檢測(cè)過(guò),則步驟11中,獲取終端發(fā)送的代碼的具體實(shí)現(xiàn)方式可以包括:獲取終端發(fā)送的項(xiàng)目的在后版本的代碼文件集合中的代碼。也就是獲取四個(gè)代碼文件(代碼文件1’、代碼文件2、代碼文件3、代碼文件4)中的代碼。
步驟12,根據(jù)表示與代碼匹配的代碼規(guī)范的信息,獲取與代碼匹配的代碼規(guī)范。
在步驟11中已經(jīng)介紹了表示與代碼匹配的代碼規(guī)范的信息,其意義就是能通過(guò)該信息,找到與代碼匹配的代碼規(guī)范。
比如,檢測(cè)設(shè)備根據(jù)項(xiàng)目標(biāo)識(shí),獲取到與該項(xiàng)目匹配的代碼規(guī)范,對(duì)該項(xiàng)目下的代碼進(jìn)行檢測(cè)。
但在實(shí)際情況中,代碼中不是所有的部分都是需要檢測(cè)的,所以,針對(duì)步驟12而言,代碼規(guī)范,可以包括:代碼檢測(cè)規(guī)范。代碼檢測(cè)規(guī)范是指代碼中需要檢測(cè)的部分,這部分是會(huì)關(guān)系到代碼可否執(zhí)行,所以需要檢測(cè)。
然而,代碼中的有一些部分是可以不檢測(cè)的,對(duì)也不會(huì)影響代碼可否執(zhí)行,所以,代碼規(guī)范,還可以包括:代碼忽略規(guī)則。該規(guī)則可以忽略一些不需要檢測(cè)的代碼,或者對(duì)該部分檢測(cè)也沒(méi)有意義的代碼。
由于把代碼分為需要檢測(cè)的部分和不需要檢測(cè)的部分,就可以靈活控制對(duì)代碼各個(gè)部分的檢測(cè)需求,從而優(yōu)化的計(jì)算資源,減少計(jì)算資源浪費(fèi)。
步驟13,根據(jù)獲取的代碼規(guī)范檢測(cè)代碼的質(zhì)量。
針對(duì)步驟13而言,根據(jù)執(zhí)行步驟12獲取到的代碼規(guī)范,檢測(cè)執(zhí)行步驟11獲取到的代碼的質(zhì)量,可以根據(jù)代碼規(guī)范中的代碼檢測(cè)規(guī)范和代碼忽略規(guī)則,對(duì)代碼進(jìn)行檢測(cè)。
具體地,可以先根據(jù)代碼忽略規(guī)則,確定出需要被檢測(cè)的代碼,再根據(jù)代碼檢測(cè)規(guī)范,來(lái)檢測(cè)需要被檢測(cè)的代碼。
在一種實(shí)施方式中,為了方便開(kāi)發(fā)人員查看檢測(cè)結(jié)果,方法還可以包括:
將檢測(cè)結(jié)果保存在指定位置。
具體地,可以布設(shè)一個(gè)存儲(chǔ)設(shè)備,用于存儲(chǔ)所有代碼的檢測(cè)結(jié)果??梢詫z測(cè)結(jié)果按照指定規(guī)則分類,比如,按照所屬項(xiàng)目(項(xiàng)目A、項(xiàng)目B)進(jìn)行分類,或按照開(kāi)發(fā)階段(測(cè)試版、正式版)進(jìn)行分類,等等。在開(kāi)發(fā)人員需要查看時(shí),為他們提供便利。
對(duì)于檢測(cè)結(jié)果,只有將其傳遞出去,才有意義,所以,在一種實(shí)施方式中,方法還可以包括:
將檢測(cè)結(jié)果發(fā)送到指定位置。
具體地,可以將檢測(cè)結(jié)果發(fā)送到存儲(chǔ)設(shè)備中,也可以發(fā)送給指定的人員。
在一種實(shí)施方式中,為了方便開(kāi)發(fā)人員盡快得知自己編寫的代碼的檢測(cè)結(jié)果,代碼信息,還可以包括:開(kāi)發(fā)人員標(biāo)識(shí),則
將檢測(cè)結(jié)果發(fā)送到指定位置,可以包括:
根據(jù)開(kāi)發(fā)人員標(biāo)識(shí),將檢測(cè)結(jié)果發(fā)送給開(kāi)發(fā)人員。
具體地,開(kāi)發(fā)人員標(biāo)識(shí)可以表示代碼是哪個(gè)開(kāi)發(fā)人員編寫的,可以包括:電子郵箱地址、辦公電腦IP地址等??梢园凑针娮余]箱地址、辦公電腦IP地址等將檢測(cè)結(jié)果發(fā)送給指定的開(kāi)發(fā)人員,方便得知代碼的質(zhì)量是否符合代碼規(guī)范的要求。
在一種實(shí)施方式中,為了使得檢測(cè)結(jié)果便于查看,方法還可以包括:
將檢測(cè)結(jié)果轉(zhuǎn)換為可視化信息。
具體地,檢測(cè)設(shè)備的檢測(cè)結(jié)果可能是機(jī)器語(yǔ)言,開(kāi)發(fā)人員如果看不懂,那么檢測(cè)結(jié)果毫無(wú)意義,所以可以將檢測(cè)結(jié)果轉(zhuǎn)換為可視化信息,使開(kāi)發(fā)人員能夠容易地看懂檢測(cè)設(shè)備對(duì)自己編寫的代碼的檢測(cè)結(jié)果。此外,還可以體現(xiàn)更加人性化的辦公環(huán)境。
采用實(shí)施例1提供的該方法,由于可以根據(jù)獲取到的代碼和表示與代碼匹配的代碼規(guī)范的信息,獲取到與代碼匹配的代碼規(guī)范,并實(shí)現(xiàn)代碼質(zhì)量的自動(dòng) 檢測(cè),從而避免了開(kāi)發(fā)人員自己利用檢測(cè)工具檢測(cè)代碼質(zhì)量時(shí),由于沒(méi)有及時(shí)更新檢測(cè)工具,導(dǎo)致檢測(cè)出的代碼質(zhì)量不符合最新的代碼規(guī)范要求的問(wèn)題。此外,還能避免開(kāi)發(fā)人員身兼數(shù)職時(shí),由于疏忽造成檢測(cè)工具混用帶來(lái)的問(wèn)題。
需要說(shuō)明的是,實(shí)施例1所提供方法的各步驟的執(zhí)行主體均可以是同一設(shè)備,或者,該方法的各步驟也可以由不同設(shè)備作為執(zhí)行主體。比如,步驟11和步驟12的執(zhí)行主體可以為設(shè)備1,步驟13的執(zhí)行主體可以為設(shè)備2;又比如,步驟11的執(zhí)行主體可以為設(shè)備1,步驟12和步驟13的執(zhí)行主體可以為設(shè)備2;等等。
實(shí)施例2
基于相同的發(fā)明構(gòu)思,實(shí)施例2提供了一種代碼質(zhì)量的檢測(cè)裝置,用于解決按照現(xiàn)有的代碼質(zhì)量檢測(cè)方式,可能導(dǎo)致檢測(cè)通過(guò)的代碼的質(zhì)量不滿足代碼規(guī)范要求的問(wèn)題。如圖2所示,該裝置包括:
獲取代碼單元21,可以用于獲取終端發(fā)送的代碼和代碼信息;其中,代碼信息包含表示與代碼匹配的代碼規(guī)范的信息;
獲取規(guī)范單元22,可以用于根據(jù)表示與代碼匹配的代碼規(guī)范的信息,獲取與代碼匹配的代碼規(guī)范;
檢測(cè)代碼單元23,可以用于根據(jù)獲取的代碼規(guī)范檢測(cè)代碼的質(zhì)量。
在一種實(shí)施方式中,裝置還可以包括:
存儲(chǔ)結(jié)果單元,可以用于將檢測(cè)結(jié)果保存在指定位置。
在一種實(shí)施方式中,裝置還可以包括:
發(fā)送結(jié)果單元,可以用于將檢測(cè)結(jié)果發(fā)送到指定位置。
在一種實(shí)施方式中,代碼信息,還可以包括:開(kāi)發(fā)人員標(biāo)識(shí),則
發(fā)送結(jié)果單元,可以用于:
根據(jù)開(kāi)發(fā)人員標(biāo)識(shí),將檢測(cè)結(jié)果發(fā)送給開(kāi)發(fā)人員。
在一種實(shí)施方式中,裝置還可以包括:
轉(zhuǎn)換結(jié)果單元,可以用于將檢測(cè)結(jié)果轉(zhuǎn)換為可視化信息。
在一種實(shí)施方式中,獲取代碼單元21,還可以用于:在獲取終端發(fā)送的代碼和代碼信息之前,
若判斷出對(duì)項(xiàng)目的在先版本的代碼文件集合進(jìn)行過(guò)檢測(cè),則從終端發(fā)送的所述項(xiàng)目的在后版本的代碼文件集合中,確定相對(duì)于在先版本的代碼文件集合發(fā)生變化的代碼文件;則
獲取代碼單元21,可以用于:
獲取終端發(fā)送的所述發(fā)生變化的代碼文件中的代碼。
在一種實(shí)施方式中,獲取代碼單元21,還可以用于:
若判斷出對(duì)項(xiàng)目的在先版本的代碼文件集合未進(jìn)行過(guò)檢測(cè),則
獲取代碼單元21,可以用于:
獲取終端發(fā)送的所述項(xiàng)目的在后版本的代碼文件集合中的代碼。
在一種實(shí)施方式中,代碼規(guī)范,可以包括:
代碼檢測(cè)規(guī)范。
在一種實(shí)施方式中,代碼規(guī)范,還可以包括:
代碼忽略規(guī)則。
采用實(shí)施例2提供的該裝置,由于可以根據(jù)獲取到的代碼和表示與代碼匹配的代碼規(guī)范的信息,獲取到與代碼匹配的代碼規(guī)范,并實(shí)現(xiàn)代碼質(zhì)量的自動(dòng)檢測(cè),從而避免了開(kāi)發(fā)人員自己利用檢測(cè)工具檢測(cè)代碼質(zhì)量時(shí),由于沒(méi)有及時(shí)更新檢測(cè)工具,導(dǎo)致檢測(cè)出的代碼質(zhì)量不符合最新的代碼規(guī)范要求的問(wèn)題。此外,還能避免開(kāi)發(fā)人員身兼數(shù)職時(shí),由于疏忽造成檢測(cè)工具混用帶來(lái)的問(wèn)題。
實(shí)施例3
基于相同的發(fā)明構(gòu)思,實(shí)施例3提供了一種代碼的發(fā)送方法。該方法的示意圖如圖3所示,包括下述步驟:
步驟31,獲取代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息;
具體地,可以獲取保存在終端中的代碼和代碼信息,也可以是獲取終端發(fā)送到用于存儲(chǔ)和管理代碼的服務(wù)器中的代碼和代碼信息。比如,獲取開(kāi)發(fā)人員發(fā)送的在PC上完成編寫的代碼;又如,在分布式版本控制系統(tǒng)(如git)中,開(kāi)發(fā)人員會(huì)將本地代碼倉(cāng)庫(kù)同步到公共服務(wù)器代碼倉(cāng)庫(kù)中,所以就可以獲取公共服務(wù)器代碼倉(cāng)庫(kù)中的代碼和代碼信息。
步驟32,將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備。
具體地,可以將直接從開(kāi)發(fā)人員PC上獲取的代碼和代碼文件發(fā)送到檢測(cè)設(shè)備;也可以將從公共服務(wù)器代碼倉(cāng)庫(kù)中獲取的代碼和代碼文件發(fā)送到檢測(cè)設(shè)備。
采用實(shí)施例3提供的該方法,提供了一種將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備的方法,以便檢測(cè)設(shè)備對(duì)代碼進(jìn)行檢測(cè)。
實(shí)施例4
基于相同的發(fā)明構(gòu)思,實(shí)施例4提供了一種代碼的發(fā)送裝置。如圖4所示,該裝置包括:
獲取單元41,可以用于獲取代碼和代碼信息;其中,所述代碼信息包含表示與所述代碼匹配的代碼規(guī)范的信息。
發(fā)送單元42,可以用于將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備。
采用實(shí)施例4提供的該裝置,提供了一種將代碼和代碼信息發(fā)送到檢測(cè)設(shè)備的裝置,以便檢測(cè)設(shè)備對(duì)代碼進(jìn)行檢測(cè)。
實(shí)施例5
基于相同的發(fā)明構(gòu)思,實(shí)施例5提供了一種應(yīng)用于分布式版本控制系統(tǒng)中代碼質(zhì)量的檢測(cè)方法。假設(shè)利用分布式版本控制系統(tǒng)(git)來(lái)管理代碼,某開(kāi) 發(fā)人員將修改后的代碼提交到本地代碼庫(kù)中,再同步到公共服務(wù)器代碼庫(kù)中,公共服務(wù)器代碼庫(kù)中存在監(jiān)控裝置,當(dāng)監(jiān)控到公共服務(wù)器代碼庫(kù)發(fā)生變化時(shí),向檢測(cè)設(shè)備發(fā)送檢測(cè)請(qǐng)求(也即代碼和代碼信息)。該方法的示意圖如圖5所示,包括下述步驟:
步驟51,接收到公共服務(wù)器代碼庫(kù)發(fā)送的檢測(cè)請(qǐng)求(代碼和代碼信息),該請(qǐng)求中包括:在先版本的代碼文件集合(包含代碼文件1、代碼文件2)、該集合的SHA1值(簡(jiǎn)稱before SHA1),在后版本的代碼文件集合(代碼文件1’、代碼文件2、代碼文件3)、該集合的SHA1值(簡(jiǎn)稱after SHA1),所屬項(xiàng)目的標(biāo)識(shí)(project-A),以及開(kāi)發(fā)人員標(biāo)識(shí)。
其中,開(kāi)發(fā)人員標(biāo)識(shí)中包含開(kāi)發(fā)人員的電子郵箱地址。
步驟52,根據(jù)before SHA1和after SHA1,確定出發(fā)生變化的代碼文件為:代碼文件1’和代碼文件3,并獲取發(fā)生變化的代碼文件。
步驟53,根據(jù)所屬項(xiàng)目的標(biāo)識(shí)project-A,獲取到與project-A匹配的代碼規(guī)范A,其中包括:代碼檢測(cè)規(guī)范和代碼忽略規(guī)則。
步驟54,根據(jù)獲取的代碼忽略規(guī)則,過(guò)濾掉代碼文件在無(wú)需檢測(cè)的代碼,再根據(jù)代碼檢測(cè)規(guī)范,檢測(cè)代碼文件1’和代碼文件3中需要檢測(cè)的代碼的質(zhì)量。
步驟55,將檢測(cè)結(jié)果保存到公共服務(wù)器中。
步驟56,根據(jù)開(kāi)發(fā)人員的電子郵箱地址,將檢測(cè)結(jié)果發(fā)送給該開(kāi)發(fā)人員。
采用實(shí)施例5提供的該方法,由于先獲取檢測(cè)請(qǐng)求,再根據(jù)請(qǐng)求中的內(nèi)容確定出變化的代碼文件,以及獲取到與代碼匹配的代碼規(guī)范,然后檢測(cè)代碼的質(zhì)量,從而避免了開(kāi)發(fā)人員自己利用檢測(cè)工具檢測(cè)代碼質(zhì)量時(shí),由于沒(méi)有及時(shí)更新檢測(cè)工具,導(dǎo)致檢測(cè)出的代碼質(zhì)量不符合最新的代碼規(guī)范要求的問(wèn)題。此外,還能避免開(kāi)發(fā)人員身兼數(shù)職時(shí),由于疏忽造成檢測(cè)工具混用帶來(lái)的問(wèn)題。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任 何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、商品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括要素的過(guò)程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
以上僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng)。對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的權(quán)利要求范圍之內(nèi)。