{"id":264,"date":"2019-09-09T09:30:07","date_gmt":"2019-09-09T06:30:07","guid":{"rendered":"https:\/\/coursepages.uta.fi\/tiep1-1\/?page_id=264"},"modified":"2019-10-12T01:09:38","modified_gmt":"2019-10-11T22:09:38","slug":"automaattinen-tarkistus","status":"publish","type":"page","link":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/syksy-2019\/harjoitukset\/ratkaisujen-tarkistus\/automaattinen-tarkistus\/","title":{"rendered":"Automaattinen tarkistus"},"content":{"rendered":"<p>WETO tarkistaa palautuksia automaattisesti <a href=\"#tulosteet\">tulosteita vertailemalla<\/a> ja tutkimalla ohjelmien <a href=\"#rakenne\">rakennetta<\/a>. Tulosteiden vertailu on p\u00e4\u00e4asiallinen keino varmistaa, ett\u00e4 palautukset toimivat oikein. WETOn <a href=\"#esitarkistaja\">esitarkistaja<\/a> tutkii joitakin tyyliseikkoja ennen varsinaista tarkistusta.<\/p>\n<p>Ota yhteytt\u00e4 opettajaan, jos et keksi j\u00e4rjellisess\u00e4 ajassa miksi WETO hylk\u00e4\u00e4 ohjelmasi. Kerro suoraan vastuuopettajalle, jos kohtaat testauksessa teknisen ongelman.<\/p>\n<p>Huomaa, ett\u00e4 WETOn palautukselle antama ykk\u00f6nen merkitsee vain sit\u00e4, ett\u00e4 ohjelma on WETOn mielest\u00e4 kunnossa. Opettajat tarkistavat teht\u00e4vi\u00e4 ja ykk\u00f6nen voi muuttua voi muuttua nollaksi, jos ohjelma sis\u00e4lt\u00f6 ei ole teht\u00e4v\u00e4nannon mukainen.<\/p>\n<p><a name=\"esitarkistaja\"><\/a><\/p>\n<h3>Esitarkistaja<\/h3>\n<p>WETOn esitarkistaja on alkeellinen; se tutkii l\u00e4hdekoodia vain alla annetuin osin ennen koodin k\u00e4\u00e4nt\u00e4mist\u00e4. Ohjelma voi olla pitk\u00e4lti hyv\u00e4n ohjelmointitavan vastainen, vaikka WETO ottaa ohjelman vastaan. Vastuu hyvien tapojen noudattamisesta on siten t\u00e4ll\u00e4 kurssilla \u2013 niin kuin ohjelmoinnissa ja el\u00e4m\u00e4ss\u00e4 yleens\u00e4 \u2013 kirjoittajalla itsell\u00e4\u00e4n.<\/p>\n<p>Esitarkistaja tarkastelee seuraavia tyyliseikkoja:<\/p>\n<ul>\n<li><strong>Nime\u00e4minen<\/strong>. Ohjelman nimen tulee Python-tyyylisesti pienin kirjaimin kirjoitettu.<\/li>\n<li><strong>Kommentointi<\/strong>. Ohjelmassa tulee olla v\u00e4hint\u00e4\u00e4n yksi kommentti.<\/li>\n<li><strong>Sisennys<\/strong>. WETO ei ota vastaan ohjelmia, joissa on k\u00e4ytetty tabulaattoreita, koska Python-ohjelmien sisennykseen suositellaan k\u00e4ytett\u00e4v\u00e4ksi v\u00e4lily\u00f6ntej\u00e4.<\/li>\n<li><strong>Rivitys<\/strong>. Yli 100 merkin mittaiset rivit katsotaan liian pitkiksi.<\/li>\n<\/ul>\n<p>WETO tarkistaa tyylin lis\u00e4ksi ettei tarkistettavan ohjelman nimess\u00e4 ole skandinaavisia merkkej\u00e4 (\u00e5-, \u00e4- tai \u00f6-kirjaimia), jotta eri k\u00e4ytt\u00f6j\u00e4rjestelmiss\u00e4 kirjoitettujen ohjelmien testaaminen olisi juohevampaa. Huomaa, ett\u00e4 muuttujien nimiss\u00e4 ja erityisesti kommenteissa on t\u00e4ysin sallittua k\u00e4ytt\u00e4\u00e4 skandinaavisia merkkej\u00e4.<\/p>\n<p>WETO tulkitsee koodin, jos esitarkistaja kelpuuttaa sen. L\u00e4hdekoodin on syyt\u00e4 tulkita tavalliseen tapaan omalla koneella ennen palautusta. Omalla tulkitseminen k\u00e4\u00e4nt\u00e4minen on sujuvampaa, koska tiedostoa ei tarvitse ladata erikseen ja kaikki virheilmoitukset ovat n\u00e4kyviss\u00e4 toisin kuin WETOssa, jossa s\u00e4\u00e4stet\u00e4\u00e4n levymuistia katkaisemalla pitk\u00e4t ilmoitukset.<\/p>\n<p><a name=\"tulosteet\"><\/a><\/p>\n<h3>Tulosteiden vertailu<\/h3>\n<p>Toiminnallisuuden automaattinen tarkistus tapahtuu p\u00e4\u00e4osin vertailemalla malliohjelman ja opiskelijan ohjelman tulosteita, kun molemmille ohjelmille on annettu t\u00e4sm\u00e4lleen samat sy\u00f6tteet. Ohjelman suoritus tietyill\u00e4 sy\u00f6tteill\u00e4 on <strong>testi<\/strong>. Opiskelijan ohjelman tulee toimia kaikissa testeiss\u00e4 t\u00e4sm\u00e4lleen samoin kuin malliohjelman, jotta toiminnan tarkistus testeill\u00e4 eli <strong>testaus<\/strong> katsotaan kokonaisuudessaan onnistuneeksi. Kunkin teht\u00e4v\u00e4n testit kuvaillaan tarkemmin palautuskohdan <em>Main<\/em>-v\u00e4lilehdell\u00e4 WETOssa.<\/p>\n<p>Automaattisesti testattavan teht\u00e4v\u00e4n teht\u00e4v\u00e4nannossa annetaan ohjelman toiminnan kuvauksen lis\u00e4ksi ohjelman nimi ja v\u00e4hint\u00e4\u00e4n yksi esimerkkiajo. Esimerkkiajoissa n\u00e4ytet\u00e4\u00e4n sek\u00e4 ohjelman tulosteet ett\u00e4 sen saamat sy\u00f6tteet aivan kuin ohjelmaa k\u00e4ytet\u00e4\u00e4n komentoikkunassa. Esimerkkiajo voisi olla t\u00e4m\u00e4n tapainen:<\/p>\n<pre>Hello! I read and pretty print your thoughts.\r\nPlease, say something:\r\nAnything that can go wrong will go wrong.\r\n&lt;&lt; Anything that can go wrong will go wrong. &gt;&gt;<\/pre>\n<p>jos testattavana on k\u00e4ytt\u00e4j\u00e4lt\u00e4 luetun ajatelman kulmasulkeiden v\u00e4liin tulostava ohjelma.<\/p>\n<p>Huomaa, ett\u00e4 ohjelmasi ei tule toistaa sy\u00f6tteit\u00e4 niit\u00e4 n\u00e4yt\u00f6lle tulostamalla. Yll\u00e4 luku merkkijono &#8221;Anything that can go wrong will go wrong.&#8221; on k\u00e4ytt\u00e4j\u00e4n antama sy\u00f6te eik\u00e4 ohjelman tuloste.<\/p>\n<p>Automaattisesti testattavat ohjelmat kommunikoivat englanniksi, jotta teht\u00e4vien k\u00e4\u00e4nt\u00e4minen olisi helpompaa.<\/p>\n<p>Opiskelijan ohjelman tulee toimia ja tulostaa t\u00e4sm\u00e4lleen samalla tavalla kuin teht\u00e4v\u00e4nannossa on m\u00e4\u00e4ritelty, koska jo yhden merkin ero malliohjelman ja opiskelijan ratkaisun tulosteissa johtaa ohjelman hylk\u00e4ykseen. Malliohjelmat p\u00e4\u00e4tt\u00e4v\u00e4t jokaisen rivin &#8221;n\u00e4kyv\u00e4\u00e4n&#8221; merkkiin ja rivinvaihtoon. Ole erityisen tarkkana ettet tulosta rivien alkuun tai loppuun v\u00e4lily\u00f6ntien tapaisia &#8221;n\u00e4kym\u00e4tt\u00f6mi\u00e4&#8221; tyhjemerkkej\u00e4. Testi hyl\u00e4t\u00e4\u00e4n my\u00f6s, kun ohjelma kaatuu tai joutuu ikuiseen silmukkaan.<\/p>\n<p>WETO n\u00e4ytt\u00e4\u00e4 tulosteiden ensimm\u00e4iset toisistaan eroavat rivit ja rivien numeron <em>Test scores<\/em> -taulukon <em>Feedback<\/em>-sarakkeessa. Ylempi rivi on WETOn odottama tuloste ja alempi testattavan ohjelman tuloste. WETO voi esimerkiksi havaita, ett\u00e4 tulosteet eroavat toisistaan jo ensimm\u00e4isell\u00e4 rivill\u00e4 ylim\u00e4\u00e4r\u00e4isen v\u00e4lily\u00f6nnin vuoksi:<\/p>\n<pre class=\"diffCell\">Expected #1: \"Hello! I read and pretty print your thoughts.\"\r\nObserved #1: \"Hello! I read and pretty print your thoughts. \"<\/pre>\n<p>Alempi rivi saattaa katketa kesken, koska WETOn tulosteissa on aina korkeintaan tietty m\u00e4\u00e4r\u00e4n merkkej\u00e4.<\/p>\n<p class=\"diffCell\">WETO tulostaa joko ylemm\u00e4lle tai alemmalle riville &#8221;END OF FILE&#8221;, jos tulosteet ovat eri mittaiset, mutta muuten samat. Alla on annettu esimerkki tilanteesta, jossa opiskelijan ohjelma tulostaa kaiken oikein lukuun ottamatta viimeist\u00e4 rivi\u00e4, jonka tulostus on unohtunut.<\/p>\n<pre class=\"diffCell\">Expected #3: \"&lt;&lt; Anything that can go wrong will go wrong. &gt;&gt;\"\r\nObserved: END OF FILE.\r\n<\/pre>\n<p>Hankalammin l\u00f6ydett\u00e4vi\u00e4 ongelmia ovat puuttuvat rivinvaihdot. Malliohjelma p\u00e4\u00e4tt\u00e4\u00e4 aina jokaisen rivin rivinvaihtoon. On huomattava erityisesti, ett\u00e4 <strong>malliohjelma tulostaa rivinvaihdon my\u00f6s viimeisen rivin loppuun<\/strong>. Rivinvaihto j\u00e4\u00e4 puuttumaan, jos ohjelmasi tulostaa viimeisen rivin <em>print<\/em>-funktiolla k\u00e4ytt\u00e4en avainsanaparametria <em>end<\/em>. Ongelma korjautuu kutsumalla <em>print<\/em>-funktiota ilman t\u00e4t\u00e4 parametria. Pelk\u00e4n rivinvaihdon voi tulostaa n\u00e4in:<\/p>\n<pre>print()<\/pre>\n<p>WETO tulostaa &#8221;MISSING NEWLINE&#8221;, kun ratkaisu hyl\u00e4t\u00e4\u00e4n nimenomaan viimeiselt\u00e4 tulostetulta rivilt\u00e4 puuttuvan rivinvaihdon vuoksi. WETO sanoo t\u00e4ll\u00f6in esimerkiksi n\u00e4in:<\/p>\n<pre class=\"diffCell\">Expected #3: \"&lt;&lt; Anything that can go wrong will go wrong. &gt;&gt;\"\r\nObserved: MISSING NEWLINE.<\/pre>\n<p>WETO kertoo tyhj\u00e4ll\u00e4 merkkijonolla &#8221;&#8221;, jos ohjelmasi tulostaa v\u00e4\u00e4r\u00e4ss\u00e4 paikassa pelk\u00e4n rivinvaihdon <em>print()<\/em>-lauseella. Jos edellisess\u00e4 esimerkiss\u00e4 ohjelma tulostaa pelk\u00e4st\u00e4 rivinvaihdosta koostuvan rivin aivan lopuksi, on WETO-tuloste:<\/p>\n<pre class=\"diffCell\">Expected: END OF FILE.\r\nObserved #4: \"\"<\/pre>\n<p>WETO tulostaa virheilmoituksen &#8221;ERROR (program exited with code 1)&#8221;, kun ohjelma pys\u00e4htyy ajonaikaiseen virheeseen eli kaatuu.<\/p>\n<p><strong>Automaattisen tarkistajan huijaaminen <\/strong>testisy\u00f6tteet tunnistamalla ja tulostamalla oikeat vastaukset <strong>on kielletty\u00e4<\/strong>. Ohjelman tulee toimia oikein yleisell\u00e4 tasolla eli mill\u00e4 tahansa mahdollisella sy\u00f6tteell\u00e4. Huijaamisesta seuraa plagiointia vastaava sanktio.<br \/>\n<a name=\"rakenne\"><\/a><\/p>\n<h3>Rakenteen tarkistus<\/h3>\n<p>Omia funktioita sis\u00e4lt\u00e4vien palautusten testauksessa tutkitaan automaattisesti my\u00f6s ohjelman rakennetta. WETO saattaa hakea ohjelmastasi teht\u00e4v\u00e4nannossa m\u00e4\u00e4ritelty\u00e4 funktiota. L\u00f6ydetyn funktion automaattinen kutsuminen on mahdollista. Ole tarkkana erityisesti funktioiden otsikoiden kanssa: m\u00e4\u00e4rittele parametrit t\u00e4sm\u00e4lleen teht\u00e4v\u00e4ss\u00e4 pyydetyll\u00e4 tavalla ja palauta vain teht\u00e4ss\u00e4 m\u00e4\u00e4riteltyj\u00e4 arvoja. \u00c4l\u00e4 esimerkiksi tee funktiolle muita kuin teht\u00e4v\u00e4ss\u00e4 annettuja parametreja ja varmista, ett\u00e4 funktiosi hyv\u00e4ksyy parametrien arvoiksi tietoja, joiden tyyyppi on teht\u00e4v\u00e4n mukainen. Funktion nimi on kiinnitetty.<\/p>\n<p>WETO tulostaa rakennetestin ep\u00e4onnistuessa lyhyen virheilmoituksen. WETO voisi tulostaa esimerkiksi<\/p>\n<pre class=\"diffCell\">ERROR: Function \"samat_etumerkit(int, int)\" missing!\r\n<\/pre>\n<p>jos ohjelmasta ei l\u00f6ydy <em>samat_etumerkit<\/em>-nimist\u00e4 funktiota, jolla on kaksi parametria. WETO ei voi tarkistaa parametrien tyyppej\u00e4, mutta vihjaa niist\u00e4 tulostamalla kunkin parametrin nimen paikalle teht\u00e4v\u00e4nannossa m\u00e4\u00e4ritellyn tyypin nimen.<\/p>\n<p>WETO arvioi automaattisen operaatiokutsun j\u00e4lkeen operaation mahdollisesti palauttaman arvon ja kertoo esimerkiksi n\u00e4in:<\/p>\n<pre class=\"diffCell\">ERROR: Invalid return value!\r\nExpected: True\r\nObserved: 10\r\n<\/pre>\n<p>jos paluuarvo on virheellinen. WETO toteaa yll\u00e4, ett\u00e4 se operaatio palautti totuusarvon True asemasta lukuarvon 10.<\/p>\n<p>WETO tunnistaa ja hylk\u00e4\u00e4 palautukset, joista puuttuu p\u00e4\u00e4ohjelmakutsun vartija:<\/p>\n<p><code># Kutsutaan p\u00e4\u00e4ohjelmaa, jos ohjelmaa ajetaan.<\/code><br \/>\n<code>if __name__ == \"__main__\":<\/code><br \/>\n<code>\u00a0\u00a0\u00a0 main()<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WETO tarkistaa palautuksia automaattisesti tulosteita vertailemalla ja tutkimalla ohjelmien rakennetta. Tulosteiden vertailu on p\u00e4\u00e4asiallinen keino varmistaa, ett\u00e4 palautukset toimivat oikein. WETOn esitarkistaja tutkii joitakin tyyliseikkoja ennen varsinaista tarkistusta. Ota yhteytt\u00e4 opettajaan, jos et keksi j\u00e4rjellisess\u00e4 ajassa miksi WETO hylk\u00e4\u00e4 ohjelmasi. Kerro suoraan vastuuopettajalle, jos kohtaat testauksessa teknisen ongelman. Huomaa, ett\u00e4 WETOn palautukselle antama ykk\u00f6nen merkitsee &hellip; <a href=\"https:\/\/coursepages2.tuni.fi\/tiep1-1\/syksy-2019\/harjoitukset\/ratkaisujen-tarkistus\/automaattinen-tarkistus\/\" class=\"more-link\">Jatka artikkeliin <span class=\"screen-reader-text\">Automaattinen tarkistus<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"parent":259,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-264","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/pages\/264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/comments?post=264"}],"version-history":[{"count":23,"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/pages\/264\/revisions"}],"predecessor-version":[{"id":430,"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/pages\/264\/revisions\/430"}],"up":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/pages\/259"}],"wp:attachment":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1-1\/wp-json\/wp\/v2\/media?parent=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}