專利名稱:測(cè)試一個(gè)接口的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的技術(shù)領(lǐng)域第一,本發(fā)明涉及測(cè)試一個(gè)接口的方法和系統(tǒng),第二,本發(fā)明涉及測(cè)試一個(gè)通信系統(tǒng)中的接口和新程序件的方法和系統(tǒng),第三,本發(fā)明涉及為一個(gè)通信系統(tǒng)提供一個(gè)參考模型的方法和系統(tǒng),其中程序件能夠通過(guò)一個(gè)協(xié)議彼此通信,此協(xié)議在各自程序件的接口上與這些程序件分離。
當(dāng)兩個(gè)獨(dú)立設(shè)計(jì)和維護(hù)的程序件互相作用時(shí),關(guān)于它們相互作用的規(guī)則就在一個(gè)接口中被描述。此接口應(yīng)當(dāng)含有一個(gè)程序件單元的設(shè)計(jì)者能夠使用另一個(gè)程序件單元的功能所要求的信息。與此相反,設(shè)計(jì)者不需要知道這另一個(gè)程序件單元,其被使用的功能由接口隱藏。其目的是提供功能的程序可以在接口的結(jié)構(gòu)中自由變化。
通常一個(gè)接口都是用語(yǔ)法術(shù)語(yǔ)定義的,也就是它被告知對(duì)于第二個(gè)程序中的功能的正確調(diào)用應(yīng)是怎樣的。按規(guī)則,這些定義應(yīng)當(dāng)是正式的且精確的。在對(duì)功能調(diào)用程序的語(yǔ)法分析中,所有看起來(lái)錯(cuò)誤的調(diào)用都被堅(jiān)決地揭示出來(lái),比如拼寫錯(cuò)誤。與此相反的語(yǔ)義規(guī)則,比如指明怎樣的功能調(diào)用才是被允許的,就很少是正式的和完整的。舉一個(gè)具體的例子,順時(shí)針轉(zhuǎn)動(dòng)汽車的發(fā)動(dòng)鑰匙通常是一個(gè)語(yǔ)法上看來(lái)正確的操作。與此相反,如果引擎已在運(yùn)轉(zhuǎn)則它就是語(yǔ)義錯(cuò)誤的。
相關(guān)技術(shù)描述EP 474,339公開(kāi)了為一個(gè)應(yīng)用中的一個(gè)面向?qū)ο蟮恼{(diào)用提供客戶接口的一種技術(shù)。人們希望避免以前出現(xiàn)在異構(gòu)網(wǎng)絡(luò)中用戶要被迫使用每一個(gè)獨(dú)立的應(yīng)用所要求的特定接口這樣的問(wèn)題。目標(biāo)是一個(gè)面向?qū)ο蟮姆绞揭蕴峁┻M(jìn)程間的交互作用??蛻魬?yīng)用可以通過(guò)發(fā)送有參數(shù)的全程已知的消息去調(diào)用其它應(yīng)用。一個(gè)客戶/服務(wù)器模型被使用,其中客戶產(chǎn)生請(qǐng)求,服務(wù)器對(duì)此請(qǐng)求進(jìn)行響應(yīng)。
EP 540,166公開(kāi)了在一個(gè)基于客戶/服務(wù)器模型的面向?qū)ο蟮姆植际较到y(tǒng)中的一種技術(shù)。更具體的是,有一個(gè)問(wèn)題即這樣一種情況,一個(gè)客戶進(jìn)程要判斷是否兩個(gè)分別由第一個(gè)和第二個(gè)服務(wù)器進(jìn)程完成的對(duì)象是等價(jià)的被提供用以操作各自對(duì)象的面向?qū)ο蟮慕涌?。這將在一個(gè)分布式計(jì)算機(jī)系統(tǒng)中與面向?qū)ο蟮木幊桃黄鸨煌瓿伞?br>
EP 278,317描述了用來(lái)防止客戶進(jìn)程系統(tǒng)的一個(gè)進(jìn)程訪問(wèn)在服務(wù)器中已被修改的客戶高速緩沖存儲(chǔ)器中的數(shù)據(jù)的一種技術(shù)。這些數(shù)據(jù)在服務(wù)器中被訪問(wèn)并傳送到客戶。服務(wù)器含有一個(gè)磁盤上的永久性數(shù)據(jù)文件并且有一個(gè)被服務(wù)器的本地處理器所使用的高速緩沖存儲(chǔ)器。不過(guò)客戶進(jìn)程在使用服務(wù)器以及客戶的高速緩沖存儲(chǔ)器時(shí)可以訪問(wèn)文件。磁盤中的文件塊被存儲(chǔ)在服務(wù)器的高速緩沖存儲(chǔ)器中,又由客戶通過(guò)網(wǎng)絡(luò)文件塊從這里接收并將這些文件塊存儲(chǔ)到客戶高速緩沖存儲(chǔ)器中。之后將在客戶進(jìn)程中檢驗(yàn)數(shù)據(jù)塊的正確性,如果數(shù)據(jù)被驗(yàn)證是正確的,它們將從客戶高速緩沖存儲(chǔ)器中被訪問(wèn)。
JP 5-11983公開(kāi)了用來(lái)驗(yàn)證以不同語(yǔ)言描述的程序間的接口的一個(gè)方法。在建立一個(gè)定義文件的接口的方法中,一個(gè)定義信息被輸入,它定義一個(gè)與為一個(gè)程序間接口提供一個(gè)定義文件的不同描述語(yǔ)言相對(duì)應(yīng)的程序之間的接口。在一致性測(cè)試方法中,輸入一個(gè)程序描述語(yǔ)言源文件和一個(gè)測(cè)試接口一致性的定義文件的程序間接口。另外還提供了用于基于一致性測(cè)試結(jié)果自動(dòng)更正程序間接口的方法。
JP 63-86030公開(kāi)了一個(gè)用于不同程序語(yǔ)言間鏈接的一個(gè)系統(tǒng)。一個(gè)CPU包含一個(gè)C程序模塊,一個(gè)起始解釋模塊,和一個(gè)作為功能部件的快速節(jié)點(diǎn)訪問(wèn)模塊。CPU還包含一個(gè)與一個(gè)起始棧一起的公共數(shù)據(jù)區(qū),一個(gè)大數(shù)據(jù)庫(kù)和一個(gè)放在規(guī)定的內(nèi)存空間的信息庫(kù)。通過(guò)公共數(shù)據(jù)區(qū)以及兩個(gè)專用棧在這些模塊間進(jìn)行數(shù)據(jù)傳輸。
JP 62-293347描述了一個(gè)將用不同編程語(yǔ)言編寫的程序連接在一起的開(kāi)發(fā)系統(tǒng)。
EP 498 130公開(kāi)了驗(yàn)證一個(gè)計(jì)算機(jī)系統(tǒng)中互相通信的程序模塊間的兼容性的一種方法。大量相互作用的系統(tǒng)部件中的每一個(gè)都有一個(gè)類型標(biāo)識(shí)符。類型標(biāo)識(shí)符被存儲(chǔ)在可以被其它部件訪問(wèn)的地方。每個(gè)部件獨(dú)立地去讀它必須與之交互的每個(gè)部件的類型標(biāo)識(shí)符,并且將這個(gè)值與自己內(nèi)部存儲(chǔ)的兼容性寄存器進(jìn)行比較,以判斷另一個(gè)部件是否滿足與驗(yàn)證部件的兼容性要求。若一個(gè)部件發(fā)現(xiàn)了不兼容,就發(fā)信號(hào)給系統(tǒng)報(bào)告錯(cuò)誤。
EP 495 279公開(kāi)了在以不同程序語(yǔ)言編寫的兩個(gè)面向?qū)ο蟮某绦蜷g進(jìn)行通信的一種方法。一個(gè)通用的發(fā)送消息功能被安排在兩個(gè)程序之間控制消息交換。為此,通用的發(fā)送消息功能要訪問(wèn)另一個(gè)計(jì)算機(jī)程序中的類的描述。當(dāng)訪問(wèn)這樣一個(gè)描述時(shí),通用的發(fā)送消息功能可以有效地在不同的計(jì)算機(jī)程序之間傳送消息,并且還提供一個(gè)產(chǎn)生新對(duì)象的可能性。
EP 371 942描述了一個(gè)應(yīng)用和一個(gè)數(shù)據(jù)庫(kù)管理者之間的接口。一個(gè)接口系統(tǒng)包括許多應(yīng)用程序接口,這些接口以一系列實(shí)時(shí)服務(wù)的形式出現(xiàn),為一個(gè)預(yù)編譯開(kāi)發(fā)器提供所有與一個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)核心通信所需的功能。
EP 371 941描述了一個(gè)以不同編程語(yǔ)言編寫的應(yīng)用與數(shù)據(jù)庫(kù)管理者或類似的部件之間通信的接口。為軟件支持的大量功能中的每一個(gè)都定義了一個(gè)通用應(yīng)用程序接口或輸入點(diǎn),輸入點(diǎn)有許多與執(zhí)行該功能的系統(tǒng)所要求的一致形式的參數(shù)。每個(gè)輸入點(diǎn)都可以被用多種語(yǔ)言中的一些所編寫的應(yīng)用程序調(diào)用,并且將此調(diào)用的參數(shù)轉(zhuǎn)換成由軟件系統(tǒng)功能執(zhí)行的一致性通用形式。
EP 343 682描述了開(kāi)發(fā)和測(cè)試軟件的一種方法。設(shè)計(jì)和測(cè)試是彼此直接連接的,在某種程度上,設(shè)計(jì)過(guò)程中,設(shè)計(jì)數(shù)據(jù)可以在測(cè)試中被自動(dòng)使用。
EP 315 493描述了一個(gè)使軟件獨(dú)立于計(jì)算機(jī)環(huán)境,即硬件,操作系統(tǒng)等的虛擬接口。該系統(tǒng)包括執(zhí)行一個(gè)異構(gòu)或“目標(biāo)”計(jì)算機(jī)中的一個(gè)或多個(gè)分布式處理器中的應(yīng)用軟件所要求的一個(gè)或幾個(gè)任務(wù)的許多進(jìn)程。在實(shí)時(shí)程序中,應(yīng)用軟件的代碼被預(yù)處理,編譯并與系統(tǒng)接口模塊鏈接產(chǎn)生可被目標(biāo)計(jì)算機(jī)的操作系統(tǒng)執(zhí)行的代碼。包括大量對(duì)進(jìn)程的功能調(diào)用的可執(zhí)行代碼被操作系統(tǒng)運(yùn)行,以確認(rèn)這些進(jìn)程將能夠完成應(yīng)用軟件所要求的標(biāo)準(zhǔn)。
US 5 045 994描述了一個(gè)用于仿真以及開(kāi)發(fā)和測(cè)試大程序系統(tǒng)的方法。一個(gè)仿真系統(tǒng)環(huán)境被用來(lái)模擬應(yīng)用系統(tǒng)的實(shí)際輸入/輸出接口。在此環(huán)境中,用戶產(chǎn)生后來(lái)以獨(dú)立于應(yīng)用系統(tǒng)和在應(yīng)用系統(tǒng)一方的屏幕動(dòng)力自動(dòng)方式被應(yīng)用系統(tǒng)執(zhí)行的輸入/輸出事務(wù)。
在1987年12月“IEEE TRANSACTIONS ON SOFTWAREENGINEERING”的SE-13卷第12期的1254-1264頁(yè)Roger Hayes和Richard D Schlichting的文章“在分布式系統(tǒng)中提供混合語(yǔ)言編程”(“Facilitating Mixed Language Programming in DistributedSystems”)中,描述了一種允許在同一個(gè)程序中的不同編程語(yǔ)言之間的程序調(diào)用的方法。它基于提供了一個(gè)每種語(yǔ)言的通用遠(yuǎn)程子程序調(diào)用系統(tǒng)和使用了一種描述子程序接口及要在子程序間被傳送的數(shù)據(jù)的一種系統(tǒng)。通過(guò)為每種編程語(yǔ)言定義標(biāo)準(zhǔn)映射,可以在大多數(shù)情況下自動(dòng)地以包含在用不同語(yǔ)言編寫的程序部件間接口中的活動(dòng)代理的方式,提供橫向語(yǔ)言調(diào)用所要求的數(shù)據(jù)變換。
概述在他/她設(shè)計(jì)的用戶程序中使用一個(gè)面向其它程序的接口,此程序的功能通過(guò)該接口被使用的程序設(shè)計(jì)者,目前面臨許多問(wèn)題。
如果一個(gè)設(shè)計(jì)者需要知道除了接口描述以外更多關(guān)于接口的信息,今天他就必須研究其它用戶是如何使用該接口的。不過(guò),這可能被錯(cuò)誤使用,或者條件是不同的。
設(shè)計(jì)者也可以觀察另一個(gè)程序以便知道是如何設(shè)計(jì)功能的。但是,這是有悖于使用接口的整體原則的。如果另一個(gè)程序在其設(shè)計(jì)者不知道用戶程序在設(shè)計(jì)另一個(gè)程序中使用了某些特征的情況下就被改變了,那么它就根本無(wú)法保證再會(huì)起作用了。
如果一個(gè)用戶程序的設(shè)計(jì)者希望測(cè)試他的程序和通過(guò)接口的使用,他可以與可得到的另一個(gè)程序的版本一起運(yùn)行它。當(dāng)設(shè)計(jì)者使那些程序共同起作用時(shí),則這只表明它的程序準(zhǔn)確地與另一個(gè)程序的具體實(shí)施共同起作用。如果這另一個(gè)程序?qū)τ诹硗庖粋€(gè)提供相同功能的程序被更新或改變了,則就根本無(wú)法保證它將再工作了。
用戶程序的設(shè)計(jì)者也可能與另一個(gè)程序遇到問(wèn)題,意味著它不易產(chǎn)生特定的錯(cuò)誤情況。例如非常簡(jiǎn)單的一種情況,即一些錯(cuò)誤永遠(yuǎn)也不會(huì)象在所討論的情況中那樣發(fā)生在另一個(gè)程序中。如果設(shè)計(jì)者寫出了自己的關(guān)于另一個(gè)程序的簡(jiǎn)單變型,則會(huì)有風(fēng)險(xiǎn)即他也將產(chǎn)生關(guān)于接口如何起作用的誤解。
關(guān)于設(shè)計(jì)接口的一些問(wèn)題可以總結(jié)如下——通常接口的語(yǔ)義定義是缺乏的。就存在的程度來(lái)說(shuō),它們很少是完整的和嚴(yán)格定義的,在不同于正常情況的進(jìn)程中尤其是這樣。
——獨(dú)立于合作程序的內(nèi)部變化,只要接口本身不被影響,對(duì)于使用一個(gè)接口的人來(lái)說(shuō)能驗(yàn)證這一使用是正確的測(cè)試程序經(jīng)常是缺乏的。
——這樣,一個(gè)單獨(dú)的程序不能被獨(dú)立證明,而只能與合作程序的特定版本一起被證明。每當(dāng)一個(gè)程序被改變時(shí),不僅這個(gè)程序而且所有的合作程序都必須被重新證明。本發(fā)明的一個(gè)主要目標(biāo)是能夠完整定義一個(gè)接口的功能——也就是為這個(gè)接口指定一個(gè)參考模型——然后使用這一定義去證明程序是如何使用或提供這個(gè)接口的。當(dāng)兩個(gè)軟件單元間接口上的交互作用被建立之后,本發(fā)明將承認(rèn)對(duì)這一交互的描述并支持保證對(duì)接口的定義成為完整的和一致的。
另一個(gè)目標(biāo)是陳述一個(gè)方法,使得對(duì)于一個(gè)接口及一個(gè)通過(guò)該接口與其它軟件交互作用的軟件功能的測(cè)試成為可能。
再一個(gè)目標(biāo)是為一個(gè)接口提供一個(gè)參考模型,從而使該接口兩端的軟件能夠獲得比從該接口的語(yǔ)法定義上獲得的關(guān)于另一方的行動(dòng)的更多信息。更特別的是,這一信息也將包含一個(gè)語(yǔ)義定義,用以描述另一方所期待的行為以及對(duì)另一方的測(cè)量要管理到什么程度。
本發(fā)明的另一個(gè)目標(biāo)是使對(duì)一個(gè)軟件單元的驗(yàn)證成為可能,即表明它工作正確,也是關(guān)于通過(guò)指定正確復(fù)制合作軟件允許的所有行為模式的特定測(cè)試程序,通過(guò)接口與另一個(gè)程序操作,但對(duì)于剩余的部分則不揭示關(guān)于其內(nèi)部結(jié)構(gòu)的任何內(nèi)容。
第一點(diǎn),本發(fā)明包括一個(gè)對(duì)一個(gè)接口以及一個(gè)通過(guò)該接口與其它程序件交互作用的程序件的功能的測(cè)試方法。它的執(zhí)行要通過(guò)與接口一起模擬其功能要由該接口提供的程序件的執(zhí)行,以及使用通過(guò)該接口提供的功能的程序件的執(zhí)行,通過(guò)完成此接口上的所有可能的及允許的操作,同時(shí)檢查測(cè)試的程序件以及接口沒(méi)有做任何不允許的事。
第二點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)測(cè)試一個(gè)接口以及一個(gè)其功能由另一個(gè)程序件通過(guò)該接口提供的程序件的功能。它的執(zhí)行通過(guò)模擬接口的使用,通過(guò)與接口一起測(cè)試該程序件,同時(shí)完成接口上所有可能的和允許的操作,并檢查與接口一同被測(cè)試的程序件不做任何不允許的事來(lái)完成。
第三點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)測(cè)試一個(gè)接口以及要使用通過(guò)該接口被提供的來(lái)自于第二個(gè)程序件的功能的第一個(gè)程序件的功能。它的完成通過(guò)模擬在接口中提供功能,通過(guò)與接口一起測(cè)試該第一個(gè)程序件同時(shí)處理接口上接收的所有可能的和允許的操作并返回所有可能的響應(yīng),同時(shí)注意測(cè)試中的程序不以不允許的方式使用該接口。
第四點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)在一個(gè)通信系統(tǒng)中進(jìn)行測(cè)試,其中用戶程序件能夠通過(guò)以相應(yīng)的接口與各自的用戶程序件分離的協(xié)議互相通信,新用戶程序件能夠與已存在的程序件互相通信。提供第一個(gè)和第二個(gè)輔助程序,它們包括代碼用以分別模擬接口的用戶程序件的使用和協(xié)議的功能,并用以允許這兩個(gè)輔助程序完成該接口上的所有可能的以及允許的操作,同時(shí)檢查接口另一端的程序不做任何不允許的事。新程序件通過(guò)第二個(gè)輔助程序與第一個(gè)輔助程序開(kāi)始通信連接,并執(zhí)行在兩個(gè)輔助程序中提供的操作。
第五點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)在一個(gè)通信系統(tǒng)中進(jìn)行測(cè)試,其中用戶程序件能夠通過(guò)一個(gè)以相應(yīng)的接口和新的協(xié)議程序件與各自的用戶程序件相分離的協(xié)議互相通信。提供了一個(gè)輔助程序,它包含了代碼,用以模擬一個(gè)用戶程序件對(duì)接口的使用及接口新程序件一起能被測(cè)試,以及用于允許輔助程序完成接口上所有可能的及允許的操作,并檢查借助于接口測(cè)試的協(xié)議程序件不做任何不允許的事。輔助程序件的兩個(gè)拷貝被提供,并且通過(guò)新程序件彼此開(kāi)始通信連接,并執(zhí)行在兩個(gè)拷貝中提供的操作。
第六點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)在一個(gè)通信系統(tǒng)中進(jìn)行測(cè)試,其中用戶程序件能夠通過(guò)一個(gè)協(xié)議彼此通信,該協(xié)議通過(guò)一個(gè)相應(yīng)的接口,新用戶程序件與各自的用戶程序件相分離。提供一個(gè)輔助程序,它的代碼模擬通過(guò)接口提供的協(xié)議的功能,同時(shí)使得能夠與接口一起測(cè)試新用戶程序件,執(zhí)行接口上所有可能的和允許的操作并檢查在接口另一端的程序不做任何不允許的事。新用戶程序件的拷貝被制作,并通過(guò)輔助程序彼此開(kāi)始通信連接,然后執(zhí)行輔助程序中提供的操作。
第七點(diǎn),本發(fā)明包括一個(gè)方法,用來(lái)為一個(gè)通信系統(tǒng)提供一個(gè)參考模型,此系統(tǒng)中的程序件能通過(guò)一個(gè)對(duì)相應(yīng)程序件接口上的這些程序件相分離的協(xié)議彼此通信。通過(guò)引入代碼使得第一個(gè)輔助程序成為代表通過(guò)協(xié)議彼此通信并能在通信中進(jìn)行調(diào)用和回答的程序件,使得第二個(gè)輔助程序代表協(xié)議,允許第一個(gè)輔助程序能夠在通信中既作為一個(gè)調(diào)用實(shí)例又作為一個(gè)回答實(shí)例,并允許兩個(gè)實(shí)例執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查在接口另一端的一個(gè)程序不做任何不允許的事生成第一個(gè)和第二個(gè)輔助程序。
第八點(diǎn),本發(fā)明包括了一個(gè)方法,用來(lái)為一個(gè)接口提供一個(gè)參考模型。通過(guò)引入代碼,使得第一個(gè)輔助程序能夠模擬接口的使用,使得第二個(gè)輔助程序能夠模擬接口中提供的功能,使得兩個(gè)程序都能執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查在接口另一端的一個(gè)程序不做任何不允許的事生成第一個(gè)和第二個(gè)輔助程序。
第九點(diǎn),本發(fā)明包括一個(gè)系統(tǒng)用以測(cè)試一個(gè)接口的功能,該接口包括第一個(gè)功能用來(lái)模擬接口的使用和第二個(gè)功能用來(lái)模擬提供接口中的功能,通過(guò)執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查在接口另一端的程序沒(méi)有做任何不允許的事。
第十點(diǎn),本發(fā)明包括一個(gè)系統(tǒng)用來(lái)測(cè)試一個(gè)通信系統(tǒng)中的一個(gè)接口,該系統(tǒng)中的程序件能夠通過(guò)以對(duì)相應(yīng)程序件的接口與這些程序件相分離的一個(gè)協(xié)議彼此通信,第一個(gè)輔助功能代表通過(guò)協(xié)議彼此通信的程序件,第二個(gè)輔助功能代表這個(gè)協(xié)議。第一個(gè)輔助功能包括使其在通信中既做一個(gè)調(diào)用實(shí)例又作為一個(gè)回答實(shí)例的裝置。這兩個(gè)實(shí)例都能夠執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查在接口另一端的程序不做任何不允許的事。
第十一點(diǎn),本發(fā)明包括一個(gè)系統(tǒng),用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中用戶程序件能夠通過(guò)一個(gè)經(jīng)相應(yīng)接口及能與已存在的用戶程序件通信的新用戶程序件與各自用戶程序件相分離的協(xié)議彼此通信。系統(tǒng)包括代碼,用以定義第一個(gè)和第二個(gè)輔助程序,模擬由一個(gè)用戶程序件分別使用接口和協(xié)議的功能,并允許兩個(gè)輔助程序執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查在接口另一端的程序沒(méi)有做任何不允許的事。還提供了使新程序件通過(guò)第二個(gè)輔助程序與第一個(gè)輔助程序開(kāi)始通信連接的裝置以及執(zhí)行在兩個(gè)輔助程序中提供的操作的裝置。
第十二點(diǎn),本發(fā)明包括一個(gè)系統(tǒng),用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中用戶程序件能夠通過(guò)以一個(gè)相應(yīng)的接口,新協(xié)議程序件與各自的用戶程序件相分離的協(xié)議彼此通信。系統(tǒng)包括代碼,用來(lái)定義一個(gè)輔助程序模擬由一個(gè)用戶程序件對(duì)接口的使用及接口新程序件可被測(cè)試,以允許輔助程序執(zhí)行接口上所有可能的和允許的操作,并檢查以接口方式檢測(cè)的協(xié)議程序件不做任何不允許的事。提供了裝置使輔助程序的兩個(gè)拷貝通過(guò)新程序件彼此開(kāi)始通信連接,并執(zhí)行在兩個(gè)拷貝中提供的操作。
第十三點(diǎn),本發(fā)明包括一個(gè)系統(tǒng),用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中用戶程序件能夠通過(guò)以一個(gè)相應(yīng)的接口,新用戶程序件與各自的用戶程序件相分離的協(xié)議彼此通信。系統(tǒng)包含代碼,用來(lái)定義一個(gè)輔助程序通過(guò)接口模擬協(xié)議提供的功能,同時(shí)允許測(cè)試新用戶程序及接口,并執(zhí)行接口上所有可能的和允許的操作而且檢查接口另一端的程序不做任何不允許的事。提供了裝置使新用戶程序件的兩個(gè)拷貝通過(guò)輔助程序彼此開(kāi)始通信連接以執(zhí)行在輔助程序中提供的操作。
以上各點(diǎn)的實(shí)施方案的特征在相應(yīng)的子權(quán)利要求中闡述。
一個(gè)接口的參考模型在這里意味著接口不僅在語(yǔ)法上也在語(yǔ)義上被定義。
整個(gè)參考模型是可執(zhí)行的。
一個(gè)接口的設(shè)計(jì)意味著,除了為接口本身提供軟件外,還有輔助程序的設(shè)計(jì)。
第一個(gè)輔助程序作為一個(gè)包含所有允許使用的情況的接口的完整用戶被生成。第二個(gè)輔助程序處理所有使用情況并且表明,從接口的觀點(diǎn)可以看到,實(shí)際中提供接口功能的程序中將發(fā)生什么。輔助程序與接口同樣是可見(jiàn)的,它們包含關(guān)于接口的完整信息。輔助程序總是與接口一起被處理,它們被一起更改和發(fā)送。
總是可能建立一個(gè)輔助程序和接口的可執(zhí)行單元的。這兩個(gè)輔助程序互相監(jiān)視,以便如果另一個(gè)程序做了被禁止的事就將錯(cuò)誤指出來(lái)。首先這用在測(cè)試輔助程序中,后來(lái)用在當(dāng)輔助程序中的一個(gè)被用作測(cè)試工具時(shí)。
當(dāng)使用一個(gè)接口設(shè)計(jì)程序時(shí),設(shè)計(jì)者可以研究第一個(gè)輔助程序,其中可以發(fā)現(xiàn)被使用的情況。進(jìn)一步講,設(shè)計(jì)者可以更加理解程序是如何提供接口功能的業(yè)務(wù)的。原則上,它們都作為第二個(gè)輔助程序起作用。
這樣這個(gè)程序?qū)⒈粶y(cè)試,一個(gè)可執(zhí)行單元與接口和第二個(gè)輔助程序一起被生成。這一配置提供如下優(yōu)點(diǎn)——第二個(gè)輔助程序總是可獲得的,因?yàn)樗桥c接口一起被提供的。
——第二個(gè)輔助程序起作用,因?yàn)樗菫樘峁┙涌诠δ艿拿總€(gè)設(shè)計(jì)做參考的。
——第二個(gè)輔助程序被定界,因?yàn)樗呀?jīng)被配置,它不需要另外的再需要另外一個(gè)程序等的程序。
——第二個(gè)輔助程序在錯(cuò)誤使用接口的情況下,以及其它提供接口業(yè)務(wù)的程序被允許的情況下,可以提供清楚的錯(cuò)誤打印輸出。
當(dāng)設(shè)計(jì)一個(gè)提供接口功能的程序時(shí),可能從第一個(gè)輔助程序中看到可能使用哪種情況。所有這些都必須被處理。不過(guò),可以假設(shè)一個(gè)用戶軟件不會(huì)超過(guò)這些使用情況——當(dāng)這個(gè)用戶程序與第二個(gè)輔助程序一起被測(cè)試時(shí)可以發(fā)現(xiàn)這一點(diǎn)。
另外,沒(méi)有必要介紹第二個(gè)軟件處理這些的所有可能的方法。這樣,一些在接口中描述的錯(cuò)誤情況將會(huì)例如永遠(yuǎn)不在所討論的接口設(shè)計(jì)中出現(xiàn)。同樣如果每個(gè)用戶程序必須為所有可想象到的錯(cuò)誤情況做準(zhǔn)備,則所有錯(cuò)誤情況都不必出現(xiàn)在所討論的實(shí)現(xiàn)中。
當(dāng)測(cè)試新程序時(shí),將與第一個(gè)輔助程序和接口一起產(chǎn)生一個(gè)可執(zhí)行單元。所有在第一個(gè)輔助程序中的使用情況被執(zhí)行,可得到所有功能的執(zhí)行。第一個(gè)輔助程序監(jiān)視來(lái)自第二個(gè)程序的每個(gè)反應(yīng)。
利用一個(gè)所謂的覆蓋程度指示器就可能看到一個(gè)新程序中被運(yùn)行及未被運(yùn)行的代碼部分。與其它接口不關(guān)聯(lián)的代碼以及未被運(yùn)行的代碼將由充分的理由被懷疑是錯(cuò)誤的。
圖的簡(jiǎn)略描述現(xiàn)在參考附圖更加詳細(xì)地描述本發(fā)明,其中
圖1通過(guò)一個(gè)流程圖說(shuō)明了本發(fā)明的一個(gè)簡(jiǎn)單實(shí)施方案,圖2以方框圖的形式提供了由于存在許多不同的出入線協(xié)議而出現(xiàn)在電話交換機(jī)中的問(wèn)題的討論基礎(chǔ)。
圖3為與圖2類似的方框圖,只是增加了關(guān)于本發(fā)明對(duì)于問(wèn)題的可能處理的輔助程序。
圖4中的流程圖解釋了一個(gè)電話交換中的不同操作,比如包含在一個(gè)通常的電話呼叫中的,是如何根據(jù)本發(fā)明由輔助程序執(zhí)行和管理的。
來(lái)自圖4所示例子的圖5-10說(shuō)明了在不同的使用情況下本發(fā)明通常包含什么。
實(shí)施方案的具體描述本發(fā)明的一個(gè)重要方面是它包含了一個(gè)接口的參考模型,當(dāng)定義和測(cè)試接口以及通過(guò)該接口與其它軟件交互作用的軟件的功能時(shí)使用。這個(gè)參考模型包含第一個(gè)和第二個(gè)輔助程序,其中第一個(gè)輔助程序是用來(lái)模擬接口的使用的模型程序,第二個(gè)輔助程序是用來(lái)模擬它在接口中提供功能的模型程序。這兩個(gè)程序被設(shè)計(jì)為能夠執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查另一個(gè)程序沒(méi)有做任何被禁止的事。
下面對(duì)于參考模型的功能的不同實(shí)現(xiàn)的描述,為了簡(jiǎn)單起見(jiàn),主要是指明了兩個(gè)輔助程序通過(guò)接口交互作用,只用于驗(yàn)證輔助程序的參考模型的一種操作方式。
當(dāng)測(cè)試接口任意一側(cè)的一個(gè)新程序件時(shí),為了理解參考模型的功能,必須假設(shè)這個(gè)程序件代替在同一側(cè)的輔助程序,因?yàn)樗窃诖饲闆r下正在工作的另一端的輔助程序?!氨惶娲钡妮o助程序在所討論的測(cè)試中一般不起作用,但是如果和當(dāng)錯(cuò)誤出現(xiàn)的時(shí)候,可以用作一個(gè)解釋模型。
在某些情況下,事實(shí)上可以想象到該參考模型的市場(chǎng)實(shí)現(xiàn),如果提供的功能和使用輔助程序的功能對(duì)于實(shí)際應(yīng)用是煩瑣和不感興趣的,則它只包含一個(gè)輔助程序,也就是只有用以模擬接口使用的輔助程序或只有用以模擬接口提供的輔助程序,不過(guò),當(dāng)設(shè)計(jì)模型時(shí)對(duì)于包含在模型中的輔助程序,它也可能產(chǎn)生一個(gè)只用于此測(cè)試的模型的測(cè)試版本,為此目的也包含補(bǔ)充的輔助程序。
在某些情況下,也可以想象到第二個(gè)輔助程序,也就是提供的一個(gè),包含一個(gè)提供接口的程序所需的所有功能。這個(gè)第二個(gè)輔助程序也是能夠在整個(gè)系統(tǒng)中提供功能的程序。在這種情況下,第二個(gè)輔助程序能被設(shè)計(jì)成這樣,使得用于檢測(cè)不允許操作的檢查例程是可忽略的。這些在一個(gè)被測(cè)試的操作系統(tǒng)中是不需要的,其中它們只是耗費(fèi)處理器的容量。
參考圖1,現(xiàn)在來(lái)描述一個(gè)本發(fā)明的簡(jiǎn)單實(shí)施方案。作為背景,將首先描述在一個(gè)可想象到的狀況下的標(biāo)準(zhǔn),它是基于技術(shù)標(biāo)準(zhǔn)的。
一個(gè)程序,后面稱作PROG,需要一個(gè)緩沖區(qū)用于偶爾的數(shù)據(jù)存儲(chǔ)。一個(gè)緩沖區(qū)是由操作系統(tǒng)所擁有的資源,后面稱其為OS。
PROG必須通過(guò)一個(gè)面向OS請(qǐng)求的接口訪問(wèn)這個(gè)的緩沖區(qū)。
假設(shè)PROG是用C語(yǔ)言編寫的。一個(gè)典型的C語(yǔ)言手冊(cè)會(huì)給出下面的接口描述“char*malloc(magnitude)占據(jù)magnitude個(gè)字節(jié)的一個(gè)連續(xù)緩沖區(qū),如果占據(jù)成功將返回指向所占區(qū)域開(kāi)始位置的一個(gè)指針,否則返回一個(gè)空指針?!边€可以發(fā)現(xiàn)下面的內(nèi)容“void free(pointer)釋放指針?biāo)傅囊粋€(gè)緩沖區(qū),此緩沖區(qū)先前由一個(gè)malloc調(diào)用所占據(jù)?!睂?duì)于一個(gè)熟練的程序員來(lái)說(shuō),這就可以被認(rèn)為是完全充足的信息了。
不過(guò)下面將指出這一信息還是遠(yuǎn)遠(yuǎn)不夠的——假設(shè)這個(gè)malloc返回一個(gè)空指針。這就是說(shuō)程序PROG得不到對(duì)于所要求緩沖區(qū)的訪問(wèn)。根據(jù)操作系統(tǒng)的內(nèi)部設(shè)計(jì),下面的任何一種后續(xù)動(dòng)作都是可能的
1)重試,這是暫時(shí)的。
2)不可能再進(jìn)一步繼續(xù),為了卸載操作系統(tǒng),不得不以控制方式結(jié)束PROG程序。
3)什么也不能做,操作系統(tǒng)沒(méi)有緩沖區(qū)是不可能工作的,整個(gè)系統(tǒng)將直接崩潰。
——如果PROG忘記釋放空閑的緩沖區(qū),它將被丟失嗎?——如果PROG將指向任何別的地方而不是將用malloc得到的先前緩沖區(qū)的指針釋放,將會(huì)出現(xiàn)什么呢?1)什么也不出現(xiàn)。操作系統(tǒng)發(fā)現(xiàn)了錯(cuò)誤并且當(dāng)PROG最終結(jié)束時(shí),所有PROG使用過(guò)但忘記釋放的緩沖區(qū)都將被釋放。
2)操作系統(tǒng)依賴PROG,導(dǎo)致完全不可預(yù)測(cè)的結(jié)果。
——如果PROG請(qǐng)求一個(gè)magnitude0的緩沖區(qū),將發(fā)生什么呢?這樣一個(gè)緩沖區(qū)需要被釋放嗎?在實(shí)際中,程序PROG的設(shè)計(jì)者將猜測(cè)操作系統(tǒng)是如何工作的以及當(dāng)PROG何時(shí)被完成,他/她將與一個(gè)操作系統(tǒng)一起執(zhí)行PROG,并且誤解,如果有的話,將被更正—這就是常被稱做的調(diào)試(debugging)。不過(guò),這一過(guò)程的問(wèn)題是,唯一被保證的一件事是PROG作為用于操作系統(tǒng)的特定版本工作。如果PROG要用于另一個(gè)操作系統(tǒng)或一個(gè)老操作系統(tǒng)的新版本,就需要再驗(yàn)證并可能改正PROG了。
還不能保證所有的功能都被測(cè)試。一般來(lái)說(shuō),讓一個(gè)操作系統(tǒng)在精確要求的時(shí)刻應(yīng)答“缺少緩沖區(qū)”是非常困難的。如果你希望驗(yàn)證這個(gè)程序關(guān)于缺少緩沖區(qū)的問(wèn)題,就必須自己編寫一個(gè)測(cè)試程序模擬這種情況下操作系統(tǒng)的標(biāo)準(zhǔn)。這一測(cè)試程序的問(wèn)題是它不得不被重新設(shè)計(jì)。如果你發(fā)現(xiàn)了錯(cuò)誤,就會(huì)輕易相信是測(cè)試程序有錯(cuò)并反而將它改動(dòng)。因此,事實(shí)上你不會(huì)知道,當(dāng)一切看起來(lái)都在起作用時(shí),測(cè)試程序是否象一個(gè)真正的操作系統(tǒng)那樣動(dòng)作。
至此只研究了PROG設(shè)計(jì)者的問(wèn)題。但是一個(gè)操作系統(tǒng)的設(shè)計(jì)者也必須能夠確定一個(gè)新更新的操作系統(tǒng)不會(huì)為用戶程序產(chǎn)生問(wèn)題。也許只確定PROG與新操作系統(tǒng)一起工作還是不夠的。也許PROG甚至不使用已改變的功能。
這里將提供一個(gè)關(guān)于應(yīng)用本發(fā)明時(shí)所討論的內(nèi)存分配接口看起來(lái)象什么的描述。
根據(jù)本發(fā)明,并參考圖1中的流程圖,標(biāo)號(hào)為1的接口被設(shè)計(jì)為與一個(gè)模型程序A一起模擬接口的使用,一個(gè)模型程序B模擬它在接口中提供的功能。模型A和B作用的方式由所討論的流程圖更詳細(xì)地說(shuō)明。
在所舉的例子中,模型程序B首先由一個(gè)聲明的完全可獲得的區(qū)域開(kāi)始,該區(qū)域從頭開(kāi)始被聲明為未分塊的。然后進(jìn)一步實(shí)施為等待有人請(qǐng)求一個(gè)區(qū)域。當(dāng)模型程序A要啟動(dòng)時(shí),根據(jù)箭頭2,它通過(guò)接口1請(qǐng)求訪問(wèn),見(jiàn)箭頭4,指向一個(gè)緩沖區(qū),它將被模擬比如假設(shè)是由模型程序B所擁有。請(qǐng)求4由調(diào)用malloc(magnitude)去進(jìn)行,其中的概念“magnitude”是一個(gè)參數(shù),用以表明所請(qǐng)求緩沖區(qū)的量,并在A啟動(dòng)時(shí)被賦一個(gè)值。
步驟6是指檢查并不是一個(gè)重新占據(jù)緩沖區(qū)的嘗試的問(wèn)題,盡管前面的一個(gè)已經(jīng)因?yàn)榧渔i而失敗。如果后者屬于這種情況,則流程將終止在步驟8。否則流程走向步驟10,它包含一個(gè)對(duì)于用戶程序請(qǐng)求magnitude為0的緩沖區(qū)的加鎖。如果這樣一個(gè)請(qǐng)求被標(biāo)明了,則流程將終止在步驟12。否則流程轉(zhuǎn)向步驟14,以確定是否有空閑區(qū)域。如果沒(méi)有,則在步驟16標(biāo)明一個(gè)加鎖,結(jié)果返回一個(gè)空指針,見(jiàn)箭頭18,指向程序A。如果一個(gè)區(qū)域是可獲得的,則它將在步驟20被占據(jù)并且返回malloc=指針,見(jiàn)箭頭22,指向程序A。此區(qū)域被使用后,它將帶著空閑(指針)被返回到程序B,見(jiàn)箭頭24。進(jìn)行到模型程序B中的步驟26,其中檢查是否恰當(dāng)?shù)膮^(qū)域被返回。如果不是這樣,則在步驟28中標(biāo)明錯(cuò)誤。否則在步驟30中釋放該區(qū)域。整個(gè)流程在程序A中結(jié)束,見(jiàn)箭頭32。在使用該程序的緩沖區(qū)結(jié)束它的執(zhí)行時(shí)終止模型程序B。檢查是否分配的緩沖區(qū)都被返回,如果不是,則提供一個(gè)錯(cuò)誤打印輸出。模型程序A和B都記錄了在執(zhí)行中發(fā)生的事。
當(dāng)然,接口也包括緩沖區(qū)中的寫和讀操作。因?yàn)樗鼈儗?duì)于解釋本發(fā)明沒(méi)有什么作用,所以就省略了。
從圖1中的參考模型可以得到關(guān)于接口的下述結(jié)論從用戶程序A的觀點(diǎn)來(lái)看——不允許已經(jīng)在一個(gè)malloc調(diào)用中得到終止的用戶重試,參看步驟6。
——不允許請(qǐng)求magnitude=0的緩沖區(qū),參看步驟10。
——區(qū)域必須以空閑被返回。空閑只被允許由malloc得到的和還未被返回的區(qū)域使用,參見(jiàn)箭頭24。
從緩沖區(qū)管理程序B的觀點(diǎn)來(lái)看——所請(qǐng)求的緩沖區(qū)總是大于0,參看步驟10。
——看起來(lái)空閑的指針不需要被檢查。
——用戶程序?qū)⒎祷匾粋€(gè)得到的緩沖區(qū)。
如果用戶程序要破壞這些規(guī)則,這將在對(duì)模型程序B測(cè)試時(shí)被發(fā)現(xiàn)。
接口的參考模型也可以被用于更復(fù)雜的接口。作為一個(gè)例子,現(xiàn)在將給出它是怎樣被用于一個(gè)協(xié)議的。下面將提供一個(gè)討論,參考圖2和3中關(guān)于出現(xiàn)在一個(gè)公共電話交換系統(tǒng)中的問(wèn)題,及原則上這些問(wèn)題如何利用本發(fā)明被解決。
一個(gè)電話交換機(jī)的目標(biāo)可以被說(shuō)成相互連接一個(gè)入呼叫與一個(gè)出呼叫的。
為了建立一個(gè)呼叫,需要一個(gè)協(xié)議來(lái)轉(zhuǎn)換控制信息,例如它需要到達(dá)哪個(gè)目標(biāo)(電話號(hào)碼)。由于歷史的和技術(shù)上的原因,存在大量不同的這類協(xié)議,由圖2中的P1,P2…Pn標(biāo)明。其中較著名的一個(gè),例如由圖2中假設(shè)為P1的,就是用于一個(gè)通常的按鍵電話機(jī),其中電話線上的音頻信號(hào)通知需要到達(dá)的電話號(hào)碼。另一個(gè)著名的例子,例如圖2中的P2,是撥號(hào)信令,其中的數(shù)字由間歇脈沖序列表示。例如數(shù)字4由順序的四個(gè)間歇脈沖表示。
假設(shè)一個(gè)呼叫產(chǎn)生于一個(gè)撥號(hào)裝置,根據(jù)圖2中箭頭46的入呼叫,到達(dá)一個(gè)音頻撥號(hào)裝置器,成為根據(jù)箭頭48的出呼叫。例如它也許是一個(gè)向公司交換機(jī)直接撥號(hào)的呼叫的問(wèn)題,其中內(nèi)部號(hào)碼以音頻代碼的形式被從公用交換機(jī)傳送到公司交換機(jī)。
這意味著需要一個(gè)程序,由圖2中的方框50標(biāo)明,它能對(duì)連續(xù)的間歇脈沖計(jì)數(shù),以及一個(gè)由圖2中的方框52標(biāo)明的另一個(gè)程序,它能將一個(gè)數(shù)字翻譯成一個(gè)音頻代碼并將其發(fā)送到線路上。為了使程序50和52能彼此通信,它們必須有公共“語(yǔ)言”——協(xié)議—利用此協(xié)議它們才能通信。在這一語(yǔ)言中,諸如間歇脈沖或者音頻代碼這樣的概念都是不被使用的。這樣,所有的電話交換機(jī)都有一個(gè)內(nèi)部協(xié)議,利用圖2中的線54標(biāo)明,所有去往或來(lái)自它的可以想到的線路協(xié)議都可以由它翻譯。
如果現(xiàn)在需要在這樣一個(gè)電話交換機(jī)中引入另外一個(gè)協(xié)議,則應(yīng)該使這個(gè)新協(xié)議能與任何一個(gè)已存在的協(xié)議互相配合。另外應(yīng)當(dāng)保證所有已存在的協(xié)議應(yīng)與這個(gè)新協(xié)議互相配合。這樣設(shè)計(jì)一個(gè)新協(xié)議的復(fù)雜性就隨著已存在的協(xié)議數(shù)而增加了。
根據(jù)圖2中的情況,內(nèi)部協(xié)議54可以被看作是本發(fā)明所關(guān)心的一種接口。如果引入根據(jù)本發(fā)明的參考模型,就可以得到圖3中所表示的一個(gè)配置。這個(gè)參考模型一方面包含一個(gè)代表主叫方的模型程序A(根據(jù)在電信領(lǐng)域通常的語(yǔ)法使用“A方”),另一方面包含了代表被叫方的模型程序B(“B方”)。不過(guò),使本例區(qū)別于前一個(gè)例子的本質(zhì)一點(diǎn)就是這些模型中的一個(gè)通過(guò)內(nèi)部協(xié)議看到另一個(gè)模型,以及對(duì)另一方的接口即內(nèi)部協(xié)議的接口。A和B模型被設(shè)計(jì)為能夠執(zhí)行內(nèi)部協(xié)議54上的所有可能的及允許的操作,同時(shí)它們檢查接口上沒(méi)有不允許的操作。為了這些檢查能在接口被執(zhí)行,內(nèi)部協(xié)議由一個(gè)內(nèi)部協(xié)議模型所代替,此模型另外還包含程序件例程,用來(lái)發(fā)現(xiàn)不允許的操作,如果有的話。
根據(jù)圖3所示的配置,可能“振鈴”,也就是建立一個(gè)A與B之間的呼叫,但并不通話,通話是由另外一個(gè)接口控制的。但也可能在協(xié)議P1-Pn的任一個(gè)上從A“振鈴”,也可能在B接收一個(gè)“呼叫”。
模型程序A和B不需要任何自己的硬件,因?yàn)樗鼈兪羌兇獾某绦蚣卧?。它們總是與內(nèi)部協(xié)議一起是可獲得的。例如,如果一個(gè)入?yún)f(xié)議Px已準(zhǔn)備好,就可能立刻在B模型上運(yùn)行它。
A模型應(yīng)當(dāng)能做一個(gè)入?yún)f(xié)議所能做的一切。B模型應(yīng)當(dāng)能做一個(gè)出協(xié)議所能做的一切并且由內(nèi)部協(xié)議54傳遞的。這意味著——一個(gè)出協(xié)議,例如P2必須準(zhǔn)備處理模型A能提供的一切,這意味著它既能進(jìn)一步發(fā)送,也能拒絕,例如通知“不能做”。因?yàn)檫@個(gè)出協(xié)議P2能處理所有由A模型給出的一切,所以沒(méi)有其它入?yún)f(xié)議能用一個(gè)新的,以前被測(cè)試或未預(yù)見(jiàn)的功能使其驚奇。
——一個(gè)入?yún)f(xié)議,例如P2必須為這種情況做準(zhǔn)備,即出協(xié)議,例如P1不能處理P2中存在的功能。如果例如所討論的入?yún)f(xié)議P2是用于一個(gè)按鍵式話機(jī),則如果出協(xié)議也是P2,重呼就會(huì)起作用,但是如果產(chǎn)生了一個(gè)長(zhǎng)距離呼叫,例如向出協(xié)議P1的,則將出現(xiàn)P1沒(méi)有此功能的情況。這必須由入方的P2進(jìn)行準(zhǔn)備。B模型既可以作為它已經(jīng)重呼也可以作為它沒(méi)有重呼而出現(xiàn)。
——一個(gè)入?yún)f(xié)議,例如P2,能有不由內(nèi)部協(xié)議處理的功能。這從A模型中出現(xiàn),此模型不處理這些功能。
圖4是用來(lái)解釋根據(jù)圖2和圖3的電話交換機(jī)中的不同操作作為在一個(gè)普通電話通話中執(zhí)行的例子,是如何能在一個(gè)A用戶的模型A′和B用戶的模型B′之間運(yùn)行和監(jiān)視的,它們分別通過(guò)接口56和58中的每一個(gè)被連接到一個(gè)內(nèi)部協(xié)議55。
本例反映了A和B方的小部分使用情況,當(dāng)它們出現(xiàn)時(shí),每個(gè)都將被特別強(qiáng)調(diào)。在一個(gè)實(shí)際的內(nèi)部協(xié)議中,兩方之間存在更多的信號(hào),并且許多事情可能不僅分別發(fā)生在A方和B方,還發(fā)生在內(nèi)部協(xié)議中,但這已被排除了以便使本例描述得更清楚。特別是,內(nèi)部協(xié)議被簡(jiǎn)化了。這也由程序件來(lái)實(shí)現(xiàn),并且在實(shí)際情況中有自己的事件——例如它能通知另一方它失去了與另一方的聯(lián)系。
在文中,本發(fā)明的一個(gè)本質(zhì)特征值得被強(qiáng)調(diào)。這就是,沒(méi)有一個(gè)用戶模型知道內(nèi)部協(xié)議55的另一端是否也是一個(gè)模型或者它是否是“實(shí)際”協(xié)議P1-Pn中的一個(gè)。盡管下面對(duì)于出現(xiàn)在圖4中的流程描述為了簡(jiǎn)單起見(jiàn),主要概述使A′和B′模型通過(guò)內(nèi)部協(xié)議55通信,但這并不意味著只是一個(gè)進(jìn)程,而是兩個(gè)完全獨(dú)立的,偶爾交織的進(jìn)程的問(wèn)題。這些進(jìn)程,即一個(gè)A′進(jìn)程和一個(gè)B′進(jìn)程是“公正”分離的。
B′模型由賦值的參數(shù)Tb1,Tb2和Tb3以及一個(gè)為B′用戶分配的狀態(tài)開(kāi)始,并通過(guò)等待在60標(biāo)明的一個(gè)呼叫開(kāi)始。Tb1標(biāo)明呼叫將持續(xù)多長(zhǎng)時(shí)間。Tb2標(biāo)明在B′作出反應(yīng)之前經(jīng)過(guò)了多少時(shí)間,但也能表明B′根本不應(yīng)答。Tb3表明B′掛機(jī)之前經(jīng)過(guò)了多少時(shí)間。B′用戶的狀態(tài)有忙,空閑或鎖住。
62標(biāo)明的A′模型由賦值的參數(shù)Ta1和Ta2開(kāi)始。Ta1表明A′模型在它掛機(jī)之前需從另一方等待響應(yīng)多長(zhǎng)時(shí)間。Ta2表明A′在掛起之前保持通話狀態(tài)的時(shí)間長(zhǎng)度。
如果實(shí)施需要的話,內(nèi)部協(xié)議被啟動(dòng)使得能夠在雙方間傳遞消息。本例中的內(nèi)部協(xié)議不執(zhí)行自己的初始化。在另一個(gè)更復(fù)雜的例子中,也可以想象到它由一個(gè)參數(shù)開(kāi)始,該參數(shù)表明在啟動(dòng)內(nèi)部協(xié)議后經(jīng)過(guò)多長(zhǎng)時(shí)間通知雙方連接已被拆除,因此允許雙方以被控制的方式拆除連接。
當(dāng)來(lái)自另一方的一個(gè)消息到達(dá)時(shí),一個(gè)等待模型就終止,然后轉(zhuǎn)而跟隨這一消息。在此連接中并為了更好地理解下面的描述,很重要的是要認(rèn)識(shí)到每個(gè)消息有三部分,即分別為發(fā)送方希望什么,內(nèi)部協(xié)議傳送什么,以及接收方如何理解它。
A′模型由一個(gè)建立呼叫的請(qǐng)求開(kāi)始,見(jiàn)箭頭64,通過(guò)內(nèi)部協(xié)議中一個(gè)信號(hào)“發(fā)送一個(gè)呼叫”,見(jiàn)箭頭66,指向一個(gè)呼叫,見(jiàn)箭頭68,指向B′模型。這將終止它的等待并在70開(kāi)始,測(cè)量時(shí)間Tb1。經(jīng)過(guò)這一時(shí)間,B′模型根據(jù)用戶狀態(tài)繼續(xù),該狀態(tài)是在啟動(dòng)是根據(jù)上面被賦值的。
如果B′用戶的狀態(tài)是忙或找不到的,B′模型的事件進(jìn)程就被終止,在72標(biāo)明,并分別通過(guò)一個(gè)信號(hào)“忙”或“得不到”,在內(nèi)部協(xié)議中分別為箭頭74和76,A′模型將消息理解為“發(fā)送一個(gè)忙音”,見(jiàn)箭頭78,和“發(fā)送一個(gè)不可找到音”,見(jiàn)箭頭80。A′模型當(dāng)然不發(fā)送任何音——它不能。不過(guò),一個(gè)實(shí)際的協(xié)議在這種情況下將發(fā)送一個(gè)音頻。A′模型的事件進(jìn)程被終止,在82標(biāo)明。
事件68,74,78和68,76,80分別代表A方的第一和第二種使用情況,也就是B方在來(lái)自A方的呼叫上分別發(fā)送“忙”和“得不到”。
如果B用戶的狀態(tài)為空閑,則在內(nèi)部協(xié)議中發(fā)送信號(hào)“呼叫準(zhǔn)備好”,見(jiàn)箭頭84,指向A方,并被A′模型理解為“發(fā)送撥號(hào)音”,見(jiàn)箭頭86。當(dāng)然,A′模型在這種情況下可以不發(fā)送音頻。由于上面描述的“發(fā)送忙音”和“發(fā)送得不到音”的情況,就只有一個(gè)描述提供在一個(gè)實(shí)際協(xié)議中能做什么的建議的問(wèn)題。如果在上下文中有一個(gè)撥號(hào)音,則現(xiàn)在它將被發(fā)送。同時(shí)B′模型開(kāi)始,如88所示,測(cè)量時(shí)間Tb2,且A′模型開(kāi)始,如90所示,測(cè)量時(shí)間Ta1。
在參數(shù)Tb2確立的時(shí)間之后,B′模型向A′模型發(fā)送一個(gè)應(yīng)答,見(jiàn)箭頭92,它由內(nèi)部協(xié)議作為“B應(yīng)答”被傳送,見(jiàn)箭頭94,并被A′模型理解為“終止撥號(hào)音”,見(jiàn)箭頭96。A′模型終止測(cè)量時(shí)間Ta1并轉(zhuǎn)而開(kāi)始測(cè)量時(shí)間Ta2,如98所示,在請(qǐng)求被執(zhí)行之后。
A′模型如箭頭100所示,既可以在等待另一方應(yīng)答的參數(shù)Ta1確立的時(shí)間之后,也可以在由通話狀態(tài)的參數(shù)Ta2確立的時(shí)間之后掛起,這取決于兩個(gè)時(shí)間標(biāo)準(zhǔn)中的哪一個(gè)是激活的。
事件84,86,90和92,94,96,98分別代表A方的第三和第四種使用情況,也就是當(dāng)A方呼叫時(shí),B方為空閑的但并不應(yīng)答,和B方應(yīng)答但并不掛起。B方的第一和第二種使用情況以相應(yīng)的方法出現(xiàn)在這里,也就是分別為,A方建立一個(gè)呼叫,但又在B方應(yīng)答之前掛起,或者在B方應(yīng)答之后掛起。
在與發(fā)送消息B應(yīng)答一起,見(jiàn)箭頭94,B′模型開(kāi)始測(cè)量時(shí)間Tb3,如102所示。這一時(shí)間過(guò)去之后,B′模型掛起,由箭頭104標(biāo)明。這代表A方的第五種使用情況,也就是當(dāng)A方呼叫時(shí),B方應(yīng)答并隨后掛起。以相應(yīng)的方式,B方的第三種使用情況出現(xiàn)在這里,也就是A方建立一個(gè)呼叫,但在B方掛起之前并不掛起。
從上面參考圖4的描述中,可以得到一些語(yǔ)義規(guī)則,例如——A方在B方返回狀態(tài)之前不能掛機(jī),——在找不到/忙后A方和B方都不被允許發(fā)送另外的消息,——B應(yīng)答只在B-空閑之后被發(fā)送。
對(duì)于A′模型,要通過(guò)根據(jù)箭頭106的內(nèi)部協(xié)議中的“A拆除連接”信號(hào),發(fā)向B方的根據(jù)箭頭106的關(guān)于確認(rèn)消息的請(qǐng)求的信號(hào),及相應(yīng)的來(lái)自B方的根據(jù)箭頭110的確認(rèn)“拆除連接”,根據(jù)箭頭112和箭頭114指向終止113的內(nèi)部協(xié)議中的“B準(zhǔn)備好”信號(hào)拆除連接以終止。對(duì)于B′模型,要通過(guò)根據(jù)箭頭116的內(nèi)部協(xié)議中信號(hào)“B拆除連接”,發(fā)向A的根據(jù)箭頭118的確認(rèn)消息請(qǐng)求信號(hào)及一個(gè)相應(yīng)的來(lái)自A方的根據(jù)箭頭120的確認(rèn)消息“拆除連接”,根據(jù)內(nèi)部協(xié)議中箭頭122和箭頭124指向終止125的信號(hào)“A準(zhǔn)備好”進(jìn)行拆除連接。
從上面的情況看來(lái),在不能保證另一方確認(rèn)時(shí),沒(méi)有任何一方必須拆除連接。盡管沒(méi)有表示出來(lái),但也能想象到分別在步驟108與110,步驟118與120之間插入一個(gè)延遲。
從圖4所示的例子開(kāi)始,將給出在討論通信情況時(shí)本發(fā)明一般含義的詳細(xì)分析。
假設(shè)首先討論一個(gè)公用電話站中的完整的線路接口。圖4可以以與圖5所示的方式另外被重畫,同時(shí)省略所有的細(xì)節(jié),這樣所得到的可以被描繪為一個(gè)參考模型,它包含三部分,即除了A′和B′模型還有一個(gè)內(nèi)部協(xié)議模型I,與位于A′模型和I模型之間的接口56,及位于I模型和B′模型之間的接口58。
如果你現(xiàn)在更仔細(xì)地研究I模型,則會(huì)發(fā)現(xiàn)下面的內(nèi)容。
在最簡(jiǎn)單的情況下A′和B′,或它們代表的應(yīng)用,在相同的本地站的相同處理器上執(zhí)行。也許會(huì)存在一個(gè)本地電話通話的問(wèn)題。
不過(guò),我們知道在向地球另一方的電話振鈴之間沒(méi)有更大的區(qū)別。在這種況下,同一個(gè)I模型代表了全球電話網(wǎng)的部分,該網(wǎng)是一個(gè)極復(fù)雜的技術(shù)系統(tǒng)。對(duì)于一個(gè)有經(jīng)驗(yàn)的電話網(wǎng)設(shè)計(jì)這來(lái)說(shuō),這樣一個(gè)國(guó)際電話通話在其途中經(jīng)過(guò)的接口數(shù)量是很大的。不過(guò),內(nèi)部協(xié)議模型I在復(fù)雜長(zhǎng)距離呼叫情況下的也是一個(gè)易管理抽象模型。
另外,事實(shí)上,同一部電話既可以用于呼叫也可以用于接收語(yǔ)音。從這一點(diǎn)來(lái)看,A′和B′模型之間根本沒(méi)有區(qū)別,它們是幾乎同一類型中的兩個(gè)個(gè)體。為了繼續(xù)討論以及解釋本發(fā)明與其它實(shí)現(xiàn)的連接,例如根據(jù)圖1和3中的那些,這樣它們就能分別用A″1和A″2表示?;谕瑯拥脑?,I模型可以被重新命名為B″且圖5被變換為圖6所示的形式。如圖所示,圖5中的兩條接口線又與現(xiàn)實(shí)中的一個(gè)單獨(dú)的接口沖突。
因?yàn)楦鶕?jù)上述情況,A″1可以被看作與A″2是同等的,參考圖7,它們能被合并為A″。這樣就可以看到結(jié)果成為根據(jù)本發(fā)明定義的接口參考模型,其中A″的特征為模擬接口使用的第一個(gè)輔助程序,B″的特征為模擬它在接口中提供功能的第二個(gè)輔助程序,兩個(gè)程序能執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查另一個(gè)程序不做任何不允許的事。根據(jù)圖4的實(shí)施方案,“A′模型”與“B′模型”就共同形成第一個(gè)輔助程序,并且內(nèi)部協(xié)議模型55形成第二個(gè)輔助程序。事實(shí)上,接口56和58是相同的接口,也就是根據(jù)本發(fā)明的參考模型所指的。
以更廣泛的觀點(diǎn)看,上述說(shuō)明的內(nèi)容可以被解釋如下A方將信息傳送到B方并在后來(lái)將它取回。如果它是同一個(gè)A個(gè)體,則B就是根據(jù)圖1的實(shí)施方案的一種情況的一個(gè)存儲(chǔ)器功能。如果在有兩個(gè)A個(gè)體的情況下,B就是一個(gè)通信功能,例如圖4中的例子。
從這一模型中概括出來(lái)的——這是重要的——就是B方是怎樣在內(nèi)部處理信息的。以模型A的觀點(diǎn),看不到關(guān)于是否B方只接收來(lái)到的信息,以將其未變化地返回,或以由接口描述的方式被改變后返回,或是否B方例如把消息進(jìn)行編碼,將其分成足夠大的分組,將它發(fā)送到一個(gè)連接上等等,以便接收分組,將它們放在一起成為一個(gè)消息,對(duì)其解碼并返還給A。
在第二個(gè)輔助程序代表一個(gè)協(xié)議的情況下,根據(jù)下述內(nèi)容可以出現(xiàn)該參考模型的三種使用情況1)一個(gè)通信接口的使用,參見(jiàn)圖8。
在這種情況下,應(yīng)當(dāng)與接口一起測(cè)試一個(gè)用戶程序件的一個(gè)新版本a″1,它代表了A個(gè)體中的一個(gè)。a″應(yīng)能通過(guò)“第二個(gè)輔助程序B”向第二個(gè)A個(gè)體A″2“振鈴”,A″2在它對(duì)“第一個(gè)輔助程序”的容納下,應(yīng)能被新程序件調(diào)用。使用情況也包括A″2調(diào)用a″1的情況。
2)一個(gè)新通信系統(tǒng)的設(shè)計(jì),參見(jiàn)圖9。
在這種情況下,B個(gè)體,這里記做b″,是一個(gè)新通信系統(tǒng),它應(yīng)當(dāng)與接口一起被包含兩個(gè)個(gè)體A″1和A″2的“第一個(gè)輔助程序”測(cè)試。新通信系統(tǒng)b″應(yīng)能考慮A″1和A″2以所有可以想到的方式互相“振鈴”的情況。
3)在一個(gè)用戶內(nèi)通信,參見(jiàn)圖10。
在這以情況下,兩個(gè)A個(gè)體能分別被一個(gè)新用戶程序件的“調(diào)用”部分a″1和一個(gè)“應(yīng)答”部分a″2代替,這個(gè)新用戶程序件和接口一起被“第二個(gè)輔助程序”測(cè)試。事實(shí)上,這樣就是同一個(gè)新程序件功能的問(wèn)題,它“調(diào)用”自己的一個(gè)拷貝并傳遞信息。
兩個(gè)拷貝a″1與a″2以不必為另一個(gè)程序所了解的方式互相通信。在此配置中需要被驗(yàn)證的是,它們?cè)谙鞯紹時(shí)也互相了解,并且例如其內(nèi)容也經(jīng)過(guò)一些修改。為了設(shè)計(jì)和驗(yàn)證與自己進(jìn)行通信的程序件,就需要一個(gè)B模型用于通信目的。這個(gè)B模型代表了進(jìn)行這一通信最簡(jiǎn)單的方法。
一個(gè)如何完全實(shí)際地使用根據(jù)本發(fā)明的方法的實(shí)施方案將在下面更詳細(xì)地描述。
起始點(diǎn)是一個(gè)以傳統(tǒng)方式規(guī)定的非常簡(jiǎn)單的接口,目的是更詳細(xì)地研究當(dāng)接口的定義與一個(gè)參考模型緊密關(guān)聯(lián)時(shí)將發(fā)生什么。
在一個(gè)泛歐數(shù)字移動(dòng)電話系統(tǒng)GSM中,網(wǎng)絡(luò)中的一個(gè)用戶可能離開(kāi)這個(gè)網(wǎng)絡(luò)進(jìn)入另一個(gè)網(wǎng)絡(luò)的覆蓋區(qū)域,并在那里得到與在自己的網(wǎng)絡(luò)中相同的服務(wù)。在同一個(gè)國(guó)家可能有幾個(gè),通常是互相競(jìng)爭(zhēng)的網(wǎng)絡(luò)操作者以它們的網(wǎng)絡(luò)覆蓋相同的地理區(qū)域。這樣不同的操作者有不同的合作伙伴為自己的用戶群提供在其覆蓋區(qū)域外最大可能的覆蓋。不過(guò)屬于非合作網(wǎng)絡(luò)的用戶將被拒絕,一方面是由于競(jìng)爭(zhēng)的原因,另一方面是因?yàn)槿绻麤](méi)有規(guī)范這點(diǎn)的合作協(xié)議,它們就不能記帳。這樣,如果一個(gè)異地用戶要求得到服務(wù),你就必須判斷這個(gè)用戶是否屬于一個(gè)合作網(wǎng)絡(luò)操作者,以便能夠確定是提供服務(wù)還是拒絕。請(qǐng)求服務(wù)的用戶尤其要用一個(gè)PLMN(PLMN=公共陸地移動(dòng)網(wǎng)絡(luò))參數(shù)確認(rèn)自己,它表明該用戶屬于哪個(gè)網(wǎng)絡(luò)操作者?,F(xiàn)在我們將判斷自己的網(wǎng)絡(luò)是否與所說(shuō)明的操作者相配合。
這個(gè)功能在這里被選做例子的接口上被提供。
在更詳細(xì)地介紹這個(gè)程序件之前,應(yīng)當(dāng)強(qiáng)調(diào),根據(jù)本發(fā)明的參考模型方法并不限于任何特定的計(jì)算機(jī)環(huán)境。因此這里描述的程序件在編程語(yǔ)言,操作系統(tǒng),計(jì)算機(jī)配置等方面都是中立的。更特別的是,為了便于理解,它們被以所謂的偽代碼書寫,其基于直觀的解釋。
接口的語(yǔ)法定義以下面的偽代碼出現(xiàn)<pre listing-type="program-listing"><![CDATA[begin Plmn_interface_definition;typen GsmPlmnResult is ENUMERATED GsmPlmnValidMS=0, GsmPlmnUnValidMS=1, GsmPlmnDBNfault=99end_type;use EXTERNALdefinition of type GsmPlmnId;method checkValidMS(Plmn is of type GsmPlmnId) RETURNS a value of type GsmPlmnResult;end Plmn_interface_definition;]]></pre>以方式checkValidMS,接口定義了發(fā)現(xiàn)一個(gè)移動(dòng)用戶(MS)是否屬于一個(gè)合作PLMN的可能性。移動(dòng)用戶的PLMN在伴隨的參數(shù)Plmn中被描述,其格式為GsmPlmnId。對(duì)問(wèn)題的回答在返回值中給出,其類型為GsmPlmnResult。
結(jié)果可以是下面三個(gè)中的任意一個(gè)。GsmPlmnValidMS是指用戶可以被提供服務(wù)。GsmPlmnUnValidMS是指(盡管這里顯示得不清楚)用戶應(yīng)當(dāng)被拒絕。第三個(gè)為GsmPlmnDBNfault,是指很不幸沒(méi)給出任何應(yīng)答。DBNfault是指數(shù)據(jù)庫(kù)中有錯(cuò)。
GsmPlmnId在其它地方定義。這樣就有一個(gè)我們能夠并將使用的定義,但我們不關(guān)心它實(shí)際上看起來(lái)象什么。我們可以使用一個(gè)鑒權(quán)定義,但我們也可以找到我們自己的。
參考模型的原則可以被用于根據(jù)下面內(nèi)容的這個(gè)接口中。根據(jù)本發(fā)明定義的第一個(gè)輔助程序可以如下所示<pre listing-type="program-listing"><![CDATA[begin auxiliary_program_1;declare;result is of type GsmPlmnResult;Plmn is of type GsmPlmnId;end declarebegin program;Plmn=read_parameter;/*This is a starup parameter*/result=checkValidMS(Plmn);switch on rusultif GsmPlmnValidMS print(“Plmn is accepted,service may be offered”); break;if GsmPlmnUnValidMS print(“Plmn si black listed,MS must be registered as a vistitor”); break;if GsmPlmnDBNfault print(“Data Base is inoperative”); break;end_switch;end auxiliary_program_1;]]></pre>根據(jù)本發(fā)明定義的第二個(gè)輔助程序可以如下所示<pre listing-type="program-listing"><![CDATA[begin auxiliary_program_2;declare;value_1 si op type integer;value 2 is of type GsmPlmnId,EXTERNAL definition;nmber_of requests is of type integer;return value of checkValidMS is of type GsmPlmnResult, EXTERNAL definition;end declare;begin program;number_of requests=0;value_1=ruad_parameeter;/*value 1 indicates what result that will be returned*//*0 means that every Plmn is valid *//*1 means that every Plmn is unvalid *//*2 means that the Plmn shall be compared to a Plmn*//* value given as a parameter *//*99 means that the rusult shall indicate Data Base fault*/if value_1=2 thenvalue_2=read parameter;end_if;while true dowait for checkValidMS(Plmn_value),when received doprint(“Plmn“\value of Plmn_value\”in checkValidMS”);switch on value 1if 0return GsmPlmnValidMS;if 1return GsmPlmnUnValidMS;if 2ifPlmn=value_2 thenreturn GsmPlmnValidMSelsereturn GsmPlmnUnValidMSend_if;if 99if number_of requests=0 thenreturn GsmPlmnDBNfault;elseprint(“do not repeat request to anunoperative Data Base”);exit_program;end_if;if otherprint(“Parameter error”);exit_program;end_switch;end_do;end_while;end auxiliary_program_2;]]></pre>
另外,還需要一個(gè)GsmPlmnId,Plmn語(yǔ)句的格式的定義。這個(gè)定義是另一個(gè)接口的一部分,三種不同情況是可以想到的1)有一個(gè)準(zhǔn)備好的正確定義描述Plmn語(yǔ)句的真實(shí)格式。如果處理簡(jiǎn)單,我們就可以用它。(Plmn的正確格式為3+2個(gè)數(shù)字)。
2)也有接口GsmPlmnId的一個(gè)參考模型。在那種情況下,我們除了使用接口GsmPlmnId外,還使用它的第二個(gè)輔助程序。
3)只有接口本身也就是格式類型被命名為GsmPlmnId這一事實(shí)。在此情況下必須準(zhǔn)備一個(gè)自己的GsmPlmnId定義。原則上它看起來(lái)雜亂無(wú)章,可以說(shuō)Plmn由一個(gè)數(shù)字或一個(gè)文本串說(shuō)明。只要沒(méi)有類型1)或2)的定義,這一定義就被使用。
因此我們有了一個(gè)完整的參考模型。它根據(jù)下述內(nèi)容被使用。
A)現(xiàn)在也有一個(gè)接口的語(yǔ)義模型。第一個(gè)輔助程序表明了接口的典型使用。事實(shí)上應(yīng)當(dāng)將它作為模版拷貝到一個(gè)用戶程序中。從輔助程序看,語(yǔ)義非規(guī)則看來(lái)是如果信息未被給出,則接口不能決定是否用戶是否應(yīng)被提供服務(wù),一個(gè)使用程序必須自己來(lái)決定這點(diǎn)。
第二個(gè)輔助程序包含一個(gè)語(yǔ)義規(guī)則它說(shuō)明如果GsmPlmnDBNfault已被接收到,它就不再被允許作為一個(gè)用戶重試。對(duì)于提供接口的程序,這意味著如果數(shù)據(jù)庫(kù)——或者任何產(chǎn)生困難的——允許重試,提供程序重試并且當(dāng)它放棄時(shí),它首先用GsmPlmnDBNfault應(yīng)答。以那種方式,對(duì)于使用程序重試總是沒(méi)有意義的。
B)一個(gè)新設(shè)計(jì)的用戶程序應(yīng)當(dāng)被測(cè)試。它調(diào)用接口,接口的功能現(xiàn)在由第二個(gè)輔助程序提供。通過(guò)使用這個(gè)輔助程序而不是一個(gè)在系統(tǒng)應(yīng)用中提供這個(gè)接口的程序,可以看到下面的優(yōu)勢(shì)——與接口一起有一個(gè)起作用并容易得到的輔助程序。系統(tǒng)應(yīng)用,如果確實(shí)有一個(gè)可執(zhí)行的,被認(rèn)為更復(fù)雜且因此可能是不完善的。
——沒(méi)必要為完成測(cè)試而配置一個(gè)完整的數(shù)據(jù)庫(kù)。大多數(shù)會(huì)被發(fā)現(xiàn)的錯(cuò)誤可能是數(shù)據(jù)庫(kù)被錯(cuò)誤配置這樣一個(gè)事實(shí)的結(jié)果?;蛘呤鞘褂脭?shù)據(jù)庫(kù)的程序中的錯(cuò)誤的引起。在這樣的情況下,容易發(fā)生自己程序中的錯(cuò)誤被忽略的事情。
——如果設(shè)法配置數(shù)據(jù)庫(kù)使其起作用,則讓其停下來(lái)去起作用,例如給出應(yīng)答GsmPlmnDBNfault,就不是完全無(wú)價(jià)值的了。
——輔助程序?qū)懗鲇袉?wèn)題的Plmn。如果語(yǔ)句在中途被曲解了,這可以在輔助程序?qū)懗霰粶y(cè)試的Plmn時(shí)發(fā)現(xiàn)。如果請(qǐng)求在同一個(gè)操作中被重復(fù)——本身是不被禁止的,但是不必要的——這也將被發(fā)現(xiàn)。
C)一個(gè)新設(shè)計(jì)的提供接口的程序?qū)⒈粶y(cè)試。它與接口和第一個(gè)輔助程序一起被配置。這樣就很簡(jiǎn)單地把問(wèn)題推向數(shù)據(jù)庫(kù)程序,不管Plmn值是否可接受。如果這由完全的系統(tǒng)應(yīng)用去做,則原則上需要一個(gè)完整的移動(dòng)電話系統(tǒng)。第一個(gè)輔助程序應(yīng)能被容易地控制,這樣它就可以用大量不同的Plmn值被迅速執(zhí)行了。
本發(fā)明有幾個(gè)重要優(yōu)點(diǎn)。
利用本發(fā)明,接口被完整定義,即既有語(yǔ)法的也有語(yǔ)義的。語(yǔ)義成為被正式和精確定義的。
一個(gè)接口,其中語(yǔ)義可以用言語(yǔ)描述,或根本不是,需要使用它的設(shè)計(jì)者的經(jīng)驗(yàn)。這樣就是一個(gè)利用實(shí)驗(yàn)或失誤得到經(jīng)驗(yàn)的問(wèn)題,但仍不能保證是既正確又完整的,另外可能也不能簡(jiǎn)單地傳授給其它設(shè)計(jì)者。
不過(guò),如果根據(jù)本發(fā)明接口被提供了模型程序,則所有知識(shí)都是與接口有關(guān)的,并且接口的用戶知道自己有關(guān)于接口的必要知識(shí)。另外用戶知道所有其它設(shè)計(jì)者有關(guān)于接口的相同知識(shí)。這意味著不必要考慮另一方可能會(huì)對(duì)語(yǔ)義做另一種解釋,及因此有必要一直檢查另一方?jīng)]有做本身理解為不允許的事。當(dāng)使用接口時(shí),這種測(cè)試要花費(fèi)設(shè)計(jì)力量及執(zhí)行時(shí)間。
利用接口模型,就可能正式證明一個(gè)程序件單元,這可以從它使用的接口以及它提供接口看到。這一證明的執(zhí)行獨(dú)立于所有的不同的類型,變型,版本及包含在或可能包含在接口另一端的程序件單元的組合。
一個(gè)曾被用這種方法證明了的程序件單元仍是被證明的。它不再因?yàn)榄h(huán)境被改變而需要重新證明。程序件單元可以與參考模型程序被提供并且任何人都可以執(zhí)行這些。不需要證明協(xié)議,只要需要,就可以重復(fù)證明。
當(dāng)這一方法被使用時(shí),模型程序與接口一起被提供。模型程序使得用戶使用接口更容易。
在其它情況下沒(méi)有提供模型程序,但它們被用于證明另一個(gè)被提供的程序件,并且在驗(yàn)證協(xié)議中參考這樣一個(gè)事實(shí)即這個(gè)程序件已通過(guò)模型程序被做了質(zhì)量保證。
權(quán)利要求
1.一個(gè)方法,用來(lái)測(cè)試一個(gè)接口以及通過(guò)該接口與另一個(gè)程序件交互作用的一個(gè)程序件的功能,其特征為,與接口一起模擬其功能要通過(guò)該接口被提供的程序件的執(zhí)行以及要使用通過(guò)該接口提供的功能的程序件的執(zhí)行,通過(guò)執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查與接口一起被測(cè)試的程序件沒(méi)有做不允許的事。
2.根據(jù)權(quán)利要求1中的一種方法,其特征為,執(zhí)行對(duì)包含所有可能使用情況的接口的使用的模擬,并通過(guò)處理所有使用情況并表明在實(shí)際中提供接口功能的程序件中將發(fā)生什么,執(zhí)行經(jīng)接口提供功能的模擬。
3.根據(jù)權(quán)利要求1或2的一個(gè)方法,其特征為,利用一個(gè)包含接口的可執(zhí)行單元完成該執(zhí)行。
4.根據(jù)權(quán)利要求1-3中的任何一個(gè)的一個(gè)方法,其特征為,執(zhí)行所述模擬的同時(shí)監(jiān)視與接口一起被測(cè)試的程序件,如果做了任何不允許的事時(shí),就提供錯(cuò)誤打印輸出。
5.用來(lái)測(cè)試一個(gè)接口與一個(gè)其功能由另一個(gè)程序件經(jīng)該接口提供的程序件的功能的方法,其特征為,通過(guò)與接口一起測(cè)試該程序件,同時(shí)執(zhí)行接口上所有可能的和允許的操作模擬接口的使用,并檢查通過(guò)接口測(cè)試的程序件沒(méi)有做任何不允許的事。
6.根據(jù)權(quán)利要求5的一個(gè)方法,其特征為,執(zhí)行對(duì)于包含所有可能使用情況的接口的使用的模擬。
7.根據(jù)權(quán)利要求5或6的一個(gè)方法,其特征為,通過(guò)一個(gè)包含一個(gè)模擬程序,接口和一個(gè)要被測(cè)試的程序的可執(zhí)行單元執(zhí)行該模擬,同時(shí)通過(guò)接口對(duì)要被測(cè)試的程序中的事件進(jìn)程進(jìn)行初始化和控制。
8.根據(jù)權(quán)利要求5-7中的任何一個(gè)的方法,其特征為,監(jiān)視與接口一起被測(cè)試的程序件,如果做了任何不允許的事就將提供把錯(cuò)誤打印輸出。
9.一個(gè)方法,用來(lái)測(cè)試一個(gè)接口以及使用第二個(gè)程序件通過(guò)該接口提供的功能的第一個(gè)程序件的功能,其特征為,通過(guò)與接口一起測(cè)試該第一個(gè)程序件同時(shí)處理接口上接收到的所有可能的操作模擬接口中提供的功能,同時(shí)監(jiān)視測(cè)試中的程序不會(huì)以不允許的方式使用該接口。
10.根據(jù)權(quán)利要求9的一種方法,其特征為通過(guò)處理所有使用情況并表明在實(shí)際中提供接口功能的程序件中將發(fā)生什么執(zhí)行該測(cè)試。
11.根據(jù)權(quán)利要求9或10的一個(gè)方法,其特征為基于一個(gè)完整的接口信息和定義的進(jìn)行測(cè)試。
12.根據(jù)權(quán)利要求9-11中的任何一個(gè)的一種方法,其特征為通過(guò)一個(gè)包含測(cè)試中的程序的可執(zhí)行單元執(zhí)行模擬同時(shí)捕獲通過(guò)一個(gè)接口離開(kāi)該程序的事件進(jìn)程并將其返回到該程序。
13.根據(jù)權(quán)利要求9-12中的任何一個(gè)的一種方法,其特征為執(zhí)行測(cè)試同時(shí)監(jiān)視與接口一起被測(cè)試的程序,如果做了任何不允許的事就提供將錯(cuò)誤打印輸出。
14.根據(jù)權(quán)利要求9-13中的任意一個(gè)的方法,其特征為,通過(guò)模擬接口的使用通過(guò)與接口一起執(zhí)行接口上所有可能的和允許的操作測(cè)試在接口中提供功能的模擬,同時(shí)檢查對(duì)于接口中提供功能的模擬不會(huì)產(chǎn)生任何不允許的事。
15.一種方法,用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中用戶程序件能通過(guò)一個(gè)由相應(yīng)接口與各自的用戶程序件相分離的協(xié)議互相通信,能與已存在的用戶程序件通信的新用戶程序件,其特征為提供第一個(gè)和第二個(gè)輔助程序,包含代碼分別,用于模擬接口的一個(gè)用戶程序件的使用和協(xié)議的功能,以及允許兩個(gè)輔助程序執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查在接口另一端的一個(gè)程序不做任何不允許的事。通過(guò)第二個(gè)輔助程序使新程序件開(kāi)始與第一個(gè)輔助程序進(jìn)行通信連接,并執(zhí)行在兩個(gè)輔助程序中提供的執(zhí)行操作。
16.一種方法用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中用戶程序件能夠通過(guò)由相應(yīng)的接口與各自的用戶程序件相分離的協(xié)議互相通信,新協(xié)議程序件的特征為提供一個(gè)輔助程序包含代碼用來(lái)模擬由一個(gè)與接口一起能被新程序件測(cè)試的用戶程序件對(duì)接口的使用,以及用來(lái)允許輔助程序執(zhí)行接口上所有可能的及允許的操作,并檢查利用接口測(cè)試的協(xié)議程序件沒(méi)有做任何不允許的事。提供輔助程序的兩個(gè)拷貝并通過(guò)新程序件使它們開(kāi)始相互通信連接,并且執(zhí)行在兩個(gè)拷貝中提供的操作。
17.一種方法用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試,其中,用戶程序件能夠通過(guò)由相應(yīng)的接口與各自的用戶程序件相分離的協(xié)議互相通信,新用戶程序件的特征為提供一個(gè)輔助程序,包含代碼用來(lái)模擬由接口提供的協(xié)議的功能,同時(shí)使得能夠與接口一起測(cè)試新用戶程序件,執(zhí)行接口上所有可能的和允許的操作并檢查在接口另一端的程序沒(méi)有做任何不允許的事,使新用戶程序件的兩個(gè)拷貝通過(guò)輔助程序開(kāi)始互相通信連接并且,執(zhí)行輔助程序中提供的操作。
18.一種方法用來(lái)為一個(gè)通信系統(tǒng)提供一個(gè)參考模型,其中程序件能夠通過(guò)一個(gè)協(xié)議互相通信,此協(xié)議與這些程序件在各自程序件的接口上相分離,其特征為,產(chǎn)生第一個(gè)和第二個(gè)輔助程序,通過(guò)引入代碼用來(lái)使第一個(gè)輔助程序代表通過(guò)協(xié)議互相通信的程序件以及在通信中既能呼叫也能應(yīng)答,使得第二個(gè)輔助程序代表協(xié)議,允許第一個(gè)輔助程序能夠在通信中既作為一個(gè)調(diào)用實(shí)例子也作為一個(gè)應(yīng)答實(shí)例,允許這兩個(gè)實(shí)例執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查在接口另一端的程序沒(méi)有做任何不允許的事。
19.一個(gè)根據(jù)權(quán)利要求18的方法,其特征為,與接口一起產(chǎn)生,維護(hù)和提供兩個(gè)程序。
20.一個(gè)根據(jù)權(quán)利要求18或19的方法,其特征為引入代碼用來(lái)使得第一個(gè)輔助程序能夠作為接口的一個(gè)完整用戶,包括所有允許的使用情況,既承擔(dān)調(diào)用實(shí)例的角色也承擔(dān)應(yīng)答實(shí)例的角色,并且使得第二個(gè)輔助程序能夠處理所有的使用情況,并產(chǎn)生所有可想到的結(jié)果,還有錯(cuò)誤,它們能出現(xiàn)在處理使用的情況中并被在接口中定義,并表明在一個(gè)特定設(shè)計(jì)的程序中可能發(fā)生什么,它在實(shí)際中將提供接口的功能。
21.根據(jù)權(quán)利要求18-20中任意一個(gè)的方法,其特征為將代碼引入該第一個(gè)和第二個(gè)輔助程序,結(jié)果是使得兩個(gè)第一個(gè)輔助程序?qū)嵗g的通信能夠在第二個(gè)輔助程序上被執(zhí)行,只有應(yīng)答實(shí)例被尋址,并且第二個(gè)輔助程序能夠產(chǎn)生影響實(shí)際中的一個(gè)協(xié)議的所有可能的錯(cuò)誤情況。
22.根據(jù)權(quán)利要求18-21任意之一的方法,其中特征為引入代碼,使得第一和第二輔助程序象接口一樣可見(jiàn),且包含接口的完整信息和定義。
23.根據(jù)權(quán)利要求18-22中任意一個(gè)的方法,其特征為,與接口一起產(chǎn)生第一個(gè)和第二個(gè)輔助程序以形成一個(gè)可執(zhí)行單元,并且引入代碼使得第一個(gè)輔助程序能產(chǎn)生兩個(gè)輔助程序?qū)嵗⑼ㄟ^(guò)接口利用第二個(gè)輔助程序使這些實(shí)例之間能通信。
24.根據(jù)權(quán)利要求23的一個(gè)方法,其特征為引入代碼使得第一個(gè)和第二個(gè)輔助程序能夠監(jiān)視接口另一端的一個(gè)程序,以便如果這個(gè)程序做了任何不允許的事就將錯(cuò)誤打印出來(lái),并且使得第一個(gè)輔助程序能夠檢查與其通信的一個(gè)用戶程序沒(méi)有做任何不允許的事。
25.一個(gè)用來(lái)為一個(gè)接口提供參考模型的方法,其特征為,通過(guò)引入代碼產(chǎn)生第一個(gè)和第二個(gè)輔助程序,其中使得第一個(gè)輔助程序能夠模擬接口的使用,使得第二個(gè)輔助程序能夠模擬接口中提供的功能,使得兩個(gè)程序都能執(zhí)行接口上所有可能的和允許的操作,并同時(shí)檢查在接口另一端的程序沒(méi)有做任何不允許的事。
26.根據(jù)權(quán)利要求25的一個(gè)方法,其特征為與接口一起產(chǎn)生,維護(hù)和提供兩個(gè)程序。
27.根據(jù)權(quán)利要求25或26的一個(gè)方法,其特征為產(chǎn)生代碼使得第一個(gè)輔助程序作為接口的一個(gè)完整用戶,包含所有可能的使用情況,使得第二個(gè)輔助程序能夠處理所有使用情況及產(chǎn)生所有可想到的結(jié)果,及錯(cuò)誤,它們能出現(xiàn)在處理使用情況的過(guò)程中并被在接口中定義,并且表明在一個(gè)特定設(shè)計(jì)的程序中將發(fā)生什么,該程序在實(shí)際中將提供接口中的功能。
28.根據(jù)權(quán)利要求25-27中任意一個(gè)的方法,其特征為在第一個(gè)和第二個(gè)輔助程序中產(chǎn)生代碼,使得它們象接口一樣是可見(jiàn)的并且包含接口的一個(gè)完整信息和定義。
29.根據(jù)權(quán)利要求25-28中的任意一個(gè)的方法,其特征為產(chǎn)生第一個(gè)和第二個(gè)輔助程序及接口以一起形成一個(gè)可執(zhí)行單元。
30.根據(jù)權(quán)利要求25-29中任意一個(gè)的方法,其特征為在第一個(gè)和第二個(gè)輔助程序中引入代碼,使得它們能夠監(jiān)視接口另一端的一個(gè)程序,以便當(dāng)這個(gè)程序做了任何不允許的事時(shí)將錯(cuò)誤打印出來(lái)。
31.一個(gè)用來(lái)測(cè)試接口功能的系統(tǒng),其特征為,模擬接口的使用的第一個(gè)功能并且模擬接口中提供的功能的第二個(gè)功能,通過(guò)執(zhí)行接口上所有可能的和允許的操作,同時(shí)檢查在接口另一端的程序沒(méi)有做任何不允許的事。
32.根據(jù)權(quán)利要求31的一個(gè)系統(tǒng),其特征為,通過(guò)允許驗(yàn)證一個(gè)新設(shè)計(jì)或修改的提供或使用接口的程序,分別執(zhí)行接口與該程序的代碼及第一個(gè)個(gè)第二個(gè)輔助功能,在該第一個(gè)和第二個(gè)輔助功能中運(yùn)行所有使用情況,同時(shí)尋找除了證明外的不允許的操作。
33.根據(jù)權(quán)利要求31或32的一個(gè)系統(tǒng),其特征為一個(gè)方法,也執(zhí)行用來(lái)測(cè)試由接口影響的所有程序序列及包含在驗(yàn)證中的程序中的代碼,同時(shí)尋找不允許的隱藏和未規(guī)定的功能。
34.根據(jù)權(quán)利要求31-33中的任意一個(gè)的系統(tǒng),其特征為,上述的第一個(gè)輔助功能模擬接口的一個(gè)完整用戶,包含所有的使用情況,并且上述的第二個(gè)輔助功能模擬處理所有使用情況并表明在一個(gè)程序中將發(fā)生什么,該程序在實(shí)際中提供接口的功能。
35.根據(jù)權(quán)利要求31-34的任意一個(gè)的系統(tǒng),其特征為第一個(gè)和第二個(gè)輔助功能與接口一樣是可見(jiàn)的并包含接口的一個(gè)完整信息。
36.根據(jù)權(quán)利要求31-35中任意一個(gè)的系統(tǒng),其特征為第一個(gè)和第二個(gè)輔助程序與接口一起形成一個(gè)可執(zhí)行單元。
37.根據(jù)權(quán)利要求31-36中任意一個(gè)的系統(tǒng),其特征為第一個(gè)和第二個(gè)輔助功能監(jiān)視在接口另一端的一個(gè)程序,如果該程序做了任何不允許的事,就將錯(cuò)誤打印出來(lái)。
38.測(cè)試通信系統(tǒng)中的一個(gè)接口的系統(tǒng),其中程序件能夠通過(guò)一個(gè)以對(duì)相應(yīng)程序件的接口與這些程序件相分離的協(xié)議互相通信,其特征為,第一個(gè)輔助功能代表通過(guò)協(xié)議互相通信的程序件并且第二個(gè)輔助功能代表協(xié)議,第一個(gè)輔助功能包含使得它在通信中既作為調(diào)用實(shí)例又作為應(yīng)答實(shí)例的裝置,其中這兩個(gè)實(shí)例能執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查在接口另一端的程序沒(méi)有做任何不允許的事。
39.根據(jù)權(quán)利要求38的一個(gè)系統(tǒng),其特征為第一個(gè)輔助功能包含能使得它作為接口的一個(gè)完整用戶的裝置,包含所有允許的使用情況,既承擔(dān)調(diào)用實(shí)例的角色也承擔(dān)應(yīng)答實(shí)例的角色,并且第二個(gè)輔助功能包含使得它能處理所有使用情況并產(chǎn)生所有可想到的結(jié)果,及錯(cuò)誤的裝置,它們出現(xiàn)在處理使用情況中并被在接口中定義,而且表明在一個(gè)特定設(shè)計(jì)的程序中將發(fā)生什么,該程序在實(shí)際中將提供接口的功能。
40.根據(jù)權(quán)利要求38或39的一個(gè)系統(tǒng),其特征為使得兩個(gè)第一個(gè)輔助功能的實(shí)例之間的通信在第二個(gè)輔助功能上被執(zhí)行,使得只有應(yīng)答實(shí)例被尋址,并且使得第二個(gè)輔助功能產(chǎn)生影響實(shí)際中的一個(gè)協(xié)議的所有可能的錯(cuò)誤情況。
41.根據(jù)權(quán)利要求38-40中任意一個(gè)的系統(tǒng),其特征為,第一個(gè)和第二個(gè)輔助功能象接口一樣是可見(jiàn)的并包含接口的一個(gè)完整信息和定義。
42.根據(jù)權(quán)利要求38-41中任意一個(gè)的系統(tǒng),其特征為,第一個(gè)和第二個(gè)輔助功能與接口一起形成一個(gè)可執(zhí)行單元,通過(guò)方法使得兩個(gè)輔助功能實(shí)例由第一個(gè)輔助功能產(chǎn)生,并通過(guò)第二個(gè)輔助功能通過(guò)接口互相通信。
43.根據(jù)權(quán)利要求42的一個(gè)軟件系統(tǒng),其特征為第一個(gè)和第二個(gè)輔助功能包含允許它們監(jiān)視在接口另一端的一個(gè)程序并且如果這個(gè)程序做了任何不允許的事就將錯(cuò)誤打印輸出的裝置,而且第一個(gè)輔助功能包含方法允許它檢查與之通信的一個(gè)用戶程序沒(méi)有做任何不允許的事的裝置。
44.用于在一個(gè)通信系統(tǒng)中測(cè)試的一個(gè)系統(tǒng),其中用戶程序件能通過(guò)一個(gè)以相應(yīng)接口與各自的用戶程序件相分離的協(xié)議互相通信,能與已存在的用戶程序件通信的新用戶程序件,其特征為代碼用來(lái)定義第一個(gè)和第二個(gè)輔助程序,分別模擬一個(gè)用戶程序件對(duì)接口及協(xié)議的功能的使用,并允許這兩個(gè)輔助程序執(zhí)行接口上所有可能的和允許的操作,同時(shí)它們檢查在接口另一端的一個(gè)程序沒(méi)有做任何不允許的事,法用來(lái)使得新用戶程序件通過(guò)第二個(gè)輔助程序開(kāi)始與第一個(gè)輔助程序通信的裝置,以及用以執(zhí)行在兩個(gè)輔助程序中提供的操作的裝置。
45.用來(lái)在一個(gè)通信系統(tǒng)中測(cè)試的系統(tǒng),其中用戶程序件能通過(guò)一個(gè)以相應(yīng)接口與各自的用戶程序件相分離的協(xié)議互相通信,新用戶程序件,其特征為代碼用于定義一個(gè)輔助程序以模擬由一個(gè)用戶程序件對(duì)接口的這種使用使接口新程序件能被測(cè)試,并允許輔助程序執(zhí)行接口上所有可能的和允許的操作,并利用接口檢查被測(cè)試的協(xié)議程序件不做任何不允許的事,用于使兩個(gè)輔助程序通過(guò)新程序件開(kāi)始互相通信的裝置,以及用于執(zhí)行在兩個(gè)拷貝中提供的操作的裝置。
46.一個(gè)用于在一個(gè)通信系統(tǒng)中測(cè)試的系統(tǒng),其中用戶程序件能夠通過(guò)一個(gè)以相應(yīng)的接口與各自的用戶程序件相分離的協(xié)議互相通信,新用戶程序件,其特征為代碼用于定義一個(gè)輔助程序,以模擬通過(guò)接口提供的協(xié)議功能,同時(shí)使得能與接口一起測(cè)試新用戶程序件,并執(zhí)行接口上所有可能的和允許的操作并檢查在接口另一端的一個(gè)程序沒(méi)有做任何不允許的事,用于使兩個(gè)新用戶程序件的拷貝通過(guò)輔助程序開(kāi)始彼此通信的裝置,用于執(zhí)行在輔助程序中提供的操作的裝置。
全文摘要
通過(guò)與接口一起產(chǎn)生第一和第二個(gè)輔助程序?yàn)榻涌谔峁┮粋€(gè)參考模型。第一個(gè)輔助程序(A”)是一個(gè)用來(lái)模擬接口的使用的模型程序,第二個(gè)輔助程序(B”)是一個(gè)用來(lái)模擬它提供接口中的功能的模型程序。這兩個(gè)程序都能執(zhí)行接口上所有可能的和允許的操作,同時(shí)控制另一個(gè)程序不做任何不允許的事。
文檔編號(hào)G06F11/36GK1157045SQ9519489
公開(kāi)日1997年8月13日 申請(qǐng)日期1995年9月1日 優(yōu)先權(quán)日1994年9月2日
發(fā)明者O·史密斯 申請(qǐng)人:艾利森電話股份有限公司