一種增量組合JavaScript程序模塊的方法
【專利摘要】本發(fā)明公開了一種增量組合JavaScript程序模塊的方法,本發(fā)明包括以下步驟:根據(jù)JavaScript程序模塊是否包含動態(tài)語法特性,將程序模塊劃分為靜態(tài)模塊和動態(tài)模塊;使用信賴-保證方法定義靜態(tài)模塊的模塊契約,使用程序證明方法驗(yàn)證靜態(tài)模塊是否滿足其模塊契約;如果靜態(tài)模塊的執(zhí)行過程中需要執(zhí)行動態(tài)模塊,動態(tài)模塊根據(jù)靜態(tài)模塊的模塊契約插入運(yùn)行時檢查代碼;在動態(tài)模塊執(zhí)行時運(yùn)行時檢查代碼,確保動態(tài)模塊的執(zhí)行滿足靜態(tài)模塊的模塊契約。本發(fā)明的組合方法能夠有效的契合JavaScript語言的動態(tài)語法特性和應(yīng)用場合,支持增量組合JavaScript程序。
【專利說明】—種增量組合JavaScr i pt程序模塊的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)軟件驗(yàn)證領(lǐng)域,特別涉及一種增量組合JavaScript程序模塊的方法。
【背景技術(shù)】
[0002]JavaScript語言是一種廣泛應(yīng)用于互聯(lián)網(wǎng)應(yīng)用程序的腳本語言,JavaScript語言具有很好的表達(dá)能力和靈活性,使用JavaScript語言可以提高軟件系統(tǒng)的開發(fā)效率和開發(fā)速度,提高軟件系統(tǒng)的可讀性和可重用性。
[0003]封裝性就是把對象的屬性和行為結(jié)合成一個獨(dú)立的單位,并盡可能隱蔽對象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),封裝有兩個含義:一是把對象的全部屬性和行為結(jié)合在一起,形成一個不可分割的獨(dú)立單位。對象的屬性值(除了公有的屬性值)只能由這個對象的行為來讀取和修改;二是盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一道屏障,與外部的聯(lián)系只能通過外部接口實(shí)現(xiàn)。
[0004]JavaScript語言支持動態(tài)語法特性:動態(tài)類型、隱式類型轉(zhuǎn)換、運(yùn)行時求解和反射等,由于各種動態(tài)語法特性的引入,JavaScript程序違反傳統(tǒng)的程序封裝性原則,很難使用傳統(tǒng)的靜態(tài)方法進(jìn)行模塊化分析,支持JavaScript程序的增量組合。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是針對現(xiàn)有模塊組合方法的不足,提供一種增量組合JavaScript程序模塊的方法。
[0006]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案如下:
步驟1.將JavaScript程序模塊分為靜態(tài)模塊I和動態(tài)模塊D:靜態(tài)模塊#不包含動態(tài)語法特性,支持程序靜態(tài)分析;動態(tài)模塊D包含動態(tài)語法特性,必須在運(yùn)行時進(jìn)行檢查;步驟2.使用信賴-保證方法(rely-guarantee paradigm)定義靜態(tài)模塊#的模塊契約,模塊契約包含三個部分:使用假設(shè)條件(assume condition)定義模塊執(zhí)行的前提條件;使用保證條件(guarantee condition)定義模塊執(zhí)行的期望條件;如果靜態(tài)模塊的執(zhí)行過程插入動態(tài)模塊,使用依賴條件(rely condition)約束動態(tài)模塊的執(zhí)行過程;
步驟3.使用程序證明方法驗(yàn)證靜態(tài)模塊#是否滿足其模塊契約(假設(shè)條件assume、保證條件guarantee、依賴條件rely),驗(yàn)證靜態(tài)模塊#相對于其模型契約滿足正確性具體如下:
3-1.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行前的程序狀態(tài)滿足模塊的假設(shè)條件 如果滿足繼續(xù)執(zhí)行步驟3-2,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步
驟2;
3-2.使用程序證明方法驗(yàn)證靜態(tài)模塊#的執(zhí)行過程滿足模塊的依賴條件re7_F,如果滿足繼續(xù)執(zhí)行步驟3-3,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2 ;
3-3.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行后的程序狀態(tài)確保模塊的保證條件guaran tee,如果滿足則靜態(tài)模塊M滿足其正確性約束,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2;
步驟4.根據(jù)靜態(tài)模塊#的模塊契約,在動態(tài)模塊D中插入運(yùn)行時檢查代碼:一部分檢查代碼負(fù)責(zé)檢查模塊#的的假設(shè)條件assume在依賴條件rely下是否是穩(wěn)定的,另一部分檢查代碼負(fù)責(zé)檢查模塊M的保證條件assume在依賴條件下rely是否是穩(wěn)定的,然后執(zhí)行步驟5 ;
步驟5.運(yùn)行JavaScript程序的模塊,如果執(zhí)行過程插入動態(tài)模塊,執(zhí)行相應(yīng)的運(yùn)行時檢查代碼,如果正確則是正確的模塊組合,如果不正確則是錯誤的模塊組合。
[0007]本發(fā)明的有益效果如下:
本發(fā)明通過分尚動態(tài)語法特性,將JavaScript劃分為靜態(tài)模塊和動態(tài)模塊,靜態(tài)模塊增量組合動態(tài)模塊;使用信賴-保證方法定義JavaScript程序模塊的模塊約束,能夠確保JavaScript程序模塊在動態(tài)語法特性的影響下依然穩(wěn)定,支持JavaScript程序模塊的增量組合。
【專利附圖】
【附圖說明】
[0008]圖1為本發(fā)明使用程序證明方法驗(yàn)證靜態(tài)模塊是否滿足其模塊契約的流程圖。
[0009]圖2為本發(fā)明使用信賴-保證方法增量組合JavaScript程序的流程圖。
【具體實(shí)施方式】
[0010]下面結(jié)合附圖對本發(fā)明作進(jìn)一步說明。
[0011]如圖1、圖2所示,一種增量組合JavaScript程序模塊的方法,具體包括如下步驟:
步驟1.將JavaScript程序模塊分為靜態(tài)模塊I和動態(tài)模塊D:靜態(tài)模塊#不包含動態(tài)語法特性,支持程序靜態(tài)分析;動態(tài)模塊D包含動態(tài)語法特性,必須在運(yùn)行時進(jìn)行檢查;步驟2.使用信賴-保證方法(rely-guarantee paradigm)定義靜態(tài)模塊#的模塊契約,模塊契約包含三個部分:使用假設(shè)條件(assume condition)定義模塊執(zhí)行的前提條件;使用保證條件(guarantee condition)定義模塊執(zhí)行的期望條件;如果靜態(tài)模塊的執(zhí)行過程插入動態(tài)模塊,使用依賴條件(rely condition)約束動態(tài)模塊的執(zhí)行過程;
步驟3.如圖2所示,使用程序證明方法驗(yàn)證靜態(tài)模塊#是否滿足其模塊契約(假設(shè)條件assume、保證條件guarantee、依賴條件rely),驗(yàn)證靜態(tài)模塊#相對于其模型契約滿足正確性具體如下:
3-1.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行前的程序狀態(tài)滿足模塊的假設(shè)條件 如果滿足繼續(xù)執(zhí)行步驟3-2,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步
驟2;
3-2.使用程序證明方法驗(yàn)證靜態(tài)模塊#的執(zhí)行過程滿足模塊的依賴條件re7_F,如果滿足繼續(xù)執(zhí)行步驟3-3,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2 ;
3-3.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行后的程序狀態(tài)確保模塊的保證條件guaran tee,如果滿足則靜態(tài)模塊#滿足其正確性約束,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2; 步驟4.根據(jù)靜態(tài)模塊#的模塊契約,在動態(tài)模塊D中插入運(yùn)行時檢查代碼:一部分檢查代碼負(fù)責(zé)檢查模塊#的的假設(shè)條件assume在依賴條件rely下是否是穩(wěn)定的,另一部分檢查代碼負(fù)責(zé)檢查模塊M的保證條件assume在依賴條件下rely是否是穩(wěn)定的,然后執(zhí)行步驟5 ;
步驟5.運(yùn)行JavaScript程序的模塊,如果執(zhí)行過程插入動態(tài)模塊,執(zhí)行相應(yīng)的運(yùn)行時檢查代碼,如果正確則是正確的模塊組合,如果不正確則是錯誤的模塊組合。
[0012]本發(fā)明實(shí)施方式顯示和描述了本發(fā)明的基本原理、主要特征及優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。本發(fā)明要求保護(hù)范圍由所附的權(quán)利要求書及其等效物界定。
【權(quán)利要求】
1.一種增量組合JavaScript程序模塊的方法,其特征在于包括如下步驟:步驟1.將JavaScript程序模塊分為靜態(tài)模塊I和動態(tài)模塊D:靜態(tài)模塊#不包含動態(tài)語法特性,支持程序靜態(tài)分析;動態(tài)模塊D包含動態(tài)語法特性,必須在運(yùn)行時進(jìn)行檢查;步驟2.使用信賴-保證方法定義靜態(tài)模塊#的模塊契約,模塊契約包含三個部分:使用假設(shè)條件定義模塊執(zhí)行的前提條件;使用保證條件定義模塊執(zhí)行的期望條件;如果靜態(tài)模塊的執(zhí)行過程插入動態(tài)模塊,使用依賴條件約束動態(tài)模塊的執(zhí)行過程; 步驟3.使用程序證明方法驗(yàn)證靜態(tài)模塊#是否滿足其模塊契約,驗(yàn)證靜態(tài)模塊#相對于其模型契約滿足正確性;所述的模塊契約包括:假設(shè)條件、保證條件和依賴條件; 步驟4.根據(jù)靜態(tài)模塊#的模塊契約,在動態(tài)模塊D中插入運(yùn)行時檢查代碼:一部分檢查代碼負(fù)責(zé)檢查靜態(tài)模塊#的假設(shè)條件在依賴條件下是否是穩(wěn)定的,另一部分檢查代碼負(fù)責(zé)檢查靜態(tài)模塊#的保證條件在依賴條件下是否是穩(wěn)定的,然后執(zhí)行步驟5 ; 步驟5.運(yùn)行JavaScript程序的模塊,如果執(zhí)行過程插入動態(tài)模塊,執(zhí)行相應(yīng)的運(yùn)行時檢查代碼,如果正確則是正確的模塊組合,如果不正確則是錯誤的模塊組合。
2.如權(quán)利要求1所述的一種增量組合JavaScript程序模塊的方法,其特征在于驗(yàn)證靜態(tài)模塊#相對于其模型契約滿足正確性具體如下: 3-1.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行前的程序狀態(tài)滿足模塊的假設(shè)條件,如果滿足繼續(xù)執(zhí)行步驟3-2,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2 ; 3-2.使用程序證明方法驗(yàn)證靜態(tài)模塊#的執(zhí)行過程滿足模塊的依賴條件,如果滿足繼續(xù)執(zhí)行步驟3-3,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2 ; 3-3.使用程序證明方法驗(yàn)證靜態(tài)模塊#執(zhí)行后的程序狀態(tài)確保模塊的保證條件,如果滿足則靜態(tài)模塊#滿足其正確性約束,如果不滿足則靜態(tài)模塊#不滿足其模塊契約,返回步驟2。
【文檔編號】G06F9/44GK103530119SQ201310472702
【公開日】2014年1月22日 申請日期:2013年10月12日 優(yōu)先權(quán)日:2013年10月12日
【發(fā)明者】吳明暉, 呂嘉, 顏暉, 應(yīng)晶, 陳天洲 申請人:浙江大學(xué)城市學(xué)院