{"id":18,"date":"2009-11-25T15:36:19","date_gmt":"2009-11-25T15:36:19","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=18"},"modified":"2018-02-23T16:16:37","modified_gmt":"2018-02-23T21:16:37","slug":"simplified-testing","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/simplified-testing\/","title":{"rendered":"Simplified Testing"},"content":{"rendered":"<p>I&#8217;ve been struggling with the\u00a0collision\u00a0of worlds from the waterfall approach to testing and the agile approach to testing. \u00a0There really isn&#8217;t a good solid statement being made about what &#8220;end to end&#8221; and &#8220;system testing&#8221; look like in agile. It&#8217;s time we simplified testing.<\/p>\n<p>In concordance with keeping things simple, let&#8217;s break it down starting with the end goal: to produce shippable code at the end of an iteration.<\/p>\n<p>This comes from the agile principle of:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"background-color: #ffffff;\"><em>Deliver working software frequently, from a <\/em><\/span><\/p>\n<p style=\"padding-left: 30px;\"><span style=\"background-color: #ffffff;\"><em><span style=\"font-style: normal; background-color: #ffffff;\"><em>couple of weeks to a couple of months, with a <\/em><\/span><\/em><\/span><\/p>\n<p style=\"padding-left: 30px;\"><em>preference to the shorter timescale.<\/em><\/p>\n<p>In order to deliver working software, that software must be usable or complete at that point. \u00a0Almost every agile process involves completing a user story before moving on to the next (at least all the user stories in an iteration.)<\/p>\n<p>Shippable software is software that has been completely tested. \u00a0 Getting to that point in one iteration is not something that is attainable if you hold onto the fallacy of &#8220;system testing.&#8221; \u00a0What is &#8220;system&#8221; or &#8220;end to end testing,&#8221; anyway? \u00a0I have never seen a true system level defect that did not exist also at a functional level. \u00a0What value are you getting by testing the whole system when you only changed a small part of the functionality? \u00a0And when you find defects at this high level of testing you end up having to triage them down to a root cause.<\/p>\n<p>So what if we cut that out? \u00a0What if instead we said all desired functionality in the system is represented by automated tests which are produced in conjunction with the code?<\/p>\n<p>What if we did 2 very simple things:<\/p>\n<ol>\n<li>For each user story we write automated tests that define what we expect from the system; when those pass the story is done. Check out Kent Beck&#8217;s book, <a href=\"http:\/\/www.amazon.com\/gp\/product\/0321146530\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321146530&amp;linkCode=as2&amp;tag=makithecompsi-20\" target=\"_blank\">Test-Driven Development<\/a>.<\/li>\n<li>Each time we finish a story we run all the previous automated tests to ensure nothing is broken. A good general book on testing is <a href=\"http:\/\/www.amazon.com\/gp\/product\/B000S1LVEU\/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B000S1LVEU&amp;linkCode=as2&amp;tag=makithecompsi-20\" target=\"_blank\">Testing Computer Software<\/a>.<\/li>\n<\/ol>\n<p>If we do those 2 things and we make sure the user of the system (or person representing the user) has agreed that the automated tests adequately cover what they want the story to accomplish, is there a need to do anything else? \u00a0Or is it perhaps that this very complex methodology of testing really is just that simple?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been struggling with the\u00a0collision\u00a0of worlds from the waterfall approach to testing and the agile approach to testing. \u00a0There really isn&#8217;t a good solid statement being made about what &#8220;end to end&#8221; and &#8220;system testing&#8221; look like in agile. It&#8217;s time we simplified testing. In concordance with keeping things simple, let&#8217;s break it down starting&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[11287,12],"tags":[],"class_list":["post-18","post","type-post","status-publish","format-standard","hentry","category-agile","category-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Simplified Testing - Simple Programmer<\/title>\n<meta name=\"description\" content=\"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.\" \/>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simplified Testing - Simple Programmer\" \/>\n<meta property=\"og:description\" content=\"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/simplified-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2009-11-25T15:36:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-02-23T21:16:37+00:00\" \/>\n<meta name=\"author\" content=\"John Sonmez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"John Sonmez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/\"},\"author\":{\"name\":\"John Sonmez\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"headline\":\"Simplified Testing\",\"datePublished\":\"2009-11-25T15:36:19+00:00\",\"dateModified\":\"2018-02-23T21:16:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/\"},\"wordCount\":401,\"commentCount\":2,\"articleSection\":[\"Agile\",\"Testing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/\",\"name\":\"Simplified Testing - Simple Programmer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"datePublished\":\"2009-11-25T15:36:19+00:00\",\"dateModified\":\"2018-02-23T21:16:37+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"description\":\"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simplified-testing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simplified Testing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\",\"name\":\"John Sonmez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"caption\":\"John Sonmez\"},\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/jsonmez\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simplified Testing - Simple Programmer","description":"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_US","og_type":"article","og_title":"Simplified Testing - Simple Programmer","og_description":"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.","og_url":"https:\/\/simpleprogrammer.com\/simplified-testing\/","og_site_name":"Simple Programmer","article_published_time":"2009-11-25T15:36:19+00:00","article_modified_time":"2018-02-23T21:16:37+00:00","author":"John Sonmez","twitter_card":"summary_large_image","twitter_misc":{"Written by":"John Sonmez","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/"},"author":{"name":"John Sonmez","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"headline":"Simplified Testing","datePublished":"2009-11-25T15:36:19+00:00","dateModified":"2018-02-23T21:16:37+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/"},"wordCount":401,"commentCount":2,"articleSection":["Agile","Testing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/simplified-testing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/","url":"https:\/\/simpleprogrammer.com\/simplified-testing\/","name":"Simplified Testing - Simple Programmer","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"datePublished":"2009-11-25T15:36:19+00:00","dateModified":"2018-02-23T21:16:37+00:00","author":{"@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"description":"Simplified testing results from removing ideas of end to end and full system testing. Testing should define requirements and prevent software regression.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/simplified-testing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/simplified-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"Simplified Testing"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67","name":"John Sonmez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","caption":"John Sonmez"},"url":"https:\/\/simpleprogrammer.com\/author\/jsonmez\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}