{"id":40063,"date":"2021-06-21T07:56:00","date_gmt":"2021-06-21T11:56:00","guid":{"rendered":"https:\/\/www.shortform.com\/blog\/?p=40063"},"modified":"2021-06-26T14:02:45","modified_gmt":"2021-06-26T18:02:45","slug":"testing-in-software-development","status":"publish","type":"post","link":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/","title":{"rendered":"Testing in Software Development: What&#8217;s It For?"},"content":{"rendered":"\n<p>What&#8217;s the role of testing in software development? How do developers make sure that they correctly understand clients&#8217; requirements?<\/p>\n\n\n\n<p>In software development, testing ensures that a system works, but that\u2019s a bonus, not their main purpose. The most important purpose of a test is to communicate, specify, and document how a system is supposed to work and how it actually works.<\/p>\n\n\n\n<p>In this article, we\u2019ll first look at acceptance testing, which is the main type of testing in software development. Then, we\u2019ll look at how acceptance tests fit into the broader discipline of testing.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Testing in Software Development<\/h2>\n\n\n\n<p><strong>When clients speak with programmers, there are often miscommunications, especially about system requirements.<\/strong> This is because the businesses describe to programmers what they want (sometimes ambiguously), and the programmers estimate and build what they understand from the description (sometimes incorrectly). Ambiguity comes from two sources:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Business stakeholder disagreements.<\/strong> If stakeholders can\u2019t agree on how something should work, sometimes, instead of addressing this, they\u2019ll write a vague description that everyone can agree on. Then, a programmer has to interpret this description.<\/li><li><strong>Assumptions.<\/strong> Sometimes stakeholders assume anyone reading their descriptions will understand what they meant.<\/li><\/ol>\n\n\n\n<p>In software development, testing\u2014more specifically, acceptance testing\u2014is the solution to this ambiguity. Acceptance tests determine whether the system behaves the way the business wants it to\u2014in other words, these tests specify what the system is supposed to do.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>For example, if a client requires that an operation completes in under two seconds so a user doesn\u2019t experience a delay, the test checks whether the operation completes fast enough.<\/li><\/ul>\n\n\n\n<p><strong>Acceptance tests are co-written by clients and testers or QA<\/strong>. Sometimes the clients can write the tests themselves, otherwise, QA should work with them to gather requirements and turn these into acceptance tests. The client will usually come up with the happy-path test (checking that default usage doesn\u2019t throw errors) and QA will write the unhappy-path tests that cover unusual scenarios. The developer only gets involved after the test is written to add it to the system. There are two things to keep in mind with these relationships:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Developers and testers shouldn\u2019t be adversarial.<\/strong> Testers are smart, determined, and it\u2019s their job to find problems, so while you should strive to produce work they can\u2019t find fault with, don\u2019t get upset if they do find problems.<\/li><li><strong>If someone writes a bad test, you should speak with them about it.<\/strong> It\u2019s unprofessional to make something ugly that will technically pass the test but isn\u2019t actually useful.<\/li><\/ul>\n\n\n\n<p>To avoid the trap of premature precision, <strong>developers shouldn\u2019t start on a feature until the test is ready.<\/strong> The first acceptance tests should be ready the day work starts, and all the tests should be completed by the halfway point.&nbsp;<\/p>\n\n\n\n<p><strong>Perhaps writing these tests seems like extra work, but in fact, they\u2019ll save both money and time<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Money.<\/strong> Manual testing is far more expensive than automated testing. For example, each one of a large Internet company\u2019s manual tests cost over $1 million.&nbsp;<\/li><li><strong>Time.<\/strong> Because acceptance tests specify how the system needs to work, they have to be unambiguous. Therefore, it will be impossible for the client to ask for the wrong feature, or for the programmer to misunderstand. This will save revision time.<\/li><\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Acceptance Tests for Graphic User Interfaces (GUIs)<\/h5>\n\n\n\n<p>There are two things you\u2019re testing when it comes to the GUI:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>The actual GUI. <\/strong>Clients will want to make lots of changes to this, including colors, fonts, and so on.&nbsp;<ul><li>(Shortform example: A client might go back and forth on the <em>color and shading<\/em> of a \u201ccontact us\u201d button.)&nbsp;<\/li><\/ul><\/li><li><strong>How the GUI works. <\/strong>This doesn\u2019t change nearly as often.<ul><li>(Shortform example: Clients rarely change their mind about whether or not to <em>include <\/em>a \u201ccontact button.\u201d)<\/li><\/ul><\/li><\/ol>\n\n\n\n<p><strong>As much as possible, test these two things separately.<\/strong> Otherwise, changes to one might break the tests to the others, which could become so frustrating you ignore your tests or stop changing the GUI, both of which are unprofessional. Keep in mind the single responsibility principle (SRP), which involves grouping elements by <em>why<\/em> they change.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>For example, instead of grouping a collection of buttons together because they\u2019re all buttons, group the buttons by what they do.<\/li><\/ul>\n\n\n\n<p><strong>To test the workings, test via an API instead of via the GUI<\/strong> (but use the same API that GUI uses).&nbsp;<\/p>\n\n\n\n<p><strong>To test the GUI, use stubs, or pieces of code to stand in for the business rules.<\/strong> Since the GUI changes a lot, don\u2019t test it too much, or you run the risk of getting annoying and abandoning the tests altogether.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Pyramid of Tests<\/strong><\/h3>\n\n\n\n<p>In the previous section, we learned about testing for communication. Now, we\u2019ll learn about how acceptance testing fits into the other testing that ensures the system behaves properly.&nbsp;<\/p>\n\n\n\n<p>Testing occurs at multiple levels and is arranged in a pyramid based on how much of the code and what level of detail it covers. We\u2019ll start at the bottom and move up:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level #1: Unit Tests<\/strong><\/h4>\n\n\n\n<p>Unit tests test \u201cunits\u201d\u2014small sections of code. Their purpose is to specify the system and they:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cover as much of the code as possible<\/strong> (at least 90%).<\/li><li><strong>Run continuously (continuous integration). <\/strong>They\u2019re triggered whenever someone finishes a piece of the system and integrates it into the whole system (for example, when someone commits a model). If the tests fail, everyone on the project should stop their work and help get the system passing the tests again.&nbsp;<\/li><li><strong>Are written by developers<\/strong> in the same programming language as the system.<\/li><li><strong>Are written <\/strong><strong><em>before<\/em><\/strong><strong> the code is written,<\/strong> using a workflow called test-driven development, which we\u2019ll look at next.<\/li><\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Test-Driven Development (TDD)<\/h5>\n\n\n\n<p><strong>Test-driven development (TDD) is a workflow in which you write the tests you\u2019ll use on your code before you actually write the code.&nbsp;<\/strong><\/p>\n\n\n\n<p>There are three rules to TDD:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>You can\u2019t write code until you write a unit test that fails. (The test will fail because it needs code to evaluate, and the code isn\u2019t written yet.)<ul><li>For example, if you plan to write a function, you\u2019ll have to mention its name in the test. The test will fail because the function doesn\u2019t exist yet.<\/li><\/ul><\/li><li>You can\u2019t write any more of the test beyond the first failure. (Not compiling counts as a failure.)<\/li><li>You can\u2019t write more code than you need to pass the test.<\/li><\/ol>\n\n\n\n<p>TDD comes with several advantages:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>The cycle time is fast. <\/strong>Since you test and write only a little bit of code at a time, you regularly execute the code. This is very productive because you get through each cycle quickly.&nbsp;<\/li><li><strong>You know your code works.<\/strong> In TDD, you test every single time you make a change, so you have confirmation that what you\u2019ve written will work.<\/li><li><strong>You can update the code with confidence.<\/strong> You (and other programmers) can make changes to the code later, worry-free, because you already have tests designed specifically for it. (If there <em>weren\u2019t<\/em> tests, and you edited something and broke it, it would become your problem).<\/li><li><strong>There are fewer bugs.<\/strong><ul><li>For example, Martin uses TDD on a project called FitNesse, and FitNesse only had 17 bugs after he added 20,000 lines of code.<\/li><\/ul><\/li><li><strong>They facilitate good (decoupled) design<\/strong>. Decoupled code is easier to work with because when a test identifies a problem, you can quickly find it\u2014there aren\u2019t layers of code the wade through.<\/li><li><strong>Tests double as documentation.<\/strong> The TDD unit tests act as instructions for how to use the program because they cover every piece of the system. (If you write tests later, they won\u2019t be as comprehensive).<\/li><\/ul>\n\n\n\n<p>A couple of caveats:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>TDD isn\u2019t infallible.<\/strong> It\u2019s possible to write bad tests and to write bad code that passes good tests.<\/li><li><strong>There are some exceptional situations in which TDD isn\u2019t appropriate.<\/strong> To evaluate if you\u2019re in one of these, consider your rules\u2014will using TDD do harm? If yes, don\u2019t use it.<\/li><\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Tools of the Trade<\/h5>\n\n\n\n<p>Unit testing tools vary by language, but whichever tool you choose should have the following features:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>There must be a fast and easy way to run the rest.<\/strong> For example, all you should have to do is press a button or hit a shortcut key.<\/li><li><strong>It must be immediately obvious whether the test passed or failed.<\/strong> For example, the test might show a green bar or a single line of text that says the test passes. (It <em>shouldn\u2019t<\/em> require you to read a long report or compare files.<\/li><li><strong>It must show testing progress so you can confirm the test hasn\u2019t stalled. <\/strong>For example, there might be a bar that shows what percentage of the test is complete.&nbsp;<\/li><li><strong>There should be a way to keep the tests independent<\/strong> (they don\u2019t rely on each other). For example, the tool might run the tests in a different order every time.<\/li><\/ul>\n\n\n\n<p>Martin likes CPPUTest for C and C++, RSPEC for Ruby, NUNIT for .Net, Midje for Clojure, and JUNIT for Java.<\/p>\n\n\n\n<p><strong>For the continuous build, Martin uses Jenkins\u2014<\/strong>it\u2019s easy to learn, simple, and doesn\u2019t take a lot of processing power.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level #2: Component Tests (Including Acceptance Tests)<\/strong><\/h4>\n\n\n\n<p><strong>The second level of the pyramid is component tests, which include acceptance tests. <\/strong>Component tests test individual components and business rules. Their purpose is to test whether the software does what the client wants it to and they:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cover 50% of the system.<\/strong> They\u2019re mostly happy path tests because the unhappy-path cases were already tested by the unit tests.<\/li><li><strong>Run continuously, <\/strong>just like unit tests.<\/li><li><strong>Are written by QA and the client,<\/strong> with help from programmers if necessary. (But the test-writer should never be the same person who builds the feature).<\/li><\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Tools of the Trade<\/h5>\n\n\n\n<p>You might want to use some of the following tools to test at the API level:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>FitNesse <\/strong>is wiki-based and lets test-writers write in a tabular format. It can test in almost any language. (Martin built FitNesse and it\u2019s his favorite.)<\/li><li><strong>Green Pepper<\/strong> uses a wiki and is similar to FitNesse.<\/li><li><strong>RobotFX <\/strong>runs on flat files (like Excel sheets) and can test in any language.<\/li><li><strong>Cucumber<\/strong> uses plain text and can test many different platforms.<\/li><li><strong>JBehave<\/strong> is like Cucumber.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level #3: Integration Tests<\/strong><\/h4>\n\n\n\n<p>The third level is integration tests. <strong>Their purpose is to assess how well different components communicate<\/strong> (they\u2019re only relevant in multi-component systems). They:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cover 20% of the system.&nbsp;<\/strong><\/li><li><strong>Execute periodically, <\/strong>rather than continuously, because they take more time to evaluate.<\/li><li><strong>Are written by the system\u2019s lead designer or system architect<\/strong>, usually in the same programming language and platform as the component tests.<\/li><li><strong>Include throughput and performance tests.&nbsp;<\/strong><\/li><\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Tools of the Trade<\/h5>\n\n\n\n<p>You can often use the component testing tools for integration testing, but not when it comes to UI tests or end-to-end tests. <strong>Martin likes Watir and Selenium for integration testing.<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level #4: System Tests<\/strong><\/h4>\n\n\n\n<p>The fourth level is system tests, which are the highest form of integration tests. <strong>The purpose is to evaluate the whole system.<\/strong> They:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cover 10% of the system.<\/strong><\/li><li><strong>Execute infrequently<\/strong> because they take a long time to evaluate. (But the more often you run them, the better.)<\/li><li><strong>Are written by the technical leads or system architects, <\/strong>usually in the same programming language and platform as the UI (user interface) integration tests.<\/li><li><strong>Include throughput and performance tests.&nbsp;<\/strong><\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Level #5: Manual Exploratory Tests&nbsp;<\/strong><\/h4>\n\n\n\n<p>The highest level of the pyramid is manual exploratory tests\u2014tests in which people (sometimes specialists, sometimes anyone in the company) use the system. <strong>Their purpose is to confirm that the system operates, note bugs that come up, and report how the system <\/strong><strong><em>actually<\/em><\/strong><strong> works. <\/strong>They:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cover 5% of the system.<\/strong><\/li><li><strong>Are executed infrequently<\/strong> because they\u2019re expensive.<\/li><li><strong>Aren\u2019t written at all.<\/strong> People explore the system however they like and try to break it.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>What&#8217;s the role of testing in software development? How do developers make sure that they correctly understand clients&#8217; requirements? In software development, testing ensures that a system works, but that\u2019s a bonus, not their main purpose. The most important purpose of a test is to communicate, specify, and document how a system is supposed to work and how it actually works. In this article, we\u2019ll first look at acceptance testing, which is the main type of testing in software development. Then, we\u2019ll look at how acceptance tests fit into the broader discipline of testing.<\/p>\n","protected":false},"author":7,"featured_media":40088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[34,30],"tags":[397],"class_list":["post-40063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-communication","category-work","tag-the-clean-coder","","tg-column-two"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.3 (Yoast SEO v24.3) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Testing in Software Development: What&#039;s It For? - Shortform Books<\/title>\n<meta name=\"description\" content=\"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testing in Software Development: What&#039;s It For?\" \/>\n<meta property=\"og:description\" content=\"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Shortform Books\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-21T11:56:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-26T18:02:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/s3.amazonaws.com\/wordpress.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Darya Sinusoid\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Darya Sinusoid\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\"},\"author\":{\"name\":\"Darya Sinusoid\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46\"},\"headline\":\"Testing in Software Development: What&#8217;s It For?\",\"datePublished\":\"2021-06-21T11:56:00+00:00\",\"dateModified\":\"2021-06-26T18:02:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\"},\"wordCount\":2009,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg\",\"keywords\":[\"The Clean Coder\"],\"articleSection\":[\"Communication\",\"Work\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\",\"name\":\"Testing in Software Development: What's It For? - Shortform Books\",\"isPartOf\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg\",\"datePublished\":\"2021-06-21T11:56:00+00:00\",\"dateModified\":\"2021-06-26T18:02:45+00:00\",\"description\":\"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.shortform.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing in Software Development: What&#8217;s It For?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#website\",\"url\":\"https:\/\/www.shortform.com\/blog\/\",\"name\":\"Shortform Books\",\"description\":\"The World&#039;s Best Book Summaries\",\"publisher\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.shortform.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#organization\",\"name\":\"Shortform Books\",\"url\":\"https:\/\/www.shortform.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png\",\"width\":500,\"height\":74,\"caption\":\"Shortform Books\"},\"image\":{\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46\",\"name\":\"Darya Sinusoid\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png\",\"contentUrl\":\"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png\",\"caption\":\"Darya Sinusoid\"},\"description\":\"Darya\u2019s love for reading started with fantasy novels (The LOTR trilogy is still her all-time-favorite). Growing up, however, she found herself transitioning to non-fiction, psychological, and self-help books. She has a degree in Psychology and a deep passion for the subject. She likes reading research-informed books that distill the workings of the human brain\/mind\/consciousness and thinking of ways to apply the insights to her own life. Some of her favorites include Thinking, Fast and Slow, How We Decide, and The Wisdom of the Enneagram.\",\"url\":\"https:\/\/www.shortform.com\/blog\/author\/darya\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Testing in Software Development: What's It For? - Shortform Books","description":"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/","og_locale":"en_US","og_type":"article","og_title":"Testing in Software Development: What's It For?","og_description":"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.","og_url":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/","og_site_name":"Shortform Books","article_published_time":"2021-06-21T11:56:00+00:00","article_modified_time":"2021-06-26T18:02:45+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/s3.amazonaws.com\/wordpress.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","type":"image\/jpeg"}],"author":"Darya Sinusoid","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Darya Sinusoid","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#article","isPartOf":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/"},"author":{"name":"Darya Sinusoid","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46"},"headline":"Testing in Software Development: What&#8217;s It For?","datePublished":"2021-06-21T11:56:00+00:00","dateModified":"2021-06-26T18:02:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/"},"wordCount":2009,"commentCount":0,"publisher":{"@id":"https:\/\/www.shortform.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","keywords":["The Clean Coder"],"articleSection":["Communication","Work"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/","url":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/","name":"Testing in Software Development: What's It For? - Shortform Books","isPartOf":{"@id":"https:\/\/www.shortform.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","datePublished":"2021-06-21T11:56:00+00:00","dateModified":"2021-06-26T18:02:45+00:00","description":"In software development, testing ensures a system works. But more importantly, tests specify how a system must work vs how it actually works.","breadcrumb":{"@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.shortform.com\/blog\/testing-in-software-development\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#primaryimage","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/www.shortform.com\/blog\/testing-in-software-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.shortform.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Testing in Software Development: What&#8217;s It For?"}]},{"@type":"WebSite","@id":"https:\/\/www.shortform.com\/blog\/#website","url":"https:\/\/www.shortform.com\/blog\/","name":"Shortform Books","description":"The World&#039;s Best Book Summaries","publisher":{"@id":"https:\/\/www.shortform.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.shortform.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.shortform.com\/blog\/#organization","name":"Shortform Books","url":"https:\/\/www.shortform.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2019\/06\/logo-equilateral-with-text-no-bg.png","width":500,"height":74,"caption":"Shortform Books"},"image":{"@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/0421cce75bc249b11e2517b3a91f9c46","name":"Darya Sinusoid","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shortform.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png","contentUrl":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/07\/Untitled-design-1.png","caption":"Darya Sinusoid"},"description":"Darya\u2019s love for reading started with fantasy novels (The LOTR trilogy is still her all-time-favorite). Growing up, however, she found herself transitioning to non-fiction, psychological, and self-help books. She has a degree in Psychology and a deep passion for the subject. She likes reading research-informed books that distill the workings of the human brain\/mind\/consciousness and thinking of ways to apply the insights to her own life. Some of her favorites include Thinking, Fast and Slow, How We Decide, and The Wisdom of the Enneagram.","url":"https:\/\/www.shortform.com\/blog\/author\/darya\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.shortform.com\/blog\/wp-content\/uploads\/2021\/06\/software-development-coding-programming.jpg","_links":{"self":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/comments?post=40063"}],"version-history":[{"count":7,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40063\/revisions"}],"predecessor-version":[{"id":40451,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/posts\/40063\/revisions\/40451"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/media\/40088"}],"wp:attachment":[{"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/media?parent=40063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/categories?post=40063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shortform.com\/blog\/wp-json\/wp\/v2\/tags?post=40063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}