{"id":993,"date":"2018-09-18T22:30:34","date_gmt":"2018-09-18T19:30:34","guid":{"rendered":"https:\/\/coursepages.uta.fi\/tiep1\/?page_id=993"},"modified":"2018-12-20T18:36:10","modified_gmt":"2018-12-20T16:36:10","slug":"automaattinen","status":"publish","type":"page","link":"https:\/\/coursepages2.tuni.fi\/tiep1\/syksy-2018\/harjoitukset\/ratkaisujen-tarkistus\/automaattinen\/","title":{"rendered":"Automaattinen tarkistus"},"content":{"rendered":"<p>WETO-j\u00e4rjestelm\u00e4 tarkistaa Java-ohjelmia p\u00e4\u00e4osin toiminnallisuuden osalta. 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>Tarkistettavan ohjelman nimess\u00e4 ei saa olla 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. WETO hylk\u00e4\u00e4 niin sanotulla <a href=\"https:\/\/en.wikipedia.org\/wiki\/Byte_order_mark\">BOM-merkill\u00e4<\/a> alkavat tiedostot Java-k\u00e4\u00e4nt\u00e4j\u00e4n puolesta, koska WETOssa BOM-merkist\u00e4 aiheutunut k\u00e4\u00e4nt\u00e4j\u00e4n virheilmoitus on hyvin vaikeasti tulkittava.<\/p>\n<p>WETOn tyylitarkistaja 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<ul>\n<li><strong>Nime\u00e4minen<\/strong>. Ohjelman nimen tulee alkaa Java-tyylisesti isolla kirjaimella.<\/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 sisennykseen sek\u00e4 v\u00e4lily\u00f6ntej\u00e4 ett\u00e4 tabulaattoreita, jotta sisennys n\u00e4kyisi varmemmin opettajan koneella opiskelijan ajattelemalla tavalla.<\/li>\n<li><strong>Rivitys<\/strong>. Yli 120 merkin mittaiset rivit katsotaan liian pitkiksi.<\/li>\n<\/ul>\n<p>WETO tarkistaa tyylin lis\u00e4ksi ettei palautettavassa ohjelmassa ole k\u00e4ytetty <strong>package<\/strong>-m\u00e4\u00e4rett\u00e4, koska WETOn automaattitarkistaja ei toistaiseksi ymm\u00e4rr\u00e4 pakkaukseen liitettyj\u00e4 tiedostoja.<\/p>\n<p>WETO hylk\u00e4\u00e4 my\u00f6s ohjelmat, joissa rivinvaihtoon k\u00e4ytet\u00e4\u00e4n <em>System.out.print<\/em>-metodia ja &#8217;\\r&#8217;-merkki\u00e4 (Carriage Return, CR) esimerkiksi n\u00e4in:<\/p>\n<pre>   System.out.print(\"\\r\\n\");<\/pre>\n<p>koska WETO toimii k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4ss\u00e4, jossa rivit vaihdetaan pelk\u00e4ll\u00e4 &#8217;\\n&#8217;-merkill\u00e4 (Line Feed, LF). Poista tarvittaessa &#8221;kovakoodatut&#8221; CR-merkit ja k\u00e4yt\u00e4 <em>System.out.println-<\/em>operaatiota, joka osaa tulostaa rivinvaihdot k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4lle ominaisella tavalla.<\/p>\n<p>WETO k\u00e4\u00e4nt\u00e4\u00e4 koodin, jos tyylitarkistaja kelpuuttaa sen. L\u00e4hdekoodin k\u00e4\u00e4nt\u00e4minen on syyt\u00e4 tehd\u00e4 tavalliseen tapaan omalla koneella ennen palautusta. Omalla koneella 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>Toiminnallisuuden automaattinen tarkistus tapahtuu 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. Testeiss\u00e4 k\u00e4ytetyt sy\u00f6tteet on lueteltu teht\u00e4v\u00e4n WETO-sivulla.<\/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<span style=\"font-family: courier new,courier\">&lt;&lt; Anything that can go wrong will go wrong. &gt;&gt;<\/span><\/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 merkist\u00f6ongelmien v\u00e4ltt\u00e4miseksi.<\/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>System.out.print<\/em>-operaatiolla. Ongelma korjautuu tulostamalla rivinvaihto <em>System.out.println<\/em>-operaatiolla my\u00f6s viimeisen rivin loppuun. Pelk\u00e4n rivinvaihdon voi tulostaa n\u00e4in:<\/p>\n<pre>System.out.println();<\/pre>\n<p>WETO tulostaa &#8221;MISSING NEWLINE&#8221;, kun ratkaisu hyl\u00e4t\u00e4\u00e4n nimenomaan viimeiselt\u00e4 tulostetulta rivilt\u00e4 puuttuvan rivinvaihdon vuoksi. Jos esimerkkiohjelma tulostaa viimeisen rivin <em>System.out.print<\/em>-operaatiolla, WETO sanoo seuraavaa:<\/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>System.out.println();<\/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.<\/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","protected":false},"excerpt":{"rendered":"<p>WETO-j\u00e4rjestelm\u00e4 tarkistaa Java-ohjelmia p\u00e4\u00e4osin toiminnallisuuden osalta. 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. Tarkistettavan ohjelman nimess\u00e4 ei saa olla skandinaavisia merkkej\u00e4 (\u00e5-, \u00e4- tai \u00f6-kirjaimia), jotta eri k\u00e4ytt\u00f6j\u00e4rjestelmiss\u00e4 kirjoitettujen ohjelmien &hellip; <a href=\"https:\/\/coursepages2.tuni.fi\/tiep1\/syksy-2018\/harjoitukset\/ratkaisujen-tarkistus\/automaattinen\/\" class=\"more-link\">Jatka artikkeliin <span class=\"screen-reader-text\">Automaattinen tarkistus<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"parent":984,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-993","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/pages\/993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/comments?post=993"}],"version-history":[{"count":31,"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/pages\/993\/revisions"}],"predecessor-version":[{"id":1237,"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/pages\/993\/revisions\/1237"}],"up":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/pages\/984"}],"wp:attachment":[{"href":"https:\/\/coursepages2.tuni.fi\/tiep1\/wp-json\/wp\/v2\/media?parent=993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}