Filmstrip testing

24
1 Testing with Filmstrips Tony Clark School of Computing Thames Valley University [email protected] http://itcentre.tvu.ac.uk/~clark/

Transcript of Filmstrip testing

Page 1: Filmstrip testing

1

Testing with Filmstrips

Tony ClarkSchool of Computing

Thames Valley University

[email protected]://itcentre.tvu.ac.uk/~clark/

Page 2: Filmstrip testing

2

Overview

• Model Driven Testing• Testing with Filmstrips• Two new features: filmstrips and snapshots• A Case Study• Filmstrips as Extended Use Cases• An Approach to Language Design• Defining the Extension: syntax and semantics• Practical Experimentation: demo• Review and further work

Page 3: Filmstrip testing

3

Model Driven Testing• Model the system.• Generate tests from models.• Can:

– Test the model.– Test the implementation.

• Most existing work uses behaviour models:– State machines– Collaboration diagrams– Sequence diagrams

Page 4: Filmstrip testing

4

Testing with Filmstrips

Page 5: Filmstrip testing

5

Features: Snapshots and Filmstrips• Snapshots are system state descriptions.• Snapshot patterns denote sets of state descriptions.

(Model Based Functional Testing using Pattern Directed Filmstrips. Tony Clark. AST 09, ICSE 09.)

• Filmstrip patterns are sequences of snapshot patterns.

• This talk about filmstrips and filmstrip patterns.

• EOPPEs (http://www.ansa.co.uk/ANSATech/93/Primary/10100002.pdf)

Page 6: Filmstrip testing

6

A Case Study

Page 7: Filmstrip testing

7

Basic Use Cases

Page 8: Filmstrip testing

8

UML Meta Model for Use Cases

Page 9: Filmstrip testing

9

Proposed Extension

Page 10: Filmstrip testing

10

Extended Use Case Model

Page 11: Filmstrip testing

11

An Approach to DSL Design

Page 12: Filmstrip testing

12

Filmstrip Semantic Domain

context Filmstrip inv: steps = children->iterate(c s = Seq{} | s + c.steps)

context Filmstrip inv: steps->asBag = merged->iterate(c s = Seq{} | s + c.steps)->asBag

Page 13: Filmstrip testing

13

Basic Semantic Mapping

context BasicSatisfaction inv: spec.inv->forAll(c | filmstrip.steps->forAll(s | c.satisfiedBy(s.before,env) and c.satisfiedBy(s.after,env)))

context BasicSatisfaction inv: spec.pre->forAll(c | c.satisfiedBy(filmstrip.steps->first.before,env)) and spec.post->forAll(c | c.satisfiedBy(filmstrip.steps->last.before,env))

Page 14: Filmstrip testing

14

Sequenced Behaviour

context SeqSatisfaction inv: filmstrip.children = children.filmstrip and children.spec = spec.children

Page 15: Filmstrip testing

15

Alternative Behaviour

context AltSatisfaction inv: children->exists(r | r.filmstrip = filmstrip)

Page 16: Filmstrip testing

16

Parallel Behaviour

context ParSatisfaction inv: children->filmstrip = filmstrip.merged and par.children = children.spec

Page 17: Filmstrip testing

17

Behaviour Repetition

context StarSatisfaction inv: filmstrip.children->forAll(c | c = basicSatisfaction.filmstrip)

Page 18: Filmstrip testing

18

Practical Issues

• Generating Sequences

• Language Design

• System Architecture

• Demo

Page 19: Filmstrip testing

19

Generating Sequences

F ::= Filmstrip Specs

F then F

| F or F

| F par F

| F*

| epsilon

| O

O ::= Operation Specs

Page 20: Filmstrip testing

20

Sequences[| f then g |] = { p + q | p in [| f |], q in [| g |] }

[| f or g |] = [| f |] union [| g |]

[| f par g |] = { p + q + p’ + q’ |

r in [| f |],

s in [| g |],

(p,p’) in split(r),

(q,q’) in split(s) }

split(s) = { (take(s,i),drop(s,i)) | i in 0..len(s) }

[| f* |] = [| epsilon or (f then f*) |]

[| epsilon |] = { [] }

[| o |] = { [o] }

Page 21: Filmstrip testing

21

A Language for Testing Java@Filmstrip(hotel.BookingSystem,"C:/project") name = {"hotel1","hotel2"} address = {"Leeds"}in seq op hotelId = addHotel(name,address ,3,100.0)

pre not self.getHotels()->exists(hotel | hotel.getName() = hotelName)

post self.getHotels()->exists(hotel | hotel.getName() = hotelName and hotel.getAddress() = hotelAddress and hotel.getRooms()->size = 3) end ... more filmstrip...do ... action ...end

Page 22: Filmstrip testing

22

Connecting to Java

Java Application

FilmstripSpecification

FilmstripEngine

Report

Use CaseModel

Page 23: Filmstrip testing

Demo

23

Page 24: Filmstrip testing

Review

• Adding snapshot patterns.

• Controlling choices.

• Integration with OMG testing profile.

• Correspondence with UML behaviour.

24