專利名稱:代碼與功能覆蓋映射系統(tǒng)及其覆蓋映射方法
技術領域:
本發(fā)明涉及軟件功能測試領域,特別涉及一種代碼與功能覆蓋映射系統(tǒng)及其覆蓋映射方法。
背景技術:
白盒測試與黑盒測試是軟件測試采用的兩種主要方法。在白盒測試領域,為了準確掌握測試用例對代碼的覆蓋情況,陸續(xù)推出了商業(yè)化的測試工具,有代表性的有TestBed 工具、CodeTest工具等。這些工具采用程序插裝技術,能夠準確顯示出測試用例所覆蓋的語句、分支和路徑等信息,根據(jù)這些信息,測試人員可以設計新的測試用例覆蓋那些未被當前測試用例所覆蓋的代碼,從而滿足測試充分性要求。這種方法的優(yōu)點是能夠直觀顯示測試用例對代碼的覆蓋情況,其缺點是在設計新的測試用例覆蓋未被覆蓋的代碼時,需要測試人員閱讀代碼,只有對代碼進行分析,才能設計出新的測試用例。這一方面要求測試人員具有較高的程序設計水平,另一方面需要花費大量的精力和時間。與白盒測試方法相對應的是黑盒測試方法,這種方法只關注軟件的功能而不考慮程序代碼結(jié)構(gòu),在測試時只考慮測試用例對軟件功能的覆蓋情況而不關心其對底層程序代碼的覆蓋情況。這種方法的優(yōu)點是直觀、便捷,其缺點表現(xiàn)在三個方面,一是覆蓋粒度較粗。 滿足功能覆蓋標準的測試不一定能夠滿足代碼覆蓋標準;二是無法通過代碼覆蓋信息獲取與其對應的功能覆蓋情況。盡管測試人員通過白盒測試工具獲取了未覆蓋的代碼信息,但如何從功能角度設計新的測試用例覆蓋這些代碼仍然是一個難題;三是無法識別那些底層程序代碼發(fā)生了變化而軟件功能未發(fā)生變化的軟件功能。目前,測試用例對軟件功能的覆蓋信息只能靠人工統(tǒng)計,無商業(yè)化的輔助工具。白盒測試和黑盒測試是軟件測試中不可或缺的兩種方法,但由于缺乏有效的方法,這兩種測試方法一直處于割裂狀態(tài),嚴重影響了測試充分性和效率。
發(fā)明內(nèi)容
本發(fā)明所解決的技術問題是提供一種代碼與功能覆蓋映射系統(tǒng),能夠搭建白盒測試與黑盒測試之間橋梁,充分發(fā)揮白盒測試與黑盒測試各自特長,提高測試充分性和效率。技術方案如下—種代碼與功能覆蓋映射系統(tǒng),包括白盒測試工具,所述白盒測試工具用于提取并顯示出測試用例所覆蓋的代碼,還包括代碼覆蓋信息提取模塊、代碼與控件映射處理模塊和代碼覆蓋與功能覆蓋映射模塊,其中,代碼覆蓋信息提取模塊,用于接收從所述白盒測試工具發(fā)送的代碼覆蓋信息,并從所述代碼覆蓋信息中提取出所覆蓋的程序語句,并將所述程序語句發(fā)送給所述代碼覆蓋與功能覆蓋映射模塊;代碼與控件映射處理模塊,用于分析程序語句中源程序代碼、構(gòu)建語法樹和符號表,在此基礎上實現(xiàn)源程序代碼與軟件界面控件的映射,并將映射關系發(fā)送給代碼覆蓋與功能覆蓋映射模塊;代碼覆蓋與功能覆蓋映射模塊,用于根據(jù)所述源程序代碼與軟件界面控件的映射關系將所述程序語句轉(zhuǎn)換為功能覆蓋信息。進一步所述代碼與控件映射處理模塊進行詞法和語法分析時,所述詞法和語法分析采用類編譯原理技術,對被測軟件源代碼進行詞法和語法分析,通過分析得到所述抽象語法樹和符號表。進一步所述代碼與控件映射處理模塊在圖形用戶界面GUI控件辨識過程中采用深度優(yōu)先搜索技術,遍歷所述抽象語法樹和符號表,得到源代碼中所有的GUI控件。進一步所述代碼與控件映射處理模塊用于生成被測程序的源代碼與GUI控件的代碼控件映射表,通過分析代碼中對GUI控件的定義和使用的語句,得到代碼控件映射表。進一步所述代碼覆蓋與功能覆蓋映射模塊根據(jù)輸入的未覆蓋代碼信息,通過對代碼控件映射表進行搜索,得到相關未覆蓋的圖形用戶界面GUI控件列表,通過遍歷未覆蓋代碼并掃描代碼控件映射表生成未覆蓋GUI控件列表。本發(fā)明所解決的另一個技術問題是提供一種代碼與功能覆蓋映射方法,能夠搭建白盒測試與黑盒測試之間橋梁,充分發(fā)揮白盒測試與黑盒測試各自特長,提高測試充分性禾口效率。技術方案如下一種代碼與功能覆蓋映射方法,包括白盒測試工具用于提取并顯示出測試用例的代碼覆蓋信息,并發(fā)送給代碼覆蓋信息提取模塊;代碼覆蓋信息提取模塊接收從所述白盒測試工具發(fā)送的代碼覆蓋信息,并從所述代碼覆蓋信息中提取出所覆蓋的程序語句,并將所述程序語句發(fā)送給所述代碼覆蓋與功能覆蓋映射模塊;代碼與控件映射處理模塊分析程序語句中源程序代碼、構(gòu)建語法樹和符號表,在此基礎上實現(xiàn)源程序代碼與軟件界面控件的映射,并將映射關系發(fā)送給代碼覆蓋與功能覆蓋映射模塊;代碼覆蓋與功能覆蓋映射模塊根據(jù)所述源程序代碼與軟件界面控件的映射關系將所述程序語句轉(zhuǎn)換為功能覆蓋信息。進一步所述代碼與控件映射處理模塊進行詞法和語法分析時,詞法和語法分析采用類編譯原理技術,對被測軟件源代碼進行詞法和語法分析,通過分析得到抽象語法樹和符號表。進一步所述代碼與控件映射處理模塊在圖形用戶界面GUI控件辨識過程中采用深度優(yōu)先搜索技術,遍歷所述抽象語法樹和符號表,得到源代碼中所有的GUI控件。進一步所述代碼與控件映射處理模塊用于生成被測程序的源代碼與GUI控件的代碼控件映射表,通過分析代碼中對GUI控件的定義和使用的語句,得到代碼控件映射表。進一步所述代碼覆蓋與功能覆蓋映射模塊根據(jù)輸入的未覆蓋代碼信息,通過對代碼控件映射表進行搜索,得到相關未覆蓋的圖形用戶界面GUI控件列表,通過遍歷未覆蓋代碼并掃描代碼控件映射表生成未覆蓋GUI控件列表。技術效果包括
1、本發(fā)明主要解決如何將代碼覆蓋信息轉(zhuǎn)換為功能覆蓋信息技術問題,提供一種將代碼覆蓋信息轉(zhuǎn)換為功能覆蓋信息的方法,從而搭建白盒測試與黑盒測試之間橋梁,充分發(fā)揮白盒測試與黑盒測試各自特長,提高測試充分性和效率。2、本發(fā)明采用代碼與軟件功能映射方法,通過代碼控件映射表,將代碼覆蓋轉(zhuǎn)換為功能覆蓋,測試人員通過功能覆蓋信息,可以簡單、直觀地設計出新的測試用例,這也是本發(fā)明最突出的特點。
圖1是本發(fā)明中代碼與功能覆蓋映射系統(tǒng)的結(jié)構(gòu)框圖;圖2是本發(fā)明中代碼與功能覆蓋映射方法的主流程圖;圖3是本發(fā)明中代碼與控件映射處理模塊的工作流程圖;圖4是本發(fā)明中詞法和語法分析流程圖;圖5是本發(fā)明中控件辨識方法的工作流程圖;圖6是本發(fā)明中代碼控件映射分析的主要工作流程圖;圖7是本發(fā)明中代碼覆蓋與功能覆蓋映射的工作流程圖;圖8是本發(fā)明中第6行至第8行代碼的抽象語法樹;圖9是本發(fā)明中第22行到第M行代碼的抽象語法樹;圖10是本發(fā)明中示例代碼所對應的實際軟件主界面示意圖;圖11是本發(fā)明示例代碼中“測試菜單項1”引導的彈出窗口界面示意圖。
具體實施例方式下面參考附圖和優(yōu)選實施例對本發(fā)明技術方案作詳細描述。如圖1所示,是本發(fā)明中代碼與功能覆蓋映射系統(tǒng)的結(jié)構(gòu)框圖。代碼與功能覆蓋映射系統(tǒng)包括白盒測試工具101、代碼覆蓋信息提取模塊102、 代碼與控件映射處理模塊103和代碼覆蓋與功能覆蓋映射模塊104四部分。其中,白盒測試工具101用于提取并顯示出測試用例對代碼的覆蓋信息,并發(fā)送覆蓋信息給代碼覆蓋信息提取模塊102,代碼覆蓋信息包括所覆蓋的語句、分支和路徑等信息。代碼覆蓋信息提取模塊102用于從代碼覆蓋信息(能夠引起程序執(zhí)行路徑發(fā)生變化的語句)中提取所覆蓋的程序語句,并將程序語句發(fā)送給代碼覆蓋與功能覆蓋映射模塊104。 代碼與控件映射處理模塊103用于實現(xiàn)源程序代碼與軟件界面控件的映射,通過分析源程序代碼,構(gòu)建語法樹和符號表,在此基礎上,找出源程序代碼與軟件界面控件的映射關系, 并將映射關系發(fā)送給代碼覆蓋與功能覆蓋映射模塊104。代碼覆蓋與功能覆蓋映射模塊 104根據(jù)源程序代碼與軟件界面控件的映射關系將程序語句轉(zhuǎn)換為功能覆蓋信息。如圖2所示,是本發(fā)明的主流程圖。步驟201 對源程序代碼進行語法和詞法分析;通過分析,找出代碼中能夠引起程序執(zhí)行路徑發(fā)生變化的語句,構(gòu)建語法樹和符號表。步驟202 對于這些語句,采用插裝的方法設置特殊的標記,作為所覆蓋的程序語句;
步驟203 重新進行二次編譯,并將編譯好的代碼下載到目標機中運行;步驟204 在軟件運行過程中,以文件方式記錄測試用例所覆蓋的程序語句;步驟205 根據(jù)語法樹和符號表,建立源代碼與界面控件映射關系;步驟206 根據(jù)測試用例所覆蓋的程序語句以及源代碼與界面控件映射關系,給出測試用例對軟件功能的覆蓋信息。代碼與控件映射處理模塊103用于實現(xiàn)源程序代碼與軟件界面控件的映射。如圖3所示,代碼與控件映射處理模塊103的工作流程圖。圖中表示了代碼與控件映射處理模塊103的工作流程和各階段中間結(jié)果。步驟301 代碼與控件映射處理模塊103進行詞法和語法分析。詞法和語法分析采用類編譯原理技術,對被測軟件源代碼進行詞法和語法分析,通過分析,得到抽象語法樹和符號表。如圖4所示,是本發(fā)明中詞法和語法分析流程圖。此項分析的主要目的是得到被測軟件源代碼的抽象語法樹和符號表。定義1 抽象語法樹是一棵樹T =〈V,E>,其中V是樹的節(jié)點,由源代碼中的各種語法結(jié)構(gòu)組成;E是樹的邊,負責連接各種語法結(jié)構(gòu)。定義2 符號表是一個表形數(shù)據(jù)結(jié)構(gòu),詞法分析過程中產(chǎn)生的標識符作為符號表的入口,后續(xù)分析得到的信息,如標識符的類型、使用方式、存儲空間等都可以根據(jù)需要加入到表中。詞法和語法分析是生成代碼與界面控件映射關系的基礎。本方案采用通用的方法對被測軟件的源代碼進行詞法和語法分析,由算法2描述。算法 2. Lexical_Syntax_Analyze (P)輸入P 源代碼輸出(AST,SymTable) =P的抽象語法樹和符號表1. TokenStream<-Lexical_Analyze(P)2. (AST, SymTable)<-Syntax_Analyze(TokenStream)3. Return (AST, SymTable)源代碼在經(jīng)過詞法和語法分析后,將得到其抽象語法樹和符號表。算法2的第1 步對源代碼P進行詞法分析,得到P的標記流TokenStream ’第2步以標記流為基礎進行語法分析,得到P的抽象語法樹AST和符號表SymTable ;第3步將AST和SymTable返回。步驟302 :GUI (Graphical User Interface,簡稱GUI,圖形用戶界面又稱圖形用戶接口)控件辨識。采用深度優(yōu)先搜索技術,遍歷抽象語法樹和符號表,得到源代碼中所有的 ⑶I控件(如窗口、按鈕等)。GUI控件是軟件功能的具體體現(xiàn),軟件功能通過控件來實現(xiàn)。GUI控件辨識的目的是找出程序中所設計的所有GUI控件,即通過對抽象語法樹和符號表的分析,辨識出所有的GUI控件。這一步主要通過對抽象語法樹的遍歷和對符號表的查找來完成。主要方法是 以深度優(yōu)先方法遍歷抽象語法樹,如果某個葉子節(jié)點是變量,這時通過查找符號表,可以得到該變量的類型;如果該類型是GUI控件類型,則說明該變量所描述的是一個GUI控件。程序編譯和本方案中的GUI控件辨識都使用了抽象語法樹和符號表,但兩者的目的不同,前者的目的是生成并優(yōu)化目標代碼,而后者的目的是找出源代碼中所有的GUI控件。1、控件類型編程語言不同,其所包含的控件類型也不同,以Java Swing為例,其所包含的控件可以分為如下幾類(1)窗口禾口窗框類 Jffindow, JColorChooser, JComponent, JDesktopPane, JDialog, JEditorPane, JFiIeChooser, JFrame, JInternalFrame, JLayeredPane, JOptionPane, JRootPane, JScrollPane, JSplitPane, JTabbedPane;(2)按鈕類 JButton, JToggleButton, JCheckBox, JCheckBoxMenuItem, JComboBox, JRadioButton, JRadioButtonMenuItem ;(3)菜單類JMenu, JMenuBar, JMenu It em, JPopupMenu ;(4) il^fmA^ JTextArea, JTextComponent, JTextField, JPasswordField ;(5)其它JTree, JViewPort, JScrollBar, JSeparator, JSlider, JSpinner, JTable, JTableHeader, JToolBar, JToolTip, JLabel, JList, JProgressBar0雖然這些控件有各自的使用方法,但是,將某個變量定義為某種控件的方式是由語言本身的規(guī)范確定的,因此,可以根據(jù)這些規(guī)范,采用統(tǒng)一的方法辨識這些控件。2、變量定義方式對控件變量的定義方式主要有2種(1)變量聲明在程序設計語言中,變量聲明負責指出某變量的存在以及其相關的性質(zhì),但并不對其進行初始化。 例如private javax. swing. JButton computeButton ;該語句定義了類型為 javax. swing. JButton 白勺變量 computeButton (2)變量定義在程序設計語言中,變量定義不僅負責指出某變量的存在以及其相關的性質(zhì),還需要對其進行初始化。例如javax. swing. JMenu fi IeMenu = new javax. swing. JMenu ();該語句定義了類型為javax. swing. JMenu的變量fileMenu并使用new語句對其進行了初始化。3、控件辨識方法通過在抽象語法樹中對上述兩種定義方式進行搜索,同時結(jié)合符號表中的內(nèi)容, 就可以辨識出源代碼中所有的控件及其變量。如圖5所示,是本發(fā)明中控件辨識方法的工作流程圖。通過遍歷抽象語法樹和查找符號表,可以生成⑶I控件列表,可以采用算法3進行表達。算法3. GEL_AST_SymTable (AST, SymTable)描述了 GUI 控件辨識算法。算法3. GEL_AST_SymTable (AST, SymTable)輸入AST 源代碼的抽象語法樹輸入SymTable 源代碼的符號表輸出GEL 源代碼中的⑶I控件列表
1. GEL<-[];2.遍歷AST的所有葉子節(jié)點Node3. if (LookUpType (SymTable, Node) = GUI 控件類型)4. GEL<-Node: :GEL5. Return GEL算法3的第1步初始化返回值GEL為空列表;第2步至第4步開始遍歷抽象語法樹AST ;其中第3步調(diào)用函數(shù)LookUpType (SymTable, Node)判斷葉子節(jié)點Node是否為⑶I 控件類型,如果是,則在第4步將該節(jié)點加入返回值GEL列表;抽象語法樹AST遍歷完成后, 第5步將⑶I控件列表GEL返回。步驟303 代碼控件映射分析。采用深度優(yōu)先搜索技術,遍歷抽象語法樹和GUI控件列表,生成代碼控件映射表。代碼與控件映射處理模塊103用于生成被測程序的源代碼與GUI控件的代碼控件映射表。通過分析代碼中對GUI控件的定義和使用的語句,得到代碼控件映射表,工作流程可以使用算法1描述。算法1. GetGUICodeMap (P)輸入P:源代碼輸出T 代碼控件映射表1. (AST, SymTable)<-Lexical_Syntax_Analyze (P)2.⑶IEmtList<_GEL_AST_SymTable(AST, SymTable)3. T<-GCM_AST_GEL(AST, GUIEmtList)4. Return T算法1的第1步以P(被測軟件的源代碼)為參數(shù)調(diào)用函數(shù)LeXiCal_SyntaCtaX_ Analyze,得到P的抽象語法樹AST和符號表SymTable ;第2步以AST和SymTable為參數(shù)調(diào)用算法GEI^ASI^Sym^Table,得到 P 的GUI 控件列表GUIEmtList ;第 3 步以 AST和GUIEmtList 為參數(shù)調(diào)用算法GCM_AST_GEL,得到代碼控件映射表T ;第4步將結(jié)果返回。1.⑶I控件聲明和定義在使用一個GUI控件之前,需要通過聲明和定義一個控件類型的對象來定義該控件。例如在下面的代碼中,首先聲明一個MenuBar類型的對象menuBar,然后使用一個new 語句對該對象進行定義。
權(quán)利要求
1.一種代碼與功能覆蓋映射系統(tǒng),包括白盒測試工具,所述白盒測試工具用于提取并顯示出測試用例的代碼覆蓋信息,其特征在于還包括代碼覆蓋信息提取模塊、代碼與控件映射處理模塊和代碼覆蓋與功能覆蓋映射模塊,其中,代碼覆蓋信息提取模塊,用于接收從所述白盒測試工具發(fā)送的代碼覆蓋信息,并從所述代碼覆蓋信息中提取出所覆蓋的程序語句,并將所述程序語句發(fā)送給所述代碼覆蓋與功能覆蓋映射模塊;代碼與控件映射處理模塊,用于分析程序語句中源程序代碼、構(gòu)建語法樹和符號表,在此基礎上實現(xiàn)源程序代碼與軟件界面控件的映射,并將映射關系發(fā)送給代碼覆蓋與功能覆蓋映射模塊;代碼覆蓋與功能覆蓋映射模塊,用于根據(jù)所述源程序代碼與軟件界面控件的映射關系將所述程序語句轉(zhuǎn)換為功能覆蓋信息。
2.如權(quán)利要求1所述的代碼與功能覆蓋映射系統(tǒng),其特征在于所述代碼與控件映射處理模塊進行詞法和語法分析時,所述詞法和語法分析采用類編譯原理技術,對被測軟件源代碼進行詞法和語法分析,通過分析得到所述抽象語法樹和符號表。
3.如權(quán)利要求2所述的代碼與功能覆蓋映射系統(tǒng),其特征在于所述代碼與控件映射處理模塊在圖形用戶界面GUI控件辨識過程中采用深度優(yōu)先搜索技術,遍歷所述抽象語法樹和符號表,得到源代碼中所有的GUI控件。
4.如權(quán)利要求3所述的代碼與功能覆蓋映射系統(tǒng),其特征在于所述代碼與控件映射處理模塊用于生成被測程序的源代碼與GUI控件的代碼控件映射表,通過分析代碼中對 GUI控件的定義和使用的語句,得到代碼控件映射表。
5.如權(quán)利要求1所述的代碼與功能覆蓋映射系統(tǒng),其特征在于所述代碼覆蓋與功能覆蓋映射模塊根據(jù)輸入的未覆蓋代碼信息,通過對代碼控件映射表進行搜索,得到相關未覆蓋的圖形用戶界面⑶I控件列表,通過遍歷未覆蓋代碼并掃描代碼控件映射表生成未覆蓋⑶I控件列表。
6.一種代碼與功能覆蓋映射方法,包括白盒測試工具用于提取并顯示出測試用例的代碼覆蓋信息,并發(fā)送給代碼覆蓋信息提取模塊;代碼覆蓋信息提取模塊接收從所述白盒測試工具發(fā)送的代碼覆蓋信息,并從所述代碼覆蓋信息中提取出所覆蓋的程序語句,并將所述程序語句發(fā)送給所述代碼覆蓋與功能覆蓋映射模塊;代碼與控件映射處理模塊分析程序語句中源程序代碼、構(gòu)建語法樹和符號表,在此基礎上實現(xiàn)源程序代碼與軟件界面控件的映射,并將映射關系發(fā)送給代碼覆蓋與功能覆蓋映射模塊;代碼覆蓋與功能覆蓋映射模塊根據(jù)所述源程序代碼與軟件界面控件的映射關系將所述程序語句轉(zhuǎn)換為功能覆蓋信息。
7.如權(quán)利要求6所述的代碼與功能覆蓋映射方法,其特征在于所述代碼與控件映射處理模塊進行詞法和語法分析時,詞法和語法分析采用類編譯原理技術,對被測軟件源代碼進行詞法和語法分析,通過分析得到抽象語法樹和符號表。
8.如權(quán)利要求7所述的代碼與功能覆蓋映射方法,其特征在于所述代碼與控件映射處理模塊在圖形用戶界面GUI控件辨識過程中采用深度優(yōu)先搜索技術,遍歷所述抽象語法樹和符號表,得到源代碼中所有的GUI控件。
9.如權(quán)利要求8所述的代碼與功能覆蓋映射方法,其特征在于所述代碼與控件映射處理模塊用于生成被測程序的源代碼與GUI控件的代碼控件映射表,通過分析代碼中對 GUI控件的定義和使用的語句,得到代碼控件映射表。
10.如權(quán)利要求6所述的代碼與功能覆蓋映射方法,其特征在于所述代碼覆蓋與功能覆蓋映射模塊根據(jù)輸入的未覆蓋代碼信息,通過對代碼控件映射表進行搜索,得到相關未覆蓋的圖形用戶界面⑶I控件列表,通過遍歷未覆蓋代碼并掃描代碼控件映射表生成未覆蓋⑶I控件列表。
全文摘要
本發(fā)明公開了一種代碼與功能覆蓋映射系統(tǒng),其結(jié)構(gòu)包括白盒測試工具、代碼覆蓋信息提取模塊、代碼與控件映射處理模塊和代碼覆蓋與功能覆蓋映射模塊。本發(fā)明還公開了一種代碼與功能覆蓋映射方法。本發(fā)明技術方案能夠搭建白盒測試與黑盒測試之間橋梁,充分發(fā)揮白盒測試與黑盒測試各自特長,提高測試充分性和效率。
文檔編號G06F11/36GK102436417SQ201110295759
公開日2012年5月2日 申請日期2011年9月28日 優(yōu)先權(quán)日2011年9月28日
發(fā)明者于秀山, 于長鉞 申請人:于秀山