国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于代碼編程規(guī)范的在線評測系統(tǒng)研究與實現(xiàn)*

2023-01-30 04:08:16傅向華馬軍超
計算機時代 2023年1期
關(guān)鍵詞:源代碼評測語句

李 菊,傅向華,馬軍超

(深圳技術(shù)大學(xué)大數(shù)據(jù)與互聯(lián)網(wǎng)學(xué)院,廣東 深圳 518000)

0 引言

在線評測(Online Judge,OJ)系統(tǒng)是一種在教學(xué)實驗、程序設(shè)計競賽、企業(yè)軟件類崗位招聘、培訓(xùn)、計算機等級認證等活動中用來評測代碼的在線系統(tǒng)。該系統(tǒng)由前端和后端兩部分組成;用戶可以在前端Web 界面提交源代碼及測試用例,然后在后端對所提交的源代碼進行編譯;最后系統(tǒng)將根據(jù)測試用例基線對源代碼輸出進行評估,將源代碼的準確性、內(nèi)存占用及運行時間輸出在前端Web 界面。目前著名的OJ系統(tǒng)有北京大學(xué)的Peking University Online Judge(POJ)、浙江大學(xué)的Zhejiang University Online Judge(ZOJ)、杭州電子科技大學(xué)的Hangzhou Dianzi University Online Judge(HDOJ)等[1]。這些在線評測系統(tǒng)只能對學(xué)生提交的源代碼的正確性、內(nèi)存及性能進行評測,而無法對代碼的規(guī)范性進行評測。這導(dǎo)致學(xué)生代碼編程規(guī)范意識薄弱,編寫的代碼可讀性差、低效、穩(wěn)定性及可擴展性差,提交的代碼質(zhì)量無法保證。

隨著互聯(lián)網(wǎng)的快速發(fā)展,各軟件企業(yè)也開始逐步重視軟件的代碼質(zhì)量。無論是阿里發(fā)布的《Java 開發(fā)手冊》;還是華為投入20億美元,計劃用五年時間提高代碼質(zhì)量,都充分突顯出軟件企業(yè)對軟件代碼質(zhì)量的重視程度[2]。高質(zhì)量代碼體現(xiàn)為:正確性、可讀性、高效性、穩(wěn)定性、可維護性、可擴展性。因此編碼不僅要實現(xiàn)完整的功能,而且要保證代碼具有良好的可讀性、高效性、穩(wěn)定性、可維護性、可擴展性。遵循代碼編程規(guī)范的習(xí)慣是代碼高質(zhì)量特性的保證。因此為了更好的適應(yīng)企業(yè)人才需求,急需基于代碼編程規(guī)范,對現(xiàn)有實驗教學(xué)的在線判題系統(tǒng)進行改造升級,以讓學(xué)生養(yǎng)成遵循代碼編程規(guī)范的習(xí)慣,提高學(xué)生的代碼質(zhì)量。

1 系統(tǒng)架構(gòu)

本系統(tǒng)架構(gòu)由上至下主要分為三層,即Web 界面層、業(yè)務(wù)邏輯層、數(shù)據(jù)層。Web 服務(wù)器主要用于用戶題目錄入,代碼測試用例輸入,源代碼提交,評測結(jié)果反饋。業(yè)務(wù)邏輯層主要為代碼編譯,代碼運行,代碼結(jié)果與基線的比對評測。數(shù)據(jù)庫層主要為源代碼或題目的增,刪,改,查。詳情見圖1。

圖1 系統(tǒng)架構(gòu)圖

2 系統(tǒng)功能實現(xiàn)

2.1 系統(tǒng)實施

本系統(tǒng)主要在原在線判題系統(tǒng)的動態(tài)判題得分基礎(chǔ)上[3],增加基于代碼編程規(guī)范的靜態(tài)判題得分,系統(tǒng)實施圖如圖2所示。

圖2 系統(tǒng)實施圖

2.2 系統(tǒng)檢測標準

目前國內(nèi)各大軟件企業(yè)使用比較多的代碼規(guī)范有Google、華為、騰訊、阿里巴巴等公司制定的代碼編程規(guī)范,其中使用最多的是Google 的開源代碼編程規(guī)范。為了更好的對接企業(yè)人才需求,本系統(tǒng)的檢測代碼規(guī)范標準,主要參考Google 開源的CC++、Java、Python 語言代碼規(guī)范,制定出適用于C、C++、Java、Python計算機語言類課程實驗教學(xué)的七大類規(guī)范規(guī)則:

⑴ 布局類:縮進、空格、空行、大括號的位置的規(guī)范等。

●程序塊使用縮進風(fēng)格,縮進的空格數(shù)為4個。

●大擴號(‘{’和‘}’)與它們的語句左對齊,并各獨占一行。

●函數(shù)、類獨立的模塊之間必須加空行。

●操作符前后加空格,進行對等操作時,若是關(guān)系密切的操作符(如.)后不加空格。

●每行語句的字符數(shù)不能超過80個。

●一行只寫一條語句(包括賦值語句)。

●if、for、do、while、case、switch、default 等語句獨占一行。

⑵命名類:類、對象、函數(shù)和變量的命名等。

●類、對象、接口名,使用首字母大寫的大小寫混合法。

●函數(shù)、變量名,使用首字母使用小寫,剩余單詞使用首字母大寫的大小寫混合法。

●常量、枚舉名,使用全大寫字母。

⑶ 注釋類:注釋位置、數(shù)量、哪些變量常量要注釋等;

●注釋要放在其代碼上方相鄰位置或右方。

●注釋與所描述內(nèi)容進行同樣的縮進。

●源程序的注釋量必須在占總代碼10%以上。

⑷邏輯類:缺少分支語句、浮點數(shù)比較、運算錯誤(除0)、死循環(huán)等;

●在switch 中每個case 語句都應(yīng)該包含break 或者return。

●不要對浮點數(shù)進行比較運算,尤其是不要進行==、!=運算,減少>、<運算。

●進行除法或取模運算,要對分母為零的情況進行特殊處理。

●在for循環(huán)中提供終止條件。

●不要在if語句中使用等號=進行賦值操作。

⑸冗余類:冗余變量、冗余參數(shù)、重復(fù)代碼等;

●避免局部變量與全局變量同名。

●避免定義未使用到的變量及參數(shù)。

●一個源文件的代碼重復(fù)度不超過10%。

⑹復(fù)雜類:過大函數(shù)、過大對象、過大類、函數(shù)復(fù)雜度等;

●一個函數(shù)的代碼行不超過50行(非空,非注釋)。

●一個函數(shù)的代碼嵌套不超過4層。

●一個類的代碼行不超過50行(非空,非注釋)。

●一個函數(shù)使用的if、while、for、switch語句要在10個以內(nèi)。

⑺內(nèi)存類:數(shù)據(jù)越界、內(nèi)存泄漏等。

●避免超過整數(shù)的最大值及最小值,導(dǎo)致上溢和下溢。

●寫代碼時new 與delete、malloc 與free 要成對出現(xiàn),避免內(nèi)存泄漏。

2.3 系統(tǒng)實現(xiàn)技術(shù)

本系統(tǒng)主要在原系統(tǒng)使用動態(tài)分析技術(shù)評測程序功能準確性的基礎(chǔ)上,融合編譯原理中的靜態(tài)分析技術(shù)進行代碼規(guī)范評測。靜態(tài)分析技術(shù)是一種程序分析技術(shù),不需要實際執(zhí)行程序,不受程序輸入輸出的影響,與運行環(huán)境無關(guān)[4],因而比動態(tài)程序分析技術(shù)的分析速度快。靜態(tài)分析技術(shù)的主要流程為:通過詞法分析、語法分析等流程,將源代碼轉(zhuǎn)換成抽象語法樹,再進行缺陷檢測、代碼規(guī)范、系統(tǒng)檢測等研究分析。通過靜態(tài)分析技術(shù)中的控制流分析及語義分析,可以彌補動態(tài)分析代碼規(guī)范判別方面的不足,對代碼進行較全面的分析。本系統(tǒng)實現(xiàn)過程如圖3所示。

圖3 代碼規(guī)范檢測過程圖

⑴詞法分析:對輸入的源代碼逐行進行字符串掃描,利用正則表達式技術(shù)提取每行代碼的有意義詞法單元,包括關(guān)鍵字、標記符,再將詞法單元成非語法節(jié)點(空格及注釋)和語法節(jié)點(非空格及非注釋字符串),存儲在鏈表中,形成符號表[5]。

⑵語法分析:根據(jù)詞法分析中形成的符號表,結(jié)合語法規(guī)則,組成函數(shù)聲明、變量定義、循環(huán)語句、條件判斷等語句,再生成抽象語法樹[5]。

⑶語義分析:根據(jù)抽象語法樹及源代碼的語句結(jié)構(gòu),進行變量類型、數(shù)組大小、函數(shù)調(diào)用信息等的上下文關(guān)聯(lián),以識別出代碼語句是否存在漏洞。

⑷控制流分析:根據(jù)抽象語法樹識別函數(shù)內(nèi)部的if、while、for 調(diào)用嵌套關(guān)系,形成函數(shù)調(diào)用流向圖,以檢測代碼的邏輯關(guān)系,檢查函數(shù)內(nèi)部的嵌套是否會導(dǎo)致死循環(huán),除此之外還可以通過流向圖分析函數(shù)的復(fù)雜度。

⑸規(guī)則匹配:結(jié)合語義分析及控制流分析分析結(jié)果,匹配代碼規(guī)范標準,挖掘不規(guī)范的代碼語句及位置。

3 系統(tǒng)實驗驗證

本次系統(tǒng)實驗驗證,僅針對本系統(tǒng)中的靜態(tài)代碼規(guī)范檢測結(jié)果進行分析。實驗的驗證環(huán)境為本校當(dāng)前在線評測系統(tǒng)環(huán)境,詳情如表1。

表1 系統(tǒng)實驗環(huán)境

為了驗證系統(tǒng)檢測代碼規(guī)范的準確性,本次實驗針對C/C++、Java、Python 分別構(gòu)造了較為全面的測試用例,可以覆蓋本系統(tǒng)檢測標準中的七大類27 條規(guī)則,詳情見表2。表中的總耗時為系統(tǒng)10 次隨機實驗的平均耗時,由表2 可知不同語言由于語法和關(guān)鍵詞的差異,導(dǎo)致在代碼檢測實現(xiàn)過程的差異,造成了代碼規(guī)范檢測耗時的差異。其中C/C++語言比Java語言在單文件代碼行數(shù)相當(dāng)?shù)那闆r下,要快一倍左右。四種語言的單文件耗時均在2s 以內(nèi),且代碼規(guī)范檢測準確率均達100%。

表2 不同語言代碼規(guī)范檢測測試結(jié)果

為了更好的驗證本系統(tǒng)的實用性,本次實驗還從本校的17次面向?qū)ο笳n程實驗中,抽取了五次實驗的一個行政班的結(jié)果,針對代碼規(guī)范檢測結(jié)果進行比對,測試結(jié)果詳情見表3。該課程使用的語言為C++,學(xué)生每次提交的代碼行數(shù)在30~90 行之間,由表3 可知,在這個代碼行范圍內(nèi),每個文件的耗時受代碼行數(shù)影響不大,耗時在0.66s 左右,且比較穩(wěn)定。每個行政班的人數(shù)在30~40 人之間,每次實驗的題目數(shù)在4~7 道之間,且因為題目難度不同,存在一題多交的現(xiàn)象,由表3 可知,每個班單次實驗提交到系統(tǒng)的文件數(shù)在250~430之間,總耗時在170~300s之間,由于每個行政班每次上機實驗的時間為200min,因此該系統(tǒng)的代碼規(guī)范檢測速度較快。

表3 面向?qū)ο蟪绦蛘n程上機實驗測試結(jié)果

此外,本次實驗還對本校Python 語言程序設(shè)計、Java 程序設(shè)計課程的上機實驗結(jié)果進行分析,結(jié)果與表3類似。

由上面的實驗結(jié)果和分析可知,本系統(tǒng)中的代碼規(guī)范檢測功能,能有效、全面的檢測出代碼規(guī)范問題,并且檢查速度較快,也比較穩(wěn)定。

4 結(jié)束語

本系統(tǒng)采用靜態(tài)分析技術(shù),對原有的在線判題系統(tǒng)進行改造,在保證原有系統(tǒng)正確性功能評測的基礎(chǔ)上,增加了代碼規(guī)范檢測評測功能。經(jīng)系統(tǒng)實驗驗證,該系統(tǒng)能快速、穩(wěn)定、全面有效的檢測出代碼中存在的代碼規(guī)范問題,有助于學(xué)生養(yǎng)成遵循代碼編程規(guī)范的習(xí)慣,提升代碼質(zhì)量。本系統(tǒng)還有很多需要完善之處,其中最需要完善的是,對代碼的規(guī)范進行更精確的測評,同時又不損失太多效率。

猜你喜歡
源代碼評測語句
人工智能下復(fù)雜軟件源代碼缺陷精準校正
計算機仿真(2023年8期)2023-09-20 11:23:42
基于TXL的源代碼插樁技術(shù)研究
次時代主機微軟XSX全方位評測(下)
次時代主機微軟XSX全方位評測(上)
重點:語句銜接
攻坡新利器,TOKEN VENTOUS評測
軟件源代碼非公知性司法鑒定方法探析
精彩語句
Canyon Ultimate CF SLX 8.0 DI2評測
中國自行車(2017年1期)2017-04-16 02:54:06
揭秘龍湖產(chǎn)品“源代碼”
乐至县| 桂平市| 财经| 肇东市| 敦煌市| 张掖市| 枝江市| 清原| 黑山县| 兴安县| 六枝特区| 平乡县| 普兰店市| 闸北区| 仙居县| 老河口市| 陕西省| 北辰区| 镇沅| 四子王旗| 安阳市| 灌阳县| 蚌埠市| 东宁县| 宜黄县| 阜城县| 蒲江县| 即墨市| 玉树县| 东明县| 夏河县| 广宁县| 彩票| 上虞市| 博罗县| 贡山| 奉新县| 茌平县| 泗水县| 红河县| 泌阳县|