衛(wèi)軍超++薛鵬鵬
摘 要 在程序設(shè)計(jì)語(yǔ)言教學(xué)過(guò)程中,教師往往運(yùn)用手把手教學(xué)的方式對(duì)學(xué)生的源代碼編程進(jìn)行審核,這類傳統(tǒng)的教學(xué)模式效率低下,也不便于學(xué)生之間的交流。構(gòu)建一個(gè)基于白箱測(cè)試的建立在C語(yǔ)言基礎(chǔ)上的教學(xué)平臺(tái),提高師生互動(dòng),促進(jìn)大家學(xué)習(xí)交流,簡(jiǎn)化程序的評(píng)測(cè)過(guò)程,提高學(xué)習(xí)的效率。
【關(guān)鍵詞】白箱測(cè)試 在線評(píng)測(cè) C語(yǔ)言
高校程序設(shè)計(jì)類課程傳統(tǒng)的手工評(píng)測(cè)方式有許多難以克服的弊端,對(duì)教學(xué)效果和學(xué)生編程能力的提高造成了許多障礙。隨著計(jì)算機(jī)技術(shù)的發(fā)展,特別是Internet技術(shù)的普遍應(yīng)用, 源代碼在線評(píng)測(cè)系統(tǒng)應(yīng)運(yùn)而生,應(yīng)用于各高校程序設(shè)計(jì)類課程的輔助教學(xué),同時(shí)還可以當(dāng)做程序編程設(shè)計(jì)等競(jìng)賽的模擬系統(tǒng),和傳統(tǒng)的手工測(cè)評(píng)方式相比較而言,優(yōu)勢(shì)明顯。
1 研究?jī)?nèi)容
在分析和總結(jié)前人研究工作的基礎(chǔ)上,本研究基于白箱測(cè)試實(shí)現(xiàn)對(duì)C語(yǔ)言源代碼的評(píng)測(cè),使其能夠應(yīng)用在具體教學(xué)實(shí)踐中。
1.1 評(píng)測(cè)系統(tǒng)的關(guān)鍵技術(shù)
評(píng)測(cè)系統(tǒng)要用到以下幾個(gè)關(guān)鍵技術(shù):操作 My SQL 數(shù)據(jù)庫(kù);編譯源代碼;執(zhí)行被測(cè)試的數(shù)據(jù);測(cè)試運(yùn)行結(jié)果;獲取評(píng)測(cè)時(shí)間等。
1.2 代碼安全性檢測(cè)
代碼安全檢測(cè)是研究的核心內(nèi)容。一旦源代碼使用者提供了錯(cuò)誤的惡意性質(zhì)的代碼,必然會(huì)影響服務(wù)器的正常運(yùn)行。所以確保代碼的安全性是保障系統(tǒng)正常使用的核心,需要及時(shí)對(duì)用戶提供的源代碼進(jìn)行安全性檢測(cè),以白箱測(cè)試中的靜態(tài)分析技術(shù)為前提,設(shè)計(jì)這一模塊,針對(duì)C語(yǔ)言源代碼常見的安全漏洞機(jī)械能給你檢測(cè),分析。重點(diǎn)研究存儲(chǔ)越界錯(cuò)誤、動(dòng)態(tài)內(nèi)存分配錯(cuò)誤、內(nèi)存泄漏、類型不一致錯(cuò)誤、數(shù)組越界、死循環(huán)等類六類安全漏洞的檢測(cè)方法。
1.3 代碼剽竊檢測(cè)
分析常見的代碼剽竊的幾種方式,及目前國(guó)內(nèi)外代碼剽竊檢測(cè)技術(shù)的發(fā)展情況。代碼剽竊檢測(cè)這項(xiàng)技術(shù)的最終要的計(jì)算方法就是代碼相似度的檢測(cè)。檢測(cè)兩種代碼的相似情況的主要方法有兩種,屬性計(jì)數(shù)和結(jié)構(gòu)度量。結(jié)合實(shí)際教學(xué)環(huán)境,選擇合適的代碼相似度計(jì)算機(jī)方法,提出解決學(xué)生在日常的編程、考試中代碼剽竊自動(dòng)檢測(cè)的設(shè)計(jì)方案。
2 評(píng)測(cè)技術(shù)的關(guān)鍵技術(shù)
本研究主要是對(duì)實(shí)現(xiàn)評(píng)測(cè)系統(tǒng)的技術(shù)進(jìn)行研究,主要包括以下幾個(gè)方面:評(píng)測(cè)系統(tǒng)的關(guān)鍵技術(shù)、代碼安全檢測(cè)、代碼剽竊檢測(cè)。
2.1 評(píng)測(cè)系統(tǒng)關(guān)鍵技術(shù)
(1)采用C語(yǔ)言操作MySQL數(shù)據(jù)庫(kù)。用到的API主要有:MYSQL*mysql_init(MYSQL*mysql),用來(lái)實(shí)現(xiàn)初始化一個(gè)MySQL對(duì)象。
MYSQL* mysql_connect(MYSQL*mysql,const char*host,const*user,const char*passwd),用來(lái)實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)。
int mysql_query(MYSQL *mysql,const char*query),實(shí)現(xiàn)對(duì)SQL語(yǔ)句的執(zhí)行操作。
(2)對(duì)源代碼進(jìn)行編譯,實(shí)現(xiàn)對(duì)源代碼的編譯要用到以下主要參數(shù):
-o out_file:表示將編譯后的可執(zhí)行文件存儲(chǔ)為out_file。如out_file為空,則則編譯后的可執(zhí)行文件存儲(chǔ)為a.out;
-O2:在編譯的過(guò)程中會(huì)采取優(yōu)化處理方式;
-Wall:在編譯時(shí),程序會(huì)及時(shí)輸出警告信息;
-Im:-I編譯時(shí),鏈接庫(kù)會(huì)被連接;-I后面會(huì)出現(xiàn)需要要鏈接的庫(kù)名。-Im表示會(huì)鏈接數(shù)學(xué)庫(kù);
-Static:在編譯過(guò)程中,進(jìn)行連接鏈接庫(kù)時(shí),會(huì)使用靜態(tài)鏈接庫(kù)進(jìn)行連接,及時(shí)避免連接動(dòng)態(tài)的鏈接庫(kù)。
(3)源代碼文件編譯通過(guò)之后,會(huì)生成一個(gè)名為“main”的文件接下來(lái)的工作是測(cè)試程序的正確性,源代碼的正確性測(cè)評(píng)采用的是黑盒測(cè)試,執(zhí)行被測(cè)試程序的過(guò)程如下:重定向輸入輸出文件;創(chuàng)建一個(gè)子進(jìn)程;設(shè)置資源限制;用函數(shù)調(diào)用要執(zhí)行的程序。
(4)用來(lái)檢測(cè)程序運(yùn)行情況的思路是這樣的:在對(duì)待評(píng)測(cè)程序進(jìn)行評(píng)測(cè)時(shí),要使用標(biāo)準(zhǔn)的輸入文件,把標(biāo)準(zhǔn)文件輸出的數(shù)據(jù)和待評(píng)測(cè)程序輸出的數(shù)據(jù)比較分析,假設(shè)待評(píng)測(cè)程序的結(jié)果和標(biāo)準(zhǔn)的一樣,那么久可以判斷此待評(píng)測(cè)程序編碼是正確的,如果有出入,就認(rèn)為待評(píng)測(cè)程序是錯(cuò)誤的,當(dāng)然,在檢測(cè)和對(duì)照的過(guò)程中,要確保時(shí)間合適,注意監(jiān)視內(nèi)存情況,假設(shè)超出時(shí)間和內(nèi)存的限制就需要及時(shí)返回錯(cuò)誤代碼,測(cè)評(píng)時(shí)間就是看測(cè)試前后系統(tǒng)時(shí)間差。
2.2 代碼安全檢測(cè)
在檢測(cè)代碼安全性之前,要檢查C語(yǔ)言是否存在安全漏洞,如果有,就好及時(shí)分析,在安全漏洞中破壞性較大的、典型很難發(fā)現(xiàn)的的一共有六種。
(1)存儲(chǔ)越界錯(cuò)誤;
(2)動(dòng)態(tài)內(nèi)存分配錯(cuò)誤:
(3)內(nèi)存泄漏;
(4)類型不一致錯(cuò)誤;
(5)指針錯(cuò)誤;
(6)死循環(huán)。
針對(duì)對(duì)內(nèi)存泄漏和數(shù)組越界兩大類漏洞找到合適的檢測(cè)方法。
2.3 代碼剽竊檢測(cè)
作為代碼剽竊檢測(cè)的最重要的技術(shù)就是計(jì)算兩個(gè)代碼的相似度,也就是通過(guò)一種檢測(cè)手段來(lái)衡量?jī)蓚€(gè)代碼是否具有相似性,代碼相似度計(jì)算的方法一共有兩種,分別是:屬性技術(shù);結(jié)構(gòu)度量。在代碼剽竊檢測(cè)的初始階段,屬性技術(shù)的方法被最早被提出和使用,結(jié)構(gòu)度量的方式是后來(lái)才出現(xiàn)的。這兩中度量的方式共同點(diǎn)是在對(duì)相應(yīng)的程序代碼做分析后,歸納出數(shù)字化的特征,運(yùn)用特征這一向量把不同的屬性綜合起來(lái),表征程序。兩種度量方法的區(qū)別在于,前者僅僅處理各種代碼的統(tǒng)計(jì)屬性,忽略其內(nèi)部結(jié)構(gòu);但是后者主要是針對(duì)程序的內(nèi)部結(jié)構(gòu)進(jìn)行度量,通過(guò)對(duì)分析控制流和嵌套深度的整理,運(yùn)用得出的度量值分析程序特征向量。所以,結(jié)構(gòu)度量法比屬性計(jì)數(shù)法應(yīng)用的更加廣泛,或者可以將兩者結(jié)合起來(lái)檢測(cè)代碼剽竊軟件。
針對(duì)學(xué)校學(xué)生的實(shí)際情況,考慮采用屬性計(jì)數(shù)法采計(jì)算代碼相似程度,且投入較少、易于實(shí)現(xiàn),也方便拓展到不同的語(yǔ)言。在完成代碼相似度的計(jì)算以后,根據(jù)計(jì)算結(jié)果判斷代碼是否是剽竊嫌疑,將所有嫌疑代碼及涉嫌學(xué)生明確列出,供教師進(jìn)行進(jìn)一步審查?;玖鞒倘鐖D1。
3 結(jié)束語(yǔ)
該文提出了一個(gè)基于白箱測(cè)試的C語(yǔ)言在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)方法,并解決了在搭建系統(tǒng)過(guò)程中遇到的一些列問題,方便了教師和學(xué)生對(duì)于源代碼的評(píng)測(cè)。當(dāng)然此平臺(tái)上基本實(shí)現(xiàn)了代碼的自動(dòng)評(píng)測(cè),下一步要做的工作是改進(jìn)剽竊檢測(cè)模塊,以適用教學(xué)需求。
參考文獻(xiàn)
[1]苑文會(huì).黑盒測(cè)試技術(shù)在輔助教學(xué)系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(23):4604-4606.
[2]呂鵬,戴冠中.Linux下Ptrace()調(diào)用的安全分析[J].計(jì)算機(jī)應(yīng)用研究,2005,22(08):102-104.
作者單位
西安交通工程學(xué)院 陜西省西安市 710300