Simple design and Testing by @zspencer for @rubytaiwan

28
“Simple” Design and Testing by @zspencer for @rubytaiwan on May 31, 2011 http://www.zacharyspencer.com @rubytaiwan Wednesday, June 1, 2011

description

This presentation is about writing software for change by following the four rules of simple design.It is a very brief overview that can be presented in ~15 minutes.

Transcript of Simple design and Testing by @zspencer for @rubytaiwan

Page 1: Simple design and Testing by @zspencer for @rubytaiwan

“Simple”Design and Testing

by @zspencer for @rubytaiwan on May 31, 2011http://www.zacharyspencer.com

@rubytaiwan

Wednesday, June 1, 2011

Page 2: Simple design and Testing by @zspencer for @rubytaiwan

WTF is “SIMPLE?!”

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Wednesday, June 1, 2011

Page 3: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Everything is in my language of choice

It’s all in a single method!

Took the fewest keystrokes!

It’s aesthetically clean!

I just like it!

Wednesday, June 1, 2011

Page 4: Simple design and Testing by @zspencer for @rubytaiwan

Maximizing the amount of work *not* done

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Wednesday, June 1, 2011

Page 5: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

• The Users/Customers

• The Stakeholders/Sponsors

• The Team/You

For Who?

Wednesday, June 1, 2011

Page 6: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/57634636@N00/5134293410/

Your Users

Wednesday, June 1, 2011

Page 7: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/the_warfield/4992455554/

Your Stakeholders

Wednesday, June 1, 2011

Page 8: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/reinholdbehringer/1073165898/

Your Team

Wednesday, June 1, 2011

Page 9: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Ok. How?

Wednesday, June 1, 2011

Page 10: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Radiate InformationCenter Design On The UserWrite Changeable Code

Wednesday, June 1, 2011

Page 11: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Radiate InformationCenter Design On The UserWrite Changeable Code

Wednesday, June 1, 2011

Page 12: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Ok. How?

Wednesday, June 1, 2011

Page 13: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

4 Rules for Simple Design

* Pass All Tests * Duplicate No Behavior or Configuration * Express Intent Clearly and Consistently * Have No Superfluous Parts

Wednesday, June 1, 2011

Page 14: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

All Tests Must Pass!

Wednesday, June 1, 2011

Page 15: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Automated Story Tests

Wednesday, June 1, 2011

Page 16: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Automated Unit Tests

Wednesday, June 1, 2011

Page 17: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/rogersmith/4947063094/

Exploratory Testing

Wednesday, June 1, 2011

Page 18: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/vermininc/3327459367/

No Duplication

Wednesday, June 1, 2011

Page 19: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/spine/2076612679/

Smell Yer Code!

Wednesday, June 1, 2011

Page 20: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Duplication Smells!

• Reinvented Wheel

• Combinatorial Explosion

• Middle Man

• Greedy Methods/Modules

• Data Classes

• Procedural Code

• Repeated Value

• Big Classes

http://rubylearning.com/blog/2010/11/08/how-does-your-code-smell/

Wednesday, June 1, 2011

Page 21: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/spacelion/263948300/

Express IntentClearly + Consistently!

Wednesday, June 1, 2011

Page 22: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/freeparking/2247693823/

Reveal Why

Wednesday, June 1, 2011

Page 23: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/cinderellas_blog/255282013/

(Re)Name Stuff

Wednesday, June 1, 2011

Page 24: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

www.flickr.com/photos/22746515@N02/2989699245/

Extract and Move Stuff

Wednesday, June 1, 2011

Page 25: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

Some More Smells!

• Uncommunicative Name

• Type Included in Name

• Inconsistent Names

• Long Parameters

• Global Variables

• Dynamic Code Creation

• Comments

• Complicated Booleans

http://rubylearning.com/blog/2010/11/08/how-does-your-code-smell/

Wednesday, June 1, 2011

Page 26: Simple design and Testing by @zspencer for @rubytaiwan

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

http://www.flickr.com/photos/altuwa/4530651461/

No Superfluous Parts!

Wednesday, June 1, 2011

Page 27: Simple design and Testing by @zspencer for @rubytaiwan

Photo Credits

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

• Kids Using iPads: Kathy Cassidy

• The Boardroom: The Warfield

• Software Team at Work: Reinhold Behringer

• Passing Test: Davey Brown

• Spy Plane: Roger Smith

• Octuplet Consumers: Vermin Inc.

• Smelling Wine: Rick

• Walmart Storefront: Walmart Corporate

• Breakdancer: Gueorgui

• Alfred Lord Tennyson: freeparking

• The Pelican: Cindy Andrie

• Earth Mover: Bert Kaufmann

• Rube Goldberg Machine: Sebastian B

Wednesday, June 1, 2011

Page 28: Simple design and Testing by @zspencer for @rubytaiwan

More Learnin’

@zspencer -- http://www.zacharyspencer.com -- @rubytaiwan May 31, 2011

• A List of Books and Articles on Simple Design and Testing: http://bit.ly/simple_design_and_testing

• Other Resources I Think Are Awesome (Broken Down by Speciality): http://bit.ly/zspencer_recommends

• Pillars Free Webinars: http://pillartechnology.com/content/webinarbrowse

• Other Free Pillar Resources: http://pillartechnology.com/page/agilelinks

Wednesday, June 1, 2011