CN100585662C - 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法 - Google Patents

利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法 Download PDF

Info

Publication number
CN100585662C
CN100585662C CN200480023585A CN200480023585A CN100585662C CN 100585662 C CN100585662 C CN 100585662C CN 200480023585 A CN200480023585 A CN 200480023585A CN 200480023585 A CN200480023585 A CN 200480023585A CN 100585662 C CN100585662 C CN 100585662C
Authority
CN
China
Prior art keywords
test
computer based
plug
candidate
unit
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.)
Expired - Fee Related
Application number
CN200480023585A
Other languages
English (en)
Other versions
CN1836268A (zh
Inventor
克里斯多弗·克劳赫斯特
道格·布恩
罗格·C·克肖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Pullman Co ltd
Original Assignee
THOMSON PROMETRIC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by THOMSON PROMETRIC filed Critical THOMSON PROMETRIC
Publication of CN1836268A publication Critical patent/CN1836268A/zh
Application granted granted Critical
Publication of CN100585662C publication Critical patent/CN100585662C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B7/00Electrically-operated teaching apparatus or devices working with questions and answers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B5/00Electrically-operated educational appliances
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B5/00Electrically-operated educational appliances
    • G09B5/06Electrically-operated educational appliances with both visual and audible presentation of the material to be studied
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B5/00Electrically-operated educational appliances
    • G09B5/08Electrically-operated educational appliances providing for individual presentation of information to a plurality of student stations
    • G09B5/14Electrically-operated educational appliances providing for individual presentation of information to a plurality of student stations with provision for individual teacher-student communication
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B7/00Electrically-operated teaching apparatus or devices working with questions and answers
    • G09B7/02Electrically-operated teaching apparatus or devices working with questions and answers of the type wherein the student is expected to construct an answer to the question which is presented or wherein the machine gives an answer to the question presented by a student
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M15/00Arrangements for metering, time-control or time indication ; Metering, charging or billing arrangements for voice wireline or wireless communications, e.g. VoIP
    • H04M15/80Rating or billing plans; Tariff determination aspects
    • H04M15/8016Rating or billing plans; Tariff determination aspects based on quality of service [QoS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M2215/00Metering arrangements; Time controlling arrangements; Time indicating arrangements
    • H04M2215/74Rating aspects, e.g. rating parameters or tariff determination apects
    • H04M2215/7414QoS
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M7/00Arrangements for interconnection between switching centres
    • H04M7/006Networks other than PSTN/ISDN providing telephone service, e.g. Voice over Internet Protocol (VoIP), including next generation networks with a packet-switched transport layer
    • H04M7/0081Network operation, administration, maintenance, or provisioning
    • H04M7/0084Network monitoring; Error detection; Error recovery; Network testing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/24Monitoring of processes or resources, e.g. monitoring of server load, available bandwidth, upstream requests
    • H04N21/2402Monitoring of the downstream path of the transmission network, e.g. bandwidth available
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/442Monitoring of processes or resources, e.g. detecting the failure of a recording device, monitoring the downstream bandwidth, the number of times a movie has been viewed, the storage space available from the internal hard disk
    • H04N21/44204Monitoring of content usage, e.g. the number of times a movie has been viewed, copied or the amount which has been watched
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04QSELECTING
    • H04Q3/00Selecting arrangements
    • H04Q3/0016Arrangements providing connection between exchanges
    • H04Q3/0062Provisions for network management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S706/00Data processing: artificial intelligence
    • Y10S706/902Application using ai with detail of the ai system
    • Y10S706/927Education or instruction

Abstract

一种基于计算机的测试系统和方法,包括:测试驱动程序,其对到一个或多个测试应试者的基于计算机的测试的传送进行控制,以及在传送该测试期间对测试组件的高速缓存进行控制。所述系统包括各种不同的测试组件,包括:在测试的传送期间监视应试者进度、应试者表现、网络带宽、网络延迟和服务器响应,以及调节正在被高速缓存的测试组件的源或测试组件的量以供测试的传送。根据系统的这种监视,例如,如果检测到网络通信失败,则测试应试者就能够在建立连通性的同时继续基于计算机的测试。

Description

利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法
相关申请的交叉引用
本申请涉及并要求2003年6月20日提交的美国临时专利申请第60/479,952号的优先权,将该篇申请所公开的内容全部引入于此以供参考,并且还涉及下列申请:2003年10月30日公开的名为″METHODAND SYSTEM FOR COMPUTER BASED TESTING USINGCUSTOMIZABLE TEMPLATES(利用可自定义模板的采用计算机进行测试的方法和系统)″的美国专利公开第20030203342号,2003年10月16日公开的名为″METHOD AND SYSTEM FOR COMPUTERBASED TESTING USING A NON-DETERMINISTIC EXAMEXTENSIBLE LANGUAGE(XXL)PROTOCOL(利用非确定考核可扩展语言(XXL)协议的采用计算机进行测试的方法和系统)″的美国专利公开第20030196170号,2003年9月25日公开的名为″METHODAND SYSTEM FOR COMPUTER BASED TESTING USING PLUGINSTO EXPAND FUNCTIONALITY OF A TEST DRIVER(利用插件来扩展测试驱动程序的功能的采用计算机进行测试的方法和系统)″的美国专利公开第20030182602号,2003年7月24日公开的名为″METHODAND SYSTEM FOR COMPUTER BASED TESTING USING ANAMALGAMATED RESOURCE FILE(利用混合资源文件的采用计算机进行测试的方法和系统)″的美国专利公开第20030138765号,和2003年7月10日公开的名为″EXTENSIBLE EXAM LANGUAGE(XXL)PROTOCOL FOR COMPUTER BASED TESTING(采用计算机进行测试的可扩展考试语言(XXL)协议)″的美国专利公开第20030129573号,所有这些申请都是并存一致提交的,并且将所有这些申请的全部内容引入于此以供参考。
技术领域
本发明涉及用于简化诸如那些使用网络系统的基于计算机的测试的系统和方法。更具体而言,本发明利用可高速缓存对象来扩展测试驱动应用程序的功能。并且,更具体而言,这类可高速缓存对象包括:可高速缓存数据对象和可高速缓存程序和应用程序对象等,它们在简化测试的处理和管理过程中可以由测试驱动应用程序所使用。
现有技术
多年以来,标准化测试已经成为一种在教育性的职业介绍、技能评估等等方面评估应试者的常用方法。由于标准化测试的普及与大批发布,基于计算机的测试已经成为一种用来提供标准化测试、保证准确记分和确保向应试者及时返回测试结果的高级方法。
测试是根据测试开发人员的需求和细节进行开发的。典型地,测试开发人员聘请心理测验学家或统计学家和心理学家以确定对特定人群的评估的特定需求。这些专家对于应该如何呈现测试以及对于相关测试的必要内容往往有他们自己独特的想法,所述必要内容包括测试的可视形式以及测试的数据内容。因此,必须自定义特殊的基于计算机的测试来满足客户的需求。
图1示出了现有技术的用于计算机化测试自定义的过程,总体上由参考标记10表示。首先,步骤12,客户详述期望的测试需求和规范。接着,步骤14,计算机化的测试出版者创建允许测试出版者编辑项目、演示页等等以便实现所述需求的工具。然后,步骤16,测试出版者编写项目查看程序,该项目查看程序使测试出版者能预览正在编辑的内容。
然后,步骤18,编写项目演示页程序以便例如向测试驱动程序呈现新的项目。向测试驱动程序呈现新的项目需要修改测试驱动程序的可执行代码。步骤20,必须修改测试驱动程序以便让它知道新的项目并且可能与新的项目演示页程序相通信。然后,步骤22,还必须修改测试软件包。测试软件包,也可以是编译器,其处理测试出版者已经创建的内容并且将结果编写为对应新语法的新目标代码。随后,步骤24,还必须将记分引擎修改成能够对新的项目类型记分。最后,步骤26,必须将结果处理程序修改成能够接受来自新项目的新结果。这个过程需要对现有的软件进行至少七次软件创建或修改。
将美国专利第5,827,070号(Kershaw等人,以下简称′070)和美国专利第5,565,316号(Kershaw等人,以下简称′316)引入于此以供参考。具有相似说明书的′070和′316这两篇专利公开了一种基于计算机的测试系统,其包括测试开发系统和测试传送系统。所述测试开发系统包括:测试文档创建系统,用于规定测试内容;项目准备系统,用于使测试中的每个项目计算机化;测试准备系统,用于准备计算机化的测试;和测试打包系统,用于将所有项目和测试组件组合成计算机化的测试软件包。然后,由测试传送系统将计算机化的测试软件包传送给工作站上的授权应试者。
图2A和2B示出了在′070和′316这两篇专利中公开的测试准备过程。如在32所示,测试开发人员对所述测试进行汇编。如在36所示,优选地,利用测试开发/文档创建(″TD/DC″)系统或等效的测试文档创建系统使项目选择自动化(AIS)。通过利用″TD/DC″,测试开发人员将测试规范输入到″TD/DC″系统中。根据这些规范,″TD/DC″搜索其中央数据库以查找满足该测试规范的项目,例如50道数学题,其中25道是代数题,另外25道是几何题。然后,测试开发人员查阅由″TD/DC″所选择的项目在背景部分中所描述的敏感度和重叠约束条件。如果测试开发人员判定当前的项目选择不满足敏感度或重叠约束条件,则可以指定以来自于数据库的另一个项目替换特定的项目。此外,如在42所示,测试开发人员提供规定测试的方向、消息、计时部分、编号部分等等的测试描述。如果将要运行计算机自适应测试(CAT),则测试开发人员可以运行34上的计算机自适应测试仿真实验,这种仿真实验为专业的测试开发人员所公知。如在50所示,通过利用测试准备工具(TPT)和TOOLBOOK 46,测试准备系统(″TPS″)准备测试级别组件。TOOLBOOK可从Asymetrix公司购买到。测试级别组件包括:脚本66、项目表块集56、一般信息屏幕58、指引屏幕60、消息屏幕62和教程单元64。下面,将详细描述每个测试组件。随着所述组件的准备,TPT将其存储在TPS网络目录52中。然后,将所述组件输入到TPS制作数据库54中。存储在TPS制作数据库54中的组件将在测试打包期间被检索。
引入于此以供参考的美国专利第5,513,994号(Kershaw等人)公开了一种用于对到多个应试者的标准化测试进行管理的集中式管理系统和方法。所述管理系统是在中央管理工作站以及位于测试中心的不同房间内的至少一个测试工作站上实施的。提供实质性管理功能的管理系统软件是从中央管理工作站执行的。管理系统软件是从测试工作站那里执行的,其提供与测试会话(test session)相结合而实现的功能。
然而,基于计算机的测试已经从本地测试中心上所管理的独立发布扩展为经由多个场所的集群服务器管理的广域网发布。因此,采用分布式计算机的测试系统需要可伸缩性来支持连续不断的考试管理以及可能位于多个远程位置上的大量同时的测试应试者。
另外,基于计算机的测试已经从仅仅显示简单的基于文本的内容演变成包含音频和视频内容的流。因此,分布式计算机的测试系统需要充足的系统资源和存储容量以及有效的数据通信管理,以便按一致的方式提供带宽密集型的多媒体内容。
此外,基于计算机的测试模型已经发展到包含自适应模型和仿真试验模型。因此,采用分布式计算机的测试系统必须支持各种复杂的测试模型。
此外,由于测试应试者可能具有变化的工作站容量和网络连通性,因此分布式计算机的测试系统必须在动态的网络环境中为测试应试者提供公平的测试环境。公平的测试环境的创建和维护受到许多因素的影响,这些因素包括:测试应试者工作站和测试发布服务器之间的带宽失配和网络延迟、以及测试发布服务器和测试源服务器之间的带宽失配和网络延迟,测试源服务器、测试发布服务器和测试应试者工作站的可用系统资源,以及测试组件特性(例如,对象是文本、音频还是视频)。因此,在基于计算机的测试期间,除了其它测试环境变量以外,还必须监视应试者进度、应试者表现、网络带宽、网络延迟以及服务器响应,并且必须响应于测试环境中的变化对测试组件进行高速缓存,以确保基于计算机的测试的及时而可相容的传送。换言之,采用分布式计算机的测试系统必须是可调整的,以便在执行相同的基于计算机的测试的同时,对测试应试者工作站上的适当测试环境进行仿真。
发明内容
本发明公开了一种基于计算机的测试系统,其对到大量同时的测试应试者的基于计算机测试的传送进行控制,以及响应于测试环境中的变化调整(adapt)基于计算机的测试的传送。
本发明的一个特征和优点是,向位于多个场所的大量同时存在的测试应试者传送基于计算机的测试。
本发明的另一个特征和优点是,在位于多个场所的同时存在的测试应试者当中安全地管理基于计算机的测试。
本发明的另一个特征和优点是,在利用计算机的测试期间监视应试者进度,以用于确保在测试期间可以及时获得传送给测试应试者的测试组件。
本发明的另一个特征和优点是,在利用计算机的测试期间监视应试者表现,以用于确保在测试期间可以获得适当的传送给测试应试者的测试组件,以便例如支持计算机自适应测试(CAT)。
本发明的另一个特征和优点是,在基于计算机的测试期间监视网络带宽,以用于依照网络带宽对到测试应试者的基于计算机测试的传送进行自适应处理。
本发明的另一个特征和优点是,在基于计算机的测试期间监视网络延迟,以用于依照网络延迟对到测试应试者的基于计算机的测试的传送进行自适应处理。
本发明的另一个特征和优点是,在基于计算机的测试期间监视服务器响应,以用于依照服务器响应对到测试应试者的基于计算机的测试的传送进行自适应处理。
本发明的另一个特征和优点是,使测试应试者能够在已将所有测试组件传送给应试者工作站之前、在应试者的工作站上运行基于计算机的测试。
本发明的另一个特征和优点是,在基于计算机的测试期间网络连通失败时,使测试应试者能够继续进行基于计算机的测试。
本发明的这些及其它特征和优点是基于计算机进行测试的系统和方法中实现的,所述系统和方法包括:测试驱动应用程序,其对从基于计算机的测试到测试应试者的传送进行控制。具体而言,所述系统包括:可高速缓存对象,其包括统称为测试组件的可高速缓存数据对象(测试项目)以及可高速缓存程序和应用程序对象(插件),以便扩展测试驱动应用程序的功能,使测试驱动应用程序能在将基于计算机的测试传送到应试者工作站的期间,响应于测试环境中的变化而对测试组件的高速缓存进行控制。所述系统和方法包括:在基于计算机的测试的传送期间监视应试者进度、应试者表现、网络带宽、网络延迟以及服务器响应,以及调整正在被高速缓存的测试组件的资源或测试组件量以供测试的传送。基于这样的监视,例如如果检测到网络通信失效,则测试应试者能够继续进行基于计算机的测试,同时在后台中重新建立连通性。
因此,在此已经更宽泛地略述了本发明更重要的特征和优选实施例,以便可以更好地理解其下面所述的详细说明,以及便于可以更好地认识到目前对该技术的贡献。当然,还存在将在下文描述的本发明的附加特征,并且这些附加特征将形成所附权利要求的主题。
在这点上讲,在详细解释本发明的优选实施例之前,将要理解的是,本发明在其应用中不限于其对以下说明书中阐述的或附图中示出的结构细节和组件的配置关系。本发明能够是其它实施方式,并且能够以多种方式加以实施和执行。同样,还将要理解的是,这里所采用的措辞和术语都是为进行描述而使用的,且不应该视作为限制。
照此,本技术领域的技术人员将会认识到:可以容易地将本公开内容所基于的构思作为设计其它用于实现本发明几个目的的结构、方法和系统的基础来使用。因此,重要的是:在不脱离本发明的精神和范围的情况下,权利要求书将被视为包括此类等效结构。
此外,上述摘要的目的是使美国专利商标局和一般公众,特别是那些不熟悉专利或法定术语或措辞的本领域的科学家、技术人员和实践者,能够通过粗略的审视来快速地确定本申请的技术公开的特性和本质。本申请的发明是由权利要求书来限定的,因此本摘要既不想限定本申请的发明,也不想以任何方式限制本发明的范围。
本发明的这些目的连同其它目的以及表现出本发明特征的各种新颖性的特征,都是以本公开附带的且形成本公开一部分的权利要求书来详细指出的。为了更好地理解本发明,其操作上的优点和通过其使用所达到的特定目的,应当与附图和说明性主题一起参照本发明在所述附图和主题当中示出了本发明的优选实施例。
附图说明
图1示出了现有技术中的计算机化测试自定义方法的流程图;
图2A和2B示出了现有技术中的测试制作过程的框图;
图3示出了基于计算机的测试系统的示意图;
图4示出了与基于计算机的测试系统一起使用的不同类型插件的框图;
图5示出了包括考试源文件的不同组件;
图6A和6B示出了包括测试定义语言编译器的组件、类和接口的示意图;
图7示出了包括测试驱动程序的组件和测试管理系统的示意图;
图8A和8B示出了包括测试驱动程序的类和接口的示意图;
图9示出了包括结构存储器的接口;
图10A和10B示出了包括结构存储器及相关联操作的类和接口的示意图;
图11示出了考试资源文件的主存储器分支的框图;
图12示出了考试资源文件的考试分支的框图;
图13A和13B示出了考试资源文件表格分支的框图;
图14示出了考试资源文件的项目分支的框图;
图15示出了考试资源文件的类分支的框图;
图16示出了考试资源文件的模板分支的框图;
图17示出了考试资源文件的部分分支的框图;
图18示出了考试资源文件的群组分支的框图;
图19A、19B、19C和19D示出了考试资源文件群组分支的事件子分支的框图;
图20示出了考试资源文件的插件分支的框图;
图21示出了考试资源文件的数据分支的框图;
图22示出了考试资源文件的表格群组分支的框图;
图23示出了考试资源文件的属性分支的框图;
图24示出了考试资源文件的脚本分支的框图;
图25示出了考试资源文件的消息框分支的框图;
图26A、26B、26C和26D示出了考试实例文件的框图;
图27示出了计算机化测试自定义方法的流程图;
图28示出了测试制作和测试传送的方法的流程图;
图29示出了用于验证测试规范和内容的方法的流程图;
图30示出了测试传送方法的流程图;
图31示出了在中断之后重新开始测试的方法的流程图;
图32示出了插件的寿命周期的图形;
图33示出了用于编译插件的过程的流程图;
图34A、34B、34C和34D示出了在基于计算机的测试期间用于将插件传送给应试者的过程的流程图;
图35示出了根据本发明的、基于计算机的测试系统的网络环境的示例的框图;
图36示出了根据本发明的、基于计算机的测试系统的高速缓存结构的框图;
图37A和37B示出了根据本发明的、用于高速缓存测试组件的方法的流程图;和
图38A、38B、38C、38D和38E示出了根据本发明的、用于监视应试者表现、应试者进度、网络延迟、网络带宽和服务器响应的方法的流程图。
具体实施方式
现在,将详细参考本发明的当前优选实施例。这样的实施例是作为本发明的解释说明而提供的,并不意在以此限制本发明。事实上,本领域的普通技术人员将会认识到:当阅读当前说明书和查看当前附图时,可以产生不同的修改和变形。
例如,作为一个实施例的一部分所示出或描述的特征可以用在其它实施例中以得到另一个实施例。另外,确定的特征可以与还未提到的、执行相同或相似功能的类似装置或特征互换。因此,意在使此类修改和变形都包含在本发明的总体范围内。
本发明公开了一种使用测试驱动程序的采用计算机进行测试的系统和方法,即,所述测试驱动程序是例如面向对象的且被设计用于通过利用扩展模块(优选地,通过利用插件)动态地添加功能。优选地,测试驱动程序引用了使用标准接口的组件对象模型服务器,并且例如使用在基于可扩展标记语言(″XML″)格式的名为可扩展考试语言(″XXL″)的自定义测试定义语言中定义的类名(可能是活动文档),来与已有应用程序进行交互,同时提供允许开发新插件的灵活性。这些新的插件可以由客户的需要而自定义,而不必改变核心测试驱动程序。XXL的特定格式和协议同样也在2003年7月10日公开的名为″EXTENSIBLE EXAM LANGUAGE(XXL)PROTOCOL FORCOMPUTER BASED TESTING(用于基于计算机的测试的可扩展考试语言(XXL)协议)″的美国专利公开第20030129573号中描述了,将该篇申请在此引入以供参考。
有利地,插件使测试驱动程序能够支持例如新的项目类型、导航算法、信息显示、记分算法、计时算法、测试单元选择算法、结果持续报告、打印的得分报告和/或舵(helm)类型,而无需改为测试驱动程序可执行的(类型)。插件还允许对测试驱动程序的功能进行扩展,而不需要重新编译或重新链接测试驱动程序,并且也不需要测试出版者学习编程。由于插件是独立于测试驱动程序编写的,因而可以在构造测试驱动程序很久以后再编写插件。客户和软件开发人员能够设计并测试插件且将所述插件发布到每个测试站点。通过使用这种方法,除非对许多考试可能使用的插件作了改变,通常不需要对其它考试进行大规模回归测试。在2003年9月25日提交的名为″METHOD ANDSYSTEM FOR COMPUTER BASED TESTING USING PLUGINS TOEXPAND FUNCTIONALITY OF A TEST DRIVER(使用插件来扩展测试驱动器的功能的采用计算机进行测试的方法和系统)″的美国专利公报第20030182602号中描述了插件的特殊使用,将该篇申请在此引入以供参考。
本发明的测试驱动程序对从基于计算机的测试到测试应试者的传送进行控制,包括在传送测试期间对测试组件的高速缓存进行控制。根据在传送测试期间测试环境的监视,包括监视应试者进度、应试者表现、网络带宽、网络延迟和服务器响应,测试驱动程序调节正在被高速缓存以供传送测试的测试组件源或者测试组件量。基于这样的监视,例如,如果检测到网络通信失效,则测试应试者能够继续进行基于计算机的测试,同时在后台中重新建立连通性。通过使用这种系统,在基于分布式计算机的测试环境中,能够在基于计算机的测试期间建立并保持统一的测试环境。
I.基于计算机的测试传送系统的概况
图3示出了本发明的基于计算机的测试传送系统的软件体系结构的概况,其总体上由参考标记100来表示。测试驱动程序110负责控制基于计算机的测试的所有方面。测试驱动程序110确定安排应试者参加基于计算机的测试,并且确定和创建适当的测试。然后,测试驱动程序110利用诸如计算机监视器之类的显示装置(未示出)向应试者呈现所有测试组件,并使应试者能够通过使用诸如键盘、鼠标等之类的输入装置(未示出)来键入对试题的应答。测试驱动程序110还监视测试的安全性。例如,测试驱动程序110能够阻止对互联网的访问并且能够验证应试者,不过优选地这些功能都是由测试中心管理系统执行的。测试驱动程序110还监视测试的时间,根据相关测试的实耗时间以及测试的特定部分或整个测试剩余的时间向应试者提供相应的警告。一旦测试结束或者在测试正在进行的同时,测试驱动程序110还负责对测试进行记分,以及负责通过使用打印机182进行物理打印输出或者利用应试者考试结果文件180来以文件格式报告测试的结果。正如将在随后更详细描述的那样,如果测试正在进行过程中发生中断,例如因电源故障而发生中断,则测试驱动程序110就重新开始测试,优选地是在测试中断的那一点重新开始测试。最后,如果测试未完成,测试驱动程序110就清除未完成的测试。未完成的测试将具备在应试者目录中的考试实例文件,但并未创建结果文件。即使总体上应试者将不及格也会创建结果文件。传送给应试者的项目数量被记录在结果文件中。测试驱动程序110抽取事件中断的位置并且不可视地传送其余的测试单元。
测试规范是由测试出版者根据客户规范而编写的并且存储在考试源文件130中。考试源文件130包括数据文件132、XXL文件134、多媒体文件136和超文本标记语言(″HTML″)文件138。XXL文件134包括测试规范,其包含客户对测试的要求、一组测试项目或问题、确定测试的实际外观的模板、插件以及实施测试所需的任何附加数据。附加数据也存储在数据文件132中。例如,适合的选择插件可能需要a、b和cθ值。将这些值存储在由统计数据包创建的二进制文件中。
HTML文件130例如包括:任何可视的测试组件,比如测试项目或问题的外观、显示装置上演示页的外观、任何客户所规定的自定义外观和/或得分报告的外观。优选地,HTML文件130还包括脚本,例如VBscript和Jscript或Java脚本。优选地,HTML文件130是使用Microsoft的Frontage 2000来编写的。优选地,还使用Frontage 2000对由测试出版者所选择的分层结构中的源文件进行管理。多媒体文件136例如包括在测试期间所使用的任何图像(例如,.jpg,.gif等等)和/或声音文件(例如,.mp3,.wav,.au等等)。
XXL编译器140利用接口190从考试源文件130中检索出XXL文件134,并且对存储在XXL文件134中的XXL测试内容进行编译。XXL编译器140在考试资源文件120中存储编译后的测试文件。在另一个实施例中,考试源文件130不包含XXL文件134,而是例如仅仅包含多媒体文件。在这个实施例中,XXL编译器140仅仅是测试软件包,其将数据直接写到考试资源文件120中而不进行修改或验证。所述数据出现在考试资源文件120的″数据″分支下面的流中。所述流的名称是由测试编写者指定的。
在优选实施例中,XXL文件134还包括定义插件150的XXL语言,而在这样的情况下,插件150在编译XXL文件134过程中辅助XXL编译器140。优选地,测试驱动程序110例如支持九种不同类型的插件150,例如包括:显示插件152;舵插件154;项目插件156;计时器插件158;选择插件160;导航插件162;记分插件164;结果插件166;和报告插件168。同样也包含在XXL文件134中的插件150是被编译成考试资源文件120的第一XML文件。
插件150允许测试设计者自定义测试驱动程序110的行为,并且分为两种类型,如图4中所示,例如:可视插件和不可视插件。可视插件包括显示插件152、舵插件154和项目插件156,它们使测试驱动程序能控制在显示装置上向应试者可视化地呈现的内容。不可视插件包括计时器插件158、选择插件160、导航插件162、记分插件164、结果插件166和报告插件168,它们使测试驱动程序能控制测试的更多功能性的方面。正如在下面更详细描述的那样,利用插件150来验证存储在考试源文件130中的数据,所述考试源文件在向应试者传送所述测试期间由其中一个插件150所使用。优选地,如下所述,插件150是组件对象模型(″COM″)对象。插件150还可以使用Java实施方案。优选地,插件150是使用Microsoft Visual C++或Visual Basic 6.0或任何能够完全启用COM的语言来编写的。插件150可以是在进程中或进程外的,因此它能够以可执行(″.EXE″)文件的形式存在或以动态链接库(″.DLL″)文件的形式存在。
使用由另一个组件提供的对象的应用程序或组件由客户进行调用。组件是以它们相对于客户的位置为特征的。过程外组件是在其自有进程中运行的.exe文件,且有它自己的执行线程。因此,客户与进程外组件之间的通信称为跨进程或进程外通信。
诸如.dll或.ocx文件之类的进程中组件,按照与客户相同的进程来运行。由于不具有跨越进程边界调度(marshal)的属性和方法调用,因此它提供了访问对象的快速路径。然而,进程中组件必须使用客户的执行线程。
考试资源文件120从XXL编译器140和插件150(如果可用的话)中接收编译后的测试内容,并且以称为POLESS的对象链接和嵌套(″OLE″)结构存储格式来存储编译后的测试内容,这将在下面更详细的描述。可选地可以使用其它存储格式。OLE允许不同的对象将信息写入到相同的文件中,例如在Word文档内嵌套Excel电子表格。OLE支持两种类型的结构:嵌套和链接。在OLE嵌套中,此例的Word文档是容器(container)应用程序,而Excel电子表格是内嵌对象。容器应用程序包含内嵌对象的副本,并且对内嵌对象所作的改变仅仅影响该容器应用程序。在OLE链接中,此例的Word文档是容器应用程序,而Excel电子表格是链接对象。容器应用程序包含指向链接对象的指针,并且任何对链接对象所作的改变都会改变原始的链接对象。同样还更新与该链接对象链接的任何其它应用程序。POLESS支持结构存储,以使得对存储在考试资源文件120中的对象所做的改变中仅有一个是全局有效的。测试驱动程序110包括:充当内嵌对象(优选的是COM对象)的可视插件、显示插件152、舵插件154和项目插件156的活动文档容器应用程序112。
如果任何插件150正在被使用,则XXL编译器140和插件150两者都涉及到将编译后的测试内容存储到考试资源文件120中。正如将在下面更详细描述的那样,考试资源文件120例如包括:分层存储结构。可选地可以使用其它存储结构。XXL编译器140确定编译后的测试内容的特定分段将被存储到哪一个存储位置。然而,如果使用任意插件150对来自于考试源文件130的任何数据部分进行验证,则插件150根据XXL编译器140的方向将该数据直接存储到考试资源文件。XXL编译器利用与图3中的IPlugin接口167共同定位的IPersistResource接口192对到数据考试资源文件120的持续性(persistence)进行控制。XXL编译器140和插件150利用POLESS接口191将数据写入到考试资源文件120中。
图5示出了由XXL编译器140和插件150将其编译成考试资源文件120的考试源文件130的内容。例如,使用Frontage 2000 Web 200来编写测试。考试源文件130包含媒体文件210、可视文件220和逻辑文件230。媒体文件210是用于增强测试的演示的多媒体文件,例如包括XML数据文件212、声音文件214、图像文件216和二进制文件218。XML数据文件212包括来自使用XML的插件150的XXL扩展和XXL测试定义语言。测试规范、演示页、记分及其它信息都是在XML文件中规定的。声音文件214包括在测试期间将要使用的任何声音,比如.mp3文件,.au文件等等。图像文件216包括在测试期间将要使用的任何图像,比如.jpg文件,.gif文件等等。二进制文件218包括插件150所需的任何非XXL格式的数据。可视文件220是HTML文件,其规定了在显示装置上向考试呈现的测试可视演示页,其包括项目文件222、演示页文件224、得分报告文件226和自定义查看文件228。项目文件222包括用于规定试题的可视组件的HTML文件,所述试题例如是词干和错误选择。项目文件222还能够引用外部的展示。展示可以是图表、图形或照片。展示的格式例如包括:.jpg,.png等等。演示页文件224定义在测试期间应试者在特定的瞬间在显示装置上看到什么。得分报告文件226典型地为带有内嵌脚本的HTML文件,所述脚本例如包括应试者人口统计资料、职位信息和应试者表现。所述表现可以包括通过/不及格、在不同内容领域中的成绩等等。自定义查看文件228典型地为带有内嵌脚本的HTML文件,以便例如对其中所包含的标题栏和信息进行版面设计(layout)。逻辑文件230是规定了测试的功能性方面的XML文件,包括测试规范文件232、插件文件234、项目组文件236和模板文件238。测试规范文件232规定了如客户所提供的测试的内容和进度。插件文件234定义了各插件150并且包含实施插件150所需的任何数据。项目组文件236包括项目的属性和数据内容、或在测试期间将呈现给应试者的试题。项目的属性包括:项目的正确答案、给项目设定的权重等等。模板文件238定义了在测试期间与显示屏幕一起使用的可视化的版面设计。
再次参照图3,一旦测试已经开始,测试驱动程序110就利用POLESS接口193访问考试资源文件120以找到实施该测试所需的指令和文件。测试驱动程序110还访问插件150以找到在项目的领域、导航算法、信息显示、记分算法、计时算法、测试单元选择算法、结果持续报告、打印的得分报告和/或舵类型等方面扩展测试驱动程序110的功能性的附加数据。测试驱动程序110利用不同的COM接口169来与插件150进行通信。COM接口促进了OLE链接。正如先前指出的那样,测试驱动程序110是活动文档容器应用程序,而插件150是内嵌对象。COM接口充当容器应用程序和对象之间的通信路径。
例如,在基于计算机的测试传送系统100中使用十个COM接口。IPlugin接口167,它也是COM接口,其被所有插件150支持。因此,COM接口169包括IPlugin接口。所述IPlugin接口包含所有插件150所需的诸如装载与卸载之类的普通操作。除全局IPlugin接口外,每个插件150例如还使用第二个单独的COM接口169来与测试驱动程序110相通信。还可以使用IPlugin接口的可选结构。表1示出了每个插件150和与该特定插件150一起使用的COM接口169之间的关系。
表1:各插件的COM接口。
  插件   COM接口   说明
  所有插件150   IPlugin   在测试驱动程序和与普通操作(例如,装载与卸载)相关的所有插件之间传递数据。
  显示屏152   IDisplay   在测试驱动程序与处理标题栏、显示屏、非回答项目及概要的可视插件之间传递数据
  舵154   IHelm   在测试驱动程序和显示导航控件或查阅的可视插件之间传递数据。与导航插件相通信,以执行实际的导航。还充当到测试驱动程序的用户接口连接。
  项目156   IItem   在测试驱动程序和管理测试项目或仿真的可视插件之间传递数据。
  计时器158   IUnitTimer   在测试驱动程序和用于执行跨考试部分的计时的不可视插件之间传递数据。
  选择160   ISelection   在测试驱动程序和用于选择供传送给应试者的表格、部分、群组或项目的不可视插件之间传递数据。
  导航160   INavigate   在测试驱动程序和用于控制部分导航和定义规则的不可视插件之间传递数据,所述规则贯穿所述测试。
  记分164   IScore   在测试驱动程序和用于控制所传送的测试单元的记分的不可视插件之间传递数据。
  结果166   IResults   在测试驱动程序和控制例如将应试者结果写入到应试者考试结果文件180的不可视插件之间传递数据。
  报告168   IReport   在测试驱动程序和不可视插件之间传递数据,所述不可视插件控制得分报告及其它资料的打印(例如,所打印的参考资料)并将考试须知投寄到打印机182。
如果测试例如由于电源故障而已被中断,则使用考试实例文件170来重新开始测试。在传送测试期间,考试实例文件170从测试驱动程序110和插件150中接收考试状态信息,其中插件150与所有正在运行的用于传送测试的对象的状态有关。考试状态信息包括:在中断之前在显示装置上传送的演示页、应试者已经在该演示页中输入的响应,等等。当重新开始测试时,考试实例文件170将状态信息装载回到测试驱动程序110和插件150,从而使测试能返回到测试已经被中断的点的操作。优选地,将所有对象的运行状态都保存到考试实例文件170中,而不是仅仅保存其中一些对象的运行状态。将仅仅其中一些对象的状态保存到考试实例文件170会导致如下的潜在问题,即:在测试中断之后仅仅一部分测试信息得以恢复。考试实例文件170还可以存储与测试有关的附加信息,例如包括:所使用的计时方法和考试单元上的剩余时间、当前的传送单元、应试者得分,等等。测试驱动程序110和插件150利用POLESS接口195来与考试实例文件170相通信。测试驱动程序110利用IPersistInstance接口196来控制测试驱动程序110和插件150之间的通信,所述接口是与图3中的COM接口169搭配使用的。
几种管理环境执行基于计算机的测试传送系统100的管理功能,例如:测试中心管理者(″TCM″)桥(Test Center Mangaer Bridge)172;教育测试服务(″ETS″)桥(Educational Testing Service Bridge)174;和统一管理系统(″UAS″)(Unified Administration System)174。管理功能例如包括:登记应试者、开始测试、终止测试、暂停测试、恢复测试和传输结果。
优选地,存在两种运行测试驱动程序110的方式。第一种是通过一系列命令行选项,而第二种是利用描述职位信息的COM接口。命令行选项在标准的ETS环境和TCM环境中存在向后兼容性。表2示出了测试驱动程序110支持的一列命令行选项。举例来说,有四种通过COM接口来运行测试的程序,例如:1)LaunchTest.exe(测试制作和客户查阅);2)UAS;3)UTD2ETS.dll(与ETS管理环境一起使用的内部兼容性模块);和4)UTD2TCM(用于测试中心管理者环境)。可选地,还可以使用其它数量的环境和/或程序。
表2:测试驱动程序所支持的命令行选项。
  分支符号   选项   用途
  /?/help   n/a   显示对话框中的命令行分支符号。
  /UnregServer   n/a   不注册测试驱动程序核心COM服务器。
  /RegServer   n/a   注册测试驱动程序核心COM服务器。
  /T   表格名称   在考试中运行的表格或表格组的名称。
  /F   资源文件   要使用的考试资源文件。
  /S   n/a   抑制任何打印。
  /W   n/a   按close-of-day模式运行。
  /TI   n/a   给信息设置跟踪级别。(非常大的实例文件)。
  /TW   n/a   给发出警告设置跟踪级别。(大实例文件)。
  /TE   n/a   给错误设置跟踪级别。(平均尺寸的实例文件)。
  /K   资源目录、SKSID、应试者定向器   用于指向目录。分隔三个选项中每一个的空间
所述管理环境使用几个接口来与测试驱动程序110相通信。IAppointment接口176是UAS 174的一部分,并且使测试驱动程序110能访问进行测试的应试者的应试者信息,比如人口统计资料。应试者信息包含在测试驱动程序所创建的应试者考试结果文件180中。ILaunch2接口177作为UAS 174的主要控制接口并且允许UAS 174控制测试中心当中的诸如测试驱动程序110、屏幕分辩率变化、无效应试者的调节、应试者登记等等之类的不同组件,所述测试中心是应试者进行测试的实际场所。ITransfer接口199将应试者考试结果文件180及其它文件传送回UAS 174。IPrint接口198将与任何报告相关的信息发送到打印机182。
在名为的″METHOD AND SYSTEM FOR COMPUTER BASEDTESTING USING PLUGINS TO EXPAND FUNCTIONALITY OF ATEST DRIVER(利用插件来扩展测试驱动器的功能的基于计算机的测试方法和系统)″美国专利公开第20030182602号中更详细地描述了测试驱动程序,将该篇申请在此引入以供参考。
II.XXL编译器接口和类
图6A和6B示出了XXL编译器140的主要视图。XXL编译器140包括下列类,例如:cCompile 2000;cData 2004;cArea 2006;cTemplate2008;cCategory 2010;cItem 2012;cPresentation 2014;cGroup 2016;cSection 2018;cForm 2020;cFromGroup 2022;cExam 2024;cMsgBox2026;cChecksum 2028;cEvent 2030;cResult 2032;cReport 2034;cPlugin2036;和cXXL 2038。
到XXL编译器140的主接口是ICompile接口2002。ICompile接口2002是通过类cCompile2000实现的。将考试源文件130编译成考试资源文件120的全部控制和启动都是借助于这个单一的公共接口发生的。XXL测试定义语言的核心、非插件相关元素,如同存储在XXL文件134中的那样,是通过XXL编译器140中的类来编译的。例如,cSection类2018编译部分元素,而cGroup类2016编译群组元素。
ICompile接口2002支持下列操作,例如:createResource();addSource();addData();closeResource();about();linkResource();openResource()和getCryptoObject()。CreateResource()创建资源文件,例如诸如考试资源文件120之类的基于XXL的资源文件。AddSource()将XXL文件编译成资源文件。AddData()将文件直接地添加到资源文件的数据分支中。CloseResource()关闭资源文件。LinkResource()链接资源文件中的资源,并且在源文件的全部编译都结束之后被执行。GetCryptoObject()返回包含POLESS的当前加密设置的ICrypto对象,如下所述。
XXL编译器1040的类,例如,cForm 2020和cItem 2012,对单独的XXL核心语言元素进行处理。所有这些类都将特定的XXL源元素编译成考试资源文件120。所有这些类语言元素同样也都是在后期的引用时所使用的符号。因此,所述类全部都导出自cSymbol类2040。cSymbol类2040使XXL编译器140的类能驻存于符号表中。
例如,XXL元素插件150按如下形式出现在XXL文件134中:
3<plugin name=″helmNextPrevious″progid=″UTDP.cNextPrevious″/>
这个XXL调用引发要创建的cPlugin类2036的实例、编译所述源、以及将编译后的结果写入到考试资源文件120。同样也将插件150的名称和ID添加到符号表以供后期引用。
XXL编译器140还包含下列令牌类,例如:cToken 2042;cTokenCreatorNoRef 2044;cTokenCreator 2046;ctokenCreatorRef 2048;cTokenCreatorBase 2050;和cTokenFactory 2054。这些令牌类包含于令牌的标识符中。使令牌转变成标识符之后的符号。符号是从cSymbol导出的任何类,例如,cTemplate、cSection等等。
XXL编译器140还包含下列符号表类,例如:cPluginSymbolTable2058;cTemplateSymbolTable 2060;cSymbolTable 2062;cFFGSymbolTable 2064;cSGPSymbolTable 2066;和cSymbolTableBase2068。这些类都是符号表的变形。对应于符号的不同组存在不同的符号表。一组符号定义了符号的名称空间。公用的符号表功能都位于基本符号表类和模板当中。
为插件150指定的所有内容和规范都出现在XXL中的数据元素当中。例如,以下是XXL中的项目定义:
4<item name=″wantABreakl″skipAllowed=″false″><data><multiChoice correctAnswer=″A″maxResponses=″1″minResponses=″1″autoPrompt=″false″URI=″itembank/info_item.htm#wantABreak″/>-;</data></item>
项目元素是由cItem类2012对象来处理的。XXL定义中的数据元素是由cData类2004对象处理的。项目插件156将从cData类2004对象(在这个示例中,是multiChoice元素)中接收源以进行编译。
cWrapXML类2052——XML DOM节点的wrapper类——支持错误处理。cCustomAttributes类2056编译自定义属性XXL元素。cWrapPropertySet类2070是POLESS属性存储器的wrapper类。
III.测试驱动程序接口和类
A.接口
图7示出了测试驱动程序110、UAS 174和用于传送测试的接口,所述接口是由UAS 174和测试驱动程序110所使用的且位于该测试驱动程序110与UAS 174之间。UAS 174定义了ILaunch2接口177,所述接口是UAS 174启动测试事件用的。ILaunch2接口177是ILaunch接口178的扩展,在本发明的其它实施例中,所述ILaunch接口178同样也是UAS 174启动测试事件用的。UAS 174还定义并实现了附加接口,例如:IAppointment接口176;IPrint接口198和ITransfer接口199。IAppointment接口176将测试应试者信息和职位细节从UAS 174传送到测试驱动程序110,正如连接IAppointment接口176和测试驱动程序110的虚线箭头所示出的那样。IPrint接口198允许UAS 174根据报告(例如,得分报告)向打印机198发送打印请求。ITransfer接口199允许UAS 174请求将信息从应试者考试结果文件180传送回到UAS 174。
测试驱动程序110定义了不同的接口以使测试驱动程序110能与基于计算机的测试传送系统100的不同部分进行通信。测试驱动程序110例如包括十个COM接口169,以便与插件150进行通信和传送数据。(参见上面的表1)在图7中,COM接口169是按如下表示的,例如:IDisplay接口169a;IHelm接口169b;IItem接口169c;IUnitTimer接口169d;ISelection接口169e;INavigate接口169f;IScore接口169g;IResults接口169h;IReport接口169i;和IPlugin接口169j。
测试驱动程序110和插件150例如利用三个IPersistResource接口192来与考试资源文件120进行通信和传送数据,这三个IPersistResource接口是:IPersistResourceStream接口192a;IPersistResourceSet接口192b;和IPersistResourceStore接口192。IPersistResource接口192在编译考试源文件130期间是由插件150所用的,而在传送测试期间是由测试驱动程序110和插件150两者所用的。在编译考试源文件130期间,XXL编译器140指引插件150考试资源文件120的存储位置,用以存储插件150已经验证过的任何信息。接着,插件150能够在传送测试期间从考试资源文件150中检索出存储的信息。可选地,也可以使用其它数量的接口和不同的功能组合。
例如,从插件150或通常从XXL编译器140中将信息作为数据流、作为数据集或存储结构保存到例如考试资源文件120,这取决于执行三个IPersistResource接口192中的哪一个,以将信息从插件150保存到考试资源文件120。IPersistResourceStream接口192a例如将信息保存为数据流或其它数据存储格式。数据流仅仅是存为线性序列的字节流。IPersistResourceSet接口192b例如将信息保存为数据集。数据集最好是名称-数值属性对。例如,项目的特定属性的名称是错误选择,而数值是那个项目所需的错误选择的数目。IPersistResourceSet接口192使名称-数值属性对能被一起保存在考试资源文件120中。IPersistResourceStore接口192c例如按带有存储区的目录格式来保存信息。目录格式使其它数据流能被保存在存储区内,使其它属性集能被存储在存储区内,使子存储器能在存储区下面被保存。
同样,IPersistInstance接口196例如包括三个不同的接口,例如:IPersistInstanceStream接口196a;IPersistInstanceSet接口196b和IPersistInstanceStore接口196c。将考试状态信息例如作为数据流、作为数据集、或作为存储元素保存到考试实例文件170,取决于执行三个IPersistResource接口192中的哪一个。
其中两个接口IContainerNotify接口200和IContainerNotifyHelm接口206充当从插件150到测试驱动程序110的返回调用接口。IContainerNotify接口200允许可视插件通知测试驱动程序110,例如该插件被显示并且准备好与应试者交互。IContainerNotifyHelm接口206使舵插件154能在从应试者那里接收到输入之后请求来自于测试驱动程序110的导航,以便移动到测试的另一部分。IMore接口202用于传达应试者是否已经看到了演示页中的全部内容。例如,当内容超出视窗宽度时,出现″more(更多)″按钮,而不是″next(下一个)″按钮。当应试者翻到底部时,″more(更多)″按钮消失而用″next(下一个)″按钮取而代之。集合接口204是测试驱动程序110保持任何群组实体用的,所述编组实体例如是测试的类别和部分。
其余的接口例如是:Microsoft所定义的活动文档接口,用于实现测试驱动程序110和可视插件、显示插件152、舵插件154以及项目插件156的OLE链接功能。IOleInPlaceFrame接口210控制容器的顶层图文框窗口,其包含允许容器将其菜单组插入到复合菜单中,将复合菜单安装到适当的窗框中,以及从复合菜单中删除容器的菜单元素。IOleInPlaceFrame接口210设置并显示与末尾放置(end-place)的对象有关的状态文本。IOleInPlaceFrame接口210还启用或禁用无模式图文框(frame modeless)对话框,以及对为容器的图文框设计的加速击键进行转化(translate)。IOleInPlaceUI窗口式接口211是通过容器应用程序实现的,并且被对象应用程序用来处理文档或图文框窗口上的边框空间。所述容器提供了RECT结构,其中对象能够安插工具栏及其它类似的控件,判断工具是否能被实际地安装在对象的窗框周围,为边框分配空间,以及建立对象与每个图文框和文档窗口之间的通信通道。IAdviseSync接口212使容器及其它对象能接收感兴趣对象中存在的数据变化、视图变化和复合文件变化的通知。例如,容器应用程序需要这样的通知以保留它们所链接和内嵌的对象的高速缓存的最新演示页。
对IAdviseSync接口212方法的调用是同步的,以便于发送该调用然后执行下一条指令而无需等待该调用返回。IOleWindow接口213提供了这样的方法,所述方法使应用程序能获得到参予现场(in-place)活动的不同窗口的句柄,并且还允许其输入和退出上下文相关的帮助模式。IOleInPlaceSite接口214管理容器与对象现场客户站点之间的交互。客户站点是内嵌对象的显示站点,并且它提供了关于该对象的位置和概念上的信息。IOleClientSite接口215是主要装置,其中内嵌对象利用所述主要装置来获得关于其显示站点的位置和区域、其名字、其用户接口及由其容器提供的其它资源的信息。测试驱动程序110调用IOleClientSite接口215来从容器请求服务。容器必须为它包含的每个复合文档提供IOleClientSite接口215的一个实例。IOleDocumentSite接口216使已作为文档对象实现的文档能绕过现场活动对象的正常活动序列并且直接命令其客户站点激活它作为文档对象。具有这个能力的客户站点被称作″文档站点″。
B.核心类
图8A和8B示出了测试驱动程序110的主类以及测试驱动程序110与插件150之间的接口。还示出了接口到UAS 174的类。如前所述,ITransfer接口199、IPrint接口198、ILaunch2接口177和IAppointment接口176表示从测试驱动程序110到UAS 174的连接。图8中描绘出的其中一些线是实线,而另一些是虚线。例如,IcResults接口240与cEvent类252之间的实线表示继承。例如,IExam接口222与IPlugin接口169j之间的虚线表示实例化。
继承或广义化涉及了示出一个或多个超类中定义的子类共用结构或行为的各类之间的广义化关系。广义化关系是带有指向超类的箭头的实线。实例化或相关性表示两个类之间的关系或类与接口之间的关系,以便示出客户类根据供应商类/接口来提供确定的服务。该箭头指向供应商类/接口。从供应商类到客户类的一些服务例如包括:客户类访问在供应商类/接口中定义的(常量或变量)数值;行类(line class)的方法调用供应商类/接口的方法;以及客户类的方法具有签名,其中所述签名的返回类或自变量是供应商类/接口的实例。对于实例化,如果关系表示可容度的话,则在图8中示出了关系的基数。基数规定了一个类中的多少个实例可能与另一个类的单个实例相关联。基数示出了关系以表明在类的一个实例与另一个类的实例之间所允许的链接数量。
测试驱动程序110还具有几个接口和实现的类。测试驱动程序110接口例如包括:IExam接口222;IMsgBox接口224;ICategory接口232;IForm接口238;IcResults接口240;IcReport接口242;IScript接口246;ISection接口250;IPresentation接口248;和/或Icltem接口256。实现主接口的类例如包括:cScreenMinimum类226;cFormGroup类228;cPlugin类230;cArea类234;cTemplate类236;cActivePlugin类250;和cEvent类252。以″Ic″起始的接口具有已经对应于插件150而存在的名称,例如项目插件156实现IItem接口169c。然而,IcItem接口256是通过测试驱动程序110类cItem(未示出)实现的接口。当然,取决于必要的功能,可以使用许多接口。
核心类cExam(未示出)实现了ILaunch2接口177,以便UAS 174能够控制测试驱动程序110。实现IAppointment接口176的职位对象是提供给测试驱动程序110的主对象UAS 174。借助于IPlugin接口169j,插件150可以获得职位对象。此外,所有插件150也都利用IPlugin接口169来获取(IExam)。
cExam类利用cFormGroup类228和IForm接口238来选择并传送表格。所述表格利用IcResults接口240来传送结果,利用IcReport接口242来传送报告,并且利用ISection接口250来传送测试过程中包含的部分。测试传送链中的类最好是从cEvent类252导出的。
cResults类(未示出)传送实现IResult接口169i的结果插件166。cReport类(未示出)传送实现IReport接口169h的报告插件168。cSection、cGroup和cForm类(未示出)使用几个不可视插件150来控制测试的传送。这些插件150是:计时器插件158,其实现IUnitTimer接口169d;选择插件160,其实现ISelection接口169e;记分插件164,其实现IScore接口169g;和导航插件162,其实现INavigate接口169f。cPresentation类(未示出)向其模板提供数据以供显示演示页。创建三个可视插件150并通过cTemplate类236和子对象cArea类234来控制它们。项目插件156具有cItem类(未示出)中的扩展类,所述扩展类将项目插件156打包并且提供所有项目插件156实现的普通扩展服务。测试驱动程序110中的cItem类是包装(wrapper)类。cItem类提供两个基本服务,例如:普通项目功能以及作为打包功能的对项目插件156的访问。项目普通功能例如包括:具有项目名称,具有项目标题,判断是否对项目进行记分,判断项目是否已经呈现给应试者,等等。这些服务对于所有项目而言都是普通的,并且是由测试驱动程序110来提供的。项目插件156执行项目的实际记分,这对于每个项目类型而言都是唯一的。项目插件156呈现项目内容,并且允许应试者与该项目进行交互。这些服务对于每个项目类型而言都是唯一的。
除先前所述的接口外,测试驱动程序110实现IRegistry接口220,该接口允许VB代码访问Windows注册表。测试驱动程序110还实现ILegacyItem接口258和ILegacyScore接口260,它们是由测试驱动程序110所定义并且由确定的项目插件156和记分插件164所实现。ILegacyItem接口258和ILegacyScore接口260允许存在于先前的测试驱动程序中的旧项目类型,以便像先前的测试驱动程序一样报告结果。对于一些测试,测试驱动程序110必须报告旧项目类型的结果,这具有非常特殊的报告结果的方式。ILegacyItem接口258和ILegacyScore接口260允许表示旧项目类型的新项目插件156将传统格式的信息报告给尝试模拟先前测试驱动程序的结果插件166。
测试驱动程序110类和接口的完整说明包含在附录A中。
IV.POLESS
所有永久性存储器、考试资源文件120和考试实例文件170,最好使用POLESS。POLESS允许将数据作为外部文件从永久性存储器嵌套、链接或引用到测试驱动程序110和活动文档容器应用程序112(图3)。POLESS支持带有节点或分支级的添加、替换和删除的分层树形结构。POLESS还支持节点级上的任意数据加密。所采用的加密类型取决于永久性存储器中信息的目标。例如,对于将要路由到测试中心的数据、将要路由到管理数据中心的数据、和将要路由以供客户使用(例如,客户查阅)的数据可以可选地使用不同的加密密钥。优选地,使用Microsoft Crypto-API来执行对永久性存储器中的数据的加密。最后,POLESS还支持节点级上的任意压缩,最好是使用Lempal-Zev压缩。
POLESS是OLE结构存储器复合文档实现的扩展。复合文档是包含诸如文本、图形、电子表格、声音和视频剪辑之类的数据结构组合的单一文档。所述文档可以通过某些种类的指针嵌套额外的数据类型或引用外部文件。对于结构存储器而言有几点好处。结构存储器通过将单个文件作为通称存储元素的对象和流的结构化集合来提供文件和数据持续性。另一个好处是增量访问。如果测试驱动程序110或插件150需要访问复合文件内的对象,则只需装载和保存那个特定的对象,而非整个文件。另外,结构存储器支持事务处理。测试驱动程序110或插件150能够在事务处理模式下读或写复合文件,在所述模式下所产生的变化能够随后被提交或还原。
A.POLESS组件
图9示出了支持POLESS的主要组件以及连接所述组件的接口。POLESS 300可以是考试资源文件120或者考试实例文件170。POLESS300使用PKware库组件330来进行存储器压缩和解压缩。POLESS 300使用Crypto API组件332(Microsoft应用程序)来进行存储器加密和解密。Crypto API组件332依靠所提供的密码服务(″CSP″)来执行实际的加密算法。通过这些组件所陈列的标准(API)接口,而使访问这些组件的服务变得简便。
OLE2SS组件310包含所有组成结构存储器的接口定义。这些接口可以通过任何结构化的存储器实现方案加以实现,比如复合文档实现方案OLE2 320和POLESS 300。所述接口例如包括:IStream接口340;ISequentialStream接口342;IStorage接口344;和IRootstorage接口346。POLESS 300另外还实现IStreamVB接口348和IStorageVB接口350。
IStreamVB接口348支持几个函数,例如:ReadVB();WriteVB();Clear();Reset();get_sName();get_oStream();和CopyTo();ReadVB()将规定数量的字节读取到数据数组中。WriteVB()将字节数据写入到流中。Clear()清除所有数据的流。Reset()将位置设置到流的起始处。get_sName()是返回流名称的只读函数。get_oStream()是返回IStream接口348的只读函数。CopyTo()将源流拷贝到目标流。
IStorageVB接口350支持几个函数,例如:Clear();CommitVB();RevertVB();sElementName();bStorage();oElement();CreateStream();OpenStream();CreateStorage();OpenStorage();get_sName();get_oStorage();get_nCount();GetCompression();GetEncryption();GetCRC();CreateStreamLinked();CreatePropertyStg();OpenPropertyStg();SetClass();RegisterAlias();Destroy();和get_ElementType()。Clear()清除所有元素的存储器。CommitVB()令事务处理模式的变化反映在双亲中。RevertVB()放弃从上一次提交起所作的改变。sElementName()返回元素的名称。如果元素为子存储器则bStorage()返回“真”。oElement()为元素返回IStreamVB接口348或IStorage接口VB 350。CreateStream()创建并打开流,并且返回IStreamVB接口348。
OpenStream()打开流并且返回IStreamVB接口348。CreateStorage()创建并打开嵌套存储器并且返回IStreamVB接口348。openStorage()打开现有的存储器并且返回IStreamVB接口348。get_sName()是返回存储器名称的只读函数。get_oStorage()是返回IStorage接口350的只读函数。get_nCount()是返回元素的计数值的只读函数。GetCompression()返回文件压缩的状态。GetEncryption()返回文件加密的状态。GetCRC()返回文件CRC校验的状态。CreateStreamLinked()创建并打开所链接的流,并且返回IStreamVB接口348。CreatePropertyStg()创建并打开属性存储器并且返回IPropertyStorageVB接口414。OpenPropertyStg()打开属性存储器并且返回IPropertyStorageVB接口414。SetClass()为存储器设置CLSID。RegisterAlias()注册可插协议(pluggable protocol)。Destroy()销毁指定的元素。get_ElementType()是返回元素类型的只读函数。
B.POLESS类
图10A和10B示出了POLESS 300的主要类、用于实现所述类的接口、以及流424和存储器426的创建流程。cFileRoot类400是所实例化的第一对象并且用于创建新的POLESS文件或打开现有的POLESS文件。返回cStorageRoot类406,其为cStorage类410的轻微过载(slightly overloaded)的版本。自cStorageRoot类406创建或打开cStream类408和cStorage类410,通过这样任何流或存储器及它们的子存储器能够分别被创建或打开。例如,cStorage类410创建cPropertyStorage类412,其为属性设置创建存储器。所述类实现了执行操作和/或定义属性的接口,所述属性进一步定义了类的函数或属性。POLESS 300类和接口的完整说明包含在附录B中。
1)cFileRoot类
cFileRoot类400是根POLESS类并且控制所有POLESS文件的创建和打开。通常,首先在可以创建任何其它POLESS对象之前将cFileRoot类400实例化,不过其它序列也是可能的。cFileRoot类400实现了与图10中的cFileRoot类400共同配置的IFileRoot接口401。IFileRoot接口401用于每次打开一个文件并且直到所有其它存储器对象426、流对象424以及属性存储器接口都被释放并且准备关闭所述文件时才被释放。cFileRoot类400和IRoot接口支持下列操作,例如:StorageFileCreate();StorageFileOpen();CryptoGet();bStorageFile();StorageAmalgamatedGet();DeltaFileCreate();DeltaFileApply();GetObjectFromPath();CreateStreamFromBSTR();MemoryStreamFromStream();GetPicture();和SavePicture()。
StorageFileCreate()创建新的存储文件,将根存储器返回到接口,通过在根存储器中的流当中存储这个类的类ID(″CLSID″),从而将新的结构化的存储器文件标记为POLESS文件。StorageFileOpen()打开现有的存储文件并且返回根存储器接口。CryptoGet()获取默认配置的crypto类并且应该在存储文件的打开或创建时被设置和使用。如果所提供的文件是OLLE结构化的存储器文件而非POLESS存储器文件,则bStorageFile()返回“真”。StorageAmalgamatedGet()获取空的小cStorageAmalgamated类404。DeltaFileCreate()通过比较原始的POLESS文件和更新后的POLESS文件来创建POLESS差异文件。DeltaFileApply()应用POLESSdelta文件并将原始的POLESS文件应用于该delta文件以创建更新后的POLESS文件。GetObjectFromPath()使用名字来检索由路径所命名的对象并且返回指向所检索出的对象的指针。CreateStreamFromFile()创建结构化的存储器流并且用文件内容填充它。CreateStreamFromBSTR()创建结构存储器流并且用指定的串填充它。MemoryStreamFromStream()用于将流拷贝到新创建的存储器流对象中。GetPicture()从流对象424加载图片。SavePicture()将该图片保存到流426中。
2)cCrypto类
cCrypto类402控制POLESS 300的加密/解密配置。cCrypto类402具有下列属性,例如:sProviderName;eProviderType;sContainerName;和sPassword。sProviderName表示用于执行加密/解密服务的CSP 334的名称。eProviderType是CSP 334的类型。加密字段是大容量的并且逐渐增长。存在许多不同的标准数据格式和协议。这些通常都被编组成组或家族,它们中的每一个都具有其自己的数据格式集和处理方式。即使两个家族使用相同的算法,例如RC2分组密码,它们也往往会使用不同的填充方案、不同的密钥链路和不同的默认模式。设计CryptoAPI以使得CSP供应商类型表示特定的家族。sContainerName是密钥名称并且必须由cCrypto类402来提供。sPassword是公钥/私钥对上的任意密码并且只能由操作员键入。为了查阅磁盘以及它们的资源文件可以使用密码。
cCrypto类402实现了ICrypto接口401并且它们支持下列属性和方法,例如:ProviderName(提供商名称);Password(密码);FileType(文件类型);Algorithm(算法);EnumProviders();和EnumAlgorithms()。Get ProviderName()返回Crypto供应商的名称。Put_ProviderName()设置Crypto供应商的名称。Get_Password()和Put Password()都仅仅是为发起者资源文件而使用的。Get_FileType()获取文件类型,而put_FileType()设置文件类型。Get_Algorithm()获取加密算法,而Put_Algorithm()设置加密算法。EnumProviders()返回所安装的供应商列表的枚举器。EnumAlgorithms()为当前的供应商枚举一组算法。
3)cStorageAmalgamated类
cStorageAmalgamated类404是IStorage接口344的实现方案。cStorageAmalgamated类404保持对IStorage对象的有序集合的引用。当流被打开时,cStorageAmagalmated类404搜索存储器对象集合以便查找具有被请求流的第一存储器对象并且返回该流。cStorageAmalgamated类404处理复合存储器分辨率并且向cStorage类410委派所有其它工作。cStorageAmalgamated类404例如是只读的。cStorageAmalgamated类404将不允许创建流或存储器,而是主要上用于读取考试资源文件120。cStorageAmalgamated类404实现了IStorageAmalgamated接口405。cStorageAmalgamated类404和IStorageAmalgamated接口405支持下列操作,例如:StorageAdd();ClearStorage();OpenStorageAmalgamated();和OpenPropertyStgAmalgamated()。StorageAdd()将新的存储器添加到存储器集合中。ClearStorage()从集合中清除所有存储器对象。OpenStorageAmalgamated()以合并的方式打开当前合并的存储器的子存储器。OpenPropertyStgAmalgamated()以合并的方式打开当前合并的存储器的属性存储器。在名为″EXTENSIBLE EXAM LANGUAGE(XXL)PROTOCOL FOR COMPUTER BASED TESTING(基于计算机的测试的可扩展考试语言(XXL)协议)″的美国专利公开第20030129573号中更详细地描述了合并,将该篇申请在此引入以供参考。
4)cStorageRoot类
cStorageRoot类406是IStorage接口344和IRootstorage接口346的POLESS实现方案。cStorageRoot类406处理POLESS指定的任何存储器对象426,然后向cStorage类410委派工作。IRootstorage接口346支持SwitchToFile()操作,所述操作将与存储器对象相关联的当前文件拷贝到新文件,然后为存储器对象和任何未提交的变化使用所述新文件。cStorageRoot类406还实现了IPersistFile接口418,所述接口提供了允许从磁盘文件加载对象或将对象保存到磁盘文件的方法,而非从存储器对象或流。因为各个应用程序打开文件所需的信息差异很大,所以对象上的IPersistFile::Load的实现方案最好是还打开其磁盘文件。IPersistFile接口418从IPersist继承其定义,以便所有实现方案都必须还包括IPersist接口418的GetClassID()方法。
5)cStream类
cStream类408是IStream接口340的POLESS实现方案。cStream类408处理POLESS指定的任何存储器对象426,然后向复合文档实现方案OLE2 320委派工作。指定的工作包括流对象424的压缩/解压缩和加密/解密。
IStream接口340支持下列操作,例如:Seek();SetSize();CopyTo();Commit();Revert();LockRegion();UnlockRegion();Stat();和Clone()。Seek()改变指向新位置的查找指针,所述新位置是指相对于流对象424的起始、流对象424的末尾或当前的查找指针的位置。。SetSize()改变流对象424的大小。CopyTo()将规定数量的字节从流对象424中的当前查找指针拷贝到另一个流对象424中的当前查找指针。Commit()确保对事务处理模式下打开的流对象424所作出的任何变化都反映在双亲存储器对象中。Revert()自对Istream::Commit的最后一次调用起,丢弃已对事务处理流作出的所有变化。LockRegion()限制对流对象424中的特定字节范围的访问。是否支持这个功能是可选的,因为一些文件系统不提供这一操作。UnlockRegion()删除对先前以IStream::LockRegion限制字节范围方面的访问限制。Stat()检索流对象424的STATSTG结构。Clone()创建引用了与原始流相同字节的新的流对象,但是提供指向那些字节的独立查找指针。
IStreamVB接口348是IStream接口340的自动友好版本。IStreamVB接口348支持下列操作,例如:Read();Write();Clear();Reset();get_sName();get_oStream;和CopyTo()。Read()从流对象424中读取数据。Write()将包括整个数组在内的数据写入到流对象424。Clear()清除所有数据的流对象424。Reset()将流对象424中的位置重置到流对象424的起始处。Get_sName()返回流的名称。GetoStream()返回IDispatch接口。CopyTo()将源流的内容拷贝到目标流。
6)cStorage类
cStorage类410是IStorage接口344和IcStorage接口411的POLESS实现方案。cStorage类410处理POLESS指定的任何存储器对象426,然后向复合文档实现方案OLE2320委派工作。
IStorage接口344支持下列操作,例如:CreateStream();OpenStream();CreateStorage();OpenStorage();CopyTo();MoveElementTo();Commit();Revert();EnumElements();DestroyElement();RenameElement();SetElementTimes();SetClass();SetStateBits();和Stat()。CreateStream()以存储器对象中所含的规定名称来创建并打开流对象424。OpenStream()使用规定的访问许可来打开存储器对象内现有的流对象424。CreateStorage()创建并打开存储器对象内的新的流对象424。OpenStorage()根据规定的访问方式,以规定名称来打开现有的存储器对象426。CopyTo()将打开的存储器对象426的整个内容拷贝到另一个存储器对象中。目标存储器对象的布局可以不同于源存储器对象的布局。MoveElementTo()将子存储器或流对象424从一个存储器对象426拷贝或移动到另一个存储器对象。
Commit()将事务处理存储器对象426的变化反映到双亲级。Revert()自最后一次Istorage::Commit操作起,丢弃已对存储器对象426作出的所有变化。EnumElements()返回能用来枚举存储器对象426的枚举器对象以及包含在存储器对象内的流对象424。DestroyElement()从存储器对象中删除规定的存储器对象426或流对象424。RenameElement()重命名存储器对象中规定的存储器对象426或流对象424。如果为下层文件系统所支持,则SetElementTimes()设置所标明的存储元素的修改、访问和创建时间。SetClass()给存储器对象分配规定的CLSID。SetStateBits()对存储器对象中的状态信息进行存储,例如达到32位。Stat()返回打开的存储器对象的STATSTG结构。
IStorageVB接口350是IStorage接口344的自动友好版本。IStorageVB接口350支持下列操作,例如:Clear();Commit();Revert();sElementName();bStorage();bElement();CreateStream();OpenStream();Createstorage();OpenStorage();get_sName();getoStorage();get_nCount();GetCompression();GetEncryption();GetCRC();CreateStreamLinked();CreatePropertyStg();OpenPropertyStg();SetClass();RegisterAlias();Destroy();和get_ElementType()。Clear()清除所有元素的存储器,例如,子存储器和流。Commit()确保对事务处理模式下所打开的存储器对象所作的任何变化都被反映在双亲存储器中。对于直接模式下的非根存储器对象,这个方法无效。对于根存储器,它反映实际装置(例如磁盘上的文件)中的变化。对于直接模式下打开的根存储器对象,总是在释放对象之前先调用commit()方法。Commit()在直接模式下将所有存储缓冲器刷新到根存储器的磁盘并且当失败时将返回错误代码。尽管释放对象同样也将存储缓冲器刷新到磁盘,但当失败时它没有能力返回任何错误代码。因此,在没有首先调用commit()而调用释放导致了不确定的结果。Revert()自最后一次Commit()操作起丢弃已对存储器对象作出的所有变化。
sElement()返回元素的名称。如果元素是子存储器则bStorage()返回“真”。bElement()为所选定的元素返回iStreamVB接口412或iStreamVB接口414或IStorageVB接口412。CreateStream()以存储器对象中所含的规定名称来创建并打开流对象。如果无法创建流则什么都不返回。OpenStream()在规定的访问模式下打开这个存储器对象内现有的流对象。如果无法打开流则什么都不返回。CreateStorage()创建并打开存储器对象内嵌套的新存储器对象。如果无法创建存储器则什么都不返回。OpenStorage()在规定的访问模式下以规定名称来打开现有的存储器对象。如果无法打开存储器则什么部不返回。Get_sName()返回存储器的名称。Get_oStorage()将陈列对象、方法和属性的IDispatch接口返回到支持自动化的编程工具及其它应用程序。COM组件实现了IDispatch接口,以允许由诸如Visual Basic之类的自动化客户的访问。
Get_nCount()返回存储器中的元素的计数值。GetCompression()判断流是否可以以文件形式被压缩,以及当创建时是否可以可选择地压缩允许的流。GetCRC()表明是否将对所述文件执行循环冗余校验(″CRC″)或数字签名校验。CreateStreamLinked()创建到另一个POLESS文件中的流的链接。CreatePropertyStg()创建属性存储器。OpenPropertyStg()打开属性存储器。SetClass()给存储器对象分配规定的CLSID。RegisterAlias()将别名(alias)注册到POLESS文件中的存储器当中,以供由可插协议的访问。Destroy()销毁规定的元素。Get_ElementType()是返回元素类型的只读命令。
7)cPropertyStorage类
cPropertyStorage类412实现了IPropertyStorage接口413,其支持下列操作,例如:ReadMultiple();WriteMultiple();DeleteMultiple();ReadPropertyNames();WritePropertyNames();DeletePropertyNames();SetClass();Commit();Revert();Enum();Stat();和SetTimes()。ReadMultiple()读取属性集内的属性值。WriteMultiple()写入属性集内的属性值。DeleteMultiple()删除属性集内的属性值。ReadPropertyNames()获取给定属性标识符的相应的串名称。WritePropertyNames()创建或改变与给定属性标识符相对应的串名称。DeletePropertyNames()删除给定属性标识符的串名称。SetClass()给属性集分配CLSID。如先前所述的,就像按命令IStorage::Commit执行的那样,Commit()刷新或提交对属性存储器对象的改变,。当在事务处理模式下打开属性存储器时,Revert()自最后一次提交调用起,丢弃所作出的所有改变。Enum()创建和获取指向用于属性集内的属性枚举器的指针。Stat()接收关于属性集的统计。SetTimes()设置属性集的修改、创建和访问时间。
IPropertyStorageVB接口414是管理单个属性集的持续属性的IPropertyStorage接口413的自动友好版本。IPropertyStorageVB接口414支持下列操作,例如:ReadVB();WriteVB();Delete();CommitVB();RevertVB();SetClass();get_nCount();CopyTo();GetName();WriteMultiple();和ReadMultiple()。ReadVB()从属性集中读取规定属性的数值。WriteVB()将规定属性的数值写入到属性集。如果该属性不存在,则将创建属性/数值对。如果该属性已经存在,则若在eAccess_Write模式下被打开时将更新该数值。Delete()从属性集中删除属性。正如先前所述的,就像按命令Istorage::Commit执行的那样,CommitVB()刷新或提交对属性存储器对象的改变。当属性存储器在事务处理模式下被打开时,RevertVB()自最后一次提交调用起,丢弃所作出的所有改变。SetClass()为属性存储器对象分配规定的CLSID。Get_nCount()返回属性集内属性的计数值。CopyTo()将源属性集的内容拷贝到目标属性集。GetName()返回规定属性的名称。WriteMultiple()在属性集中写入属性值。ReadMultiple()读取属性集中的属性值。
8)cPropertyStorageAmalgamated类
cPropertyStorageAmalgamated类416实现了IPropertyStorageAmalgamated接口417,其支持下列操作,例如:PropertyStorageAdd()和ClearStorage()。PropertyStorageAdd()将属性集添加到属性集的集合中。ClearStorage()清除属性集的集合。
C.POLESS考试资源文件
图11和12-25示出了考试资源文件120的POLESS布局。如图5中所示,考试资源文件120存储来自于考试源文件130的不同的编译后的信息块。考试资源文件120包含传送测试所需的全部内容。然而,当测试是媒体密集的测试时,考试资源文件120将包含带有到外部内容的″链接″的测试的核心元素。XXL编译器140和插件150使用IPersistResourceStream接口192a、IPersistResourceSet接口192b或IPersistResourceStore接口192c的其中一个将编译信息存储到考试实例文件120,以便将该编译信息分别存储为数据流、数据集或存储元素。在优选实施例中,考试资源文件120的布局是分层的POLESS格式,所述分层的POLESS格式直接实现了XXL测试定义语言的格式。测试开发人员使用XXL测试定义语言创建考试源文件130的逻辑文件230和数据文件212(图5)。通过具备了遵循XXL测试定义语言格式的存储结构,容易地实现了POLESS的增量访问的情况。XXL编译器140在考试资源文件120中确定存储位置,所述考试资源文件120存储了特定的编译后的信息块,甚至是由其中一个插件150存储到考试资源文件120中的信息。
图11示出了考试资源文件120的主存储器分支,其对应于XXL测试定义语言的顶级元素,由参考标记500表示。考试资源文件120的主存储器分支例如是:考试分支550;表格分支600;项目分支650;类别分支700;模板分支750;部分分支800;群组分支850;插件分支900;数据分支950;表格组分支1000;属性分支1050;脚本分支1100;和消息框(″Msgbox″)分支1150。可选地,可以使用其它的存储器分支。
如图12所示,考试分支550存储例如支配测试的主属性、属性和数据。考试分支550能够存储不同测试的信息,正如由三个垂直的省略符号表示的那样。特定测试由名称属性存储器552中所存储的数据来标识。同样,每个不同测试都可以由不同的名称来标识,如名称属性存储器552周围的实线边框或由其它标识方案表示的那样。属性存储器554例如将测试的版本信息555和标题信息556存储为数据流或其它数据存储格式。标题信息556是可选的,正如由虚线边框表示的那样。与测试相关的任何可选的、自定义的信息都被作为属性存储器或其它数据存储格式而存储在自定义属性558中。与测试的表格有关的信息是可选地存储在表格属性存储器560中的。表格是固定的或基本固定的测试事件顺序。许多不同的表格都能存储在表格存储器560中,这在控制测试进度时给测试驱动程序110带来了灵活性。表格组存储器562可选地将与考试表格的集合有关的信息存储为数据流或其它数据存储格式。优选地,选择来自于表格组中的单个表格以传送给应试者。来自对该组表格的选择是由选择插件160来执行的。优选地,考试分支550包含独立地或位于表格组存储器562之内的至少一个表格存储器560。与测试有关的其它信息可以存储在考试分支550下面。可选地,可以使用其它存储格式。
如图13A和13B所示,表格分支600存储例如支配测试进度的主属性、属性、和数据。表格分支600能够存储不同表格的信息,如由三个垂直的省略符号表示的那样。如先前所述,表格是固定的或基本上固定的或大体上固定的测试事件的顺序。单个表格由名称属性存储器602中所存储的数据来标识。可选地,可以使用其它标识格式。同样,如名称属性存储器602周围的实线边框所表示的那样,每个不同的表格例如也都可以由不同的名称来标识。属性存储器604存储例如开始部分信息605、末尾部分信息606、事件信息607,并且可选地存储版本信息608、标题信息609、允许跳过的信息610、可重新启动的信息611、随带信息612、高度信息613和位深度信息614。存储在属性存储器604中的全部信息都被存储为数据流或其它数据存储格式。开始部分信息605和末尾部分信息606例如分别表示测试开始的部分和测试结束的部分。
事件信息607表示例如对应于该表格的测试的事件的顺序。每个事件都具有名称,并且前缀有事件类型和冒号。其它格式是可选的。事件类型包括″部分″、″报告″和″结果″。版本信息608和标题信息609分别表示表格的版本和标题。允许跳过的信息610表示例如是否默认允许跳过一些部分。可重新启动的信息611表示例如是否能够重新开始该表格。与表格相关的任何可选的、自定义的信息都是作为属性集或其它数据存储格式而存储在自定义存储器616中的。计时器存储器628存储例如将关于如何对表格计时的信息存储为存储元素。属性存储器630存储例如将与表格一起使用的计时器插件158的名称。插件数据存储器632和插件数据存储器633将计时器插件158所需的任何数据分别存储为存储元素和数据流。插件数据存储632和插件数据存储器633都是可选的。记分存储器634存储例如与表格的记分有关的信息。属性存储器636存储例如与表格一起使用的记分插件164的名称。插件数据638和插件数据639可选地将记分插件164所需的任何数据分别存储为存储元素和数据流。
如图14所示,项目分支650存储例如支配项目的主属性、属性和数据,或者试题等要在测试期间传送给应试者的内容。项目分支650能够存储不同项目的信息,如由三个垂直的省略符号表示的那样。单个项目由名称属性存储器652中所存储的数据来标识。同样,如由名称属性存储器652周围的实线边框表示的那样,每个不同的项目也都可以由不同的名称来标识。属性存储器654存储例如权重信息654、得分信息655,并且可选地存储允许跳过信息656、标题信息657、起始信息658、结束信息659和条件信息660。权重信息654表示例如用于判断并对该项目进行记分的数值。在一个实施例中,默认地,依照一个实施例给项目赋予一个权重,但是也可以使用其它数值。与是否项目正在被用作为一个示例相反,得分信息655表示例如项目是否被记分。得分信息655的默认值为真。允许跳过信息656表示例如应试者是否能够跳过该项目而不作答。
起始信息658表示例如在项目起始处的脚本执行,而结束信息659表示例如在项目末尾处的脚本执行。条件信息660表示例如关于正在传送给应试者的项目是否存在条件。存储在属性存储器654中的信息是作为数据流或其它数据存储格式来存储的。数据存储器662和数据流664存储与项目属性相关的任何信息。例如,数据存储器662或数据流664能够存储多选项目的正确答案。数据存储器662和数据流664将该信息分别存储为存储元素和数据流。
与项目相关的任何可选的、自定义的信息都是作为数据流或其它数据存储格式而存储在自定义存储器666中。类别存储器668存储例如与该项目所属的每个类别有关的信息。由于类别分支700存储了例如特定类别内的所有项目,因此存储在类别存储器668中的信息优选且可选是冗余的。可选的冗余的理由在于:测试驱动程序110能够快速查找任何项目的类别。
如图15所示,类别分支700存储例如支配测试类别的主属性、属性和数据。测试类别提供了这样一种编组机制,其不取决于测试的传送,必要时允许外来的报告和记分。如虚线边框所示,类别分支700是可选的。如由三个垂直的省略符号表示的那样,类别分支700能够存储不同类别的信息。单个类别由名称属性存储器702中所存储的数据来标识。同样,如由名称属性存储器702周围的实线边框表示的那样,每个不同的类别也都可以由不同的名称来标识。属性存储器704存储例如完成信息705、复制信息706、内容信息707,并且可选地存储例如说明信息708。完成信息705表示例如类别中的每个项目是否必须出现在类别内或其子类内。复制信息706表示例如该项目是否能够在类别内或在该子类内出现多于一次。内容信息707判断什么能够存在于类别内。
说明信息708在类别内使用以便包含类别内容的说明。类别存储器710存储例如与名称属性存储器702中所标识的类别下面的任何子类有关的信息。项目存储器712表示例如存在于类别内的任何项目。部分存储器714包含表示类别内存在哪些部分的信息。记分存储器716包含与类别内项目的记分有关的信息。属性存储器718存储例如将与项目一起使用的记分插件的名称。数据存储器720和数据流722包含初始化记分插件164所需的信息。数据存储器720和数据流722将信息分别作为存储元素和数据流加以存储。
如图16所示,模板分支750存储例如对用在测试中的模板进行支配的主属性、属性和数据。如由三个垂直的省略符号表示的那样,模板分支750能够存储不同主模板的信息。单个主模板由名称属性存储器752中所存储的数据来标识。同样,如由名称属性存储器752周围的实线边框表示的那样,每个不同的模板也都可以由不同的名称来标识。属性存储器754存储例如分解信息756、顺序信息757,并且可选地存储尺寸信息759。分解信息656定义了如何分解或分离模板内的特定区域,例如按行或列或者其它形状和/或尺寸来进行。尺寸信息759表示例如用于描述模板的大小的可能的数值,例如像素、百分比或html语法。模板存储器760存储例如与任何子模板有关的信息,所述子模板将在由名称属性存储器752中的信息指定的模板下使用。子模板由名称属性存储器762中的信息来标识。许多子模板760都可能如三个垂直的省略符号所示的那样存在。
区域存储器764表示例如模板内所使用的区域有关的信息,所述模板是由名称属性存储器752中的信息所表示的。如由三个垂直的省略符号表示的那样,在模板内可能存在许多区域。每个区域都是由存储在名称属性存储器766中的信息来标识的。属性存储器768存储例如可视插件名称信息760、尺寸信息770和允许更多的信息771。插件名称信息760表示例如将与区域一起使用的可视插件的名称。尺寸信息770表示例如区域的大小,例如像素值、百分比值或HTML语法。插件数据772和插件数据774对将在该区域中使用的可视插件有关的信息进行存储。存储在插件数据存储器772或插件数据流774中的数据是当加载模板时由可视插件执行的。插件数据存储器772和插件数据流774例如将信息分别作为存储元素或者数据流加以存储。可选地,可以存储其它信息。
如图17所示,部分分支800存储例如支配测试部分的主属性、属性和数据。测试部分规定了项目组的导航和计时以及测试内的显示。如由三个垂直的省略符号表示的那样,部分分支800能够存储不同部分的信息。单个部分由名称属性存储器802中存储的数据来标识。同样,如由名称属性存储器存储器802周围的实线边框所示的那样,每个不同的部分也都可以由不同的名称来标识。属性存储器804存储例如群组信息805,并且可选地存储标题信息806、允许跳过的信息807、起始信息808、结束信息809和条件信息810。群组信息805表示例如该部分属于哪一个测试群组。允许跳过的信息807表示例如是否可以跳过该部分内的项目。起始信息808表示例如该部分起始处的脚本执行,而结束信息809表示例如该部分末尾处的脚本执行。条件信息810表示例如与部分相关的任何条件。与这一部分相关的任何可选的、自定义的信息都是作为数据流或其它数据存储格式而存储在自定义属性存储器812中的。自定义属性将被存为属性集。每个属性的″密钥″将是字符串或其它可接受的格式。
计时器存储器814存储例如与该部分的计时相关的信息。属性存储器816存储例如标识计时器插件158的信息,所述插件将与某一部分一起使用。插件数据存储器818和插件数据存储器820存储例如计时器插件158所需的数据。插件数据存储器818和插件数据存储器820例如将信息分别作为存储元素和数据串或其它可接受的格式加以存储。导航存储器822存储例如与该部分内的演示页和群组的传送有关的信息。属性存储器824存储例如表示哪个导航插件162将与这一部分一起使用的信息。插件数据存储器826和插件数据流器828存储导航插件162所需的信息。插件数据存储器826和插件数据流828将信息分别作为存储元素和数据流加以存储。如图18所示,群组分支850存储例如支配测试内的群组的主属性、属性和数据。群组确定测试内的事件顺序。如由三个垂直的省略符号表示的那样,群组分支850能够存储不同群组的信息。单个群组由名称属性存储器852中存储的数据来标识。如由名称属性存储器852周围的实线边框所示的那样,每个不同的群组也都可以由不同的名称来标识。属性存储器854存储例如类型信息855、事件信息856、标题信息857和查阅名称信息858。类型信息855表示例如群组是″群组持有者″(演示页的群组)还是″部分持有者″(子部分的群组)。这种是互相排斥的。
事件信息856表示例如测试内的事件顺序。查阅名称信息858表示例如群组内的演示页是否将被用作为查阅屏。与群组相关的任何可选的、自定义的信息都是作为数据流或其它数据存储格式而存储在自定义存储器860中。例如,如在图19中更详细描述的那样,事件存储器862存储事件信息。记分存储器864存储例如与群组内的项目记分有关的信息。属性存储器866存储例如表示哪个记分插件164将与该群组一起被使用的信息。选择存储器872存储例如与群组内的项目选择有关的信息。属性存储器874表示例如哪个选择插件160将与该群组一起被使用。
图19A、19B、19C和19D更详细地示出了依照本发明的其中一个实施例的群组分支850的事件子分支。在图19A中,事件子分支862能够存储不同事件的信息。例如,事件子分支862正在存储事件名称子分支880、事件名称子分支890和事件名称子分支897中的信息。在图19B中,事件名称存储器880下面的属性存储器881存储例如类型信息882、模板信息883,并且可选地存储标题信息884、计数信息885、起始信息886、结束信息887和条件信息888。类型信息882表示例如事件是项目还是显示。模板信息883表示例如哪个模板正在随事件一起被使用。计数信息885表示例如是否应该将演示页包含在一个部分中的呈现给应试者的整体演示页中。通常,对带有项目或问题的演示页进行计数,而不对前言的演示页进行计数。
起始信息886、结束信息887和条件信息888例如分别表示开始、结束和有条件脚本。与事件相关的任何可选的、自定义的信息都存储在自定义存储器889中。每个自定义属性的″密钥″将是字符串。再次参照图19A,事件名称存储器890表示例如包含不同属性的不同事件。另外,在图19B中,区域信息891表示例如再现演示页内容的区域,而如果事件具有项目类型,则项目信息892表示例如相关项目的名称。另外,数据存储器893、数据流894、数据存储器895和数据存储器896包含在嵌套的演示页中使用的信息。嵌套演示页的脱离数据(data off)是项目或演示页的内容。这个数据可以是流、存储器、到流的链接、到存储器的链接或其它格式。在图19C中,事件名称897表示例如包括图19D中的子事件898的另一个事件。
如图20所示,插件分支900存储例如支配测试使用的任何插件150的主属性、属性和数据。如由三个垂直的省略符号表示的那样,插件分支900能够存储不同插件的信息。单个插件由名称属性存储器902中存储的数据来标识。CLSID用插件150的名称来标记。属性存储器904存储例如由程序ID标识插件150的信息。数据存储器906和数据存储器908将插件的原始数据分别存储为存储元素或数据流。
如图21所示,数据分支950存储例如测试所需的任何全局数据。如数据存储器952和数据存储器954所表示的那样,可以将可选地存储在数据分支950下面的数据存为存储元素或数据流。在数据分支950下面存储的数据可以直接被插件150使用,或者该数据可以是插件150内部使用的资源(.gif,.jpeg,.wab,.mpeg等等)。
表格组分支1000,如图22所示,存储例如支配测试的表格组的主属性、属性和数据。如由三个垂直的省略符号表示的那样,表格组分支1000能够存储各种不同表格组的信息。单个表格组由名称属性存储器1002中存储的数据来标识。如由名称属性存储器1002周围的实线边框表示的那样,各种不同表格组的每一个也都可以由不同的名称来标识。属性存储器1004存储例如表示哪个表格将在表格组被使用的信息。选择存储器1006存储例如与表格组内的项目选择有关的信息。属性存储器1008表示例如哪个选择插件160将与表格一起被使用。插件数据存储器1010和插件数据存储器1012存储选择插件160所需的任何信息。属性存储器分支1050存储例如对考试资源文件120而言是全局的属性信息。这包括XXL编译器140[sMode]的最后一个执行状态、XXL语言的主要版本[iXXLMajorVersion]和次要版本[iXXLMinorVersion]。
脚本分支1100存储例如与测试内使用的脚本有关的信息。属性存储器1102存储例如规定脚本属于哪种类型的语言的类型信息,所述脚本例如是J脚本的VB脚本。脚本存储器1104存储例如由测试驱动程序引用的测试内使用的全局脚本。MsgBox分支1150存储例如与可能在测试期间传送给应试者的任何消息框的尺寸和内容有关的信息。在考试期间,消息框可以由插件150触发。
D.POLESS考试实例文件
图26A、26B、26C和26D示出了考试实例文件170的POLESS布局。考试实例文件170存储与当前应试者的测试相关的信息。考试实例文件170是在为应试者开始测试时创建的。当成功地完成测试时,销毁考试实例文件170。如果应试者因一些例如电源故障的中断而必须重新开始她的测试时,则从考试实例文件170恢复测试的状态。在优选实施例中,考试实例文件170的布局是分层POLESS格式的。如图26A所示,从根1200起的考试实例文件170的顶级存储器分支例如是:运行分支1202;内容分支1310;和历史分支1320。根1200涉及POLESScStorageRoot类406(图10),该类将考试实例文件170实例化。
运行分支1202存储例如测试驱动程序110和插件150中所有正在运行的对象的状态信息。插件150使用IPersistInstanceStream接口196a、IPersistInstanceSet接口196b或IPersistInstanceStore接口196c的其中一个,以将信息分别作为数据流、数据集或数据存储器存储到考试实例文件170中。除不包含考试状态信息的显示插件152、结果插件166、报告插件168和舵插件154之外的任何插件150,都将考试状态信息存储到考试实例文件170中。测试驱动程序110确定存储特定考试状态信息块的考试实例文件170中的存储位置。
考试子分支1204包含与考试有关的考试状态信息。内容存储器1206存储例如考试状态信息1207和版本信息1208。考试状态信息1207表示例如考试的状态,例如初始化或终止。模板存储器分支1210存储例如与考试中运行的模板有关的考试状态信息。名称属性存储器1212存储例如计数值信息1214和曾观察过的信息1215。曾观察过的信息1215表示例如模板的内容是否具有曾经被应试者完全看到过。
表格存储器分支1216包含与考试内使用的表格有关的信息。内容存储器分支1218存储例如计秒信息1219、日期起始信息1220、日期结束信息1221、当前部分信息1222和版本信息1223。当前部分信息1222表示例如正在以表格形式传送给应试者的当前部分。版本信息1223表示例如表格的标识符。
如在图26B中示出的,部分选择存储器分支1224存储例如与正在传送给应试者的表格中的部分有关的信息。内容存储器1226存储例如已经传送给或即将传送给应试者的部分的名称。名称属性存储器1228表示例如特定部分的名称。内容存储器1230存储例如当前子信息1231、计秒信息1232、日期起始信息1233和日期结束信息1234。导航存储器1236和导航存储器1237存储导航插件162的状态信息。如果导航插件162实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则导航存储器1236存储例如来自于导航插件162的考试状态信息。如果导航插件162实现IPersistInterfaceStream 196a,则导航存储器1237存储例如来自于导航插件162的信息。计时器存储器1238和计时器存储器1239存储来自于计时器插件158的信息。如果计时器插件158实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用计时器存储器1238。如果计时器插件158使用IPersistInterfaceStream 196a,则使用计时器存储器1239。
项目选择子分支存储器1240存储例如与已经或即将传送给应试者的项目有关的信息。内容存储器分支1242存储例如已经或即将传送给应试者的所有项目的名称和顺序。名称属性存储器1244表示例如特定项目的标识符。内容存储器分支1246存储例如呈现的信息1244、完成信息1248、跳过的信息1249、计秒信息1250、已去除的信息1251和曾观察过的信息1252。呈现的信息1247表示例如项目是否曾经传送给应试者。完成信息1248表示例如项目是否已经完成。跳过的信息1249表示例如项目是否已被跳过。项目插件存储器1254和项目插件存储器1255存储例如来自于项目插件156的考试状态信息。如果项目插件156使用IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用项目插件存储器1254。如果项目插件156使用IPersistInterfaceStream 196a,则使用项目插件存储器1255。
在图26C中,项目变亮存储器1256只有当项目被去除时(以节省存储器或当部分结束时)才出现。已去除的项目对数据进行存储,但是对数据的动作直到该项目被去除时才不再有效。项目变亮存储器1256存储例如得分应试者信息1257。得分最小信息1258、得分标准信息1259、得分最大信息1260、完成信息1261、跳过信息1262、正确答案显示1263、响应结果1264、和正确答案结果1266。计时器存储器1268和计时器存储器1269存储来自于计时器插件158的信息。如图26B所示,如果计时器插件158实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用计时器存储器1268。如果计时器插件158使用IPersistInterfaceStream 196a,则使用计时器存储器1269。得分存储器1270和得分存储器1271存储来自于计时器插件158的信息。如果计时器插件158实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用计时器存储器1270。如果计时器插件158使用IPersistInterfaceStream 196a,则使用得分存储器1271。
在图26C中,群组选择子分支存储器1272表示例如哪个群组已经或即将被传送给应试者。内容存储器1274存储例如群组的名称。名称属性存储器1276表示例如特定群组的名称。内容存储器1278存储例如群组的名称和群组的顺序。记分存储器1280和记分存储器1281存储来自得分插件164的考试状态信息。如果得分插件164实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用记分存储器1280。如果得分插件164实现IPersistInterfaceStream 196a,则使用记分存储器信息1281。选择存储器1282和选择存储器1283存储来自于选择插件160的信息。如果选择插件160实现IPersistInterfaceSet 196b或IPersistInterfaceStore 196c,则使用选择存储器1282。如果选择插件160实现ipersistinterfacestream 196a,则使用选择存储器1283。在图26D中,传送存储器1284存储例如选择用来传送的群组的有序列表。传送存储器1285存储例如表格的子类的有序列表,例如:部分、报告和结果。
演示页选择存储器子分支1286表示例如已经或即将传送给应试者的任何演示页。内容存储器1288存储例如演示页的名称。名称存储器子分支1290存储例如演示页的名称。名称存储器1290还存储例如注释信息1291、作标记信息1292、计数值信息1293、名称信息1294、曾观察过的信息1295、名称信息1296和曾观察过的信息1297。名称信息1294和曾观察过的信息1295涉及到演示页选择子分支1286下面存储的第一演示页区域的名称,以及涉及是否曾经已经观察到该演示页,而名称信息1296表示例如传送给应试者的最后一个演示页区域以及是否该演示页曾经被观察到。内容存储器1298存储例如导致事件的信息。内容存储器1298存储例如准备信息1299、曾检查过的信息1300、曾开始信息1301和曾完成信息1302。准备信息1299表示例如事件是否准备好要传送给应试者。曾检查过的信息1300表示例如是否曾经检查过事件的有条件传送脚本。优选地,有条件传送脚本仅仅被检查一次。曾开始信息1301表示例如事件是否曾经由应试者启动过。曾完成信息1302表示例如事件是否被应试者所完成。
再次参照图26A,内容分支1310存储例如包含信息的属性集,以标识考试实例和考试起始计数值1312。所使用的标识信息是应试者职位标识符1311、考试资源文件120的名称1313、以及规定的表格或群组的名称1314。
历史分支1320是按时间顺序排列的文本消息的单一流,其记录了测试的历史。系统总部的工作人员使用这些文本消息来诊断字段中出现的问题。每个文本消息都前缀有日期、时间和严格的级别,例如:信息、警告或错误。测试驱动程序110将把文本消息过滤到测试驱动程序110希望的诊断级别,比如确定测试驱动程序110中的错误或跟踪历史细节,包括普通信息。
V.使用插件的测试驱动程序的扩展
图27示出了用于根据来自客户的特定需求、利用插件150进行自定义测试的过程,总体上由参考标记1400表示。首先,步骤1402,客户向测试开发人员呈递新的需求,例如新的项目类型。然后,步骤1404,测试开发人员编写XML模式以定义XXL测试规范。随后,使用所述模式来验证XXL测试规范。
在名为″EXTENSIBLE EXAM LANGUAGE(XXL)PROTOCOLFOR COMPUTER BASED TESTING(用于基于计算机的测试的可扩展考试语言(XXL)协议)″的美国专利公开第20030129573号中给出了XXL模式的详细描述,将该篇在此引入以供参考。
测试开发人员接下来编写适当的插件150,在这个示例中,编写项目插件156。测试开发人员还实现IPlugin接口167和IPlugin接口和IItem接口169。另外,测试开发人员实现IPersistResource接口192(图3),以允许编译测试信息从项目插件156到考试资源文件120的持续性。步骤1408,测试开发人员能够可选地实现IPersistInstance接口196(图3),以允许考试状态信息从项目插件156到考试实例文件170的延续。在已经实现适当的接口之后,项目插件156有效并且运行。最后,在将测试传送给应试者之后,结果处理器累加来自于应试者的结果,步骤1410。结果处理器必须理解新的项目类型以正确地处理所述结果。自定义过程1400仅仅需要测试开发人员编写其中一个软件块即项目插件156,以包含客户的自定义内容,而非编写多个软件块。
A.测试制作和测试传送
图28是示出了测试制作和测试传送的总体方法的流程图,整体上由参考标记1500表示。步骤1502,测试出版者首先编写测试规范和内容。然后,步骤1504,将测试规范和内容存储在考试源文件130中。然后,步骤1506,对考试源文件130(例如XXL文件134的内容)进行编译和验证。步骤1508,将编译后的测试规范和内容存储在考试资源文件120中。最后,将编译后的测试规范和内容传送给应试者,步骤1510。
在图29中,按照总体上由参考标记1512所表示的方法,更详细地示出的对测试规范和内容的验证。步骤1514,当存储在考试源文件130中的测试规范和内容特定地引用插件150时,将那个插件150实例化。步骤1516,将与那个插件150有关的部分测试规范和内容从考试源文件130加载到插件150中。在可选的实施例中,将部分测试规范和内容加载到与插件150进行的数据通信中的专用存储器中。步骤1518,插件150验证该部分测试规范和内容。然后,将已验证过的测试规范和内容从插件150卸载到考试资源文件120内的存储元素中。
图30更详细地示出了测试传送周期的方法。步骤1525,当存储在考试资源文件120中的先前已验证过的测试规范和内容对插件150进行引用时,将该插件150实例化。步骤1527,将包含已验证过的测试规范和内容的考试资源文件120中的存储元素提供给插件150。步骤1529,将已验证过的测试规范和内容从考试资源文件120内的存储元素加载到插件150中。最后,把例如包括应试者的响应的考试状态信息存储到考试实例文件170中,步骤1533。
图31更详细地示出了在中断之后重新开始测试的方法。在测试重新开始方法1535中,步骤1537,启动测试驱动程序110。步骤1539,测试驱动程序110判断测试是否已经开始。步骤1543,如果测试传送尚未开始,则插件150从考试资源文件120中重新加载已验证的测试规范和内容。步骤1541,如果测试已经开始,则插件从考试实例文件120中检索考试信息。然后,步骤1543,插件150从考试资源文件120中重新加载已验证的测试规范和内容。然后,步骤1545,测试驱动程序110将考试传送给应试者。
B.插件寿命周期
图32示出了插件150从测试制作到测试传送的寿命周期,总体上由参考标记1420表示。虚线垂直线1422将插件寿命周期1420划分成虚线垂直线1422左侧的测试制作周期和虚线垂直线1422右侧的测试传送周期。测试制作周期仅仅当开发新的插件150时偶而出现,以满足客户需求。测试传送周期每当测试被传送给应试者时都会出现,例如每天出现。
示出数据文件132和XXL文件134的考试源文件130包含如由测试出版者所编写的测试的每个方面。在步骤I中,XXL编译器140从XXL文件134读取为插件150的使用而调用的指令并解释该指令。插件150是在XXL测试定义语言中以名称和程序标识(″progID″)两者来标识的。当XXL编译器从XXL文件134接收prog ID时,XXL编译器知道插件150要求完成考试源文件130的编译。
不是所有可能类型的插件150都需要构造任何一个测试。同样,一个以上的插件150是对应特定类型实现的。在上述示例中,定义了两个导航插件162和两个项目插件156。XXL编译器140利用IStream接口340、iNode接口1424和IStreamVB接口348从考试源文件130中读取信息,其中所述iNode接口是用于在文档对象模型(″DOM″)中访问XML文档的节点的Microsoft接口。XXL编译器140利用例如调用CoCreateInstance()将所请求的插件150实例化。CoCreateInstance()利用已被转换成CLSID的prog ID创建与指定CLSID相关联的类的单个未初始化的对象。
如果测试开发人员已经自定义了引用插件150的数据,则XXL编译器140就可以不必识别该新的数据。因此,XXL编译器140将数据直接传递到插件150,并且插件150将该数据加载到专用存储器(未示出)中。在一个实施例中,该专用存储器是位于插件150之内的,而在另一个实施例中,专用存储器是位于插件150之外的。插件150能继而利用XXL模式验证数据。如果数据无效,则插件150报告错误。在可选的实施例中,插件150能够利用XML文件类型定义(″DTD″)来验证数据。DTD是特定类型文档的XML声明语法中的形式描述。与模式相似,DTD设置出将给不同类型的元素使用什么名称、它们可以在哪里出现以及它们如何组合。然而,XXL模式优选用于验证,因为模式比DTD更易读并且非常灵活。
在步骤II中,如果插件150声明数据有效,则XXL编译器140准备考试资源文件120中的POLESS存储器对象300,其中插件150按照来自XXL编译器140的命令将数据保存到所述考试资源文件中。正如先前所述,XXL编译器140判断将把来自于插件150的数据保存在考试资源文件120中的哪里并且创建适当的存储位置。与插件150相关联的名称、CLSID和数据都存储在考试资源文件120中的插件分支900中(图20)。插件150实现IPersistResource接口192,以将数据存储到考试资源文件120。如果插件150实现IPersistResourceStream192a、IPersistResourceSet接口192b或者IPersistResourceStore接口192c,则数据存储器906例如将数据分别作为例如流、数据集或作为存储元素加以存储。如果插件150实现IPersistResourceStream接口192a,则数据存储器908例如将数据作为数据流加以存储。插件150能够对用于将数据存储到考试资源文件120中的格式进行选择。重复执行步骤I和II直到考试源文件130被完全编译并且考试资源文件120被编译后的测试信息所完全填充为止。
在图33中更详细地示出了插件150的编译序列,如图32中的步骤I和II所示。在步骤I中,插件编译序列1430始于XXL编译器140利用Iplugin::ValidateSource()调用1432请求插件150,对来自考试源文件130的信息进行验证,其中所述考试源文件附属于插件150。插件150验证从考试源文件140接收的数据是否正确地基于XXL模式进行了格式化。如果数据是无效的,则插件发出结构化的COM错误。插件150并不验证是否所有需要的源元素都存在,而是验证所呈现的东西是否被正确格式化。
步骤II包含两个步骤,如步骤IIa和IIb所示。在步骤IIa中,XXL编译器140利用POLESS对象300创建考试资源文件120中的适当存储元素。存储元素类型是基于插件150实现的IPersistResource接口192的类型来确定的,例如:IPersistResourceStream接口192a;IPersistResourceSet接口192b;或IPersistResourceStore接口192c。然后,XXL编译器140为适当的IPersistResource接口调用IPersistResource*::Save()调用1434。插件150通过XXL编译器140所传递的POLESS对象300,将编译后的信息从考试源文件130保存到考试资源文件120。在步骤IIb中,XXL编译器140命令插件150利用Unload()调用1436卸载或刷新其内容。如前所述,重复执行步骤I、IIa和IIb直到所有考试源文件130都被编译为止。
如步骤VIa和VIb所示的,步骤VI涉及考试资源文件120的合并(amalgamation)。合并使对应特定插件的数据能虚拟地按照一个存储位置存在,即使该数据出现在存储器分层结构内的不同位置上。如果插件120已经实现将数据存储到考试资源文件120的IPersistResourceSet接口192b或者IPersistResourceStore接口192c,则就能够对考试资源文件120执行合并。在步骤VIa中,XXL编译器140对考试资源文件120中的一至三个存储元素进行合并,并利用IPersistResource*::ValidateResource()调用1438将合并后的POLESS对象传递到插件150。插件150判断合并后的POLESS对象是否创建了完整而有效的集合。如果合并后的POLESS对象未创建完整而有效的集合,则插件150就发出结构化的COM错误。在步骤VIb中,XXL编译器140命令插件150利用Unload()调用1440卸载或刷新(flush)其内容。步骤VIa和VIb出现在在步骤I、IIa和IIb周期之中,并且还可以多次出现在考试源文件130的编译期间。在名为″EXTENSIBLEEXAM LANGUAGE(XXL)PROTOCOL FOR COMPUTER BASEDTESTING(用于基于计算机的测试的可扩展考试语言(XXL)协议)″美国专利公开第20030129573号中更详细地描述了合并,将该篇申请在此引入以供参考。
再次参照图32,在测试传送周期期间,测试驱动程序110通过POLESS对象300读取存储在考试资源文件120中的测试规范。测试驱动程序110通过POLESS对象300从考试资源文件120中读取信息,以便检索出考试资源文件120内的已加密、已压缩的结构化元素。在步骤III中,当XXL测试定义语言利用prog ID来调用插件150时,如先前所述,测试驱动程序110将所调用的插件150实例化。利用适当的IPersistResource接192,测试驱动程序110提供来自于考试资源文件120的POLESS对象300,并且插件150根据POLESS对象300来对其自身进行初始化,例如存储在名称属性存储器902下面的数据存储器906或数据存储器908。加载到插件150中的信息与在测试制作周期(步骤II)期间由插件150存储到考试资源文件120中的信息是相同的信息。由于插件150对用于将信息存储到考试资源文件150中的存储格式进行了选择,因而插件150总是能够从考试资源文件150中读取信息,从而给插件150带来完全的灵活性。测试驱动程序110不必能读取插件150所使用的信息。因此,插件150所带来的对测试的任何自定义都不需要对测试驱动程序110进行任何改变。然后,测试根据来自客户的新需求,随着插件能够增强测试驱动程序110的功能也随之改进了。
定期地根据来自于测试驱动程序110或者来自于插件150的请求,将所有正在运行的对象的状态保存到考试实例文件170,所述考试实例文件是对每个应试者而言独特的文件,以表明那个应试者的测试的状态和进度。如果插件150为″脏的(dirty)″,则测试驱动程序110就请求插件150,这意味着插件150正在存储一些已经更新的考试状态信息。例如,当应试者在多选项目上选择错误选项A时,在这种情况下,项目插件156变为脏的。在步骤IV,如果插件150为脏的,则测试驱动程序110就给插件150提供考试实例文件170中的POLESS对象300,并且插件利用IPersistInstance接口196将考试状态信息保存到考试实例文件170。例如,项目插件156将应试者的答案保存到项目插件存储器1254中或保存到项目插件存储器1255中(图26)。如果项目插件156实现IPersistInstanceSet接口196b或者IPersistInstanceStore接口196c,则项目存储器1254例如将数据分别作为数据集或作为存储元素加以存储。如果项目插件156实现IPersistInstanceStream接口196a,则项目存储器1255例如将数据作为数据流加以存储。
如果测试中断,例如由于电源故障,则出现步骤V,并且测试需要重新开始。当测试驱动程序110需要返回到特定的运行状态时,测试驱动程序110从考试实例文件170中读取考试状态信息。利用IPersistInstance接口196,给插件150提供包含了如保存在步骤IV中的插件150的状态的存储器对象。利用先前的示例,项目插件156从项目插件存储器1254中或为项目插件存储器1255检索出其状态信息。插件150能够根据检索出的状态信息开始运行,从而允许测试从测试中断的点重新开始。
在图34A、34B、34C和34D中更详细地示出了插件150的传送序列,如图32中的步骤II、IV和V所示。如图34A所示,具体地,传送序列1520涉及可视插件150,例如,显示插件152、舵插件154和项目插件156。步骤III包含标记为IIIa-IIIb的子步骤。在步骤IIIa中,当目前正在传送的演示页请求其模板以便以cTemplate::Activate()调用1524来激活时,插件传送序列1520开始。当应试者利用由舵插件154所激活的舵导航控件在测试上导航时,Activate()调用1524被激活。IContainerNotifyHelm接口206使舵插件154能够请求来自测试驱动程序110的导航。IContainerNotifyHelm接口206向测试驱动程序110中的cTemplate类236发送Activate()调用1524(参见图8)。
在步骤IIIb中,测试驱动程序110中的cTemplate类236使用Iplugin::Load()调用1526将来自测试驱动程序110的核心对象引用设置为正在传送的插件150。核心对象引用包括IContainerNotify接口200、cExam类(未示出)和IAppointment接口176,其将与应试者和职位有关的信息传递到插件150。
在步骤III间或出现的步骤V只有当测试中断并且插件150丢失状态时才出现。测试驱动程序110中的cTemplate类236使用IPersistInstance*::Reload()调用1528来对考试实例文件170的重新加载方法进行调用。考试实例文件170通过IPersistInstance接口192(例如IPersistInstanceSet 192b)来重新加载插件150,并且将状态保存到考试资源文件170中的适当存储位置(参见图26)。
步骤IIIc是结合步骤V一起,在插件150的初始传送以及在重新开始测试期间执行的。测试驱动程序110中的cTemplate类236使用IPersistResource*::Load()调用1530来对考试资源文件120的加载方法进行调用。考试资源文件120通过IPersistResource接口192(例如IPersistResourceSet接口192b),伴随来自考试资源文件120中适当存储位置的测试规范和内容对插件150进行加载规范。当最初被传送给应试者时,伴随来自考试资源文件120的测试规范和内容加载插件150。当测试已经中断并且插件150必须恢复状态时,如上所述,伴随来自考试资源文件120的测试规范和内容以及来自考试实例文件170的考试状态信息加载插件150。
在步骤IIId中,在适当地加载插件150之后,测试驱动程序110中的cTemplate类236使用I*::PresentationStarting()调用1532(在图34B中继续的)以通知可视插件150该演示页正在启动。将I*::PresentationStarting()调用1532施加于适当接口上演示页中正在使用的任何可视插件150,例如:IDisplay接口169a、IItem接口169c或IHelm接口169b。例如,步骤IIIe,IItem::PresentationStarting()调用是为项目插件156而使用的。然后,cTemplate类236命令可视插件150显示使用IOleObject::DoVerb(Show,...)命令1534。IOleObject接口1522是用于实现活动文档演示页的活动文档接口。IOleObject接口1522是结合图7所述的活动文档接口的组合。在命令可视插件150显示之后,测试驱动程序110等待来自各个可视插件150的通知,该通知表示已经成功地显示了特定可视插件150。步骤IIIf(在图34B中继续的),可视插件150利用IcontainerNotify::Activated()调用1536调用返回测试驱动程序110。现在,演示页已经启动并激活,以便应试者能够与该演示页进行交互。
演示页的失活(deactivation)是始于导航的舵的请求。例如,如果应试者已经结束问题并且想要移至下一个演示页上的下一个问题,则应试者就能够选择舵上安装的″NEXT  (下一个)″按钮。导航请求是发自IHelm接口169b的,所述IHelm接口利用IContainerNotifyHelm接口206从应试者将请求接收到测试驱动程序110。如图34D所示,步骤IIIg,所述请求是利用IContainerNotifyHelm::Request-Move()调用1538而产生的。然后,如果允许应试者离开当前的演示页并且前进至下一个演示页,则随即测试驱动程序110请求演示页模板中正在使用的每个项目插件156。步骤IIIh,所述查询是利用IItem::bProceed()调用1540产生的。如果所有项目插件156以肯定方式响应,则测试驱动程序150就将导航请求传递到导航插件162,所述导航插件是不可视插件150。步骤IIIl,测试驱动程序110利用INavigate::RequestMove()调用1542来传递请求。导航插件162确定请求导航所得到的位置。在图34中,例如,导航插件162利用ISection::ChildNext()调用1544来确定应试者将进行的测试的部分,步骤IIIj。
步骤IIIk(在图34C中继续的),然后,活动演示页利用cTemplate::Deactivate()调用1546来使模板无效。现在返回图34D,步骤IIIl,测试驱动程序110中的模板类236利用IOleObject::DoVerb(Hide,...)调用1548以请求可视插件150从活动文档隐藏。步骤IIIm,测试驱动程序110中的cTemplate类236利用I*::PresentationEnding()调用1550来通知可视插件150当前演示页正在结束。例如,cTemplate利用IHelm::PresentationEnding()调用来通知舵插件154当前演示页正在结束。
包含子步骤IVa-c的步骤IV是用于将插件状态数据保存到考试实例文件170的过程。测试驱动程序110请求插件150的″脏″状态以判断插件150是否正在存储任何状态信息,如果测试将中断则需要所述的任何状态信息。步骤Iva,测试驱动程序110使用IPersistInstance*::IsDirty()调用1552来产生请求。例如,如果状态数据是属性集,则测试驱动程序110使用IPersistInstanceSet::IsDirty调用1552。如果插件150正在存储尚未保存在考试实例文件170中的状态数据,则IPersistInstance*::IsDirty()调用1552返回“真”。步骤Ivb,如果插件150为″脏″,测试驱动程序110命令插件150利用IpersistInstance*::Save()调用1554来将状态数据保存到所提供的POLESS对象(图26)中的考试实例文件170。最后,步骤Ivc,测试驱动程序110命令插件150利用IPlugin::Unload()调用1556来卸载所有对象。
VI.基于计算机的测试系统的网络环境
提供了根据本发明的基于计算机的测试系统的网络环境的描述,所述基于计算机的测试系统包括:测试驱动程序,其通过对传送给测试应试者的测试组件进行高速缓存而在网络环境上对基于计算机的测试的传送进行控制,以便简化为至少一个或多个同时测试的应试者所提供的统一的测试环境。图35是示出了根据本发明的基于计算机的测试系统的网络环境示例的框图。
参照图35,本发明的基于计算机的测试系统包括:测试管理系统,其包括经Web认证的监考人管理站点3160和安全ID服务器3150,用于标识基于计算机的测试的监考人;测试监考人认证系统,其包括Web资格管理站点3190和GEE服务器3180,用于对管理基于计算机的测试的监考人进行认证;测试注册系统,用以使请求职位的应试者能参与测试,其包括Web注册站点3200,用于允许通过因特网保留职位;计划中间设备3170,用于处理参与测试的应试者的请求;计划接口服务3220,向应试者工作站3000提供计划好的职位数据以标识应试者以及核对应试者的证书;电子商务系统3210,用于注册基于计算机的测试的测试应试者以及用于对与计划和传送基于计算机的测试相关联的任何支付进行收集和/或处理;和测试分析系统,其包括结果收集服务器3230,用于汇集来自所有已传送的测试的结果;数据仓库3240,用于存储这样的测试结果和允许对这样的测试结果进行访问;和结果心理测试系统3250,用于监视应试者对测试项目的响应,保持基于计算机的测试的组成,并允许生成和发布项目响应分析和报告。
如图35中所示的网络环境进一步包括基于计算机的测试制作系统,其包括:测试出版者系统3010,用于编写基于计算机的测试并制作存储有测试规范和内容的考试源文件(如先前所述);测试打包系统3020,用于检索和验证基于计算机的测试的考试源文件并将其编译成考试资源文件(如先前所述);和源服务器3030,用于对编译后的考试资源文件的版本以及其中包括基于计算机的测试在内的任何附加的相应测试组件进行存储和管理。所述网络环境还包括发布服务器,以用于简化基于计算机的测试,其包括应用程序部署服务器3040、项目高速缓存服务器3050和插件高速缓存服务器3060,所述发布服务器经由广域网(即,网络的互连系统)连接到源服务器3030,并且经由局部访问网络连接到应试者工作站3000。所述局部访问网络可以包括LAN、xDSL访问网络、电缆访问网络或无线访问网络。从源服务器3030来看,测试组件是从基于计算机的测试的考试资源文件中提取并部署到发布服务器的。应用程序部署服务器3040存储测试驱动应用程序和考试资源文件,其包括基于计算机的测试的核心测试规范,以供发布到应试者工作站3000。项目高速缓存服务器3050存储从考试资源文件中提取的测试项目。插件高速缓存服务器3060对从考试资源文件中提取的插件进行存储。所述网络环境进一步包括位于多个位置上的任意数量的测试应试者工作站,其中将基于计算机的测试安排以传送至所述的多个位置。因此,可以集群(cluster)分布服务器以供并行处理、负载平衡和容错,以便支持至少一个或多个同时测试应试者的变化的容量。
从应用程序部署服务器3040来看,可以下载用于控制基于计算机的测试的传送的测试驱动应用程序,以在应试者工作站3000上进行设置。可以将测试驱动应用程序3070存储在连接到应试者工作站3030的计算机可读介质上,比如硬盘驱动器或其它磁性介质。然而,包括考试资源文件、测试项目和插件(所有都在先前描述过)在内的基于计算机测试的测试组件都被存储在随机存取存储器(RAM)中,以防止非法复制或对基于计算机的测试的操纵,由此确保了测试的安全性。
测试驱动应用程序3070包括会话管理器3080,以用于管理基于计算机的测试会话,其具有:验证层3090,用于验证基于计算机的测试的监考人;事件定位符应试者证书接口3100,用于证明测试应试者使用基于计算机的测试的能力(eligibility);以及统一测试驱动程序(UTD)核心3110,用于控制基于计算机的测试向应试者工作站3000的传送。UTD核心3100控制项目高速缓存控制器3120、插件高速缓存控制器3130和浏览器演示层3140。项目高速缓存控制器3120在项目高速缓存4360(图36)中存储从项目高速缓存服务器3040中检索出的测试项目,以供传送给测试应试者,所述项目高速缓存是应试者工作站3000上存储加密后的存储映象的标页的RAM。插件高速缓存控制器3130在插件高速缓存4390(图36)中存储从插件高速缓存服务器3160检索出的插件,以供由UTD核心3100来使用,所述插件高速缓存是应试者工作站3000上的存储映象的标页的RAM。浏览器演示层3140根据从应用程序部署服务器3040中检索出的考试资源文件,在应试者工作站3000上供应基于计算机的测试。
VII.基于计算机的测试系统的高速缓存结构
在基于计算机的测试中,可以利用两种传送模式来将测试传送给应试者工作站,所述两种模式是:断开连接模式(例如,非网络化的)或连接模式(例如,网络化的)。断开连接模式是传统的传送模式,其中管理基于的测试所需的每一个元素都在基于计算机的测试启动之前存储在测试应试者工作站上。因此,不必监视测试环境来调节基于计算机的测试在网络环境上的传送,并且不必实现用于网络环境的高速缓存结构。相反,连接模式是非传统的传送模式,其中将基于计算机的测试的核心元素存储在测试应试者工作站上并且附加的测试组件是在基于计算机的测试期间在网络环境上从发布服务器中检索出的。当利用连接模式时提供了许多优点,比如对于处在多个位置上的测试应试者而言,在管理其基于计算机的测试方面的灵活性,但同时,无须花费巨大成本网络环境就引入了环境变化,这些环境变化对于测试管理员来说是不可控的。因此,为了向位于多个位置上的至少一个或多个同时测试的应试者的变化量提供统一的测试环境,基于计算机的系统必须调节基于计算机的测试的传送,以弥补网络环境上的变化。
提供了用于本发明的基于计算机的测试系统的高速缓存结构的描述,所述基于计算机的测试系统包括:测试驱动程序,其通过对传送到测试应试者的测试组件进行高速缓存来控制基于计算机的测试在网络环境上的传送,以便于促使至少一个或多个同时测试应试者的测试环境的统一。图36是根据本发明的用于基于计算机的测试系统的缓存结构的框图。
如图36中所示,测试驱动应用程序3070包括Web服务接口4400,其具有验证模块4410。Web服务接口4400促进了应试者工作站3000与发布服务器之间的网络通信。验证模块4410对从发布服务器中检索出的测试组件进行验证。Web服务接口4400还记录应试者工作站3000与发布服务器之间传输的每个请求和响应的传输细节,其包括但不限于,例如:应试者工作站3000向发布服务器发送请求的时间、发布服务器接收该请求的时间、发布服务器向应试者工作站3000发送响应的时间、以及应试者工作站3000接收该响应的时间。这类细节还包括,例如:网络发出的错误消息、发布服务器发出的错误消息、应试者工作站3000向发布服务器发送请求重试的次数、应试者工作站3000为获得来自于发布服务器的响应的重试次数,以及所传输的每个消息或测试组件的大小。
测试驱动应用程序3070还包括:项目请求接口4340、插件请求接口4370、请求处理器4310、解密模块4320、解压缩模块4330、项目请求模块4350、插件请求模块4380、高速缓存控制器4400、项目高速缓存4360和插件高速缓存4390。测试驱动应用程序3070发送请求以通过项目请求接口4340和插件请求接口4370检索测试组件。请求处理器4310对由测试驱动应用程序3070启动的测试组件的请求进行处理,以及对从发布服务器检索出的测试组件向测试驱动应用程序3070的传送进行处理。项目请求模块4360促进了自项目高速缓存服务器3040的测试项目的检索。插件请求模块4380促进了自插件高速缓存服务器3060的插件的检索。高速缓存控制器4400对项目高速缓存4360和插件高速缓存4390中的测试组件的存储进行管理。项目高速缓存4350存储从项目高速缓存服务器3040中检索出的测试项目。插件高速缓存4390存储从插件高速缓存服务器3060中检索出的测试插件。解密模块4320对已被加密以保持基于计算机的测试的安全性的测试组件进行解密。解压缩模块4330对已被压缩以供在网络环境上传输的测试组件进行解压缩。
提供了本发明的基于计算机的测试系统的示例性高速缓存操作的描述,所述基于计算机的测试系统包括:测试驱动程序,其控制基于计算机的测试在具有高速缓存结构的网络环境上的传送。由于基于计算机的测试包括可高速缓存对象,因此就可以仅仅将选定的测试组件从发布服务器下载到应试者工作站,以供依照测试规范传送当前的测试部分。因此,就可以在所有测试组件被下载至应试者工作站之前,先为测试应试者启动基于计算机的测试。
图37A是根据本发明的关于高速缓存结构的高速缓存测试项目的方法流程图。参照图37A,在步骤S3710A和S3715A,当测试驱动应用程序3070需要测试项目时,测试驱动应用程序3070经由项目请求接口4340命令请求处理器4310检索测试项目。在步骤S3720A,请求处理器4310验证该测试项目在项目高速缓存4360中是否是可用的。在步骤S3755A,如果所请求的测试项目是本地可用的(例如,命中),则请求处理器4310就从项目高速缓存4360中检索出测试项目。必要时,在步骤S3750A,解压缩模块4330对该测试项目进行解压缩,并且在步骤S3765A,解密模块4320对该测试项目进行解密。在步骤S3770A,请求处理器4310将测试项目返回给测试驱动应用程序3070。然而,在步骤S3725A和S3730A,如果该测试项目不是本地可用的(例如,未命中),则项目请求模块4350就经由Web服务接口4400从项目高速缓存服务器3050中请求该测试项目。在步骤S3730A,Web服务接口4400从项目高速缓存服务器3050中请求该测试项目。在步骤S3735A,项目高速缓存服务器3050或源服务器3030返回所请求的测试项目。在步骤S3740A,验证模块4410对返回的所请求的测试项目进行验证。在步骤3745A,项目高速缓存控制器3120从高速缓存控制器4400中请求存储指令,并且在步骤S3750A,相应地在项目高速缓存4360中存储返回的所请求的测试项目。在步骤S3755A,请求处理器4310从项目高速缓存4360中检索出测试项目。必要时,在步骤S3760A,解压缩模块4330解压缩该测试项目,并且在步骤S3765A,解密模块4320解密该测试项目。在步骤S3770A,请求处理器4310将该测试项目传送给测试驱动应用程序3070。
当测试驱动应用程序3070需要插件时出现类似的过程。图37B是根据本发明的关于高速缓存结构的高速缓存插件的方法流程图。参照图37B,在步骤S3710B和S3715B,当测试驱动应用程序3070需要插件时,测试驱动应用程序3070经由插件请求接口4370命令请求处理器4310检索该插件。在步骤S3720B,请求处理器4310验证插件在插件高速缓存4390中是否是可用的。在步骤S3755B,如果所请求的插件是本地可用的(例如,命中),则请求处理器4310就从插件高速缓存4390中检索出该插件。必要时,在步骤S3760B,解压缩模块4330解压缩该插件,并且在步骤S3765B,解密模块4320解密该插件。在步骤S3770B,请求处理器4310将该插件返回给测试驱动应用程序3070。然而,在步骤S3725B和S3730B,如果该插件不是本地可用的(例如,未命中),则插件请求模块4370就经由Web服务接口4400从插件高速缓存服务器3060中请求该插件。在步骤S3730B,Web服务接口4400从插件高速缓存服务器3060中请求该插件。在步骤S3735B,插件高速缓存服务器3060或源服务器3030返回所请求的插件。在步骤S3740B,验证模块4410对返回的所请求的插件进行验证。在步骤S3745A,插件高速缓存控制器3130从高速缓存控制器4400中请求存储指令,并且在步骤S3750B,相应地在插件高速缓存4390中存储返回的所请求的插件。在步骤S3755B,请求处理器4310从插件高速缓存4390中检索出该插件。必要时,在步骤S3760B,解压缩模块4330解压缩该插件,并且在步骤S3765B,解密模块4320解密该插件。在步骤S3770B,请求处理器4310将该插件传送给测试驱动应用程序3070。此外,当满足一个或多个预定条件时,例如当测试项目和/或插件被分别添加到项目高速缓存4360或插件高速缓存4390之后的预定时间量期满时,可以采用高速缓存清除算法退出测试项目和/或插件。
根据通过除了在基于计算机的测试期间的环境变化外还监视应试者进度、应试者表现、网络带宽、网络延迟和服务器响应所反映出的基于计算机的测试期间变化的测试环境,使得用于传送到应试者工作站3000的基于计算机测试的高速缓存变得便利。参照图36,测试驱动应用程序3070还包括:激励处理器4400、高速缓存控制器4410、应试者表现监视器4420、应试者进度监视器4430、网络延迟监视器4440、网络带宽监视器4450和服务器响应监视器4460。响应于测试环境的变化,激励处理器4410调节用于检索测试组件的源或存储在应试者工作站3000上的高速缓冲存储器中的测试组件的量,并且相应地对高速缓存控制器4410发出指令。如图36中所示的环境监视装置包括但不限于,例如:应试者进度监视器4430,其检测测试应试者回答的测试项目的速率;应试者表现监视器4420,其检测测试应试者的能力;网络带宽监视器4450,其检测应试者工作站3000与发布服务器之间的数据传送速度;网络延迟监视器4440,其检测应试者工作站3000与发布服务器之间因网络而造成的延迟时间;以及服务器响应监视器4460,其检测应试者工作站3000与发布服务器之间当服务器延迟时而造成的延迟时间。
提供了根据本发明的基于计算机的测试系统的高速缓存操作的描述。通常,在基于计算机的测试期间,激励处理器4410定期地启动对应试者进度监视器4430、应试者表现监视器4420、网络带宽监视器4450、网络延迟监视器4440和服务器响应监视器4460的询问。每个监视器的结果都被返回给激励处理器4410。根据这些结果,激励处理器4410对正被高速缓存以供传送基于计算机的测试的测试组件的源或者测试组件量进行调节,并且相应地调节高速缓存控制器4400。现在描述测试环境监视器的操作示例,所述测试环境监视器即应试者进度监视器4430、应试者表现监视器4420、网络带宽监视器4450、网络延迟监视器4440、和服务器响应监视器4460。
例如,在基于计算机的测试期间,应试者进度监视器4430对测试应试者在回答测试项目时的速率进行测量以保持测试项目的可用性。图38A示出了应试者进度监视器4430的操作流程图。在步骤S3800A,激励处理器4410启动对应试者进度监视器4430的询问。在步骤S3810A,应试者进度监视器4430检索分配给当前测试部分的测试项目的数量以及分配给每个测试项目的时间,其中所述数量和时间都存储在应试者工作站3000上的考试资源文件(先前描述的)中。在步骤S3815A,应试者进度监视器4430检索测试应试者所回答的测试项目的数量以及测试应试者回答每个测试项目所用的回答时间,其中所述数量和时间都存储在应试者工作站3000上的考试实例文件(先前描述的)中。然后,在步骤S3820A,应试者进度监视器4430计算测试应试者回答测试项目的速率,并且在步骤S3825A,将分配到当前测试部分的测试项目的数量、测试应试者在当前的测试部分中所回答的测试项目的数量以及回答速率返回至激励处理器4410,以用来判断在基于计算机的测试期间对测试应试者而言是否有充足的测试项目池可以使用。在S3830A,根据这些结果,激励处理器4410计算在当前测试部分中剩余的将传送给测试应试者的测试项目的数量。然后,在步骤S3835A,激励处理器4410检索出存储在项目高速缓存4360中的测试项目的数量,并且在步骤S3840A,对当前测试部分中剩余的传送给测试应试者的将被高速缓存的测试项目的数量进行计算。在步骤S3845A,根据回答速率以及剩余的将被高速缓存的测试项目的数量,激励处理器4410判断是否已经需要为了高速缓存而检索附加的测试项目。在步骤S3850A,当已经变得需要对附加测试项目进行检索时,激励处理器4410相应地命令高速缓存控制器4400。否则,在步骤S3855A,继续进行监视。
在另一个示例中,在基于计算机的测试期间应试者表现监视器4420对在回答测试项目的过程中对测试应试者的能力进行检测,以保持适当的测试项目的可用性。图38B示出了应试者表现监视器4420的操作流程图。在步骤S3800B,激励处理器4410启动对应试者表现监视器4420的询问。在步骤S3810B,应试者表现监视器4420对在当前的测试部分中已回答的测试项目的数量、每个测试项目的能力级别以及每个测试项目的得分进行检索,这些都被存储在应试者工作站上的考试实例文件(先前描述的)中。然后,在步骤S3815B,应试者表现监视器4420计算测试应试者的能力级别,并且在步骤S3820B,向激励处理器4410返回应试者能力级别,以用来判断在基于计算机的测试期间测试应试者是否可以获得充足的适当的测试项目池。然后,在步骤S3825B,激励处理器4410检索存储在项目高速缓存4360中的应试者能力级别的测试项目的数量,并且在S3830B,对当前测试部分中传送给测试应试者的剩余的将被高速缓存的应试者能力级别的测试项目的数量进行计算。在步骤S3835B,根据应试者能力级别以及剩余的将被高速缓存的应试者能力级别的测试项目的数量,激励处理器4410判断是否已经变得需要对当前能力级别的附加测试项目进行检索,以进行高速缓存。在步骤S3840B,当已经变得需要对应试者能力级别的附加测试项目进行检索时,激励处理器4410相应地命令高速缓存控制器4400。否则,在步骤S3845B,继续进行监视。
另一个例子是网络带宽监视器4450,其对应试者工作站3000与发布服务器之间的数据传送的速度进行检测,用以及时地保持测试项目的可用性。图38C示出了网络带宽监视器4450的操作流程图。在步骤S3800C,激励处理器4410启动对网络带宽监视器4450的询问。在步骤S3810C,对于应试者工作站3000与发布服务器之间的每次交换,网络带宽监视器4450从Web服务接口4400所生成的日志中检索出如下信息:应试者工作站3000向发布服务器发送请求的时间、发布服务器接收该请求的时间、请求消息的大小、回答发布服务器发送响应的时间、应试者工作站3000接收该响应的时间、以及响应消息的大小。在步骤S3015C,根据这些变量,网络带宽监视器4450计算应试者工作站3000与发布服务器之间的数据传送速度,并且在步骤S3820C,将数据传送速度返回到激励处理器4410,用以确定请求检索测试组件的频率和确定正在传送的测试组件的大小。在步骤S3825C,根据这些结果,激励处理器4410计算网络带宽是否正在增长或降低,然后在步骤S3830C,激励处理器4410相应地对高速缓存控制器4400发布命令。在步骤S3835C,例如,当网络带宽正在变窄时,可以增加数据传送的频率并且可以缩减将被传送的测试组件的大小,以弥补数据传送速度的损失。否则,在步骤S3840C,继续进行监视。
一个附加的例子,网络延迟监视器4440对在基于计算机的测试期间在应试者工作站3000与发布服务器之间的因网络重新建立连通性而造成的数据传输时间上的延迟进行测量。图38D示出了网络延迟监视器4440的操作流程图。在步骤S3800D,激励处理器4410启动对网络延迟监视器4440的询问。对于应试者工作站3000与发布服务器之间的每次交换,在步骤S3810D,网络延迟监视器4440从Web服务接口4400所生成的日志中检索出下列信息:应试者工作站3000向发布服务器发送请求的时间、发布服务器接收该请求的时间、请求消息的大小、回答发布服务器发送响应的时间、应试者工作站3000接收该响应的时间、响应消息的大小、传输重试的次数、以及所接收到的任何网络错误消息。在步骤S3815D,根据这些变量,网络延迟监视器4440计算应试者工作站3000与发布服务器之间因网络而造成的延迟时间,并且在步骤S3820D,将延迟时间返回到激励处理器4410,用以确定网络连通性的状态。在步骤S3825D,激励处理器4410从考试资源文件(先前描述的)中检索出预定容许阈值,并且在步骤S3830D,确定延迟时间接近于容许阈值的比率。接近容许阈值的预定范围内的延迟时间表示即将发生网络连通性失败。在步骤S3835D,在此类失败之前,当测试驱动程序在后台重新连接到冗余网络的同时,激励处理器4410判断是否将充足的已高速缓存的测试组件数量传送给了测试应试者,并且在步骤S3840D,相应地对高速缓存控制器4400发出命令。否则,在步骤S3845D,继续进行监视。
在另一个示例中,服务器响应监视器4460对应试者工作站3000与发布服务器之间因发布服务器而造成的数据传输时间上的延迟进行检测,用以保持测试组件在基于计算机的测试期间对源的可访问性。图38E示出了服务器响应监视器4460的操作流程图。在步骤S3800E,激励处理器4410启动对服务器响应监视器4460的询问。在步骤S3810E,对于应试者工作站3000与发布服务器之间的每次交换,服务器响应监视器4460从Web服务接口4400所生成的日志中检索出如下信息:发布服务器从应试者工作站3000接收请求的时间、回答发布服务器发送响应的时间、重试的次数以及所接收到的任何服务器错误消息。在步骤S3815E,根据这些变量,服务器响应监视器4460计算应试者工作站3000与发布服务器之间因服务器而造成的延迟时间,并且在步骤S3820E,将延迟时间返回到激励处理器4410,用以确定服务器的可访问性的状态。在步骤S3825E,激励处理器4410从考试资源文件(先前描述的)中检索出预定容许阈值,并且在步骤S3830E,确定接近于容许阈值的延迟时间的比率。接近于容差阈值的预定范围内的延迟时间表示服务器可访问性受到限制,并且在步骤S3835E,激励处理器4410相应地对高速缓存控制器4400发出命令。否则,在步骤S3840E,继续进行监视。
本发明不局限于这里所述的实施例。例如,可以将测试驱动应用程序和可高速缓存的测试组件存储在相同的发布服务器上以供传送给测试应试者。此外,发布服务器可以成组地或单独地位于多个远程位置上。此外,测试环境监视器可以包括这里所未具体描述的其它监视器。因此,使用可高速缓存对象来扩展测试驱动应用程序的功能,其中,通过监视测试环境变量而对基于计算机的测试的发送进行自适应,由此所述测试驱动应用程序可以对在动态的分布式网络环境上面向一个或多个测试应试者的基于计算机的测试的发送进行控制。
通过所述详细说明,本发明的许多特征和优点变得明显,因此意在让所附的权利要求涵盖本发明的所有这些特征和优点,并且这些特征和优点都落入本发明的真实精神和范围内。此外,由于本领域的技术人员将容易地想到许多的修改和变形,因此不希望将本发明限于所举例说明和描述的确切结构,所以可以采取属于本发明范围内的所有适当的修改和等效内容。
附件A-UTD类和接口
内容表
内容表………………………………………………………………2
逻辑视图报告………………………………………………………4
逻辑视图……………………………………………………………4
CcomControl………………………………………………………4
CwindowImpl………………………………………………………4
DSADocs.DocDisplay……………………………………………4
DSADocs.docItem…………………………………………………4
DSADocs.docReview………………………………………………4
LAdviseSink………………………………………………………5
IDispatch…………………………………………………………5
IOleClientSite.…………………………………………………5
IOleDocumentImpl.………………………………………………5
IOleDocumentSite…………………………………………………5
IOleDocumentViewImpl……………………………………………6
IOleInPlaceFrame.………………………………………………6
IOleInPlaceObjectWindowlessImpl.……………………………6
IOleInPlaceSite……………………………………………………7
IOleInPlaceUIWindo………………………………………………7
IOleObject…………………………………………………………8
IOleObjectImpl……………………………………………………8
IOleWindow.………………………………………………………8
IPersistStorageImpl……………………………………………8
UTDC.Browser.……………………………………………………10
UTDC.GraphScores…………………………………………………10
UTDC.TimeRemaining………………………………………………10
UTDComm.cCommentNavigation……………………………………10
UTDCore.Collection………………………………………………10
UTDCore.ICompilerServices……………………………………11
UTDCore.cArea……………………………………………………11
UTDCore.cAttribute………………………………………………11
UTDCore..cAttributes……………………………………………11
UTDCore.cCategories……………………………………………11
UTDCore.cCategory………………………………………………12
UTDCore.cEvents…………………………………………………12
UTDCore.cExam……………………………………………………12
UTDCore.cForm……………………………………………………14
UTDCore.cGroup……………………………………………………15
UTDCore.cGroups………………………………!………………16
UTDCorecItem………………………………………………………16
UTDCorecItems……………………………………………………16
UTDCore.cMsgBox…………………………………………………17
UTDCore.cPresentation…………………………………………17
UTDCore.cPresentations…………………………………………18
UTDCore.cRegistry………………………………………………18
UTDCore.cReport…………………………………………………19
UTDCore.cResults…………………………………………………19
UTDCore.cScript…………………………………………………19
UTDCore.cSection…………………………………………………20
UTDCore.cSections………………………………………………21
UTDCore.eDirection………………………………………………21
UrDCore.ePluginModes……………………………………………21
UrDCore.eScoreStatus……………………………………………21
UTDCore.eStates…………………………………………………21
UTDCore.iContainerNotify………………………………………22
UTDCore.iContainerNotifyHelm…………………………………22
UTDCore.iDisplay…………………………………………………22
UTDCore.iHelm……………………………………………………22
UTDCore.iItem…………………………………………………………………23
UTDCore.iNavigate……………………………………………………………23
UTDCore.iPersistInstanceSet………………………………………………24
UTDCore.iPersistInstanceStore……………………………………………24
UTDCore.iPersistInstanceStream…………………………………………24
UTDCore.iPersistResourceSet………………………………………………25
UTDCore.iPersistResourceStore……………………………………………25
UTDCore.iPersistResourceStream…………………………………………25
UTDCore.iPlugin………………………………………………………………25
UTDCore.iReport………………………………………………………………26
UTDCore.iResults……………………………………………………………26
UTDCore.iScore………………………………………………………………26
UTDCore.iSelection…………………………………………………………27
UTDCore.iUnitTimer…………………………………………………………27
UTDP.StandardTimer…………………………………………………………28
UTDP.cBrowerDisplay…………………………………………………………28
UTDP.cLinearNavigate………………………………………………………28
UTDP.cMutliChoiceItem………………………………………………………28
UTDP.cNextPrevious…………………………………………………………29
UTDP.SequentialExhastive…………………………………………………29
UTDP.cSummaryScore…………………………………………………………29
UTDP.cUserSelection…………………………………………………………29
UTDPE.cChallenge……………………………………………………………29
UTDPE.cSLSDeliResult………………………………………………………29
UTDPE.cStandardReview…………………:…………………………………29
UTDPE.cStandardScoreReport………………………………………………29
UTDPE.cWTDResults……………………………………………………………29
cActivePlugin…………………………………………………………………29
cContainerFrameT……………………………………………………………29
cDocumentSiteT………………………………………………………………29
cEvent………………………………………………………………………30
cFormGroup…………………………………………………………………30
cPlugInT……………………………………………………………………30
cPlugin……………………………………………………………………30
cScreenMinimum……………………………………………………………30
cTemplate…………………………………………………………………31
iAppointment………………………………………………………………31
iLaunch……………………………………………………………………31
iLaunch2……………………………………………………………………31
iPrint………………………………………………………………………31
iTransfer…………………………………………………………………31
总计::……………………………………………………………………32
逻辑分组结构………………………………………………………………32
逻辑视图报告
逻辑视图
CComControl
从CwindowImpl中导出
公共操作:
CComControl():CComControl
FireOnRequestEdit(displD:DISPID):HRESULT
FireOnChanged(dispID:DISPID):HRESULT
CreateControlWindow(hWndParent:HWND,rcPos:RECT&):HWND
ControlQuerylnterface(iid:const IID&,ppv:void**):HRESULT
CWindowImpl
CWindowImpl允许你创建新的窗口或者对现有窗口的子类
公共操作:
m-hWnd:
公共操作:
Create():
创建窗口
DefWindowProc():
提供缺省消息处理
GetWndClassInfo():
返回CWndClasslnfo的静态实例,所述CwndClasslnfo管理窗口类信息
SubclassWindow():
对窗口进行子分类
UnsubclassWindow():
还原先前子分类的窗口
WindowProc():
处理发送到窗口的消息
GetWindowProe():
返回当前窗口程序
GetCurrentMessage():
返回当前消息
OnFinalMessage():
在接收到最后的消息(典型的WM_NCDESTREOY)后调用
DSADocs.DocDisplay
DSA介绍和显示屏。被修改以支持新的接口。
DSADocs.docItem
DSA多选项目。进行图解的和文本干扰项目。处理画外音和BSL。
被修改以支持新的接口。
DSADocs.docReview
DSA查阅屏。被修改以支持新的接口。
IAdviseSink
公共操作:
OnViewChange(dwAspect:DWORD,lindex:LONG):void
通知对象的视图已经改变
OnRename(pmk:IMoniker*):void
通知对象名已经改变
OnSave():void
通知已经将对象保存到磁盘
OnClose():void
通知对象已经关闭
IDispatch
用于所有UTDCore COM接口的基本类。
IOleClientSite
公共操作:
SaveObject():HRESULT
保存嵌入的对象。
GetMoniker(dwAssign:DWORD,dwWhichMoniker:DWORD,ppmk:[Moniker**):HRESULT
请求对象的名字
GetContainer(ppContainer:LPOLECONTAINER*)HERSULT
请求指向对象容器的指针
ShowObject():HRESULT
要求容器显示对象
OnShowWindow(fShow:BOOL):HRESULT
当对象变得可视或不可视时通知容器
RequestNewObjectLayout():HRESULT
要求容器调整显示位置的大小
IOleDocumentImpl
公共操作:
CreateView(pIPSite:IOleInPlaceSite*,pstm:IStream,dwReserved:DWORD,ppView:IoleDocumentView**):
EnumViews(ppEnum:IEnumOleDocumentViews**,ppView:IOleDocumentView**)):
GetDocMiscStatus(pdwStatus:DWORD*):
IoleDocumentSite
公共操作:
ActivateMe(pViewToactivate:IOleDoeumentView*)HERSUL
激活OLE文档对象
IOleDocumentViewImpl
公共操作:
SetInPlaceSite(pIPSite:IOleInPlaceSite*):
GetInPlaceSite(ppIPSite:IOleInPlaceSite**):
GetDocument(ppunk:lUnknown**):
SetRect(preView:LPRECT):
GetRect(preView:LPRECT):
SetRectComplex(preView:LPRECT,preHSroll:LPRECT,preVSroll:LPRECT,preSizeBox:LPRECT):
Show(fShow:BOOL):
UIActivate(fUIActivate:BOOL):
Open():
CloseView(dwReserved:DWORD)
SaveViewState(pstm:LPSTREAM):
ApplyViewState(pstm:LPSTREAM):
Clone(pIPSiteNew:IOleInPlaceSite*,ppViewNew:IOleDocumentView**):
ActiveXDocActivate(iVerb:LONG):
IOleInPlaceFrame
从IOleInPlaceUIWindow导出
公共操作:
InsertMenus(hmenuShared:HMENU,IpMenuWidths:LPOLEMENUGROUPWIDTHS):HRESULT
允许容器插入菜单
SetMenn(hmnuShared:HMENU,holemenu:HOLEMENU,hwndActiveObject:HWND):HRESULT
将复合菜单添加至窗口框架
RemoveMenus(hmenuShared:HMENU):HRESULT
去掉容器的菜单元素
SetStatusText(pszStatusText:LPCOLESTR):HRESULT
设置并显示有关状态文本
EnableModeless(fEnable:BOOL):HRESULT
启动或者禁止无模式对话栏
TranslateAccelerator(Ipmsg:LPMSG,wID:WORD):HRESULT
翻译键击
IOleInPlaceObjectWindowlessImpl
////////////////////////////////////////////
IOleInPlaceObjectWindowlessImpl
公共操作:
AddRef(:void):ULONG
QueryInterface(riid:const IID&,ppvObject:void**):HRESULT
Release(:void):ULONG
UIDeactivate(:void):HRESULT
GetWindow(pbwnd:HWND*):HRESULT
ContextSensitiveHelp(:BOOL):HRESULT
InPlaceDeactivate(:void):HRESULT
SetObjectRects(prcPos:LPCRECT,preClip:LPCRECT):HRESULT
ReactivateAndUndo(:void):HRESULT
OnWindowMessage(msg:UINT,wParam:WPARAM,IParam:LPARAM,plResult:LRESULT*):HRESULT
GetDropTarget(:IDropTarget**):HRESULT
IOleInPlaceSite
从IOleWindow导出
公共操作:
CanInPlaceActivate():HRESULT
确定容器是否能够激活现场的对象。
OnInPlaceActivate():HRESULT
通知容器其对象之一正在现场被激活。
OnUIActivate():HRESULT
通知容器该对象即将被在现场激活,并且主菜单将被复合菜单替换
GetWindowContext(ppFrame:IOleInPlaceFrame:IOleInPlaceUIWindow**,IprcPosRect:
LPRECT,IpreClipRect:LPRECT,IpFrameInfo:LPOLEINPLACEFRAMEINFO):HRESULT
启动现场对象以检索在窗口对象体系形成的窗口界面,以及检索在父窗口中的位置以定位对象的现场激活窗口
Scroll(scrollExtent:SIZE):HRESULT
指定像素数目,通过所述像素存储器对对象进行卷屏
OnUIDeactivate:BOOL):HRESULT
通知容器重新设置它的用户界面并取焦点。
OnInPlaceDeactivate():HRESULT
通知容器对象不再在现场激活
DiscardUndoState():HRESULT
指示容器放弃它的撤消状态。
DeactivateAndUndo():HRESULT
无效该对象并且回复到撤消状态。
OnPosRectChange(IprePosRect:LPCRECT):HRESULT
对象的范围已经变化
IOIeInPlaceUIWindow
从IOleWindow导出
公共操作:
GetBorder(IprectBorder:LPRECT):HRESULT
指定用于工具栏和控件的RECT结构。
RequestBorderSpace:LPCBORDERWIDTHS):HRESULT
确定工具是否可以被安装在对象的窗口框架周围。
SetBorderSpace(pborderwidths:LPCBORDERWIDTHS):HRESULT
分配边界的间隔。
SetActiveObject(pActiveObject:IOleInPlaceActiveObject*,pszObjName:LPCOLESTR):HRESULT
在对象和各个文件和框窗口之间提供直接通信。
IOleObject
公共操作:
AddRef(:void):ULONG
QueryInterface(riid:const IID&,ppvObject:void**):HRESULTRelease(:void):ULONG
SetExtent(dwDrawAspect:DWORD,psizel:SIZEL*):HRESULT
GetExtent(dwDrawAspect:DWORD,psizel:SIZEL*):HRESULT
SetClientSite(pClientSite:IOleClientSite*):HRESULT
GetClientSite(ppClientSite:IOleClientSite**):HRESULT
SetHostNames(:LPCOLESTR,:LPCOLESTR):HRESULT
Close(dwSaveOption:DWORD):HRESULT
SetMoniker(:DWORD,:IMoniker*):HRESULT
GetMoniker(:DWORD,:DWORD,:IMoniker**):HRESULT
InitFromData(:IdataObject*,:BOOL,:DWORD):HRESULT
GetClipboardData(:DWORD,IDataObject**):HRESULT
DoVerb(iVerb:LONG,:LPMSG,:IOleClientSite*,:LONG,
hwndParent:HWND,lprcPosRect:LPCRECT):HRESULT
EnumVerbs(ppEnumOleVerb:IEnumOLEVERB**):HRESULT
Update(:void):HRESULT
IsUpToDate(:void):HRESULT
GetUserClassID(pClsid:CLSID*):HRESULT
GetUserType(dwFormOfType:DWORD,pszUserType:LPOLESTR*):HRESULT
Advise(pAdvSink:IAdviseSink*,pdwConnection:DWORD*):HRESULT
Unadvise(dwConnection:DWORD):HRESULT
EnumAdvise(ppenumAdvise:IEnumSTATDATA**):HRESULT
GetMiscStatus(dwAspect:DWORD,pdwStatus:DWORD*):HRESULT
SetColorScheme(:LOGPALETTE*):HRESULT
IOleObjectImpl
公共操作:
AddRef(:void):ULONG
QueryInterface(riid:const IID&,ppsObject:void**):HRESULTRelease(:void):ULONG
SetExtent(dwDrawAspect:DWORD,psizel:SIZEL*):HRESULT
GetExtent(dwDrawAspect:DWORD,psizel:SIZEL*):HRESULT
SetClientSite:(pCientSite:IOleCientSite*):HRESULT
GetAientSite:(ppCientSite:IOleCientSite**):HRESULT
SetHostNames(:LPCOLESTR,:LPCOLESTR):HRESULT
Close(dwSaveOption:DWORD):HRESULT
SetMoniker(:DWORD,:IMoniker*):HRESULT
GetMoniker(:DWORD,:DWORD,:IMoniker**):HRESULT
InitFromData(:IdataObject*,BOOL,:DWORD):HRESULT
GetClipboardData(:DWORD,:IDataObject**):HRESULT
DoVerbPrimary(prcPosRect:LPCRECT,hwndParent:HWND):HRESULT
DoVerbInPlaceActivate(prcPosRect:LPCRECT,:HWND):HRESULT
DoVerbShow(prcPosRect:LPCRECT,:HWND):HRESULT
DoVerbUIActivate(prcPosRect:LPCRECT,:HWND):HRESULT
DoVerbHide(:LPCRECT,:HWND):HRESULT
DoVerbOpen(:LPCRECT,:HWND):HRESULT
DoVerbDiscardUndo(:LPCRECT,:HWND):HRESULT
DoVerb(iVerb:LONG,:LPMSG,IOleClientSite*,:LONG,hwndParent:HWND,lprcPosRect:LPCRECT):HRESULT
EnumVerbs(ppEnumOleVerb:IEnumOLEVERB**):HRESULT
Update(:void):HRESULT
IsUpToDate(:void):HRESULT
GetUserClasslD(pClsid:CLSID*):HRESULT
GetUserType(dwFormOfType:DWORD,pszUserType:LPOLESTR*):HRESULT
Advise(pAdvSink:LAdviseSink*,pdwConnection:DWORD*):HRESULT
Unadvise(dwConnection:DWORD):HRESULT
EnumAdvise(ppenumAdvise:IEnumSTATDATA**):HRESULT
GetMiscStatus(dwAspect:DWORD,pdwStatus:DWORD*):HRESULT
SetColorScheme(:LOGPALETTE*):HRESULT
IOleWindow
公共操作:
GetWindow(phwnd:HWND*):HRESULT
获得窗口处理。
ContextSensitiveHelp(fEnterMode:BOOL):HRESULT
上下文相关帮助的控件使能。
IPersistStorageImpl
公共操作:
AddRef(:void):ULONG
QueryInterface(riid:const IID&,ppvObject:void**):HRESULT
Release(:void):ULONG
GetClassID(pClassID:HRESULT
IsDirty(:void):HRESULT
Load(pStorage:IStorage*):HRESULT
Save(pStorage:IStorage*,fSameAsLoad:BOOL):HRESULT
InitNew(:istorage*):HRESULT
SaveCompleted(:IStorage*):HRESULT
HandsOffStorage(:void):HRESULT
专用操作:
IPSI GetIPersistStreamInit():IPersistStreamInit*
UTDC.Browser
UTD浏览器控件是被自定义为浏览器控件的Active X控件,其由于安全原因被锁定并且支持来自UTDCore的脚本对象。
公共属性:
Registry:IRegistry*
返回登记对象的单个实例。只读。
公共操作:
get_AllowPOLESS():
获得AllowPOLESS标志
put_AllowPOLESS():
设置AllowPOLESS标志
get_AllowFile():
获得AllowFile标志
put_AllowFile():
设置AllowFile标志
get_AllowURL():
获得AllowURL标志
put_AllowURL():
设置AllowURL标志
get_RelativeFontSize():
获得相对字号
put_RelativeFontSize():
设置相对字号
LoadURL 0:
浏览来自字符串的URL
Load 0:
加载来自流的浏览器
get_oExam():
获得oExam对象
put_oExam():
设置oExam对象
get_oSection():
获得oSection对象
put_oSection():
设置oSection对象
get_opresentation():
获得opresentation对象
put_opresentation():
设置opresentation对象
get_oItem():
获得oItem对象
put_oItem():
设置oItem对象
get_oForm():
获得oFrom对象
put_oForm():
设置oFrom对象
get_oAppointment():
获得oAppointment对象
put_oAppointment():
设置oAppointment对象
get_Scrollbars():
获得Scrollbars标志
put_Scrollbars():
设置Scrollbars
get-Document():
获得文档对象
Show():
使得浏览器可视
Hide():
隐藏浏览器控件
Unload():
卸载浏览器控件
Refesh():
刷新浏览器控件中的页面
UTDC.GraphScores
UTD部分得分控件。该控件显示一个得分或者多个得分的条形图。如果来自HTML的请求被传送到UTDC.brower控件,那么此控件将运行。
这可以是:
单个得分对传送,
由部分得分,或者每个分类的得分。
布鲁斯
UTD C.TimeRemaining
这可以是表示剩余时间的可视控件。它可以被配置以表示用于部分或者测验或者这两者的最小值的剩余时间。它可以被配置为当时间到期时闪现(flash)或提示消息。时点和消息是可配置的。
它应当是可来自HTML的脚本。
UTDComm.cCommentNavigation
导航将测试驱动程序放入注解周期模式并且对该部分重新导航,所述部分也表示在注解时期的任何陈述。
UTDCore.Collection
基本UTD集合。所有的其他的集合类遵循此设计。
公共属性:
Count:Long
返回集合中的成员的数目。
_NewEnmn:**
返回Visual Basic计数器对象.
公共操作:
Item(Index:Variant):Variant
通过位置或键返回集合对象的指定成员。
UTDCore.ICompilerServices
提供极好的特征给插件。
公共属性:
sResourceDirectory:BSTR
获得当前正被编译的资源文件的目录。
只读。
sSoureeDirectory:BSTR
获得当前正被编译的源文件的目录。
只读。
公共操作:
ParseHTML(sSourceFile:BSTR):BSTR
将源文件加载到mshtml中,并且消除除指定标志<div>之外所有的在<body>中的内容。
C:\EXAM\ITEMBANK.HTM
<div id=″Schmackaroo″>
……此处若干HTML……
</div>
Parse(″C:\EXAM\1TEMBANK.HTM&num;Schmackaroo″)返回″……此处若干HTML…….″
UTDCore.cArea
在模板中用于插件的区域
这里没有IArea接口。
从cDocumentSiteT导出,UTDCore.iContainerNotify
公共属性:
bContained:Boolean
如果为TRUE(真),则插件作为有效文档包含在该区域中。如果为FALSE(假),则它是浮动窗。通常全屏。
nTop:Integer
顶坐标。如果不包含则为零。
nLeft:Integer
左坐标。如果不包含则为零。
nWidth:Integer
容器的宽度。如果不包含则为零。
nHeigth:Integer
容器的高度。如果不包含则为零。
oPluginClass:cPlugin
用于该窗口的插件类。
oPluginActive:UTDCore.
如果插件类是有效的,那么这是面向其的iPlugin接口。
sSize:String
在分轴上的区域大小。可以是百分数、像素计数或者*。
UTDCore.CAttribute
公共属性:
sName:BSTR
获得属性名字符串
value:VARIANT
获得属性值。
UTDCore.cAttributes
UTDCore.CAttribute的集合
从UTDCore.Collection导出
UTDCore.CCategories
UTDCore.cCategory的集合
从UTDCore.Collection导出
UTDCore.cCategory
部分或项目的类别。例如:″Reporting(报告)″,″Objectivies(客观性)″,″Scoring(得分)″
公共属性:
sName:String
类别名。
bComplete:Boolean
如果为TRUE(真),则类别必须包含在级别定义的所有的部分或项目。
bDuplicate:Boolean
如果为TRUE(真),则类别允许定义在多于一层中的部分或项目。
sDescription:string
类别的描述。
colmenbers:UTDCore.cEvents
应用于该类别的部分或项目的集合。
colSubCategories:UTDCore.cCategories
UTDCore.cCategory的集合。(AKA子类别)。
eContents:eCategoryContents
只读。在colMembers中的成员的可允许类型。
enum{
eCategoryContent_Anything=(),
eCategoryContent_Section=1,
eCategoryContent_Item=2,
eCategoryContent_Categories=3,
};ecategoryContents;
专用属性:
oScore:UTDCore.iScore
用于表格的得分插件。
UTDCore.cEvents
IEvents包含可传送的类作为Idispatch对象。必须对它们分别地查询以确定它们的确切类型。
Ievents可以是:cExam,cForm,cSection,cItem,cPresentation,cReport,cResults。
从UTDCore.Collection导出
UTDCore.cExam
测验实例。驱动程序曝露类的根对象。
从cContainerFrameT导出
公共属性:
sName:String
只读测试名。
sLanguage:String
测试内容的语言。只读。
sVersion:String
测试的版本。只读。
oActiveFonm:UTDCore.cForm
当前表格。对于一个测试来说仅有一个表格有效。
eStatus:eExamStatus
eExamStatus如下:
cExam_Initializing
cExam_Starting
cExam_InProgress
cExam_Ended
cExam_Terminating
bShowResponseComment:Boolean
如果为TRUE(真),那么在注解期间应试者不应当看到它们的相应响应。
colCustomAttributes:UTDCore.cAttributes
自定义属性的集合。只读。
sTitle:String
测试标题。只读。
colCategories:UTDCore.cCategories
所有类别的集合。
oResourceRoot:Object
对POLESS资源文件的根存储的只读引用。接口:POLESS.cStorageRoot,iStorage,iRootStorage,iStorageVB。
oInstanceroot:Object
对POLESS测试实例文件的根存储的只读引用。接口:POLESS.cStorageRoot,iStorage,iRootStorage,iStorageVB。
colTemplates:UTDCore.cTemplates
所有在资源文件中定义的模板的集合。保留在测试级别的所有模板的全集(flat colloction)。
colItemsChosen:UTDCore.cItems
在测试树的任意级别处通过选择插件返回所有被选择的项目,以便对它们进行选择。这些是已经被传送或者将被传送的项目。
colAlISections:UTDCore.cSections
传送传送项目
在测试树的任意级别处通过选择插件返回所有被选择的项目,以便对它们进行选择。这些是已经被传送或者将被传送的项目。
oRegistry:UTDCore.CRegistry
返回注册对象的单个实例。只读。
专用属性:
oFormGroup:cFormGroup
表单组,可以从中选择。
公共操作:
Minimize():
最小化UTD的主窗口。可以同时调用以使得UTD退出。
Restore():
还原UTD的主窗口。可以同时调用以将UTD恢复到屏幕。
GetScript():UTDCore.cScript
返回将由插件使用的脚本对象。
SaveInstance():
将测试驱动程序的状态保存至实例文件。所有有效对象被要求自行串行化(serialize)至实例文件。
引用该对象的任一(文件)可以启动该进程。其应当是希望保存用户交互和状态信息的项目插件。
驱动程序将保存在各个演示页之间。GetTransfer():ITransfer返回UAS Transfer对象以传送结果或其它文件至数据中心。
cExam对象不保持对该对象的引用。
GetPrint():IUASPrint
返回UAS打印对象以保存重新打印得分和其它报告。
cExam对象不保持对该对象的引用。
FatalError:Long,sSource:String,sDescription:String):
向测试驱动程序报告插件中的错误
通常错误将经由HERSULT报告返回到测试驱动程序并支持IErrorInfo。如果错误是由除了测试驱动程序初始化调用之外的原因而生成的,那么插件应当通过这种方法报告错误。
示意性用途应当是用户在你的插件项目上点击按钮。所产生的动作产生了错误。
Trace(INumber:Long,sSource:String,sDescription:String)
报告插件中的事件给测试驱动程序。
Warn():
写”warning(警告)”级别追踪消息至实例文件。
Info():
写”information(信息)”级别追踪消息至实例文件。
Start():
告知测试,应试者已经接受测试并且开始测试。通常由导航插件调用以响应eDirection_start。
管理系统被告知,测试已经开始并且应试者已经接受了测试。
Quit():
告诉测试,应试者正在退出测试。通常由导航插件调用以响应eDirection_Quit。导航插件应当让应试者确认该决定。
这使得测试驱动程序停止传送,并且干净地关闭执行。管理系统被告知应试者退出了测试。GetMsgBox():UTDCore.CMsgBox返回消息框对象。
UTDCorec.cForm
测试表格。
从UTDCore.IContainerNotifyhelm导出
公共属性:
oCurSection:UTDCore.cSection
测试中的当前有效部分。只读。
colChildren:UTDCore.cEvents
所有测试的顶级部分的集合。只读。
colCustomAttributes:UTDCore.cAttributes
自定义属性的集合。只读。
sName:String
只读表格名。
sTitle:String
表格标题。只读
colItemsChosen:UTDCore.cItems
在测试中所有被选项目(即,由选择插件返回的)的集合。
这与它们的部分无关。
colAllSections:UTDCore.cSections
与级别无关的、测试的所有部分的集合。
datStart:Date
表格开始日期和时间。
datFinish:Date
表格结束日期和时间。
oTimer:UTDCore.iTimer
表格的定时器。
oScore:UTDCore.iScore
表格的得分插件。
fTimerFactor:Single
基于ADA条件的多个用于测试定时器。
sVersion:String
表格的版本。
colDelivered:UTDCore.cEvents
表格的所有传送的顶级部分的集合。只读。
nCurChild:Long=0
在colDelivered中的最近传送事件的索引。只读。
eStatus:eScoreStatus
返回oForm.oScore.eStatus的值。
colAllPresentations:UTDCore.cPresentations
与测试级别无关的、测试的所有表示的集合。
colPresentationsChosen:UTDCore.cPresentations
测试中选择的所有表示(即,由选择插件返回)的集合。这与它们的部分或组无关。
colSectionsChosen:
在测试中选择的所有部分(即,由选择插件返回)的集合。这与它们的级别无关。
ColAllItems:
与测试级别无关的、测试的所有项目的集合。
colAllGroups:
与测试级别无关的、测试的所有组的集合。
colAllGroupsChosen:
在测试中选择的所有组(即,用于该组的选择插件已经被Reset())的集合。这与它们的级别无关。
公共操作:
SectionNext():
请求驱动程序前进到下一部分或者得分报告或者结果写入或者注释周期。
SectionPrevious():
请求驱动程序前进到上一个部分或者得分报告或者结果写入或者注释周期。这通常是非法的并将不被定义的导航插件所允许。
SectionGoto(Section:Variant)
请求驱动程序前进到命名的或用数字标记的部分或得分报告或者结果写入或者注释周期。
datMinRemaining():
该测试所剩下的最小时间。
UTDCore.cGroup
公共操作:
sName:String
只读组名。
sTitle:String
只读组标题。
colCustomAttributes:UTDCorecAttributes
自定义属性的集合。只读。
colChildren:UTDCore.cEvents
该组的表示、子部分、或子分组的集合。
oScoring:UTDCore.iScore
用于部分的得分插件。
colDelivered:
该组内包含所有传送事件的表示或子部分的集合。这将不包含子组。
oSelection:UTDCore.iSelection
指向该组的当前选择插件的指针。
oSection:UTDCore.CSection
包含该组的部分。
UTDCore.cGroups
UTDCore.cGroup的集合
从UTDCore.Collection导出
UTDCore.cItem
项目的通用信息。资源(stuff)不是插件指定的。
该类实现IcItem和IItem接口。
从UTDCore.iItem导出
公共属性:
bPresented:Boolean=False
如果已经将项目显示给应试者应试者,那么为TRUE真。由项目组件设置。
sName:String
只读项目名。
sTitle:String
演示页标题。只读。
oScriptStart:UTDCore.cScript
在该对象执行之前执行的脚本。
oScriptFinish:UTDCore.CScript
在该对象执行之后执行的脚本。
oScriptConditional:UTDCorec.cScript
评估该表达脚本。如果为TRUE(真)那么该对象被传送。
fweight:Double=1
该项目相对于其它项目的权值。通常为1,如果需要每个项目的多个权值,那么它们可以附接到自定义属性中。权值可以是负数。
colCustomAttributes:UTDCore.CAttributes
自定义属性的集合。只读。
ISeconds:Long
花费在项目上的秒。
bScored:Boolean=TRUE
只读。如果该项目将被得分,则为TRUE(真)
如果为FALSE(假)那么fWeight和fScoreCanidateWeighted将是0。
bSkipAllowed:Boolean
只读属性。如果TRUE(真)那么项目将被跳过。如果TRUE(真)那么将不调用在iItem接口上的bProceed()方法。
fSeoreCanidateWeighted:Double
该项目应试者的加权值。该项目的判断值将乘以该值的权值。
sPluginName:String
只读插件名。插件的prog ID。
oSection:UTDCore.cSection
项目所传送的部分的只读属性。
oPresentation:UTDCore.cPresentation
项目所传送的表示的只读属性。
datElapsed:DATE
花费在项目上的时间。与ISeconds一样,但是不同的COM类型。
UTDCore.cItems
UTDCore.cItem的集合
从UTDCore.Collection导出
UTDCore.cMsgBox
该类显示带有应试者提示的消息框、该类从IExam::GetMsgBox()返回。框中的消息通过调用提供。可选地提供标题。按钮由调用函数提供,但是按钮标签由资源文件中测试级别来定义。
消息框的父级是主测试窗口。消息框可以被设置为在一段期间之后超时。
公共属性:
sTitle:String=UTDCore
消息框将使用的标题。读/写。
ITimeout:LONG=120
以秒计的消息框上的超时值。读/写。
显示将返回eMsgBoxResult_Timeout。
nParentHWnd:Integer
父窗口处理读/写。
默认是主UTDCore窗口。
公共操作:
Display(sPrompt:String,eStyle:eMsgBoxStyles):eMesBoxResult
显示消息框。显示所请求的按钮和所提供的消息。
返回值是
enum{
eMsgBoxResult_OK=1,
eMsgBoxResult_Cancel=2,
eMsgBoxResult_Abort=3,
eMsgBoxResult_Retry=4,
eMsgBoxResult_Ignore=5,
eMsgBoxResult_Yes=6,
eMsgBoxResult_No=7,
eMsgBoxResult_Timeout=8
}eMsgBoxResult;
消息框的样式。
enum{
eMsgBoxStyle_OKOnly=0,
eMsgBoxStyle_OKCancel=1,
eMsgBoxStyle_AbortRetryIgnore=2
eMsgBoxStyle_YesNoCancel=3,
eMsgBoxStyle_YesNo=4,
eMsgBoxStyle_RetryCancel=5,
eMsgBoxStyle_Critical=16,
eMsgBoxStyle_Question=32,
eMsgBoxStyle_Exclamation=48,
eMsgBoxStyle_Information=64,
eMsgBoxStyle_ApplicationModal=0,
eMsgBoxStyle_SystemModal=4096,
}eMsgBoxStyles;
UTDCore.cPresentation
演示页的数据和当前状态。可以是项目或显示。
从cEvent导出,UTDCore.iContainerNotifyHelm
公共操作:
bCountPresentation:Boolean
如果为TRUE(真),那么演示页应当计算部分的X或Y的总数。“the item count”(该项目的计数)
colCustomAttribntes:UTDCore.cAttributes
自定义属性的集合。只读。
sName:String
只读演示页名。
sTitle:String
演示页标题。只读。
oSeriptStart:UTDCore.cScript
在该对象执行之前执行的脚本。
oScriptFinish:UTDCore.cScript
在该对象执行之后执行的脚本。
oSeriptConditional:UTDCore.cScript
该表达脚本被评估。如果TRUE(真),那么该对象被传送。
sComment:String
用户输入的对该演示页的注释。
bMarked:Boolean
如果已经为稍后的查阅对项目做出标记则为真。由舵设置。
colChildren:UTDCore.cEvents
在该演示页中的项目。
该集合可以为空。
bSelected:Boolean
如果演示页或者演示页的任意项目已经被选择插件选择用以传送,那么TRUE(真)。
只读。
公共操作:
FindIcItem(pIItem:IItem*):IcItem*
查找给定IItem的IcItem接口。
如果IItem不在演示页中那么返回失败。
UTDCore.cPresentations
UTDCore.cPresentation的集合
从UTDCore.Collection导出
UTDCore.cRegistry
允许注册表查询以便翻译字符串
例如:将
<base href=″%REG:DSAGRAPGHICS″>
翻译成
<base href=″V:\DSA\″>
参见[HKEY_LOCAL_MACHINE\SOFTWARE\Prometric\UTD\Keywords]
公共操作:
Lookup(sKey:String):String
通过在注册表中查找关键字以检索字符串并返回该值来
Translate(sInString:String):String
将出现的每个%REG:x%翻译成注册表中等效的″x”。
UTDCore.cRreport
得分报告″section(部分)″。
从cEvent导出
公共属性:
oScoreReport:UTDCore.iScore
得分报告插件。
UTDCore.cResult
结果写入″section(部分)″
从cEvent导出
公共属性:
oResults:UTDCore.iResults
写入结果的插件。
UTDCore.cScript
以VBscript或JScript写的脚本,以便由ActiveX脚本引擎执行或评估。该对象将UTD对象暴露给脚本代码。这些对象将基于提供给该对象的“父”对象的范围。
所有的脚本会看到oExam,oForm,和oCandidate。
如果父对象是部分对象,那么该脚本也将看到oCurSection。
如果父对象是演示页对象,那么该脚本也将看到oCurSection和oCurPresentation。
如果父对象是项目,那么该脚本也将看到oCurSection,oCurPresentation,和oCurItem。
公共属性:
oParent:Object
父UTD对象。它可以是表格,部分或演示页。
公共操作:
Execute(sScript:BSTR)
执行在sScript参数中传送的脚本代码。
EvaluateBool(sScript:BSTR):Boolean
评估作为sScript参数解析的演示页。返回TRUE或FALSE。
如果代码不是返回布尔的表达式,那么产生错误。
EvaluateVar(sScript:BSTR):Variant
评估在sScript中传送表达式。根据脚本返回类型返回变量。如果代码不是表达式,那么产生错误。
SetScope(oSection:ISection*,oPresentation:IPresentation*,oItem:IItem*):
设置父部分,演示页,和项目。脚本将作为oCurSection,oCurPresentation,and oCurItem对象来访问。任一/所有都可以作为NULL参数传送,表示该脚本不能访问该指定对象。
AddObject(sName:BSTR,pObject:IDispatch*):HRESULT
增加对象到全局脚本范围中。
受保护的操作:
LoadGlobalScript(oStream:POLESS.IcStorage)
由测试驱动程序调用,以对全部最近脚本通用的全局脚本进行初始化。
这将由所有cScript的实例共享。
oStorage参数是包含属性集和包含全局脚本的流的存储器。
UTDCore.cSection
表示一个测试部分或子部分。可以包含项目或部分。
从cEvent导出
公共属性:
oNavigation:UTDCore.iNavigate
该部分的导航插件。
colCustomAttributes:UTDCore.cAttributes
自定义属性的集合。只读。
sName:String
只读部分名。
sTitle:String
部分标题。只读。
oScoring:UTDCore.iScore
部分的得分插件。
oScriptStart:UTDCore.cScript
在该对象执行之前执行的脚本。
oScriptFinish:UTDCore.cScript
在该对象执行之后执行的脚本。
oScriptConditional:UTDCore.cScript
该演示页脚本被评估。如果TRUE(真),那么该对象被传送。
oReview:UTDCore.cPresentation
该部分的查阅演示页。如果该部分不具有为其定义的查阅那么可以是空(nothing)。
oCurChild:Object
正被传送的当前子结点。这可以是cSection或者cPresentation。
datStart:Date
该部分开始日期和时间。
datFinish:Date
该部分结束日期和时间。
colChildren:UTDCore.cEvents
该部分演示页或子部分的集合。
oSelection:UTDCore.iSelection
该部分的选择插件。
oTemplate:UTDCore.cTemplate
该部分的模板。
oTimer:UTDCore.iTimer
该部分的计时器插件。
dtTimeRemaining:DATE
返回该部分剩余的时间。从iTimer插件中获得剩余的秒。然后将其转换成变量DATE类型(aka VT_DATE)。
colDelivered:UTDCore.cEvents
已经演示的部分的演示页或子部分的集合。
它们按照它们出现的顺序排序。
bComment:Boolean=FALSE
部分的注解模式。通常由导航设置。
bltemsReadOnly:Boolean=FALSE
部分中项目的只读模式。通常由导航设置。只读项目无法使其响应改变。
NcurChild:long=0
在colDelivered中最后传送的事件索引。只读。
公共操作:
ChildNext():
请求驱动程序前进到下一个演示页或子部分。
ChildPrevious():
请求驱动程序前进到先前演示页或子部分。
ChildGoto(vPresentation:variant):
请求驱动程序前进到命名的或者标记序号的演示页或子部分。
UTDCore.cSections
UTDCore.cSection的集合
从UTDCore.Collection导出
UTDCore.eDirection
从演示页前进的可能方向的枚举
值:
eDirection_next
eDirection_previous
eDirection_TimeoutImmedidate(现在不等待)
eDirection_TimeoutAfter(在当前演示之后)
eDirection_Review(到查阅演示页)
eDirection_Jump(到特定演示页)
eDirection_Flag
eDirection_Help
eDirection_FirstIncomplete
eDirection_FirstSkipped
eDirection_FirstPresentation
UTDCore.ePluginModes
有效文档表现出的可能模式的枚举
值:
ePluginMode_Author(不支持)
ePluginMode_Compile
ePluginMode_Delivery
ePluginMode_Rescore(不支持)
ePluginMode_ProcessResults(不支持)
UTDCore.eScoreStatus
由得分插件确定的、用于表格/部分/组/类别的得分状态。
eScore_Incomplete
eScore_Complete
eScore_Failure
eScore_Pass
eScore_Taken
UTDCore.eStates
测试驱动程序的状态。
eStateStart-初始化测试驱动程序&读取资源文件。
eStateSectionDelivery-传送部分。
eStateSectionComment-注释所有部分。
eStateSectionFeedBack-在所有部分上反馈。
eStateScoreReporting-再现并打印得分报告。
eStateResults-写结果。
eStateFinish-关闭测试驱动程序。
UTDCore.iContainerNotify
所有插件接收该接口的参考。它允许它们报告事件给容器。
公共操作:
Activated():
调用以表示插件已经接收了演示页的改变并且它完全准备好进行操作。
这包括:处理其数据并且如果可视则进行显示。
UTDCore.IContainerNotifyHelm
插件使用该接口来告知容器进行导航。
公共操作:
RequestMove(eDirect:UTDCore.eDirection,sPresentation:String)请求驱动程序按指定方向前进。驱动程序接下来从导航插件请求该动作。
第二参数选项指定演示页。这仅仅用于JUMP。
UTDCore.iDisplay
由插件支持的界面,标题栏处理、显示、非回答项目和概要。
公共属性:
oSection:UTDCore.CSection
我们所在的部分。
公共操作:
PresentationStarting(oPresentation:UTDCore.cPresentation,oContainerNotify:UTDCore.iContainerNotify):
由测试驱动程序调用以告知插件新的演示页正在开始。以及当有效时通知谁。
PresentationEnding():
由测试驱动程序调用以告知插件演示页正在结束。
UTDCore.iHelm
由处理导航控制或查阅的插件支持的界面。类似于下一个,先前的或不完全的。仅仅用户界面。告知插入的iNavigate插件以执行实际导航。
公共属性:
oSection:UTDCore.cSection
我们所处的部分。
公共操作:
PresentationStarting(oPresentation:UTDCore.cPresentation,oContainerNotifyHelm:UTDCore.iContainerNotifyHelm,UTDCore.iContainerNotify,bComment:Boolean)
由测试驱动程序调用以告知插件,新的演示页正在开始。也提供通知测试驱动程序行动的方式。
PresentationEnding();
由测试驱动程序调用以告知插件,演示页正在结束。
UTDCore.iItem
由处理项目和仿真器的插件支持的界面。
公共属性:
oSection:UTDCore.cSection
我们所处的部分。
fScoreMinimum:Double=0
最低可能得分。一定少于或等于正常得分。它可以为负。
fSeoreNominal:Double=0
如果应试者不采取行动的得分。一定少于或等于最大得分。一定大于或等于最小得分。通常为零。
fScoreMaximum:Double=1
最高可能得分。一定大于或等于正常得分。
fScoreCandidate:Double=0
由应试者接受的得分。请求插件判断项目。
bComplete:Boolean=0
如果项目是完整的,则为TURE(真)。
bSkipped:Boolean=False
如果项目被应试者跳过,则为TRUE(真)。
公共操作:
bProceed(eDirect:UTDCore.eDirection):Boolean
测试驱动程序将调用该方法以查看是否可以离开当前演示页。
该参数表示方向。
GetCorrectAnswerDisplay():String
在显示在屏幕上的表格中返回正确答案。
GetCorrectAnswerResults():Byte()
在写到结果文件的表格中返回正确答案。正确答案是在字节的安全数组表格中。
GetResponseDisplay():String
在显示在屏幕上的表格返回应试者的响应。
GetResponseResults():Byte()
在写到结果文件的表格中返回应试者的响应。该响应是在字节的安全数组表格中。
PresentationStarting(oPresentation:UTDCore.cPresentaion,oContainerNotify:UTDCore.iContainerNotify,bReadOnly:Boolean):
由测试驱动程序调用以告知插件,新的演示页正在开始。
PresentationEnding():
由测试驱动程序调用以告知插件,演示页正在结束。
UTDCore.iNavigate
由处理部分导航的插件支持的接口。
iNavigate的实现者必须也实现iContainerNotifyHelm
从UTDCore.iContainerNotifyHelm导出
公共属性:
nPresentations:Integer
计数显示以在导航范围内显示的数目。
在复合项目中的每个项目计一。
bItemsDetermined:Boolean
如果能够确定在导航范围内显示的项目的数目,则为TRUE。自适应的项目或部分能够防止这种情况。
公共操作:
bNavigateAllowed(eDirect:UTDCore.eDirection):Boolean
如果在供给方向上的导航被允许,那么返回TRUE。在每个演示之前对此进行查询是舵的工作。
这是资源文件插件数据和部分的当前状态的组合。
示意性实施方式:
如果先前出现按钮那么允许配置测试设计器。但是如果我们处于部分的第一演示页那么即使进行了配置也不出现。
Starting(oSection:UTDCore.cSection):
该部分开始。
Ending():
该部分结束。
UTDCore.iPersistInstanceSet
希望作为属性集保留在实例文件中的插件的接口。
公共属性:
IsDirty:Boolean
如果对象需要存储状态至实例文件那么返回TRUE。
公共操作:
Save(oPropSet:POLESS.IPropertyStorageVB)
由测试驱动程序调用保存插件数据至实例文件。
Reload(oPropSet:POLESS.IPropertyStorageVB):
由测试驱动程序调用以从实例文件再加载插件数据。
IPersistResource*::Load将在下次被调用。
UTDCore.iPersistInstanceStore
希望作为存储保留在实例文件中插件的接口。
公共属性:
IsDirty:Boolean
如果对象需要存储状态至实例文件那么返回TRUE。
公共操作:
Save(oStorage:POLESS.iStorageVB)
由测试驱动程序调用以保存插件数据至实例文件。
Reload(oStorage:POLESS.iStorageVB):
由测试驱动程序调用以从实例文件重新加载插件数据。接着将调用IPersistResource*::Load
UTDCore.iPersistInstanceStream
希望作为属性流保留在实例文件中插件的接口。
公共属性:
IsDirty:Boolean
如果对象需要将状态存储到实例文件那么返回TRUE。
公共操作:
Save(oStream:POLESS.IStreamVB):
由测试驱动程序调用以保存插件数据至实例文件。
Reload(oStream:POLESS.IStreamVB):
由测试驱动程序调用以从实例文件重新加载插件数据。接着将调用
IPersistResource*::Load。
UTDCore.iPersistResourceSet
希望作为属性集而永久位于资源文件中的插件的接口。
公共操作:
Save(oPropSet:POLESS.IPropertyStorageVB):
由编译器调用以保存插件数据至资源文件。
Load(oPropSet:POLESS.IPropertyStorageVB):
由测试驱动程序调用以从资源文件加载插件数据。
ValidateResource(oPropSet:POLESS.IPropertyStorageVB,oCompileServices
UTDCore.ICompilerServices):
验证插件的编译资源。插件必须产生描述资源任何问题的自动错误。
XXL的合并的存储和引用的文件的组合应当解决所有的引用。例如应当解决到所有HTML和JPEGs的HREFs。
UTDCore.iPersistResourceStore
希望作为存储而保留在资源文件中插件的接口。
公共操作:
Save(oStorage:POLESS.iStorageVB):
由编译器调用以保存插件数据至资源文件。
Load(oStorage:POLESS.iStorageVB):
由测试驱动程序调用以从资源文件加载插件数据。
ValidateResonrce(oStorage:POLESS.iStorageVB,oCompilerServices):UTDCore.IcompilerService):
验证插件的编译资源。插件必须产生描述资源任何问题的自动错误。
XXL的合并存储和引用文件的组合应当解决所有的引用。例如应当解决到所有HTML和JPEGs的HREFs。
UTDCore.IPersistResourceSteam
希望作为流保留在资源文件中插件的接口。
公共操作:
Save(oStream:POLESS.IStreamVB):
由编译器调用以保存插件数据至资源文件。
Load(oStream:POLESS.IStreamVB):
由测试驱动程序调用以从资源文件加载插件数据。
UTDCore.IPlugin
该接口将由所有UTD插件来支持。
所有插件必须实现以下接口:
iPlugin
所有插件必须实现以下之一,以在编译时保留在资源文件中:
IPersistResourceSet,IPersistResourceStore or IPersistResourceStream
所有插件必须实现以下之一,以在传送时保留在实例文件中。
IPersistInstanceSet,IPersistInstanceStore or IPersistInstanceStream
如果是如下可视的之一:iHelm,,iItem或iDisplay。它可以是iHelm和iItem。
如果希望作为有效文件被包含,那么必须支持下列:iDataObject,IoleInPlaceObject,IoleInPlaceActiveObject,IoleDocument,,IOleDocumentView和IoleCommandTarget。
或者如果是不可视的,那么支持以下之一:iScore,iReport,iResults,iNavigate,iTimer。
iNavigate必须也实现iContainerNotifyHelm
公共属性:
eMode:ePluginModes
插件应当在其中操作的模式。
由插件的消费者(或者驱动程序或者编译器)设置。
公共操作:
ValidateSource:POLESS.IStreamVB,oCompilerServices:UTDCore.ICompilerServices):
验证插件的源XXL。插件必须产生描述源任一问题的自动错误。
源无需完整,仅仅所提供的部分应当被校验。
如果流的内容是Unicode,那么应当按照定义的unicode标准(www.unicode.org)标注BOM  (字节顺序标记)。BOM是通常的FFFE。
如果流包含ASCII或UTF-8,那么将不包括BOM。
提供oCompilerServices接口以为插件提供附加特征和信息。
Unload():
卸载UTF对象的数据和引用。
Load(oExam.UTDCore.cExam.oCandidate:iAttendance):
利用UTD对象的引用来加载。仅仅在测验传送期间调用。
UTDCore.iReport
由插件支持的界面,其处理得分报告和其它资料如输入笔(“传单”)的打印。
公共操作:
PrintReport():
打印得分报告。
UTDCore.IResults
由插件支持的接口,其处理应试者结果的写入。
公共操作:
WriteResults():
写测验结果。
UTDCore.iScore
由插件支持的接口,其处理部分或测验的得分。
公共属性:
eStatus:UTDCore.eScoreStatus
eScoreStatus如下。
fReportedScoreCut:Double=-1
缩减的得分以报告应试者和结果。通常是按比例的。如果不应用到插件,则返回-1。
fReportedScoreMax:Double=-1
汇报给应试者和结果的最大得分。通常是按比例的。如果不应用到插件,则返回-1。
fReportedScoreCandidate:Double=-1
汇报给应试者的所获得的得分。通常是按比例的。如果不应用到插件,那么返回-1。
oEvents:IEvents*
子结点得分的集合。如果插件在部分上,那么该集合可以包括ISection和IPresentation对象。如果插件在类别上,那么该集合可以包括ISection,和IItem对象。
公共操作:
bStop():Boolean
测试驱动程序将调用该方法以察看是否应当从当前传送单元(部分或表格)停止传送。
例如,当自适应测验清楚应试者是否已经掌握或者没有掌握材料时,会返回错误。
GetScoreDisplay():String
在将在屏幕中显示的表格中返回得分。
GetScoreResults():Byte()
在将写入结果文件的表格中返回得分。得分在字节安全数组表格中。
UTDCore.Iselection
从类别选择项目,部分或表格。
公共属性:
bMore:Boolean
如果存在可以获得的更多对象,那么返回TRUE。只读。
nCountTotal:Integer
返回对象(项目,部分或表格)的总数量,这是在其池中进行选择的。如果这不是可计量的,那么返回-l。
nCountSelected:Integer
返回对象(项目,部分或表格)的选择数量,这是从其池中返回的。如果这不是可计量的,那么返回-1。如在自适应部分中的项目。
oGroup:UTDCore.cSection
读-写。
该组包含该选择插件。这不是为表格选择插件而设置的。
oEvents:UTDCore.IEvents
读-写。
从中选择的事件集合。
公共操作:
Reset():
这给选择插件一个机会准备用于第一选择的数据。一些选择插件如″random/exshastive″为在其内部的存储器和实例文件中做出存储它们的预确定的所有项目。
GetNext:Object
获得下一项目,部分或表格,如果没有更多的,那么返回NULLAKA Nothing。
UTDCore.iUnitTimer
跨测试单元执行定时的插件。
公共属性:
ISecondsElasped:Long
经过的秒。
ISecondsRemaining:Long
剩下的秒,如果没有对单元计时,将返回-1。
ISecondsTotal:Long
该单元可利用的总秒数。
datElasped:DATE
经过的时间。与ISecondsElasped一样。
datRemaining:DATE
剩下的时间,如果没有对单元计时,则返回-1。与ISecondsRemaining一样。
datTotal:DATE
该单元可利用的总共时间。与ISecondsTotal一样。
公共操作:
PresentationActive:(oPresentation:UTDCore.cPresentation):
这可由测试驱动程序调用以告知定时器,演示是完全有效的。所有插件已经加载了它们的数据,显示并且可操作。
PresentationInactive():
这可由测试驱动程序调用以告知定时器,演示即将变得无效。用户已经选择离开该项目的方向。项目和导航已经将其清除以便行动。
在该调用之后,插件将被隐藏和卸载。
AddTime(nMinutes:Integer):
增加时间至当前表格或部分。时间以分钟来指定。
Starting(oChildren:UTDCore.cEvents,oContainerNotifyHelm:UTDCore.iContainerNotifyHelm):
告知插件,部分或表格开始。如果插件被定义在表格级别,那么当表格开始时该插件被调用。如果插件被定义在部分级别,那么当部分开始时该插件被调用。
它给出时间所跨的子结点的集合。该集合包括cSection对象和cPresentation对象。
Ending():
告知插件部分或表格结束。如果插件被定义在表格级别,那么当表格结束时该插件被调用。如果插件被定义在部分级别,那么当部分结束时该插件被调用。
Pause():
暂停定时器
Resume():
恢复定时器(在Pause()之后)
UTDP.StandardTimer
标准定时插件,以三种基本模式工作:
非定时(Non-timing),单元的时间不影响
定时(Timed),单元被定时并且会超时
影响的(Contributing),单元的时间会影响父单元
在超时的情况下,它将以多于一种方式来处理:
单元立即结束,
在当前演示之后结束,
警告。
UTDP.cBrowserDisplay
该显示插件再现到有效文档的整个部分区域的HTML。它也以HTML解释脚本。UTD的有效对象模式被暴露给脚本。
UTDP.cLinearNavigate
通过部分执行线性导航直至项目或部分结束。
UTDP.cMutliChoiceItem
标准多选项目。使用HTML演示版面。
UTDP.cNextPrevious
标准下一个/先前类型“工具栏”舵。
UTDP.cSequentialExhastive
该插件执行顺序Exhastive选择。所有对象(部分或项目)按照资源文件中的顺序。
UTDP.cSummaryScore
该插件通过总结项目或部分得分来执行得分。所总结的得分可以被加权。总得分可以被是成比例的。
UTDP.cUserSelection
允许用户从列表选择一部分。该列表是部分中的子部分。
UTDPE.cChallenge
该显示用于质询用户合法性以标识自身。它用于引入测验并且在中断期间。
UTDPE.cSLSDeliResult
该结果处理器创建看似SLSDeIi结果的SLSDC结果处理的结果。
UTDPE.cStandardReview
这是标准查阅屏。它显示所有的项目及其标题。它允许应试者:
跳到任一项目
转到第一不完整
转到第一跳过
转到第一标志
结束部分。
UTDPE.CStandardScoreReport
标准得分报告。将打印HTML页。
公共操作:
get_AllowPOLESS():
返回AllowPOLESS标志
putAllowPOLESS():
UTDPE.cWTDResults
写标准WTD/TASC结果文件。
cActivePlugin
插件的助手类。
cContainerFrameT
容器帧的模板类。(主程序窗口。)
从IoleInPlaceFrame,CWindowImpl导出.
公共操作:
Create():
Destroy()
cDocumentSiteT
文档中心的模板类。(主程序窗口的子窗口。)
从IOleInPlaceSite,IOleDocumentSite,IAdviseSink,IOleClientSite,CWindowImpl,IOlelnPlaceUlWindow导出。
公共操作:
Create();
Destroy();
cEvent
基本类用于在测试中传送的所有事件。如:部分,报告,结果&演示。
cFormGroup
包含表格组。用于选择表格。
公共属性:
colForm:UTDCore.cEvents
UTDCore.cForm对象的集合。
oForm:UTDCore.cForm
所选表格。
专用属性:
oSelection:UTDCore.iSelection
选择插件用于选择表格。
cPlugInT
用于插入的模板类。将功能赋予有效文档。
从IOIeObjectImpl,IOIeInPlaceObjectWindowlessImpl,IPersistStorageImpl,CComControl,IOleDocumentViewImpl导出。
CPlugin
该类保存插件信息。
公共属性:
sName:String
插件XXL名的只读名。(只读)
sProgID:String
插件的ProgID。(只读)
guidCLSID:GUID
插件的ID。(只读)
公共操作:
Create():UTDCore.iPlugin
共同创建插件的实例并将其返回给调用程序。该类不保留任何到该实例的引用。调用程序必须释放它。
cScreenMinimum
最小屏解决方法
公共属性:
nWidth:Long=800
最小屏宽度。
nHeigth:Long=600
最小屏高度。
nBitDepth:Integer 8
最小屏色位位深度。4=16色,8=256色,16=65768色,等等。
bValid:Boolean
如果当前视频配置符合最小需求,则为TRUE。
cTemplate
在屏上定义演示区域的模板。通过演示引用。
公共属性:
sName:String
只读演示模板名。
colAreas:UTDCore.Areas
模板中区域的集合。
colTemplates:UTDCore.cTemplates
该模板的嵌套模板。
公共操作:
Activate():
激活该模板。所有区域实例化它们的插件并包含它们。不可在驱动程序之外使用。
Deativate():
使该模板失效。所有区域破坏它们的插件。不可在驱动程序之外使用。
iAppointment
该接口是统一管理系统的一部分。它允许访问应试者信息以便应试者进行测试。
它也由仿真UAS的UTDTOETS组件进行仿真。.
iLaunch
该接口连接至DSA管理系统。它是管理系统如何中心控制组件。
iLaunch2
该接口连接至统一管理系统。它是管理系统如何中心控制的组件。
iPrint
用于保存重新打印的得分报告的管理系统界面。也处理初始化打印。
iTransfer
管理接口以将结果和其它文件传送回数据中心。它包括路由。
总共:
2个逻辑包
95个类
逻辑分组结构
逻辑视图
物理视图报告
内容表
所选组件视图报告………………………………………………………4
组件视图…………………………………………………………………4
UTDCore…………………………………………………………………4
UTDCore.eMsgBoxResults(接口)………………………………………5
UTDCore.IPresentation(接口)………………………………………6
UTDCore.IContainerNotify(接口)……………………………………7
UTDCore.ICategories(接口)…………………………………………8
UTDCore.IMsgBox(接口)………………………………………………8
UTDCore.IPersistResoutceSet(接口)………………………………9
UTDCore.IGroup…………………………………………………………9
UTDCore.IScript(接口)………………………………………………10
UTDCore.lUnitTimer(接口)……………………………………………12
UTDCore.INavigate(接口)……………………………………………13
U15TDCore.IItems(接口)………………………………………………15
UTDCore.ICategory(接口)……………………………………………15
UTDCore.IPersistInstanceStore(接口)……………………………16
UTDCore.IcResults(接口)……………………………………………16
UTDCore.IcItem(接口)…………………………………………………17
UTDCore.IScore(接口)…………………………………………………19
UTDCore.IExam(接口)…………………………………………………20
UTDCore.IRegistry(接口)……………………………………………23
UTDCore.IAttribute(接口)……………………………………………24
UTDCore.IHelm(接口)…………………………………………………24
UTDCore.IcReport(接口)………………………………………………25
UTDCore.eDirection(接口))…………………………………………25
UTDCore.IPersistInstanceStream(接口)……………………………26
UTDCore.ePluginModes(接口)…………………………………………26
UTDCore.IPersistResourceStream(接口)……………………………27
UTDCore.ISelection(接口)……………………………………………27
UTDCore.IGroups(接口)…………………………………………………28
UTDCore.Collection(接口)……………………………………………28
UTDCore.eScoreStatus(接口)…………………………………………29
UTDCore.eStates(接口)…………………………………………………29
UTDCore.IPersistResourceStore(接口)………………………………29
UTDCore.eExamStatus(接口)……………………………………………30
UTDCore.IItem(接口)……………………………………………………30
UTDCore.IPlugin(接口)…………………………………………………32
UTDCore.IContainerNotifyHelm(接口)………………………………33
UTDCore.IReport(接口)…………………………………………………34
UTDCore.IForm(接口)……………………………………………………34
UTDCore.IAttributes(接口)……………………………………………37
UTDCore.IPresentations(接口)………………………………………37
UTDCore.ISections(接口)………………………………………………37
UTDCore.IDisplay(接口)………………………………………………37
UTDCore.ISection(接口)………………………………………………38
UTDCore.IResults(接口)………………………………………………41
UTDCore.eCategoryContent(接口)……………………………………41
UTDCore.lEvents(接口)…………………………………………………41
UTDCore.IPersistInstanceSet(接口)…………………………………42
管理系统…………………………………………………………………42
UAS.ITransfer(接口)……………………………………………………42
UAS.IPrint(接口)………………………………………………………42
UAS.IAppointment(接口)………………………………………………43
总共………………………………………………………………………44
组件分组结构……………………………………………………………44
Figure C20048002358501391
Figure C20048002358501401
UTDCore.EMsgBoxResults(接口)
从IMsgBox::Display的可能结果的枚举
eMsgBoxResult_Yes
eMsgBoxResult_No
eMsgBoxResult_Timeout
(应试者无点击,则发生超时)
UTDCore.IPresentation(接口)
演示的数据和当前状态。可能是项目或显示。T
从cEvent,UTDCore.IContainerNotifyHelm导出。
公共属性:
bCountPresentation:boolean
如果为真,那么演示应当计算部分的总的X或Y。″项目计数″
colCustomAttributes:UTDCore.IAttributes
自定义属性的集合。只读。
sName:String
只读显示名。
sTitle:String
演示标题。只读。
oSeriptStart:UTDCore.IScript
在该对象之前执行的脚本。
oScriptFinish:UTDCore.IScript
在该对象之后执行的脚本。
oScriptConditional:UTDCore.IScript
该演示页脚本被评估。如果为真那么该对象被传送。
sComment:String
用于输入该演示的注释。
bMarked:Boolean
如果为了稍后的查阅该项目已经被标识,则为TRUE。由舵设置。
colChildren:UTDCore.IEvents
在该演示中的项目。对于没有项目的演示,集合将为空。
bSelected:Boolean
如果演示或者其任一项目已经被选择插件选择用于传送,则为TRUE。只读。
公共操作:
FindIcItem(pIItem:IItem*):IcItem*
查找给定IItem的IcItem界面。
如果IItem不在该演示中那么返回失败。
UTDCore.IContainerNotify(接口)
所有插件接收该界面的引用。它允许它们报告事件至存储器。
公共操作:
Activated():
调用以表示插件已经接收演示页的改变并且它完全准备好操作。这包括处理数据并在屏上打印(如果可视)。该对象被作为可视插件类型的PresentationStarting方法中的参数来传送。
无法从可视插件调用该方法,这将导致驱动程序无限地等待。应试者将不能导航或响应。在每次调用PresentationStarting时不能多于一次地调用该方法。
UTDCore.ICategories(接口)
UTDCore.ICategory的集合
从UTDCore.Collection导出
UTDCore.IMsgBox(接口)
该类显示带有应试者的消息框。该类从IExam::GetMsgBox()返回。在框中的消息通过调用供给。可选地提供标题。按钮由调用函数提供;但是按钮标签在资源文件中的测试级别处定义。
消息框的父结点是主测验窗口。消息框可以被设置为在一段时间之后时间用完。
公共属性:
sTitle:String=UTDCore
消息框将使用的标题。读/写。
ITimeout:Long=12()
在消息框上的以秒计的时间用完值。读/写。
显示将返回eMsgBoxResult_Timeout。
nparentHWnd:Integer
父结点窗口处理读/写。
错误是主UTDCore窗口。
公共操作:
Display(sPrompt:String,eStyle:UTDCore.eMsgBoxStyle):UTDCore.eMsgBoxResults
显示消息框。显示所请求的按钮和所提供的消息。
UTDCore.IPersistResourceSet(接口)
用于希望作为性质设置保留在资源文件中的插件接口。
公共操作:
Save(oPropSet:POLESS.IPropertyStorageVB):
由编译器调用以保存插件数据至资源文件。
Load(oPropSet:POLESSIPropertyStorageVB):
由测试驱动程序调用以从资源文件加载插件数据。
ValidateResource(oPropSet:POLESS.IpropertyStorageVB,oCompilerServices:UTDCore_ComplierServices):
验证插件的编辑资源。插件必须产生描述资源任一问题的自动错误。
用于XXL的合并的存储器和引用文件的组合应当解决所有的引用。例如,所有HTML对HREFs的引用和JPEGs应当解决。
UTDCore.IGroup(接口)
组是部分中事件的保存器。组可以保存演示或部分。
公共属性:
sName:String
只读组名。
sTitle:String
只读组标题。
colCustomAttributes:UTDCore.IAttributes
自定义属性的集合。只读。
colChildren:UTDCore.IEvents
演示、子部分、或该组的子组的集合。
oScoring:UTDCore.ISeore
该部分的得分插件。
colDelivered:
包含该组内所有传送事件的演示页或子部分的集合。这将部分不包含子组。
oSelection:UTDCore.ISelection
指向该组的当前选择插件的指针。
oSection:UTDCore.ISection
包括该组的部分。
UTDCore.IScript(接口)
以VBscript或Jscript写的脚本。以便由ActiveX脚本引擎执行或估算。该对象将UTD对象暴露给脚本代码。这些对象将基于提供给该对象的“父”对象的范围。
所有脚本可以看到oExam,oForm,和oCandidate。
如果父对象是部分对象,那么脚本也将看到oCurSection。
如果对象是演示对象,那么脚本也将看到oCurSection和oCurPresentation。
如果对象是项目,那么脚本也将看到oCurSection,oCurPresentation,和oCurItem。
公共属性:
oParent:Object
父UTD对象。它可以是表格,部分或演示页。
公共操作:
Execute(sScript:BSTR):
执行在sScript参数中传送的脚本代码。
EvaluateBool(sScript:BSTR):Boolean
评估作为sScript参数分析的表达式。返回TRUE或FALSE。如果代码不是返回布尔的表达式那么产生错误。
EvaluateVar(sScript:BSTR):Variant
评估在sScript参数中传递的演示页。根据脚本的返回类型返回变量。如果代码不是表达式则产生错误。
SetScope(oSection:Isection*,oPresentation:IPresentation*,oItem:IItem*);
设置父部分,演示页,和项目。脚本将作为oCurSection,oCurPresentation,和oCurItem对象来访问这些。任一/所有可以作为NULL参数来传送,以表示脚本不能访问该特定对象。
AddObject(sName:BSTR,pObject:IDispatch*):HRESULT
将对象增加到全局脚本范围。
受保护的操作:
LoadGlobalScript(oStream:POLESS.IcStorage):
由测试驱动程序调用以初始化对随后的所有脚本通用的全局脚本。这将由所有cScript的实例共享。oStorage参数是包含属性集的存储器和包含全局脚本的流。
UTDCore.IUnitTimer(接口)
执行跨测试单元的定时的插件。
公共属性:
ISecondsElapsed:Long
所经过的秒。
ISecondsRemaining:Long
剩余的秒。如果单元未被定时,那么将返回-1。
ISecondsTotal:Long
该单元可利用的全部秒。
datElapsed:DATE
所经过的时间。类似于ISecondsElapsed。
datRemaining:DATE
剩余的时间。如果单元未被定时,那么将返回-1。类似ISecondsRemaining。
datTotal:DATE
该单元可利用的全部时间。如ISecondsTotal。
公共操作:
PresentationActive(oPresentation:UTDCore.IPresentation):
由测试驱动程序调用以通知定时器,演示页是完全有效的。所有插件已经加载了它们的数据,显示并是可操作的。
PresentationInactive():
由测试驱动程序调用以通知定时器,演示页即将变为无效。用户已经选择了离开该项目的方向。项目和导航已经将其清除以便移动。在该调用之后所有插件将被隐藏和卸载。
AddTime(nMinutes:Integer):
将时间添加到当前表格或部分。时间以分钟来指定。
Starting(oChildren:UTDCore.IEvents,oContainerNotifyHelm:UTDCore.IContainerNotifyHelm):
告知插件,部分或表格开始。如果插件被定义在表格级别,那么当表格开始时被调用。如果插件被定义在部分级别,那么当部分开始时被调用。
它给出时间所跨的子结点的集合。该集合可以包括cSection对象和cPresentation对象。
Ending():
告知插件,部分或表格结束。如果插件被定义在表格级别,那么当表格结束时被调用。如果插件被定义在部分级别,那么当部分结束时被调用。
Pause():
暂停定时器
Resume():
恢复定时器。(在Pause()之后)
UTDCore.INavigate(接口)
由处理部分导航的插件支持的接口。
INavigate的执行器也必须实现iContainerNotifyHelm
从UTDCore.IContainerNotifyHelm导出
公共属性:
nPresentations:Integer
在导航范围内将要显示的计数。在复合项目内的每个项目都记作一。
bItemsDetermined:Boolean
如果可以确定在导航范围内要显示的项目数目,则为TRUE。自适应项目或部分可以防止这种情况。
公共操作:
vbNavigateAllowed(eDirect:UTDCore.eDrection):Boolean
如果所提供的方向的导航被允许那么返回TRUE。舵负责在每个演示之后对其进行查询是。
这是资源文件插件数据和当前部分状态的组合。
实施实例:
如果先前按钮出现那么测试设计者被允许配置。但是如果我们处于部分的第一演示,那么即使进行了配置也不出现。
Starting(oSection:UTDCore.ISection):
部分开始。
Ending():
部分结束。
UTDCore.IItems(接口)
UTDCore.IcItem的集合。注意,这不是由项目插件实现的UTDCore.IItem接口。
从UTDCore.Collection导出
UTDCore.ICategory(接口)
部分或项目的类别。例如:″Reporting″,″Objectivies″,″Scoring″
公共属性:
sName:String
类别名。
bComplete:Boolean
如果TRUE那么该类别必须包含在某级别定义的所有部分或项目。
bDuplicate:Boolean
如果TRUE那么类别允许在某级别多于一次地定义部分或项目。
sDescription:String
类别的描述。
colMembers:UTDCore.IEvents
应用到该类别的部分或项目的集合。
colSubCategories:UTDCore.ICategories
UTDCore.cCategory的集合。(AKA sub-categories)。
eContents:eCategoryContents
只读。在colMembers中成员所允许的类型。
enum{
eCategoryContent_Anything=(),
eCategoryContent_Section=1,
eCategoryContent_Items=2,
eCategoryContent_Categories=3,
);eCategoryContents;
oScoring:UTDCore.IScore
用于表格的得分插件。
UTDCore.IPersistInstanceStore(接口)
希望作为存储保留在实例文件中的界面。
公共属性:
IsDirty:Boolean
如果对象需要保存状态至实例文件,则返回TRUE。
公共操作:
Save(oStorage:POLESS.iStorageVB):
由测试驱动程序调用以保存插件数据至实例文件。
Reload(oStorage:POLESS.iStorageVB):
由测试驱动程序调用以从实例文件重新加载插件数据。
IPersistResource*::Load将在下次调用。
UTDCore.IcResults(接口)
事件的集合将包含每个结果的IcResults界面。是Results插件的容器。这不是插件实施的IResults接口。
从cEvent导出
公共属性:
oResults:UTDCore.IResults
写结果的插件。
UTDCore.IcItem(接口)
项目或事件的集合将包含每个项目的IcItem接口。该接口提供包括在XXL的<item>标记中指定属性的通用项目信息。这不是插件实施的UTDCore.IItem接口。
可以Query Interface用于IItem接口的Icltem。这允许报告,结果,或得分插件以调用在IItem接口上的程序。
从UTDCore.IItem导出
公共属性:
bPresented:Boolean=False
如果项目已经演示给应试者则为True。由项目组件设置。
sName:String
只读项目名。
sTitle:String
演示标题。只读
fWeight:Double=1
相对于其它项目的项目权重值。通常为1。如果需要每个项目上有多个权值,那么它们可以附在自定义属性中。权值可以是负。
colCustomAttributes:UTDCore.IAttributes
自定义属性的集合。只读。
ISecondsElapsed:Long
花费在项目上的秒。
bScored:Boolean=TRUE
只读。如果计算项目得分,则为TRUE。
如果为False,那么fweight和fScoreCandidateWeighted将是0。
bSkipAllowed:Boolean
只读性质。如果TRUE那么该项目可以被跳过。如果TRUE那么在IItem接口上的bProceed()程序可以不被调用。
fScoreCandidateWeighted:Double
该项目的应试者的权值。该项目的判断值将乘以该值的权。
sPluginName:String
只读插件名。插件的prog ID。
oSection:UTDCore.ISection
项目所传送的部分的只读性质。
oPresentation:UTDCore.IPresentation
项目所传送的演示页的只读性质。
DatElapsed:DATE
花费在项目上的时间。如IsecondsElapsed,但是作为COM DATE类型发送。
UTDCore.IScore(接口)
由部分或测验的处理得分,由插件支持的接口。
公共属性:
eStatus:UTDCore.eScoreStatus
eScoreStatus如下。
fReportedScoreCut:Double=-1
向应试者报告的删减的得分和结果。通常按比例的。如果不对插件应用,则返回-1。
fReportedScoreMax:Double=-1
报告给应试者和结果的最大得分。通常按比例的。如果不对插件应用,则返回-1。
fReportedScoreCandidate:Double=-1
获得的得分以报告给应试者。通常按比例的。如果不对插件应用,则返回-1。
oEvents:IEvents*
得分的子结点的集合。如果插件是在部分上,那么该集合能够包括ISection和IPresentation对象。如果插件是在类别上,那么该集合可以包括ISection,和IItem对象。
公共操作:
bStop():Boolean
测试驱动程序将调用该程序来察看传送是否应当从当前传送单元(部分或表格)停止。
例如当自适应测验知道应试者已经掌握或者没有掌握材料时它可以返回错误。
GetScoreDisplay():String
在将显示在屏上的表格中返回得分。
GetScoreResults():ByteO
在将写入结果文件的表格中返回得分。得分是以字节的安全数组的形式。
UTDCore.IExam(接口)
测验实例。暴露类的驱动程序的根对象。
从cContainerFrameT导出
公共属性:
sName:String
只读测验名。
sLanguage:String
测验内容的语言。只读。
(UTDCore 2.().().47-这当前返回空白字符串)
sVersion:String
测验的版本。只读
oActiveForm:UTDCore.IForm
当前表格。对于测验仅仅一个表格有效。
eStatus:UTDCore.eExamStatus
eExamStatus如下:
eExam_Initializing
eExam_eExam_InProgress
eExam_Ended
eExam_Terminating
bShowResponseComment:Boolean
如果TRUE那么应试者在注释周期期间应该不看它们的响应。
colCustomAttributes:UTDCorelAttributes
自定义属性集合。只读。
sTitle:String
测验标题。只读。
colCategories:UTDCore.ICategories
所有类别的集合。
oResourceRoot:Object
POLESS资源文件的根存储器的只读引用。接口:POLESS.cStorageRoot,iStorage,iRootStorage,iStorageVB。
oInstanceRoot:Object
POLESS考试实例文件的根存储器的只读引用。接口:POLESS.cStorageRoot,IStorage,iRootStorage,iStorageVB。
oRegistry:UTDCore.IRegistry
返回注册对象的单个实例。只读。
公共操作
Minimize():
最小化UTD的主窗口。可以由仿真调用以获得UTD。
Restore():
恢复UTD的主窗口。可以被仿真调用以恢复到UTD的屏幕。
GetSeript():UTDCore.IScript
返回由插件使用的脚本对象。
SaveInstanee():
将测试驱动程序状态保存到实例文件。所有有效对象被要求串行化自身至实例文件。
引用该对象的都可以初始化该进程。它可以是希望保存用户交互和状态信息的项目插件。
驱动程序将在每个演示页之间进行保存。它也可以保存在各种其它事件或时间间隔中。
GetTransfer():UAS.ITransfer
返回UAS Transfer对象以传送结果或其它文件至数据中心。
IExam对象不保持对该对象的引用。
GetPrint():IUASPrint
返回UAS打印对象以保存翻印的得分和其它报告。
IExam对象不保持对该对象的引用。
FatalError(INumber:Long,sSource:String,sDescription:String):报告插件中的错误至测试驱动程序。
通常经由HRESULT和支持的ErrorInfo将错误报告给测试驱动程序屏。如果错误由于测试驱动程序的初始化调用之外的其它原因生成,那么插件应当经由该程序汇报错误。
实例用途应当是用户在插件项目上点击按钮。所产生的结果生成了错误。
Warn():
写“′Warning”级别追踪消息至实例文件。
Info():
写“Information”级别追踪消息至实例文件。
Quit():
告诉测试,应试者正在退出测试。通常由导航插件调用以响应eDirection_Quit。导航插件应当由应试者确认该决定。
这使得测试驱动程序停止传送并完全关闭执行。管理系统被告知,应试者退出了测试。
GetMsgBox():UTDCore.IMsgBox
返回消息框对象。任何希望显示消息框的插件应当在任何可能的时候使用该对象。它提供语言独立性,和相容的外观。
StartExam():
告诉测试,应试者已经接受了测试并开始。通常由导航插件调用以响应eDirection_Start。
管理系统被告知,测验已经开始并且应试者已经接受该测试。
UTDCore.IRegistry(接口)
允许得分册查找翻译字符串
例如:
<base href=″%REG:DSAGRAPGHICS″>
翻译成
<base href=″V:\DSA\″>
参见
[HKEY_LOCAL_MACHINE\SOFTWARE\Prometric\UTD\Keywords]
公共操作:
Lookup(sKey:String):String
通过在注册表中查找关键字并返回值来检索字符串。
Translate(sInString:String):String
将每个%REG:x%的出现翻译成注册表中等效的“x“。
UTDCore.IAttribute(接口)
公共属性:
sName:BSTR
获得属性名字符串。
value:VARIANT
获得属性值。
UTDCore.IHelm(接口)
由处理导航控件或者查阅的插件实现的接口。如下一个,上一个,或者不完全的。仅仅是用户接口。与iNavigate插件对话以执行实际的导航。
公共属性:
oSection:UTDCore.ISection
该舵所处的部分。
公共操作:
PresentationStarting(oPresentation:UTDCore.IPresentation,oContainerNotifyHelm:
UTDCore.IContainerNotifyHelm,oContainerNotify:UTDCore.IContainerNotify,bComment:Boolean)
由测试驱动程序调用以告知插件,新的演示页开始。插件可以保留IPresentation,IContainerNotify,和IContainerNotifyHelm对象直至PresentationEnding。参见IContainerNotify::Activate。
IContainerNotifyHelm接口作为一种方式来告知测试驱动程序移动。
PresentationEnding():
由测试驱动程序调用以告知插件,新的演示页结束。在调用该方法后,驱动程序期望插件将释放在PresentationStarting中传递的IPresentation,IContainerNotify,和IContainerNotifyHelm对象。
UTDCore.IcReport(接口)
事件的集合将包含每个报告的IcReport接口。它是用于IReport插件的容器。这不是由插件实现的IReport接口。
从cEvent导出
公共属性:
oScoreReport:UTDCore.IReport
得分报告插件。
UTDCore.eDirection(接口)
从演示页前进的可能的方向的枚举。
eDirection_Next
eDirection_Previous
eDirection_TimeoutImmedidate(现在不等待)
eDirection_TimeoutAfter(在当前演示页之后)
eDirection_Review(转到查阅演示页)
eDirection_Jump(转到特定演示页)
eDirection_Flag
eDirection_Help
eDirection_Firstlncomplete
eDirection_FirstSkipped
eDirection_FirstPresentation
eDirection_FirstMarked
eDirection_end
eDirection_Comment
eDirection_Start
eDirectionQuit
UTDCore.IPersistInstanceStream(接口)
希望作为属性流保留在实例文件中的插件的接口。
公共属性:
IsDirty:Boolean
如果对象需要保存状态至实例文件,那么返回TRUE。
公共操作:
Save(oStream:POLESS.IstreamVB):
由测试驱动程序调用以将插件数据保存至实例文件。
Reload(oStream:POLESS.IStreamVB):
由测试驱动程序调用以将插件数据从实例文件重新加载至实例文件。
IPersistResource*::Load将在随后被调用。
UTDCore.ePluginModes(接口)
有效文档ePluginMode_Author(不支持)的可能模式的枚举
ePluginMode_Compile
ePluginMode_Delivery
ePluginMode_Rescore(不支持)
ePluginMode_ProcessResults(不支持)
UTDCore.IPersistResourceStream(接口)
希望作为流保留在资源文件中的插件的接口。
公共操作:
Save(oStream:POLESSIS.IStreamVB):
由编译器调用以将插件数据保存到资源文件中。
Load(oStream:POLESS.IStreamVB):
由测试驱动程序调用以从资源文件加载插件数据。
UTDCore.ISelection(接口)
从类别选择项目,部分或表格。
公共属性:
bMore:Boolean
如果可以获得更多的对象,则返回TRUE。只读。
nCountTotal:Integer
返回各对象(项目,部分或表格)总的计数值,其中所述对象是从其池中所选择的。如果不是可以计量的,则返回-1。
nCountSelected:Integer
返回各对象(项目,部分或表格)选择的计数值,其中所述对象是从其池中所选择的。如果不是可以计量的它将返回-1。如在自适应部分中的项目。
oGroup:UTDCore.ISection
读-写。
包含该选择插件的组。这不是为表格选择插件而设置。
oEvents:UTDCore.IEvents
读-写。
可以从中选择的事件集合。
公共操作:
Reset():
这给了选择插件一个机会来准备用于第一选择的数据。一些例如如“随机/exshastive”的选择插件确定所有选择的插件,以将它们存储在其内部的存储器和实例文件中。
GetNext():Object
获得下一项目,部分或表格。如果没有更多的项目,部分或表格,那么返回NULL AKA Nothing。
UTDCore.IGroups(接口)
UTDCore.IGroup的集合。
从UTDCore.Collection导出
UTDCore.Collection(接口)
基于UTD集合。所有其它集合类遵照以下设计。
公共属性
Count:Long
返回在集合中成员的数目。
_NewEnum:IUnknown**
返回一Visual Basic枚举器对象。.
公共操作:
Item(Index:Variant):Variant
通过位置或者关键字返回集合对象的特定成员。
UTDCore.eScoreStatus(接口)
由得分插件确定的、用于表格/组/类别的得分状态。
eScore_NonGraded
eScore_Failure
eScore_Pass
UTDCore.eStates(接口)
测试驱动程序的状态。
eStateStart-初始化测试驱动程序&读取资源文件。
eStateSectionDelivery-传送部分。
eStateSectionComment-注释所有部分。
eStateSectionFeedBack-对所有部分进行反馈。
eStateScoreReporting-再现并打印得分报告。
eStateResults-写结果。
eStateFinish-关闭测试驱动程序。
UTDCore.IPersistResourceStore(接口)
希望作为存储器保留在资源文件中的插件的接口。
公共操作:
Save(oStorage:POLESS.iStorageVB):
由编译器调用以将插件数据保存到资源文件中。
Load(oStorage:POLESS.IStorageVB):
由测试驱动程序调用以从资源文件加载插件数据。
ValidateResource(oStorage:POLESS.iStorageVB,oCompilerServices:UTDCore.ICompilerServices):
验证插件的编译资源。插件必须产生以资源描述任一问题的自动错误。
用于XXL的合并存储器和引用文件的组合应当解析所有引用。应当解析例如引用HTML的所有HREFs和JPEGs。
UTDCore.eExamStatus(接口)
可能的测验传送状态的枚举。
eExam_Initializing(加载资源文件)
eExam_Starting(传送,应试者还未“开始”)
eExam_InProgress(传送,应试者正式“开始”)
eExam_Ended(传送,应试者正式“结束”″)
eExam_Terminating(从存储器中清除)
UTDCore.IItem(接口)
由处理项目和模拟器的插件支持的接口。
公共属性:
oSection:UTDCore.ISection
我们所处的部分。
fScoreMinimum:Double=0
最小可能的得分。一定是少于或等于通常得分。它可以是负的。
fScoreNominal:Double=0
如果应试者不采取行为时的得分。一定是少于或等于最大得分。一定大于或等于最小得分。通常为零。
fScoreMaximum:Double=0
最高可能性的得分。一定大于或等于名义得分。
fScoreCandidate:Double=0
由应试者所接收的得分。请求插件判断项目。
bComplete:Boolean=False
如果项目完整那么为TRUE。
bskipped:Boolean=False
如果项目被应试者跳过那么为TRUE。.
公共操作:
bProceed(eDirect:UTDCore.eDirection):Boolean
测试驱动程序将调用该方法以查看是否可以离开当前演示页。参数表示方向
GetCorrectAnswerDisplay():String
在即将显示在屏上的表格中返回正确答案。
GetCorrectAnswerResults():Byte()
在即将写到结果文件的表格中返回正确答案。
正确答案位于字节安全数组的表格中。
GetResponseDisplay():String
在即将显示在屏上的表格中返回应试者响应。
GetResponseResults():Byte()
在将要写入结果文件的表格中返回应试者响应。该响应在字节的安全数组表格中。PresentationStarting(oPsresentation:UTDCore.IPresentation,
oContainerNotify:UTDCore.IContainerNotify,bReadOnly:Boolean):由测试驱动程序调用以告知插件,新的演示页开始。
PresentationEnding():
由测试驱动程序调用以告知插件,新的演示页结束。
UTDCore.IPlugin(接口)
该接口将由所有UTD插件支持。
所有插件必须实现以下接口:
iPlugin
所有插件必须实现以下之一,以在编辑时间保留在资源文件中:
IPersistResourceSet,IPersistResourceStore或IPersistResourceStream
所有插件必须实现以下之一,以在传送期间保留在实例文件中:IPersistInstanceSet,IPersistInstanceStore或IPersistInstanceStream如果是可视的,则是下列之一:iHelm,iItem或iDisplay.则可以是iHelm和iItem。
如果希望作为有效文档被包含,那么你必须支持以下内容:iDataObject,IoleInPlaceObject,IoleDocument,IOleDocumentView和IoleCommandTarget。
或者如果是不可视的,那么以下之一:
iScore,iReport,iResults,iNavigate,iTimer。
iNavigate必须也实现iContainerNotifyHelm
公共属性:
eMode:ePluginModes
插件应当采用的操作模式。
由插件的使用者(驱动程序或者编译器)设置。
公共操作:
ValidateSource(oSource:POLESS.IStreamVB.oCompilerService:UTDCore.IComplierServices):
验证插件的源XXL。插件必须产生以源描述任一问题的自动错误。源并不要求是完整的,只需要验证所提供的部分。
如果流的内容是Unicode,那么它如统一标准所定义的那样将被定义为BOM(byte order mark)(www.unicode.org)。BOM通常是的FFFE。
如果流包含ASCII或UTF-8,那么不包括BOM。
提供oCompilerServices接口,以向插件提供附加性质和信息。
Unload():
卸载数据和对UTD对象的引用。
Load(oExam:UTDCore.IExam,:iAttendance):
加载对UTD对象的引用。仅仅在测验传送期间调用。
UTDCore.IContainerNotifyHelm(接口)
由插件使用的接口,以告知容器进行导航。
公共操作:
RequestMove(eDirect:UTDCore.eDirection,sPresentation:String):
请求驱动程序在所指定的方向前进。驱动程序接下来从导航插件请求该运动。
第二参数选项指定演示页。这仅仅用于JUMP。
UTDCore.IReport(接口)
由处理得分报告和其它如得分(“传单”)之类的材料的打印的插件支持的接口。
公共操作:
PrintReport():
打印得分报告
UTDCore.IForm(接口)
测验表格。
从UTDCore.IContainerNotifyHelm导出
公共属性:
colChildren:UTDCore.IEvents
测验的所有顶级部分的集合。只读。
colCustomAttributes:UTDCore.IAttributes
自定义属性的集合。只读。
sName:String
只读表格名。
sTitle:String
表格标题。只读
coIItemsChosen:UTDCore.IItems
在测验中所有选择项目(也就是,由选择插件返回的)的集合。这与它们的部分无关。
colAllSections:UTDCore.ISections
与级别无关的、测验的所有部分的集合。
datStart:Date
表格开始的日期和时间。
datFinish:Date
表格结束的日期和时间。
oTimer:UTDCore.IUnitTimer
表格的定时器。
eScoring:UTDCore.IScore
表格的得分插件。
sVersion:String
表格的版本。
colDelivered:UTDCore.IEvents
表格的所有传送的顶级部分的集合。只读。
nCurIndex:Long=()
在colDelivered中最后传送事件的索引。只读。
EStatus:UTDCore.eScoreStatus
返回oForm.oScore.eStatus的值。
colAllPresentations:UTDCore.IPresentations
与其级别无关的测验的所有演示页的集合。
colPresentationsChosen:UTDCore.IPresentations
在测验中所有选择的演示页(也就是,由选择插件返回的)的集合。这与它们部分或组无关。
colSectionsChosen:UTDCere.ISections
在测验中所有选择的部分(也就是,由选择插件返回的)的集合。这与它们级别无关。
colAllItems:UTDCore.IItems
测验的所有项目的集合,这与它们级别无关。
colAlIGroups:UTDCore.IGroups
测验的所有组的集合,这与它们级别无关。
colGroupsChosen:UTDCore.IGroups
在测验中所有选择的组(也就是,用于该组的选择插件已经Reset())的集合。这与它们级别无关。
公共操作:
ChildNext():
请求驱动程序前进到表格上的下一事件。这可以是部分,结果,或得分报告。
ChildPrevious():
请求驱动程序前进到表格上的上一事件。这可以是部分,结果,或得分报告。
ChildGoto(vSection:Variant):
请求驱动程序前进到表格上命名的或者编号的事件。这可以是部分,结果,或得分报告。
datMinRemaining():
该测验所剩余的最小时间。
UTDCore.IAttributes(接口)
UTDCore.IAttribute的集合
从UTDCore.Collection导出
UTDCore.IPresentations(接口)
UTDCore.cPresentation的集合
从UTDCore.Collection导出
UTDCore.ISections(接口)
UTDCore.cSection的集合。
从UTDCore.Collection导出
UTDCore.IDisplay(接口)
由处理标题栏、显示、非回答项目和概述的插件所支持的接口。
公共属性:
oSection:UTDCore.ISection
该显示所处的部分。
公共操作:
PresentationStarting(oPresentation:UTDCore.IPresentation,oContainerNotify:UTDCore.IContainerNotify):
由测试驱动程序调用以告知插件,新的演示页开始。插件可以保留IPresentation和IContainerNotify对象直至PresentationEnding。参见IContainerNotify::Activate。
PresentationEnding():
由测试驱动程序调用以告知插件,新的演示页结束。在调用该程序之后,驱动程序期望插件释放在PresentationStarting中传递的IPresentation和IContainerNotify对象。
UTDCore.ISection(接口)
表示一个测验部分或子部分。可以包含演示页或部分。
从cEvent导出
公共属性:
oNavigation:UTDCore.INavigate
该部分的导航插件。
colCustornAttributes:UTDCore.IAttributes
自定义属性的集合。只读。
sName:String
只读部分名。
sTitle:String
部分名。只读。
oScoring:UTDCore.IScore
用于部分的得分插件。
oScriptStart:UTDCore.IScript
在该对象执行前执行的脚本。
oScriptFinish:UTDCore.IScript
在该对象执行后执行的脚本。
oScriptConditional:UTDCore.IScript
该演示脚本被评估。如果true那么该对象被传送。
oReview:UTDCore.IPresentation
部分的查阅演示页。如果部分不具有为其定义的查阅,则为空。
oCurChild:Object
当前正被递送的孩子。这可以是cSection或cPresentation。
datStart:Date
部分开始的日期和时间。
datFinish:Date
部分结束的日期和时间。
colChildren:UTDCore.IEvents
该部分的演示页或子部分的集合。
oSelection:UTDCore.ISelection
用于该部分的选择插件。
oTemplate:UTDCore.cTemplate
用于该部分的模板。
oTimer:UTDCore.iTimer
该部分的定时器插件。
dtTimeRemaining:DATE
返回在部分中剩余的时间。它从iTimer插件获得剩余秒。然后它将其转换成DATE类型的变量(aka VT_DATE)。
colDelivered:UTDCore.IEvents
已经演示的部分的演示页或子部分的集合。它们按照它们出现的顺序排序。
bComment:Boolean=FALSE
部分的注释模式、通常由导航来设置
bItemsReadOnly:Boolean=FALSE
在部分中项目的只读模式。通常由导航来设置。只读项目无法改变它们的响应。
nCurChild:long=0
在colDelivered中最后传送的事件的索引。只读。
公共操作:
ChildNext()
请求驱动程序前进到下一个演示页或者子部分。
ChildPrevious():
请求驱动程序前进到前一演示页或者子部分。
ChildGoto(vPresentation:Variant):
请求驱动程序前进到命名的或者编号的演示页或者子部分。
UTDCore.IResults(接口)
由处理应试者结果的写操作的插件所支持的接口。
公共操作:
WriteResults()
写测验结果。
UTDCore.eCategoryContent(接口)
用于ICategory::eContents的可能值的枚举:
//类别的这些类型相应于XXL
categorycontents
eCategoryContent_Anything
eCategoryContent_Section
eCategoryContent_Items
eCategoryContent_Categories
UTDCore.IEvents(接口)
IEvents包含如iDispatch对象的可传送的类。它们必须被分别地查询以确定它们确切的类型。事件的哪一类型被返回取决于集合来自何处。
IEvents可以包含:
IExam,IForm,ISection,IcItem,IPresentation,IcItem,IcReport,和IcResults。
从UTDCore.Collection导出
UTDCore.IPersistInstanceSet(接口)
希望作为属性集保留在实例文件中的插件的接口。
公共属性:
IsDirty:Boolean
如果对象需要保存状态至实例文件,那么返回TRUE。
公共操作:
Save(oPropSet:POLESS.IPropertyStorageVB):
由测试驱动程序调用以保存插件数据至实例文件。
Reload(oPropSet:POLESS.IPropertyStorageVB):
由测试驱动程序调用以从实例文件重新加载插件数据。接着将调用IPersistResource*::Load。
Administration System(管理系统)
这是一个或多个构成管理系统的组件。这将根据信道和事件变化。
UAS.ITransfer(接口)
管理接口将结果和其它文件传送回数据中心。它包括路由。它也可以由仿真UAS的UTD2ETS和Launchtest组件进行仿真。
UAS.IPrint(接口)
用于保存得分报告以便重新打印的管理系统接口。
也处理初始打印。
同样由仿真UAS的UTD2ETS和Launchtest组件进行仿真。
UAS.Iappointment(接口)
该接口是Unified Administration System(统一的管理系统)的一部分。它允许访问应试者参加测验的应试者信息。
同样由仿真UAS的UTD2ETS和Launchtest组件进行仿真。
附件B-
POLESS类和接口
内容表
内容表………………………………………………………………2
所选逻辑视图报告…………………………………………………3
逻辑视图……………………………………………………………3
CAlgorithm…………………………………………………………3
CEnumAlgorithm……………………………………………………3
CEnumProviders……………………………………………………3
CProvider……………………………………………………………3
IAlgorithm…………………………………………………………4
ICrypto………………………………………………………………4
IEnumAlgorithms……………………………………………………5
IEnumProviders……………………………………………………5
IFileRoot……………………………………………………………
POLESS.IPropertyStorageAmalgamated…………………………8
POLESS.IPropertyStorageVB………………………………………8
POLESS.IStorageAmalgamated……………………………………9
POLESS.IStorageVB………………………………………………10
POLESS.IStreamVB…………………………………………………12
POLESS.IcStorage…………………………………………………13
POLESS.IcStorageRoot……………………………………………13
POLESS.cCrypto……………………………………………………14
POLESS.cFileRoot…………………………………………………14
POLESS.cPropertyStorage………………………………………15
POLES S.cPropertyStorageAmalgamated………………………15
POLESS.cStorage…………………………………………………15
POLESS.cStorageAmalgamated……………………………………15
POLESS.cStorageRoot……………………………………………15
POLESS.cStream……………………………………………………15
POLESS.iStorageVB………………………………………………15
POLESS.iStreamVB…………………………………………………15
总计:………………………………………………………………16
逻辑包结构…………………………………………………………16
Figure C20048002358501781
IAlgorithm
公共操作:
get_id:(pAlgld:LONG*):HRESULT
get_length(pdwlength:LONG*):HRESULT
get_minLength(dwMinLength LONG*):HRESULT
get_maxLength(dwMaxLength:LONG*):HRESULT
get_numProtocol(dwNumProrocol:LONG*):HRESULT
get_name(sName:BSTR*):HRESULT
get_longName(sName:BSTR*):HRESULT
get_class(peAlgClass:eAlgorithmClass):HRESULT
ICrypto
加密/解密接口
公共操作:
get_ProviderName(psProviderName:BSTR*):HRESULT
返回Crypto供应商名。
get_ProviderName(sProviderName:BSTR):HRESULT
设置Crypto供应商名。
Get_password(spassword:BSTR*=″″):HRESULT
仅用于发起人资源文件。
put_Password(sPassword:BSTR):HRESULT
仅用于发起人资源文件。
get_FileType(eFileType:eFile_TYPE):HRESULT
put_FileType(eFileType:eFile_TYPE):HRESULT
get_Algorithm(eAlgorithm:eALGORITHM):HRESULT
put_Algorithm(eAlgorithm:eALGORITHM):HRESULTEnumProviders(eProvType:eProviderType,ppenum:IEnumProviders**):HRESULT
EnumAlgorithms(sProvName:BSTR,eAlgClass:eAlgorithmClass,ppenum:IEnumAlgonthms**):HRESULT
IEnumAlgorithms
公共操作:
Next(ppProv:IAlgorithm**):HRESULT
返回下一个算法接口,或者假如不再有算法时为空(NULL)。
Skip(celt:ULONG):HRESULT
跳过下一个指定编号的算法。
Reset():HRESULT
复位枚举器至初始状态。
Clone(ppenum:IEnumAlgorithms):HRESULT
创建包含与当前枚举具有相同枚举状态的另一个枚举器。
IEnumProviders
公共操作:
Next:ppProv:lProvider**):
返回下一个提供器接口,或者不再有提供器时为空(NULL)。
Skip(celt:ULONG):HRESULT
略过提供器的下一个指定数字。
Reset():HRESULT
复位枚举器至起始。
Clone(ppenum:IEnumProvider**):HRESULT
创建包含与当前枚举具有相同枚举状态的另一个枚举器。
IFileRoot
根POLESS接口。该接口应当仅仅用于每次打开一个文件,并且直至所有其它存储器、流和属性存储器接口被释放并且准备关闭文件时才被释放。
公共操作:
StorgeFileCreate(sFileName:String,eBlockSize:eBLOCK_SIZE,eAccessMode:eACCESS MODE,bCompression:Boolean,bEncrypt,:Boolean,oCrypt:POLESS.cCrypt,bCRC:Boolean):iStorage
创建新的存储文件,返回根存储接口。通过在根存储器中的流中存储该类的CLSID,将新结构的存储文件标记为POLESS文件。
StorageFileOpen(sFileName:String,eAccessMode:eACCESS MODE):iStorage
打开现有存储文件。返回根存储接口。
如果启动那么检查CRC并且选择读取访问模式。如果CRC无法匹配,那么返回错误。
CrypoGet():POLESS.cCrypt
获得缺省配置的crypo类。应当在创建或打开存储文件时被设置和使用。
bStorageFile(sFileName:String):Boolean
如果所提供的文件是OLE结构的存储文件和POLELESS存储文件,那么返回TRUE。
StorageAmalgamatedGet():POLESS.cStorageAmalgamated
获得空的cStorageAmalgamated。
PropertyStorageAmalgamatedGet():
POLESS.cPropertyStorageAmalgamated
DeltaFileCreate(sFileNameOriginal:String,sFileNameUpdate:String,sFileNameDelta:String,bEncrypt:Boolean,oCrypto:POLESS.cCrypto,bCRC:Boolean):
创建POLESS差异文件。它将源poless文件与更新的poless文件比较并创建poless变化文件。
变化文件包含对源poless树的分支增加和分支删除,以创建更新的poless树。
它包含源文件的CRC和更新文件的CRC。
DeltaFileApply(sFileNameOriginal:String,sFileNameUpdate:String,sFileNameDelta:String):
应用POLESS变化文件。将源poless文件应用至poless变化文件并创建更新的poless文件。
与源文件计算的CRC与在源poless文件的变化文件的CRC进行比较。
如果它们匹配则关联变化以创建更新的poless文件。计算更新文件的CRC并将其与变化文件的CRC相比较。
GetObjectFromPath(sFullPath:BSTR,eAccessMode:eACCESS MODE,ppDisp:IDispatch**):HRESULT
使用名字来检索由路径命名的对象。返回指向所检索对象的IDispatch指针。
CreateStreamFromFile(sName:BSTR,ppDisp:IDispatch**):HRESULT
创建结构的存储流并将其填充到文件内容。
CreateStreamFromBSTR(sIn:BSTR,ppDisp:IDispatch**):HRESULT
创建结构的存储流并在其中填充指定的BSTR。
MemoryStreamFromStream(pStreamIn:IStream*,ppDisp:IDispatch**):HRESULT
用于复制流至新创建的存储器流对象,两个流的寻找指针在操作之后被重置到流的初始。
GetBindCtx(ppBindCtx:IBindCtx**):HRESULT
返回用于创建名字的静态绑定内容。
POLESS.IPropertyStorageAmalgamated
公共操作:
PropertyStorageAdd(oPropertySet:IDispatch*,bEnd:VARIANT_BOOL=TRUE):HRESULT
增加PropertySet至PropertySets的集合。
ClearStorage():HRESULT
清除PropertySets的集合。
POLESS.IPropertyStorageVB
管理单个属性集的固有属性。
公共操作:
ReadVB(sName:BSTR,ppvVal:VARIANT**):HRESULT
从属性集中读取特定属性的值。
WriteVB(sName:BSTR,pvVal:VARIANT*):HRESULT
将指定属性的值写入属性集。如果属性不存在,那么属性/值对将被创建。如果属性已经存在,,那么如果以eAccess_Write模式打开,就对其进行更新。.
Delete(sName:BSTR):HRESULT
从属性集中删除属性。
CommitVB(grfFlags:DWORD):HRESULT
RevertVB():HRESULT
SetClass(sProgId:BSTR):HRESULT
get_nCount(nCount:short*):HRESULT
返回在属性集中属性的计数值。
CopyTo(pDest:IPropertyStorageVB*):HRESULT
将源属性集的内容复制到目的属性集。
GetName(nIndex:short,sName:BTSR*):HRESULT
返回特定属性名。
POLESS.IStorageAmalgamated
公共操作:
StorageAdd(oStorage:IStorage,bEnd:VARIANT_BOOL=TRUE):
增加新的存储至存储的集合。
ClearStorage():
从集合中清除所有存储对象。
POLESS.IStorageVB
公共操作:
Clear():
清除所有元素的存储:子存储和流。
CommitVB():
确保对在事物处理模式中打开的存储对象作出的任何改变都反映在父存储器中。对于在直接模式中的非根存储对象,该程序没有影响。对于根存储,它反映出在实际设备中的改变,例如,磁盘上的文件。对于在直接模式中打开的根存储对象,总是在释放该对象前调用commit程序。Commit对用于根存储的磁盘的所有存储缓冲器进行刷新,并将基于失败返回错误代码。尽管释放对象也将存储缓冲器刷新至磁盘,但是它不能根据失败返回任何错误代码。因此,在没有首先调用Commit的情况下调用Releasing将导致不确定的结果。
RevertVB():
放弃自最后一次commit操作起对存储对象所作的所有改变。
sElementName(vElement:Variant):String
返回元素名。
bStorage(vElement:Variant):Boolean
如果元素是子存储那么返回TRUE
oElement(vElement:Variant):Object
为所选元素返回POLESS.iStreamVB或者POLESS.iStorageVB。CreateStream(sName:String,eAccess:eACCESS_MODE,bCompression:Boolean):POLESS.iStreamVB
以包含在该存储对象中的指定名称创建并打开流对象。存储对象内所有元素——流以及其它存储对象——都保留在同一名称空间中。
如果无法创建流那么什么也不返回。
OpenStream(sName:String,eAceess:eACCESS_MODE):POLESS.iStreamVB
在指定访问模式中打开该存储对象内的现有流对象。
如果流名称未被发现,那么我们将寻找前缀带有″\03″的流名称。这是链接的流。该流的内容是到哪里去找这个流的文件和存储。
如果流无法打开,那么什么也不返回。
CreateStorage(sName:String,eAccess:eACCESS_MODE):POLESS.iStreamVB
创建并打开嵌套在该存储对象内的新的存储对象。
如果存储无法创建那么什么也不返回。
OpenStorage(sName:String,eAccess:eAccess_MODE):POLESS.iStorageVB
在指定访问模式中打开带有指定名称的现有存储对象。
如果存储无法被打开那么什么也不返回。
Get_sName(sName:BSTR*):HRESULT
返回存储名称。
Get_oStorage(ppDisp:IDispatch**):HRESULT
返回IDispatch接口。
Get_nCount(pnCount:short*):HRESULT
返回存储中元素的计数。
GetCompression():Boolean
确定流是否可以在文件中压缩。如果允许,那么流可以在创建时被选择地压缩。
GetEncryption():Boolean
确定是否能为该文件加密。如果允许,那么所有流都将被加密。
GetCRC():Boolean
表示是否在该文件上执行CRC检查。
CreateStreamLinked(sName:BSTR,sLocation:BSTR,sFile:BSTR,eAccess:eACCESS_MODE,ppStreamVB:IStreamVB**):HRESULT
CreatePropertyStg(sName:BSTR,grfFlags:DWORD,bCompress:VARTANT_BOOL,ppPropStg:IPropertyStorageVB):HRESULT创建属性存储器。
OpenPropertyStg(sName:BSTR,grfFlags:DWORD,dwReserved:DWORD,ppPropStg:IPropertyStorageVB):HRESULT
SetClass(sProgId:BSTR):HRESULT
RegisterAlias(sName:BSTR):HRESULT
Destroy(sName:BSTR):HRESULT
消除指定元素。
POLESS.IStreamVB
公共操作:
ReadVB(bytData:byte(),nBytes:Integer):HRESULT
从流读取数据。
WriteVB(bytData:byte()):HRESULT
写数据至流。整个字节数组被写入。
Clear():HRESULT
清除所有数据的流。
Reset():HRESULT
将流中位置重置到开始。
get_sName(sName:BSTR*):HRESULT
返回流名。
get_oStream(ppDisp:IDispatch**):HRESULT
返回IDispatch接口。
CopyTo(pDest:IStreamVB*):HRESULT
将源流的内容复制到目的流。
POLESS.IcStorage
从IStorage导出
公共操作:
CreatePropertyStg(sName:BSTR,grfFlags:DWORD,bCompress:Boolean,ppPropStg:IPropertyStorage**):HRESULT
创建并打开在流对象中的属性集。
OpenPropertyStg(sName:BSTR,grfFlags:DWORD,dwReserved:DWORD,ppPropStg:IPropertyStorage**):HRESULT
打开在指定流对象中的现有属性集。
CreateStreamLinked(sName:BSTR,sLocation:BSTR,sFile:BSTR,eAccess_MODE,ppStream:Istream**):HRESULT
RegisterAlias(sName:BSTR):HRESULT
POLESS.IcStorageRoot
从POLESS.IcStorage导出
公共操作:
get_Compression(pbCompress:VARIANT_BOOL*):HRESULT
确定流是否可以被压缩在文件中。如果允许,那么流在被创建时可以被选择性地压缩。
get_Encryption(pbEncrypt:VARIANT_BOOL*):HRESULT
确定是否能为该文件加密。如果允许,那么所有流都将被加密。
get_CRC():HRESULT
表示是否在该文件上执行CRC检查。
GetObjectFromPath(sItemPath:BSTR,eAccessMode:eACCESS_MODE,refiid:REFIID,ppUnk:IUnknown**):HRESULT
POLESS.cCrypto
类控制结构存储的加密/解密的配置。
公共属性:
sProviderName:String=MS_DEF_PROV
Cyrto供应商的名。
eProviderType:ePROVIDER_TYPE=PROV_RSA_FULL
Cyrto供应商的类型。
加密的供应商类型
密码学领域广博且不断发展。由许多不同标准的数据格式和协议。这些通常被组织为组或类,每个组或类都有自己的数据格式和处理的方法。即使两个类使用同一种算法(例如,RC2分组密码),它们通常也将使用不同的填充方案、不同的关键字长度、和不同的缺省模式。设计Microsoft@CryptoAPI以便CSP供应商类型代表特定类。
ePROV_RSA_FULL
ePROV_RSA_SIG
ePROV_RSA_SCHANNEL
ePROV_DSS
ePROV_DSS_DH
ePROV_DH_SCHANNEL
ePROV_FORTEZZA
ePROV_MS_EXCHANGE
ePROV_SSL
sContainerName:String
关键字名。没有缺省,必须通过使用来提供。
sPassword:String
在公共/专用关键字对上的可选密码。仅由人来输入。可以用于查阅磁盘和它们的资源文件。
POLESS.cFileRoot
根POLESS类。必须被实例化以执行任一POLESS函数。处理POLESS文件的创建和打开。
POLESS.cPropertyStorage
POLESS.cPropertyStorageAmalgamated
POLESS.cStorage
iStorage的POLESS实施。它处理任何POLESS指定的任何事务并且然后将该工作捆绑到OLE2复合文档存储类。
POLESS.CStorageAmalgamated
iStorage的POLESS实施。该类保留有对iStorage对象的顺序集合的引用。
当流被打开时,它搜索存储对象的集合,以查找已经请求了流的第一存储对象。返回该流。
它处理复合流解决方案并将所有其他工作捆绑到POLESS.cStorage。该存储是只读的。它将不允许创建流或存储。它主要用于读取测验资源文件。
注意:这与复合文档无关。
POLESS.cStorageRoot
iStorage和iStorageRoot的POLESS事实方案。它处理任何根POLESS细节并将所有工作捆绑到标准POLESS Storage类。
POLESS.cStream
iStream的POLESS实施。它处理任一POLESS特定事务并随后将工作捆绑到OLE2复合文档流类。该特定工作包括流的压缩/解压缩和加密/解密。
POLESS.iStorageVB
VB友好存储接口。
POLESS.IStreamVB
VB友好流接口。
总计:
1逻辑分组
26类
逻辑分组结构
逻辑视图
OLE2SS

Claims (31)

1.一种基于计算机的测试系统,包括:
(a)传送存储装置,用于存储至少一个基于计算机的测试,并且在电子数据网络上将所述基于计算机的测试传送给至少一个测试应试者;
(b)测试驱动程序装置,用于对所述基于计算机的测试从所述传送存储装置的传送进行控制;和
(c)高速缓冲存储器装置,其响应于对至少一个测试环境变量的监视来对所述基于计算机的测试进行高速缓存,
其中所述测试驱动程序装置包括用于对所述基于计算机的测试的传送进行控制的测试驱动模块,其中所述测试驱动模块包括:
第一请求接口,用于请求可高速缓存的数据对象;
第二请求接口,用于请求可高速缓存的应用程序对象;
请求处理器,用于处理所述测试驱动模块的各请求,以便对可高速缓存的数据对象和可高速缓存的应用程序对象进行检索;
解密模块,用于对可高速缓存的数据对象和可高速缓存的应用程序对象进行解密;
解压缩模块,用于对可高速缓存的数据对象和可高速缓存的应用程序对象进行解压缩;
第一请求模块,用于检索可高速缓存的数据对象;
第二请求模块,用于检索可高速缓存的应用程序对象;
第一高速缓存,用于存储检索出的可高速缓存的数据对象;
第二高速缓存,用于存储检索出的可高速缓存的应用程序对象;
激励处理器,用于对所述基于计算机的测试的传送进行自适应处理;
高速缓存控制器,用于对检索可高速缓存的数据对象和可高速缓存的应用程序对象的源进行控制,以及用于对存储在高速缓冲存储器装置中的可高速缓存的数据对象和可高速缓存的应用程序对象的量进行控制;
网络接口,用于与多个测试发布服务器相通信;和
验证组件,用于验证可高速缓存的数据对象和可高速缓存的应用程序对象。
2.如权利要求1所述的基于计算机的测试系统,其中所述传送存储装置包括多个测试发布服务器。
3.如权利要求2所述的基于计算机的测试系统,其中所述多个测试发布服务器包括:
(a)程序调配装置,用于对向所述测试应试者传送的测试驱动程序装置进行存储;
(b)数据对象调配装置,用于对向所述测试应试者传送的所述基于计算机的测试的可高速缓存的数据对象进行存储;和
(c)应用程序对象调配装置,用于对向所述测试应试者传送的所述基于计算机的测试的可高速缓存的应用程序对象进行存储。
4.如权利要求3所述的基于计算机的测试系统,其中所述的可高速缓存的数据对象包括文本、多媒体和模板对象。
5.如权利要求3所述的基于计算机的测试系统,其中所述的可高速缓存的应用程序对象包括插件程序对象。
6.如权利要求1所述的基于计算机的测试系统,其中所述的高速缓冲存储器装置包括第一和第二存储器装置。
7.如权利要求6所述的基于计算机的测试系统,其中所述第一存储器装置包括磁性存储介质。
8.如权利要求6所述的基于计算机的测试系统,其中所述第二存储器装置包括RAM。
9.如权利要求1所述的基于计算机的测试系统,其中所述测试驱动程序装置进一步包括:
(a)会话管理组件,用于对到所述测试应试者的所述基于计算机的测试进行管理;
(b)监考人验证组件,用于对所述基于计算机的测试的至少一个监考人进行标识;
(c)计划组件,用于对所述基于计算机的测试的测试应试者的注册进行验证;
(d)第一高速缓存控制器,用于在加密的RAM中对可高速缓存的数据对象的存储进行控制;
(e)第二高速缓存控制器,用于在RAM中对可高速缓存的应用程序对象的存储进行控制;和
(f)浏览器演示组件,用于向所述测试应试者提供所述基于计算机的测试。
10.如权利要求1所述的基于计算机的测试系统,其中所述测试驱动程序装置包括至少一个监视装置,用于监视测试环境变量。
11.如权利要求10所述的基于计算机的测试系统,其中所述监视装置是测试应试者进度监视器,用于在基于计算机的测试期间检测所述测试应试者的进度。
12.如权利要求10所述的基于计算机的测试系统,其中所述监视装置是测试应试者表现监视器,用于在基于计算机的测试期间检测所述测试应试者的能力。
13.如权利要求10所述的基于计算机的测试系统,其中所述监视装置是网络带宽监视器,用于确定网络连接的速度,其中所述基于计算机的测试正通过所述网络连接被传送。
14.如权利要求10所述的基于计算机的测试系统,其中所述监视装置是网络状态监视器,用于确定网络连接的状态,其中所述基于计算机的测试正通过所述网络连接被传送。
15.如权利要求10所述的基于计算机的测试系统,其中所述监视装置是服务器状态监视器,用于确定服务器的状态,其中所述基于计算机的测试正从所述服务器传送。
16.如权利要求1所述的基于计算机的测试系统,其中所述电子数据网络是因特网。
17.一种基于计算机的测试方法,包括以下步骤:
(a)通过传送存储器装置存储至少一个基于计算机的测试,以及在电子数据网络上将所述基于计算机的测试传送给至少一个测试应试者;
(b)通过测试驱动程序装置对来自所述传送存储器装置的所述基于计算机的测试的传送进行控制;以及
(c)响应于对至少一个测试环境变量的监视,在高速缓冲存储器装置中高速缓存并存储所述基于计算机的测试,
其中(b)步骤包括利用测试驱动程序对所述基于计算机的测试的传送进行控制的步骤,所述测试驱动程序包括以下步骤:
利用第一请求接口请求可高速缓存的数据对象;
利用第二请求接口请求可高速缓存的应用程序对象;
利用请求处理器处理所述测试驱动程序的请求,以便对可高速缓存的数据对象和可高速缓存的应用程序对象进行检索;
利用解密模块对可高速缓存的数据对象和可高速缓存的应用程序对象进行解密;
利用解压缩模块对可高速缓存的数据对象和可高速缓存的应用程序对象进行解压缩;
利用第一请求模块检索可高速缓存的数据对象;
利用第二请求模块检索可高速缓存的应用程序对象;
利用第一高速缓存对检索出的可高速缓存的数据对象进行存储;
利用第二高速缓存对检索出的可高速缓存的应用程序对象进行存储;
利用激励处理器对所述基于计算机的测试的传送进行自适应处理;
利用高速缓存控制器对可高速缓存的数据对象和可高速缓存的应用程序对象的检索源进行控制,以及对存储在高速缓冲存储器装置中的各可高速缓存的数据对象和各可高速缓存的应用程序对象的量进行控制;
利用网络接口与多个测试发布服务器相通信;以及
利用验证组件对可高速缓存的数据对象和可高速缓存的应用程序对象进行验证。
18.如权利要求17所述的基于计算机的测试方法,所述方法包括以下步骤:在多个测试发布服务器上对传送给多个测试应试者的所述基于计算机的测试进行存储。
19.如权利要求18所述的基于计算机的测试方法,所述方法包括以下步骤:对包括文本、多媒体和模板对象的可高速缓存的数据对象进行存储。
20.如权利要求18所述的基于计算机的测试方法,所述方法包括以下步骤:对包括插件程序对象的可高速缓存的应用程序对象进行存储。
21.如权利要求18所述的基于计算机的测试方法,所述方法包括以下步骤:在包括磁性存储介质的第一存储器装置中存储所述测试驱动程序装置。
22.如权利要求17所述的基于计算机的测试方法,所述方法包括以下步骤:在包括RAM的第二存储器装置中存储所述可高速缓存的数据对象。
23.如权利要求17所述的基于计算机的测试方法,所述方法包括以下步骤:在包括RAM的第二存储器装置中存储所述可高速缓存的应用程序对象。
24.如权利要求17所述的基于计算机的测试方法,所述方法进一步包括以下步骤:
(a)利用会话管理组件对到所述测试应试者的所述基于计算机的测试进行管理;
(b)利用监考人验证组件对所述基于计算机的测试的至少一个监考人进行标识;
(c)利用计划组件对所述基于计算机的测试的测试应试者的注册进行验证;
(d)利用第一高速缓存控制器对在加密的RAM中的可高速缓存的数据对象的存储进行控制;
(e)利用第二高速缓存控制器对在RAM中的可高速缓存的应用程序对象的存储进行控制;以及
(f)利用浏览器演示组件向所述测试应试者提供所述基于计算机的测试。
25.如权利要求17所述的基于计算机的测试方法,所述方法包括以下步骤:监视至少一个测试环境变量。
26.如权利要求25所述的基于计算机的测试方法,所述方法包括以下步骤:监视测试应试者的进度,用于在基于计算机的测试期间对所述测试应试者的进度进行检测。
27.如权利要求25所述的基于计算机的测试方法,所述方法包括以下步骤:监视测试应试者的表现,用于在基于计算机的测试期间对所述测试应试者的能力进行检测。
28.如权利要求25所述的基于计算机的测试方法,所述方法包括以下步骤:监视网络带宽,用于确定网络连接的速度,其中所述基于计算机的测试在通过所述网络连接被传送。
29.如权利要求25所述的基于计算机的测试方法,所述方法包括以下步骤:监视网络状态,用于确定网络连接的状态,其中所述基于计算机的测试正通过所述网络连接而被传送。
30.如权利要求25所述的基于计算机的测试方法,所述方法包括以下步骤:监视服务器状态,用于确定服务器的状态,所述基于计算机的测试正从所述服务器被传送。
31.如权利要求17所述的基于计算机的测试方法,所述方法包括以下步骤:在因特网上传送所述基于计算机的测试。
CN200480023585A 2003-06-20 2004-06-21 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法 Expired - Fee Related CN100585662C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US47995203P 2003-06-20 2003-06-20
US60/479,952 2003-06-20
US10/870,428 2004-06-18

Publications (2)

Publication Number Publication Date
CN1836268A CN1836268A (zh) 2006-09-20
CN100585662C true CN100585662C (zh) 2010-01-27

Family

ID=37003333

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200480023585A Expired - Fee Related CN100585662C (zh) 2003-06-20 2004-06-21 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法

Country Status (2)

Country Link
US (3) US20050026130A1 (zh)
CN (1) CN100585662C (zh)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8769517B2 (en) * 2002-03-15 2014-07-01 International Business Machines Corporation Generating a common symbol table for symbols of independent applications
CN100585662C (zh) * 2003-06-20 2010-01-27 汤姆森普罗梅特里克公司 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法
US8517742B1 (en) * 2005-05-17 2013-08-27 American Express Travel Related Services Company, Inc. Labor resource testing system and method
US8170466B2 (en) * 2005-05-27 2012-05-01 Ctb/Mcgraw-Hill System and method for automated assessment of constrained constructed responses
US20070031801A1 (en) * 2005-06-16 2007-02-08 Ctb Mcgraw Hill Patterned response system and method
US20070048723A1 (en) * 2005-08-19 2007-03-01 Caveon, Llc Securely administering computerized tests over a network
US7376550B1 (en) 2005-10-26 2008-05-20 Juniper Networks, Inc. Simulation of network traffic using non-deterministic user behavior models
US9489290B1 (en) 2005-12-30 2016-11-08 The Mathworks, Inc. Scheduling tests based on a valuation system
US20080131860A1 (en) * 2006-09-06 2008-06-05 Brandt Christian Redd Security and tamper resistance for high stakes online testing
US9892650B2 (en) 2006-09-11 2018-02-13 Houghton Mifflin Harcourt Publishing Company Recovery of polled data after an online test platform failure
US9142136B2 (en) * 2006-09-11 2015-09-22 Houghton Mifflin Harcourt Publishing Company Systems and methods for a logging and printing function of an online proctoring interface
US20080286743A1 (en) * 2007-05-15 2008-11-20 Ifsc House System and method for managing and delivering e-learning to hand held devices
US9704410B2 (en) * 2009-12-04 2017-07-11 American Institutes For Research In The Behavioral Sciences System and method for pre-selection in computer adaptive tests
CA2723653C (en) * 2010-01-07 2022-03-08 Desire2Learn Incorporated Systems and methods for guided instructional design in electronic learning systems
US20130067093A1 (en) * 2010-03-16 2013-03-14 Optimi Corporation Determining Essential Resources in a Wireless Network
US8429744B1 (en) * 2010-12-15 2013-04-23 Symantec Corporation Systems and methods for detecting malformed arguments in a function by hooking a generic object
CN102789483B (zh) * 2012-06-30 2014-12-10 华为技术有限公司 数据验证方法、装置和系统
US9595205B2 (en) * 2012-12-18 2017-03-14 Neuron Fuel, Inc. Systems and methods for goal-based programming instruction
KR20160031005A (ko) * 2013-07-16 2016-03-21 가부시키가이샤 베네세 코포레이션 휴대형 정보 처리 장치, 테스트 지원 시스템 및 테스트 지원 방법
GB201315520D0 (en) * 2013-08-30 2013-10-16 Deltaxml Ltd Representation of multiple markup language files that differ in structure and content in one file for the production of new markup language files
US20150310748A1 (en) * 2014-04-23 2015-10-29 Entrain Corporation Active training platform and environment
CN105338026B (zh) * 2014-07-24 2018-10-09 阿里巴巴集团控股有限公司 数据资源的获取方法、装置和系统
US10078739B1 (en) * 2014-10-01 2018-09-18 Securus Technologies, Inc. Compelling data collection via resident media devices in controlled-environment facilities
US10394692B2 (en) * 2015-01-29 2019-08-27 Signalfx, Inc. Real-time processing of data streams received from instrumented software
JP6390518B2 (ja) * 2015-05-29 2018-09-19 京セラドキュメントソリューションズ株式会社 情報処理装置
US10084738B2 (en) 2015-10-23 2018-09-25 Paypal, Inc. Emoji commanded action
US10187495B2 (en) * 2016-09-23 2019-01-22 Entit Software Llc Identifying problematic messages
CN107315667B (zh) * 2017-06-26 2020-10-23 苏州浪潮智能科技有限公司 一种存储系统二级缓存加速性能测试方法及系统
US11386798B2 (en) 2017-12-13 2022-07-12 Caveon, Llc Systems and methods for testing skills capability using technologically-enhanced questions in a computerized environment
CN108415852B (zh) * 2018-03-01 2021-12-14 曲阜师范大学 一种Flash存储器的数据存取方法
US10362097B1 (en) * 2018-06-05 2019-07-23 Capital One Services, Llc Processing an operation with a plurality of processing steps
TWI680359B (zh) * 2018-12-15 2019-12-21 英業達股份有限公司 智能測試工位管理系統及其方法
US10789222B2 (en) 2019-06-28 2020-09-29 Alibaba Group Holding Limited Blockchain-based hierarchical data storage
CN110334154B (zh) * 2019-06-28 2020-07-21 阿里巴巴集团控股有限公司 基于区块链的分级存储方法及装置、电子设备
CN110968815B (zh) * 2019-12-04 2023-06-20 北京达佳互联信息技术有限公司 页面刷新方法、装置、终端及存储介质
CN112052181B (zh) * 2020-09-25 2023-06-27 中国直升机设计研究所 基于软件工程化的嵌入式软件自动化测试系统
CN113157784B (zh) * 2020-12-30 2023-02-21 浪潮云信息技术股份公司 一种数据库数据导出工具的插件化实现方法
CN116483548B (zh) * 2023-06-25 2023-08-22 北森云计算有限公司 多线程计算机自适应测验方法、装置及计算机设备

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5565316A (en) * 1992-10-09 1996-10-15 Educational Testing Service System and method for computer based testing
US5779549A (en) * 1996-04-22 1998-07-14 Walker Assest Management Limited Parnership Database driven online distributed tournament system
US5779486A (en) * 1996-03-19 1998-07-14 Ho; Chi Fai Methods and apparatus to assess and enhance a student's understanding in a subject
US5947747A (en) * 1996-05-09 1999-09-07 Walker Asset Management Limited Partnership Method and apparatus for computer-based educational testing
US5915973A (en) * 1997-03-11 1999-06-29 Sylvan Learning Systems, Inc. System for administration of remotely-proctored, secure examinations and methods therefor
US6112049A (en) * 1997-10-21 2000-08-29 The Riverside Publishing Company Computer network based testing system
US6963914B1 (en) * 1998-09-01 2005-11-08 Lucent Technologies Inc. Method and apparatus for retrieving a network file using a logical reference
US6299452B1 (en) * 1999-07-09 2001-10-09 Cognitive Concepts, Inc. Diagnostic system and method for phonological awareness, phonological processing, and reading skill testing
US6470171B1 (en) * 1999-08-27 2002-10-22 Ecollege.Com On-line educational system for display of educational materials
US6681098B2 (en) * 2000-01-11 2004-01-20 Performance Assessment Network, Inc. Test administration system using the internet
US7043193B1 (en) * 2000-05-09 2006-05-09 Knowlagent, Inc. Versatile resource computer-based training system
US6712615B2 (en) * 2000-05-22 2004-03-30 Rolf John Martin High-precision cognitive performance test battery suitable for internet and non-internet use
WO2002009391A2 (en) * 2000-07-10 2002-01-31 Educational Testing Service System and methods for computer-based testing using network-based synchronization of information
US6988096B2 (en) * 2000-07-18 2006-01-17 Learningsoft Corporation Adaptive content delivery system and method
US7099620B2 (en) * 2000-09-22 2006-08-29 Medical Council Of Canada Method and apparatus for administering an internet based examination to remote sites
US20020098468A1 (en) * 2001-01-23 2002-07-25 Avatar Technology, Inc. Method for constructing and teaching a curriculum
US8199649B2 (en) * 2001-03-28 2012-06-12 Alcatel Lucent Method and apparatus for rerouting a connection in a data communication network based on a user connection monitoring function
US6978115B2 (en) * 2001-03-29 2005-12-20 Pointecast Corporation Method and system for training in an adaptive manner
US20030039948A1 (en) * 2001-08-09 2003-02-27 Donahue Steven J. Voice enabled tutorial system and method
US20040010629A1 (en) * 2001-11-01 2004-01-15 Telecommunications Research Associates System for accelerating delivery of electronic presentations
US7828551B2 (en) * 2001-11-13 2010-11-09 Prometric, Inc. Method and system for computer based testing using customizable templates
US20030152904A1 (en) * 2001-11-30 2003-08-14 Doty Thomas R. Network based educational system
US7052277B2 (en) * 2001-12-14 2006-05-30 Kellman A.C.T. Services, Inc. System and method for adaptive learning
US7311524B2 (en) * 2002-01-17 2007-12-25 Harcourt Assessment, Inc. System and method assessing student achievement
US20040005536A1 (en) * 2002-01-31 2004-01-08 Feng-Qi Lai Universal electronic placement system and method
GB0213073D0 (en) * 2002-06-07 2002-07-17 Hewlett Packard Co Method of maintaining availability of requested network resources
US8491311B2 (en) * 2002-09-30 2013-07-23 Mind Research Institute System and method for analysis and feedback of student performance
US20040229199A1 (en) * 2003-04-16 2004-11-18 Measured Progress, Inc. Computer-based standardized test administration, scoring and analysis system
US7181158B2 (en) * 2003-06-20 2007-02-20 International Business Machines Corporation Method and apparatus for enhancing the integrity of mental competency tests
CN100585662C (zh) * 2003-06-20 2010-01-27 汤姆森普罗梅特里克公司 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法
US20060093095A1 (en) * 2004-10-08 2006-05-04 Heck Mathew W Method and apparatus for test administration

Also Published As

Publication number Publication date
CN1836268A (zh) 2006-09-20
US20110287400A1 (en) 2011-11-24
US20140377734A1 (en) 2014-12-25
US20050026130A1 (en) 2005-02-03
US8798520B2 (en) 2014-08-05

Similar Documents

Publication Publication Date Title
CN100585662C (zh) 利用高速缓存和可高速缓存对象扩展测试驱动应用程序的功能的基于计算机测试的系统和方法
CN100486068C (zh) 利用插件来扩展测验驱动器功能的基于计算机的测验方法和系统
Kapos et al. Model-based system engineering using SysML: Deriving executable simulation models with QVT
Muškardin et al. AALpy: an active automata learning library
CN106874521A (zh) 一种大数据学习分析系统及方法
Scott et al. Kafka in Action
Roehm et al. STLInspector: STL validation with guarantees
Bendaly Hlaoui et al. Learning analytics for the development of adapted e‐assessment workflow system
Sebastián Rivera et al. Model‐based approach to develop learning exercises in language‐learning applications
Anda et al. An investigation of use case quality in a large safety-critical software development project
Fu et al. A comparison of Bayesian network learning algorithms from continuous data
Ancona et al. Mind the gap! Runtime verification of partially observable MASs with probabilistic trace expressions
CA2530064C (en) System and method for computer based testing using cache and cacheable objects to expand functionality of a test driver application
Borg Advancing Trace Recovery Evaluation-Applied Information Retrieval in a Software Engineering Context
Distante et al. A two-phase bug localization approach based on multi-layer perceptrons and distributional features
McCallum et al. Webtics: A web based telemetry and metrics system for small and medium games
Song Research on network curriculum resources recommendation system based on MVC technology
Tomić et al. An explanation facility framework for rule-based systems
Hayatnagarkar et al. A controlled natural language based knowledge representation approach for agent based simulation results
Russo et al. Acquisition of new knowledge in tutorj
Wladis et al. Syntactic Reasoning and Cognitive Load in Algebra
Houshvand A Framework for Automatically Generating Questions for Topics in Discrete Mathematics
Chen et al. Exploring Widget Identification Techniques for Web Accessibility
Fallon PolyFS Visualiser
Dong et al. Service oriented evolutions and analyses of design patterns

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CI02 Correction of invention patent application

Correction item: Priority

Correct: 2004.06.18 US 10/870,428

False: Lack of priority second

Number: 38

Page: The title page

Volume: 22

COR Change of bibliographic data

Free format text: CORRECT: PRIORITY; FROM: MISSING THE SECOND ARTICLE OF PRIORITY TO: 2004.6.18 US 10/870,428

REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1096757

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: WD

Ref document number: 1096757

Country of ref document: HK

CP01 Change in the name or title of a patent holder

Address after: American Maryland

Patentee after: PROMETRIC, A DIVISION OF THOMSON LEARNING, Inc.

Address before: American Maryland

Patentee before: Examination center LLC

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20180214

Address after: American Connecticut

Patentee after: Thomsen academic Co.

Address before: American Maryland

Patentee before: Thomson Prometrick

Effective date of registration: 20180214

Address after: American Maryland

Patentee after: Examination center LLC

Address before: Delaware

Patentee before: Poole Holdings Ltd.

Effective date of registration: 20180214

Address after: Delaware

Patentee after: Poole Holdings Ltd.

Address before: American Connecticut

Patentee before: Thomsen academic Co.

TR01 Transfer of patent right
CP01 Change in the name or title of a patent holder

Address after: American Maryland

Patentee after: Pullman Co.,Ltd.

Address before: American Maryland

Patentee before: PROMETRIC, A DIVISION OF THOMSON LEARNING, Inc.

CP01 Change in the name or title of a patent holder
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100127