專利名稱:具有可替換函數(shù)庫(kù)的軟件程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及具有可替換函數(shù)庫(kù)的軟件程序。
背景技術(shù):
為了評(píng)估現(xiàn)代產(chǎn)品在符合其規(guī)格方面的性能,測(cè)試和測(cè)量成為了產(chǎn)品開發(fā)和制造壽命周期的一個(gè)重要部分。執(zhí)行這些測(cè)試的測(cè)試機(jī)器通常能夠在計(jì)算機(jī)的控制下實(shí)現(xiàn)自動(dòng)化,以對(duì)多種系統(tǒng)和/或組件執(zhí)行各種測(cè)試中的一種或多種。
用戶可能需要根據(jù)需要編寫軟件程序,以利用這些測(cè)試機(jī)器執(zhí)行這種測(cè)試。為了使軟件編程者的工作較為輕松,測(cè)試機(jī)器的制造者通常會(huì)提供一個(gè)可用于軟件程序中的通用函數(shù)庫(kù)。和所有軟件程序一樣,如果必要的話,程序本身需要被測(cè)試和修改,以確保它按設(shè)計(jì)工作。找出和糾正程序中可能存在的差錯(cuò)被稱為調(diào)試程序。在這項(xiàng)工作中,程序通常是在調(diào)試模式中被編譯的,在這種模式中,額外的編程步驟被添加到程序,這些步驟向軟件編程者提供用于識(shí)別任何差錯(cuò)的類別和程序位置的信息。這可能是且常常是一項(xiàng)耗時(shí)且成本很高的工作。
一旦軟件編程者確信程序正確工作并且準(zhǔn)備好投入使用,程序就在沒有用于調(diào)試的額外編程步驟的情況下被重新編譯,以便程序執(zhí)行其操作的速度增大。通常,軟件編程者不會(huì)檢查由庫(kù)函數(shù)報(bào)告給軟件程序的各種潛在的程序問題,例如棧溢出或差錯(cuò)。從而,雖然編程者可能相信程序正確工作,但在某些情況下它卻并沒有正確工作。此外,庫(kù)函數(shù)之一的問題隨后可能被制造者檢測(cè)到,并且在之后軟件版本中被糾正。于是,使用這個(gè)新版本的庫(kù)函數(shù)可能使先前未被軟件編程者或用戶檢測(cè)到的程序問題顯露出來。
發(fā)明內(nèi)容
在代表性實(shí)施例中,公開了一種軟件程序,其包括函數(shù)調(diào)用。當(dāng)程序在第一模式中被鏈接時(shí),來自第一庫(kù)的第一經(jīng)編譯例程被耦合到函數(shù)調(diào)用。否則,來自第二庫(kù)的第二經(jīng)編譯例程被耦合到函數(shù)調(diào)用。第一經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第一值的情況下從源代碼例程編譯來的,第二經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第二值的情況下從源代碼例程編譯來的。第一經(jīng)編譯例程具有與第二經(jīng)編譯例程相同的功能再加上額外功能。
在另一個(gè)代表性實(shí)施例中,公開了一對(duì)庫(kù),其包括第一庫(kù)和第二庫(kù)。第一庫(kù)包括第一經(jīng)編譯例程,第二庫(kù)包括第二經(jīng)編譯例程。第一經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第一值的情況下從源代碼例程編譯來的,第二經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第二值的情況下從源代碼例程編譯來的。第一經(jīng)編譯例程具有與第二經(jīng)編譯例程相同的功能再加上額外功能。
在另一個(gè)代表性實(shí)施例中,公開了一種用于創(chuàng)建軟件程序的方法。該方法包括指定鏈接程序的模式,其中,用于程序的源代碼包括函數(shù)調(diào)用。當(dāng)在指定模式的步驟中指定第一模式時(shí),通過將來自第一庫(kù)的第一經(jīng)編譯例程的目標(biāo)代碼耦合到程序的先前編譯過的形式中的函數(shù)調(diào)用來創(chuàng)建程序的可執(zhí)行形式。否則,通過將來自第二庫(kù)的第二經(jīng)編譯例程的目標(biāo)代碼耦合到程序的先前編譯過的形式中的函數(shù)調(diào)用來創(chuàng)建程序的可執(zhí)行形式。第一經(jīng)編譯例程具有與第二經(jīng)編譯例程相同的功能再加上額外功能。
當(dāng)結(jié)合附圖理解下面的詳細(xì)描述時(shí),這里給出的代表性實(shí)施例的其他方面和優(yōu)點(diǎn)將會(huì)顯現(xiàn)出來。
附圖提供了直觀的圖示,這些圖示將被用來更充分地描述各種代表性實(shí)施例,并且能被本領(lǐng)域的技術(shù)人員用來更好地理解它們以及它們的內(nèi)在優(yōu)點(diǎn)。在這些附圖中,類似的標(biāo)號(hào)標(biāo)識(shí)相應(yīng)的元件。
圖1是各種代表性實(shí)施例中描述的測(cè)試系統(tǒng)的框圖。
圖2A是各種代表性實(shí)施例中描述的用于將程序源代碼組件變換為可執(zhí)行軟件程序的組件和進(jìn)程的框圖。
圖2B是各種代表性實(shí)施例中描述的被軟件程序用于調(diào)用來自兩個(gè)庫(kù)之一的例程的組件和進(jìn)程的框圖。
圖3是各種代表性實(shí)施例中描述的第一和第二經(jīng)編譯例程的源代碼例程的列表。
圖4是各種代表性實(shí)施例中描述的用于利用可替換庫(kù)鏈接和運(yùn)行程序的方法的流程圖。
具體實(shí)施例方式
如附圖中為說明而示出的,這里公開了用于軟件程序的新穎技術(shù),該軟件程序包括對(duì)可替換庫(kù)中的既可以在調(diào)試模式中編譯也可以在操作模式中編譯的函數(shù)的調(diào)用。調(diào)試模式編譯的函數(shù)是在調(diào)試庫(kù)中提供的,而操作模式編譯的函數(shù)是在另一個(gè)庫(kù)中提供的。然后,如果必要的話,在不重新編譯軟件程序的情況下,軟件程序根據(jù)需要被鏈接或重新鏈接到調(diào)試庫(kù)函數(shù)或操作模式庫(kù)函數(shù)。在不改變和重新編譯用戶開發(fā)的軟件程序的情況下,可以監(jiān)視庫(kù)函數(shù)調(diào)用的成功或失敗。先前用于這種調(diào)試的技術(shù)依賴于激活和/或添加調(diào)試代碼到用戶開發(fā)的軟件程序,隨后重新編譯軟件程序,并且鏈接。
在下面的詳細(xì)描述和若干幅附圖中,類似的元件用類似的標(biāo)號(hào)標(biāo)識(shí)。
圖1是各種代表性實(shí)施例中描述的測(cè)試系統(tǒng)100的框圖。在圖1中,測(cè)試系統(tǒng)100包括連接到被測(cè)設(shè)備(DUT)150的測(cè)試機(jī)器105。被測(cè)設(shè)備(DUT)可以是各種類型的電子組件150中的任何一種,或者任何其他類型的組件150,例如機(jī)械組件150。測(cè)試機(jī)器105包括計(jì)算機(jī)110和儀器115。圖1中還示出在外部連接到計(jì)算機(jī)110的可選外部輸出設(shè)備145。外部輸出設(shè)備145例如可以是打印機(jī)145。計(jì)算機(jī)110連接到儀器115,并且通過設(shè)置執(zhí)行測(cè)試測(cè)量的條件、開動(dòng)測(cè)量并且收集測(cè)量結(jié)果來控制儀器115的操作。圖1所示的儀器115可以代表單個(gè)儀器,例如伏特計(jì)、電流計(jì)等,或者可以代表能夠進(jìn)行多種測(cè)量和測(cè)量類型的個(gè)體儀器的組合。
計(jì)算機(jī)包括中央處理單元(CPU)120、存儲(chǔ)器125、輸入設(shè)備130和內(nèi)部輸出設(shè)備140。輸入設(shè)備130可以是鍵盤130,或者可以使用適合于光標(biāo)操縱等的指取設(shè)備,例如筆、鼠標(biāo)、軌跡點(diǎn)或觸摸屏。內(nèi)部輸出設(shè)備140可以是監(jiān)視器140。監(jiān)視器140可以是單色的或彩色的。計(jì)算機(jī)110能夠運(yùn)行任何商業(yè)上可獲得的操作系統(tǒng)中的一種或多種,例如DOS、Microsoft Windows的各種版本(Windows 95、98、Me、2000、NT、XP等)、Apple的MAC OS X、UNIX、Linux或其他合適的操作系統(tǒng)。在操作中,可執(zhí)行軟件測(cè)試程序135可以從存儲(chǔ)器125或從圖中未示出的外部源被加載到CPU 120中,所述測(cè)試程序135在這里可被稱為軟件測(cè)試程序135和測(cè)試程序135,在這里一般也可被稱為軟件程序135和程序135。
在其他實(shí)現(xiàn)方式中,測(cè)試系統(tǒng)110可以包括多個(gè)CPU 120,這些CPU不是全都執(zhí)行相同的測(cè)試函數(shù),并且可以附接到其他輸入/輸出設(shè)備,并且可以不附接到圖1所示各種輸入/輸出設(shè)備。
圖2A是各種代表性實(shí)施例中描述的用于將程序源代碼組件205變換為可執(zhí)行軟件程序135的組件和進(jìn)程200的框圖。在圖2A中,編譯器215將程序源代碼組件205編譯為程序目標(biāo)代碼模塊220。程序源代碼組件205包括測(cè)試器函數(shù)調(diào)用210,在這里一般也將其稱為函數(shù)調(diào)用210,它是對(duì)對(duì)測(cè)試機(jī)器105來說是標(biāo)準(zhǔn)的并且在這種函數(shù)的庫(kù)中找到的函數(shù)的調(diào)用。這種函數(shù)的庫(kù)一般是由測(cè)試機(jī)器105的制造者提供的,而程序源代碼例程是由測(cè)試機(jī)器105的用戶為了用戶的特定目的而創(chuàng)建的。鏈接225將程序目標(biāo)代碼模塊220與存根(stub)庫(kù)250組合或鏈接,該存根庫(kù)250如圖2B所示可用來耦合庫(kù)例程的目標(biāo)代碼。除了使用存根庫(kù)250之外,可以使用其他技術(shù)來實(shí)現(xiàn)函數(shù)調(diào)用210,例如將經(jīng)編譯的測(cè)試器例程240a、240b直接耦合到程序135中的函數(shù)調(diào)用210。
圖2B是各種代表性實(shí)施例中描述的被軟件程序135用于調(diào)用來自兩個(gè)庫(kù)235a、235b之一的例程的組件和進(jìn)程的框圖。參考圖2A和圖2B,鏈接器225以兩種形式之一創(chuàng)建可執(zhí)行軟件測(cè)試程序135,所述形式在這里被稱為模式。當(dāng)可執(zhí)行軟件測(cè)試程序135在調(diào)試模式中被鏈接時(shí),測(cè)試器函數(shù)調(diào)用210被耦合到來自調(diào)試庫(kù)235a的第一經(jīng)編譯測(cè)試器例程240a,所述調(diào)試模式在這里一般被稱為第一模式。第一經(jīng)編譯測(cè)試器例程240a在這里一般被稱為第一經(jīng)編譯例程240a,調(diào)試庫(kù)235a在這里一般被稱為第一庫(kù)235a。否則,當(dāng)可執(zhí)行軟件測(cè)試程序135在操作模式中被鏈接時(shí),測(cè)試器函數(shù)調(diào)用210被來自操作庫(kù)235b的第二經(jīng)編譯測(cè)試器例程240b所取代,所述操作模式在這里一般被稱為第二模式。第二經(jīng)編譯測(cè)試器例程240b在這里一般被稱為第二經(jīng)編譯例程240b,操作庫(kù)235b在這里一般被稱為第二庫(kù)235b。從而,依賴于鏈接軟件測(cè)試程序135時(shí)所選擇的模式,來自兩個(gè)庫(kù)235a、235b之一的經(jīng)編譯的測(cè)試器例程240被耦合到軟件測(cè)試程序135。
在實(shí)踐中,對(duì)測(cè)試器函數(shù)調(diào)用210的調(diào)用經(jīng)由存根庫(kù)250實(shí)現(xiàn),存根庫(kù)250一般位于計(jì)算機(jī)110的操作系統(tǒng)260中,并且根據(jù)用戶在鏈接時(shí)選擇的模式利用第一存根251來從地址表255獲得第一庫(kù)235a中的第一經(jīng)編譯測(cè)試器例程240a的地址或利用第二存根252來從地址表255獲得第二庫(kù)235b中的第二經(jīng)編譯測(cè)試器例程240b的地址。第一經(jīng)編譯測(cè)試器例程240a具有附加于第二經(jīng)編譯測(cè)試器例程240b的功能的額外功能。在代表性實(shí)施例中,第一經(jīng)編譯測(cè)試器例程240a的額外功能提供用于調(diào)試軟件測(cè)試程序135的信息。第一和第二經(jīng)編譯例程240a、240b對(duì)位于操作系統(tǒng)260中的內(nèi)部例程265進(jìn)行調(diào)用。這里公開的技術(shù)適用于具有各種類型的多個(gè)函數(shù)調(diào)用210的軟件程序135。除了使用存根庫(kù)250以外,也可以使用其他技術(shù),例如在鏈接時(shí)將經(jīng)編譯的測(cè)試器例程240a、240b之一與程序目標(biāo)代碼模塊220相鏈接。在實(shí)現(xiàn)函數(shù)調(diào)用210時(shí),除了使用存根庫(kù)250和地址表255之外,可以使用其他技術(shù)。但是,利用在地址表255中進(jìn)行函數(shù)地址查找,存根庫(kù)250幫助實(shí)現(xiàn)與所使用的操作系統(tǒng)的修訂獨(dú)立的例程的調(diào)用。
圖3是各種代表性實(shí)施例中描述的第一和第二經(jīng)編譯例程240a、240b的源代碼例程300的列表。第二經(jīng)編譯測(cè)試器例程240b是在源代碼例程300中的參數(shù)310被設(shè)置為第二值的情況下從源代碼例程300編譯來的,在本代表性示例中參數(shù)310是“DEBUG”,并且第二值是NULL。第一經(jīng)編譯測(cè)試器例程240a是在源代碼例程300中的參數(shù)310被設(shè)置為第一值的情況下從源代碼例程300編譯來的,從而使得第一經(jīng)編譯測(cè)試器例程240a具有附加于第二經(jīng)編譯測(cè)試器例程240b的功能的額外功能。同樣,在本代表性示例中,參數(shù)310是“DEBUG”,但是對(duì)于第一經(jīng)編譯測(cè)試器例程240a的編譯,DEBUG的值具有非NULL的值。
第一經(jīng)編譯測(cè)試器例程240a中附加于第二經(jīng)編譯測(cè)試器例程240b中找到的功能的額外功能包括經(jīng)由對(duì)“SCheckStack()”的調(diào)用在例程初始化時(shí)檢查棧,并且經(jīng)由對(duì)“SCheckAtm()”的調(diào)用檢查第一經(jīng)編譯測(cè)試器例程240a內(nèi)部的例程“PETable()”的返回值。而第二經(jīng)編譯測(cè)試器例程240b中的功能不包括經(jīng)由對(duì)“SCheckStack()”的調(diào)用在例程初始化時(shí)調(diào)用檢查棧,這是因?yàn)椤癈HECK_STACK”編譯到NULL,而不是像第一經(jīng)編譯測(cè)試器例程240a那樣編譯到“SCheckStack()”。此外,第二經(jīng)編譯測(cè)試器例程240b中的功能不包括經(jīng)由對(duì)“SCheckAtm()”的調(diào)用檢查第一經(jīng)編譯測(cè)試器例程240a內(nèi)部的例程“PETable()”的返回值,這是因?yàn)椤癈HECK_ATM”編譯到NULL,而不是像第一經(jīng)編譯測(cè)試器例程240a那樣編譯到“SCheckAtm()”。
圖4是各種代表性實(shí)施例中描述的用于利用可替換庫(kù)235a、235b鏈接和運(yùn)行程序135的方法400的流程圖。在塊403中,如果程序135要被鏈接或重新鏈接,則塊403將控制轉(zhuǎn)移到塊405。否則,塊403將控制轉(zhuǎn)移到塊425。
在塊405中,用戶設(shè)置將程序源代碼組件205與調(diào)試庫(kù)(第一庫(kù))235a或操作庫(kù)(第二庫(kù))相鏈接的模式。然后塊405將控制轉(zhuǎn)移到塊410。
如果在塊405中選擇了調(diào)試模式,則塊410將控制轉(zhuǎn)移到塊415。否則,塊405將控制轉(zhuǎn)移到控制420。
在塊415中,測(cè)試程序135與調(diào)試庫(kù)135a中的適當(dāng)?shù)牡谝唤?jīng)編譯測(cè)試器例程240a相鏈接,以創(chuàng)建可執(zhí)行軟件測(cè)試程序135。然后塊415將控制轉(zhuǎn)移到塊425。
在塊420中,測(cè)試程序135與操作庫(kù)235b中的適當(dāng)?shù)牡诙?jīng)編譯測(cè)試器例程240b相鏈接,以創(chuàng)建可執(zhí)行軟件測(cè)試程序135。然后,塊420將控制轉(zhuǎn)移到塊425。
在塊425中,在塊415或塊420中創(chuàng)建的可執(zhí)行軟件測(cè)試程序135被加載到測(cè)試機(jī)器105的計(jì)算機(jī)110的CPU 120中。然后,塊425將控制轉(zhuǎn)移到塊430。
在塊430中,被測(cè)設(shè)備150被連接到測(cè)試機(jī)器105。然后,塊430將控制轉(zhuǎn)移到塊435。
在塊435中,可執(zhí)行軟件測(cè)試程序135在測(cè)試機(jī)器105的計(jì)算機(jī)110的CPU 120中被激活,以在被測(cè)設(shè)備150上運(yùn)行測(cè)試。然后,塊435將控制轉(zhuǎn)移到塊440。
如果在塊405中選擇了調(diào)試模式,則塊440將控制轉(zhuǎn)移到塊445。否則,塊440將控制轉(zhuǎn)移到塊450。
如果在塊435中運(yùn)行程序135的同時(shí)發(fā)現(xiàn)程序差錯(cuò),則塊445將控制轉(zhuǎn)移到塊455。否則,塊445將控制轉(zhuǎn)移到塊460。
如果在塊450中確定有更多DUT 150要測(cè)試,則塊450將控制轉(zhuǎn)移到塊430。否則,塊450終止進(jìn)程。
在塊455中,程序源代碼組件205中的差錯(cuò)被糾正。然后,塊455將控制轉(zhuǎn)移到塊405。
如果在塊460中確定有更多DUT 150要測(cè)試,則塊460將控制轉(zhuǎn)移到塊430。否則,塊460終止到塊405的控制。
一旦在運(yùn)行測(cè)試程序135時(shí)沒有找到更多差錯(cuò)并且程序135在操作模式中被重新鏈接,就可以在適當(dāng)時(shí)運(yùn)行塊425、430和435,而無需循環(huán)進(jìn)行圖4中的其他步驟。但是,在適當(dāng)時(shí),塊403中進(jìn)行的判決將用戶引向塊425、430和435,塊440和450中進(jìn)行的判決將用戶引出并返回到塊425、430和435。
在代表性實(shí)施例中,公開了包括函數(shù)調(diào)用210的軟件程序135。當(dāng)程序135在第一模式中被鏈接時(shí),來自第一庫(kù)235a的第一經(jīng)編譯例程240a被耦合到函數(shù)調(diào)用210。否則,來自第二庫(kù)235b的第二經(jīng)編譯例程240b被耦合到函數(shù)調(diào)用210。第一經(jīng)編譯例程240a是在源代碼例程300中的參數(shù)310被設(shè)置為第一值的情況下從源代碼例程300編譯來的,第二經(jīng)編譯例程240b是在源代碼例程300中的參數(shù)310被設(shè)置為第二值的情況下從源代碼例程300編譯來的。第一經(jīng)編譯例程240a具有與第二經(jīng)編譯例程240b相同的功能再加上額外的功能。
在另一個(gè)代表性實(shí)施例中,公開了包括第一庫(kù)235a和第二庫(kù)235b的一對(duì)庫(kù)235a、235b。第一庫(kù)235a包括第一經(jīng)編譯例程240a,第二庫(kù)235b包括第二經(jīng)編譯例程240b。第一經(jīng)編譯例程240a是在源代碼例程300中的參數(shù)310被設(shè)置為第一值的情況下從源代碼例程300編譯來的,第二經(jīng)編譯例程240b是在源代碼例程300中的參數(shù)310被設(shè)置為第二值的情況下從源代碼例程300編譯來的。第一經(jīng)編譯例程240a具有與第二經(jīng)編譯例程240b相同的功能再加上額外的功能。
在另一個(gè)代表性實(shí)施例中,公開了用于創(chuàng)建軟件程序135的方法400。該方法包括指定鏈接程序135的模式,其中程序135的源代碼包括函數(shù)調(diào)用210。當(dāng)在指定模式的步驟中指定第一模式時(shí),程序135的可執(zhí)行形式是通過將來自第一庫(kù)235a的第一經(jīng)編譯例程240a的目標(biāo)代碼耦合到程序135的先前編譯過的形式中的函數(shù)調(diào)用210來創(chuàng)建的。否則,程序135的可執(zhí)行形式是通過將來自第二庫(kù)235b的第二經(jīng)編譯例程240b的目標(biāo)代碼耦合到程序135的先前編譯過的形式中的函數(shù)調(diào)用210來創(chuàng)建的。第一經(jīng)編譯例程240a具有與第二經(jīng)編譯例程240b相同的功能再加上額外的功能。
與在許多數(shù)據(jù)處理產(chǎn)品中一樣,上述系統(tǒng)可以實(shí)現(xiàn)為硬件和軟件組件的組合。此外,使用代表性實(shí)施例所需的功能可以實(shí)現(xiàn)在用于對(duì)測(cè)試機(jī)器105的計(jì)算機(jī)110編程的計(jì)算機(jī)可讀介質(zhì)中(例如軟盤、傳統(tǒng)硬盤、DVD、CD-ROM、閃速ROM、非易失性ROM和RAM)。
術(shù)語“程序存儲(chǔ)介質(zhì)”在這里被寬泛地定義為包括任何種類的計(jì)算機(jī)存儲(chǔ)器,例如但不限于軟盤、傳統(tǒng)硬盤、DVD、CD-ROM、閃速ROM、非易失性ROM和RAM。
在這里公開的軟件程序135和方法的代表性實(shí)施例中,用戶編寫其中對(duì)庫(kù)例程進(jìn)行調(diào)用的程序。這些調(diào)用可以從兩個(gè)可替換庫(kù)235a、235b之一中找到的經(jīng)編譯的測(cè)試器例程實(shí)現(xiàn)。這些庫(kù)中的第一庫(kù)235a中的例程向用戶提供關(guān)于例程操作的額外信息,并且一般用于調(diào)試軟件程序135,該軟件程序135例如可以是軟件測(cè)試程序135。這些庫(kù)中的第二庫(kù)235b中的例程與第一庫(kù)235a中的例程相同,只不過沒有該額外信息。實(shí)際上,除了參數(shù)310的值之外,兩個(gè)版本的經(jīng)編譯的例程的240a、240b的源代碼都是相同的。將參數(shù)310的值用作第一和第二經(jīng)編譯例程240a、240b的編譯期間的控件,從而使得能夠?qū)崿F(xiàn)所選的操作檢查和其他函數(shù),例如報(bào)告第一庫(kù)例程235a的經(jīng)編譯版本對(duì)程序135的運(yùn)行中的中間點(diǎn)處的值。利用新發(fā)布的庫(kù)函數(shù)對(duì)測(cè)試程序135進(jìn)行的程序確認(rèn)和調(diào)試簡(jiǎn)化了,這是因?yàn)檐浖y(cè)試程序135的源代碼不需要被重新編譯。軟件測(cè)試程序135的源代碼只需要在調(diào)試期間與調(diào)試庫(kù)(第一庫(kù))235a相鏈接,然后一旦軟件程序的適當(dāng)操作被確認(rèn),就與操作庫(kù)(第二庫(kù))235b重新鏈接。
雖然這里的討論是針對(duì)用于測(cè)試電子組件150的軟件測(cè)試程序135的,但是本領(lǐng)域的技術(shù)人員將會(huì)意識(shí)到,這里公開的技術(shù)并不局限于這種軟件程序135。無論使用庫(kù)235a和235b中的哪個(gè)來實(shí)現(xiàn)調(diào)用,軟件程序135都進(jìn)行相同的函數(shù)調(diào)用。此外,通過不重新編譯用戶編寫的代碼而只重新編譯測(cè)試機(jī)器105的制造商提供的代碼,發(fā)生變化的經(jīng)編譯的代碼就限制到了制造商所提供的,從而減少了關(guān)于任何問題的來源的混淆,并且降低了用戶進(jìn)行的代碼改變引入額外問題的可能性。
這里已經(jīng)詳細(xì)描述的代表性實(shí)施例是以示例方式而不是限制方式給出的。本領(lǐng)域的技術(shù)人員將會(huì)理解,可以對(duì)所描述的實(shí)施例的形式和細(xì)節(jié)進(jìn)行各種改變,以得到保持在所附權(quán)利要求的范圍之內(nèi)的等同實(shí)施例。
權(quán)利要求
1.一種軟件程序,包括函數(shù)調(diào)用,其中,當(dāng)所述程序在第一模式中被鏈接時(shí)來自第一庫(kù)的第一經(jīng)編譯例程被耦合到所述函數(shù)調(diào)用,否則來自第二庫(kù)的第二經(jīng)編譯例程被耦合到所述函數(shù)調(diào)用,其中,所述第一經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第一值的情況下從所述源代碼例程編譯來的,其中,所述第二經(jīng)編譯例程是在所述源代碼例程中的所述參數(shù)被設(shè)置到第二值的情況下從所述源代碼例程編譯來的,并且其中,所述第一經(jīng)編譯例程具有與所述第二經(jīng)編譯例程相同的功能再加上額外功能。
2.如權(quán)利要求1所述的軟件程序,其中,所述第一經(jīng)編譯例程的額外功能被配置為提供用于調(diào)試所述程序的信息。
3.如權(quán)利要求1所述的軟件程序,其中,所述程序被配置為在測(cè)試機(jī)器上運(yùn)行。
4.如權(quán)利要求1所述的軟件程序,其中,所述程序被配置為測(cè)試組件。
5.如權(quán)利要求1所述的軟件程序,其中,所述程序被配置為在測(cè)試機(jī)器上運(yùn)行并且被配置為測(cè)試組件。
6.如權(quán)利要求1所述的軟件程序,其中,當(dāng)所述程序在所述第一模式被鏈接并且當(dāng)所述程序的可執(zhí)行形式被執(zhí)行時(shí)對(duì)所述第一經(jīng)編譯例程的調(diào)用包括對(duì)存根庫(kù)中的第一存根的調(diào)用,其中,所述第一存根在地址表中查找所述第一經(jīng)編譯例程的地址,然后將對(duì)所述第一經(jīng)編譯例程的所述調(diào)用重定向到該地址;否則,當(dāng)所述程序在所述第二模式中被鏈接并且當(dāng)所述程序的可執(zhí)行形式被執(zhí)行時(shí)對(duì)所述第二經(jīng)編譯例程的調(diào)用包括對(duì)存根庫(kù)中的第二存根的調(diào)用,其中,所述第二存根在所述地址表中查找所述第二經(jīng)編譯例程的地址,然后將對(duì)所述第二經(jīng)編譯例程的所述調(diào)用重定向到該地址。
7.一對(duì)庫(kù),包括包括第一經(jīng)編譯例程的第一庫(kù);包括第二經(jīng)編譯例程的第二庫(kù),其中,所述第一經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第一值的情況下從所述源代碼例程編譯來的,其中,所述第二經(jīng)編譯例程是在所述源代碼例程中的所述參數(shù)被設(shè)置到第二值的情況下從所述源代碼例程編譯來的,并且其中,所述第一經(jīng)編譯例程具有與所述第二經(jīng)編譯例程相同的功能再加上額外功能。
8.如權(quán)利要求7所述的庫(kù)對(duì),其中,所述第一經(jīng)編譯例程的額外功能被配置為提供用于調(diào)試調(diào)用所述第一經(jīng)編譯例程的程序的信息。
9.如權(quán)利要求8所述的庫(kù)對(duì),其中,所述程序被配置為測(cè)試組件。
10.如權(quán)利要求7所述的庫(kù)對(duì),其中,所述第一經(jīng)編譯例程和所述第二經(jīng)編譯例程被配置為支持組件測(cè)試。
11.如權(quán)利要求7所述的庫(kù)對(duì),其中,所述第一經(jīng)編譯例程和所述第二經(jīng)編譯例程被配置為支持執(zhí)行程序來測(cè)試測(cè)試機(jī)器上的所述組件。
12.如權(quán)利要求7所述的庫(kù)對(duì),其中,所述第一經(jīng)編譯例程和所述第二經(jīng)編譯例程被配置為支持組件測(cè)試并且被配置為支持執(zhí)行程序來測(cè)試測(cè)試機(jī)器上的所述組件。
13.一種用于創(chuàng)建軟件程序的方法,包括指定鏈接所述程序的模式,其中,所述程序的源代碼包括函數(shù)調(diào)用;以及當(dāng)在所述指定模式的步驟中指定第一模式時(shí)通過將來自第一庫(kù)的第一經(jīng)編譯例程的目標(biāo)代碼耦合到所述程序的先前編譯過的形式中的函數(shù)調(diào)用來創(chuàng)建所述程序的可執(zhí)行形式,否則通過將來自第二庫(kù)的第二經(jīng)編譯例程的目標(biāo)代碼耦合到所述程序的先前編譯過的形式中的函數(shù)調(diào)用來創(chuàng)建所述程序的可執(zhí)行形式,其中,所述第一經(jīng)編譯例程具有與所述第二經(jīng)編譯例程相同的功能再加上額外功能。
14.如權(quán)利要求13所述的方法,其中,所述第一經(jīng)編譯例程的額外功能被配置為提供用于調(diào)試所述程序的信息。
15.如權(quán)利要求13所述的方法,其中,所述程序被配置為在測(cè)試機(jī)器上運(yùn)行。
16.如權(quán)利要求13所述的方法,其中,所述程序被配置為測(cè)試組件。
17.如權(quán)利要求13所述的方法,其中,所述程序被配置為在測(cè)試機(jī)器上運(yùn)行并且被配置為測(cè)試組件。
18.如權(quán)利要求13所述的方法,還包括將所述程序的可執(zhí)行形式加載到計(jì)算機(jī)中;并且運(yùn)行所述程序的可執(zhí)行形式。
19.如權(quán)利要求18所述的方法,還包括在所述運(yùn)行所述程序的步驟之前,將組件連接到測(cè)試機(jī)器,其中,所述測(cè)試機(jī)器包括所述計(jì)算機(jī)。
20.如權(quán)利要求18所述的方法,其中,當(dāng)所述程序在所述第一模式中被鏈接時(shí),所述運(yùn)行所述程序的可執(zhí)行形式的步驟包括調(diào)用所述第一經(jīng)編譯例程,其中調(diào)用所述第一經(jīng)編譯例程包括調(diào)用存根庫(kù)中的第一存根,其中,調(diào)用所述第一存根包括在地址表中查找所述第一經(jīng)編譯例程的地址,以及調(diào)用所述第一庫(kù)中的所述第一經(jīng)編譯例程;否則,當(dāng)所述程序在所述第二模式中被鏈接時(shí),所述運(yùn)行所述程序的可執(zhí)行形式的步驟包括調(diào)用所述第二經(jīng)編譯例程,其中調(diào)用所述第二經(jīng)編譯例程包括調(diào)用存根庫(kù)中的第二存根,其中,調(diào)用所述第二存根包括在所述地址表中查找所述第二經(jīng)編譯例程的地址,以及調(diào)用所述第二庫(kù)中的所述第二經(jīng)編譯例程。
全文摘要
本發(fā)明公開了具有可替換函數(shù)庫(kù)的軟件程序。該軟件程序包括函數(shù)調(diào)用。當(dāng)程序在第一模式中被鏈接時(shí),來自第一庫(kù)的第一經(jīng)編譯例程被耦合到函數(shù)調(diào)用。否則,來自第二庫(kù)的第二經(jīng)編譯例程被耦合到函數(shù)調(diào)用。第一經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第一值的情況下從源代碼例程編譯來的,第二經(jīng)編譯例程是在源代碼例程中的參數(shù)被設(shè)置到第二值的情況下從源代碼例程編譯來的。第一經(jīng)編譯例程具有與第二經(jīng)編譯例程相同的功能再加上額外功能。
文檔編號(hào)G06F9/46GK1975666SQ200610145778
公開日2007年6月6日 申請(qǐng)日期2006年11月21日 優(yōu)先權(quán)日2005年11月28日
發(fā)明者艾倫·赫伍德·戴維斯 申請(qǐng)人:安捷倫科技有限公司