{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/03-examinations/02-assignment-1-part-1-alternative",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv"}},"mdx":{"fields":{"id":"f29777c7-a93a-5d76-8cf0-3d522e8e06f4","title":"A1.a2 - Alternative 2","slug":"/03-examinations/02-assignment-1-part-1-alternative"},"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\": \"A1.a2 - Alternative 2\",\n  \"metaTitle\": \"A1.a2 - Alternative 2\",\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(\"h1\", null, \"Single or Pair-wise student Assignment\"), mdx(\"p\", null, \"This assignment contains elements that can either be done by a single student or a group of maximum 2 students.\"), mdx(\"p\", null, \"Note that if you are working in a pair, the work should be a team effort. A recommended structure is pair programming where you take turns in implementing test cases and implementation methods. It is not important which student makes the commits to Github, but it is important that both students are equally active in the work.\"), mdx(\"p\", null, \"However, \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"examination of the assignment is done individually\"), \". The grade is also set individually, this means the pair may be given different grades.\"), mdx(\"p\", null, \"This is an \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"optional\"), \" assignment for higher grades \", \"[F-A]\", \".\"), mdx(\"p\", null, \"First choose either \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/kurser/mjukvarutestning/03-examinations/01-assignment-1-part-1\"\n  }, \"A1.a1 (alternative 1)\"), \" or A1.a2 (alternative 2). Pass your chosen alternative during lab time, then continue with \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/kurser/mjukvarutestning/03-examinations/03-assignment-1-part-2\"\n  }, \"A1 Part 2: Agentic Testing\"), \", the PromptLab lab and assessed seminar. You must pass both stages before an A1 grade can be awarded.\"), mdx(\"h1\", null, \"Description\"), mdx(\"p\", null, \"In A1.a2 you study unit-testing frameworks, mocking frameworks, code coverage tools and Test Driven Development in more depth. During this exercise, you will learn automated unit testing using Test Driven Development.\"), mdx(\"p\", null, \"The assignment allows for much freedom in choosing how and what you would like to do, as long as you learn something along the way.\"), mdx(\"p\", null, \"For example, you are to decide the following:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Language of implementation (For example Java)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Framework for unit-testing (For example JUnit 4)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Framework for Mocking (For example Mockito)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Code coverage tool (For example Code Cover)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What sort of project you are going to code (For example a dice game)\")), mdx(\"h2\", null, \"Minimum requirements\"), mdx(\"p\", null, \"There are however some minimum requirements that we want you to achieve. You should see these as guidelines to conduct a project of the right size and type.\\nIn order to get a higher grade you need to show that you have:\"), mdx(\"h3\", null, \"Git-commit-history\"), mdx(\"p\", null, \"Made commits to a git-repository using a specific pattern that shows that you have worked using TDD, (at least 20 commits.)\\nMake sure you are working in \\u201CTest Driven Development\\u201D manner. Make a git-commit and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"PUSH\"), \" after each step:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Red: Write a test that fails. Make a commit with the word \\u201CRED\\u201D in commit message.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Green: Change the implementation so that the test-suite succeeds. Make a commit with the word \\u201CGREEN\\u201D.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Refactor: Rewrite the code. Make a commit with the word \\u201CREFACTOR\\u201D.\")), mdx(\"p\", null, \"At some point do a coverage measurement. If you make a code-coverage measurement do a commit separately for that named \\u201CCOVERAGE\\u201D, make sure you save the measurement as a file in your GitHub repository. Could be a text file or a screenshot-image.\"), mdx(\"p\", null, \"Note that its quite common to have around 30-90 cycles (200 commits).\"), mdx(\"h3\", null, \"Size and Complexity\"), mdx(\"p\", null, \"Show a project of proper size and complexity that illustrates your proficiency in the techniques. The important part here is not that you choose some impressive implementation with loads of features, but rather that you understand and use TDD properly. And remember: don\\u2019t go into this assignment thinking that you are going to finish the implementation. If you follow TDD properly, you won\\u2019t.\"), mdx(\"p\", null, \"Our minimum requirments are:\"), mdx(\"p\", null, \"In the final project show at least 4 SUT-classes with dependencies. The more classes the better\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In the final project show at least 4 SUT-classes with dependencies. The more classes the better\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You have used dependency injection\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You needed to mock or isolate dependencies so that only bugs in the class under test trigger a failing test and not a bug in other classes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Dynamic object creation (new SomeClassOrOther()) in several (2+) parts of the application (not only as initial setup). Remember to test those too!\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The project has a UI (Console, GUI, or web)\")), mdx(\"h3\", null, \"Understand TDD, unit-testing, mocking and coverage\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Show expertise in the use of the XUnit framework, Mocking framework, coverage tool\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test behaviour using mocks\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Show the use of different types of mocking\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use a Code coverage tool\")), mdx(\"h1\", null, \"Task : Write a small project using TDD\"), mdx(\"p\", null, \"Write a small project and make sure you practice writing the test first!\\nAlso, make sure you use mocking and calculate coverage!\"), mdx(\"p\", null, \"In order to do this you need to understand TDD first. Most failures on this assignment come from assuming TDD is something it is not.\"), mdx(\"h1\", null, \"During the examination\"), mdx(\"h2\", null, \"Artifacts that we want to see during examination\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Show a programming environment with a project that compiles with almost 100% unit test-coverage (note that 100% is the goal but sometimes impossible)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"git-commit history that shows that you have worked following TDD principles (red, green, refactor).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In that project show examples of how mocking is used to test behaviour and to isolate testing of dependent units\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Show that you can find code not covered by any test by code-coverage\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Show source-code for classes and test-classes in GIT\")), mdx(\"h2\", null, \"Study Questions that we can ask you during the examination\"), mdx(\"p\", null, \"The questions are examples of what can be asked during the individual examination.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What is a unit?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How does TDD differ from standard types of testing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What is an Oracle?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How does an oracle know what is right?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What might you need to change in the SUT in order to make good use of unit testing?, compared to when not doing unit testing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Do all tests need to use asserts?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What makes black box testing different from white box testing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Why might we want to use black box testing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What is the purpose of unit-testing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What are equivalence partitioning and boundary value analysis?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Why do we use TDD? What is its purpose?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If multiple tests are broken, which tests are most important to priorities fixing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can we always have 100% code-coverage?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What are the different types of coverage criteria?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Why do we use mock objects?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What is the difference between a mock, a stub, and a spy?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Does 100% coverage mean we are bug-free?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Does 100% MCDC coverage mean we are bug-free?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can we prove that we\\u2019re 100% bug-free?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In TDD, Why do we go for RED first?\")), mdx(\"h2\", null, \"Examination procedure\"), mdx(\"p\", null, \"Work on A1.a2 during the lab sessions assigned to your group. Teaching staff examine you while observing you working on the project tasks during these sessions. Showing a finished project or submitting a repository link alone is not sufficient. Even if you worked in pairs, the examination is individual.\"), mdx(\"p\", null, \"Kalmar and V\\xE4xj\\xF6 campus students attend in person. Only WP distance students participate online, using the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://lnu-se.zoom.us/j/65973679221\"\n  }, \"course Zoom room\"), \".\"), mdx(\"p\", null, \"NEW: POST your git link here: \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://forms.gle/1y4C2fwCZzUyA5Ce6\"\n  }, \"Git submission form\")), mdx(\"p\", null, \"Follow the lab assessment arrangements explained at the course introduction and posted in your group's Zulip channel.\"), mdx(\"p\", null, \"During the lab assessment, you will show your code and demonstrate proficiency in coding while working on the project tasks.\"), mdx(\"p\", null, \"During the examination you will get a 0-4 value in the following:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"TDD usage, 0-4\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"X-Unit usage, 0-4\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Complexity of the project, 0-4\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Code-Coverage, 0-4\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Mocking usage, 0-4\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Study Questions, 0-4\")), mdx(\"p\", null, \"These values are then weighted into the final grade E-A\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All 4s grade A\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Some 3s and Some 4s grade B\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All 3s grade C\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Some 2s and Some 3+s grade D\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All 2s grade E\")));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#single-or-pair-wise-student-assignment","title":"Single or Pair-wise student Assignment"},{"url":"#description","title":"Description","items":[{"url":"#minimum-requirements","title":"Minimum requirements","items":[{"url":"#git-commit-history","title":"Git-commit-history"},{"url":"#size-and-complexity","title":"Size and Complexity"},{"url":"#understand-tdd-unit-testing-mocking-and-coverage","title":"Understand TDD, unit-testing, mocking and coverage"}]}]},{"url":"#task--write-a-small-project-using-tdd","title":"Task : Write a small project using TDD"},{"url":"#during-the-examination","title":"During the examination","items":[{"url":"#artifacts-that-we-want-to-see-during-examination","title":"Artifacts that we want to see during examination"},{"url":"#study-questions-that-we-can-ask-you-during-the-examination","title":"Study Questions that we can ask you during the examination"},{"url":"#examination-procedure","title":"Examination procedure"}]}]},"parent":{"relativePath":"03-examinations/02-assignment-1-part-1-alternative.md"},"frontmatter":{"metaTitle":"A1.a2 - Alternative 2","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":"f29777c7-a93a-5d76-8cf0-3d522e8e06f4"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}