Testing Blog

It is not about writing tests, its about writing stories

Wednesday, September 02, 2009
Share on Twitter Share on Facebook
Google
Labels: Misko Hevery

8 comments :

  1. CARFIELDSeptember 2, 2009 at 9:54:00 AM PDT

    For me , end to end test is easy to fall into testing M*N combination of unit tests, where the ROI may be negative ...

    ReplyDelete
    Replies
      Reply
  2. UnknownSeptember 2, 2009 at 11:00:00 AM PDT

    I like the stretch in thought and but it leaves with open questions and some contradictory thoughts...

    I think at the crux of why i feel ambiguous is the definition of a test that is used at the bottom.

    is a test really a series of assumptions that must be true at all times?

    if a test is defined to be something that passes, then the redux is: a test does nothing but return a pass value in all cases.

    so, I think I got it (please correct me if I am wrong).

    Are you saying that if something is given in complete form, then a test is simply a way of describing the behaviors that exist - a mapping so to speak?

    well if that is the case I agree, it doesn't say much about the quality or fitness of the thing, it doesn't even call out purpose.

    but I don't see that as a test. I look at a test as an experiment with an outcome only.


    Lets look at this with our science hat on, the scientific method.

    software is intended to meet some set of expectations for it's behavior.

    so, if it is a car - it should act like one. The stories are a dialog about the behavior of the car, what makes it a car.

    tests are then the experiments that demostrates wether it is a car or not.

    in order to be a car, certain requirements must be met - it must go 25mph (geez - I got that from iCarly), it must have four wheels, it must have a place for a person to sit - etc.

    Now of course a car can explode when it rounds a corner at 40mph and still be a car prior to the explosion ....

    so lets qualify test a bit more. There are validation tests that confirm the story.

    but now we do need another term....

    There need to be tests to challange the completeness of the story itself, tests to address assumptions the story teller has made.

    so we have to think... mabey the story of the car really isnt the car, its just one of many stories that maps to our tests of the car... we do know we have a car of unknown safety and reliability.

    we do not yet have the car - the one we were expecting to have.

    what do we do if we want to ensure we have a BMW? Well, there are a number of things I expect from a BMW, you probably expect some the same, some different.

    If we don't have a BMW to compare to, we are going to have to explore the behaviors of the car.

    Why don't we take it on the autobaun, drive as fast as we can?

    then when it breaks determine why.

    I don't think its possible to know you have a BMW untill you set your expectations, and use the test failures and subsequent work on the car to make it what you think a BMW should be.

    Sorry for the ramble - please feel free to correct me where I have strayed.

    ReplyDelete
    Replies
      Reply
  3. Gareth BowlesSeptember 2, 2009 at 11:01:00 AM PDT

    Nice article, but I don't see why writing tests after the product has already been built has to restrict the test cases in the way you described.

    If you take a step back and consider what the transmission is supposed to do, you could come up with the same set of tests as in your first example; I think it's a question of what test approach to take rather than what stage of development the product is at.

    Of course, if you find faults by testing after the car has already been built, it will be a lot more expensive to adjust the design !

    ReplyDelete
    Replies
      Reply
  4. GiorgioSeptember 3, 2009 at 5:10:00 AM PDT

    I had found hard sometimes to follow TDD by always writing test first, but when I stick to it the results come. I feel better when I'm sure I'm not writing unnecessary code or testing private methods.

    ReplyDelete
    Replies
      Reply
  5. UnknownSeptember 3, 2009 at 8:05:00 AM PDT

    A related article

    Richard Feynman, the Challenger Disaster, and Software Engineering

    http://duartes.org/gustavo/blog/post/richard-feynman-challenger-disaster-software-engineering

    ReplyDelete
    Replies
      Reply
  6. Justin HunterSeptember 3, 2009 at 12:08:00 PM PDT

    Misko,

    Very good post. My most recent blog post has a similar theme. I had a different take on what software testers can learn from manufacturing though.

    My blog post is here: http://hexawise.wordpress.com/2009/08/25/what-else-can-software-development-and-testing-learn-from-manufacturing-dont-forget-design-of-experiments/

    There are more similarities than most people realize between manufacturing and software testing (and more lessons to be learned from proven manufacturing practices than most software testers realize). In manufacturing scenarios (such as making transmissions and engines), before a final design is arrived at, prototypes are constructed. There is a science to creating as few prototypes as possible and learning as much as possible from each prototype. The field is known as Design of Experiments and firms like Toyota and Ford have followed DoE principles for decades. The analogy in software development during this phase is Google’s web site optimizer. It allows developers of web apps to experiment with different layouts and learn (with as few “prototypes” as possible) which works best.

    In this prototype building phase, the engineers involved probably have hypotheses from their past experiences about what will be a pretty good starting point (e.g., engine size of X, transmission should shift when the RPM's fall below Y, the transmission should down-shift whenever the gas pedal is depressed more than Z% and a further condition applies, etc.) Several prototypes would be built that vary X, Y, and Z so that X+10% and Y-10% and Z might be tested together as well as X with Y+10% and Z-10%, etc. In that way, the interaction between the different variables would be identified as well to capture the near-optimal solution in as little time and investment as possible. An indication of how important Design of Experiments is to Toyota is that one of their senior engineers was quoted in the book 'Statistics for Experimenters' as saying "An engineer who does not understand Design of Experiments is not an engineer."

    After the Design of Experiments prototyping phase is completed, the finished product should be tested. This step described above not typically considered “Testing” by QA/Testing organizations, but the next lesson learned from manufacturing is:

    Design of Experiments methods (borrowed from decades of successful implementations in manufacturing) can also be used in QA / software testing. With a goal of finding as many defects in as few test cases as possible, Design of Experiments-based test case identification methods (such as pair-wise, orthogonal array-based, and n-wise approaches) have been proven to find more than twice as many defects per tester hour as standard, manual methods of test case identification in a wide range of software testing situations.

    Empirical evidence from 10 projects showing that average defects found per tester hour more than doubled can be found in an article I link to in my blog post. Please see the link to the IEEE article I recently co-wrote with three PhD's who share my strong belief that these efficient and effective software testing methods are not nearly as widespread among software testers as they would be if more people tried them out and saw for themselves the benefits that these proven approaches consistently deliver.

    - Justin

    ReplyDelete
    Replies
      Reply
  7. radiSeptember 7, 2009 at 4:57:00 AM PDT

    Just as a general observation I see tests in the test-driven development model acting as the requirements in traditional software development models with the exception that tests are generally more detailed and provide more granularity. Although such tests set some proper expectations with the end-user, I doubt any developer will be able to nail down all test cases that must be passed on the first round (unless the dev is also an SME in the software's domain). To address this, test-driven development must be executed in a cyclic fashion allowing new tests/stories/requirements to be added and old code to be tested against those new tests/stories/requirements.

    ReplyDelete
    Replies
      Reply
  8. UnknownSeptember 14, 2009 at 8:14:00 AM PDT

    ... You could call it "questions" instead of "stories" since (as you have already pointed out) your stories are about the what and not about the how.

    ReplyDelete
    Replies
      Reply
Add comment
Load more...

The comments you read and contribute here belong only to the person who posted them. We reserve the right to remove off-topic comments.

  

Labels


  • TotT 104
  • GTAC 61
  • James Whittaker 42
  • Misko Hevery 32
  • Code Health 31
  • Anthony Vallone 27
  • Patrick Copeland 23
  • Jobs 18
  • Andrew Trenk 13
  • C++ 11
  • Patrik Höglund 8
  • JavaScript 7
  • Allen Hutchison 6
  • George Pirocanac 6
  • Zhanyong Wan 6
  • Harry Robinson 5
  • Java 5
  • Julian Harty 5
  • Adam Bender 4
  • Alberto Savoia 4
  • Ben Yu 4
  • Erik Kuefler 4
  • Philip Zembrod 4
  • Shyam Seshadri 4
  • Chrome 3
  • Dillon Bly 3
  • John Thomas 3
  • Lesley Katzen 3
  • Marc Kaplan 3
  • Markus Clermont 3
  • Max Kanat-Alexander 3
  • Sonal Shah 3
  • APIs 2
  • Abhishek Arya 2
  • Alan Myrvold 2
  • Alek Icev 2
  • Android 2
  • April Fools 2
  • Chaitali Narla 2
  • Chris Lewis 2
  • Chrome OS 2
  • Diego Salas 2
  • Dori Reuveni 2
  • Jason Arbon 2
  • Jochen Wuttke 2
  • Kostya Serebryany 2
  • Marc Eaddy 2
  • Marko Ivanković 2
  • Mobile 2
  • Oliver Chang 2
  • Simon Stewart 2
  • Stefan Kennedy 2
  • Test Flakiness 2
  • Titus Winters 2
  • Tony Voellm 2
  • WebRTC 2
  • Yiming Sun 2
  • Yvette Nameth 2
  • Zuri Kemp 2
  • Aaron Jacobs 1
  • Adam Porter 1
  • Adam Raider 1
  • Adel Saoud 1
  • Alan Faulkner 1
  • Alex Eagle 1
  • Amy Fu 1
  • Anantha Keesara 1
  • Antoine Picard 1
  • App Engine 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Benjamin Pick 1
  • Bob Nystrom 1
  • Bruce Leban 1
  • Carlos Arguelles 1
  • Carlos Israel Ortiz García 1
  • Cathal Weakliam 1
  • Christopher Semturs 1
  • Clay Murphy 1
  • Dagang Wei 1
  • Dan Maksimovich 1
  • Dan Shi 1
  • Dan Willemsen 1
  • Dave Chen 1
  • Dave Gladfelter 1
  • David Bendory 1
  • David Mandelberg 1
  • Derek Snyder 1
  • Diego Cavalcanti 1
  • Dmitry Vyukov 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Elliott Karpilovsky 1
  • Elliotte Rusty Harold 1
  • Espresso 1
  • Felipe Sodré 1
  • Francois Aube 1
  • Gene Volovich 1
  • Google+ 1
  • Goran Petrovic 1
  • Goranka Bjedov 1
  • Hank Duan 1
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • Jason Elbaum 1
  • Jason Huggins 1
  • Jay Han 1
  • Jeff Hoy 1
  • Jeff Listfield 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Micco 1
  • John Penix 1
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Josh Armour 1
  • Julie Ralph 1
  • Kai Kent 1
  • Kanu Tewary 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Bourrillion 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Manjusha Parvathaneni 1
  • Marek Kiszkis 1
  • Marius Latinis 1
  • Mark Ivey 1
  • Mark Manley 1
  • Mark Striebeck 1
  • Matt Lowrie 1
  • Meredith Whittaker 1
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Aizatsky 1
  • Mike Wacker 1
  • Mona El Mahdy 1
  • Noel Yap 1
  • Palak Bansal 1
  • Patricia Legaspi 1
  • Per Jacobsson 1
  • Peter Arrenbrecht 1
  • Peter Spragins 1
  • Phil Norman 1
  • Phil Rollet 1
  • Pooja Gupta 1
  • Project Showcase 1
  • Radoslav Vasilev 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Sharon Zhou 1
  • Shiva Garg 1
  • Siddartha Janga 1
  • Simran Basi 1
  • Stan Chan 1
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Test Engineer 1
  • Tim Lyakhovetskiy 1
  • Tom O'Neill 1
  • Vojta Jína 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2025 (1)
    • ►  Jan (1)
  • ►  2024 (13)
    • ►  Dec (1)
    • ►  Oct (1)
    • ►  Sep (1)
    • ►  Aug (1)
    • ►  Jul (1)
    • ►  May (3)
    • ►  Apr (3)
    • ►  Mar (1)
    • ►  Feb (1)
  • ►  2023 (14)
    • ►  Dec (2)
    • ►  Nov (2)
    • ►  Oct (5)
    • ►  Sep (3)
    • ►  Aug (1)
    • ►  Apr (1)
  • ►  2022 (2)
    • ►  Feb (2)
  • ►  2021 (3)
    • ►  Jun (1)
    • ►  Apr (1)
    • ►  Mar (1)
  • ►  2020 (8)
    • ►  Dec (2)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Aug (2)
    • ►  Jul (1)
    • ►  May (1)
  • ►  2019 (4)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Jul (1)
    • ►  Jan (1)
  • ►  2018 (7)
    • ►  Nov (1)
    • ►  Sep (1)
    • ►  Jul (1)
    • ►  Jun (2)
    • ►  May (1)
    • ►  Feb (1)
  • ►  2017 (17)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Sep (1)
    • ►  Aug (1)
    • ►  Jul (2)
    • ►  Jun (2)
    • ►  May (3)
    • ►  Apr (2)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2016 (15)
    • ►  Dec (1)
    • ►  Nov (2)
    • ►  Oct (1)
    • ►  Sep (2)
    • ►  Aug (1)
    • ►  Jun (2)
    • ►  May (3)
    • ►  Apr (1)
    • ►  Mar (1)
    • ►  Feb (1)
  • ►  2015 (14)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (2)
    • ►  Aug (1)
    • ►  Jun (1)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (1)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2014 (24)
    • ►  Dec (2)
    • ►  Nov (1)
    • ►  Oct (2)
    • ►  Sep (2)
    • ►  Aug (2)
    • ►  Jul (3)
    • ►  Jun (3)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (2)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2013 (16)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Aug (2)
    • ►  Jul (1)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (2)
    • ►  Jan (2)
  • ►  2012 (11)
    • ►  Dec (1)
    • ►  Nov (2)
    • ►  Oct (3)
    • ►  Sep (1)
    • ►  Aug (4)
  • ►  2011 (39)
    • ►  Nov (2)
    • ►  Oct (5)
    • ►  Sep (2)
    • ►  Aug (4)
    • ►  Jul (2)
    • ►  Jun (5)
    • ►  May (4)
    • ►  Apr (3)
    • ►  Mar (4)
    • ►  Feb (5)
    • ►  Jan (3)
  • ►  2010 (37)
    • ►  Dec (3)
    • ►  Nov (3)
    • ►  Oct (4)
    • ►  Sep (8)
    • ►  Aug (3)
    • ►  Jul (3)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (3)
    • ►  Mar (3)
    • ►  Feb (2)
    • ►  Jan (1)
  • ▼  2009 (54)
    • ►  Dec (3)
    • ►  Nov (2)
    • ►  Oct (3)
    • ▼  Sep (5)
      • TotT: Literate Testing With Matchers
      • Checked exceptions I love you, but you have to go
      • The Plague of Entropy
      • It is not about writing tests, its about writing s...
      • The 7th Plague and Beyond
    • ►  Aug (4)
    • ►  Jul (15)
    • ►  Jun (8)
    • ►  May (3)
    • ►  Apr (2)
    • ►  Feb (5)
    • ►  Jan (4)
  • ►  2008 (75)
    • ►  Dec (6)
    • ►  Nov (8)
    • ►  Oct (9)
    • ►  Sep (8)
    • ►  Aug (9)
    • ►  Jul (9)
    • ►  Jun (6)
    • ►  May (6)
    • ►  Apr (4)
    • ►  Mar (4)
    • ►  Feb (4)
    • ►  Jan (2)
  • ►  2007 (41)
    • ►  Oct (6)
    • ►  Sep (5)
    • ►  Aug (3)
    • ►  Jul (2)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (7)
    • ►  Mar (5)
    • ►  Feb (5)
    • ►  Jan (4)

Feed

  • Google
  • Privacy
  • Terms