Verifying the quality of third party code often requires disclosure of third party intellectual property or confidential material with all the consequences of acquiring such knowledge. This is a common problem for applications that host third party code including but not limited to device drivers, hosted web-applications, or search components, for example. From a platform standpoint, certifying third party code requires either joint development of test cases in a cooperative model or the ability to inspect test cases developed by the third party. Typically, the person or group granting certificates define what test cases should be developed by the person or group requesting the certification. Expressing such test cases is a complex and error-prone exercise that balances precision and clarity. For instance, while formal mathematical formulas are precise describing a particular test, they are costly to define and often hard to understand. Description in colloquial English, on other hand, while easy to write, are often less precise.
To more clearly illustrate a particular testing scenario, consider a unified storage platform capable of storing, organizing, sharing, and searching all types of user data. This could include the ability to store both files and objects into a database, share data among applications and users, search and organize the data while preserving compatibility with older, file-based applications. To allow database-like queries and updates over the files it contains, applications usually store various types of file metadata. Metadata consists of data that may or may not be found inside the file and underlying file system and describe the contents of the file in question. The author and subject of a document are examples of metadata. The bit rate of a music file or the resolution and color depth of a picture are other examples. How much metadata is available for each file depends on the type of the file.
Each file format—such as jpeg, Media Video (e.g., wmv) or word processing documents—have different ways to store metadata. Some file formats obey open standards while others are proprietary and carry sensitive intellectual property for their owners. To acquire data from different file types as well as update the files keeping both file and database consistent, such applications often hosts third party code, where the generic name for such code is “metadata handlers” or MDH.
Metadata handlers or MDHs pose a number of risks to the user experience, from reliability to security holes. To try to minimize problems to its customers, some software vendors define a certification process for MDHs. A substantial portion of the certification process is the design, execution, and validation of adequate certification tests. Desirable requirements of certification test support in a collaborative workflow model include: the certification framework should not require the knowledge of third party implementation details such as: Proprietary file formats; Proprietary file access API; Third party file metadata handler; Details of how data is mapped from file to application data store; and Details of how to compare data obtained from file to data obtained from the store, for example. The certification framework should not require third party to supply specific instances of data such as Files or Values of file metadata. Also, the certification framework should be able to leverage the same tests for any file metadata handler a third party can author and should be able to supply instances of data to drive each certification test.
The following presents a simplified summary in order to provide a basic understanding of some aspects described herein. This summary is not an extensive overview nor is intended to identify key/critical elements or to delineate the scope of the various aspects described herein. Its sole purpose is to present some concepts in a simplified form as a prelude to the more detailed description that is presented later.
A testing framework is provided that allows platform code developers to interact with third party code developers while mitigating exchange of sensitive or confidential information. More specifically, a generic testing platform and interface is provided where third party code developers implement an abstract interface that allows code written for a platform such as an operating system to exercise the third part code without being apprised of implementation details in the code. In general, verifying the quality of third party code often requires disclosure of third party intellectual property having the associated consequences of acquiring such knowledge which can include leakage of proprietary data. This is a common problem for applications that host third party code including but not limited to device drivers, hosted web-applications, or search components, for example. Various systems and methods are provided to precisely express test cases while minimizing disclosure of third party intellectual property for certification test purposes. This includes providing an interface and definition of a set of certification tests in an abstract manner that can be reused with each test including file metadata handlers, for example, where the tests are specified at a level of abstraction that allow them to be independent of specific data types. At least one mechanism (e.g., certification driver interface) is provided for querying for file metadata handler information or other data required to run these respective tests. Such data can include: platform type data to which the file corresponds; file extensions a file metadata handler supports; abstract enumerations of keys to metadata the file metadata handler operates with; methods for creating files the file metadata handler supports; methods for reading and writing file metadata from and to files as well as from and to a respective data store; and/or methods for comparing metadata from the store against metadata from a given file.
To the accomplishment of the foregoing and related ends, certain illustrative aspects are described herein in connection with the following description and the annexed drawings. These aspects are indicative of various ways which can be practiced, all of which are intended to be covered herein. Other advantages and novel features may become apparent from the following detailed description when considered in conjunction with the drawings.
A generic testing framework is provided that allows components authored by third parties to be tested on a platform such as an operating system while mitigating exposure of implementation details of the third party components. In one aspect, a computerized test system is provided. The system includes at least one component test that operates on a component platform such as an operating system platform, for example. The component test can be specified in a generalized manner (e.g., non-specific to third party or platform implementation) for sending and retrieving data from one or more third party components. At least one application programming interface (API) is provided that is associated with the third party component to enable data exchanges between the component test and the third party component on the component platform, where the API hides implementation details of the third party component. In this manner, platform developers can test outside code developments in an abstract way without being exposed to implementation details of such code developments.
As used in this application, the terms “component,” “object,” “interface,” and the like are intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a server and the server can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers. Also, these components can execute from various computer readable media having various data structures stored thereon. The components may communicate via local and/or remote processes such as in accordance with a signal having one or more data packets (e.g., data from one component interacting with another component in a local system, distributed system, and/or across a network such as the Internet with other systems via the signal).
Referring initially to
The system 100 provides a testing framework that allows platform code developers to interact with third party code developers while mitigating exchange of sensitive or confidential information within the platform 110 or third party code 140. More specifically, a generic testing platform and interface 150 is provided where third party code developers implement an abstract interface that allows certification code 120 written for the platform 110 to exercise the third part code 140 without being apprised of implementation details in the code. In general, verifying the quality of third party code often requires disclosure of third party intellectual property which can include leakage of proprietary data. This is a common problem for applications (e.g., operating system platforms) that host third party code 140 including but not limited to device drivers, hosted web-applications, or search components, for example. Various systems and methods are provided to precisely express test cases while minimizing disclosure of third party details for certification test purposes. This includes providing an interface 150 and definition of a set of certification tests 120 in an abstract manner that can be reused with each test including file metadata handlers, for example, where the tests are specified at a level of abstraction 130 that allow them to be independent of specific data types.
At least one interface such as a certification driver interface is provided for querying for file metadata handler information or other data required to run these tests 120. Such data can include: platform type data to which the file corresponds; file extensions a file metadata handler supports; abstract enumerations of keys to metadata the file metadata handler operates with; methods for creating files the file metadata handler supports; methods for reading and writing file metadata from and to files as well as from and to a respective data store (not shown); and/or methods for comparing metadata from the store against metadata from a given file.
In general, the system 100 provides the ability to express tests in a precise manner while preserving third party intellectual property or confidential information. This includes the use of file metadata handler-agnostic tests in certification of file metadata handlers, for example. Also, this includes the use of data type-agnostic tests in certification of file metadata handlers. The definition of the interface 150 includes programmatically mapping arbitrary or third party data to platform data via file metadata handlers. The definition of the interface 150 generally supplies all file-metadata handler characteristics to the certification platform 110 without exposing third party implementation details.
Referring now to
Proceeding to
Proceeding to 400 of
Proceeding to 410, a certification driver interface is received from the process described in
Referring to
Along with the methods 510, various properties can be specified at 520. These include file backed item type properties that specify the type of a file backed item a file metadata handler employs during testing. Another property 520 is a metadata key enumeration type that specifies enumeration keys that identify various metadata supported by the file metadata handler. Still yet another property includes a supported file extension that specifies a list of file extensions that a file metadata handler supports. Another property includes a supported operations property that specifies flags that the respective operations supported by a given driver. As can be appreciated, other interfaces 510 and/or properties 520 can be specified.
In one example, a file metadata interface or class can be defined as follows: public abstract class FileMetadataDriver: IFileMetadataDriver. In general, a class that derives from the file metadata class is typically expected to be written for each file format. In order to illustrate how to use this class, consider the following example:
A user owns file format FOO. Files of format FOO have the file extension “.foo”. The user would like to store two properties of FOO files in the store: FilePropertyA and FilePropertyB. Also, the user would like to store the two properties as ExamplePropertyA and ExamplePropertyB of FooItem, defined in the Bar schema. An application programming interface (API) to the Bar schema is in the System.Storage.Bar.dll assembly. Thus, the user writes a file metadata handler to perform property promotion/demotion, and now they desire to certify that it works well with the file metadata handling infra. In order to write a FileMetadataDriver, the user could write the following example code:
Unlike other loosely defined test frameworks, where developers write test code in any manner they want, with little guidance as to structure, little attention to quality basics, and little unification of approach as to how the tests are ultimately executed, the system 600 imposes a structure and guideline requirement for testing via the APIs 650. In terms of requirements, writing test components should generally be efficient and address several problems at once, if possible. Specifically, without changing an existing code base or test subset 620, a developer should be able to run the same tests with any user privileges, even if some test initialization or cleanup may require administrative privileges. They should also be able to run the same tests without validation to assess performance of a system under stress, as the additional validation code can hinder a better assessment of the resilience of the software under test. Other features include running the same tests under faulty conditions, with minimal additional code. Alternate validation code that expects specific errors or exceptions can be swapped or switched in place of the original validation code that evaluates the test results under normal conditions.
In terms of structure, the developer should also be able to specify and distinguish between key phases of testing in order to have a fine grain control over what to execute, when to execute it, how to handle failures in each phase, optionally replacing one of the phases, and satisfying other aforementioned goals. For example, these phases can include set up, execution (main object of test code), validation (main mechanism of determining whether results are suitable), publishing (mechanism for copying or post-processing logs), and a clean up phase. As can be appreciated, other phase can be provided if desired depending on the desired testing granularity.
Other aspects to the system 600 include the ability to define a workflow of execution that determine how and when tests are executed, how/when test groups are generated/enumerated and their tests executed, and how/when test modules (physical groupings of tests) are generated/enumerated and their groups/tests processed/executed. The APIs 650 and configuration files 640 allow replacing substantially any component of the system 100 while mitigating failures in other test subsets that choose to abide by imposed contracts of the APIs 650 in a different manner. To meet these and other goals, a set of lightweight interfaces 650 are provided that are easy to use by developers along with a set of convenience default implementations of these interfaces. Beyond basic contracts imposed by the interfaces 650, developers are generally under no other system constraints.
Referring to
The test execution engine or certification platform expects certain metadata to be supplied by test component authors. For example, a test author should supply its name. Metadata is the primary mechanism for filtering interesting tests from a large pool of tests. Metadata may also be used by other libraries to organize and sort tests and test results. The test execution engine also supplies metadata that describes the test components it requires to run. Such metadata is stored in the global context. For example, the test execution engine may communicate to the generator of a test group that only functional tests with a given priority are going to be executed.
Proceeding to 710, Expected Metadata is described. This can include a Name, a string unique relative to a test group; an Area, a string; an Author, a string; an Associated bugs, a string; a Priority, an enumerated value; a Category, an enumerated value; and/or a User group options, an enumerated flag value. User group options define the user groups the privileges of which are employed in order for the test to successfully execute. At 720, engine supplied metadata may include: a Test Name; a Group Name; an Author; Associated bugs; a Priority; a Category; or User group options.
At 730, Categorization Metadata is considered. This is used to specify the category of a test or specify categories of a test to be selected for execution.
In the following example, only functional tests are generated. The category of tests to be generated is specified in a global context using the appropriate metadata keys.
Proceeding to 740, Prioritization Metadata is provided. This is used to specify the priority of a test or specify the priorities of a collection of tests.
In the example, the priority of a test is used to determine whether to write something to an output device or console.
At 750, Security Metadata is provided. This is used to specify a collection of user groups, for example to run a given collection of tests under the privileges of different users that are members of a number of groups.
In order to provide a context for the various aspects of the disclosed subject matter,
With reference to
The system bus 818 can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, 11-bit bus, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), and Small Computer Systems Interface (SCSI).
The system memory 816 includes volatile memory 820 and nonvolatile memory 822. The basic input/output system (BIOS), containing the basic routines to transfer information between elements within the computer 812, such as during start-up, is stored in nonvolatile memory 822. By way of illustration, and not limitation, nonvolatile memory 822 can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable ROM (EEPROM), or flash memory. Volatile memory 820 includes random access memory (RAM), which acts as external cache memory. By way of illustration and not limitation, RAM is available in many forms such as synchronous RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhanced SDRAM (ESDRAM), Synchlink DRAM (SLDRAM), and direct Rambus RAM (DRRAM).
Computer 812 also includes removable/non-removable, volatile/non-volatile computer storage media.
It is to be appreciated that
A user enters commands or information into the computer 812 through input device(s) 836. Input devices 836 include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit 814 through the system bus 818 via interface port(s) 838. Interface port(s) 838 include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s) 840 use some of the same type of ports as input device(s) 836. Thus, for example, a USB port may be used to provide input to computer 812, and to output information from computer 812 to an output device 840. Output adapter 842 is provided to illustrate that there are some output devices 840 like monitors, speakers, and printers, among other output devices 840, that require special adapters. The output adapters 842 include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device 840 and the system bus 818. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s) 844.
Computer 812 can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s) 844. The remote computer(s) 844 can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device or other common network node and the like, and typically includes many or all of the elements described relative to computer 812. For purposes of brevity, only a memory storage device 846 is illustrated with remote computer(s) 844. Remote computer(s) 844 is logically connected to computer 812 through a network interface 848 and then physically connected via communication connection 850. Network interface 848 encompasses communication networks such as local-area networks (LAN) and wide-area networks (WAN). LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet/IEEE 802.3, Token Ring/IEEE 802.5 and the like. WAN technologies include, but are not limited to, point-to-point links, circuit switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL).
Communication connection(s) 850 refers to the hardware/software employed to connect the network interface 848 to the bus 818. While communication connection 850 is shown for illustrative clarity inside computer 812, it can also be external to computer 812. The hardware/software necessary for connection to the network interface 848 includes, for exemplary purposes only, internal and external technologies such as, modems including regular telephone grade modems, cable modems and DSL modems, ISDN adapters, and Ethernet cards.
What has been described above includes various exemplary aspects. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing these aspects, but one of ordinary skill in the art may recognize that many further combinations and permutations are possible. Accordingly, the aspects described herein are intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the term “includes” is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term “comprising” as “comprising” is interpreted when employed as a transitional word in a claim.