DOM Transactions for Testing JavaScript Phillip Heidegger, Annette - - PowerPoint PPT Presentation

dom transactions for testing javascript
SMART_READER_LITE
LIVE PREVIEW

DOM Transactions for Testing JavaScript Phillip Heidegger, Annette - - PowerPoint PPT Presentation

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion DOM Transactions for Testing JavaScript Phillip Heidegger, Annette Bieniusa, Peter Thiemann University of Freiburg 2010/09/05 Introduction JavaScript Unit Tests


slide-1
SLIDE 1

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

DOM Transactions for Testing JavaScript

Phillip Heidegger, Annette Bieniusa, Peter Thiemann

University of Freiburg

2010/09/05

slide-2
SLIDE 2

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Setting: Whitebox Unit Testing of JavaScript Code

1 /∗∗ object → bool ∗/ 2 function h(x) { 3

if ((x) && (x.longpropertyname))

4

return ”false”;

5

return true;

6 };

slide-3
SLIDE 3

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Setting: Whitebox Unit Testing of JavaScript Code

1 /∗∗ object → bool ∗/ 2 function h(x) { 3

if ((x) && (x.longpropertyname))

4

return ”false”;

5

return true;

6 };

  • Find counter example for contracts
  • Finding bugs in JavaScript programs
  • Understanding JavaScript programs
slide-4
SLIDE 4

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

JavaScript – Features

Some important features:

  • Weak, dynamic typing
  • Object-based language (no classes, but

prototypes)

  • Functions are first class values
  • Side effects
slide-5
SLIDE 5

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Checking Contracts of pure Functions

  • Monitoring of contracts (assertions)
  • Unit Testing with random generated data
  • Generate random data for parameters
  • check return contract
  • Isolated test cases
slide-6
SLIDE 6

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Checking Contracts of pure Functions

  • Monitoring of contracts (assertions)
  • Unit Testing with random generated data
  • Generate random data for parameters
  • check return contract
  • Isolated test cases

Side Effects ?

slide-7
SLIDE 7

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Side effects?

Why not include side effects in the contracts?

  • Programmers typically introduces contracts

incremental

  • Contracts do not specify the complete behavior
  • f the system

Default is:

  • Everything that is not forbidden, is allowed
slide-8
SLIDE 8

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Handling Side Effects

  • 1. Contracts with a setup and teardown function
  • Means a lot of work
  • 2. Restart browser after each test run
  • Takes seconds
  • 3. ?
slide-9
SLIDE 9

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Handling Side Effects

Transactions

  • n HTML pages
slide-10
SLIDE 10

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Transactions

Body of our test loop:

  • Begin a transaction
  • Generate test data
  • Run unit under test
  • Check contract
  • Revert changes
slide-11
SLIDE 11

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Implementation

  • Integrated into JSConTest
  • Contracts for Specification
  • Random Testing
  • Guided Random Testing
  • Log based transactions
  • Transformation of code under test
  • Browser independent
slide-12
SLIDE 12

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Implementation

  • Integrated into JSConTest
  • Contracts for Specification
  • Random Testing
  • Guided Random Testing
  • Log based transactions
  • Transformation of code under test
  • Browser independent

We can not revert every side effect, but − → setup/teardown or browser restart is rarely necessary

slide-13
SLIDE 13

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Performance?

Slowdown: ≈ 4.3

slide-14
SLIDE 14

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Performance?

Slowdown: ≈ 4.3 But we get:

  • Contract monitoring
  • Transaction system
  • Random data generation

− → much better then restart the browser

slide-15
SLIDE 15

Introduction JavaScript Unit Tests of Contracts Implementation Conclusion

Conclusion

JSConTest

  • Contract testing framework for JS
  • Transactions for functions with side effects
  • Browser independent
  • http://proglang.informatik.

uni-freiburg.de/JSConTest/