CN1157045A - 测试一个接口的方法和系统 - Google Patents
测试一个接口的方法和系统 Download PDFInfo
- Publication number
- CN1157045A CN1157045A CN95194894A CN95194894A CN1157045A CN 1157045 A CN1157045 A CN 1157045A CN 95194894 A CN95194894 A CN 95194894A CN 95194894 A CN95194894 A CN 95194894A CN 1157045 A CN1157045 A CN 1157045A
- Authority
- CN
- China
- Prior art keywords
- interface
- program
- function
- auxiliary routine
- spare
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Devices For Executing Special Programs (AREA)
- Maintenance And Management Of Digital Transmission (AREA)
- Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)
Abstract
通过与接口一起产生第一和第二个辅助程序为接口提供一个参考模型。第一个辅助程序(A”)是一个用来模拟接口的使用的模型程序,第二个辅助程序(B”)是一个用来模拟它提供接口中的功能的模型程序。这两个程序都能执行接口上所有可能的和允许的操作,同时控制另一个程序不做任何不允许的事。
Description
本发明的技术领域
第一,本发明涉及测试一个接口的方法和系统,第二,本发明涉及测试一个通信系统中的接口和新程序件的方法和系统,第三,本发明涉及为一个通信系统提供一个参考模型的方法和系统,其中程序件能够通过一个协议彼此通信,此协议在各自程序件的接口上与这些程序件分离。
当两个独立设计和维护的程序件互相作用时,关于它们相互作用的规则就在一个接口中被描述。此接口应当含有一个程序件单元的设计者能够使用另一个程序件单元的功能所要求的信息。与此相反,设计者不需要知道这另一个程序件单元,其被使用的功能由接口隐藏。其目的是提供功能的程序可以在接口的结构中自由变化。
通常一个接口都是用语法术语定义的,也就是它被告知对于第二个程序中的功能的正确调用应是怎样的。按规则,这些定义应当是正式的且精确的。在对功能调用程序的语法分析中,所有看起来错误的调用都被坚决地揭示出来,比如拼写错误。与此相反的语义规则,比如指明怎样的功能调用才是被允许的,就很少是正式的和完整的。举一个具体的例子,顺时针转动汽车的发动钥匙通常是一个语法上看来正确的操作。与此相反,如果引擎已在运转则它就是语义错误的。
相关技术描述
EP 474,339公开了为一个应用中的一个面向对象的调用提供客户接口的一种技术。人们希望避免以前出现在异构网络中用户要被迫使用每一个独立的应用所要求的特定接口这样的问题。目标是一个面向对象的方式以提供进程间的交互作用。客户应用可以通过发送有参数的全程已知的消息去调用其它应用。一个客户/服务器模型被使用,其中客户产生请求,服务器对此请求进行响应。
EP 540,166公开了在一个基于客户/服务器模型的面向对象的分布式系统中的一种技术。更具体的是,有一个问题即这样一种情况,一个客户进程要判断是否两个分别由第一个和第二个服务器进程完成的对象是等价的被提供用以操作各自对象的面向对象的接口。这将在一个分布式计算机系统中与面向对象的编程一起被完成。
EP 278,317描述了用来防止客户进程系统的一个进程访问在服务器中已被修改的客户高速缓冲存储器中的数据的一种技术。这些数据在服务器中被访问并传送到客户。服务器含有一个磁盘上的永久性数据文件并且有一个被服务器的本地处理器所使用的高速缓冲存储器。不过客户进程在使用服务器以及客户的高速缓冲存储器时可以访问文件。磁盘中的文件块被存储在服务器的高速缓冲存储器中,又由客户通过网络文件块从这里接收并将这些文件块存储到客户高速缓冲存储器中。之后将在客户进程中检验数据块的正确性,如果数据被验证是正确的,它们将从客户高速缓冲存储器中被访问。
JP 5-11983公开了用来验证以不同语言描述的程序间的接口的一个方法。在建立一个定义文件的接口的方法中,一个定义信息被输入,它定义一个与为一个程序间接口提供一个定义文件的不同描述语言相对应的程序之间的接口。在一致性测试方法中,输入一个程序描述语言源文件和一个测试接口一致性的定义文件的程序间接口。另外还提供了用于基于一致性测试结果自动更正程序间接口的方法。
JP 63-86030公开了一个用于不同程序语言间链接的一个系统。一个CPU包含一个C程序模块,一个起始解释模块,和一个作为功能部件的快速节点访问模块。CPU还包含一个与一个起始栈一起的公共数据区,一个大数据库和一个放在规定的内存空间的信息库。通过公共数据区以及两个专用栈在这些模块间进行数据传输。
JP 62-293347描述了一个将用不同编程语言编写的程序连接在一起的开发系统。
EP 498 130公开了验证一个计算机系统中互相通信的程序模块间的兼容性的一种方法。大量相互作用的系统部件中的每一个都有一个类型标识符。类型标识符被存储在可以被其它部件访问的地方。每个部件独立地去读它必须与之交互的每个部件的类型标识符,并且将这个值与自己内部存储的兼容性寄存器进行比较,以判断另一个部件是否满足与验证部件的兼容性要求。若一个部件发现了不兼容,就发信号给系统报告错误。
EP 495 279公开了在以不同程序语言编写的两个面向对象的程序间进行通信的一种方法。一个通用的发送消息功能被安排在两个程序之间控制消息交换。为此,通用的发送消息功能要访问另一个计算机程序中的类的描述。当访问这样一个描述时,通用的发送消息功能可以有效地在不同的计算机程序之间传送消息,并且还提供一个产生新对象的可能性。
EP 371 942描述了一个应用和一个数据库管理者之间的接口。一个接口系统包括许多应用程序接口,这些接口以一系列实时服务的形式出现,为一个预编译开发器提供所有与一个实时数据库核心通信所需的功能。
EP 371 941描述了一个以不同编程语言编写的应用与数据库管理者或类似的部件之间通信的接口。为软件支持的大量功能中的每一个都定义了一个通用应用程序接口或输入点,输入点有许多与执行该功能的系统所要求的一致形式的参数。每个输入点都可以被用多种语言中的一些所编写的应用程序调用,并且将此调用的参数转换成由软件系统功能执行的一致性通用形式。
EP 343 682描述了开发和测试软件的一种方法。设计和测试是彼此直接连接的,在某种程度上,设计过程中,设计数据可以在测试中被自动使用。
EP 315 493描述了一个使软件独立于计算机环境,即硬件,操作系统等的虚拟接口。该系统包括执行一个异构或“目标”计算机中的一个或多个分布式处理器中的应用软件所要求的一个或几个任务的许多进程。在实时程序中,应用软件的代码被预处理,编译并与系统接口模块链接产生可被目标计算机的操作系统执行的代码。包括大量对进程的功能调用的可执行代码被操作系统运行,以确认这些进程将能够完成应用软件所要求的标准。
US 5 045 994描述了一个用于仿真以及开发和测试大程序系统的方法。一个仿真系统环境被用来模拟应用系统的实际输入/输出接口。在此环境中,用户产生后来以独立于应用系统和在应用系统一方的屏幕动力自动方式被应用系统执行的输入/输出事务。
在1987年12月“IEEE TRANSACTIONS ON SOFTWAREENGINEERING”的SE-13卷第12期的1254-1264页Roger Hayes和Richard D Schlichting的文章“在分布式系统中提供混合语言编程”(“Facilitating Mixed Language Programming in DistributedSystems”)中,描述了一种允许在同一个程序中的不同编程语言之间的程序调用的方法。它基于提供了一个每种语言的通用远程子程序调用系统和使用了一种描述子程序接口及要在子程序间被传送的数据的一种系统。通过为每种编程语言定义标准映射,可以在大多数情况下自动地以包含在用不同语言编写的程序部件间接口中的活动代理的方式,提供横向语言调用所要求的数据变换。
概述
在他/她设计的用户程序中使用一个面向其它程序的接口,此程序的功能通过该接口被使用的程序设计者,目前面临许多问题。
如果一个设计者需要知道除了接口描述以外更多关于接口的信息,今天他就必须研究其它用户是如何使用该接口的。不过,这可能被错误使用,或者条件是不同的。
设计者也可以观察另一个程序以便知道是如何设计功能的。但是,这是有悖于使用接口的整体原则的。如果另一个程序在其设计者不知道用户程序在设计另一个程序中使用了某些特征的情况下就被改变了,那么它就根本无法保证再会起作用了。
如果一个用户程序的设计者希望测试他的程序和通过接口的使用,他可以与可得到的另一个程序的版本一起运行它。当设计者使那些程序共同起作用时,则这只表明它的程序准确地与另一个程序的具体实施共同起作用。如果这另一个程序对于另外一个提供相同功能的程序被更新或改变了,则就根本无法保证它将再工作了。
用户程序的设计者也可能与另一个程序遇到问题,意味着它不易产生特定的错误情况。例如非常简单的一种情况,即一些错误永远也不会象在所讨论的情况中那样发生在另一个程序中。如果设计者写出了自己的关于另一个程序的简单变型,则会有风险即他也将产生关于接口如何起作用的误解。
关于设计接口的一些问题可以总结如下:
——通常接口的语义定义是缺乏的。就存在的程度来说,它们很少是完整的和严格定义的,在不同于正常情况的进程中尤其是这样。
——独立于合作程序的内部变化,只要接口本身不被影响,对于使用一个接口的人来说能验证这一使用是正确的测试程序经常是缺乏的。
——这样,一个单独的程序不能被独立证明,而只能与合作程序的特定版本一起被证明。每当一个程序被改变时,不仅这个程序而且所有的合作程序都必须被重新证明。本发明的一个主要目标是能够完整定义一个接口的功能——也就是为这个接口指定一个参考模型——然后使用这一定义去证明程序是如何使用或提供这个接口的。当两个软件单元间接口上的交互作用被建立之后,本发明将承认对这一交互的描述并支持保证对接口的定义成为完整的和一致的。
另一个目标是陈述一个方法,使得对于一个接口及一个通过该接口与其它软件交互作用的软件功能的测试成为可能。
再一个目标是为一个接口提供一个参考模型,从而使该接口两端的软件能够获得比从该接口的语法定义上获得的关于另一方的行动的更多信息。更特别的是,这一信息也将包含一个语义定义,用以描述另一方所期待的行为以及对另一方的测量要管理到什么程度。
本发明的另一个目标是使对一个软件单元的验证成为可能,即表明它工作正确,也是关于通过指定正确复制合作软件允许的所有行为模式的特定测试程序,通过接口与另一个程序操作,但对于剩余的部分则不揭示关于其内部结构的任何内容。
第一点,本发明包括一个对一个接口以及一个通过该接口与其它程序件交互作用的程序件的功能的测试方法。它的执行要通过与接口一起模拟其功能要由该接口提供的程序件的执行,以及使用通过该接口提供的功能的程序件的执行,通过完成此接口上的所有可能的及允许的操作,同时检查测试的程序件以及接口没有做任何不允许的事。
第二点,本发明包括一个方法,用来测试一个接口以及一个其功能由另一个程序件通过该接口提供的程序件的功能。它的执行通过模拟接口的使用,通过与接口一起测试该程序件,同时完成接口上所有可能的和允许的操作,并检查与接口一同被测试的程序件不做任何不允许的事来完成。
第三点,本发明包括一个方法,用来测试一个接口以及要使用通过该接口被提供的来自于第二个程序件的功能的第一个程序件的功能。它的完成通过模拟在接口中提供功能,通过与接口一起测试该第一个程序件同时处理接口上接收的所有可能的和允许的操作并返回所有可能的响应,同时注意测试中的程序不以不允许的方式使用该接口。
第四点,本发明包括一个方法,用来在一个通信系统中进行测试,其中用户程序件能够通过以相应的接口与各自的用户程序件分离的协议互相通信,新用户程序件能够与已存在的程序件互相通信。提供第一个和第二个辅助程序,它们包括代码用以分别模拟接口的用户程序件的使用和协议的功能,并用以允许这两个辅助程序完成该接口上的所有可能的以及允许的操作,同时检查接口另一端的程序不做任何不允许的事。新程序件通过第二个辅助程序与第一个辅助程序开始通信连接,并执行在两个辅助程序中提供的操作。
第五点,本发明包括一个方法,用来在一个通信系统中进行测试,其中用户程序件能够通过一个以相应的接口和新的协议程序件与各自的用户程序件相分离的协议互相通信。提供了一个辅助程序,它包含了代码,用以模拟一个用户程序件对接口的使用及接口新程序件一起能被测试,以及用于允许辅助程序完成接口上所有可能的及允许的操作,并检查借助于接口测试的协议程序件不做任何不允许的事。辅助程序件的两个拷贝被提供,并且通过新程序件彼此开始通信连接,并执行在两个拷贝中提供的操作。
第六点,本发明包括一个方法,用来在一个通信系统中进行测试,其中用户程序件能够通过一个协议彼此通信,该协议通过一个相应的接口,新用户程序件与各自的用户程序件相分离。提供一个辅助程序,它的代码模拟通过接口提供的协议的功能,同时使得能够与接口一起测试新用户程序件,执行接口上所有可能的和允许的操作并检查在接口另一端的程序不做任何不允许的事。新用户程序件的拷贝被制作,并通过辅助程序彼此开始通信连接,然后执行辅助程序中提供的操作。
第七点,本发明包括一个方法,用来为一个通信系统提供一个参考模型,此系统中的程序件能通过一个对相应程序件接口上的这些程序件相分离的协议彼此通信。通过引入代码使得第一个辅助程序成为代表通过协议彼此通信并能在通信中进行调用和回答的程序件,使得第二个辅助程序代表协议,允许第一个辅助程序能够在通信中既作为一个调用实例又作为一个回答实例,并允许两个实例执行接口上所有可能的和允许的操作,同时它们检查在接口另一端的一个程序不做任何不允许的事生成第一个和第二个辅助程序。
第八点,本发明包括了一个方法,用来为一个接口提供一个参考模型。通过引入代码,使得第一个辅助程序能够模拟接口的使用,使得第二个辅助程序能够模拟接口中提供的功能,使得两个程序都能执行接口上所有可能的和允许的操作,同时检查在接口另一端的一个程序不做任何不允许的事生成第一个和第二个辅助程序。
第九点,本发明包括一个系统用以测试一个接口的功能,该接口包括第一个功能用来模拟接口的使用和第二个功能用来模拟提供接口中的功能,通过执行接口上所有可能的和允许的操作,同时检查在接口另一端的程序没有做任何不允许的事。
第十点,本发明包括一个系统用来测试一个通信系统中的一个接口,该系统中的程序件能够通过以对相应程序件的接口与这些程序件相分离的一个协议彼此通信,第一个辅助功能代表通过协议彼此通信的程序件,第二个辅助功能代表这个协议。第一个辅助功能包括使其在通信中既做一个调用实例又作为一个回答实例的装置。这两个实例都能够执行接口上所有可能的和允许的操作,同时它们检查在接口另一端的程序不做任何不允许的事。
第十一点,本发明包括一个系统,用来在一个通信系统中测试,其中用户程序件能够通过一个经相应接口及能与已存在的用户程序件通信的新用户程序件与各自用户程序件相分离的协议彼此通信。系统包括代码,用以定义第一个和第二个辅助程序,模拟由一个用户程序件分别使用接口和协议的功能,并允许两个辅助程序执行接口上所有可能的和允许的操作,同时检查在接口另一端的程序没有做任何不允许的事。还提供了使新程序件通过第二个辅助程序与第一个辅助程序开始通信连接的装置以及执行在两个辅助程序中提供的操作的装置。
第十二点,本发明包括一个系统,用来在一个通信系统中测试,其中用户程序件能够通过以一个相应的接口,新协议程序件与各自的用户程序件相分离的协议彼此通信。系统包括代码,用来定义一个辅助程序模拟由一个用户程序件对接口的使用及接口新程序件可被测试,以允许辅助程序执行接口上所有可能的和允许的操作,并检查以接口方式检测的协议程序件不做任何不允许的事。提供了装置使辅助程序的两个拷贝通过新程序件彼此开始通信连接,并执行在两个拷贝中提供的操作。
第十三点,本发明包括一个系统,用来在一个通信系统中测试,其中用户程序件能够通过以一个相应的接口,新用户程序件与各自的用户程序件相分离的协议彼此通信。系统包含代码,用来定义一个辅助程序通过接口模拟协议提供的功能,同时允许测试新用户程序及接口,并执行接口上所有可能的和允许的操作而且检查接口另一端的程序不做任何不允许的事。提供了装置使新用户程序件的两个拷贝通过辅助程序彼此开始通信连接以执行在辅助程序中提供的操作。
以上各点的实施方案的特征在相应的子权利要求中阐述。
一个接口的参考模型在这里意味着接口不仅在语法上也在语义上被定义。
整个参考模型是可执行的。
一个接口的设计意味着,除了为接口本身提供软件外,还有辅助程序的设计。
第一个辅助程序作为一个包含所有允许使用的情况的接口的完整用户被生成。第二个辅助程序处理所有使用情况并且表明,从接口的观点可以看到,实际中提供接口功能的程序中将发生什么。辅助程序与接口同样是可见的,它们包含关于接口的完整信息。辅助程序总是与接口一起被处理,它们被一起更改和发送。
总是可能建立一个辅助程序和接口的可执行单元的。这两个辅助程序互相监视,以便如果另一个程序做了被禁止的事就将错误指出来。首先这用在测试辅助程序中,后来用在当辅助程序中的一个被用作测试工具时。
当使用一个接口设计程序时,设计者可以研究第一个辅助程序,其中可以发现被使用的情况。进一步讲,设计者可以更加理解程序是如何提供接口功能的业务的。原则上,它们都作为第二个辅助程序起作用。
这样这个程序将被测试,一个可执行单元与接口和第二个辅助程序一起被生成。这一配置提供如下优点:
——第二个辅助程序总是可获得的,因为它是与接口一起被提供的。
——第二个辅助程序起作用,因为它是为提供接口功能的每个设计做参考的。
——第二个辅助程序被定界,因为它已经被配置,它不需要另外的再需要另外一个程序等的程序。
——第二个辅助程序在错误使用接口的情况下,以及其它提供接口业务的程序被允许的情况下,可以提供清楚的错误打印输出。
当设计一个提供接口功能的程序时,可能从第一个辅助程序中看到可能使用哪种情况。所有这些都必须被处理。不过,可以假设一个用户软件不会超过这些使用情况——当这个用户程序与第二个辅助程序一起被测试时可以发现这一点。
另外,没有必要介绍第二个软件处理这些的所有可能的方法。这样,一些在接口中描述的错误情况将会例如永远不在所讨论的接口设计中出现。同样如果每个用户程序必须为所有可想象到的错误情况做准备,则所有错误情况都不必出现在所讨论的实现中。
当测试新程序时,将与第一个辅助程序和接口一起产生一个可执行单元。所有在第一个辅助程序中的使用情况被执行,可得到所有功能的执行。第一个辅助程序监视来自第二个程序的每个反应。
利用一个所谓的覆盖程度指示器就可能看到一个新程序中被运行及未被运行的代码部分。与其它接口不关联的代码以及未被运行的代码将由充分的理由被怀疑是错误的。
图的简略描述
现在参考附图更加详细地描述本发明,其中
图1通过一个流程图说明了本发明的一个简单实施方案,
图2以方框图的形式提供了由于存在许多不同的出入线协议而出现在电话交换机中的问题的讨论基础。
图3为与图2类似的方框图,只是增加了关于本发明对于问题的可能处理的辅助程序。
图4中的流程图解释了一个电话交换中的不同操作,比如包含在一个通常的电话呼叫中的,是如何根据本发明由辅助程序执行和管理的。
来自图4所示例子的图5-10说明了在不同的使用情况下本发明通常包含什么。
实施方案的具体描述
本发明的一个重要方面是它包含了一个接口的参考模型,当定义和测试接口以及通过该接口与其它软件交互作用的软件的功能时使用。这个参考模型包含第一个和第二个辅助程序,其中第一个辅助程序是用来模拟接口的使用的模型程序,第二个辅助程序是用来模拟它在接口中提供功能的模型程序。这两个程序被设计为能够执行接口上所有可能的和允许的操作,同时它们检查另一个程序没有做任何被禁止的事。
下面对于参考模型的功能的不同实现的描述,为了简单起见,主要是指明了两个辅助程序通过接口交互作用,只用于验证辅助程序的参考模型的一种操作方式。
当测试接口任意一侧的一个新程序件时,为了理解参考模型的功能,必须假设这个程序件代替在同一侧的辅助程序,因为它是在此情况下正在工作的另一端的辅助程序。“被替代”的辅助程序在所讨论的测试中一般不起作用,但是如果和当错误出现的时候,可以用作一个解释模型。
在某些情况下,事实上可以想象到该参考模型的市场实现,如果提供的功能和使用辅助程序的功能对于实际应用是烦琐和不感兴趣的,则它只包含一个辅助程序,也就是只有用以模拟接口使用的辅助程序或只有用以模拟接口提供的辅助程序,不过,当设计模型时对于包含在模型中的辅助程序,它也可能产生一个只用于此测试的模型的测试版本,为此目的也包含补充的辅助程序。
在某些情况下,也可以想象到第二个辅助程序,也就是提供的一个,包含一个提供接口的程序所需的所有功能。这个第二个辅助程序也是能够在整个系统中提供功能的程序。在这种情况下,第二个辅助程序能被设计成这样,使得用于检测不允许操作的检查例程是可忽略的。这些在一个被测试的操作系统中是不需要的,其中它们只是耗费处理器的容量。
参考图1,现在来描述一个本发明的简单实施方案。作为背景,将首先描述在一个可想象到的状况下的标准,它是基于技术标准的。
一个程序,后面称作PROG,需要一个缓冲区用于偶尔的数据存储。一个缓冲区是由操作系统所拥有的资源,后面称其为OS。
PROG必须通过一个面向OS请求的接口访问这个的缓冲区。
假设PROG是用C语言编写的。一个典型的C语言手册会给出下面的接口描述:
“char*malloc(magnitude)
占据magnitude个字节的一个连续缓冲区,如果占据成功将返回指向所占区域开始位置的一个指针,否则返回一个空指针。”
还可以发现下面的内容:
“void free(pointer)
释放指针所指的一个缓冲区,此缓冲区先前由一个malloc调用所占据。”
对于一个熟练的程序员来说,这就可以被认为是完全充足的信息了。
不过下面将指出这一信息还是远远不够的:
——假设这个malloc返回一个空指针。这就是说程序PROG得不到对于所要求缓冲区的访问。根据操作系统的内部设计,下面的任何一种后续动作都是可能的:
1)重试,这是暂时的。
2)不可能再进一步继续,为了卸载操作系统,不得不以控制方式结束PROG程序。
3)什么也不能做,操作系统没有缓冲区是不可能工作的,整个系统将直接崩溃。
——如果PROG忘记释放空闲的缓冲区,它将被丢失吗?
——如果PROG将指向任何别的地方而不是将用malloc得到的先前缓冲区的指针释放,将会出现什么呢?
1)什么也不出现。操作系统发现了错误并且当PROG最终结束时,所有PROG使用过但忘记释放的缓冲区都将被释放。
2)操作系统依赖PROG,导致完全不可预测的结果。
——如果PROG请求一个magnitude0的缓冲区,将发生什么呢?
这样一个缓冲区需要被释放吗?
在实际中,程序PROG的设计者将猜测操作系统是如何工作的以及当PROG何时被完成,他/她将与一个操作系统一起执行PROG,并且误解,如果有的话,将被更正—这就是常被称做的调试(debugging)。不过,这一过程的问题是,唯一被保证的一件事是PROG作为用于操作系统的特定版本工作。如果PROG要用于另一个操作系统或一个老操作系统的新版本,就需要再验证并可能改正PROG了。
还不能保证所有的功能都被测试。一般来说,让一个操作系统在精确要求的时刻应答“缺少缓冲区”是非常困难的。如果你希望验证这个程序关于缺少缓冲区的问题,就必须自己编写一个测试程序模拟这种情况下操作系统的标准。这一测试程序的问题是它不得不被重新设计。如果你发现了错误,就会轻易相信是测试程序有错并反而将它改动。因此,事实上你不会知道,当一切看起来都在起作用时,测试程序是否象一个真正的操作系统那样动作。
至此只研究了PROG设计者的问题。但是一个操作系统的设计者也必须能够确定一个新更新的操作系统不会为用户程序产生问题。也许只确定PROG与新操作系统一起工作还是不够的。也许PROG甚至不使用已改变的功能。
这里将提供一个关于应用本发明时所讨论的内存分配接口看起来象什么的描述。
根据本发明,并参考图1中的流程图,标号为1的接口被设计为与一个模型程序A一起模拟接口的使用,一个模型程序B模拟它在接口中提供的功能。模型A和B作用的方式由所讨论的流程图更详细地说明。
在所举的例子中,模型程序B首先由一个声明的完全可获得的区域开始,该区域从头开始被声明为未分块的。然后进一步实施为等待有人请求一个区域。当模型程序A要启动时,根据箭头2,它通过接口1请求访问,见箭头4,指向一个缓冲区,它将被模拟比如假设是由模型程序B所拥有。请求4由调用malloc(magnitude)去进行,其中的概念“magnitude”是一个参数,用以表明所请求缓冲区的量,并在A启动时被赋一个值。
步骤6是指检查并不是一个重新占据缓冲区的尝试的问题,尽管前面的一个已经因为加锁而失败。如果后者属于这种情况,则流程将终止在步骤8。否则流程走向步骤10,它包含一个对于用户程序请求magnitude为0的缓冲区的加锁。如果这样一个请求被标明了,则流程将终止在步骤12。否则流程转向步骤14,以确定是否有空闲区域。如果没有,则在步骤16标明一个加锁,结果返回一个空指针,见箭头18,指向程序A。如果一个区域是可获得的,则它将在步骤20被占据并且返回malloc=指针,见箭头22,指向程序A。此区域被使用后,它将带着空闲(指针)被返回到程序B,见箭头24。进行到模型程序B中的步骤26,其中检查是否恰当的区域被返回。如果不是这样,则在步骤28中标明错误。否则在步骤30中释放该区域。整个流程在程序A中结束,见箭头32。在使用该程序的缓冲区结束它的执行时终止模型程序B。检查是否分配的缓冲区都被返回,如果不是,则提供一个错误打印输出。模型程序A和B都记录了在执行中发生的事。
当然,接口也包括缓冲区中的写和读操作。因为它们对于解释本发明没有什么作用,所以就省略了。
从图1中的参考模型可以得到关于接口的下述结论:
从用户程序A的观点来看:
——不允许已经在一个malloc调用中得到终止的用户重试,参看步骤6。
——不允许请求magnitude=0的缓冲区,参看步骤10。
——区域必须以空闲被返回。空闲只被允许由malloc得到的和还未被返回的区域使用,参见箭头24。
从缓冲区管理程序B的观点来看:
——所请求的缓冲区总是大于0,参看步骤10。
——看起来空闲的指针不需要被检查。
——用户程序将返回一个得到的缓冲区。
如果用户程序要破坏这些规则,这将在对模型程序B测试时被发现。
接口的参考模型也可以被用于更复杂的接口。作为一个例子,现在将给出它是怎样被用于一个协议的。下面将提供一个讨论,参考图2和3中关于出现在一个公共电话交换系统中的问题,及原则上这些问题如何利用本发明被解决。
一个电话交换机的目标可以被说成相互连接一个入呼叫与一个出呼叫的。
为了建立一个呼叫,需要一个协议来转换控制信息,例如它需要到达哪个目标(电话号码)。由于历史的和技术上的原因,存在大量不同的这类协议,由图2中的P1,P2…Pn标明。其中较著名的一个,例如由图2中假设为P1的,就是用于一个通常的按键电话机,其中电话线上的音频信号通知需要到达的电话号码。另一个著名的例子,例如图2中的P2,是拨号信令,其中的数字由间歇脉冲序列表示。例如数字4由顺序的四个间歇脉冲表示。
假设一个呼叫产生于一个拨号装置,根据图2中箭头46的入呼叫,到达一个音频拨号装置器,成为根据箭头48的出呼叫。例如它也许是一个向公司交换机直接拨号的呼叫的问题,其中内部号码以音频代码的形式被从公用交换机传送到公司交换机。
这意味着需要一个程序,由图2中的方框50标明,它能对连续的间歇脉冲计数,以及一个由图2中的方框52标明的另一个程序,它能将一个数字翻译成一个音频代码并将其发送到线路上。为了使程序50和52能彼此通信,它们必须有公共“语言”——协议—利用此协议它们才能通信。在这一语言中,诸如间歇脉冲或者音频代码这样的概念都是不被使用的。这样,所有的电话交换机都有一个内部协议,利用图2中的线54标明,所有去往或来自它的可以想到的线路协议都可以由它翻译。
如果现在需要在这样一个电话交换机中引入另外一个协议,则应该使这个新协议能与任何一个已存在的协议互相配合。另外应当保证所有已存在的协议应与这个新协议互相配合。这样设计一个新协议的复杂性就随着已存在的协议数而增加了。
根据图2中的情况,内部协议54可以被看作是本发明所关心的一种接口。如果引入根据本发明的参考模型,就可以得到图3中所表示的一个配置。这个参考模型一方面包含一个代表主叫方的模型程序A(根据在电信领域通常的语法使用“A方”),另一方面包含了代表被叫方的模型程序B(“B方”)。不过,使本例区别于前一个例子的本质一点就是这些模型中的一个通过内部协议看到另一个模型,以及对另一方的接口即内部协议的接口。A和B模型被设计为能够执行内部协议54上的所有可能的及允许的操作,同时它们检查接口上没有不允许的操作。为了这些检查能在接口被执行,内部协议由一个内部协议模型所代替,此模型另外还包含程序件例程,用来发现不允许的操作,如果有的话。
根据图3所示的配置,可能“振铃”,也就是建立一个A与B之间的呼叫,但并不通话,通话是由另外一个接口控制的。但也可能在协议P1-Pn的任一个上从A“振铃”,也可能在B接收一个“呼叫”。
模型程序A和B不需要任何自己的硬件,因为它们是纯粹的程序件单元。它们总是与内部协议一起是可获得的。例如,如果一个入协议Px已准备好,就可能立刻在B模型上运行它。
A模型应当能做一个入协议所能做的一切。B模型应当能做一个出协议所能做的一切并且由内部协议54传递的。这意味着:
——一个出协议,例如P2必须准备处理模型A能提供的一切,这意味着它既能进一步发送,也能拒绝,例如通知“不能做”。因为这个出协议P2能处理所有由A模型给出的一切,所以没有其它入协议能用一个新的,以前被测试或未预见的功能使其惊奇。
——一个入协议,例如P2必须为这种情况做准备,即出协议,例如P1不能处理P2中存在的功能。如果例如所讨论的入协议P2是用于一个按键式话机,则如果出协议也是P2,重呼就会起作用,但是如果产生了一个长距离呼叫,例如向出协议P1的,则将出现P1没有此功能的情况。这必须由入方的P2进行准备。B模型既可以作为它已经重呼也可以作为它没有重呼而出现。
——一个入协议,例如P2,能有不由内部协议处理的功能。这从A模型中出现,此模型不处理这些功能。
图4是用来解释根据图2和图3的电话交换机中的不同操作作为在一个普通电话通话中执行的例子,是如何能在一个A用户的模型A′和B用户的模型B′之间运行和监视的,它们分别通过接口56和58中的每一个被连接到一个内部协议55。
本例反映了A和B方的小部分使用情况,当它们出现时,每个都将被特别强调。在一个实际的内部协议中,两方之间存在更多的信号,并且许多事情可能不仅分别发生在A方和B方,还发生在内部协议中,但这已被排除了以便使本例描述得更清楚。特别是,内部协议被简化了。这也由程序件来实现,并且在实际情况中有自己的事件——例如它能通知另一方它失去了与另一方的联系。
在文中,本发明的一个本质特征值得被强调。这就是,没有一个用户模型知道内部协议55的另一端是否也是一个模型或者它是否是“实际”协议P1-Pn中的一个。尽管下面对于出现在图4中的流程描述为了简单起见,主要概述使A′和B′模型通过内部协议55通信,但这并不意味着只是一个进程,而是两个完全独立的,偶尔交织的进程的问题。这些进程,即一个A′进程和一个B′进程是“公正”分离的。
B′模型由赋值的参数Tb1,Tb2和Tb3以及一个为B′用户分配的状态开始,并通过等待在60标明的一个呼叫开始。Tb1标明呼叫将持续多长时间。Tb2标明在B′作出反应之前经过了多少时间,但也能表明B′根本不应答。Tb3表明B′挂机之前经过了多少时间。B′用户的状态有忙,空闲或锁住。
62标明的A′模型由赋值的参数Ta1和Ta2开始。Ta1表明A′模型在它挂机之前需从另一方等待响应多长时间。Ta2表明A′在挂起之前保持通话状态的时间长度。
如果实施需要的话,内部协议被启动使得能够在双方间传递消息。本例中的内部协议不执行自己的初始化。在另一个更复杂的例子中,也可以想象到它由一个参数开始,该参数表明在启动内部协议后经过多长时间通知双方连接已被拆除,因此允许双方以被控制的方式拆除连接。
当来自另一方的一个消息到达时,一个等待模型就终止,然后转而跟随这一消息。在此连接中并为了更好地理解下面的描述,很重要的是要认识到每个消息有三部分,即分别为发送方希望什么,内部协议传送什么,以及接收方如何理解它。
A′模型由一个建立呼叫的请求开始,见箭头64,通过内部协议中一个信号“发送一个呼叫”,见箭头66,指向一个呼叫,见箭头68,指向B′模型。这将终止它的等待并在70开始,测量时间Tb1。经过这一时间,B′模型根据用户状态继续,该状态是在启动是根据上面被赋值的。
如果B′用户的状态是忙或找不到的,B′模型的事件进程就被终止,在72标明,并分别通过一个信号“忙”或“得不到”,在内部协议中分别为箭头74和76,A′模型将消息理解为“发送一个忙音”,见箭头78,和“发送一个不可找到音”,见箭头80。A′模型当然不发送任何音——它不能。不过,一个实际的协议在这种情况下将发送一个音频。A′模型的事件进程被终止,在82标明。
事件68,74,78和68,76,80分别代表A方的第一和第二种使用情况,也就是B方在来自A方的呼叫上分别发送“忙”和“得不到”。
如果B用户的状态为空闲,则在内部协议中发送信号“呼叫准备好”,见箭头84,指向A方,并被A′模型理解为“发送拨号音”,见箭头86。当然,A′模型在这种情况下可以不发送音频。由于上面描述的“发送忙音”和“发送得不到音”的情况,就只有一个描述提供在一个实际协议中能做什么的建议的问题。如果在上下文中有一个拨号音,则现在它将被发送。同时B′模型开始,如88所示,测量时间Tb2,且A′模型开始,如90所示,测量时间Ta1。
在参数Tb2确立的时间之后,B′模型向A′模型发送一个应答,见箭头92,它由内部协议作为“B应答”被传送,见箭头94,并被A′模型理解为“终止拨号音”,见箭头96。A′模型终止测量时间Ta1并转而开始测量时间Ta2,如98所示,在请求被执行之后。
A′模型如箭头100所示,既可以在等待另一方应答的参数Ta1确立的时间之后,也可以在由通话状态的参数Ta2确立的时间之后挂起,这取决于两个时间标准中的哪一个是激活的。
事件84,86,90和92,94,96,98分别代表A方的第三和第四种使用情况,也就是当A方呼叫时,B方为空闲的但并不应答,和B方应答但并不挂起。B方的第一和第二种使用情况以相应的方法出现在这里,也就是分别为,A方建立一个呼叫,但又在B方应答之前挂起,或者在B方应答之后挂起。
在与发送消息B应答一起,见箭头94,B′模型开始测量时间Tb3,如102所示。这一时间过去之后,B′模型挂起,由箭头104标明。这代表A方的第五种使用情况,也就是当A方呼叫时,B方应答并随后挂起。以相应的方式,B方的第三种使用情况出现在这里,也就是A方建立一个呼叫,但在B方挂起之前并不挂起。
从上面参考图4的描述中,可以得到一些语义规则,例如:
——A方在B方返回状态之前不能挂机,
——在找不到/忙后A方和B方都不被允许发送另外的消息,
——B应答只在B-空闲之后被发送。
对于A′模型,要通过根据箭头106的内部协议中的“A拆除连接”信号,发向B方的根据箭头106的关于确认消息的请求的信号,及相应的来自B方的根据箭头110的确认“拆除连接”,根据箭头112和箭头114指向终止113的内部协议中的“B准备好”信号拆除连接以终止。对于B′模型,要通过根据箭头116的内部协议中信号“B拆除连接”,发向A的根据箭头118的确认消息请求信号及一个相应的来自A方的根据箭头120的确认消息“拆除连接”,根据内部协议中箭头122和箭头124指向终止125的信号“A准备好”进行拆除连接。
从上面的情况看来,在不能保证另一方确认时,没有任何一方必须拆除连接。尽管没有表示出来,但也能想象到分别在步骤108与110,步骤118与120之间插入一个延迟。
从图4所示的例子开始,将给出在讨论通信情况时本发明一般含义的详细分析。
假设首先讨论一个公用电话站中的完整的线路接口。图4可以以与图5所示的方式另外被重画,同时省略所有的细节,这样所得到的可以被描绘为一个参考模型,它包含三部分,即除了A′和B′模型还有一个内部协议模型I,与位于A′模型和I模型之间的接口56,及位于I模型和B′模型之间的接口58。
如果你现在更仔细地研究I模型,则会发现下面的内容。
在最简单的情况下A′和B′,或它们代表的应用,在相同的本地站的相同处理器上执行。也许会存在一个本地电话通话的问题。
不过,我们知道在向地球另一方的电话振铃之间没有更大的区别。在这种况下,同一个I模型代表了全球电话网的部分,该网是一个极复杂的技术系统。对于一个有经验的电话网设计这来说,这样一个国际电话通话在其途中经过的接口数量是很大的。不过,内部协议模型I在复杂长距离呼叫情况下的也是一个易管理抽象模型。
另外,事实上,同一部电话既可以用于呼叫也可以用于接收语音。从这一点来看,A′和B′模型之间根本没有区别,它们是几乎同一类型中的两个个体。为了继续讨论以及解释本发明与其它实现的连接,例如根据图1和3中的那些,这样它们就能分别用A″1和A″2表示。基于同样的原因,I模型可以被重新命名为B″且图5被变换为图6所示的形式。如图所示,图5中的两条接口线又与现实中的一个单独的接口冲突。
因为根据上述情况,A″1可以被看作与A″2是同等的,参考图7,它们能被合并为A″。这样就可以看到结果成为根据本发明定义的接口参考模型,其中A″的特征为模拟接口使用的第一个辅助程序,B″的特征为模拟它在接口中提供功能的第二个辅助程序,两个程序能执行接口上所有可能的和允许的操作,同时它们检查另一个程序不做任何不允许的事。根据图4的实施方案,“A′模型”与“B′模型”就共同形成第一个辅助程序,并且内部协议模型55形成第二个辅助程序。事实上,接口56和58是相同的接口,也就是根据本发明的参考模型所指的。
以更广泛的观点看,上述说明的内容可以被解释如下:
A方将信息传送到B方并在后来将它取回。如果它是同一个A个体,则B就是根据图1的实施方案的一种情况的一个存储器功能。如果在有两个A个体的情况下,B就是一个通信功能,例如图4中的例子。
从这一模型中概括出来的——这是重要的——就是B方是怎样在内部处理信息的。以模型A的观点,看不到关于是否B方只接收来到的信息,以将其未变化地返回,或以由接口描述的方式被改变后返回,或是否B方例如把消息进行编码,将其分成足够大的分组,将它发送到一个连接上等等,以便接收分组,将它们放在一起成为一个消息,对其解码并返还给A。
在第二个辅助程序代表一个协议的情况下,根据下述内容可以出现该参考模型的三种使用情况:
1)一个通信接口的使用,参见图8。
在这种情况下,应当与接口一起测试一个用户程序件的一个新版本a″1,它代表了A个体中的一个。a″应能通过“第二个辅助程序B”向第二个A个体A″2“振铃”,A″2在它对“第一个辅助程序”的容纳下,应能被新程序件调用。使用情况也包括A″2调用a″1的情况。
2)一个新通信系统的设计,参见图9。
在这种情况下,B个体,这里记做b″,是一个新通信系统,它应当与接口一起被包含两个个体A″1和A″2的“第一个辅助程序”测试。新通信系统b″应能考虑A″1和A″2以所有可以想到的方式互相“振铃”的情况。
3)在一个用户内通信,参见图10。
在这以情况下,两个A个体能分别被一个新用户程序件的“调用”部分a″1和一个“应答”部分a″2代替,这个新用户程序件和接口一起被“第二个辅助程序”测试。事实上,这样就是同一个新程序件功能的问题,它“调用”自己的一个拷贝并传递信息。
两个拷贝a″1与a″2以不必为另一个程序所了解的方式互相通信。在此配置中需要被验证的是,它们在消息传到B时也互相了解,并且例如其内容也经过一些修改。为了设计和验证与自己进行通信的程序件,就需要一个B模型用于通信目的。这个B模型代表了进行这一通信最简单的方法。
一个如何完全实际地使用根据本发明的方法的实施方案将在下面更详细地描述。
起始点是一个以传统方式规定的非常简单的接口,目的是更详细地研究当接口的定义与一个参考模型紧密关联时将发生什么。
在一个泛欧数字移动电话系统GSM中,网络中的一个用户可能离开这个网络进入另一个网络的覆盖区域,并在那里得到与在自己的网络中相同的服务。在同一个国家可能有几个,通常是互相竞争的网络操作者以它们的网络覆盖相同的地理区域。这样不同的操作者有不同的合作伙伴为自己的用户群提供在其覆盖区域外最大可能的覆盖。不过属于非合作网络的用户将被拒绝,一方面是由于竞争的原因,另一方面是因为如果没有规范这点的合作协议,它们就不能记帐。这样,如果一个异地用户要求得到服务,你就必须判断这个用户是否属于一个合作网络操作者,以便能够确定是提供服务还是拒绝。请求服务的用户尤其要用一个PLMN(PLMN=公共陆地移动网络)参数确认自己,它表明该用户属于哪个网络操作者。现在我们将判断自己的网络是否与所说明的操作者相配合。
这个功能在这里被选做例子的接口上被提供。
在更详细地介绍这个程序件之前,应当强调,根据本发明的参考模型方法并不限于任何特定的计算机环境。因此这里描述的程序件在编程语言,操作系统,计算机配置等方面都是中立的。更特别的是,为了便于理解,它们被以所谓的伪代码书写,其基于直观的解释。
接口的语法定义以下面的伪代码出现:
begin Plmn_interface_definition; typen GsmPlmnResult is ENUMERATED GsmPlmnValidMS:=0, GsmPlmnUnValidMS:=1, GsmPlmnDBNfault:=99 end_type; use EXTERNALdefinition of type GsmPlmnId; method checkValidMS(Plmn is of type GsmPlmnId) RETURNS a value of type GsmPlmnResult; end Plmn_interface_definition;
以方式checkValidMS,接口定义了发现一个移动用户(MS)是否属于一个合作PLMN的可能性。移动用户的PLMN在伴随的参数Plmn中被描述,其格式为GsmPlmnId。对问题的回答在返回值中给出,其类型为GsmPlmnResult。
结果可以是下面三个中的任意一个。GsmPlmnValidMS是指用户可以被提供服务。GsmPlmnUnValidMS是指(尽管这里显示得不清楚)用户应当被拒绝。第三个为GsmPlmnDBNfault,是指很不幸没给出任何应答。DBNfault是指数据库中有错。
GsmPlmnId在其它地方定义。这样就有一个我们能够并将使用的定义,但我们不关心它实际上看起来象什么。我们可以使用一个鉴权定义,但我们也可以找到我们自己的。
参考模型的原则可以被用于根据下面内容的这个接口中。根据本发明定义的第一个辅助程序可以如下所示:
begin auxiliary_program_1; <dp n="d20"/> declare; result is of type GsmPlmnResult; Plmn is of type GsmPlmnId; end declare begin program; Plmn:=read_parameter;/*This is a starup parameter*/ result:=checkValidMS(Plmn); switch on rusult if 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;
根据本发明定义的第二个辅助程序可以如下所示:
begin auxiliary_program_2; <dp n="d21"/> 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 then value_2:=read parameter; end_if; while true do wait for checkValidMS(Plmn_value),when received do print(“Plmn“\value of Plmn_value\”in checkValidMS”); switch on value 1 <dp n="d22"/> if 0:return GsmPlmnValidMS; if 1:return GsmPlmnUnValidMS; if 2:ifPlmn=value_2 then return GsmPlmnValidMS else return GsmPlmnUnValidMS end_if; if 99:if number_of requests=0 then return GsmPlmnDBNfault; else print(“do not repeat request to an unoperative Data Base”); exit_program; end_if; if other:print(“Parameter error”); exit_program; end_switch; end_do; end_while; end auxiliary_program_2;
另外,还需要一个GsmPlmnId,Plmn语句的格式的定义。这个定义是另一个接口的一部分,三种不同情况是可以想到的:
1)有一个准备好的正确定义描述Plmn语句的真实格式。如果处理简单,我们就可以用它。(Plmn的正确格式为3+2个数字)。
2)也有接口GsmPlmnId的一个参考模型。在那种情况下,我们除了使用接口GsmPlmnId外,还使用它的第二个辅助程序。
3)只有接口本身也就是格式类型被命名为GsmPlmnId这一事实。在此情况下必须准备一个自己的GsmPlmnId定义。原则上它看起来杂乱无章,可以说Plmn由一个数字或一个文本串说明。只要没有类型1)或2)的定义,这一定义就被使用。
因此我们有了一个完整的参考模型。它根据下述内容被使用。
A)现在也有一个接口的语义模型。第一个辅助程序表明了接口的典型使用。事实上应当将它作为模版拷贝到一个用户程序中。从辅助程序看,语义非规则看来是如果信息未被给出,则接口不能决定是否用户是否应被提供服务,一个使用程序必须自己来决定这点。
第二个辅助程序包含一个语义规则:它说明如果GsmPlmnDBNfault已被接收到,它就不再被允许作为一个用户重试。对于提供接口的程序,这意味着如果数据库——或者任何产生困难的——允许重试,提供程序重试并且当它放弃时,它首先用GsmPlmnDBNfault应答。以那种方式,对于使用程序重试总是没有意义的。
B)一个新设计的用户程序应当被测试。它调用接口,接口的功能现在由第二个辅助程序提供。通过使用这个辅助程序而不是一个在系统应用中提供这个接口的程序,可以看到下面的优势:
——与接口一起有一个起作用并容易得到的辅助程序。系统应用,如果确实有一个可执行的,被认为更复杂且因此可能是不完善的。
——没必要为完成测试而配置一个完整的数据库。大多数会被发现的错误可能是数据库被错误配置这样一个事实的结果。或者是使用数据库的程序中的错误的引起。在这样的情况下,容易发生自己程序中的错误被忽略的事情。
——如果设法配置数据库使其起作用,则让其停下来去起作用,例如给出应答GsmPlmnDBNfault,就不是完全无价值的了。
——辅助程序写出有问题的Plmn。如果语句在中途被曲解了,这可以在辅助程序写出被测试的Plmn时发现。如果请求在同一个操作中被重复——本身是不被禁止的,但是不必要的——这也将被发现。
C)一个新设计的提供接口的程序将被测试。它与接口和第一个辅助程序一起被配置。这样就很简单地把问题推向数据库程序,不管Plmn值是否可接受。如果这由完全的系统应用去做,则原则上需要一个完整的移动电话系统。第一个辅助程序应能被容易地控制,这样它就可以用大量不同的Plmn值被迅速执行了。
本发明有几个重要优点。
利用本发明,接口被完整定义,即既有语法的也有语义的。语义成为被正式和精确定义的。
一个接口,其中语义可以用言语描述,或根本不是,需要使用它的设计者的经验。这样就是一个利用实验或失误得到经验的问题,但仍不能保证是既正确又完整的,另外可能也不能简单地传授给其它设计者。
不过,如果根据本发明接口被提供了模型程序,则所有知识都是与接口有关的,并且接口的用户知道自己有关于接口的必要知识。另外用户知道所有其它设计者有关于接口的相同知识。这意味着不必要考虑另一方可能会对语义做另一种解释,及因此有必要一直检查另一方没有做本身理解为不允许的事。当使用接口时,这种测试要花费设计力量及执行时间。
利用接口模型,就可能正式证明一个程序件单元,这可以从它使用的接口以及它提供接口看到。这一证明的执行独立于所有的不同的类型,变型,版本及包含在或可能包含在接口另一端的程序件单元的组合。
一个曾被用这种方法证明了的程序件单元仍是被证明的。它不再因为环境被改变而需要重新证明。程序件单元可以与参考模型程序被提供并且任何人都可以执行这些。不需要证明协议,只要需要,就可以重复证明。
当这一方法被使用时,模型程序与接口一起被提供。模型程序使得用户使用接口更容易。
在其它情况下没有提供模型程序,但它们被用于证明另一个被提供的程序件,并且在验证协议中参考这样一个事实即这个程序件已通过模型程序被做了质量保证。
Claims (46)
1.一个方法,用来测试一个接口以及通过该接口与另一个程序件交互作用的一个程序件的功能,其特征为,与接口一起模拟其功能要通过该接口被提供的程序件的执行以及要使用通过该接口提供的功能的程序件的执行,通过执行接口上所有可能的和允许的操作,同时检查与接口一起被测试的程序件没有做不允许的事。
2.根据权利要求1中的一种方法,其特征为,执行对包含所有可能使用情况的接口的使用的模拟,并通过处理所有使用情况并表明在实际中提供接口功能的程序件中将发生什么,执行经接口提供功能的模拟。
3.根据权利要求1或2的一个方法,其特征为,利用一个包含接口的可执行单元完成该执行。
4.根据权利要求1-3中的任何一个的一个方法,其特征为,执行所述模拟的同时监视与接口一起被测试的程序件,如果做了任何不允许的事时,就提供错误打印输出。
5.用来测试一个接口与一个其功能由另一个程序件经该接口提供的程序件的功能的方法,其特征为,通过与接口一起测试该程序件,同时执行接口上所有可能的和允许的操作模拟接口的使用,并检查通过接口测试的程序件没有做任何不允许的事。
6.根据权利要求5的一个方法,其特征为,执行对于包含所有可能使用情况的接口的使用的模拟。
7.根据权利要求5或6的一个方法,其特征为,通过一个包含一个模拟程序,接口和一个要被测试的程序的可执行单元执行该模拟,同时通过接口对要被测试的程序中的事件进程进行初始化和控制。
8.根据权利要求5-7中的任何一个的方法,其特征为,监视与接口一起被测试的程序件,如果做了任何不允许的事就将提供把错误打印输出。
9.一个方法,用来测试一个接口以及使用第二个程序件通过该接口提供的功能的第一个程序件的功能,其特征为,通过与接口一起测试该第一个程序件同时处理接口上接收到的所有可能的操作模拟接口中提供的功能,同时监视测试中的程序不会以不允许的方式使用该接口。
10.根据权利要求9的一种方法,其特征为通过处理所有使用情况并表明在实际中提供接口功能的程序件中将发生什么执行该测试。
11.根据权利要求9或10的一个方法,其特征为基于一个完整的接口信息和定义的进行测试。
12.根据权利要求9-11中的任何一个的一种方法,其特征为通过一个包含测试中的程序的可执行单元执行模拟同时捕获通过一个接口离开该程序的事件进程并将其返回到该程序。
13.根据权利要求9-12中的任何一个的一种方法,其特征为执行测试同时监视与接口一起被测试的程序,如果做了任何不允许的事就提供将错误打印输出。
14.根据权利要求9-13中的任意一个的方法,其特征为,通过模拟接口的使用通过与接口一起执行接口上所有可能的和允许的操作测试在接口中提供功能的模拟,同时检查对于接口中提供功能的模拟不会产生任何不允许的事。
15.一种方法,用来在一个通信系统中测试,其中用户程序件能通过一个由相应接口与各自的用户程序件相分离的协议互相通信,
能与已存在的用户程序件通信的新用户程序件,其特征为
提供第一个和第二个辅助程序,包含代码分别,用于模拟接口的一个用户程序件的使用和协议的功能,以及允许两个辅助程序执行接口上所有可能的和允许的操作,同时它们检查在接口另一端的一个程序不做任何不允许的事。
通过第二个辅助程序使新程序件开始与第一个辅助程序进行通信连接,并执行在两个辅助程序中提供的执行操作。
16.一种方法用来在一个通信系统中测试,其中用户程序件能够通过由相应的接口与各自的用户程序件相分离的协议互相通信,
新协议程序件的特征为
提供一个辅助程序:包含代码用来模拟由一个与接口一起能被新程序件测试的用户程序件对接口的使用,以及用来允许辅助程序执行接口上所有可能的及允许的操作,并检查利用接口测试的协议程序件没有做任何不允许的事。
提供辅助程序的两个拷贝并通过新程序件使它们开始相互通信连接,并且
执行在两个拷贝中提供的操作。
17.一种方法用来在一个通信系统中测试,
其中,用户程序件能够通过由相应的接口与各自的用户程序件相分离的协议互相通信,
新用户程序件的特征为:
提供一个辅助程序,包含代码用来模拟由接口提供的协议的功能,同时使得能够与接口一起测试新用户程序件,执行接口上所有可能的和允许的操作并检查在接口另一端的程序没有做任何不允许的事,
使新用户程序件的两个拷贝通过辅助程序开始互相通信连接并且,
执行辅助程序中提供的操作。
18.一种方法用来为一个通信系统提供一个参考模型,
其中程序件能够通过一个协议互相通信,此协议与这些程序件在各自程序件的接口上相分离,其特征为,产生第一个和第二个辅助程序,通过引入代码用来
使第一个辅助程序代表通过协议互相通信的程序件以及在通信中既能呼叫也能应答,
使得第二个辅助程序代表协议,
允许第一个辅助程序能够在通信中既作为一个调用实例子也作为一个应答实例,
允许这两个实例执行接口上所有可能的和允许的操作,同时检查在接口另一端的程序没有做任何不允许的事。
19.一个根据权利要求18的方法,其特征为,与接口一起产生,维护和提供两个程序。
20.一个根据权利要求18或19的方法,其特征为引入代码用来
使得第一个辅助程序能够作为接口的一个完整用户,包括所有允许的使用情况,既承担调用实例的角色也承担应答实例的角色,并且
使得第二个辅助程序能够处理所有的使用情况,并产生所有可想到的结果,还有错误,它们能出现在处理使用的情况中并被在接口中定义,并表明在一个特定设计的程序中可能发生什么,它在实际中将提供接口的功能。
21.根据权利要求18-20中任意一个的方法,其特征为将代码引入该第一个和第二个辅助程序,结果是
使得两个第一个辅助程序实例之间的通信能够在第二个辅助程序上被执行,
只有应答实例被寻址,并且
第二个辅助程序能够产生影响实际中的一个协议的所有可能的错误情况。
22.根据权利要求18-21任意之一的方法,其中特征为引入代码,使得第一和第二辅助程序象接口一样可见,且包含接口的完整信息和定义。
23.根据权利要求18-22中任意一个的方法,其特征为,与接口一起产生第一个和第二个辅助程序以形成一个可执行单元,并且引入代码使得第一个辅助程序能产生两个辅助程序实例,并通过接口利用第二个辅助程序使这些实例之间能通信。
24.根据权利要求23的一个方法,其特征为引入代码
使得第一个和第二个辅助程序能够监视接口另一端的一个程序,以便如果这个程序做了任何不允许的事就将错误打印出来,并且
使得第一个辅助程序能够检查与其通信的一个用户程序没有做任何不允许的事。
25.一个用来为一个接口提供参考模型的方法,其特征为,通过引入代码产生第一个和第二个辅助程序,其中
使得第一个辅助程序能够模拟接口的使用,
使得第二个辅助程序能够模拟接口中提供的功能,
使得两个程序都能执行接口上所有可能的和允许的操作,并同时检查在接口另一端的程序没有做任何不允许的事。
26.根据权利要求25的一个方法,其特征为与接口一起产生,维护和提供两个程序。
27.根据权利要求25或26的一个方法,其特征为产生代码
使得第一个辅助程序作为接口的一个完整用户,包含所有可能的使用
情况,
使得第二个辅助程序能够处理所有使用情况及产生所有可想到的结果,及错误,它们能出现在处理使用情况的过程中并被在接口中定义,并且表明在一个特定设计的程序中将发生什么,该程序在实际中将提供接口中的功能。
28.根据权利要求25-27中任意一个的方法,其特征为在第一个和第二个辅助程序中产生代码,使得它们象接口一样是可见的并且包含接口的一个完整信息和定义。
29.根据权利要求25-28中的任意一个的方法,其特征为产生第一个和第二个辅助程序及接口以一起形成一个可执行单元。
30.根据权利要求25-29中任意一个的方法,其特征为在第一个和第二个辅助程序中引入代码,使得它们能够监视接口另一端的一个程序,以便当这个程序做了任何不允许的事时将错误打印出来。
31.一个用来测试接口功能的系统,其特征为,模拟接口的使用的第一个功能并且模拟接口中提供的功能的第二个功能,通过执行接口上所有可能的和允许的操作,同时检查在接口另一端的程序没有做任何不允许的事。
32.根据权利要求31的一个系统,其特征为,通过允许验证一个新设计或修改的提供或使用接口的程序,分别执行接口与该程序的代码及第一个个第二个辅助功能,在该第一个和第二个辅助功能中运行所有使用情况,同时寻找除了证明外的不允许的操作。
33.根据权利要求31或32的一个系统,其特征为一个方法,也执行用来测试由接口影响的所有程序序列及包含在验证中的程序中的代码,同时寻找不允许的隐藏和未规定的功能。
34.根据权利要求31-33中的任意一个的系统,其特征为,上述的第一个辅助功能模拟接口的一个完整用户,包含所有的使用情况,并且上述的第二个辅助功能模拟处理所有使用情况并表明在一个程序中将发生什么,该程序在实际中提供接口的功能。
35.根据权利要求31-34的任意一个的系统,其特征为第一个和第二个辅助功能与接口一样是可见的并包含接口的一个完整信息。
36.根据权利要求31-35中任意一个的系统,其特征为第一个和第二个辅助程序与接口一起形成一个可执行单元。
37.根据权利要求31-36中任意一个的系统,其特征为第一个和第二个辅助功能监视在接口另一端的一个程序,如果该程序做了任何不允许的事,就将错误打印出来。
38.测试通信系统中的一个接口的系统,
其中程序件能够通过一个以对相应程序件的接口与这些程序件相分离的协议互相通信,其特征为,第一个辅助功能代表通过协议互相通信的程序件并且第二个辅助功能代表协议,第一个辅助功能包含使得它在通信中既作为调用实例又作为应答实例的装置,其中这两个实例能执行接口上所有可能的和允许的操作,同时它们检查在接口另一端的程序没有做任何不允许的事。
39.根据权利要求38的一个系统,其特征为第一个辅助功能包含能使得它作为接口的一个完整用户的装置,包含所有允许的使用情况,既承担调用实例的角色也承担应答实例的角色,并且第二个辅助功能包含使得它能处理所有使用情况并产生所有可想到的结果,及错误的装置,它们出现在处理使用情况中并被在接口中定义,而且表明在一个特定设计的程序中将发生什么,该程序在实际中将提供接口的功能。
40.根据权利要求38或39的一个系统,其特征为
使得两个第一个辅助功能的实例之间的通信在第二个辅助功能上被执行,
使得只有应答实例被寻址,并且
使得第二个辅助功能产生影响实际中的一个协议的所有可能的错误情况。
41.根据权利要求38-40中任意一个的系统,其特征为,第一个和第二个辅助功能象接口一样是可见的并包含接口的一个完整信息和定义。
42.根据权利要求38-41中任意一个的系统,其特征为,第一个和第二个辅助功能与接口一起形成一个可执行单元,通过方法使得两个辅助功能实例由第一个辅助功能产生,并通过第二个辅助功能通过接口互相通信。
43.根据权利要求42的一个软件系统,其特征为第一个和第二个辅助功能包含允许它们监视在接口另一端的一个程序并且如果这个程序做了任何不允许的事就将错误打印输出的装置,而且第一个辅助功能包含方法允许它检查与之通信的一个用户程序没有做任何不允许的事的装置。
44.用于在一个通信系统中测试的一个系统,
其中用户程序件能通过一个以相应接口与各自的用户程序件相分离的协议互相通信,
能与已存在的用户程序件通信的新用户程序件,其特征为
代码用来定义第一个和第二个辅助程序,分别模拟一个用户程序件对接口及协议的功能的使用,并允许这两个辅助程序执行接口上所有可能的和允许的操作,同时它们检查在接口另一端的一个程序没有做任何不允许的事,
法用来使得新用户程序件通过第二个辅助程序开始与第一个辅助程序通信的装置,以及
用以执行在两个辅助程序中提供的操作的装置。
45.用来在一个通信系统中测试的系统,
其中用户程序件能通过一个以相应接口与各自的用户程序件相分离的协议互相通信,
新用户程序件,其特征为
代码用于定义一个辅助程序以模拟由一个用户程序件对接口的这种使用使接口新程序件能被测试,并允许辅助程序执行接口上所有可能的和允许的操作,并利用接口检查被测试的协议程序件不做任何不允许的事,
用于使两个辅助程序通过新程序件开始互相通信的装置,以及
用于执行在两个拷贝中提供的操作的装置。
46.一个用于在一个通信系统中测试的系统,
其中用户程序件能够通过一个以相应的接口与各自的用户程序件相分离的协议互相通信,
新用户程序件,其特征为
代码用于定义一个辅助程序,以模拟通过接口提供的协议功能,同时使得能与接口一起测试新用户程序件,并执行接口上所有可能的和允许的操作并检查在接口另一端的一个程序没有做任何不允许的事,
用于使两个新用户程序件的拷贝通过辅助程序开始彼此通信的装置,
用于执行在辅助程序中提供的操作的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
SE9402921A SE504860C2 (sv) | 1994-09-02 | 1994-09-02 | Referensmodell för gränssnitt |
SE9402921-2 | 1994-09-02 | ||
SE94029212 | 1994-09-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1157045A true CN1157045A (zh) | 1997-08-13 |
CN1265291C CN1265291C (zh) | 2006-07-19 |
Family
ID=20395099
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB951948946A Expired - Fee Related CN1265291C (zh) | 1994-09-02 | 1995-09-01 | 测试接口的方法和系统 |
Country Status (11)
Country | Link |
---|---|
EP (1) | EP0777878B1 (zh) |
JP (1) | JPH10505178A (zh) |
KR (1) | KR970705790A (zh) |
CN (1) | CN1265291C (zh) |
AU (1) | AU691032B2 (zh) |
CA (1) | CA2197979A1 (zh) |
DE (1) | DE69527718T2 (zh) |
FI (1) | FI970852A0 (zh) |
NO (1) | NO970929L (zh) |
SE (1) | SE504860C2 (zh) |
WO (1) | WO1996007968A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100392613C (zh) * | 1999-05-14 | 2008-06-04 | 英业达股份有限公司 | 通信接口卡槽的测试装置及方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4617663A (en) * | 1983-04-13 | 1986-10-14 | At&T Information Systems Inc. | Interface testing of software systems |
SE467229B (sv) * | 1983-08-19 | 1992-06-15 | Kurt Katzeff | Anordning foer bildande av en information och/eller instruktion avsedd att inmatas i en datamaskins programminne |
US4595981A (en) * | 1984-03-05 | 1986-06-17 | At&T Bell Laboratories | Method of testing interfaces between computer program modules |
JPS61265644A (ja) * | 1985-05-20 | 1986-11-25 | Fujitsu Ltd | インタフエ−ス・チエツク方式 |
JPH02205930A (ja) * | 1989-02-03 | 1990-08-15 | Fujitsu Ltd | インタフェースチェック処理方法 |
JPH0355633A (ja) * | 1989-07-25 | 1991-03-11 | Nec Corp | モジュール間インタフェイス検査装置 |
MX9200935A (es) * | 1991-03-07 | 1993-03-01 | Digital Equipment Corp | Sistema y metodo para detectar llamadas de instruccion de dominio cruzado en un sistema de computadora |
US5339422A (en) * | 1991-03-07 | 1994-08-16 | Digital Equipment Corporation | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment |
JPH05265772A (ja) * | 1992-02-26 | 1993-10-15 | Nec Corp | プログラム間インタフェース処理方式 |
-
1994
- 1994-09-02 SE SE9402921A patent/SE504860C2/sv not_active IP Right Cessation
-
1995
- 1995-09-01 EP EP95930781A patent/EP0777878B1/en not_active Expired - Lifetime
- 1995-09-01 CA CA002197979A patent/CA2197979A1/en not_active Abandoned
- 1995-09-01 DE DE69527718T patent/DE69527718T2/de not_active Expired - Lifetime
- 1995-09-01 WO PCT/SE1995/000986 patent/WO1996007968A1/en not_active Application Discontinuation
- 1995-09-01 CN CNB951948946A patent/CN1265291C/zh not_active Expired - Fee Related
- 1995-09-01 JP JP8509422A patent/JPH10505178A/ja active Pending
- 1995-09-01 KR KR1019970701388A patent/KR970705790A/ko not_active Application Discontinuation
- 1995-09-01 AU AU34032/95A patent/AU691032B2/en not_active Ceased
-
1997
- 1997-02-28 FI FI970852A patent/FI970852A0/fi unknown
- 1997-02-28 NO NO970929A patent/NO970929L/no not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
SE504860C2 (sv) | 1997-05-12 |
SE9402921L (sv) | 1996-03-03 |
JPH10505178A (ja) | 1998-05-19 |
AU691032B2 (en) | 1998-05-07 |
NO970929D0 (no) | 1997-02-28 |
NO970929L (no) | 1997-05-02 |
FI970852A (fi) | 1997-02-28 |
AU3403295A (en) | 1996-03-27 |
KR970705790A (ko) | 1997-10-09 |
DE69527718D1 (de) | 2002-09-12 |
CN1265291C (zh) | 2006-07-19 |
DE69527718T2 (de) | 2002-12-12 |
EP0777878A1 (en) | 1997-06-11 |
WO1996007968A1 (en) | 1996-03-14 |
EP0777878B1 (en) | 2002-08-07 |
SE9402921D0 (sv) | 1994-09-02 |
FI970852A0 (fi) | 1997-02-28 |
CA2197979A1 (en) | 1996-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Felty et al. | Feature specification and automated conflict detection | |
CN1110166C (zh) | 从一个主登记向多个外部登记传播明码口令的系统和方法 | |
CN1096166C (zh) | 为多个客户机提供口令组合检查的方法和网络系统服务器 | |
CA2281368C (en) | Service contract for managing service systems | |
US7561673B2 (en) | Integration of speech services with telecommunications | |
Hay et al. | Composing features and resolving interactions | |
US20050004973A1 (en) | Reflection-based processing of input parameters for commands | |
CN1647042A (zh) | 定制软件抽象的方法 | |
CN1679275A (zh) | 用于在电信网络中配置控制的方法和系统 | |
Gibson | Feature Requirements Models: Understanding Interactions. | |
CN1158680A (zh) | 通用服务协调机构 | |
CN110320378A (zh) | 质控测试申请方法、装置、设备及计算机可读存储介质 | |
CN1196073C (zh) | 电子商务系统 | |
CN1167011C (zh) | 可进行多种应用协议测试的方法 | |
CN1265291C (zh) | 测试接口的方法和系统 | |
Li et al. | Towards a practical and effective method for web services test case generation | |
CN114416202B (zh) | 一种移动端sdk调用方法及系统 | |
Van Wijk et al. | Reproducibility in pharmacometrics applied in a phase III trial of BCG-vaccination for COVID-19 | |
WO2019119636A1 (zh) | 基于保险业务的财务缴费方法、装置及设备 | |
AT&T | ||
Khaled et al. | Using π-calculus for Formal Modeling and Verification of WS-CDL Choreographies | |
CN102194151A (zh) | 一种审核业务流程中的流程引擎系统 | |
CN111143221B (zh) | 一种测试方法及装置 | |
Bergland et al. | Improving the front end of the software-development process for large-scale systems | |
Palix et al. | A stepwise approach to developing languages for SIP telephony service creation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060719 Termination date: 20130901 |