Ohjelmoinnin MOOC Moodlella?

Samankaltaiset tiedostot
Olio-ohjelmointi Javalla

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

4. Luokan testaus ja käyttö olion kautta 4.1

Mikä yhteyssuhde on?

Ohjelmoinnin jatkokurssi, kurssikoe

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Luokat ja oliot. Ville Sundberg

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet, syksy 2006

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Ohjelmointi 2 / 2010 Välikoe / 26.3

11. Javan valintarakenteet 11.1

9. Periytyminen Javassa 9.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Rajapinta (interface)

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Kääntäjän virheilmoituksia

Javan perusteita. Janne Käki

Ohjelmointi 2, välikoe

5. HelloWorld-ohjelma 5.1

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op)

11. Javan valintarakenteet 11.1

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Ohjelmoinnin perusteet Y Python

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Hakemistojen sisällöt säilötään linkitetyille listalle.

1 Tehtävän kuvaus ja analysointi

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Periytyminen (inheritance)

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

1. Olio-ohjelmointi 1.1

12. Näppäimistöltä lukeminen 12.1

public static void main (String [] args)

1. Mitä tehdään ensiksi?

Lista luokan sisällä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

P e d a c o d e ohjelmointikoulutus verkossa

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

15. Ohjelmoinnin tekniikkaa 15.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmoinnin perusteet, kurssikoe

Interaktiivinen tarinankerronta

Java-kielen perusteita

Test-Driven Development

9. Periytyminen Javassa 9.1

15. Ohjelmoinnin tekniikkaa 15.1

Java-kielen perusteet

5. HelloWorld-ohjelma 5.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

UML ja luokkien väliset suhteet

8. Näppäimistöltä lukeminen 8.1

11. Javan toistorakenteet 11.1

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

10 v. työkokemus teknologiaprojekteista, tiiminvedosta ja agile menetelmistä.

7. Näytölle tulostaminen 7.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

ITKP102 Ohjelmointi 1 (6 op)

58131 Tietorakenteet ja algoritmit (syksy 2015)

YHTEYSSUHDE (assosiation)

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

812336A C++ -kielen perusteet,

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

19. Olio-ohjelmointia Javalla 19.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Harjoitus 3 (viikko 39)

8. Näppäimistöltä lukeminen 8.1

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Luokan sisällä on lista

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

58160 Ohjelmoinnin harjoitustyö

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Test-Driven Development

4. Olio-ohjelmoinista lyhyesti 4.1

Transkriptio:

Ohjelmoinnin MOOC Moodlella? Kokemuksia Moodlen Virtual Programming Lab työympäristöstä ITK2016 Aulanko 14.4.2016 14:45-15:15, Esityssali 21 Antti Salopuro Lahden Ammattikorkeakoulu Liiketalous/Tietojenkäsittely

Äänessä ja kuvassa Antti Salopuro, MSc. (sovellettu matematiikka), Lehtori Lahden Ammattikorkeakoulu, Liiketalouden tietojenkäsittely 2008 - Opettajana useilla eri ohjelmoinnin kursseilla Aiemmin 10 v. työkokemus tuotekehitysinsinöörinä erityisalana ohjelmointi, mittaustekniikka ja tuotekehitysprojektit

Taustaa OHJELMOINTI OPETUS- JA OPISKELUAIHEENA

Ohjelmointi lajina Ohjelmointi on pitkälti taitolaji Opitaan vain itse tekemällä ja toistamalla harjoitteita PALJON Harvoilla on kyky oppia itsenäisesti ilman tukea Ongelman ratkaisua, rinnastuu matematiikkaan monessa mielessä Vaatii loogista ajattelukykyä ja luovuutta Voi käyttää vain eksakteja sääntöjä Ongelma voidaan silti ratkaista monella eri tavalla Kaikki tavat eivät yhtä tehokkaita tai yhtä hyviä

Opiskelija tarvitsee apua Suuret ryhmät opettajalla ei paljoa aikaa lähitunneilla Esimerkeistä malleja Parityöskentely auttaa, kaikilla ei tähän mahdollisuutta Opiskelija ei voi tietää onko ratkaisu oikein täytyy odottaa seuraavaan lähituntiin

Testauksesta apua opiskeluun? Ohjelmatestauksessa ohjelmaa kokeillaan tunnetuissa ja tarkkaan kontrolloiduissa olosuhteissa, jolloin ohjelman toiminta voidaan ennustaa Jos toiminta poikkeaa ennusteesta, ohjelma ei toimi oikein Jos opiskelija voi milloin tahansa ajaa testin omalle ratkaisulleen, hän voi saada välittömästi palautteen ratkaisun oikeellisuudesta Palautteessa voisi olla myös tietoa siitä, mikä ratkaisussa on väärin

Testauksesta apua opettamiseen? Arviointi ja osin myös ohjaus automatisoituu Opettajalle enemmän aikaa henkilökohtaiseen ohjaukseen Helpottaa opintojakson virtualisointia MOOC???

Virtualisointi vaatii paljon HY:n esimerkin mukainen MOOC vaatii paljon resursseja Perustaminen Työkalut Materiaalit Videoinnit Toteuttaminen Jakson ohjaus Arvioinnit

Valmiilla työkaluilla? Pienemmilläkin resursseilla virtualisoitua ohjelmoinin opetusta Alkupanostus huomattavasti pienempi Jos integroitavissa nykyiseen oppimisympäristöön, voidaan ottaa käyttöön pikkuhiljaa resurssien sallimassa vauhdissa

Moodle VPL TYÖKALUN OMINAISUUDET

Virtual Programming Lab Moodle työkalu konsolipohjaisten ohjelmointitehtävien hallinnointiin Julkaistu 2010 Uusin client versio 3.1.2 Uusin execution (jail) server 2.1.1 Vapaasti ladattavissa (GitHub) Vapaasti käytettävissä ( GNU/GPL License) September 11 22, 2016

VPL - Ominaisuuksia Tehtävänanto Palautukset sähköisesti Debuggaus virheen etsintä Automaattinen testaus Automaattinen/manuaalinen arviointi Paljon (27) tuettuja kieliä C/C++, C#, PHP, SQL, Python, HTML,

Lisää ominaisuuksia Opiskelijan ratkaisu kopioitavissa, ladattavissa sekä editoitavissa Ohjelma ajettavissa VPL:n komentoikkunassa selaimen kautta Opiskelija ja opettaja voi suorittaa ja testata Voidaan yhdistellä opettajan ja opiskelijan koodia

Tehtävälle määritetään Tehtävänanto Määräaika Ladattavien tiedostojen max lukumäärä Maksimipistemäärä Opiskelijalle sallitut toiminnot (run/debug/evaluate) Pakolliset tiedostot nimineen Opettajan koodi asetuksineen Testitapaukset Sallitut resurssit (muisti, suoritusaika)

Pakolliset tiedostot Opettaja esimerkiksi nimeää nimiavaruuden jotta opettajan testiohjelma löytää opiskelijan tekemät osat Tässä opettaja on määritellyt myös luokan nimen valmiiksi Opettaja rakentaa templaten, jossa määritellään ne pakolliset osat, jotka opiskelijan on toteutettava

Opettajan koodi: Execution files Opettajan testiohjelma voi kutsua opiskelijan tekemiä metodeja

Testitapaukset: vpl_evaluate.cases Yhteen ohjelmaan voi kohdistaa useita testejä. Testillä on aina nimi (Case), syöte (input) ja odotettu tuloste (output)

Testin syötetiedot Testikuvauksen input kentässä määritellään testattavalle ohjelmalle annettava ulkoinen syöte Ohjelmassa tämä on esimerkiksi käyttäjän näppäimistöltä antama komento Jos ohjelmassa annetaan useita peräkkäisiä syötteitä, nämä kaikki pitää huomioida myös testin määrittelyssä Syötteitä voi olla useita, tällöin ne jaetaan usealle riville

Esimerkkejä Case = test1 input = 23 Case = test2 input = Hello Case = test3 input = 23 3 Jussi Kaikki syötteet kuin näppäimistöltä annettuna eli string tyyppiä. Jos syöte jaettu usealle riville, niin syötteiden välissä tällöin rivinvaihtomerkki (Enter)

Testin odotettu tulos - output Output kentässä määritellään syötettä vastaava ohjelman tulostama arvo Voidaan käyttää regexp sääntöjä (http://www.regular-expressions.info/ ) Huomioitava, että opiskelijan ohjelma voi usein tulostaa ylimääräistä tai jossain eri muodossa kuin opettaja on määritellyt tällöin testi ei mene läpi, vaikka ohjelma muutoin olisikin oikein toteutettu

Esimerkkejä Ohjelman tulostus: match this 234 Testi Pass/Fail Selite match this 234 Pass tarkka kopio 234 Pass testaa vain numeron esiintymisen match this Fail tarkka kopio /this/ Pass teksti esiintyy tulostuksessa /[Mm]atch this 234/ Pass Match ja match, molemmat käy /ma..h/ Pass piste (. ) on mikä tahansa merkki /match Match MATCH/ Pass mikä tahansa sana esiintyy

Esimerkkitehtävä VPL KÄYTÄNNÖSSÄ

VPL palautuslinkkinä Yksinkertaisimmillaan VPL toimii tehtävien palautuslinkkinä Opettaja näkee palautuksen koodina Manuaalinen pisteytys Tarvittaessa voi myös ajaa ohjelman, jos se on ajettavissa Palaute mahdollinen, myös editointi

VPL automaattisella pisteytyksellä Opettaja kirjoittaa tarvittaessa opiskelijan koodia kutsuvat osat ja/tai opiskelijan koodin tarvitsemia osia Opettaja laatii testit Opiskelija palauttaa tehtävän ja ajaa testin, tarvittaessa korjaa automaattisen palautteen mukaan Opettaja vahvistaa pisteytyksen

Esimerkki automaattisesta testauksesta C#/oliot, testaus ilman unix skriptejä Luokan ja metodien testaus Opettaja tekee testiympäristöön pääohjelman, joka huolehtii testaamisesta Opiskelija palauttaa vain tekemänsä luokan Eri testeissä kutsutaan testiohjelmaa antaen testin järjestysnumero parametrina Testiohjelmassa eri testit eriytetty switch case rakenteella DEMO: opettaja: [username: teacher2, passwd: teacher] opiskelija: [username: student2, passwd: student] http://demovpl.dis.ulpgc.es/moodle/mod/vpl/view.php?id=330 September 25 22, 2016

Esimerkkitehtävä, tehtävänanto Suunnittele ja toteuta luokka Word, jolla on String tyyppinen attribuutti word. Luokalla on konstruktori, joka alustaa olion attribuutin word parametrina annettuun arvoon. Metodi Count laskee attribuutin word merkkien määrän. Luokassa on myös metodi SetWord, jolla voi vaihtaa attribuutin arvoa sekä metodi Replace, joka etsii attribuutin word arvosta parametrina annetun yksittäisen kirjainmerkin ensimmäisen ja viimeisen esiintymiskohdan ja korvaa näissä kohdissa merkit toisella merkillä, joka myös annetaan metodille parametrina.

Testattavia asioita Konstruktorin olemassaolo Metodien olemassaolo ja oikea allekirjoitus Metodin Count oikeellisuus Metodin Replace oikeellisuus Metodien SetWord ja ToString oikeellisuus private näkyvyyden attribuuttien olemassaoloa ei oikein voi testata tällä menetelmällä

Testiohjelman rakenne: switch - case using System; namespace Programs { class TestProg { static void Main(string[] args) { //luetaan testistä syöte (testin numero) int input = Convert.ToInt32(Console.ReadLine()); Word myw; //Console.WriteLine("Aloitetaan testit"); switch (input) { case 1://Constructor and ToString myw = new Word("Test string to start"); Console.WriteLine(myW); break; case 2://Count myw = new Word("Test string to start"); Switch-case rakenteella voidaan kukin testi ajaa samalla testiohjelmalla erikseen, testin input arvo luetaan testiohjelmassa ja suoritettava case lohko määräytyy sen mukaan

Case = test1 input = 1 output = // Testisarja: vpl_evaluate.cases Case = test2 input = 2 output = Pass Case = test3 input = 3 output= Pass grade reduction = 20% Case = test4 input = 4 output= Pass Neljä testiä, opettajan testiohjelma tulostaa tekstin Pass, jos testi on läpäisty. Jos tulostus on jotakin muuta, testi on hylätty. Kukin testi läpäistynä tuottaa 1/n maksimipisteistä eli tässä 25%. Grade reduction kuitenkin ylikirjoittaa tämän asetuksen

Testien suoritus 1: ei konstruktoria using System; namespace Programs Opiskelijan toteutus { public class Word { private string word; //Attributes private, methods public! //Methods to add: ToString (override) Count, SetWord, Replace } } Konstruktorin puuttuminen estää kääntämisen virheilmoitus

using System; Testien suoritus 2: konstruktori on namespace Programs { public class Word Opiskelijan toteutus { private string word; //Attributes private, methods public! //Methods to add: ToString (override) Count, SetWord, Replace public Word(string instr) { word = instr; } } } Kun konstruktori löytyi, myös kääntäminen onnistuu

Metodien testaus: testiohjelma case 2://Count myw = new Word("Test string to start"); if(myw.count() == 20) Console.WriteLine("Pass"); else Console.WriteLine("Method Count not correct"); break; case 3://Count myw = new Word("Test string"); if (myw.replace('s', 'k') == "Tekt ktring") Console.WriteLine("Pass"); else Console.WriteLine("Method Replace not correct"); break; Tämä toimintamalli kuitenkin vaatii, että testiohjelma kääntyy ja se tapahtuu vain, jos kaikki metodit on toteutettu vähintään tynkinä, toinen vaihtoehto on C#:n extension methods Testataan kutakin metodia vakiosyötteillä ja verrataan lopputulosta odotettuun Jos testi ei ole läpäisty, niin tulostetaan selväkielinen ilmoitus, joka näkyy opiskelijalle testituloksissa

Kokemuksia MITÄ JÄI KÄTEEN?

Opettajan näkökulma Opettajalle toteutus oli työläs, testien rakentaminen vei aikaa lähes 2x edelliseen vuoteen (160h vs. 90h.) Vaikka testejä yritti tehdä huolella, joskus niihin jäi virheitä ja opiskelijat eivät saaneet palautettua ratkaisujaan Testillä saa kiinni algoritmivirheet, mutta ei testaa koodin selkeyttä tai tyyliä Jää tällöin myös vähemmälle huomiolle

Opettajan näkökulma Toisaalta tehtävien tarkastaminen ja kommentointi sujui nyt nopeammin niiden opiskelijoiden osalta, jotka saivat tehtävät tehtyä oikein Lisäksi nyt testit on kertaalleen tehty ja seuraavan toteutuksen osalta työmäärä on toivottavasti paljon pienempi

Opiskelijoiden näkökulma Opiskelijat pitivät pääosin hyvänä Erityisesti tyytyväisiä oltiin siihen, että kotitehtävistä sai jonkun palautteen jo tehdessään Usein myös virheilmoituksilla oli ohjaava vaikutus ja opiskelija löysi virheensä helpommin Muutamat opettajan virheet testeissä harmittivat kovasti

Sopisiko MOOCin välineeksi? Ei pelkästään, mutta helpottaa kyllä asian kehittelyä Kytkemällä uusien aiheiden ja tehtävien saatavuus edellisen aiheen tehtäväpisteisiin ollaan jo aika pitkällä Testeistä pitäisi saada vielä paremmin opiskelijaa ohjaavia ja monipuolisempia Tarkemmat virheilmoitukset enemmän valmistelutyötä