{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/01-course-information/02-course-Literature",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv"}},"mdx":{"fields":{"id":"f1965254-82c5-51ff-b295-fbee4d03fb29","title":"Course literature","slug":"/01-course-information/02-course-Literature"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Course literature\",\n  \"order\": 12,\n  \"metaTitle\": \"Course literature\",\n  \"metaDescription\": \"This is the meta description for this page\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"In this course the lectures do NOT fully cover the book, instead they are used to introduce vocabulary, give examples, and raise questions. As important is the course literature. \"), mdx(\"h2\", null, \"Main book\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"824px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/kurser/mjukvarutestning/static/046d24ec3aee93c8e09871146d088e17/a1aaf/developer-testing.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"130.8880308880309%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGgAAAQUBAAAAAAAAAAAAAAAAAAECBAUGA//EABcBAAMBAAAAAAAAAAAAAAAAAAADBAH/2gAMAwEAAhADEAAAAaVV6YXIEi87OiFbNANJF//EABwQAAEEAwEAAAAAAAAAAAAAAAIAARIhAxAyM//aAAgBAQABBQK1aDiVQI2CgQEzCPOsfn//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAWEQADAAAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8BHf/EABsQAAEFAQEAAAAAAAAAAAAAAAABAhAhcTER/9oACAEBAAY/AuHBuRXg3ISxJbh//8QAHBABAAICAwEAAAAAAAAAAAAAAQARITFBUaEQ/9oACAEBAAE/IZYFqDup4kFTWJnMCauBE7B85hBFadkZxPCn/9oADAMBAAIAAwAAABDbEHH/xAAXEQADAQAAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/ENHGf//EABcRAQEBAQAAAAAAAAAAAAAAAAEAMRH/2gAIAQIBAT8QULTJ2dv/xAAhEAEAAgECBwEAAAAAAAAAAAABABExIXFBUWGBkaHw8f/aAAgBAQABPxACCNHCC3HeAFUNHd8btAC3oBf7ABhgq+pjOJraUyyqVK106QT8CniDSMfK5T//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Developer Testing\",\n    \"title\": \"Developer Testing\",\n    \"src\": \"/kurser/mjukvarutestning/static/046d24ec3aee93c8e09871146d088e17/a1aaf/developer-testing.jpg\",\n    \"srcSet\": [\"/kurser/mjukvarutestning/static/046d24ec3aee93c8e09871146d088e17/8356d/developer-testing.jpg 259w\", \"/kurser/mjukvarutestning/static/046d24ec3aee93c8e09871146d088e17/bc760/developer-testing.jpg 518w\", \"/kurser/mjukvarutestning/static/046d24ec3aee93c8e09871146d088e17/a1aaf/developer-testing.jpg 824w\"],\n    \"sizes\": \"(max-width: 824px) 100vw, 824px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \"), \"\\nDeveloper Testing - Building Quality into Software - Alexander Tarlinder\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.bokus.com/bok/9780134291062/developer-testing/\"\n  }, \"Bokus\")), mdx(\"p\", null, \"ISBN 9780134291062\"), mdx(\"p\", null, \"\\\"How do successful agile teams deliver bug-free, maintainable software iteration after iteration? The answer is: By seamlessly combining development and testing. On such teams, the developers write testable code that enables them to verify it using various types of automated tests. This approach keeps regressions at bay and prevents testing crunches which otherwise may occur near the end of an iteration from ever happening. Writing testable code, however, is often difficult, because it requires knowledge and skills that cut across multiple disciplines.\\\"\"), mdx(\"h2\", null, \"Optional Book\"), mdx(\"p\", null, \"Test Driven Development: By Example - Kent Beck\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"383px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/kurser/mjukvarutestning/static/af305dc9c9caf0ffd2936397a4577ca5/411a4/test-driven-development-by-example.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"125.48262548262548%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAZABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUCAQP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAwD/2gAMAwEAAhADEAAAAYjW9qYqx6crsS68ln//xAAaEAACAgMAAAAAAAAAAAAAAAAAAwERAhIz/9oACAEBAAEFAqKFcrmtWSKili2YaYzcECuX/8QAFREBAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQMBAT8BIf/EABYRAQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwHKj//EABoQAAIDAQEAAAAAAAAAAAAAAAABAhBBETH/2gAIAQEABj8CwwjXjIp0k5Hbif/EAB4QAQACAgEFAAAAAAAAAAAAAAEAESExQRBRocHh/9oACAEBAAE/IeHtGn1O84mBuUbEGIIpCNYhBBRmAY09XiT/2gAMAwEAAgADAAAAENPTTf/EABYRAQEBAAAAAAAAAAAAAAAAABABEf/aAAgBAwEBPxArD//EABgRAQEBAQEAAAAAAAAAAAAAAAEAETEh/9oACAECAQE/EMjkFPHLgv/EAB8QAQACAwABBQAAAAAAAAAAAAEAESExQVFhccHh8P/aAAgBAQABPxAVLqtw1708B+YAMD92A8Gt8mKDYSskwYFR5mJeBGyNKS4pthhqrPacJtPz+rP/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Test Driven Development\",\n    \"title\": \"Test Driven Development\",\n    \"src\": \"/kurser/mjukvarutestning/static/af305dc9c9caf0ffd2936397a4577ca5/411a4/test-driven-development-by-example.jpg\",\n    \"srcSet\": [\"/kurser/mjukvarutestning/static/af305dc9c9caf0ffd2936397a4577ca5/8356d/test-driven-development-by-example.jpg 259w\", \"/kurser/mjukvarutestning/static/af305dc9c9caf0ffd2936397a4577ca5/411a4/test-driven-development-by-example.jpg 383w\"],\n    \"sizes\": \"(max-width: 383px) 100vw, 383px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.akademibokhandeln.se/bok/test-driven-development-by-example/9780321146533/\"\n  }, \"Akademibokhandeln\")), mdx(\"p\", null, \"ISBN: 9780321146533\"), mdx(\"p\", null, \"Clean code that works--now. This is the seeming contradiction that lies behind much of the pain of programming. Test-driven development replies to this contradiction with a paradox--test the program before you write it.\"), mdx(\"p\", null, \"A new idea? Not at all. Since the dawn of computing, programmers have been specifying the inputs and outputs before programming precisely. Test-driven development takes this age-old idea, mixes it with modern languages and programming environments, and cooks up a tasty stew guaranteed to satisfy your appetite for clean code that works--now.\"), mdx(\"p\", null, \"Developers face complex programming challenges every day, yet they are not always readily prepared to determine the best solution. More often than not, such difficult projects generate a great deal of stress and bad code. To garner the strength and courage needed to surmount seemingly Herculean tasks, programmers should look to test-driven development (TDD), a proven set of techniques that encourage simple designs and test suites that inspire confidence.\"), mdx(\"p\", null, \"By driving development with automated tests and then eliminating duplication, any developer can write reliable, bug-free code no matter what its level of complexity. Moreover, TDD encourages programmers to learn quickly, communicate more clearly, and seek out constructive feedback.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#main-book","title":"Main book"},{"url":"#optional-book","title":"Optional Book"}]},"parent":{"relativePath":"01-course-information/02-course-Literature.md"},"frontmatter":{"metaTitle":"Course literature","metaDescription":"This is the meta description for this page"}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/02-course-content","title":"Course content"}}},{"node":{"fields":{"slug":"/01-course-information","title":"Study guide"}}},{"node":{"fields":{"slug":"/03-examinations","title":"Assignments and Examinations"}}},{"node":{"fields":{"slug":"/","title":"Software Testing 1DV609"}}},{"node":{"fields":{"slug":"/01-course-information/01-communication-strategy","title":"Communication Strategy"}}},{"node":{"fields":{"slug":"/01-course-information/02-course-Literature","title":"Course literature"}}},{"node":{"fields":{"slug":"/01-course-information/02-course-goals-assignments","title":"Assignments and grading"}}},{"node":{"fields":{"slug":"/01-course-information/03-expections","title":"What we expect from you"}}},{"node":{"fields":{"slug":"/01-course-information/04-gitlab-promptlab","title":"Gitlab resources"}}},{"node":{"fields":{"slug":"/02-course-content/01-course-intro-summary","title":"Week 1 (46) Course introduction Summary"}}},{"node":{"fields":{"slug":"/02-course-content/02-week-02","title":"Week 2 (47)"}}},{"node":{"fields":{"slug":"/02-course-content/01-week-01","title":"Week 1 (46)"}}},{"node":{"fields":{"slug":"/02-course-content/03-week-03","title":"Week 3 (48)"}}},{"node":{"fields":{"slug":"/02-course-content/04-week-04","title":"Week 4 (49)"}}},{"node":{"fields":{"slug":"/02-course-content/05-old-lectures","title":"Previous years lectures"}}},{"node":{"fields":{"slug":"/02-course-content/05-week-05","title":"Week 5 (50)"}}},{"node":{"fields":{"slug":"/02-course-content/06-week-06","title":"Week 6 (51)"}}},{"node":{"fields":{"slug":"/02-course-content/07-week-07","title":"Week 7 (52)"}}},{"node":{"fields":{"slug":"/02-course-content/01-basics-summary","title":"Week 1 (46) Basics of Testing Summary"}}},{"node":{"fields":{"slug":"/02-course-content/08-week-08","title":"Week 8 (53)"}}},{"node":{"fields":{"slug":"/02-course-content/09-week-09","title":"Week 9 (1)"}}},{"node":{"fields":{"slug":"/03-examinations/01-assignment-1-part-1","title":"A1.a1 - Alternative 1"}}},{"node":{"fields":{"slug":"/02-course-content/10-week-10","title":"Week 10 (2)"}}},{"node":{"fields":{"slug":"/03-examinations/02-assignment-1-part-1-alternative","title":"A1.a2 - Alternative 2"}}},{"node":{"fields":{"slug":"/03-examinations/03-assignment-1-part-2","title":"A1 Part 2 - Agentic Testing"}}},{"node":{"fields":{"slug":"/03-examinations/04-assignment-2","title":"Assignment 2 - System testing"}}},{"node":{"fields":{"slug":"/03-examinations/05-assignment-3","title":"Assignment 3 - the article"}}},{"node":{"fields":{"slug":"/03-examinations/06-final-exam","title":"Final Exam"}}}]}},"pageContext":{"id":"f1965254-82c5-51ff-b295-fbee4d03fb29"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}