Testing the Composability of Plug-and-Play Components
|
|
|
- Theodora Jordan
- 10 years ago
- Views:
Transcription
1 Testing the Composability of Plug-and-Play Components A Method for Unit Testing of Dynamically Composed Applications M. Löberbauer, R. Wolfinger, M. Jahn and H. Mössenböck Christian Doppler Laboratory for Automated Software Engineering Institute for System Software, Johannes Kepler University, Linz, Austria {loeberbauer, wolfinger, jahn, [email protected] Abstract Software systems, which are dynamically composed from plug-and-play components, allow users to adapt an application to the working scenario at hand. While the testing of individual components is well understood, there are no systematic techniques that test if components can be assembled in arbitrary orders. This paper introduces a method and a tool for testing the dynamic composability of component-based software systems. It is based on Plux.NET, a plug-in platform for plug-and-play composition of.net applications. I. INTRODUCTION Plug-and-play components allow users to assemble customized applications without configuration or programming effort. This can be used to adapt feature-rich applications to the needs of individual users. Dynamically composed plug-and-play components allow users to reconfigure an application on the fly by swapping sets of components. Thus users can align the application with the working scenario at hand. Plug-and-play composition requires additional testing in order to check the composability of the components. In this paper, composability means dynamic composability, i.e., components can be added and removed at run time. We call a component a host if it uses other components; and we call it a contributor if it provides a service to other components. A contributor is composable if it can be integrated and removed dynamically. A host is composable if its contributors can be added and removed dynamically and in any order. As dynamic composition is a relatively new approach in component frameworks, it is not covered by current test methods and tools. We have created Plux.NET, a plug-in framework that supports dynamic plug-and-play composition. From our case studies we learned that many composability deficiencies only show up if contributors are added in a particular order, or when contributors are removed. In this paper, we present a method for unit testing which determines the test cases that are relevant for checking the composability as well as a tool to automate the testing. Our research was conducted in cooperation with our industrial partner BMD Systemhaus GmbH. BMD is a medium-sized company offering a comprehensive suite of enterprise applications, e.g., customer relationship management (CRM), accounting, production planning and control. As most of their customers use only a fraction of the suite, customized products are an essential part of BMD's strategy. This paper is organized as follows: Section II describes the Plux framework. It explains how components declare their requirements and provisions with metadata, how the components are discovered, and how an application is assembled from components. Section III gives a motivating example with a composability deficiency, discusses why existing test methods do not find the problem and outlines requirements for a solution. Section IV describes our method for composability testing, a tool for test automation, and the integration of the tool into Plux. Section V describes how existing component frameworks handle testing. Section VI finishes with a conclusion and an outlook to future work. II. THE PLUX.NET FRAMEWORK The Plux.NET framework (Plux) was created to allow developers to build applications using dynamic plug-andplay composition [1]. It enables extensible and customizable applications that can be reconfigured without restarting the application. Together with our industrial partner we applied Plux to the CRM product of BMD [2]. By allowing dynamic addition and removal of CRM features, we support a set of new usage scenarios, e.g., on-the-fly product customization during sales conversations as well as incremental feature addition for step-by-step user trainings [3]. The unique characteristics of Plux are the composer, the event-based programming model, the composition state, and the exchangeable component discovery mechanism. These characteristics distinguish Plux from other plug-in systems [4], such as OSGi [5], Eclipse [6], and NetBeans [7], and allow Plux to replace programmatic composition by automatic composition. Programmatic composition means that the host queries a service registry and integrates its contributors itself. Automatic composition means that the components just declare their requirements and provisions using metadata; the composer uses these metadata to match requirements and provisions, and connects matching components automatically. The hosts can react to events sent by the composer during composition. Plux also maintains the current composition state, i.e., it stores which hosts use which contributors. As hosts can retrieve the composition state from Plux, they do not need to store references to their contributors. Discovery is the process of detecting components and extracting their metadata. Unlike in other plug-in systems, the discovery mechanism
2 is not an integral part of Plux, but is a plug-in itself, thus making the mechanism replaceable. The following subsections cover those characteristics in more detail; Section III shows their implications on testing using a motivating example. A. Metadata Plux uses the metaphor of extensions with slots and plugs (Fig. 1). An extension is a component that provides services to other extensions and uses services provided by other extensions. An extension declares a slot when it wants to use the service of other extensions. Such an extension is called a host. To provide a service to other extensions, it declares a plug. Such an extension is called a contributor. Fig. 1 Extensions with slots and plugs. The slots and plugs are identified by names. A plug matches a slot if their names match. If so, the plug can be connected to the slot. The host uses connected contributors over a defined interface. This interface is specified in a slot definition. A slot definition has a unique name and optionally parameters; contributors must set the parameters and hosts can retrieve them. The names of slots and plugs refer to the expected and provided slot definitions respectively. The means to provide metadata is customizable in Plux. The default mechanism extracts metadata from.net custom attributes. Custom attributes are pieces of information that can be attached to.net constructs, such as classes, interfaces, methods, or fields. At run time, the attributes can be retrieved using reflection [8]. Plux has the following custom attributes: The SlotDefinition attribute to tag an interface as a slot definition, the ParamDefinition attribute to declare required parameters, the Extension attribute to tag classes that implement components, the Slot attribute to declare requirements in hosts, the Plug attribute to declare provisions in contributors, and the Param attribute to declare provided parameter values. Let us look at an example now. Assume that a host wants to print log messages as errors or warnings. The loggers should be implemented as contributors that plug into the host. Every logger should use a parameter to declare if it wants to print errors or warnings. First, we have to define the slot into which the logger can plug (Fig. 2). public enum LoggerKind { Warning, Error [SlotDefinition("Logger")] [ParamDefinition("Kind", typeof(loggerkind))] public interface ILogger { void Print(string msg); Fig. 2 Definition of the Logger slot. Next, we are going to write logger contributors. Fig. 3 shows the logger for errors. The logger for warnings is implemented the same way (not shown). [Plug("Logger")] [Param("Kind", LoggerKind.Error)] public class ErrorLogger : ILogger { public void Print(string msg) { Console.WriteLine(msg); Fig. 3 Error logger as a contributor for the Logger slot. Finally, we implement the application that uses the loggers (Fig. 4). Since it is a host for loggers, it has a Logger slot. However, it is also a contributor to the Plux core, so it has an Application plug. At startup, the Plux core creates contributors for the Application slot. The complete implementation of the application is shown in Subsection D. [Slot("Logger")] public class HostApp : IApplication { public HostApp(Extension e) {... void Work() {... Fig. 4 Application host with the Logger slot. B. Discovery In order to match requirements and provisions, Plux needs the metadata of the extensions. The discovery is the part of Plux which extracts the metadata. By default, it extracts them from the custom attributes stored in the.net assembly files. However, since the discovery mechanism is an extension itself, it is replaceable and can retrieve the metadata also from a database or from a configuration file. The collected metadata is stored in the type store of Plux. Discoverers listen to changes in a component repository, i.e. they detect if extensions are added or removed. The order in which a discoverer detects changes depends on its implementation. For example, the order in which an attribute discoverer reads metadata from assembly files might differ from the order in which a text-file-based discoverer would read the same metadata from a text file. The motivating example in Section III shows how this order affects the composability of components. C. Composer The composer assembles applications by matching slots and plugs. For this purpose, it observes the type store. If a contributor becomes available in the type store, the composer integrates it into the application. Similarly, if a contributor is removed from the type store the composer removes it from the application. Integrating a contributor means that the composer instantiates it and connects its plug with the matching slot of a host. This is repeated for each matching slot in the application. When the composer connects a plug with a slot, it notifies the host and stores the connection. The instances and their connections make up the composition state. The part of Plux that stores the composition state is called the instance store. Removing a contributor means that the composer disconnects the plug from the slot and releases the contribu-
3 tor. When the composer disconnects a plug from a slot, it notifies the host and removes the connection from the instance store. The described mechanism where the composer reacts to changes in the type store is called automatic composition. In addition to that, applications can be assembled with programmatic composition in which the composer is controlled by extensions. For example, host extensions can integrate contributors using API calls, a script interpreter can assemble an application from a script, or a serialization extension can restore a previously saved composition state. Thus the sequence in which the composer makes connections differs depending on whether automatic or programmatic composition is used. D. Composition State The composition state can be retrieved from the instance store. For every instantiated extension, the instance store holds the extension's meta-objects of its slots and plugs as well as a reference to the corresponding.net object (Fig. 5). For every slot, the instance store holds the information about which plugs are connected. Fig. 5 Meta-objects for instantiated extensions in the instance store. Fig. 6 describes the host of Fig. 4 in more detail showing how meta-objects can be used by an application. When the composer creates an extension it passes the extension's meta-object to the constructor. In Fig. 6, the constructor retrieves the meta-object of the slot "Logger" and starts a new thread that does the rest of the work. [Slot("Logger")] public class HostApp : IApplication { Slot loggerslot; public HostApp(Extension e) { loggerslot = e.slots["logger"]; new Thread(Run).Start(); void Run() { while(true) { string msg; LoggerKind kind; Work(out msg, out kind); foreach(plug p in loggerslot.pluggedplugs) { if(kind == (LoggerKind) p.params["kind"]) { Extension e = p.extension; ILogger logger = (ILogger) e.object; logger.print(msg); Thread.Sleep(2000); void Work(out string msg, out LoggerKind kind) { /* not shown */ Fig. 6 Application host using logger contributors. In the Run method, the host does its work and then uses the connected loggers to print a message. It retrieves the loggers via the PluggedPlugs property of the logger slot. For each logger, it checks the logger kind using the parameter Kind. Finally, it retrieves the.net objects of the selected loggers and prints the message. As Plux instantiates contributors only on demand, i.e. when the host accesses the extension's Object property, loggers of other kinds are not instantiated in this example; only their metaobjects exist. Additionally, the host can react to events that the composer sends when it connects or disconnects contributors. This is appropriate for hosts that want to react on added or removed contributors immediately. Fig. 7 shows a modified version of our host from Fig. 6. It uses the Slot attribute to register event handlers for the Plugged and Unplugged events. In this example, the event handlers just print out which logger was plugged or unplugged. [Slot("Logger", OnPlugged="LoggerPlugged", OnUnplugged="LoggerUnplugged")] public class HostApp : IApplication {... void LoggerPlugged(CompositionEventArgs args) { Extension e = args.plug.extension; ILogger logger = (ILogger) e.object; logger.print("logger plugged: " + e.name); void LoggerUnplugged(CompositionEventArgs args) {... logger.print("logger unplugged: " + e.name); void Run() {... void Work(...) {... Fig. 7 Modified application host reporting connected contributors. Thus there are two ways for retrieving the connected contributors: (i) Retrieve the plugs connected to a slot from the instance store; (ii) React to the Plugged events sent by the composer. Both mechanisms are affected by the order in which components are discovered (cf. Subsection B) as well as by the order in which programmatic composition connects the components (cf. Subsection C). Section III shows a motivating example that demonstrates how the various orders can cause failures in the parts of the host that retrieve connected contributors. Therefore these parts should be subject to composability testing. III. MOTIVATING EXAMPLE Assume that we want to create an application that copies data from a source to a sink. Sources and sinks should be implemented as contributors that plug into the application. Therefore, the copy application has two slots: the Source slot and the Sink slot (Fig. 8). Fig. 8 Copy application with source and sink contributor.
4 The fact that the copy application (host) has two slots and that there is a dependency between them (i.e., the source contributor is supposed to be connected before the sink contributor) makes the host vulnerable for ordering errors. Fig. 9 shows an error-prone implementation of the host. When the composer connects a sink to the host, a Plugged event is raised, and the event handler CopyData starts copying data from the source to the sink. CopyData incorrectly assumes that there is already a source connected, and will fail if a sink gets connected before a source, because the PluggedPlugs collection is empty in this case. [Slot("Source")] [Slot("Sink", OnPlugged = "CopyData")] public class CopyApp : IApplication { void CopyData(CompositionEventArgs args) { Extension self = args.slot.extension; ISource source = (ISource) self.slots["source"].pluggedplugs[0].extension.object; ISink sink = (ISink) args.plug.extension.object; sink.write(source.read()); Fig. 9 Copy application (error-prone implementation). Assume that the developer of the copy application works with a specific discoverer and with automatic composition. Coincidentally, the order in which the discoverer adds the extensions corresponds to the order assumed by the host. Thus the problem does not show up. However, the host will fail, if it is used in a setup where the discoverer adds the extensions in a different order. For comparison, Fig. 10 shows a robust implementation of the same host using programmatic composition. To avoid that a sink gets connected before a source, the host opens the sink slot manually. In Plux, the composer connects contributors only when a slot is open. By default, the composer opens slots automatically. In this example, however the host disables this behavior by setting the AutoOpen property of the slot attribute to false. The sink slot is opened programmatically as soon as a source gets connected. Vice-versa, the host closes the sink slot when a source gets disconnected; this causes an already connected sink to be unplugged. In summary, this causes a toggling behavior where the host opens and closes a sink slot depending on whether a source is connected. [Slot("Source", OnPlugged = "OpenSink", OnUnplugged = "CloseSink")] [Slot("Sink", AutoOpen = false, OnPlugged = "CopyData")] public class CopyApp : IApplication { void OpenSink(CompositionEventArgs args) { Extension self = args.slot.extension; self.slots["sink"].open(); void CloseSink(CompositionEventArgs args) { Extension self = args.slot.extension; self.slots["sink"].close(); void CopyData(...) {... Fig. 10 Copy application (robust implementation). To avoid the programming effort, one can achieve the same toggling behavior by applying rule-based behaviors. Rule-based behaviors are a declarative means to control the composer. For an extensive description see [9]. With rule-based behaviors we can also solve another not yet mentioned problem of our example. Namely, the composer might connect multiple source contributors to the source slot. In this case, the host will incorrectly ignore all sources but the first one. To correct this, we can apply a specific behavior to the source slot that limits the cardinality of the slot to a single contributor. The above example shows the need for composability testing, because common integration testing does not consider dynamic composition and does not detect problems caused by different orders of composition. IV. PLUX COMPOSABILITY TEST METHOD AND TOOL The Plux Composability Test Method (PCTM) is a method for testing the dynamic composability of plug-andplay components. The goal is to reveal problems caused by different orders of composition. PCTM is a dynamic black-box test method: Dynamic, because it runs the composer repeatedly and varies the order in which the slots of a host are filled. Black-box, because it looks only at the declared metadata of components and ignores their source code. We do this, because we want to detect index out of bounds errors and null pointer errors in the parts of the host that access the composition state. In this paper we focus on the composability of hosts, whereas contributors are left for future work. A. Approach PCTM tests each component (testee) individually using the following steps: (i) Generate a mock host with slots for every plug of the testee. (ii) Connect the testee with the generated host. (iii) Generate a mock contributor for every slot of the testee. (iv) Determine a set of composition sequences by permuting the order in which the slots of the testee should be filled. (v) Select a sequence from the set and connect the mock contributors with the testee's slots (if open) in the specified order; monitor the testee for errors. (vi) Repeat step v for each sequence in the set. All mock components can be generated automatically. Since slots and plugs refer to a slot definition, which is basically an interface, the method signatures of the mock components can be generated in such a way that they conform to those interfaces. Note that we are not interested in generating mock components that do real work, but only in detecting null pointer and index out of bounds errors that result from unexpected composition orders. Fig. 11a. shows the testee, how it is connected to the mock host, and how its slots are filled with mock contributors. Fig. 11b. shows the set of sequences to test. Fig. 11 Test setup and possible composition sequences.
5 Let us revisit error-prone implementation of the example from Section III (Fig. 9) and apply the following steps in order to test the composability of the copy application (Fig. 12): (i) Generate a mock host with an Application slot. (ii) Connect the CopyApp to the mock host. (iii) Generate a mock data source contributor and a mock data sink contributor. (iv) Determine the set of composition sequences: { Source, Sink and { Sink, Source. (v) Connect contributors in the order { Source, Sink. (vi) Repeat step v with the order { Sink, Source. In step vi the test procedure reveals the out of bounds error. If we for comparison apply the same test procedure to the robust implementation of the host (Fig. 10), it does not find any errors (as expected). test method, all test sequences for a testee correspond to a test case, and all test cases for a component repository correspond to a test suite. When PCTT runs a test suite it logs all exceptions. Using the graphical user interface of PCTT the user can review the results. Test cases and test methods that revealed errors are highlighted. For each test method the user can retrieve the detected exceptions. For the test suite of the copy application the tool highlights the second test method with the sequence { Mock- Sink, MockSource and reveals the detected index out bounds exception. Fig. 13 PCTT integration in Plux, composition of test sequence. Fig. 12 PCTM test procedure for copy application example. B. Tool The Plux Composability Test Tool (PCTT) implements the Plux Composability Test Method as a Plux extension. To start the tests, PCTT connects to the Plux core as an application. To add the generated mock extensions to the type store, it also connects to the core as a discoverer. PCTT has a Mock slot to integrate the mock hosts which it generates (Fig. 13a). When PCTT runs the tests it disables automatic composition and uses programmatic composition to connect the testee with the generated mock components. If applied to the copy application from Section III, PCTT performs the following steps: (i) Generate a component MockHost with a Mock plug and a slot for integrating CopyApp via its Application plug; add MockHost to the type store. (ii) Generate the contributors MockSource and MockSink (Fig. 13b). (iii) Connect MockHost to PCTT. (iv) Connect CopyApp to MockHost. (v) Determine the valid composition sequences: { MockSource, MockSink and { MockSink, MockSource. (vi) Apply the first test sequence { MockSource, MockSink and monitor CopyApp for exceptions (Fig. 13c). (vii) Disconnect MockSource, MockSink, and CopyApp. As the state of CopyApp might change during composition, we use a new instance for each test run. (viii) Repeat steps iv to vii with the next test sequence until all sequences have been tested. Like unit test frameworks, PCTT runs all tests, no matter whether exceptions occur or not. Using the terminology of JUnit [10], a single test sequence corresponds to a V. RELATED WORK In component-based software development, the prevailing composition method is programmatic composition, where the host creates and integrates its contributors itself. Dynamic plug-and-play composition like in Plux is rather the exception. Common test methods are limited to functional unit tests of components and on system tests of the composed application, whereas composability is generally ignored. A. Systems with Dynamic Reconfiguration Component systems such as OSGi [5], Eclipse [6], and NetBeans [7] support dynamic reconfiguration. We looked at what they recommend for testing their components: Although the Eclipse platform supports dynamic composition, this feature is rarely used. The Eclipse IDE itself does not make use of it, and so do most third-party plugins. Because dynamic composition is uncommon, composition testing is not considered by the suggested Eclipse test methods. Eclipse recommends JUnit [10] for functional testing and SWTBot [11] for user interface testing. In addition to that, the Eclipse Test & Performance Tools Platform Project [12] allows recording API calls for regression testing. The OSGi Service Platform specification and the OSGi documentation [5] do not address testing at all. The DA- Testing project [13] recognizes the need for dynamic composition testing. It provides a framework which listens to the events of the OSGi service registry and runs unit tests when those events occur. The assertion API for functional testing is kept intentionally similar to JUnit.
6 In NetBeans [7], dynamic reconfiguration is considered in the API, but ignored by the majority of plug-ins. Thus applications built with NetBeans usually need to be restarted to add or remove plug-ins. The NetBeans project recommends testing the components with JUnit and provides a helper class to run unit tests inside the NetBeans environment. Composability testing is not considered. In summary, the most modern component systems do not consider composability testing. This confirms the need for our work. B. Systems without Dynamic Reconfiguration For component systems without support for dynamic reconfiguration we looked at the inversion of control containers Spring [14] and PicoContainer [15]: The Spring framework supports unit testing of applications. As Spring components are simple Java objects, unit tests can be conducted with test frameworks like JUnit [10] or TestNG [16]. To test classes that depend on external libraries or databases, Spring provides mock and utility classes. For enterprise applications, which require an application server, Spring supports integration testing. It allows executing the application in a spring environment and checking if the components are wired correctly, without the need to deploy the application to a server. The PicoContainer project recommends the use of unit test frameworks like JUnit to test the components of an application, which are simple Java objects. To resolve dependencies between objects, PicoContainer recommends the use of mock libraries like JMock [17] and EasyMock [18]. We adopted the idea of mock objects for our work. Whereas Spring and PicoContainer use mock object for functional testing, we use mock components for composability testing. VI. CONCLUSIONS In this paper we presented the Plux Composability Test Method (PCTM) for unit testing of dynamically composed applications. The method determines and generates the test cases required to check the composability of plugand-play components. In order to allow the independent testing of components, our approach generates a mock host, to host the component under test as well as mock contributors to test it. It enumerates all combinations of different contributors of a single host. In doing so, it generates a practically reasonable number of test cases. We described the Plux Composability Test Tool (PCTT) and showed how it integrates into the Plux composition infrastructure. It generates test cases according to the PCTM and executes them. By applying the method and the tool to our motivating example, we showed that the generated test cases effectively revealed composability defects. The tool allows time-efficient composability testing without programming, because it generates and executes the set of test cases automatically. In future work, we will extend PCTM to test additional composability aspects: (i) We want to test hosts with multiple contributors of the same kind; both for their correct integration and for their correct use. (ii) We want to test if hosts behave correctly after contributors were removed. (iii) For contributors with multiple plugs, we want to test if their plugs can be connected individually and in arbitrary order. (iv) We want to test the composability of partially connected components. Such a component decides which contributors it uses depending on which of its provided plugs are connected. ACKNOWLEDGMENT This work has been conducted in cooperation with BMD Systemhaus GmbH, Austria, and has been supported by the Christian Doppler Forschungsgesellschaft, Austria. REFERENCES [1] R. Wolfinger, "Dynamic Application Composition with Plux.NET: Composition Model, Composition Infrastructure.", Dissertation, Johannes Kepler University, Linz, Austria, [2] C. Mittermair, "Zerlegung eines monolithischen Softwaresystems in ein Plug-In-basiertes Komponentensystem.", Master thesis, Johannes Kepler University, Linz, Austria, March [3] R. Wolfinger, S. Reiter, D. Dhungana., P. Grünbacher, and H. Prähofer, "Supporting runtime system adaptation through product line engineering and plug-in techniques.", 7th IEEE International Conference on Composition-Based Software Systems, ICCBSS 2008, Madrid, Spain, February 25-29, [4] D. Birsan, "On Plug-ins and Extensible Architectures.", ACM Queue, 3(2):40 46, [5] "OSGi Service Platform, Release 4. The Open Services Gateway Initiative", July [6] "Eclipse Platform Technical Overview. Object Technology International, Inc.", February [7] T. Boudreau, J. Tulach, G. Wielenga, "Rich Client Programming, Plugging into the NetBeans Platform", Prentice Hall International, [8] "ECMA International Standard ECMA-335, Common Language Infrastructure (CLI)", 4th Edition, June [9] M. Jahn, M. Löberbauer, R. Wolfinger, H. Mössenböck, "Rulebased Composition Behaviors in Dynamic Plug-in Systems.", Submitted to The 17th Asia-Pacific Software Engineering Conference, APSEC 2010, Sydney, Australia, November 30-December 3, [10] K. Beck, E. Gamma, "JUnit Documentation", retrieved June [11] "The SWTBot Project", retrieved June [12] "Eclipse Test & Performance Tools Platform Project", June [13] DynamicJava.org, "DA-Testing Project", April [14] "Spring Java Application Framework, Release 3.0. Reference Documentation", June [15] "PicoContainer", February [16] C. Beust, H. Suleiman, "Next Generation Java Testing: TestNG and Advanced Concepts", Addison-Wesley Professional, October [17] "JMock Project", retrieved June [18] "EasyMock Project", retrieved June 2010.
Chapter 8 Software Testing
Chapter 8 Software Testing Summary 1 Topics covered Development testing Test-driven development Release testing User testing 2 Program testing Testing is intended to show that a program does what it is
AN APPROACH TO DEVELOPING BUSINESS PROCESSES WITH WEB SERVICES IN GRID
AN APPROACH TO DEVELOPING BUSINESS PROCESSES WITH WEB SERVICES IN GRID R. D. Goranova 1, V. T. Dimitrov 2 Faculty of Mathematics and Informatics, University of Sofia S. Kliment Ohridski, 1164, Sofia, Bulgaria
A Practical Guide to Test Case Types in Java
Software Tests with Faktor-IPS Gunnar Tacke, Jan Ortmann (Dokumentversion 203) Overview In each software development project, software testing entails considerable expenses. Running regression tests manually
SERVICE ORIENTED ARCHITECTURE
SERVICE ORIENTED ARCHITECTURE Introduction SOA provides an enterprise architecture that supports building connected enterprise applications to provide solutions to business problems. SOA facilitates the
Best Practices for Programming Eclipse and OSGi
Best Practices for Programming Eclipse and OSGi BJ Hargrave Jeff McAffer IBM Lotus IBM Rational Software 2006 by IBM; made available under the EPL v1.0 March 24, 2006 Introduction During the Eclipse 3.0
Towards Software Configuration Management for Test-Driven Development
Towards Software Configuration Management for Test-Driven Development Tammo Freese OFFIS, Escherweg 2, 26121 Oldenburg, Germany [email protected] Abstract. Test-Driven Development is a technique where
How To Install An Aneka Cloud On A Windows 7 Computer (For Free)
MANJRASOFT PTY LTD Aneka 3.0 Manjrasoft 5/13/2013 This document describes in detail the steps involved in installing and configuring an Aneka Cloud. It covers the prerequisites for the installation, the
Developing Eclipse Plug-ins* Learning Objectives. Any Eclipse product is composed of plug-ins
Developing Eclipse Plug-ins* Wolfgang Emmerich Professor of Distributed Computing University College London http://sse.cs.ucl.ac.uk * Based on M. Pawlowski et al: Fundamentals of Eclipse Plug-in and RCP
HP Data Protector Integration with Autonomy IDOL Server
HP Data Protector Integration with Autonomy IDOL Server Introducing e-discovery for HP Data Protector environments Technical white paper Table of contents Summary... 2 Introduction... 2 Integration concepts...
Modernized and Maintainable Code. Frank Weil, Ph.D. UniqueSoft, LLC
Modernized and Maintainable Code Frank Weil, Ph.D. UniqueSoft, LLC UniqueSoft is a provider of next-generation software development tools and services specializing in modernizing legacy software using
SAS 9.4 Logging. Configuration and Programming Reference Second Edition. SAS Documentation
SAS 9.4 Logging Configuration and Programming Reference Second Edition SAS Documentation The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2014. SAS 9.4 Logging: Configuration
Software Quality Exercise 2
Software Quality Exercise 2 Testing and Debugging 1 Information 1.1 Dates Release: 12.03.2012 12.15pm Deadline: 19.03.2012 12.15pm Discussion: 26.03.2012 1.2 Formalities Please submit your solution as
Intellicus Cluster and Load Balancing (Windows) Version: 7.3
Intellicus Cluster and Load Balancing (Windows) Version: 7.3 Copyright 2015 Intellicus Technologies This document and its content is copyrighted material of Intellicus Technologies. The content may not
http://www.wakaleo.com [email protected] Java Software Quality Tools and techniques
Wakaleo Consulting O p t i m i z i n g y o u r s o f t w a r e d e v e l o p m e n t http://www.wakaleo.com [email protected] Java Software Quality Tools and techniques 1 Introduction Agenda tools
FioranoMQ 9. High Availability Guide
FioranoMQ 9 High Availability Guide Copyright (c) 1999-2008, Fiorano Software Technologies Pvt. Ltd., Copyright (c) 2008-2009, Fiorano Software Pty. Ltd. All rights reserved. This software is the confidential
Tools for Integration Testing
Tools for Integration Testing What is integration ing? Unit ing is ing modules individually A software module is a self-contained element of a system Then modules need to be put together to construct the
ESB Features Comparison
ESB Features Comparison Feature wise comparison of Mule ESB & Fiorano ESB Table of Contents A note on Open Source Software (OSS) tools for SOA Implementations... 3 How Mule ESB compares with Fiorano ESB...
<Insert Picture Here> What's New in NetBeans IDE 7.2
Slide 1 What's New in NetBeans IDE 7.2 The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated
IBM Operational Decision Manager Version 8 Release 5. Getting Started with Business Rules
IBM Operational Decision Manager Version 8 Release 5 Getting Started with Business Rules Note Before using this information and the product it supports, read the information in Notices on page 43. This
How To Set Up An Intellicus Cluster And Load Balancing On Ubuntu 8.1.2.2 (Windows) With A Cluster And Report Server (Windows And Ubuntu) On A Server (Amd64) On An Ubuntu Server
Intellicus Cluster and Load Balancing (Windows) Intellicus Enterprise Reporting and BI Platform Intellicus Technologies [email protected] www.intellicus.com Copyright 2014 Intellicus Technologies This
IBM Tivoli Workload Scheduler Integration Workbench V8.6.: How to customize your automation environment by creating a custom Job Type plug-in
IBM Tivoli Workload Scheduler Integration Workbench V8.6.: How to customize your automation environment by creating a custom Job Type plug-in Author(s): Marco Ganci Abstract This document describes how
An Automated Testing Tool Using UI Structure
, March 12-14, 2014, Hong Kong An Automated Testing Tool Using UI Structure Nutharat Harnvorawong, Taratip Suwannasart, Member, IAENG Abstract Testers usually run a new version of software against existing
Amazon Glacier. Developer Guide API Version 2012-06-01
Amazon Glacier Developer Guide Amazon Glacier: Developer Guide Copyright 2016 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in
IKAN ALM Architecture. Closing the Gap Enterprise-wide Application Lifecycle Management
IKAN ALM Architecture Closing the Gap Enterprise-wide Application Lifecycle Management Table of contents IKAN ALM SERVER Architecture...4 IKAN ALM AGENT Architecture...6 Interaction between the IKAN ALM
Braindumps.C2150-810.50 questions
Braindumps.C2150-810.50 questions Number: C2150-810 Passing Score: 800 Time Limit: 120 min File Version: 5.3 http://www.gratisexam.com/ -810 IBM Security AppScan Source Edition Implementation This is the
Software infrastructure for Java development projects
Tools that can optimize your development process Software infrastructure for Java development projects Presentation plan Software Development Lifecycle Tools What tools exist? Where can tools help? Practical
SOFTWARE TESTING TRAINING COURSES CONTENTS
SOFTWARE TESTING TRAINING COURSES CONTENTS 1 Unit I Description Objectves Duration Contents Software Testing Fundamentals and Best Practices This training course will give basic understanding on software
InfoSphere Master Data Management operational server v11.x OSGi best practices and troubleshooting guide
InfoSphere Master Data Management operational server v11.x OSGi best practices and troubleshooting guide Introduction... 2 Optimal workspace operational server configurations... 3 Bundle project build
SAS 9.3 Logging: Configuration and Programming Reference
SAS 9.3 Logging: Configuration and Programming Reference SAS Documentation The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2011. SAS 9.3 Logging: Configuration and
"SQL Database Professional " module PRINTED MANUAL
"SQL Database Professional " module PRINTED MANUAL "SQL Database Professional " module All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or
Network Security EDA491 2011/2012. Laboratory assignment 4. Revision A/576, 2012-05-04 06:13:02Z
Network Security EDA491 2011/2012 Laboratory assignment 4 Revision A/576, 2012-05-04 06:13:02Z Lab 4 - Network Intrusion Detection using Snort 1 Purpose In this assignment you will be introduced to network
Java 7 Recipes. Freddy Guime. vk» (,\['«** g!p#« Carl Dea. Josh Juneau. John O'Conner
1 vk» Java 7 Recipes (,\['«** - < g!p#«josh Juneau Carl Dea Freddy Guime John O'Conner Contents J Contents at a Glance About the Authors About the Technical Reviewers Acknowledgments Introduction iv xvi
Meister Going Beyond Maven
Meister Going Beyond Maven A technical whitepaper comparing OpenMake Meister and Apache Maven OpenMake Software 312.440.9545 800.359.8049 Winners of the 2009 Jolt Award Introduction There are many similarities
Case Studies of Running the Platform. NetBeans UML Servlet JSP GlassFish EJB
September Case Studies of Running the Platform NetBeans UML Servlet JSP GlassFish EJB In this project we display in the browser the Hello World, Everyone! message created in the session bean with servlets
Analytics Configuration Reference
Sitecore Online Marketing Suite 1 Analytics Configuration Reference Rev: 2009-10-26 Sitecore Online Marketing Suite 1 Analytics Configuration Reference A Conceptual Overview for Developers and Administrators
Introduction to Eclipse, Creating Eclipse plug-ins and the Overture editor. David Holst Møller Engineering College of Aarhus
Introduction to Eclipse, Creating Eclipse plug-ins and the Overture editor David Holst Møller Engineering College of Aarhus Agenda Part I Introduction to Eclipse and Eclipse Plug-ins Part II The Overture
Plugin JUnit. Contents. Mikaël Marche. November 18, 2005
Plugin JUnit Mikaël Marche November 18, 2005 JUnit is a Java API enabling to describe unit tests for a Java application. The JUnit plugin inside Salomé-TMF enables one to execute automatically JUnit tests
Ce document a été téléchargé depuis le site de Precilog. - Services de test SOA, - Intégration de solutions de test.
Ce document a été téléchargé depuis le site de Precilog. - Services de test SOA, - Intégration de solutions de test. 01 39 20 13 55 [email protected] www.precilog.com End to End Process Testing & Validation:
Dynamic Adaptability of Services in Enterprise JavaBeans Architecture
1. Introduction Dynamic Adaptability of Services in Enterprise JavaBeans Architecture Zahi Jarir *, Pierre-Charles David **, Thomas Ledoux ** [email protected], {pcdavid, ledoux}@emn.fr (*) Faculté
IBM WebSphere ILOG Rules for.net
Automate business decisions and accelerate time-to-market IBM WebSphere ILOG Rules for.net Business rule management for Microsoft.NET and SOA environments Highlights Complete BRMS for.net Integration with
Oracle Essbase Integration Services. Readme. Release 9.3.3.0.00
Oracle Essbase Integration Services Release 9.3.3.0.00 Readme To view the most recent version of this Readme, see the 9.3.x documentation library on Oracle Technology Network (OTN) at http://www.oracle.com/technology/documentation/epm.html.
SOA Software: Troubleshooting Guide for Agents
SOA Software: Troubleshooting Guide for Agents SOA Software Troubleshooting Guide for Agents 1.1 October, 2013 Copyright Copyright 2013 SOA Software, Inc. All rights reserved. Trademarks SOA Software,
StreamServe Persuasion SP5 Ad Hoc Correspondence and Correspondence Reviewer
StreamServe Persuasion SP5 Ad Hoc Correspondence and Correspondence Reviewer User Guide Rev B StreamServe Persuasion SP5 Ad Hoc Correspondence and Correspondence Reviewer User Guide Rev B 2001-2010 STREAMSERVE,
Writing Self-testing Java Classes with SelfTest
Writing Self-testing Java Classes with SelfTest Yoonsik Cheon TR #14-31 April 2014 Keywords: annotation; annotation processor; test case; unit test; Java; JUnit; SelfTest. 1998 CR Categories: D.2.3 [Software
NetIQ Identity Manager Setup Guide
NetIQ Identity Manager Setup Guide July 2015 www.netiq.com/documentation Legal Notice THIS DOCUMENT AND THE SOFTWARE DESCRIBED IN THIS DOCUMENT ARE FURNISHED UNDER AND ARE SUBJECT TO THE TERMS OF A LICENSE
EMC RepliStor for Microsoft Windows ERROR MESSAGE AND CODE GUIDE P/N 300-002-826 REV A02
EMC RepliStor for Microsoft Windows ERROR MESSAGE AND CODE GUIDE P/N 300-002-826 REV A02 EMC Corporation Corporate Headquarters: Hopkinton, MA 01748-9103 1-508-435-1000 www.emc.com Copyright 2003-2005
SOA, case Google. Faculty of technology management 07.12.2009 Information Technology Service Oriented Communications CT30A8901.
Faculty of technology management 07.12.2009 Information Technology Service Oriented Communications CT30A8901 SOA, case Google Written by: Sampo Syrjäläinen, 0337918 Jukka Hilvonen, 0337840 1 Contents 1.
How To Sync Quickbooks With Qvinci.Com On A Pc Or Macbook Or Mac Book (For A Webbook) With A Flashbook (For An Ubuntu Account) With An Ipo (For Macbook) On A Mac
Qvinci.web Sync Application Setup Instructions For Server-Based QuickBooks Files Table of Contents What is Qvinci.web?... 2 What is the Qvinci.web Sync Application?... 2 How does the Hosted Qvinci.web
GlassFish v3. Building an ex tensible modular Java EE application server. Jerome Dochez and Ludovic Champenois Sun Microsystems, Inc.
GlassFish v3 Building an ex tensible modular Java EE application server Jerome Dochez and Ludovic Champenois Sun Microsystems, Inc. Agenda Java EE 6 and GlassFish V3 Modularity, Runtime Service Based Architecture
NetBeans IDE Field Guide
NetBeans IDE Field Guide Copyright 2005 Sun Microsystems, Inc. All rights reserved. Table of Contents Introduction to J2EE Development in NetBeans IDE...1 Configuring the IDE for J2EE Development...2 Getting
Avoiding Web Services Chaos with WebSphere Service Registry and Repository
IBM Software Group Avoiding Web s Chaos with WebSphere Registry and Repository David Buchanan David Ben Buchanan J Briden Consulting IT Specialist Consulting IT IT Specialist WebSphere Software WebSphere
Overview of Web Services API
1 CHAPTER The Cisco IP Interoperability and Collaboration System (IPICS) 4.5(x) application programming interface (API) provides a web services-based API that enables the management and control of various
GLOBAL CONSULTING SERVICES TOOLS FOR WEBMETHODS. 2015 Software AG. All rights reserved. For internal use only
GLOBAL CONSULTING SERVICES TOOLS FOR WEBMETHODS CONSULTING TOOLS VALUE CREATING ADD-ONS REDUCE manual effort time effort risk 6 READY-TO- USE TOOLS MORE COMING SOON SIMPLE PRICING & INSTALLATION INCREASE
Rational Quality Manager. Quick Start Tutorial
Rational Quality Manager Quick Start Tutorial 1 Contents 1. Introduction... 2 2. Terminology... 3 3. Project Area Preparation... 4 3.1 Adding Users and specifying Roles... 4 3.2 Managing Tool Associations...
CA Data Protection. Content Provider Development Guide. Release 15.0
CA Data Protection Content Provider Development Guide Release 15.0 This Documentation, which includes embedded help systems and electronically distributed materials (hereinafter referred to as the Documentation
AndroLIFT: A Tool for Android Application Life Cycles
AndroLIFT: A Tool for Android Application Life Cycles Dominik Franke, Tobias Royé, and Stefan Kowalewski Embedded Software Laboratory Ahornstraße 55, 52074 Aachen, Germany { franke, roye, kowalewski}@embedded.rwth-aachen.de
Transactionality and Fault Handling in WebSphere Process Server Web Service Invocations. version 0.5 - Feb 2011
Transactionality and Fault Handling in WebSphere Process Server Web Service Invocations version 0.5 - Feb 2011 IBM Corporation, 2011 This edition applies to Version 6.2 of WebSphere Process Server 1 /
Opacus Outlook Addin v3.x User Guide
Opacus Outlook Addin v3.x User Guide Connecting to your SugarCRM Instance Before you can use the plugin you must first configure it to communicate with your SugarCRM instance. In order to configure the
Parallels Plesk Control Panel. Plesk 8.3 for Windows Advanced Administration Guide. Revision 1.0
Parallels Plesk Control Panel Plesk 8.3 for Windows Advanced Administration Guide Revision 1.0 Contents Preface 5 Documentation Conventions... 5 Typographical Conventions... 5 Feedback... 6 About This
Frameworks & Android. Programmeertechnieken, Tim Cocx
Frameworks & Android Programmeertechnieken, Tim Cocx Discover thediscover world atthe Leiden world University at Leiden University Software maken is hergebruiken The majority of programming activities
PingFederate. Salesforce Connector. Quick Connection Guide. Version 4.1
PingFederate Salesforce Connector Version 4.1 Quick Connection Guide 2011 Ping Identity Corporation. All rights reserved. PingFederate Salesforce Quick Connection Guide Version 4.1 June, 2011 Ping Identity
Industrial Network Security and Connectivity. Tunneling Process Data Securely Through Firewalls. A Solution To OPC - DCOM Connectivity
Industrial Network Security and Connectivity Tunneling Process Data Securely Through Firewalls A Solution To OPC - DCOM Connectivity Manufacturing companies have invested billions of dollars in industrial
Engagement Analytics Configuration Reference Guide
Engagement Analytics Configuration Reference Guide Rev: 17 June 2013 Sitecore CMS & DMS 6.6 or later Engagement Analytics Configuration Reference Guide A conceptual overview for developers and administrators
Using WebLOAD to Monitor Your Production Environment
Using WebLOAD to Monitor Your Production Environment Your pre launch performance test scripts can be reused for post launch monitoring to verify application performance. This reuse can save time, money
Introduction to WebSphere Process Server and WebSphere Enterprise Service Bus
Introduction to WebSphere Process Server and WebSphere Enterprise Service Bus Course materials may not be reproduced in whole or in part without the prior written permission of IBM. 4.0.3 Unit objectives
StreamServe Persuasion SP5 Upgrading instructions
StreamServe Persuasion SP5 Upgrading instructions Reference Guide Rev A Upgrading instructionsstreamserve Persuasion SP5 Reference Guide Rev A 2001-2010 STREAMSERVE, INC. ALL RIGHTS RESERVED United States
What Is Specific in Load Testing?
What Is Specific in Load Testing? Testing of multi-user applications under realistic and stress loads is really the only way to ensure appropriate performance and reliability in production. Load testing
Flexible Engineering Process Automation Process: Continuous Integration & Test
Flexible Engineering Process Automation Process: Continuous Integration & Test Alexander Schatten Andreas Pieber Michael Handler Stefan Biffl Christian Doppler Laboratory SE-Flex-AS Institute of Software
VOL. 2, NO. 1, January 2012 ISSN 2225-7217 ARPN Journal of Science and Technology 2010-2012 ARPN Journals. All rights reserved
Mobile Application for News and Interactive Services L. Ashwin Kumar Department of Information Technology, JNTU, Hyderabad, India [email protected] ABSTRACT In this paper, we describe the design and
Robotium Automated Testing for Android
Robotium Automated Testing for Android Hrushikesh Zadgaonkar Chapter No. 1 "Getting Started with Robotium" In this package, you will find: A Biography of the author of the book A preview chapter from the
Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON
Revista Informatica Economică, nr. 4 (44)/2007 45 Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON Iulian ILIE-NEMEDI, Bucharest, Romania, [email protected] Writing a custom web
No no-argument constructor. No default constructor found
Every software developer deals with bugs. The really tough bugs aren t detected by the compiler. Nasty bugs manifest themselves only when executed at runtime. Here is a list of the top ten difficult and
E-vote 2011 Version: 1.0 Testing and Approval Date: 26/10/2009. E-vote 2011. SSA-U Appendix 5 Testing and Approval Project: E-vote 2011
E-vote 2011 SSA-U Appendix 5 Testing and Approval Project: E-vote 2011 Change log Version Date Author Description/changes 0.1 26.10.09 First version Page 1 CONTENT 1. INTRODUCTION 3 2. TESTING PROCESS
Practical Android Projects Lucas Jordan Pieter Greyling
Practical Android Projects Lucas Jordan Pieter Greyling Apress s w«^* ; i - -i.. ; Contents at a Glance Contents --v About the Authors x About the Technical Reviewer xi PAcknowiedgments xii Preface xiii
Engine: Using MSBuild and Team Foundation
Microsoft Inside the Microsoft* Build Engine: Using MSBuild and Team Foundation Build, Second Edition Sayed Hashimi William Bartholomew Table of Contents Foreword x'x Introduction x*1 Part I Overview 1
Coveo Platform 7.0. Oracle Knowledge Connector Guide
Coveo Platform 7.0 Oracle Knowledge Connector Guide Notice The content in this document represents the current view of Coveo as of the date of publication. Because Coveo continually responds to changing
Running and Testing Java EE Applications in Embedded Mode with JupEEter Framework
JOURNAL OF APPLIED COMPUTER SCIENCE Vol. 21 No. 1 (2013), pp. 53-69 Running and Testing Java EE Applications in Embedded Mode with JupEEter Framework Marcin Kwapisz 1 1 Technical University of Lodz Faculty
TESTING WITH JUNIT. Lab 3 : Testing
TESTING WITH JUNIT Lab 3 : Testing Overview Testing with JUnit JUnit Basics Sample Test Case How To Write a Test Case Running Tests with JUnit JUnit plug-in for NetBeans Running Tests in NetBeans Testing
Profiling and Testing with Test and Performance Tools Platform (TPTP)
Profiling and Testing with Test and Performance Tools Platform (TPTP) 2009 IBM Corporation and Intel Corporation; made available under the EPL v1.0 March, 2009 Speakers Eugene Chan IBM Canada [email protected]
q for Gods Whitepaper Series (Edition 7) Common Design Principles for kdb+ Gateways
Series (Edition 7) Common Design Principles for kdb+ Gateways May 2013 Author: Michael McClintock joined First Derivatives in 2009 and has worked as a consultant on a range of kdb+ applications for hedge
Monitoring BPMN-Processes with Rules in a Distributed Environment
Monitoring BPMN-Processes with Rules in a Distributed Environment Lothar Hotz 1, Stephanie von Riegen 1, Lars Braubach 2, Alexander Pokahr 2, and Torsten Schwinghammer 3 1 HITeC e.v. c/o Fachbereich Informatik,
Object-Oriented Databases db4o: Part 2
Object-Oriented Databases db4o: Part 2 Configuration and Tuning Distribution and Replication Callbacks and Translators 1 Summary: db4o Part 1 Managing databases with an object container Retrieving objects
Getting Started with the Internet Communications Engine
Getting Started with the Internet Communications Engine David Vriezen April 7, 2014 Contents 1 Introduction 2 2 About Ice 2 2.1 Proxies................................. 2 3 Setting Up ICE 2 4 Slices 2
SDK Code Examples Version 2.4.2
Version 2.4.2 This edition of SDK Code Examples refers to version 2.4.2 of. This document created or updated on February 27, 2014. Please send your comments and suggestions to: Black Duck Software, Incorporated
IBM WebSphere Adapter for PeopleSoft Enterprise 6.2.0. Quick Start Tutorials
IBM WebSphere Adapter for PeopleSoft Enterprise 6.2.0 Quick Start Tutorials Note: Before using this information and the product it supports, read the information in "Notices" on page 94. This edition applies
<Insert Picture Here> TDD on a Coherence project
TDD on a Coherence project Jon Hall - Oracle UK Consulting [email protected] Disclaimer The following is intended to outline general product use and direction. It is intended
UltraLog HSPI User s Guide
UltraLog HSPI User s Guide A HomeSeer HS2 plug-in to store and retrieve HomeSeer and syslog events Copyright 2013 [email protected] Revised 01/27/2013 This document contains proprietary and copyrighted
IBM InfoSphere Master Data Management Server
IBM InfoSphere Master Data Management Server Licensed Materials Property of IBM InfoSphere Master Data Management Server Version 8.5.0 Understanding and Planning Guide IBM InfoSphere Master Data Management
How To Evaluate Web Applications
A Framework for Exploiting Conceptual Modeling in the Evaluation of Web Application Quality Pier Luca Lanzi, Maristella Matera, Andrea Maurino Dipartimento di Elettronica e Informazione, Politecnico di
Unit Testing & JUnit
Unit Testing & JUnit Lecture Outline Communicating your Classes Introduction to JUnit4 Selecting test cases UML Class Diagrams Rectangle height : int width : int resize(double,double) getarea(): int getperimeter():int
Sabre Red Apps. Developer Toolkit Overview. October 2014
Sabre Red Apps Developer Toolkit Overview October 2014 Red Apps are optional, authorized applications that extend the capabilities of Sabre Red Workspace. Red Apps are Sabre's branded version of an Eclipse
Testing, Debugging, and Verification
Testing, Debugging, and Verification Testing, Part II Moa Johansson 10 November 2014 TDV: Testing /GU 141110 1 / 42 Admin Make sure you are registered for the course. Otherwise your marks cannot be recorded.
How To Write A Web Framework In Java
Seam Framework Experience the Evolution of Java ЕЕ Second Edition Michael Juntao Yuan Jacob Orshalick Thomas Heute PRENTICE HALL Upper Saddle River, NJ Boston Indianapolis San Francisco New York Toronto
Kohsuke Kawaguchi Sun Microsystems, Inc. hk2.dev.java.net, glassfish.dev.java.net. Session ID
1 Kohsuke Kawaguchi Sun Microsystems, Inc. hk2.dev.java.net, glassfish.dev.java.net Session ID 2 What s GlassFish v3? JavaEE 6 API for REST (JAX-RS) Better web framework support (Servlet 3.0) WebBeans,
