{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/vecka3-krav-test/testning",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv","courseCode":"1DV613"}},"mdx":{"fields":{"id":"c15451d8-4f1c-5716-a873-905fcd8f216d","title":"Testning","slug":"/vecka3-krav-test/testning"},"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\": \"Testning\",\n  \"metaTitle\": \"1DV613 | Testning\",\n  \"metaDescription\": \"metaDescription\",\n  \"order\": 5\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Youtube = makeShortcode(\"Youtube\");\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(\"h2\", null, \"Viktigt att p\\xE5b\\xF6rja tidigt i kursen\"), mdx(\"h4\", null, \"Testa tidigt och skapa manuella testfall utifr\\xE5n krav\"), mdx(Youtube, {\n    link: \"https://www.youtube.com/embed/Jll5u9LVoh8\",\n    mdxType: \"Youtube\"\n  }), mdx(\"p\", null, \"Exempel inloggning \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/dntoll/1dv610/blob/master/assignments/A2_resources/UseCases.md\"\n  }, \"Krav\"), \" - \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/dntoll/1dv610/blob/master/assignments/A2_resources/TestCases.md\"\n  }, \"Manuella tester\"), \" - \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://csquiz.lnu.se:25081/index.php\"\n  }, \"Exempelapplikation\")), mdx(\"h3\", null, \"F\\xF6rv\\xE4ntad aktivitet\"), mdx(\"p\", null, \"Till varje krav knyt minst ett test. Beskriv kortfattat hur testningen av kravet g\\xE5tt till och vilket resultat det fick.\\nStora och mer komplicerade krav kan kr\\xE4va flera tester. Om du skapar anv\\xE4ndningsfall, l\\xE5t d\\xE5 olika scenarion f\\xE5 var sitt manuellt testfall. L\\xE5t testfallen ha en best\\xE4md indata (Ex. \", \"[Mata in \\\"Kalle\\\"]\", \" ist\\xE4llet f\\xF6r \", \"[Mata in ett namn]\", \").\\nOm m\\xF6jligt skriv testfallet innan koden som implementerar kravet.\"), mdx(\"p\", null, \"Rapportera testningens utfall n\\xE4r du beskriver vilka krav som implementerats.\"), mdx(\"h2\", null, \"Testningsmetoder\"), mdx(\"p\", null, \"Det finns flera s\\xE4tt att testa ett system \\u2014 v\\xE4lj det som passar ditt projekt:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Testfall fr\\xE5n krav\"), \" \\u2014 skriv testfall direkt fr\\xE5n dina krav/issues. Avsl\\xF6jar ofta svagheter i kraven.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Negativ testning\"), \" \\u2014 testa med ogiltig indata och verifiera att systemet hanterar det korrekt.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Automatiserad testning\"), \" \\u2014 kod som testar kod. Se \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/kurser/mjukvaruutvecklingsprojekt/vecka8-automatiska-test\"\n  }, \"Vecka 8 - Automatiserad testning\"), \" f\\xF6r mer info.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Explorativ testning\"), \" \\u2014 anv\\xE4nd systemet fritt och logga vad du g\\xF6r. Skapa testfall av det som g\\xE5r fel.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Anv\\xE4ndartester\"), \" \\u2014 l\\xE5t en annan student anv\\xE4nda systemet och observera. Enkelt och effektivt.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Stresstestning\"), \" \\u2014 testa med extrem indata, m\\xE5nga anv\\xE4ndare eller lite minne. Frivilligt i detta projekt.\")), mdx(\"h2\", null, \"Testspecifikation\"), mdx(\"p\", null, \"Testspecifikationen beskriver \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"hur\"), \" din applikation testas \\u2014 en oberoende testare ska kunna f\\xF6lja den och avg\\xF6ra om testerna lyckas eller misslyckas.\"), mdx(\"p\", null, \"Den ska inneh\\xE5lla:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Testplan\"), \" \\u2014 strategi, verktyg, vad som t\\xE4cks och vad som inte t\\xE4cks\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Testsviter\"), \" \\u2014 grupper av testfall kopplade till krav, t.ex. \\\"Inloggning\\\", \\\"Profil\\\"\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Testfall\"), \" \\u2014 steg-f\\xF6r-steg beskrivning av varje test (se format nedan)\")), mdx(\"h3\", null, \"Format f\\xF6r manuella testfall\"), mdx(\"p\", null, \"Namnge testfall med \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"TC[svit].[nr]\"), \", t.ex. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"TC1.1\"), \". Det skapar sp\\xE5rbarhet mot krav och g\\xF6r det enkelt att referera i testrapporten.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"TC1.1 Store name successful\\n\\nUse case: UC1 Store a Name\\nPrecondition: name.txt must NOT exist in ./data\\n\\nSteps:\\n1. Start the app\\n2. System shows \\\"Fill in a username:\\\"\\n3. Enter \\\"Johnny\\\" and press enter\\n\\nExpected:\\n- System shows \\\"Name Johnny Stored\\\"\\n\")), mdx(\"p\", null, \"Var specifik med indata (\\\"Johnny\\\", inte \\\"ett namn\\\") \\u2014 det g\\xF6r testfallet repeterbart och l\\xE4ttare att automatisera senare.\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/dntoll/1dv600/tree/master/Greeter\"\n  }, \"Fullst\\xE4ndigt exempel (Greeter)\")), mdx(\"h2\", null, \"Testrapport\"), mdx(\"p\", null, \"Testrapporten dokumenterar \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"resultatet\"), \" av ett test och anv\\xE4nds som input till n\\xE4sta iterations planering.\"), mdx(\"p\", null, \"Den ska inneh\\xE5lla:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Datum och version av systemet som testades (anv\\xE4nd \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git describe --tags --dirty\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Testmilj\\xF6 (OS, webbl\\xE4sare, enhet)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Resultat per testfall (pass/fail)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sp\\xE5rbarhetstabell \\u2014 vilka krav t\\xE4cks\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"F\\xF6rb\\xE4ttringspunkter och \\xF6vergripande analys\")), mdx(\"h2\", null, \"F\\xF6r att utveckla testningen i ditt projekt\"), mdx(\"h4\", null, \"Automatiska enhetstester\"), mdx(Youtube, {\n    link: \"https://www.youtube.com/embed/gxftZK3YoMA\",\n    mdxType: \"Youtube\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Enhetstester\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Greeter example, Java, junit \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/dntoll/1dv600/tree/master/Greeter\"\n  }, \"Exempel p\\xE5 testplan, manuella tester, \\xE4ven automatiska tester\"))), mdx(\"h2\", null, \"Instuderingsfr\\xE5gor f\\xF6r kapitel 8\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vilka tv\\xE5 huvudsyften har testning? (s227)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Varf\\xF6r kan inte testning hitta ALLA fel? (s227)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Beskriv med egna ord Validering och Verifiering (allts\\xE5 inte bara \\xF6vers\\xE4tt definitionen). (s228)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vad best\\xE4mmer hur mycket resurser vi kan l\\xE4gga p\\xE5 testning? (s228-229)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vad skiljer testning fr\\xE5n inspektioner? (s229-230)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vilka tekniker/utvecklingsmetoder kan anv\\xE4ndas i Development testing ? (s231-245)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Varf\\xF6r \\xE4r beroenden till exempelvis en databas d\\xE5ligt f\\xF6r automatiska enhetstester och hur kan vi l\\xF6sa det problemet? s234\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vilka ekvivalenta partioner (in och ut) kan du identifiera f\\xF6r en funktion som tar antal \\xE5r som indata och returnerar true om personen \\xE4r myndig?  (Tips: tre olika in och tre olika ut) (s234-237)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ge ett exempel p\\xE5 \\\"emergent behaviour\\\". (s240)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"F\\xF6rklara varf\\xF6r systemtestning ofta \\xE4r sv\\xE5rare att utf\\xF6ra \\xE4n enhetstestning. s240\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Utveckla en funktion som returnerar medianen fr\\xE5n en array med nummer utan inbyggd funktion f\\xF6r median ;) med hj\\xE4lp utav \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"TDD\"), \". Du kan skriva testerna som en serie if-satser om du inte har ett testramverk installerat. Anv\\xE4nd processen p\\xE5 s243.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vilka \\xE4r f\\xF6rdelarna med TDD?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Vad \\xE4r m\\xE5let med release-testing?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"G\\xE5 igenom dina krav och fundera kring Requirements-testing. (s245-246)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"G\\xF6r en plan f\\xF6r att l\\xE5ta en annan student acceptanstesta din applikation eller n\\xE5gon del av din applikation.  (s249-251)\")));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#viktigt-att-påbörja-tidigt-i-kursen","title":"Viktigt att påbörja tidigt i kursen","items":[{"items":[{"url":"#testa-tidigt-och-skapa-manuella-testfall-utifrån-krav","title":"Testa tidigt och skapa manuella testfall utifrån krav"}]},{"url":"#förväntad-aktivitet","title":"Förväntad aktivitet"}]},{"url":"#testningsmetoder","title":"Testningsmetoder"},{"url":"#testspecifikation","title":"Testspecifikation","items":[{"url":"#format-för-manuella-testfall","title":"Format för manuella testfall"}]},{"url":"#testrapport","title":"Testrapport"},{"url":"#för-att-utveckla-testningen-i-ditt-projekt","title":"För att utveckla testningen i ditt projekt","items":[{"items":[{"url":"#automatiska-enhetstester","title":"Automatiska enhetstester"}]}]},{"url":"#instuderingsfrågor-för-kapitel-8","title":"Instuderingsfrågor för kapitel 8"}]},"parent":{"relativePath":"vecka3-krav-test/testning.md"},"frontmatter":{"metaTitle":"1DV613 | Testning","metaDescription":"metaDescription","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/","title":"🎉 Välkommen till Mjukvaruutvecklingsprojekt (1DV613)"}}},{"node":{"fields":{"slug":"/video-loggar","title":"Videologgar"}}},{"node":{"fields":{"slug":"/studieguiden","title":"Studieguiden"}}},{"node":{"fields":{"slug":"/studieguiden/kommunikationsstrategi","title":"Kommunikationsstrategi"}}},{"node":{"fields":{"slug":"/studieguiden/kursledning","title":"Kursledning"}}},{"node":{"fields":{"slug":"/studieguiden/kursplan","title":"Kursplan och betyg"}}},{"node":{"fields":{"slug":"/studieguiden/litteratur","title":"Kurslitteratur"}}},{"node":{"fields":{"slug":"/studieguiden/schema","title":"Schema och deadlines"}}},{"node":{"fields":{"slug":"/studieguiden/studieanvisningar","title":"Studieanvisningar"}}},{"node":{"fields":{"slug":"/studieguiden/utvarderingar","title":"Kursvärderingar"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/dokumentation","title":"Dokumentation"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision","title":"Vecka 1/2 - Planering och vision"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/todo","title":"📅 Att göra-lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/vision","title":"Projektvision"}}},{"node":{"fields":{"slug":"/vecka10-etik","title":"Vecka 10 - Etik & överlämning"}}},{"node":{"fields":{"slug":"/vecka10-etik/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/arbeta-i-projekt","title":"Att arbeta i projekt"}}},{"node":{"fields":{"slug":"/vecka3-krav-test","title":"Vecka 3 - Krav och testning"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/testning","title":"Testning"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/vecka3-krav-test","title":"Kravhantering"}}},{"node":{"fields":{"slug":"/vecka4-implementation/arkitektur","title":"Introduktion till mjukvaruarkitektur"}}},{"node":{"fields":{"slug":"/vecka4-implementation/docker-teori","title":"Introduktion till containers"}}},{"node":{"fields":{"slug":"/vecka4-implementation","title":"Vecka 4 - Implementation"}}},{"node":{"fields":{"slug":"/vecka4-implementation/just-task-it-docker","title":"Introduktion till Docker"}}},{"node":{"fields":{"slug":"/vecka4-implementation/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering","title":"Vecka 5 - Versionshantering"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/jobba-med-git","title":"Jobba med Git"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/versionshantering","title":"Versionshantering"}}},{"node":{"fields":{"slug":"/vecka6-drift/docker-compose-teori","title":"Introduktion till Docker compose"}}},{"node":{"fields":{"slug":"/vecka6-drift","title":"Vecka 6 - Driftsättning"}}},{"node":{"fields":{"slug":"/vecka6-drift/just-task-it-docker-compose","title":"JTI - Docker Compose"}}},{"node":{"fields":{"slug":"/vecka6-drift/just-task-it-production","title":"JTI - Production"}}},{"node":{"fields":{"slug":"/vecka6-drift/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/ci-cd","title":"CI/CD"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd","title":"Vecka 7 - CI/CD"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/just-task-it-deploy-pipeline","title":"JTI - Deploy through a pipeline"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test/automatiska-tester","title":"Automatiserad testning"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test","title":"Vecka 8 - Automatiserad testning"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare","title":"Extern uppdragsgivare"}}},{"node":{"fields":{"slug":"/vecka9-leverans","title":"Vecka 9 - Slutleverans"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare/extern-uppdragsgivare-samverkan","title":"Samverkansinformation: studentprojekt med extern uppdragsgivare"}}},{"node":{"fields":{"slug":"/vecka9-leverans/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare/vagledning","title":"Vägledning för arbete med extern uppdragsgivare"}}}]}},"pageContext":{"id":"c15451d8-4f1c-5716-a873-905fcd8f216d"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}