• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2023-01-30 04:08:16傅向華馬軍超
      計算機(jī)時代 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)、計算機(jī)等級認(rèn)證等活動中用來評測代碼的在線系統(tǒng)。該系統(tǒng)由前端和后端兩部分組成;用戶可以在前端Web 界面提交源代碼及測試用例,然后在后端對所提交的源代碼進(jìn)行編譯;最后系統(tǒng)將根據(jù)測試用例基線對源代碼輸出進(jìn)行評估,將源代碼的準(zhǔn)確性、內(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)存及性能進(jìn)行評測,而無法對代碼的規(guī)范性進(jìn)行評測。這導(dǎo)致學(xué)生代碼編程規(guī)范意識薄弱,編寫的代碼可讀性差、低效、穩(wěn)定性及可擴(kuò)展性差,提交的代碼質(zhì)量無法保證。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      ⑶語義分析:根據(jù)抽象語法樹及源代碼的語句結(jié)構(gòu),進(jìn)行變量類型、數(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ī)范標(biāo)準(zhǔn),挖掘不規(guī)范的代碼語句及位置。

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

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

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

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

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

      為了更好的驗證本系統(tǒng)的實用性,本次實驗還從本校的17次面向?qū)ο笳n程實驗中,抽取了五次實驗的一個行政班的結(jié)果,針對代碼規(guī)范檢測結(jié)果進(jìn)行比對,測試結(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之間,由于每個行政班每次上機(jī)實驗的時間為200min,因此該系統(tǒng)的代碼規(guī)范檢測速度較快。

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

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

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

      4 結(jié)束語

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

      猜你喜歡
      源代碼評測語句
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      基于TXL的源代碼插樁技術(shù)研究
      次時代主機(jī)微軟XSX全方位評測(下)
      次時代主機(jī)微軟XSX全方位評測(上)
      重點:語句銜接
      攻坡新利器,TOKEN VENTOUS評測
      軟件源代碼非公知性司法鑒定方法探析
      精彩語句
      Canyon Ultimate CF SLX 8.0 DI2評測
      中國自行車(2017年1期)2017-04-16 02:54:06
      揭秘龍湖產(chǎn)品“源代碼”
      旺苍县| 禹城市| 武清区| 平阳县| 政和县| 吉木萨尔县| 瓦房店市| 玉门市| 神农架林区| 南京市| 福泉市| 沂水县| 武功县| 肇东市| 西安市| 嘉荫县| 鹤峰县| 昌吉市| 砀山县| 镇坪县| 常德市| 贵阳市| 甘德县| 平武县| 民乐县| 白玉县| 西安市| 德令哈市| 汤阴县| 姜堰市| 洞口县| 太湖县| 日喀则市| 长阳| 濮阳县| 玛曲县| 凤台县| 长宁县| 保德县| 卢湾区| 中阳县|