用于檢測(cè)影響的方法和計(jì)算機(jī)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明關(guān)于用于檢測(cè)由改變應(yīng)用的源代碼而引起的影響的技術(shù),文檔對(duì)象模型 ("Document Object Model",下文中也將其稱為DOM)樹和層疊樣式表("Cascading Style Sheets",下文中也將其稱為CSS)可以從該應(yīng)用提取。
【背景技術(shù)】
[0002] 通過網(wǎng)絡(luò)應(yīng)用(web application)顯示的屏幕可以通過改變?cè)摼W(wǎng)絡(luò)應(yīng)用的源代碼 而改變(例如,通過糾正缺陷、或通過改變規(guī)范)。所以,當(dāng)網(wǎng)絡(luò)應(yīng)用的源代碼被改變時(shí),必 須檢查回歸或退化是否已經(jīng)發(fā)生。正常地,對(duì)此檢查,每次源代碼被改變時(shí)測(cè)試者在操作網(wǎng) 絡(luò)瀏覽器時(shí)執(zhí)行視覺回歸測(cè)試。
[0003] 但是,通過回歸測(cè)試手工地執(zhí)行每一個(gè)測(cè)試是代價(jià)極其高的。于是,正常地,回歸 測(cè)試只對(duì)一部分執(zhí)行,該部分被假定受到網(wǎng)絡(luò)應(yīng)用的源代碼中的改變的影響。但是用這樣 的回歸測(cè)試,歸因于尋找可能受影響的所有部分的失敗,回歸或退化經(jīng)常發(fā)生。
[0004] 而且,例如在可以影響整個(gè)網(wǎng)絡(luò)應(yīng)用的公共JavaScript (注冊(cè)商標(biāo))框架被改變 的情況中,必須對(duì)所有的屏幕執(zhí)行回歸測(cè)試。但是,如果網(wǎng)絡(luò)頁(yè)面是通過使用上文提到的 JavaScript (注冊(cè)商標(biāo))框架層次化的并且是動(dòng)態(tài)地被創(chuàng)建的,對(duì)由改變?cè)创a而引起的 網(wǎng)絡(luò)頁(yè)面上的影響的范圍的調(diào)查是極其困難的。而且,因?yàn)樵诰W(wǎng)絡(luò)應(yīng)用上的回歸測(cè)試是一 次又一次地重復(fù)相似的操作的工作,所以對(duì)于測(cè)試者來(lái)說這是極其枯燥的工作。
[0005] 于是,用于自動(dòng)化在網(wǎng)絡(luò)應(yīng)用上的回歸測(cè)試的多個(gè)軟件被提供。例如,這些軟件 是開源軟件Selenium(見下文提到的非專利文獻(xiàn)1和非專利文獻(xiàn)2至4)和以下商業(yè)產(chǎn) 品、IBM? Rational? Functional Tester (國(guó)際商業(yè)機(jī)器公司)(見下文提到的非專利 文獻(xiàn)5和6)、SmartBear TestComplete (見下文提到的非專利文獻(xiàn)7)和HP? QuickTest Professional (見下文提到的非專利文獻(xiàn)8)。上文提到的Selenium、IBM? Rational? Functional Tester、SmartBear TestComplete 和HP? QuickTest Professional 所有都 采用用于在清楚地指示對(duì)比部分時(shí)執(zhí)行回歸測(cè)試的白名單方法。
[0006] 使用Selenium,通過創(chuàng)建用于網(wǎng)絡(luò)應(yīng)用的測(cè)試用例,回歸測(cè)試幾乎可以完全地自 動(dòng)執(zhí)行。而且,因?yàn)镾elenium使得在多個(gè)網(wǎng)絡(luò)瀏覽器上能夠容易地執(zhí)行回歸測(cè)試,所以可 以增加在網(wǎng)絡(luò)應(yīng)用上的回歸測(cè)試的效率。
[0007] 下文提到的專利文獻(xiàn)1描述了用于應(yīng)用程序的測(cè)試程序,并且此測(cè)試程序引起安 裝應(yīng)用程序的計(jì)算機(jī)起到記錄控制部件、執(zhí)行部件和錯(cuò)誤輸出控制部件的功能,該記錄控 制部件用于在記錄裝置中累積地記錄在測(cè)試用例于該應(yīng)用程序上執(zhí)行時(shí)由該應(yīng)用程序生 成的用戶事件和屏幕事件,該執(zhí)行部件用于讀取累積地記錄在記錄裝置中的用戶事件和屏 幕事件并且通過作為測(cè)試目標(biāo)的應(yīng)用程序連續(xù)地執(zhí)行用戶事件,該錯(cuò)誤輸出控制部件用于 將從由作為測(cè)試目標(biāo)的應(yīng)用程序進(jìn)行的一個(gè)用戶事件的執(zhí)行到下一個(gè)用戶事件的執(zhí)行而 生成的屏幕事件,與從自存儲(chǔ)裝置中讀取出的一個(gè)用戶事件的執(zhí)行到下一個(gè)用戶事件的執(zhí) 行而生成的屏幕事件相比較,以及用于輸出不相符的屏幕事件作為錯(cuò)誤(權(quán)利要求1)。進(jìn) 一步地,專利文獻(xiàn)1描述通過記錄控制部件被累積地記錄在記錄裝置中的屏幕事件是屏幕 改變的差異,并且是要通過文檔對(duì)象模型(DOM)獲取的信息(權(quán)利要求4),以及通過記錄控 制部件被累積地記錄在記錄裝置中的屏幕事件是由通過Xpath和DOM子樹表達(dá)的改變部分 所指示的信息(權(quán)利要求5)。
[0008] 下文提到的專利文獻(xiàn)2描述回歸測(cè)試支持程序,并且該回歸測(cè)試支持程序引起計(jì) 算機(jī)執(zhí)行以下過程:檢測(cè)一個(gè)或多個(gè)被顯示在顯示器上的瀏覽器屏幕中的一個(gè)的顯示內(nèi)容 的更新,當(dāng)每次檢測(cè)到更新時(shí)在第一存儲(chǔ)單元中記錄數(shù)據(jù)(該數(shù)據(jù)包含指示所有被顯示的 瀏覽器屏幕的顯示內(nèi)容的信息和關(guān)于該更新的瀏覽器屏幕的識(shí)別信息),根據(jù)對(duì)數(shù)據(jù)的編 輯指令引用第一存儲(chǔ)單元,以及顯示圖像的清單,這些圖像指示與識(shí)別信息關(guān)聯(lián)的瀏覽器 屏幕的顯示內(nèi)容(權(quán)利要求1)。
[0009] 【引用文獻(xiàn)列表】
[0010] 【專利文獻(xiàn)】
[0011] 【專利文獻(xiàn) 1】JP2009-140155A
[0012] 【專利文獻(xiàn) 2】JP2013-54693A
[0013] 【非專利文獻(xiàn)】
[0014] 【非專利文獻(xiàn)1】"Selenium HQ",(在網(wǎng)絡(luò)上),(于2013年9月26日檢索到), 互聯(lián)網(wǎng)〈URL:http://docs, seleniumhq. org/>
[0015] 【非專利文獻(xiàn) 2】Takashi 0ΚΑΜ0Τ0, "Selenium for automating Web test regardless of browser (1/3) ",(在網(wǎng)絡(luò)上),(于2013年9月27日檢索到),互聯(lián)網(wǎng)
[0016] <http://www. atmarkit. co. jp/ait/articles/0908/19/newsl09. html>
[0017] 【非專利文獻(xiàn) 3】Takashi 0ΚΑΜ0Τ0, "Selenium for automating Web test regardless of browser (2/3) ",(在網(wǎng)絡(luò)上),(于2013年9月27日檢索到),互聯(lián)網(wǎng)
[0018] <http://www. atmarkit. co. jp/ait/articles/0908/19/newsl09_2. html>
[0019] 【非專利文獻(xiàn) 4】Takashi 0ΚΑΜ0Τ0, "Selenium for automating Web test regardless of browser (3/3) ",(在網(wǎng)絡(luò)上),(于2013年9月27日檢索到),互聯(lián)網(wǎng)
[0020] <http://www. atmarkit. co. jp/ait/articles/0908/19/newsl09_3. html>
[0021] 【非專利文獻(xiàn) 5】"Rational Functional Tester (Functional Test/Regression Test)",(在網(wǎng)絡(luò)上),(于2013年9月27日檢索到),互聯(lián)網(wǎng)〈URL:
[0022] http://www_06.ibm.com/software/jp/rational/products/test/rft/>
[0023] 【非專利文獻(xiàn)6】Kazunari H0HSH0H等,"Effective System Development Practice Using Tools-Aiming at Smarter System Development-",IBM Japan, PROVISION Spring No. 69, 2011,從互聯(lián)網(wǎng)可以得到〈URL:
[0024] http://www-〇6. ibm. com/ibm/jp/provision/no69/pdf/69_article3. pdf>
[0025] 【非專利文獻(xiàn) 7】"SMARTBEAR TestComplete, Reducing Cost by Automation of ⑶I Testing",(在網(wǎng)絡(luò)上),(于2013年9月27日檢索到),互聯(lián)網(wǎng)〈URL:
[0026] http://www.xlsoft.com/jp/products/smartbear/testcomplete.html? tab = 0>
[0027] 【非專利文獻(xiàn) 8】"HP QuickTest Professional 10. 0 software",(在網(wǎng)絡(luò)上), (于2013年9月27日檢索到),互聯(lián)網(wǎng)〈URL:
[0028] http://h50146.www5.hp.com/products/software/hpsoftware/solutions/ lineup/qtp/new. html>
【發(fā)明內(nèi)容】
[0029] 【技術(shù)問題】
[0030] 對(duì)于用于應(yīng)用的回歸測(cè)試、用于應(yīng)用的單元測(cè)試、或用于構(gòu)建應(yīng)用的代碼研宄,對(duì) 影響的檢測(cè)是重要的,該影響由改變?nèi)我鈶?yīng)用的源代碼而引起,從該應(yīng)用可以提取DOM樹 和CSS。于是,本發(fā)明具有使得由改變應(yīng)用的源代碼而引起的影響能夠被自動(dòng)檢測(cè)的目標(biāo)。
[0031] 而且,要檢查應(yīng)用與多種網(wǎng)絡(luò)瀏覽器或同一網(wǎng)絡(luò)瀏覽器的不同版本兼容,必須執(zhí) 行"瀏覽器數(shù)量X版本數(shù)量"次數(shù)的測(cè)試,并且這是成本極其高的。進(jìn)一步地,即使網(wǎng)絡(luò)瀏 覽器是相同的,如果對(duì)例如Windows?、Mae OS? x、Liiutx?、And_n)id?和i〇s的 操作系統(tǒng)的每一個(gè)以及對(duì)每一個(gè)支持的版本要檢查應(yīng)用的行為(包含屏幕顯示和除了屏 幕顯示以外的不可見區(qū)域的行為),代價(jià)將會(huì)進(jìn)一步增加。于是,要減少代價(jià),本發(fā)明具有它 的目標(biāo),是要使得能夠自動(dòng)地檢測(cè)由改變應(yīng)用的源代碼而引起的影響。
[0032] 進(jìn)一步地,對(duì)用于在網(wǎng)絡(luò)應(yīng)用上自動(dòng)化回歸測(cè)試的常規(guī)軟件是采用白名單方法的 情況,本發(fā)明具有它的目標(biāo),是要消除單獨(dú)地寫被白名單方法期待的定義(例如"項(xiàng)目X的 值應(yīng)該是ABC"的定義)、測(cè)試用例或統(tǒng)一建模語(yǔ)言(UML,"unified modeling language") 的需要。
[0033] 更進(jìn)一步地,本發(fā)明具有它的目標(biāo),是要使得能夠檢測(cè)關(guān)于設(shè)計(jì)的問題(例如行 偏移量、畫圖失敗、或重疊的項(xiàng)目)。具體地,以使得能夠檢測(cè)沒有在屏幕顯示上示出的差異 (例如,在不可見的區(qū)域中的差異或者歸因于顯示大小的差異)為目標(biāo)。
[0034] 更進(jìn)一步地,本發(fā)明具有它的目標(biāo),是要使得關(guān)于這樣的部分能夠進(jìn)行自動(dòng)的確 定,其中關(guān)于該部分的被白名單方法期待的定義是困難的,并且關(guān)于該部分依賴于用戶的 眼睛。
[0035] 更進(jìn)一步地,本發(fā)明具有它的目標(biāo),是要使得在盡可能地減少用戶的參與的同時(shí) 能夠檢測(cè)由改變應(yīng)用的源代碼而引起的影響。
[0036] 【解決技術(shù)問題的技術(shù)方案】
[0037] 本發(fā)明提供用于檢測(cè)由改變從中可以提取DOM樹和CSS的應(yīng)用的源代碼而引起的 影響的技術(shù)。此技術(shù)可以包含用于檢測(cè)由改變應(yīng)用的源代碼而引起的影響的方法、用于檢 測(cè)該影響的計(jì)算機(jī)、計(jì)算機(jī)程序以及計(jì)算機(jī)程序產(chǎn)品。
[0038] 根據(jù)本發(fā)明的第一方面,用于檢測(cè)由改變從中可以提取DOM樹和CSS的任意應(yīng)用 的源代碼而引起的影響的方法引起計(jì)算機(jī)執(zhí)行以下步驟:
[0039] 保存用戶在應(yīng)用上的輸入操作、和用于當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中 的每一個(gè)定時(shí)的DOM樹和CSS ;
[0040] 源代碼被改變以后,按照操作的順序仿真該輸入操作,并且獲取用于與當(dāng)期待檢 查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)的DOM樹和CSS ;
[0041] 針對(duì)該相同的定時(shí)中的每一個(gè),將在保存步驟中被保存的DOM樹和CSS與在仿真 步驟中被獲取的DOM樹和CSS比較;以及
[0042] 輸出比較的結(jié)果。
[0043] 根據(jù)本發(fā)明的第二方面,用于檢測(cè)由改變從可以提取DOM樹和CSS的任意應(yīng)用的 源代碼而引起的影響的方法引起計(jì)算機(jī)執(zhí)行以下步驟,其中該計(jì)算機(jī)能夠訪問存儲(chǔ)介質(zhì), 在該存儲(chǔ)介質(zhì)中保存用戶在應(yīng)用上的輸入操作歷史以及保存當(dāng)期待檢查屏幕狀態(tài)時(shí)的至 少一個(gè)定時(shí)時(shí)的DOM樹和CSS :
[0044] 源代碼被改變以后,按照操作的順序仿真該輸入操作,并且獲取用于與當(dāng)期待檢 查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)的DOM樹和CSS ;
[0045] 針對(duì)該相同的定時(shí)中的每一個(gè),將被保存在該存儲(chǔ)介質(zhì)中的DOM樹和CSS與在仿 真步驟中被獲取的DOM樹和CSS比較;以及
[0046] 輸出比較的結(jié)果。
[0047] 根據(jù)本發(fā)明的實(shí)施例,根據(jù)上文所描述的第一或第二方面的方法可以進(jìn)一步引起 計(jì)算機(jī)執(zhí)行以下步驟:
[0048] 源代碼被進(jìn)一步改變以后,按照操作的順序仿真該輸入操作,并且獲取用于與當(dāng) 期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)的DOM樹和CSS ;
[0049] 針對(duì)該相同的定時(shí)中的每一個(gè),將源代碼被改變以后被保存的DOM樹和CSS與源 代碼被進(jìn)一步改變以后被保存的DOM樹和CSS比較;以及
[0050] 針對(duì)該相同的定時(shí),輸出將源代碼被改變以后被保存的DOM樹和CSS與源代碼被 進(jìn)一步改變以后被保存的DOM樹和CSS比較的結(jié)果。
[0051] 根據(jù)本發(fā)明的第三方面,用于檢測(cè)由改變從中可以提取DOM樹和CSS的任意應(yīng)用 的源代碼而引起的影響的計(jì)算機(jī)包括以下部件,其中:
[0052] 保存部件,其用于保存用戶在該應(yīng)用上的輸入操作、和用于當(dāng)期待檢查屏幕狀態(tài) 時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)的DOM樹和CSS ;
[0053] 獲取部件,其用于在源代碼被改變以后,按照操作的順序仿真該輸入操作,并且獲 取用于與當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)的DOM樹和 CSS ;
[0054] 比較部件,其用于針對(duì)該相同的定時(shí)中的每一個(gè),將通過該保存部件被保存的DOM 樹和CSS與通過該仿真部件被獲取的DOM樹和CSS比較;以及
[0055] 輸出部件,其用于輸出比較的結(jié)果。
[0056] 根據(jù)本發(fā)明的實(shí)施例,在根據(jù)上文描述的第三方面的計(jì)算機(jī)中,針對(duì)已經(jīng)被保存 的DOM樹中的每一個(gè)DOM元素,該保存部件可以保存將應(yīng)用到DOM元素上的CSS特性以及 該CSS特性的定義位置。
[0057] 根據(jù)本發(fā)明的實(shí)施例,在根據(jù)上文描述的第三方面的計(jì)算機(jī)中,對(duì)已經(jīng)被獲取的 DOM樹中的每一個(gè)DOM元素,該獲取部件可以獲取將應(yīng)用到DOM元素上的CSS特性以及該 CSS特性的定義位置。而且,在將應(yīng)用到DOM元素上的CSS特性未定義的情況中,針對(duì)已經(jīng) 被獲取的DOM樹中的每一個(gè)DOM元素,該獲取部件可以獲取被當(dāng)作初始值而使用的值。
[0058] 根據(jù)本發(fā)明的實(shí)施例,在根據(jù)上文描述的第三方面的計(jì)算機(jī)中,
[0059] 該保存部件可以針對(duì)當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè),捕捉應(yīng) 用上的屏幕快照,
[0060] 該仿真部件可以在與當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相 同的定時(shí)時(shí),捕捉應(yīng)用上的屏幕快照,以及
[0061] 該輸出部件可以響應(yīng)于根據(jù)比較的結(jié)果的差異,顯示通過該保存部件被捕捉的屏 幕快照和通過該仿真部件被獲取的屏幕快照中的每一個(gè)。
[0062] 根據(jù)本發(fā)明的實(shí)施例,在根據(jù)上文描述的第三方面的計(jì)算機(jī)中,該輸出部件可以 響應(yīng)于根據(jù)比較的結(jié)果的差異,用突出的方式顯示該差異,該差異是在通過該保存部件被 捕捉的屏幕快照和通過該仿真部件被獲取的屏幕快照之間的差異。
[0063] 根據(jù)本發(fā)明的第四方面,用于檢測(cè)由改變從中可以提取DOM樹和CSS的任意應(yīng)用 的源代碼而引起的影響的計(jì)算機(jī)包括以下部件,其中該計(jì)算機(jī)能夠訪問存儲(chǔ)介質(zhì),在該存 儲(chǔ)介質(zhì)中保存用戶在應(yīng)用上的輸入操作歷史以及保存當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè) 定時(shí)時(shí)的DOM樹和CSS :
[0064] 獲取部件,其用于在源代碼被改變以后,按照操作的順序仿真該輸入操作,并且獲 取用于與當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)的DOM樹和 CSS ;
[0065] 比較部件,其用于針對(duì)該相同的定時(shí)中的每一個(gè),將被保存在該存儲(chǔ)介質(zhì)中的DOM 樹和CSS與通過該仿真部件被獲取的DOM樹和CSS比較;以及
[0066] 輸出部件,其用于輸出比較的結(jié)果。
[0067] 根據(jù)本發(fā)明的實(shí)施例,根據(jù)上文描述的第四方面的計(jì)算機(jī)能夠訪問的該存儲(chǔ)介質(zhì) 中進(jìn)一步保存,針對(duì)已經(jīng)被保存的DOM樹中的每一個(gè)DOM元素,將應(yīng)用到DOM元素上的CSS 特性以及該CSS特性的定義位置,以及
[0068] 該獲取部件可以針對(duì)已經(jīng)被獲取的DOM樹中的每一個(gè)DOM元素,從該存儲(chǔ)介質(zhì)獲 取將應(yīng)用到DOM元素上的CSS特性以及該CSS特性的定義位置,或者在應(yīng)用到DOM元素上 的CSS特性未定義的情況中,針對(duì)已經(jīng)被獲取的DOM樹中的每一個(gè)DOM元素,獲取被當(dāng)作初 始值而使用的值。
[0069] 根據(jù)本發(fā)明的實(shí)施例,根據(jù)上文描述的第四方面的計(jì)算機(jī)能夠訪問的該存儲(chǔ)介質(zhì) 其中進(jìn)一步保存,針對(duì)當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè),被捕捉的應(yīng)用 上的屏幕快照,其中
[0070] 在與當(dāng)期待檢查屏幕狀態(tài)時(shí)的至少一個(gè)定時(shí)中的每一個(gè)定時(shí)相同的定時(shí)時(shí),該獲 取部件可以捕捉應(yīng)用上的屏幕快照,以及
[0071] 該輸出部件可以響