亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2023-01-30 04:08:16傅向華馬軍超
        計(jì)算機(jī)時(shí)代 2023年1期
        關(guān)鍵詞:源代碼評(píng)測(cè)語(yǔ)句

        李 菊,傅向華,馬軍超

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

        0 引言

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

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

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

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

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

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

        2.1 系統(tǒng)實(shí)施

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

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

        2.2 系統(tǒng)檢測(cè)標(biāo)準(zhǔn)

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

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

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

        ●大擴(kuò)號(hào)(‘{’和‘}’)與它們的語(yǔ)句左對(duì)齊,并各獨(dú)占一行。

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

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

        ●每行語(yǔ)句的字符數(shù)不能超過(guò)80個(gè)。

        ●一行只寫(xiě)一條語(yǔ)句(包括賦值語(yǔ)句)。

        ●if、for、do、while、case、switch、default 等語(yǔ)句獨(dú)占一行。

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

        ●類(lèi)、對(duì)象、接口名,使用首字母大寫(xiě)的大小寫(xiě)混合法。

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

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

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

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

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

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

        ⑷邏輯類(lèi):缺少分支語(yǔ)句、浮點(diǎn)數(shù)比較、運(yùn)算錯(cuò)誤(除0)、死循環(huán)等;

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

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

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

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

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

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

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

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

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

        ⑹復(fù)雜類(lèi):過(guò)大函數(shù)、過(guò)大對(duì)象、過(guò)大類(lèi)、函數(shù)復(fù)雜度等;

        ●一個(gè)函數(shù)的代碼行不超過(guò)50行(非空,非注釋?zhuān)?/p>

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

        ●一個(gè)類(lèi)的代碼行不超過(guò)50行(非空,非注釋?zhuān)?/p>

        ●一個(gè)函數(shù)使用的if、while、for、switch語(yǔ)句要在10個(gè)以?xún)?nèi)。

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

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

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

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

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

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

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

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

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

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

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

        3 系統(tǒng)實(shí)驗(yàn)驗(yàn)證

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

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

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

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

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

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

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

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

        4 結(jié)束語(yǔ)

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

        猜你喜歡
        源代碼評(píng)測(cè)語(yǔ)句
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        基于TXL的源代碼插樁技術(shù)研究
        次時(shí)代主機(jī)微軟XSX全方位評(píng)測(cè)(下)
        次時(shí)代主機(jī)微軟XSX全方位評(píng)測(cè)(上)
        重點(diǎn):語(yǔ)句銜接
        攻坡新利器,TOKEN VENTOUS評(píng)測(cè)
        軟件源代碼非公知性司法鑒定方法探析
        精彩語(yǔ)句
        Canyon Ultimate CF SLX 8.0 DI2評(píng)測(cè)
        揭秘龍湖產(chǎn)品“源代碼”
        漂亮人妻被强了完整版| 99精品视频在线观看| 日本一二三区在线观看视频| 国产av熟女一区二区三区| 无码字幕av一区二区三区| 伊伊人成亚洲综合人网香| 精品水蜜桃久久久久久久 | 国产人与禽zoz0性伦| 国产亚洲亚洲精品777| 91spa国产无码| 果冻国产一区二区三区| 久久久噜噜噜久久熟女| av在线免费观看网站免费| 久人人爽人人爽人人片av| 久久综合九色综合欧美狠狠| 国产精品调教| 国产人妖赵恩静在线视频| 成人国产高清av一区二区三区 | 在线你懂| 麻豆夫妻在线视频观看| 国产精品一区二区三区成人| 性色av色香蕉一区二区蜜桃| 欧洲熟妇色xxxx欧美老妇性| 野狼第一精品社区| 亚洲Va中文字幕久久无码一区| 日产乱码一区二区国产内射| 午夜免费观看一区二区三区| 插上翅膀插上科学的翅膀飞| 99在线精品免费视频| 天天天天躁天天爱天天碰| 国产欧美日韩在线观看| 中文字幕成人精品久久不卡| 亚洲乱码中文字幕第一页| 人妻av有码中文字幕| 被三个男人绑着躁我好爽视频| 精品久久久久久中文字幕大豆网| 亚洲乱码一区二区三区成人小说| 天堂视频一区二区免费在线观看| 国产精品老熟女乱一区二区| 国产精品永久久久久久久久久 | 亚洲熟少妇在线播放999|