26
Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming IEEE interval arithmetic standard written in Java M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg Institute of Computer Science University of W¨ urzburg Germany SWIM 2013 M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 1/25

IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

IaTestGenA unit test generator for implementations of the upcoming

IEEE interval arithmetic standard written in Java

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff vonGudenberg

Institute of Computer ScienceUniversity of Wurzburg

Germany

SWIM 2013

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 1/25

Page 2: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Outline

1 Motivation

2 Domain Specific Language

3 Design

4 Summary

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 2/25

Page 3: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Outline

1 Motivation

2 Domain Specific Language

3 Design

4 Summary

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 3/25

Page 4: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Motivation

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 4/25

Page 5: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Motivation

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 5/25

Page 6: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Motivation

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 6/25

Page 7: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Motivation

How to specify tests for every implementation?

Use an abstract representation (DSL).

Provide means to run tests on different platforms andimplementations.

Benefits:

Tests must only be specified once.

Tests can be written in a well readable format.

Can be used as regression tests by developers.

Gives confidence in implementations.

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 7/25

Page 8: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Motivation

How to specify tests for every implementation?

Use an abstract representation (DSL).

Provide means to run tests on different platforms andimplementations.

Benefits:

Tests must only be specified once.

Tests can be written in a well readable format.

Can be used as regression tests by developers.

Gives confidence in implementations.

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 7/25

Page 9: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Outline

1 Motivation

2 Domain Specific Language

3 Design

4 Summary

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 8/25

Page 10: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Generation Process

1 Test specifications are written in DSL.

2 Generator parses the specifications.

3 Produces unit tests using a concrete strategy forprogramming language and implementation.

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 9/25

Page 11: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageImportant Requirements

An interval data type.

Number types and a boolean type.

Number literals in hexadecimal and binary encoding.

Typed variables.

Arbitrary many testcases that can be commented.

Operations with possibly multiple arguments and returnvalues

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 10/25

Page 12: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageVariables, Numbers and Intervals

Declaration and initialization of different variables:

$lowerLimit01 = double: 0x3FC0A3D70A3D70A4 ;

$upperLimit01 = double: 0x3FCD70A3D70A3D71 ;

$lowerLimit02 = float : 0xC0D05BC0 ;

$upperLimit02 = float : 0x414E147B ;

$sampleInteger = int: 5;

$sampleInterval = interval <double >[ $lowerLimit01 , 0x3FDD70A3D70A3D71 ];

$sampleInfinite = interval <double >[-inf , +inf ];

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 11/25

Page 13: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageOperations

Test for correct addition of two intervals:

add(interval <float >[3,5], interval <float >[3,7]) = interval <float >[6, 12];

Test for correct determination of midpoint:

mid(interval <double >[2 ,12]) = double: 7;

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 12/25

Page 14: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageA more complex example

/**

* Example Domain -Specific -Language .

* ...

*/

/**

* Substraction -test .

* @description

* Simple substraction test ;

*/

sub( interval <int >[10, 15], interval <int >[1, 2] ) = interval <int >[8, 14];

// variables for addition -test

$lowerLimit01 = double: 0x3FC0A3D70A3D70A4 ;

$upperLimit01 = double: 0x3FCD70A3D70A3D71 ;

$lowerLimit02 = double: 0x3FD0A3D70A3D70A4 ;

$additionResult = interval <double >[ $lowerLimit02 , 0 x3FDD70A3D70A3D71 ];

/**

* Addition -test .

* @description

* Simple addition test ;

*/

add(interval <double >[ $lowerLimit01 , $upperLimit01 ],

interval <double >[0 x3FC0A3D70A3D70A4 , 0x3FCD70A3D70A3D71 ]) = $additionResult ;

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 13/25

Page 15: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageCode Generation

Example:

/**

* Bisection

*/

$secondOutput = interval <int >[7, 10];

bisect(interval <int >[5, 10]) = interval <int >[5, 7], $secondOutput ;

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 14/25

Page 16: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageCode Generation

BOOST_AUTO_TEST_CASE (testcase_02_bisect )

{

// input parameter 1:

int input_01_lower = 5;

int input_01_upper = 10;

interval <int , P> input_01 (input_01_lower , input_01_upper );

// expected output parameter 1:

int output_01_lower = 5;

int output_01_upper = 7;

interval <int , P> output_01 (output_01_lower , output_01_upper );

// expected output parameter 2:

int output_02_lower = 7;

int output_02_upper = 10;

interval <int , P> output_02 (output_02_lower , output_02_upper );

// operation to test : bisect

interval <int , P> lib_output_01 = bisect(input_01 ).first ;

interval <int , P> lib_output_02 = bisect(input_01 ). second;

...

}

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 15/25

Page 17: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The Domain-Specific LanguageCode Generation

BOOST_AUTO_TEST_CASE (testcase_02_bisect ) {

...

// assert function for output 1:

int lo_output_01 = output_01 .lower ();

int lo_lib_output_01 = lib_output_01 .lower ();

BOOST_REQUIRE_EQUAL (lo_output_01 , lo_lib_output_01 );

int hi_output_01 = output_01 .upper ();

int hi_lib_output_01 = lib_output_01 .upper ();

BOOST_REQUIRE_EQUAL (hi_output_01 , hi_lib_output_01 );

// assert function for output 2:

int lo_output_02 = output_02 .lower ();

int lo_lib_output_02 = lib_output_02 .lower ();

BOOST_REQUIRE_EQUAL (lo_output_02 , lo_lib_output_02 );

int hi_output_02 = output_02 .upper ();

int hi_lib_output_02 = lib_output_02 .upper ();

BOOST_REQUIRE_EQUAL (hi_output_02 , hi_lib_output_02 );

}

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 16/25

Page 18: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Outline

1 Motivation

2 Domain Specific Language

3 Design

4 Summary

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 17/25

Page 19: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Extending IaTestGenWhat extension can be provided?

1 Programming Language

2 Testing Framework

3 Interval Arithmetic Library

Templates have to be provided that can be translated intocode by the generator.

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 18/25

Page 20: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Extending IaTestGenDesign

+LanguageFactory()

+getAvailableLanguageSpecifications()

LanguageFactory

+getLibraryImports()

+getTestMethod()

+getAssertFunction()

UnitTestLibrary-

Specification

+getLibraryImports()

+getIntervalTranslation()

+getOperationsTranslation()

ArithmeticLibrary-

Specification

+getArithmeticLibraryList()

+getUnitTestLibraryList()

+getLanguageImports()

+getTypesTranslation()

+getLineCommentToken()

+getLanguageCustomMethods()

LanguageSpecification

+main()

CommandLine

Interpreter

CppSpecification CppBoostUnit-

TestLibrary

CppBoost-

ArithmeticLibrary

PythonSpecification PythonUnitTestLibrary PythonMpMath

Specification

CppFilib-

ArithmeticLibrary

1

1

*

1

*

1

*

1

<<use>>

Instantiate

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 19/25

Page 21: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Extending IaTestGen

LanguageSpecification

Provides templates for basic language constructs like:

Comment token

Standard imports and definitions

Basic structure of test file

Custom methods (will be added to every testfile)

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 20/25

Page 22: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Extending IaTestGen

UnitTestLibrarySpecification

Provides templates specific for a testing framework like:

Imports and definitions

Basic structure of test suite and test case

Assert function

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 21/25

Page 23: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Extending IaTestGen

ArithmeticLibrarySpecification

Provides templates specific for a interval library like:

Imports and definitions

How to retrieve interval bounds

Translation from operation name to library function call

...

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 22/25

Page 24: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Outline

1 Motivation

2 Domain Specific Language

3 Design

4 Summary

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 23/25

Page 25: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

Summary

DSL can be used to specify a test set for the upcominginterval arithmetic standard.

IaTestGen can easily be extended to generate tests formany implementations.

Implementors get an easy way to check theirimplementations.

Users can check an implementation in an existingenvironment.

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 24/25

Page 26: IaTestGen - A unit test generator for implementations of ... · Motivation Domain Specific Language Design Summary IaTestGen A unit test generator for implementations of the upcoming

Motivation Domain Specific Language Design Summary

The End

Thank you for listening!

Any Questions ?

M.Jedich, M.Nehmeier, A.Dallmann, J. Wolff von Gudenberg — IaTestGen 25/25