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

?

程序設(shè)計(jì)在線(xiàn)作業(yè)代碼不規(guī)范檢測(cè)方法及應(yīng)用

2018-10-13 09:43杜彬賀杰徐陽(yáng)王林鑫尤楓
教育教學(xué)論壇 2018年44期
關(guān)鍵詞:軟件測(cè)試

杜彬 賀杰 徐陽(yáng) 王林鑫 尤楓

摘要:針對(duì)程序初學(xué)者編寫(xiě)的C/C++程序,調(diào)試需要消耗大量的時(shí)間和精力。然而,初學(xué)者在接觸簡(jiǎn)單的編程時(shí),編寫(xiě)思路一般不存在問(wèn)題,但由于其良好的編程習(xí)慣還未養(yǎng)成,代碼格式往往不規(guī)范,從而導(dǎo)致程序相應(yīng)代碼塊出錯(cuò)。本文結(jié)合程序在線(xiàn)評(píng)測(cè)系統(tǒng),針對(duì)程序設(shè)計(jì)課程的C/C++程序代碼不規(guī)范問(wèn)題提出了一種基于在正則表達(dá)式和編輯距離的檢測(cè)方法并通過(guò)實(shí)驗(yàn)驗(yàn)證了不規(guī)范的代碼出現(xiàn)錯(cuò)誤概率較大。

關(guān)鍵詞:軟件測(cè)試;代碼格式規(guī)范;程序在線(xiàn)評(píng)測(cè)系統(tǒng)

中圖分類(lèi)號(hào):G623.58 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2018)44-0154-02

一、引言

目前國(guó)內(nèi)外的程序自動(dòng)化調(diào)試研究中,在針對(duì)特定類(lèi)型故障、數(shù)據(jù)結(jié)構(gòu)及內(nèi)存等方面取得了一定進(jìn)展,但對(duì)由不良程序編程習(xí)慣或者編程代碼格式的不規(guī)范引起的錯(cuò)誤類(lèi)型研究還較少[1]。編程者往往在編程中只注重算法和正確性,卻忽略代碼規(guī)范性,消耗了軟件調(diào)試過(guò)程中大量的時(shí)間和成本[2]。本文結(jié)合作者所在學(xué)校的在線(xiàn)編程評(píng)測(cè)系統(tǒng)(Online Judge System,OJ)[3,4],分析系統(tǒng)數(shù)據(jù)庫(kù)中答題者提交的程序,針對(duì)其中由于代碼塊括號(hào)匹配不規(guī)范出錯(cuò)的程序,進(jìn)行錯(cuò)誤程度計(jì)算,提出一種代碼不規(guī)范程度檢測(cè)方法。

二、代碼格式規(guī)范化的概念

就軟件開(kāi)發(fā)的代碼編寫(xiě)而言,每個(gè)開(kāi)發(fā)者的編程水平、經(jīng)驗(yàn)和習(xí)慣都大不相同。本文對(duì)于程序代碼格式規(guī)范化的概念進(jìn)行簡(jiǎn)單梳理,歸納如下:

1.格式一:對(duì)齊與縮進(jìn)。(1)①“{”位置的兩種風(fēng)格:①“{”和“}”獨(dú)占一行,且位于同一列,與引用他們的語(yǔ)句左對(duì)齊,便于檢查配對(duì)情況;②“{”位于引用他語(yǔ)句之后,“}”與引用他的語(yǔ)句左對(duì)齊。(2)位于同一層“{”和“}”之內(nèi)的代碼相對(duì)于引用他們的代碼縮進(jìn)。(一般用4個(gè)空格的tab鍵縮進(jìn),不用空格縮進(jìn))。

2.格式二:代碼行內(nèi)空格。(1)關(guān)鍵字之后加空格,關(guān)鍵字與操作符之間不加空格。(2)采用第一種“{ }”格式的函數(shù)名之后不加空格,采用第二種“{ }”格式的函數(shù)名之后加空格。(3)賦值、算術(shù)、關(guān)系、邏輯等二元運(yùn)算符前后各加一空格,但是一元運(yùn)算符前后一般不加空格。(4)“( )”中,變量之間緊跟“,”。(5)“,”,“;”后留一個(gè)空格。

3.格式三:代碼行。(1)一行只寫(xiě)一條語(yǔ)句。(2)一行只寫(xiě)一個(gè)變量。(3)每個(gè)關(guān)鍵字之間要加一個(gè)空格隔開(kāi)。

三、代碼格式不規(guī)范化程度檢測(cè)方法

本文以O(shè)J平臺(tái)學(xué)生所提交的所有代碼作為分析源,結(jié)合正則表達(dá)式及編輯距離的概念,使用Python對(duì)數(shù)據(jù)庫(kù)中的代碼計(jì)算相應(yīng)的不規(guī)范程度。

1.正則表達(dá)式。本文設(shè)計(jì)的正則表達(dá)式如下。

(1)“.*? +”用該模式去掉多余的空格。(2)“[,!=<>\+\-\*\/]+[A-Za-z0-9]+|[A-Za-z0-9]+[,!=<>\+\-\*\/]+”用該模式添加標(biāo)識(shí)符與運(yùn)算符之間的空格。

2.編輯距離。編輯距離用來(lái)度量?jī)蓚€(gè)字符串的相似度?;诰庉嬀嚯x算法進(jìn)行動(dòng)態(tài)編程,其算法的時(shí)間復(fù)雜度為O(m*n),空間復(fù)雜度為O(m*n),m,n分別表示源字符串S和目標(biāo)字符串T的長(zhǎng)度。編輯距離的動(dòng)態(tài)規(guī)劃求解方程組如下所示。

四、實(shí)驗(yàn)驗(yàn)證

1.代碼格式不規(guī)范化錯(cuò)誤統(tǒng)計(jì)及實(shí)例。本文針對(duì)目前OJ平臺(tái)數(shù)據(jù)庫(kù)中提交的135,556份C/C++程序(包含提交結(jié)果正確和錯(cuò)誤的代碼),進(jìn)行分析統(tǒng)計(jì),計(jì)算全部代碼的不規(guī)范化程度,結(jié)果如圖1顯示。橫軸以規(guī)范代碼及不規(guī)范代碼之間的編輯距離作為劃分依據(jù),縱軸是屬于此編輯距離的不規(guī)范代碼數(shù)量。從圖1我們可以發(fā)現(xiàn),OJ平臺(tái)數(shù)據(jù)庫(kù)中,只有不到11,000份代碼做到規(guī)范化,當(dāng)然如果把不規(guī)范程度在[1—20]之間的代碼看作規(guī)范的話(huà),那么也只有不到46,000份代碼是規(guī)范的。

為了進(jìn)一步分析不規(guī)范程度對(duì)于代碼的正確性影響,我們將OJ平臺(tái)數(shù)據(jù)庫(kù)中87,933份錯(cuò)誤代碼進(jìn)行單獨(dú)分析,圖2顯示了錯(cuò)誤代碼中不同規(guī)范程度的代碼分布情況及占總錯(cuò)誤代碼的百分比。

我們綜合比較圖1和圖2,可以觀察到,錯(cuò)誤代碼中不規(guī)范代碼的比例與總代碼中不規(guī)范代碼的比例成正相關(guān)。

五、總結(jié)與展望

本文針對(duì)C/C++程序代碼不規(guī)范問(wèn)題,提出了一種基于在線(xiàn)編程評(píng)測(cè)系統(tǒng)(OJ)的代碼規(guī)范化檢測(cè)方法框架,實(shí)驗(yàn)驗(yàn)證了該方法能夠有效度量代碼不規(guī)范錯(cuò)誤程度,且代碼不規(guī)范是程序錯(cuò)誤的重要原因。之后的工作,我們將進(jìn)一步分析程序員的編程習(xí)慣,并著眼于Java、C#以及Python等更多程序語(yǔ)言的代碼不規(guī)范自動(dòng)修復(fù)問(wèn)題。

參考文獻(xiàn):

[1]馬春燕,劉杰,賴(lài)文豫.基于變異技術(shù)的程序故障自動(dòng)化修復(fù)方法[J].計(jì)算機(jī)應(yīng)用研究,2014,31(1):177-181.

[2]王延青,王建政,張麗杰,等.程序設(shè)計(jì)語(yǔ)言教學(xué)中編碼標(biāo)準(zhǔn)的定量評(píng)測(cè)框架[J].合肥工業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2008,(6):67-71.

[3]李文新,郭煒.北京大學(xué)程序在線(xiàn)評(píng)測(cè)系統(tǒng)及其應(yīng)用[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2005,23(2):170-177.

[4]紀(jì)洪波.基于jQuery的Web源程序在線(xiàn)評(píng)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].吉林大學(xué),2010.

Abstract:For inexperienced programmers,it costs lots of effort to debug and fix C/C++ program errors. When beginners get in touch with the simple programming problem,the solution methods are always correct. Due to their poor programming experiences and inadequate programming habit,the code formatting is incorrect,which leads to incorrect outputs. Motivated by the prospect of reducing human developer involvement,this paper proposed a detection method,especially for the code segment standardization,and applied this method to detect bugs of incorrect code formatting of C/C++ language programs.

Key words:software testing;code segment standardization;online judge system

猜你喜歡
軟件測(cè)試
基于OBE的軟件測(cè)試課程教學(xué)改革探索
基于MBD模型自動(dòng)生成測(cè)試用例的軟件測(cè)試方法
計(jì)算機(jī)軟件測(cè)試方法的研究
EXCEL和VBA實(shí)現(xiàn)軟件測(cè)試記錄管理
關(guān)于軟件測(cè)試技術(shù)應(yīng)用與發(fā)展趨勢(shì)研究
一種航空機(jī)載軟件測(cè)試項(xiàng)目的進(jìn)度改進(jìn)模型
軍用軟件測(cè)試文檔生成設(shè)計(jì)與實(shí)現(xiàn)
軟件測(cè)試工程化模型及應(yīng)用研究
智能電能表軟件測(cè)試技術(shù)概述
《軟件測(cè)試》課程教學(xué)策略研究