240 likes | 413 Views
Testing with Filmstrips. Tony Clark School of Computing Thames Valley University tony.clark@tvu.ac.uk http://itcentre.tvu.ac.uk/~clark/. Overview. Model Driven Testing Testing with Filmstrips Two new features: filmstrips and snapshots A Case Study Filmstrips as Extended Use Cases
E N D
Testing with Filmstrips Tony Clark School of Computing Thames Valley University tony.clark@tvu.ac.uk http://itcentre.tvu.ac.uk/~clark/
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
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
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)
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
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))
Sequenced Behaviour context SeqSatisfaction inv: filmstrip.children = children.filmstrip and children.spec = spec.children
Alternative Behaviour context AltSatisfaction inv: children->exists(r | r.filmstrip = filmstrip)
Parallel Behaviour context ParSatisfaction inv: children->filmstrip = filmstrip.merged and par.children = children.spec
Behaviour Repetition context StarSatisfaction inv: filmstrip.children->forAll(c | c = basicSatisfaction.filmstrip)
Practical Issues • Generating Sequences • Language Design • System Architecture • Demo
Generating Sequences F ::= Filmstrip Specs F then F | F or F | F par F | F* | epsilon | O O ::= Operation Specs
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* |] = [| epsilonor (f then f*) |] [| epsilon |] = { [] } [| o |] = { [o] }
A Language for Testing Java @Filmstrip(hotel.BookingSystem,"C:/project") name = {"hotel1","hotel2"} address = {"Leeds"} inseq 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
Connecting to Java Use Case Model Filmstrip Specification Filmstrip Engine Java Application Report
Review • Adding snapshot patterns. • Controlling choices. • Integration with OMG testing profile. • Correspondence with UML behaviour.