|
11:45 - Automated exploratory testing by comparison Bernt Marius Johnsen, Norway Exploratory testing is a manual and tedious process. This talk will show how a class of exploratory testing scenarios may be automated, and how this is implemented for testing of the MySQL RDBMS using an open source framework. Given the following requirements:
we may explore a vast set of possible inputs and automatically detect possible failures. The implementations may be different versions of the same system or independent implementations of the same specification.
The system loops through the possible inputs, applies them to each of the implementations and compare the outputs. If we get difference, we may have found a failure which requires further investigation. With two different versions of the same implementation it is likely that the latest one is faulty, unless we have hit a known bug. With three (or more) independent implemnattions of a specification, we may assume that the majority is right and that the minority has a possible fault.
We have implemented a tool that does this for MySQL and have both compared with older versions of MySQL and with other SQL databases like Apache Derby and PostgreSQL. In our case, the input source is a random query generator, which generates SQL queries from an input grammar. The system has mainly been used to find bugs in complex subquery evaluation, where it is very tedious to manually verify whether the result from the query is correct, especially if the underlying data volume is large. Example: SELECT DISTINCT table1 . date_key AS field1 FROM ( CC AS table1 (This query will actually generate a wrong result in Apache Derby 10.5.3) Implementation differences cause problems, and we have done some automation to circumvent those problems. Lastly, we try to do automatic test case simplification to produce simpler test cases which cause the same problems. The tool is a part of a suite of tools based on the random query generator: Project homepage http://launchpad.net/randgen Project wiki http://forge.mysql.com/wiki/Category:RandomQueryGenerator |
|
14:00 - Introduction to Robot Framework Janne Härkönen, Finland
This presentation offers a thorough introduction to Robot Framework (http://robotframework.org), which is a generic open source test automation framework for acceptance testing and acceptance test-driven development (ATDD). It has an easy-to-use tabular syntax with multiple supported input data formats for creating test cases and its testing capabilities can be extended by test libraries written with Python or Java. Robot Framework (RF) has been implemented with Python and it integrates to JVM through Jython, which is a Java implementation of Python. Keeping in mind that Python can be extended with C, this allows for a really broad range of test libraries to be written for RF. Some of the libraries already existing enable web testing, Swing UI testing and remote execution (through either Telnet or SSH). It should also be possible to run RF on .NET platform, with IronPython, although this not yet fully supported. RF has a command line interface for starting test execution and it is thus very easy to integrate it to different build and continuous integration systems. RF was started as an internal project inside Nokia Networks and the work later continued at Nokia Siemens Networks(NSN). It has been developed for 4 years and from the very beginning, customer feedback and requests have been integral to the development process. RF was open sourced in June 2008 with courtesy of NSN, who still remain the biggest sponsor by employing the core implementation team, currently consisting of four people. Since the open-sourcing, RF has been steadily gaining also external users and currently boasts a healthy community both inside and outside of NSN. The core framework starts to be pretty mature and most of the focus lately has been given to test data editor, RIDE, which has it's own project hosted at Google Code (http://code.google.com/p/robotframework-ride/). RIDE tries to make both creation and maintaining of test cases as easy as possible. The maintenance is especially important since some of RF users are having thousands of automated test cases already running. This talk goes through the basic concept and most important features of the framework. The goal is to be very interactive and concentrate on topics that interest the audience. Most of the features are explained through demos. The demos will show how to write tests for RF using different techniques (keyword-driven, data-driven and ATDD) and they will be available on the Internet after the talk. |
|
14:50 - JET - a distributed test engine Vemund Østgaard, Norway
JET - Java Engine for Testing - is an open source framework written in Java, designed for testing distributed software products. JET was originally a closed source project, developed as a tool for testing the Clustra high availabilty database, and is today used by the database group in Sun Microsystems. During the summer of 2009 the JET code was open sourced, and is now maintained on Kenai: http://kenai.com/projects/jet. This presentation will given an overview of the JET framework, describe it's features and explain the testing challenges it can help solve. In short, JET will let you write easily portable, extensible and configurable test code in a full programming language (Java) that can be run distributed on several machines. The JET framework is structured as three fairly separate components: JET engine: Takes an xml-file as input, constructs a test and executes it. JETBatch engine: Executes a set of JET tests on a set of machines. JAG agent: Used by JET and JETBatch for remote access to machines. The JET engine is built on top of JUnit. It receives an xml file that it parses and constructs JUnit test objects based on that, then executes the test using a JUnit runner. The JET engine can be run standalone without JETBatch or JAG, for easy test development on a single computer. The xml file lets you do property style configuration of the test code that will be used. The JETBatch engine takes a configuration file as input. Based on the configuration, JETBatch prepares the machines to be used for the test, copies binaries that are needed to all machines, executes the tests by invoking JET once for each test. When tests are finished, JETBatch gathers logs and reports the results on mail. The JAG agent uses JMX to provide remote access to machines for the JET and JETBatch engines. Both the framework itself and the tests that are written can use the agent for remote execution and monitoring. The agent monitors and cleans resources used by tests on a best effort basis by periodically checking if something has been left by a dead test. The JET framework is a good fit for maintaining an automated testing regime where product and test software needs to be copied to and executed on several machines, perhaps on different operating systems. It's maintainability is a strength as the Java code is easily portable, the JAG agents provide a singular view of remote hosts and the format of the JET tests stimulates configurable and reusable test code. |
|
16:30 - Key Note: Testing vs. Checking Michael Bolton, Canada
The testing vs. checking meme. You can read about that, in a whole series, here: http://www.developsense.com/2009/08/testing-vs-checking.html. It's really important with respect to automation-related stuff, including choice of tools, what we automate ourselves, and what we don't automate. But what it really does is to separate, de-overload some different meanings of "testing", such that people can make more precise observations of cost, value, and risk of specific activities within testing. Better yet, since it's a set of simple words and almost-as-simple ideas, it really resonates with people who might not understand testing so well--like executives and certain kinds of programmers, in particular. The basic notion is to divide the work into checking (confirmation, verification, validation) on the one hand, and testing (exploration, discovery, investigation, and learning) on the other. Checking is the tiny part of testing that can be handed over to a machine--an observation linked to decision rule that is machine-decidable. Testing is all the other stuff--the recognition of risk, design of the test, interpretation of the result, ascribing meaning and significance to what we observe, and so on. That stuff--which includes all the stuff you have to do to prepare and analyze a check--requires a human, and cannot be done by a machine. It suggests that we need exploratory testers, but it also suggests that automators need excellent testing skills in order to program and test the checks that matter. |