lessons learnt while building pex

27
LESSONS LEARNT WHILE BUILDING PEX Peli de Halleux Senior Research Software Design Engineer Microsoft Research

Upload: nirav

Post on 22-Feb-2016

52 views

Category:

Documents


0 download

DESCRIPTION

Peli de Halleux Senior Research Software Design Engineer Microsoft Research. Lessons Learnt While BUILDING Pex. What is Pex?. Pex is…. A Unit Test Generation Tool for .NET That Uses Dynamic Symbolic Exception Uses Constraint Solving. Pex is…. Developed at Microsoft Research - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Lessons Learnt While BUILDING Pex

LESSONS LEARNT WHILE BUILDING PEX

Peli de HalleuxSenior Research Software Design EngineerMicrosoft Research

Page 2: Lessons Learnt While BUILDING Pex

WHAT IS PEX?

Page 3: Lessons Learnt While BUILDING Pex

Pex is…

A Unit Test Generation Tool for .NET

That Uses Dynamic Symbolic Exception

Uses Constraint Solving

Page 4: Lessons Learnt While BUILDING Pex

Pex is…

Developed at Microsoft Research 5 years x 2 developers

Nikolai TillmannPeli de Halleux

Z3 Constraint Solver - 5 years x 2 developersNikolaj BjornerLeonardo de Moura

40000 downloads last year, 3000 forum posts, …

Page 5: Lessons Learnt While BUILDING Pex

CHALLENGES FACED BY PEX(OR ANY OTHER TEST GENERATION TOOL)

Page 6: Lessons Learnt While BUILDING Pex

GUT FEELING AHEAD...DISCLAIMER

Page 7: Lessons Learnt While BUILDING Pex

Universal Low of Constraint Solving

“If you cannot collect constraints,you cannot solve them”

Famous test generation guru

Page 8: Lessons Learnt While BUILDING Pex

Closed with Friends

internal void Test(int i){ if (i == 123) throw new BugException();}

Private!!!Easy

challenge

Page 9: Lessons Learnt While BUILDING Pex

Assertions Deficit Syndrome

“Your tool only finds null references” “Do you have any assertion?” “Assertion???”

Conversation between a developer

and a test generation tool writer

Page 10: Lessons Learnt While BUILDING Pex

Hidden Complexity

“Why do something in a couple instructions, when you can do it in millions”

CPU Spoiled Developer

Page 11: Lessons Learnt While BUILDING Pex

String Arithmetics

void Sum(int[] numbers) { string sum = “0”; foreach(int number in numbers) { sum = (int.Parse(sum) + number) .ToString() } if (sum == “123”) throw new BugException();}

Hidden Complexit

yHidden

Complexity

Page 12: Lessons Learnt While BUILDING Pex

XML “Mon Amour”

void DoSomething(string xml) { var doc = new XmlDocument(xml); var node = doc.Select(“//foo[@bar = 5]”); if(node.Value == 123) throw new BugException();}

Hidden Complexit

yHidden

Complexity

Page 13: Lessons Learnt While BUILDING Pex

Technology Soup

“XML, XAML, Linq, Javascript, Aspx, Silverlight, .NET, COM, C/C++, Java, PHP, …….”

Pex

Page 14: Lessons Learnt While BUILDING Pex

The life of a generated test

“What do we do with the generated tests?” A developer in front of 100 generated tests

Page 15: Lessons Learnt While BUILDING Pex

Test Poetry

“Your tool generated Foo001. I don’t like it.”

“What did you expect?” “Foo_Should_Fail_When_The_Bar_Is_Negative.” Conversation between a

developer and a test generation tool writer

Page 16: Lessons Learnt While BUILDING Pex

Test Poetry II

“Your tool generated “\0”” “What did you expect?” “”Marc”.”

Conversation between a developer and a test generation tool writer

Page 17: Lessons Learnt While BUILDING Pex

Dangers of a Great Demo

“Your tool is Magic!”A developer wowed by a

cool demo

Page 18: Lessons Learnt While BUILDING Pex

Toxic Code Challenge

“New Testing Tools are always evaluated against toxic code”

Page 19: Lessons Learnt While BUILDING Pex

Last Week’s Bug Challenge

“New Testing Tools are evaluated against previously found bugs”

Page 20: Lessons Learnt While BUILDING Pex

Unit Testing Utopia

“I do not need test generation, I already practice Unit Testing (and/or TDD)”

A Unit Testing Enthusiast

Page 21: Lessons Learnt While BUILDING Pex

Test Driven Development Dogma

“Test Generation does not fit into the TDD process”

TDD Convert

Page 22: Lessons Learnt While BUILDING Pex

Dr Unit vs Mr Integration

“Most Unit Tests are Integration Tests in disguise”

Testing tool writer gut feeling

Page 23: Lessons Learnt While BUILDING Pex

Isolate First Development

“Test Generation cannot work without Isolation”

Peli’s gut feeling

Page 24: Lessons Learnt While BUILDING Pex

Welded Coding

void ReadFile(string fileName) { if(!File.Exists(fileName)) throw new FileNotFoundException(); ... ... ...}

Hard coded

dependency

Page 25: Lessons Learnt While BUILDING Pex

The Change Function

Change =

Pip Coburn

Find a project with lots of

pain

Make it as easy as possible to get

started

Page 26: Lessons Learnt While BUILDING Pex

The Chicken and The Egg

“Who is using your tool?” “Do you want to be the first?”

“I love your tool but no.”

Page 27: Lessons Learnt While BUILDING Pex

Conclusions

Test Generation one piece of the puzzle

Isolation is key Testing is an “integrated

experience”