新四季網

提供測試用例的方法和裝置製造方法

2023-10-09 16:13:34 3

提供測試用例的方法和裝置製造方法
【專利摘要】本發明公開了一種用於為修改的程序提供測試用例的方法和裝置。上述方法包括:獲取對程序的上一版本進行修改的修改項;將修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前;獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組;獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。所述裝置與上述方法對應。根據上述方法和裝置,基於原有測試用例,針對程序的修改部分提供適用的測試用例,從而提高了提供測試用例的效率。
【專利說明】提供測試用例的方法和裝置

【技術領域】
[0001]本發明涉及用於軟體測試的測試用例,更具體而言,涉及提供測試用例的方法和
>J-U ρ?α裝直。

【背景技術】
[0002]在軟體開發過程中,開發人員針對軟體要實現的功能編寫出程序的原始碼,然後測試人員利用測試用例對基於原始碼構建的軟體進行測試。可以理解,一個程序往往利用條件判斷和跳轉構建多個流程分支,從而形成多個執行路徑。因此,希望選擇適當的測試用例構成測試用例集,使得測試用例集中的各個測試用例能夠分別對應於不同的流程分支,覆蓋不同的執行路徑,從而全面地對程序的各種可能的執行狀況進行測試。為此,在現有技術中,已經提出了符號執行(symbolic execut1n)的方法來分析程序的執行過程。該方法可以用於為程序生成適當的測試用例。
[0003]在符號執行的方法中,針對要測試的程序構建控制流圖(Control FlowGraph,CFG)。控制流圖(CFG)是用有向圖表示一個程序過程的一種抽象數據結構。圖1示例性示出一個程序的控制流圖和對應的執行路徑。具體地,圖1中包含了多個節點以及多個連接節點的有向邊,其中每個節點Ni表示一個程序基本塊,也就是其中沒有任何跳轉的順序語句代碼塊;每個有向邊Ei表示程序中的跳轉,並連接作為跳轉的起點和終點的兩個基本塊(即節點)。由於程序中的跳轉一般通過執行條件來限定,因此一個有向邊對應於從該有向邊的起點節點跳轉到終點節點的執行條件。例如,在一個具體例子中,程序中定義了包括X和y在內的多個變量。在執行節點N1之後,程序判斷變量X和y的值。如果(x+y)>=0,則跳轉到節點N2,如果(x+y)〈O且y>0,則跳轉到節點N3。那麼,有向邊E1對應於執行條件(x+y)>=0 ;有向邊&對應於執行條件(x+y)〈0且y>0。經由不同的有向邊連接不同的節點,可以形成不同的執行路徑。具體地,圖1還示出了不同的執行路徑所對應的有向邊的組合,例如執行路徑P1經由有向邊Etl, E1, E3, E7和E9,執行節點序列N1, N2, N6, N5, Nf。如前所述,每個有向邊對應於從該有向邊的起點節點跳轉到終點節點的執行條件。因此,每個執行路徑Pi可對應於由有向邊的組合所限定的執行條件組,或稱為約束組。接著,可以對該約束組進行求解。如果該約束組無解,則說明執行路徑Pi不可達。對於可達的路徑,可以通過對約束組進行求解獲得程序執行該路徑Pi的條件範圍。進而,可以在該條件範圍內生成測試用例ti。這樣,測試用例ti中的各個參數符合路徑pi的條件範圍,於是,在利用測試用例ti進行測試時,程序必然會沿著路徑pi進行執行,從而實現對路徑pi的測試。也就是說,測試用例ti是適用於執行路徑pi的測試用例。利用同樣的方式,可以針對程序的各個不同執行路徑生成不同的測試用例。如此,生成的不同測試用例就可以覆蓋不同的執行路徑,從而滿足全面測試的要求。
[0004]然而,為滿足用戶對軟體功能的各種需求,許多程序具有複雜的邏輯和大量的流程分支。可以理解,每增加一個流程分支,就會在原有執行路徑的基礎上組合產生出新的執行路徑。因此,執行路徑的數目隨著分支數目的增加而指數級增長。大量的流程分支會產生巨大數目的執行路徑,這又稱為路徑狀態空間爆炸。對於這樣的情況,針對各個執行路徑逐一求解其約束組來生成測試用例的方法由於效率的低下而變得不夠實用。
[0005]另一方面,軟體程序的編寫是逐步完成的。開發人員(對於大型軟體來說,通常是多個開發人員)不斷地向程序原始碼提交修改記錄(track),從而對原始碼進行修改、補充和完善。為了確保經過多次修改的軟體程序能夠正常運行,需要對軟體程序進行回歸測試(regress1n testing),以確定出導致程序出現問題的修改記錄。根據現有技術,在回歸測試過程中,利用同樣的測試用例集對不同版本的程序進行測試。然而,實際上,對程序的每次修改都有可能導致程序的執行路徑發生改變。因此,有可能出現這樣的情況:適用於原版本程序中特定執行路徑的測試用例有可能不再適用於修改後的程序,相反,由於程序修改而生成的新的執行路徑不能找到適用的測試用例。為此,希望針對修改後的程序對測試用例集進行更新,從而提供適用的測試用例。然而,如前所述,一方面程序的邏輯越來越複雜,執行路徑的數量巨大;另一方面,程序的修改非常頻繁。這兩方面的因素使得針對程序的每次修改重新生成測試用例的成本非常高昂。
[0006]因此,希望提出新的方案,能夠更加有效地針對程序的修改提供適用的測試用例。


【發明內容】

[0007]鑑於以上提出的問題,提出本發明,旨在提供一種方案,能夠在原有測試用例的基礎上,針對修改的程序提供適用的測試用例,從而克服現有技術中的至少一部分問題。
[0008]根據本發明一個實施例,提出了一種為修改的程序提供測試用例的方法,包括:獲取對程序的上一版本進行修改的修改項;將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前;獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組;獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。
[0009]根據另一實施例,提出了一種用於為修改的程序提供測試用例的裝置,包括:修改項獲取單元,配置為獲取對程序的上一版本進行修改的修改項;定位單元,配置為將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前;路徑獲取單元,配置為獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組;執行結果獲取單元,配置為獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及確定單元,配置為基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。
[0010]利用上述方法和裝置,基於原有測試用例,針對程序的修改部分提供適用的測試用例。由於避免了針對整個程序重新生成新的測試用例,提高了提供測試用例的效率,相應地,促進了程序的回歸測試過程。

【專利附圖】

【附圖說明】
[0011]通過結合附圖對本公開示例性實施方式進行更詳細的描述,本公開的上述以及其它目的、特徵和優勢將變得更加明顯,其中,在本公開示例性實施方式中,相同的參考標號通常代表相同部件。
[0012]圖1示例性示出一個程序的控制流圖和對應的執行路徑;
[0013]圖2示出了適於用來實現本發明實施方式的示例性計算機系統/伺服器12的框圖;
[0014]圖3示出根據本發明一個實施例的為修改的程序提供測試用例的方法的流程圖;
[0015]圖4示意性示出兩個測試探針之間的控制流圖和執行路徑;
[0016]圖5示出確定適用的測試用例的子步驟;
[0017]圖6示意性示出約束組和組合的約束組的例子;以及
[0018]圖7示出根據本發明一個實施例的提供測試用例的裝置的框圖。

【具體實施方式】
[0019]在附圖中顯示了本公開的一些優選實施方式,下面將參照附圖更詳細地描述這些優選實施方式。然而,可以以各種形式實現本公開,其不應被這裡闡述的實施方式所限制。相反,提供這些實施方式是為了使本公開更加透徹和完整,並且能夠將本公開的範圍完整地傳達給本領域的技術人員。
[0020]所屬【技術領域】的技術人員知道,本發明可以實現為系統、方法或電腦程式產品。因此,本公開可以具體實現為以下形式,即:可以是完全的硬體、也可以是完全的軟體(包括固件、駐留軟體、微代碼等),還可以是硬體和軟體結合的形式,本文一般稱為「電路」、「模塊」或「系統」。此外,在一些實施例中,本發明還可以實現為在一個或多個計算機可讀介質中的電腦程式產品的形式,該計算機可讀介質中包含計算機可讀的程序代碼。
[0021]可以採用一個或多個計算機可讀的介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限於——電、磁、光、電磁、紅外線、或半導體的系統、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、可攜式計算機磁碟、硬碟、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或快閃記憶體)、光纖、可攜式緊湊磁碟只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執行系統、裝置或者器件使用或者與其結合使用。
[0022]計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數據信號,其中承載了計算機可讀的程序代碼。這種傳播的數據信號可以採用多種形式,包括——但不限於——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發送、傳播或者傳輸用於由指令執行系統、裝置或者器件使用或者與其結合使用的程序。
[0023]計算機可讀介質上包含的程序代碼可以用任何適當的介質傳輸,包括一但不限於一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0024]可以以一種或多種程序設計語言或其組合來編寫用於執行本發明操作的電腦程式代碼,所述程序設計語言包括面向對象的程序設計語言一諸如Java、Smalltalk、C++,還包括常規的過程式程序設計語言一諸如」C」語言或類似的程序設計語言。程序代碼可以完全地在用戶計算機上執行、部分地在用戶計算機上執行、作為一個獨立的軟體包執行、部分在用戶計算機上部分在遠程計算機上執行、或者完全在遠程計算機或伺服器上執行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網絡一包括區域網(LAN)或廣域網(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用網際網路服務提供商來通過網際網路連接)。
[0025]下面將參照本發明實施例的方法、裝置(系統)和電腦程式產品的流程圖和/或框圖描述本發明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由電腦程式指令實現。這些電腦程式指令可以提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,從而生產出一種機器,這些電腦程式指令通過計算機或其它可編程數據處理裝置執行,產生了實現流程圖和/或框圖中的方框中規定的功能/操作的裝置。
[0026]也可以把這些電腦程式指令存儲在能使得計算機或其它可編程數據處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令就產生出一個包括實現流程圖和/或框圖中的方框中規定的功能/操作的指令裝置(instruct1nmeans)的製造品(manufacture)。
[0027]也可以把電腦程式指令加載到計算機、其它可編程數據處理裝置、或其它設備上,使得在計算機、其它可編程數據處理裝置或其它設備上執行一系列操作步驟,以產生計算機實現的過程,從而使得在計算機或其它可編程裝置上執行的指令能夠提供實現流程圖和/或框圖中的方框中規定的功能/操作的過程。
[0028]圖2示出了適於用來實現本發明實施方式的示例性計算機系統/伺服器12的框圖。圖2顯示的計算機系統/伺服器12僅僅是一個示例,不應對本發明實施例的功能和使用範圍帶來任何限制。
[0029]如圖2所示,計算機系統/伺服器12以通用計算設備的形式表現。計算機系統/伺服器12的組件可以包括但不限於:一個或者多個處理器或者處理單元16,系統存儲器28,連接不同系統組件(包括系統存儲器28和處理單元16)的總線18。
[0030]總線18表示幾類總線結構中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速埠,處理器或者使用多種總線結構中的任意總線結構的局域總線。舉例來說,這些體系結構包括但不限於工業標準體系結構(ISA)總線,微通道體系結構(MAC)總線,增強型ISA總線、視頻電子標準協會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0031]計算機系統/伺服器12典型地包括多種計算機系統可讀介質。這些介質可以是任何能夠被計算機系統/伺服器12訪問的可用介質,包括易失性和非易失性介質,可移動的和不可移動的介質。
[0032]系統存儲器28可以包括易失性存儲器形式的計算機系統可讀介質,例如隨機存取存儲器(RAM)30和/或高速緩存存儲器32。計算機系統/伺服器12可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統存儲介質。僅作為舉例,存儲系統34可以用於讀寫不可移動的、非易失性磁介質(圖1未顯示,通常稱為「硬碟驅動器」)。儘管圖2中未示出,可以提供用於對可移動非易失性磁碟(例如「軟盤」)讀寫的磁碟驅動器,以及對可移動非易失性光碟(例如⑶-ROM,DVD-ROM或者其它光介質)讀寫的光碟驅動器。在這些情況下,每個驅動器可以通過一個或者多個數據介質接口與總線18相連。存儲器28可以包括至少一個程序產品,該程序產品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執行本發明各實施例的功能。
[0033]具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限於——作業系統、一個或者多個應用程式、其它程序模塊以及程序數據,這些示例中的每一個或某種組合中可能包括網絡環境的實現。程序模塊42通常執行本發明所描述的實施例中的功能和/或方法。
[0034]計算機系統/伺服器12也可以與一個或多個外部設備14 (例如鍵盤、指向設備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機系統/伺服器12交互的設備通信,和/或與使得該計算機系統/伺服器12能與一個或多個其它計算設備進行通信的任何設備(例如網卡,數據機等等)通信。這種通信可以通過輸入/輸出(I/O)接口 22進行。並且,計算機系統/伺服器12還可以通過網絡適配器20與一個或者多個網絡(例如區域網(LAN),廣域網(WAN)和/或公共網絡,例如網際網路)通信。如圖所示,網絡適配器20通過總線18與計算機系統/伺服器12的其它模塊通信。應當明白,儘管圖中未示出,可以結合計算機系統/伺服器12使用其它硬體和/或軟體模塊,包括但不限於:微代碼、設備驅動器、冗餘處理單元、外部磁碟驅動陣列、RAID系統、磁帶驅動器以及數據備份存儲系統等。
[0035]下面結合附圖描述本發明的各個實施例。在這些實施例中,在程序中插入多個測試探針(instrument),用於檢測和輸出程序的執行狀態信息。在對程序進行修改的情況下,將所述修改定位到插入在程序中的兩個測試探針之間,例如在第一測試探針之後和第二測試探針之前,並獲取修改後的程序在兩個測試探針之間的執行路徑。由此,從整個程序中「提取」出了與修改相關的執行路徑。另一方面,獲取修改前的程序在第一測試探針處的執行結果,也就是前一版本的程序在上述執行路徑的開端的執行結果。於是,利用符號執行的方式,結合上述執行結果考慮執行路徑的約束組,就可以確定適用於上述執行路徑的測試用例。
[0036]現在參看圖3,其示出根據本發明一個實施例的為修改的程序提供測試用例的方法的流程圖。如圖所示,該實施例中提供測試用例的方法包括以下步驟:步驟31,獲取對程序的上一版本進行修改的修改項;步驟32,將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前;步驟33,獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組;步驟34,獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及步驟35,基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。下面結合具體例子描述以上各個步驟的執行方式。
[0037]首先,在步驟31,獲取對程序的上一版本進行修改的修改項。在一個例子中,一個修改項對應於對程序代碼的一行進行的修改。在另一個例子中,一個修改項對應於對程序的一個程序塊或一個執行條件進行的修改。在利用符號執行將程序執行過程抽象為控制流圖的情況下,一個修改項可以對應於對程序的一個節點或一個有向邊的修改。
[0038]為了便於描述,假定已經通過測試的程序的上一版本為vl。相應地,Vl版本的程序具有對應的測試用例集Tl,其中包含多個測試用例,分別適用於Vl版本的程序的不同執行路徑。如前所述,在軟體開發過程中,開發人員會不斷地提交修改記錄(track),從而對程序代碼進行修改。一般地,一個修改記錄可以包括若干個修改項。假定在vl版本的程序通過測試之後,開發人員分別提交了多項修改記錄,由此形成了 v2版本的程序。
[0039]通常,可以通過修改記錄資料庫(track knowledge base),或稱為版本管理系統對提交的修改記錄進行管理。版本管理系統的例子包括,ClearCase, CVS, Endevor, RTCz等。上述的版本管理系統可以記錄並管理各個修改記錄的信息。這些信息包括,修改記錄的提交人,修改記錄的提交時間,修改記錄中的各個修改項的信息。修改項的信息可以包括,修改發生的位置,修改的具體內容等。在一個實施例中,可以通過上述各種版本管理系統來獲取修改記錄的信息,進而獲取修改項的信息,從而執行步驟31。在另一種實施方式中,在步驟31,可以直接捕獲開發人員對修改記錄的提交,從而獲取修改項。在另一實施例中,在步驟31,也可以通過直接掃描和對比程序的上一版本vl和當前版本v2的代碼,來獲取修改項的信息。
[0040]對於如上所述獲取的修改項,在步驟32,將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前。為了執行步驟32,需要預先執行在程序中插入測試探針的步驟。在軟體測試領域中,在程序中插入測試探針(又稱為「打樁」)從而監視程序的執行狀態是一種常用的測試方法。一般地,測試探針可以檢測測試探針所在位置處的運行時狀態信息,並輸出相關結果。在一個實施例中,在程序的原始碼中插入多個測試探針。在另一實施例中,測試探針被插入在基於程序的原始碼生成的中間代碼中,從而在不改變原始碼的情況下對測試用例的執行情況進行追蹤。由於插入測試探針的方法在本領域中已經熟知,在此不再描述測試探針的代碼形式、插入過程等細節。需要說明的是,為了使得所插入的測試探針更好地應用於本發明實施例的方法,應注意測試探針的插入間隔和插入位置。實際上,在程序中插入多個測試探針相當於利用測試探針位置將整個程序劃分為不同長度的程序段,從而實現對程序的分段監測和控制。因此,適當的測試探針間隔對應於適當長度的程序段。測試探針間隔太小會使得劃分的程序段太短,並且相應地,測試探針數目過多也會影響程序的執行效率。而測試探針間隔太大則會使得劃分的程序段太長,難以起到分段監測和控制的目的。因此,應根據程序本身的長度、分支等特點來確定測試探針插入間隔和插入位置。在一個實施例中,以上插入測試探針的步驟作為本發明方法的一部分在圖3的步驟31,32之前執行。在另一實施例中,插入測試探針的步驟在執行本發明的方法之前預先進行,從而為本發明的方法的執行提供基礎。
[0041]在程序中已經插入了多個測試探針的基礎上,在步驟32,將步驟31獲取的修改項定位到插入在程序中的兩個測試探針之間。特別地,這兩個測試探針中位於修改項之前的測試探針被稱為第一測試探針,位於修改項之後的測試探針被稱為第二測試探針,或者說,修改項被定位在第一測試探針之後,第二測試探針之前。在一個實施例中,在步驟32,從修改項的位置開始沿著程序代碼向前回溯,所遇到的第一個測試探針可以被確定為上述第一測試探針;類似地,從修改項的位置沿著程序代碼向後行進,所遇到的第一個測試探針可以被確定為上述第二測試探針。也就是說,第一測試探針和第二測試探針分別是位於修改項之前和之後、距離修改項最近的兩個測試探針;在第一測試探針和第二測試探針之間不存在其他測試探針。然而,這並不是必須的。在其他實施例中,也可以將其他兩個測試探針作為第一測試探針和第二測試探針,只要這兩個測試探針所定義的程序段中包含有上述修改項。
[0042]在定位出第一測試探針和第二測試探針的基礎上,在步驟33,獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組。在一個實施例中,首先獲取第一測試探針和第二測試探針之間的特定程序段,然後確定該特定程序段對應的執行路徑。如前所述,插入在程序中的測試探針可以將整個程序劃分為若干程序段。相應地,第一測試探針和第二測試探針限定了包含修改項在內的特定程序段。對於該特定程序段,可以利用現有技術中符號執行的方式,獲取該特定程序段對應的執行路徑。或者,在另一實施例中,可以首先獲取整個程序的完整執行路徑,然後從完整執行路徑中截取出第一測試探針和第二測試探針之間的執行路徑。如本領域技術人員所知,執行路徑限定了程序中各個程序塊(控制流圖中的節點)的執行順序和執行條件(連接節點的有向邊)。通過組合程序塊之間的執行條件,可以獲得執行路徑所對應的約束組。由此,在步驟33,從整個程序中提取出了與修改項相關的執行路徑,並獲取了與執行路徑對應的約束組。
[0043]可以理解,修改後的程序在第一測試探針和第二測試探針之間可能具有多個不同的執行路徑。並且,由於第一測試探針和第二測試探針限定的程序段涉及修改項,因此,第一測試探針和第二測試探針之間的至少一部分執行路徑相對於程序上一版本的對應部分存在改變。圖4示意性示出兩個測試探針之間的控制流圖和執行路徑。具體地,第一測試探針位於節點Al之前,第二測試探針位於節點A9之後。圖4A示出上一版本vl的程序在第一測試探針和第二測試探針之間的控制流圖。根據該流控制圖,上一版本的程序在第一測試探針和第二測試探針之間存在兩個執行路徑Pl和P2,其中pi經由有向邊El,E2,E3,E4, E5, E9 執行節點序列 A1-A2-A3-A4-A5-A6-A9, p2 經由有向邊 El, E2, E3, E4, E6, E7, E8執行節點序列A1-A2-A3-A4-A5-A7-A8-A9。假定經過修改,形成了修改後的版本,即當前版本v2的程序。圖4B示出修改後的程序在第一測試探針和第二測試探針之間的控制流圖。如圖所示,相比於前一版本vl,版本v2修改了連接A5和A6的條件,即將有向邊E5修改為E5』,添加了連接A7和A6的有向邊E10,並將節點A8修改為A8』。由此,修改後的程序在第一測試探針和第二測試探針之間具有三個執行路徑pl』,p2』和ρ3,其中路徑ρΓ經由有向邊 El, Ε2, Ε3, Ε4, Ε5,,Ε9 執行節點序列 Α1-Α2-Α3-Α4-Α5-Α6-Α9,路徑 ρ2,經由有向邊 El,Ε2, Ε3, Ε4, Ε6, Ε7, Ε8 執行節點序列 Α1-Α2-Α3-Α4-Α5-Α7-Α8』 -Α9,路徑 ρ3 經由有向邊 Ε1,Ε2, Ε3, Ε4, Ε6, Ε10, Ε9 執行節點序列 Α1-Α2-Α3-Α4-Α5-Α7-Α6-Α9。
[0044]在以上的三個路徑中,路徑P I』與上一版本的路徑PI相比,經由不同的有向邊組合執行了相同的節點序列。對此,可以將相對於原執行路徑修改了執行條件但執行相同節點序列的執行路徑稱為修改的執行路徑。因此,修改的執行路徑ρΓ與原路徑Pi相對應。路徑Ρ2』與上一版本的路徑ρ2相比,經由相同的有向邊組合執行了類似的節點序列(僅是將節點AS修改為AS』)。由於執行路徑所對應的約束組僅與有向邊的組合相關,因此,路徑Ρ2』實際上與原路徑ρ2具有完全相同的約束組。在此意義上,將執行條件完全相同的路徑稱為相同的執行路徑。因此,可以認為,路徑Ρ2』相對於原路徑ρ2未發生實質改變。而路徑Ρ3與原有的任何路徑相比,經由完全不同的有向邊組合,執行了完全不同的節點序列,因此,被稱為新建的執行路徑。
[0045]可以理解,圖4僅僅是以示例的方式示出第一測試探針和第二測試探針之間的執行路徑。在其他例子中,兩個測試探針之間可以具有更多、更複雜的執行路徑。並且,出於示例的目的,圖4Β同時示出了幾種典型的修改。在其他例子中,修改項可以涉及以上修改類型的一部分,或者涉及其他修改內容。
[0046]如圖4示例性示出的,通過程序的修改,第一測試探針和第二測試探針之間的多個執行路徑相對於上一版本發生了改變。於是,適用於上一版本的程序的原有測試用例有可能不再適用於修改後的程序的執行路徑,也就是步驟33所獲取的執行路徑。為此,在接下來的步驟34和35,基於原有測試用例,確定適用的測試用例。
[0047]具體地,在步驟34,獲取第一測試探針輸出的利用原有測試用例執行上一版本的程序的執行結果。如前所述,可以假定上一版本vl的程序已經通過測試,測試所使用的測試用例集為Tl。該測試用例集Tl中包含多個測試用例,分別適用於vl版本的程序的不同執行路徑。由於已經在程序中插入有測試探針,在利用Tl中某個測試用例t測試並執行vl版本的程序時,所插入的測試探針可以輸出測試探針所在位置在運行時的執行結果。因此,在步驟34,通過讀取第一測試探針的輸出,可以獲取並記錄利用原測試用例集中的原有測試用例執行上一版本的程序時,在第一測試探針處的執行結果。所輸出的執行結果可以包括,程序在運行到第一測試探針的位置時各個變量和參數的取值、狀態等。由於第一測試探針位於步驟33所獲取的執行路徑的開端,因此可以將這樣的執行結果作為上述執行路徑的初始條件,並結合執行路徑本身對應的約束組,來確定執行路徑適用的測試用例,也就是執行步驟35。
[0048]圖5示出確定適用的測試用例的子步驟,即上述步驟35的子步驟。如圖5所示,首先,在步驟351,利用步驟34獲取的執行結果進一步限定步驟33獲取的約束組,從而形成組合的約束組;在步驟352,對上述組合的約束組進行求解;並且,在步驟353,根據步驟352求解的結果,判斷原有測試用例是否適用於執行路徑。
[0049]具體地,假定步驟33獲取了執行路徑P,其對應的約束組為C。另一方面,在步驟34獲取了利用原有測試用例t執行上一版本vl的程序時第一測試探針所輸出的執行結果R0於是,在上述步驟351,將執行結果R作為約束組C的初始條件,也就是,用執行結果R進一步限定約束組C,由此形成組合的約束組C』。接著,在步驟352,與現有技術中約束組求解類似地,對組合的約束組C』進行求解。求解的結果可以用於判斷上述原有測試用例t是否適用於執行路徑P。
[0050]圖6示意性示出約束組和組合的約束組的例子。具體地,圖6的左側示出了第一測試探針和第二測試探針之間的某個執行路徑P對應的約束組。該約束組涉及多個變量,並限定了變量之間的關係。在這些變量中,將第一測試探針之前定義的變量,例如變量a和b,稱為全局變量,並以「global」進行標識;將第一測試探針之後新定義的變量,例如變量X,1,X,稱為局部變量,並以「local」進行標識。由於全局變量是在第一測試探針之前進行定義的,在利用測試用例運行到第一測試探針處時,全局變量可以被賦予具體的狀態或取值。假定在利用原有測試用例t運行vl版本程序時,第一測試探針輸出的執行結果R包括a=5,b=6,如圖6所示。將執行結果R與執行路徑P的約束組進行組合,就可以獲得圖6右側所示的組合的約束組。該組合的約束組是對部分變量進行賦值的條件組,可以利用現有技術中的方法進行求解。可以理解,出於簡單和清楚的目的,圖6的約束組中僅示出了涉及全局變量和局部變量兩者的條件,省略了僅與局部變量相關的局部條件組。局部條件組的添加並不影響與全局變量相關的條件的求解。並且,圖6僅示出了一個特定例子。在其他實施例中,第一測試探針輸出的執行結果可能涉及更多的全局變量。
[0051]對於例如圖6所示的組合的約束組,可以利用常規約束組求解方法進行求解,並基於求解結果判斷原有測試用例是否適用於執行路徑。具體地,根據符號執行的原理,如果組合的約束組C』有解,則說明,在執行原有測試用例t的情況下,執行路徑P仍然是可達的路徑,也就是說,原有測試用例t適用於執行路徑P。因此,進一步地,在一個實施例中,步驟353的判斷包括步驟354,在上述組合的約束組有解的情況下,將原有測試用例確定為適用於執行路徑的測試用例。另一方面,判斷步驟353還可包括步驟355,在組合的約束組無解的情況下,確定上述原有測試用例不適用於執行路徑。
[0052]在一個實施例中,確定適用的測試用例的步驟35還包括步驟356,基於原有測試用例,生成適用於上述執行路徑的新的測試用例。該步驟356典型地適用於原有測試用例不適用於執行路徑的情況下,因此,在圖5中被示出為在步驟355之後執行。然而,在一個實施例中,也可以在原有測試用例適用於執行路徑的情況下執行步驟356,從而進一步為執行路徑提供更多適用的測試用例。
[0053]一般地,為了生成適用的新的測試用例,仍然要考慮組合的約束組。由於組合的約束組是基於測試用例的執行結果和執行路徑對應的約束組,因此,可以通過修改執行結果和/或約束組來使得組合的約束組有解,從而產生新的測試用例。具體地,在一個實施例中,生成新的測試用例的步驟356包括,修改約束組中與局部變量相關的參數設置,使得組合的約束組有解;以及基於修改的參數設置生成新的測試用例。下面參照圖6所示的例子描述以上過程。如圖6所示,執行路徑P所對應的約束組至少涉及全局變量a和b,以及局部變量x,y,x,並限定了這些變量之間的關係。另一方面,測試用例t的執行結果限定了全局變量a=5,b=6。在一個例子中,某個局部變量,例如x,被設置為讀取自某個外部文件,或者接收自用戶輸入。通過修改該局部變量的參數設置,例如修改上述外部文件,或修改用戶輸入,可以使得該局部變量具有不同的取值,從而滿足組合的約束組中的條件(例如滿足(local) x〈 (global) b=6),也就是使得該組合的約束組有解。在此情況下,將原測試用例與修改的參數設置相結合,就可以獲得適用於執行路徑P的新的測試用例。
[0054]在另一個實施例中,生成新的測試用例的步驟356包括,修改執行結果,使得組合的約束組有解;從第一測試探針開始利用數據流分析向前回溯,確定產生修改的執行結果的測試用例,將其作為新的測試用例。下面依然參照圖6所示的例子描述該實施例的過程。在圖6中,原測試用例t的執行結果限定了全局變量a=5,b=6。假定該執行結果使得圖6所示的組合的約束組無解。特別地,假定在b=6的情況下,組合的約束組由於其中的條件(local)x< (global)b無法得到滿足而無解。為此,可以修改執行結果,特別是修改全局變量b的取值,使得組合的約束組有解。例如,假定將執行結果修改為a=5,b=10可以使得組合的約束組有解。對於如此修改的執行結果,可以利用數據流分析的方法,從第一測試探針的位置向前回溯,從而反過來確定,什麼樣的測試用例可以在第一測試探針處產生如上所述修改的執行結果。在一個實施例中,可以預先設定向前回溯的長度,例如向前回溯兩個測試探針的程序段。此外,數據流分析的方法在本領域中已經公知,可以用於追蹤各個變量的取值過程,從而確定相應的測試用例。如此確定出的產生修改的執行結果的測試用例必然可以滿足組合的約束組中的條件,因此可以作為適用於上述執行路徑的新的測試用例。
[0055]儘管以上給出了產生新的測試用例的具體例子,但是本發明並不限於具體例子所示出的方法。本領域技術人員可以對以上詳細描述的方法進行修改、組合,從而利用更多種實施方式來產生新的測試用例。這些修改和組合的實施例也應包含在本發明構思之內。
[0056]此外,對於圖5所示的步驟,可以理解,在不同實施例中,可以選擇性地僅執行其中的一部分步驟,或者對部分步驟進行多次執行。在一個實施例中,對於特定執行路徑P,可以分別針對原有測試用例集中的每個測試用例執行圖5的步驟351-353,以分別判斷各個測試用例是否適用於該執行路徑P。在另一實施例中,一旦確定某個原有測試用例適用於該執行路徑P,就不再判斷原有測試用例集中的其他測試用例;也就是說,只要確保測試用例集中存在適用於執行路徑P的原有測試用例即可。在一個實施例中,在確定原有測試用例中的所有測試用例均不適用於執行路徑P的情況下,才執行步驟356。
[0057]根據一種實施方式,對於不同的執行路徑進行不同的處理。在一個實施例中,步驟33獲取的執行路徑P與上一版本的程序中的某個原有路徑相同。對此,可以直接將適用於所述原有路徑的原有測試用例確定為適用於執行路徑P的測試用例。例如,圖4所示的執行路徑P2』與上一版本中的原有路徑p2相同。因此,可以將原有測試用例集中用於路徑p2的測試用例確定為適用於P2』的測試用例。
[0058]在一個實施例中,步驟33獲取的執行路徑是與上一版本的特定原有路徑相對應的修改的執行路徑。例如,在圖4中,執行路徑ρΓ是與原有路徑pi對應的修改的執行路徑。此時,可以假定,在原有測試用例集中,適用於該特定原有路徑(例如Pl)的特定原有測試用例更有可能適用於該修改的執行路徑(例如ρΓ )。因此,首先針對該特定原有測試用例執行圖5的方法。在一個實施例中,在該特定原有測試用例不適用的情況下,執行步驟356,基於該特定原有測試用例產生新的測試用例,而不再判斷其他的原有測試用例;在另一實施例中,在該特定原有測試用例不適用的情況下,進一步利用圖5的步驟判斷原有測試用例集中的其他原有測試用例。
[0059]在一個實施例中,步驟33獲取的執行路徑是新建的執行路徑,例如圖4中的執行路徑Ρ3。此時,可以利用圖5的步驟351-353,逐一判斷各個原有測試用例是否適用於該新建的執行路徑。在確定原有測試用例集中的所有測試用例均不適用於該新建的執行路徑的情況下,才執行步驟356,生成新的測試用例。
[0060]可以理解,對於生成的新的測試用例,可以將其添加到測試用例集中,從而對測試用例集進行更新,使其適用於修改的程序。
[0061]在一個實施例中,還將修改後程序不再需要的測試用例從原有測試用例集中刪除,從而更新測試用例集。具體地,對於特定的原有測試用例t,逐一判斷該原有測試用例t適用於第一測試探針和第二測試探針之間的哪個執行路徑。在該原有測試用例t不適用於任一執行路徑的情況下,將該原有測試用例t確定為不需要的測試用例,將其從測試用例集T中刪除,從而更新測試用例集T。
[0062]通過以上的方法,為修改的程序提供了適用的測試用例。
[0063]基於同樣的發明構思,本發明還提供一種用於提供測試用例的裝置。圖7示出根據本發明一個實施例的提供測試用例的裝置的框圖。如圖所示,用於為修改的程序提供測試用例的裝置總體上標註為700。具體地,裝置700包括:修改項獲取單元701,配置為獲取對程序的上一版本進行修改的修改項;定位單元702,配置為將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前;路徑獲取單元703,配置為獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組;執行結果獲取單元704,配置為獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及確定單元705,配置為基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。
[0064]根據一個實施例,裝置700還包括測試探針插入單元(未示出),配置為在所述程序中插入多個測試探針。
[0065]根據一個實施例,上述第一測試探針和第二測試探針分別是位於所述修改項之前和之後、距離修改項最近的測試探針。也就是說,在第一測試探針和第二測試探針之間不存在其他的測試探針。
[0066]根據一個實施例,上述確定單元705包括(未示出):形成模塊,配置為利用所述執行結果進一步限定所述約束組以形成組合的約束組;求解模塊,配置為對所述組合的約束組進行求解;判斷模塊,配置為根據求解的結果,判斷所述原有測試用例是否適用於所述執行路徑。
[0067]根據一個實施例,上述判斷模塊配置為,在組合的約束組有解的情況下,將所述原有測試用例確定為適用於所述執行路徑的測試用例。
[0068]根據一個實施例,上述判斷模塊配置為,在組合的約束組無解的情況下,確定所述原有測試用例不適用於所述執行路徑。
[0069]在一個實施例中,確定單元705還包括生成模塊,配置為基於所述原有測試用例,生成適用於所述執行路徑的新的測試用例。
[0070]根據一個實施例,上述生成模塊配置為:修改所述約束組中與局部變量相關的參數設置,使得組合的約束組有解;以及,基於修改的參數設置生成新的測試用例。
[0071]根據一個實施例,上述生成模塊配置為:修改所述執行結果,使得組合的約束組有解;從第一測試探針開始利用數據流分析向前回溯,確定產生修改的執行結果的測試用例,將其作為新的測試用例。
[0072]根據一個實施例,上述執行路徑是與上一版本的程序中的特定原有路徑相對應的修改的執行路徑,上述原有測試用例適用於該特定原有路徑。
[0073]上述單元和模塊的具體執行方式對應於結合具體例子對圖3和圖5的各個步驟的描述,在此不再贅述。可以理解,圖7中的各個單元是以功能進行劃分的。儘管在圖7中將這些單元示出為包含在裝置700之內,但是這並不意味著所有的單元必須物理地駐留在同一平臺上或包含在同一軟體模塊內。在一個實施例中,裝置700作用為獨立的裝置或工具;在另一實施例中,裝置700的部分單元可以結合到現有的工具或模塊中。
[0074]利用本發明實施例的方法和裝置,對於修改的程序,可以從整個程序中提取出修改相關路徑,並基於原有測試用例,確定出適用於修改相關路徑,進而適用於修改的程序的測試用例。由此,避免了針對整個程序重新生成新的測試用例所可能面臨的路徑狀態空間爆炸,提高了提供測試用例的效率。
[0075]本領域技術人員可以理解,附圖中的流程圖和框圖顯示了根據本發明的多個實施例的系統、方法和電腦程式產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用於實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標註的功能也可以以不同於附圖中所標註的順序發生。例如,兩個連續的方框實際上可以基本並行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基於硬體的系統來實現,或者可以用專用硬體與計算機指令的組合來實現。
[0076]以上已經描述了本發明的各實施例,上述說明是示例性的,並非窮盡性的,並且也不限於所披露的各實施例。在不偏離所說明的各實施例的範圍和精神的情況下,對於本【技術領域】的普通技術人員來說許多修改和變更都是顯而易見的。本文中所用術語的選擇,旨在最好地解釋各實施例的原理、實際應用或對市場中的技術的技術改進,或者使本【技術領域】的其它普通技術人員能理解本文披露的各實施例。
【權利要求】
1.一種為修改的程序提供測試用例的方法,包括: 獲取對程序的上一版本進行修改的修改項; 將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前; 獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組; 獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及 基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。
2.根據權利要求1的方法,還包括,在所述程序中插入多個測試探針。
3.根據權利要求1的方法,其中所述第一測試探針和第二測試探針分別是位於所述修改項之前和之後、距離修改項最近的測試探針。
4.根據權利要求1的方法,其中確定適用於所述執行路徑的測試用例包括: 利用所述執行結果進一步限定所述約束組以形成組合的約束組; 對所述組合的約束組進行求解; 根據求解的結果,判斷所述原有測試用例是否適用於所述執行路徑。
5.根據權利要求4的方法,其中所述判斷包括,在所述組合的約束組有解的情況下,將所述原有測試用例確定為適用於所述執行路徑的測試用例。
6.根據權利要求4的方法,其中所述判斷包括,在所述組合的約束組無解的情況下,確定所述原有測試用例不適用於所述執行路徑。
7.根據權利要求4或6的方法,其中確定適用於所述執行路徑的測試用例還包括,基於所述原有測試用例,生成適用於所述執行路徑的新的測試用例。
8.根據權利要求7的方法,其中生成適用於所述執行路徑的新的測試用例包括:修改所述約束組中與局部變量相關的參數設置,使得組合的約束組有解;以及,基於修改的參數設置生成新的測試用例。
9.根據權利要求7的方法,其中生成適用於所述執行路徑的新的測試用例包括:修改所述執行結果,使得組合的約束組有解;從第一測試探針開始利用數據流分析向前回溯,確定產生修改的執行結果的測試用例,將其作為新的測試用例。
10.根據權利要求1的方法,其中所述執行路徑是與所述上一版本的程序中的特定原有路徑相對應的修改的執行路徑,所述原有測試用例適用於該特定原有路徑。
11.一種為修改的程序提供測試用例的裝置,包括: 修改項獲取單元,配置為獲取對程序的上一版本進行修改的修改項; 定位單元,配置為將所述修改項定位到插入在程序中的多個測試探針中的第一測試探針之後和第二測試探針之前; 路徑獲取單元,配置為獲取修改後的程序在所述第一測試探針和第二測試探針之間與所述修改相關的執行路徑以及所述執行路徑對應的約束組; 執行結果獲取單元,配置為獲取所述第一測試探針輸出的利用原有測試用例執行所述上一版本的程序的執行結果;以及 確定單元,配置為基於所述執行結果和所述約束組,確定適用於所述執行路徑的測試用例。
12.根據權利要求11的裝置,還包括測試探針插入單元,配置為在所述程序中插入多個測試探針。
13.根據權利要求11的裝置,其中所述第一測試探針和第二測試探針分別是位於所述修改項之前和之後、距離修改項最近的測試探針。
14.根據權利要求11的裝置,其中所述確定單元包括: 形成模塊,配置為利用所述執行結果進一步限定所述約束組以形成組合的約束組; 求解模塊,配置為對所述組合的約束組進行求解; 判斷模塊,配置為根據求解的結果,判斷所述原有測試用例是否適用於所述執行路徑。
15.根據權利要求14的裝置,其中所述判斷模塊配置為,在所述組合的約束組有解的情況下,將所述原有測試用例確定為適用於所述執行路徑的測試用例。
16.根據權利要求14的裝置,其中所述判斷模塊配置為,在所述組合的約束組無解的情況下,確定所述原有測試用例不適用於所述執行路徑。
17.根據權利要求14或16的裝置,其中所述確定單元還包括生成模塊,配置為基於所述原有測試用例,生成適用於所述執行路徑的新的測試用例。
18.根據權利要求17的裝置,其中所述生成模塊配置為:修改所述約束組中與局部變量相關的參數設置,使得組合的約束組有解;以及,基於修改的參數設置生成新的測試用例。
19.根據權利要求17的裝置,其中所述生成模塊配置為:修改所述執行結果,使得組合的約束組有解;從第一測試探針開始利用數據流分析向前回溯,確定產生修改的執行結果的測試用例,將其作為新的測試用例。
20.根據權利要求11的裝置,其中所述執行路徑是與所述上一版本的程序中的特定原有路徑相對應的修改的執行路徑,所述原有測試用例適用於該特定原有路徑。
【文檔編號】G06F11/36GK104252408SQ201310257810
【公開日】2014年12月31日 申請日期:2013年6月26日 優先權日:2013年6月26日
【發明者】梅立軍, 李起成, 謝芳全, 王健, 朱子玉 申請人:國際商業機器公司

同类文章

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

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有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-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀