新四季網

一種使用多函數契約測試JavaScript函數正確性的方法

2023-09-17 18:19:20

專利名稱:一種使用多函數契約測試JavaScript函數正確性的方法
技術領域:
本發明屬於計算機軟體測試領域,特別是涉及ー種JavaScript函數正確性的測試設計、實現和運行方法。
背景技術:
JavaScript語言是一種廣泛應用於網際網路應用程式的腳本語言,JavaScript語言具有很好的表達能力和靈活性,使用JavaScript語言可以提高軟體系統的開發效率和開發速度,提高軟體系統的可讀性和可重用性。函數是(function)是JavaScript語言的第一類對象,JavaScript程序由ー組函數組成,如果能夠測試JavaScript函數自身的正確性和JavaScript函數組合的正確性,就 可以有效的測試JavaScript程序的正確性。JavaScript語言支持動態類型(dynamical Iy typed)和隱式類型轉換(impliedtype conversion),這兩個語法特徵使得JavaScript函數的相關變量在運行時類型和行為不確定,影響JavaScript函數自身的正確性和函數組合的正確性。現有的函數測試方法基於單ー的函數契約,只能規約和測試類型確定的函數上下文,不能匹配JavaScript語言的動態類型和隱式類型轉換的語法特徵,無法有效測試JavaScript函數的正確性。

發明內容
本發明的目的之ー是通過設計多個函數契約,匹配目標函數的相關變量在運行時的可能類型和可能值,解決由於動態類型和隱式類型轉換引起的JavaScript函數測試困難問題。本發明的目的之一是通過JavaScript語言的運行時求解函數(eval)將提出的多個函數契約轉換為普通的JavaScript程序代碼,在不改變現有JavaScript語言語法的前提下,生成相應的測試代碼。本發明的目的之ー是使用JavaScript語言的面向方面擴展庫jQuery-AOP監控目標JavaScript函數的運行,生成JavaScript函數的運行時監控代碼。本發明的目的之ー針對提出的函數契約設計、提出的函數契約測試代碼和提出的運行時監控代碼,提出ー個函數契約檢測算法,當目標JavaScript函數被調用時,按照一定的步驟對目標JavaScript函數的正確性進行測試。為了實現上述目的,本發明所採取的技術方案是ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於包括以下步驟步驟SOl :根據目標JavaScript函數的函數上下文中相關變量在運行時的可能類型和可能值設計多個函數契約,對於目標函數的類型正確性和行為正確性分別進行規約,步驟S02 :將步驟SOl設計得到的多個函數契約轉換為普通的JavaScript對象數組,並生成對目標函數運行時的監控代碼,步驟S03 :當目標JavaScript函數被調用時,運行時監控代碼根據提出的契約檢測算法測試目標JavaScript函數的正確性,在發現特定類型的錯誤時拋出相應的異常。前述ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟SOl目標函數設計多個函數契約的具體步驟為每ー個函數契約包含函數名稱、類型約束和行為約束三個組成部分,類型約束對目標函數的相關變量的可能類型進行規約,行為約束對目標函數的可能行為進行規約,類型約束和行為約束必須是匹配的。前述ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於所述類型約束包含兩個部分類型約束的前置條件和類型約束的後置條件,類型約束的前置條件對目標函數執行前的相關變量的可能類型進行規約,類型約束的後置條件對目標函數執行後的相關變量的可能類型進行規約。

前述ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於行為約束包括兩個部分行為約束的前置條件和行為約束的後置條件,行為約束的前置條件對目標函數執行前的程序狀態進行規約,行為約束的後置條件對目標函數執行後的程序狀態進行規約。前述ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟S02生成對目標函數運行時的監控代碼的具體步驟為步驟i01 :根據SOl步驟中的函數契約設計生成ー個JavaScript對象-函數契
約對象,函數契約對象由三個部分組成函數名稱、類型約束數組和行為約束數組,類型約束數組包含這個函數的所有類型約束,行為約束數組包含這個函數的所有行為約束,類型約束數組和行為約束數組是一一對應的;步驟i02 :定義ー個函數契約對象數組,將步驟iOl生成的所有函數契約對象放在這個數組中;步驟i03 :逐個訪問步驟i02生成的函數契約對象數組,解析目標函數的類型約束和行為約束,通過字符串連接運算生成一個字符串,字符串是目標函數的監控代碼的字符串形式;步驟i04 :利用JavaScript語言運行時求解函數eval 求解步驟i03生成的字符串,生成目標JavaScript函數的運行時監控代碼,這些運行時監控代碼使用JavaScript語言的面向方面擴展庫jQuery-AOP監控目標函數的運行。前述ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟S03測試目標JavaScript函數的正確性具體步驟為步驟pOl :從函數契約對象數組中取出目標函數的函數契約對象,繼續執行步驟p02 ;步驟P02 :順序訪問函數契約對象的類型約束數組,判斷是否還有類型約束沒有檢測如果不存在,則說明當前函數上下文無法匹配目標函數的任意ー個函數契約,拋出類型異常;如果存在,則從類型約束數組中順序取出下ー個類型約束,繼續執行步驟P03 ;步驟P03 :取出選中類型約束的前置條件,根據函數上下文中相關變量的實際類型,判斷類型約束的前置條件是否滿足如果不滿足,則說明當前函數契約不匹配當前的函數上下文,返回步驟P02 ;如果滿足,繼續執行步驟p04 ;
步驟P04 :根據選中類型約束在類型約束數組中的索引值,取出對應的函數契約對象中的行為約束數組中的行為約束,繼續執行步驟P05 ;步驟p05 :取出選中行為約束中的前置條件,利用JavaScript語言的運行時求解函數evalO檢測行為約束的前置條件是否滿足如果不滿足,則發生行為錯誤,拋出行為異常;如果滿足,則繼續執行步驟P06 ;步驟p06 :執行目標JavaScript函數;步驟P07 :判斷選中函數契約的類型約束的後置條件是否滿足如果不滿足,則發生類型錯誤,拋出類型異常;如果滿足,則進入步驟P08 ; 步驟p08 利用JavaScript語言的運行時求解函數eval 檢測行為約束的後置條件是否滿足如果不滿足,則發生行為錯誤,拋出行為異常;如果滿足,則目標 JavaScript函數行為正常,判定目標JavaScript函數被正確調用。本發明的有益效果是本發明通過提出函數契約設計、提出函數契約測試代碼和提出運行時監控方法,並結合一個函數契約檢測算法,當目標JavaScript函數被調用時,按照一定的步驟對目標JavaScript函數的正確性進行測試,能夠匹配JavaScript語言的動態類型和隱式類型轉換的語法特徵,解決了由於動態類型和隱式類型轉換引起的JavaScript函數測試困難問題。


圖I為本發明提出的使用多函數契約測試JavaScript函數正確性的設計、實現和檢測過程框圖。圖2為本發明提出的將多函數契約設計轉換為JavaScript對象數組,並解析JavaScript對象數組生成目標函數運行時監控代碼的步驟框圖。圖3為本發明提出的運行時函數契約檢測算法步驟,在運行時對JavaScript函數的行為正確性進行檢測的流程框圖。
具體實施例方式下面結合附圖對本發明做進ー步的描述。下面結合圖I說明本發明提出使用多函數契約進行JavaScript函數測試的設計、實現和檢測過程ー種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於包括以下步驟步驟SOl :根據目標JavaScript函數的函數上下文中相關變量在運行時的可能類型和可能值設計多個函數契約,對於目標函數的類型正確性和行為正確性分別進行規約,步驟S02 :將步驟SOl設計得到的多個函數契約轉換為普通的JavaScript對象數組,並生成對目標函數運行時的監控代碼,步驟S03 :當目標JavaScript函數被調用時,運行時監控代碼根據提出的契約檢測算法測試目標JavaScript函數的正確性,在發現特定類型的錯誤時拋出相應的異常。步驟S02中為了規約目標JavaScript函數的類型正確性和相應的行為正確性,為每ー個目標函數設計多個函數契約,每ー個函數契約包含函數名稱、類型約束和行為約束三個組成部分,類型約束對目標函數的相關變量的可能類型進行規約,行為約束對目標函數的可能行為進行規約,類型約束和行為約束必須是匹配的。類型約束包含兩個部分類型約束的前置條件(pre-condition)和類型約束的後置條件(post-condition),類型約束的前置條件對目標函數執行前的相關變量的可能類型進行規約,類型約束的後置條件對目標函數執行後的相關變量的可能類型進行規約;行為約束也包括兩個部分行為約束的前置條件和行為約束的後置條件,行為約束的前置條件對目標函數執行前的程序狀態進行規約,行為約束的後置條件對目標函數執行後的程序狀態進行規約。下面結合圖2說明如何將目標函數的多個函數契約設計轉換為JavaScript對象數組,並生成目標函數的運行時監控代碼。步驟iOl :根據
函數契約設計生成ー個JavaScript對象-函數契約對
象,函數契約對象由三個部分組成函數名稱、類型約束數組和行為約束數組,類型約束數組包含這個函數的所有類型約束,行為約束數組包含這個函數的所有行為約束,類型約束 數組和行為約束數組是一一對應的。步驟i02 :定義ー個函數契約對象數組,將步驟iOl生成的所有函數契約對象放在這個數組中,定義ー個長度可變的數組,具體語句如下var moduleContracts=newArray ,步驟i03 :逐個訪問步驟i02生成的函數契約對象數組,解析目標函數的類型約束和行為約束,通過字符串連接運算生成一個字符串,字符串是目標函數的監控代碼的字符串形式,字符串格式按照jQuery-AOP監控JavaScript函數的around語法形式,具體連接過程如下
權利要求
1.一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於包括以下步驟 步驟SOl :根據目標JavaScript函數的函數上下文中相關變量在運行時的可能類型和可能值設計多個函數契約,對於目標函數的類型正確性和行為正確性分別進行規約, 步驟S02 :將步驟SOl設計得到的多個函數契約轉換為普通的JavaScript對象數組,並生成對目標函數運行時的監控代碼, 步驟S03 :當目標JavaScript函數被調用時,運行時監控代碼根據提出的契約檢測算法測試目標JavaScript函數的正確性,在發現特定類型的錯誤時拋出相應的異常。
2.根據權利要求I所述一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟SOl目標函數設計多個函數契約的具體步驟為每一個函數契約包含函數名稱、類型約束和行為約束三個組成部分,類型約束對目標函數的相關變量的可能類型進行規約,行為約束對目標函數的可能行為進行規約,類型約束和行為約束必須是匹配的。
3.根據權利要求2所述一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於所述類型約束包含兩個部分類型約束的前置條件和類型約束的後置條件,類型約束的前置條件對目標函數執行前的相關變量的可能類型進行規約,類型約束的後置條件對目標函數執行後的相關變量的可能類型進行規約。
4.根據權利要求3所述一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於行為約束包括兩個部分行為約束的前置條件和行為約束的後置條件,行為約束的前置條件對目標函數執行前的程序狀態進行規約,行為約束的後置條件對目標函數執行後的程序狀態進行規約。
5.根據權利要求4所述一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟S02生成對目標函數運行時的監控代碼的具體步驟為 步驟i01 :根據SOl步驟中的函數契約設計生成一個JavaScript對象-函數契約對象,函數契約對象由三個部分組成函數名稱、類型約束數組和行為約束數組,類型約束數組包含這個函數的所有類型約束,行為約束數組包含這個函數的所有行為約束,類型約束數組和行為約束數組是一一對應的; 步驟i02 :定義一個函數契約對象數組,將步驟iOl生成的所有函數契約對象放在這個數組中; 步驟i03 :逐個訪問步驟i02生成的函數契約對象數組,解析目標函數的類型約束和行為約束,通過字符串連接運算生成一個字符串,字符串是目標函數的監控代碼的字符串形式; 步驟i04 :利用JavaScript語言運行時求解函數eval 求解步驟i03生成的字符串,生成目標JavaScript函數的運行時監控代碼,這些運行時監控代碼使用JavaScript語言的面向方面擴展庫jQuery-AOP監控目標函數的運行。
6.根據權利要求5所述一種使用多函數契約測試JavaScript函數正確性的方法,其特徵在於步驟S03測試目標JavaScript函數的正確性具體步驟為 步驟p01 :從函數契約對象數組中取出目標函數的函數契約對象,繼續執行步驟p02 ; 步驟p02 :順序訪問函數契約對象的類型約束數組,判斷是否還有類型約束沒有檢測如果不存在,則說明當前函數上下文無法匹配目標函數的任意一個函數契約,拋出類型異常;如果存在,則從類型約束數組中順序取出下一個類型約束,繼續執行步驟P03 ; 步驟P03 :取出選中類型約束的前置條件,根據函數上下文中相關變量的實際類型,判斷類型約束的前置條件是否滿足如果不滿足,則說明當前函數契約不匹配當前的函數上下文,返回步驟P02 ;如果滿足,繼續執行步驟p04 ; 步驟P04:根據選中類型約束在類型約束數組中的索引值,取出對應的函數契約對象中的行為約束數組中的行為約束,繼續執行步驟P05 ; 步驟p05 :取出選中行為約束中的前置條件,利用JavaScript語言的運行時求解函數eval 檢測行為約束的前置條件是否滿足如果不滿足,則發生行為錯誤,拋出行為異常;如果滿足,則繼續執行步驟P06 ; 步驟p06 :執行目標JavaScript函數; 步驟P07 :判斷選中函數契約的類型約束的後置條件是否滿足如果不滿足,則發生類型錯誤,拋出類型異常;如果滿足,則進入步驟P08 ; 步驟p08 :利用JavaScript語言的運行時求解函數eval 檢測行為約束的後置條件是否滿足如果不滿足,則發生行為錯誤,拋出行為異常;如果滿足,則目標JavaScript函數行為正常,判定目標JavaScript函數被正確調用。
全文摘要
本發明公開了一種使用多函數契約測試JavaScript函數正確性的方法,包括以下步驟根據目標JavaScript函數上下文中相關變量的運行時可能類型和可能值,設計多個函數契約;將設計完成的多個函數契約轉換為JavaScript對象數組,並生成目標JavaScript函數的運行時監控代碼;當目標JavaScript函數被調用時,運行時監控代碼根據一個契約檢測算法檢測目標JavaScript函數的正確性,在發現特定類型的錯誤時拋出相應的異常。本發明測試方法能夠匹配JavaScript語言的動態類型和隱式類型轉換的語法特徵,當目標JavaScript函數被調用時,可以有效測試目標JavaScript函數的正確性。
文檔編號G06F11/36GK102768643SQ20121021605
公開日2012年11月7日 申請日期2012年6月27日 優先權日2012年6月27日
發明者呂嘉, 吳明暉, 金永霞 申請人:河海大學常州校區

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀