專利名稱:一種檢測軟件異常輸入處理正確性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測試領(lǐng)域,尤其是指通過分析源程序代碼,檢查軟件對各種異常輸入是否進行了正確處理的方法。
背景技術(shù):
軟件輸入是軟件的“門戶”,是軟件的驅(qū)動源,軟件輸入包括正常輸入和異常輸入,正常輸入處理不當將直接影響軟件功能,異常輸入處理不當將影響軟件容錯性,導致軟件出現(xiàn)各種錯誤。據(jù)統(tǒng)計,由于軟件異常輸入處理不當而造成的軟件錯誤占軟件錯誤的70%以上,由此可見,檢查軟件是否對各種異常輸入進行了處理是發(fā)現(xiàn)軟件錯誤的一個 重要方法?;谠闯绦虼a分析的靜態(tài)測試是軟件測試的一個重要研究領(lǐng)域,通過靜態(tài)測試,可以有效發(fā)現(xiàn)程序在編程規(guī)則、內(nèi)存管理、指針使用、程序結(jié)構(gòu)、控制流、數(shù)據(jù)流等方面存在的缺陷。靜態(tài)測試是國內(nèi)外開展較早的研究領(lǐng)域之一,目前已取得適用性成果,有代表性的有英國LARA公司的TestBed工具、Klocwork公司的Klocwork工具。這些工具根據(jù)不同的程序設(shè)計語言標準,通過對源程序代碼分析,找出程序在符號使用、變量初始化、函數(shù)返回值、內(nèi)存管理、緩沖區(qū)使用、指針使用等方面存在的缺陷。這些工具功能強大,使用方便,在軟件靜態(tài)測試中發(fā)揮了很好作用,但在軟件異常輸入檢測方面欠缺,不能夠?qū)浖斎胧欠襁M行了異常處理進行分析。在軟件異常輸入檢測方面,目前主要是通過人工輸入各種異常值,動態(tài)執(zhí)行軟件的方式檢查軟件異常輸入處理情況。這種方法一方面需要測試人員掌握軟件輸入的邊界值和類型等信息才能設(shè)計出合理的測試用例;另一方面測試工作量大,對于數(shù)據(jù)庫類等輸入字段眾多的軟件,需要測試人員逐一驗證各個字段異常處理的正確性。綜上所述,在軟件異常輸入處理檢測方面,無論是靜態(tài)測試還是動態(tài)測試都存在不足,需要研究一種全新的方法解決這個問題。
發(fā)明內(nèi)容
本發(fā)明所解決的技術(shù)問題是提供一種檢測軟件異常輸入處理正確性的方法,能夠?qū)浖惓]斎胩幚砬闆r進行檢測。技術(shù)方案如下一種檢測軟件異常輸入處理正確性的方法,包括通過詞法和語法分析,得到被測軟件源代碼的抽象語法樹和符號表;遍歷所述抽象語法樹和符號表,得到所述被測軟件源代碼中的輸入控件,所述輸入控件為允許用戶輸入數(shù)據(jù)的控件;對所述輸入控件進行辨識,找出未判斷異常輸入的輸入控件。進一步采用類編譯原理技術(shù),對所述被測軟件源代碼進行詞法和語法分析,通過分析得到所述抽象語法樹和符號表。
進一步在獲取所述輸入控件過程中,以深度優(yōu)先方法遍歷所述抽象語法樹,如果某個葉子節(jié)點是變量,通過查找符號表得到該變量類型;如果所述變量類型是輸入控件類型,則說明該變量所描述的是一個輸入控件。進一步所述輸入控件變量采用變量聲明和變量定義的定義方式,在對所述輸入控件進行辨識過程中,通過在所述抽象語法樹進行搜索,同時結(jié)合符號表中的內(nèi)容,辨識出所述被測軟件源代碼中所有的輸入控件及其變量。進一步對所述輸入控件進行辨識,查找輸入控件列表中的每個輸入控件,然后以深度優(yōu)先方法遍歷抽象語法樹,檢查其中是否有對輸入進行異常判斷的語句,如果沒有,則所述輸入控件就屬于未判斷異常的輸入控件。進一步所述輸入控件包括文本輸入控件、列表控件、可輸入列表控件、表格控件、樹形控件、表格樹控件、彈出式列表控件或者樣式文本控件。技術(shù)效果包括軟件異常輸入是導致軟件出現(xiàn)錯誤的主要原因之一,本發(fā)明的最 大優(yōu)點在于如何檢測是否對異常輸入進行了判斷。通過識別輸入控件,根據(jù)不同輸入控件異常判斷語言特征,找出未進行異常判斷的控件,據(jù)此,開發(fā)人員可以方便地修改軟件;測試人員可以設(shè)計出針對該控件的測試用例,從而大大提高測試的有效性和充分性。
圖I是本發(fā)明中檢測軟件異常輸入處理正確性的方法的工作流程圖;圖2是本發(fā)明中詞法和語法分析的工作流程圖;圖3是本發(fā)明中代碼片段的部分抽象語法樹示意圖;圖4是本發(fā)明中輸入控件辨識工作流程圖;圖5是本發(fā)明中未判斷異常輸入的輸入控件識別的工作流程圖;圖6是本發(fā)明中示例代碼段對應(yīng)的軟件界面示意圖;圖7是本發(fā)明中經(jīng)過詞法和語法分析后示例代碼段的部分抽象語法樹結(jié)構(gòu)示意圖。
具體實施例方式本發(fā)明針對已有方法存在的問題,采用源代碼分析技術(shù),主要解決如何找出程序中沒有對各種異常輸入進行處理的輸入控件問題,從而提高測試充分性,減少測試工作量。下面參考附圖和優(yōu)選實施例,對本發(fā)明技術(shù)方案作詳細描述。如圖I所示,是本發(fā)明中檢測軟件異常輸入處理正確性的方法的工作流程圖,本方案的執(zhí)行過程如下。一、詞法和語法分析該步驟的主要目的是得到被測軟件源代碼的抽象語法樹和符號表。采用類編譯原理技術(shù),對被測軟件源代碼進行詞法和語法分析,通過分析,得到抽象語法樹和符號表。定義I :抽象語法樹是一棵樹T =〈V,E>,其中V是樹的節(jié)點,由源代碼中的各種語法結(jié)構(gòu)組成;E是樹的邊,負責連接各種語法結(jié)構(gòu)。
定義2 :符號表是一個表形數(shù)據(jù)結(jié)構(gòu),詞法分析過程中產(chǎn)生的標識符作為符號表的入口,后續(xù)分析得到的信息,如標識符的類型、使用方式、存儲空間等都可以根據(jù)需要加入到表中。如圖2所示,是本發(fā)明中詞法和語法分析的工作流程圖。詞法和語法分析是生成代碼與界面控件映射關(guān)系的基礎(chǔ)。本方案采用通用的方法對被測軟件的源代碼進行詞法和語法分析,由算法I描述。算法 I. Lexical_Syntax_Analyze (P)輸入P :源代碼輸出(AST,SymTable) P的抽象語法樹和符號表I. TokenStream < -Lexical_Analyze(P)2. (AST, ) SymTable) < -Syntax_Analyze (TokenStream)3. Return (AST, SymTable)源代碼在經(jīng)過詞法和語法分析后,將得到其抽象語法樹和符號表。算法I的第I步對源代碼P進行詞法分析,得到P的標記流TokenStream ;第2步以標記流為基礎(chǔ)進行語法分析,得到P的抽象語法樹AST和符號表SymTable ;第3步將AST和SymTable返回。下面是一個Java Swing的示例代碼片段。I、javax. swing. JMenufileMenu = new javax. swing. JMenu();2、javax. swing. JMenuItemopenFileMenuItem = new javax. swing.JMenuItemO ;3、fileMenu. add(openFileMenuItem);表I是代碼對應(yīng)的符號表
權(quán)利要求
1.一種檢測軟件異常輸入處理正確性的方法,包括 通過詞法和語法分析,得到被測軟件源代碼的抽象語法樹和符號表; 遍歷所述抽象語法樹和符號表,得到所述被測軟件源代碼中的輸入控件,所述輸入控件為允許用戶輸入數(shù)據(jù)的控件; 對所述輸入控件進行辨識,找出未判斷異常輸入的輸入控件。
2.如權(quán)利要求I所述的檢測軟件異常輸入處理正確性的方法,其特征在于采用類編譯原理技木,對所述被測軟件源代碼進行詞法和語法分析,通過分析得到所述抽象語法樹和符號表。
3.如權(quán)利要求I所述的檢測軟件異常輸入處理正確性的方法,其特征在于在獲取所述輸入控件過程中,以深度優(yōu)先方法遍歷所述抽象語法樹,如果某個葉子節(jié)點是變量,通過查找符號表得到該變量類型;如果所述變量類型是輸入控件類型,則說明該變量所描述的是ー個輸入控件。
4.如權(quán)利要求I所述的檢測軟件異常輸入處理正確性的方法,其特征在于所述輸入控件變量采用變量聲明和變量定義的定義方式,在對所述輸入控件進行辨識過程中,通過在所述抽象語法樹進行搜索,同時結(jié)合符號表中的內(nèi)容,辨識出所述被測軟件源代碼中所有的輸入控件及其變量。
5.如權(quán)利要求I所述的檢測軟件異常輸入處理正確性的方法,其特征在于對所述輸入控件進行辨識,查找輸入控件列表中的每個輸入控件,然后以深度優(yōu)先方法遍歷抽象語法樹,檢查其中是否有對輸入進行異常判斷的語句,如果沒有,則所述輸入控件就屬于未判斷異常的輸入控件。
6.如權(quán)利要求I至5任一項所述的檢測軟件異常輸入處理正確性的方法,其特征在于所述輸入控件包括文本輸入控件、列表控件、可輸入列表控件、表格控件、樹形控件、表格樹控件、彈出式列表控件或者樣式文本控件。
全文摘要
本發(fā)明公開了一種檢測軟件異常輸入處理正確性的方法,通過詞法和語法分析,得到被測軟件源代碼的抽象語法樹和符號表;遍歷所述抽象語法樹和符號表,得到所述被測軟件源代碼中的輸入控件,所述輸入控件為允許用戶輸入數(shù)據(jù)的控件;對所述輸入控件進行辨識,找出未判斷異常輸入的輸入控件。本發(fā)明技術(shù)方案能夠檢測軟件是否對異常輸入進行了處理。
文檔編號G06F11/36GK102681932SQ201210017980
公開日2012年9月19日 申請日期2012年1月19日 優(yōu)先權(quán)日2012年1月19日
發(fā)明者于秀山, 于長鉞, 吳玲, 杜旭濤, 楊豹, 遲芳, 黃忠見 申請人:于秀山