Projekti: Sisusta selvää

Projekti tehdään 2-3 hengen ryhmissä. Jokaisen ryhmän jäsenen henkilökohtainen työpanos on oltava näkyvissä ohjelmassa!

Deadlinet

  • Lopullinen palautus: 9.12.2022

  • Armonaika päättyy: 16.12.2022.

    • Projektille myönnetään automaattisesti deadlineviikon perjantaihin lisäaikaa eli ns. armonaika alkaa virallisen deadlinen jälkeen.

    • Armonajallakin palautus kannattaa tehdä mahdollisimman aikaisin, koska arvostelu kiristyy koko ajan lisäajan kuluessa.

      • Ykkösen raja pysyy samana armonajasta huolimatta.

      • Muita arvosanarajoja nostetaan heti armonajalle siirryttäessä puolella arvosanalla. Esimerkiksi jos projekti on palautettu heti normaalin takarajan jälkeen, sen on arvosanan 4 saadakseen saatava arvosanan “4.5” edestä pisteitä, arvosanan 3 uusi raja on arvosanan “3.5” raja jne.

      • Rajoja nostetaan armonajan kuluessa edelleen niin, että sen lopussa arvosanan 4 raja on alkuperäisen arvosanan 5 tasolla. Muut arvosanat on skaalattu vastaavasti. Rangaistusvaikutus ei ole hyppäyksittäinen, vaan kovenee liukuvasti koko ajan.

  • Projektista, joka ei täytä minivaatimuksia, voi saada ns. bumerangin, jolloin on viikko aikaa korjata työ.

Osaamistavoitteet

Projektissa harjoitellaan seuraavia asioita käytännössä:

  • Toiminnallisuuden lisääminen sovellukseen olio-ohjelmointia hyödyntäen

  • Graafisen käyttöliittymän toteuttaminen osaksi ohjelmaa

  • Oman koodin testaus yksikkötasolla

  • Ohjelman toteuttaminen tiimityönä

Toteutettava ohjelma

Sisu aiheuttaa ennenaikaisia harmaita hiuksia, joten mahdollistaaksesi helpon tavan pitää kirjaa siitä, missä tutkinnon suorituksen kanssa mennään, päätät toteuttaa ohjelman sitä varten. Ohjelmalla voidaan tarkastella Tampereen yliopiston tutkinto-ohjelmien rakennetta. Lisäksi ohjelmassa voi tutkailla käyttäjän omien opintojen etenemistä. Käyttäjä voi määrittää tutkinto-ohjelman omakseen ja merkitä siihen kursseja suoritetuksi sitä mukaa, kun opinnot etenevät.

Ohjelman kulku

Ohjelmaa käynnistettäessä näkyviin tulee ensin asetusikkuna, jossa annetaan esimerkiksi opiskelijan nimi ja opiskelijanumero sekä mahdollisesti opintojen aloitusvuosi tai valmistumisen tavoitevuosi. Asetuksien valinnan jälkeen siirrytään ohjelman pääikkunaan, josta valitaan opiskelijalle tutkinto-ohjelma, opintosuuntaus ja muita mahdollisesti tarvittavia tietoja. Tutkinto-ohjelmaa ja opintosuuntausta voi vaihtaa pääikkunassa. Tutkinto-ohjelman valintanäkymän lisäksi voidaan näyttää opiskelijan opintojen etenemisnäkymä, jossa näytetään opiskelijan suoritusten sen hetkinen tilanne. Opiskelija voi tässä näkymässä merkitä kurssejaan suoritetuksi.

Opiskelijatiedot ovat henkilötietoja, joten niiden käsittelyyn on määritelty ohjelmaa varten oma JSON-tiedosto. Ohjelman suoritus päättyy pääikkunasta nappia painamalla. Tällöin opiskelijan eteneminen talletetaan JSON-tiedostoon.

Alla on hahmotelma siitä, miltä ohjelman käyttöliittymä saattaisi näyttää:

../../_images/gui_luonnos.png

Monet ohjelman yksityiskohdat on jätetty tässä tarkoituksella avoimiksi, ja ne voi toteuttaa parhaaksi katsomallaan tavalla. Tällaisia asioita ovat mm.

  • Ohjelman tarkka alkutilanne: Mikä on ohjelman alkutila ja mitä tietoa se kysyy ohjelman alussa käyttäjältä?

  • Ohjelman käyttöliittymä: Miten ohjelman eri toimintoja voidaan suorittaa?

  • Käyttäjän rooli ohjelmassa: Miten opiskelijan eteneminen esitetään?

  • Kurssitietojen esittäminen: Millaisella näkymällä kurssitiedot esitetään? Millä tarkkuudella yhden kurssin tiedot esitetään?

Työn pohjaksi on tarjottu valmis yksinkertainen JavaFX-projekti, joka luo ja avaa tyhjän ikkunan. Pohja on tarkoitettu lähinnä arvosanaa 1 tavoitteleville.

Pakolliset ominaisuudet

Harjoitustyössä on toteutettava ainakin alla olevat ominaisuudet. Minimitoteutuksen täyttävästä työstä voi ansaita hyväksytyn suorituksen (arvosana 1). Perustoteutukselle määriteltyjen ominaisuuksien mukaisella toteutuksella voi työstä ansaita korkeintaan arvosanan 3. Korkeampi arvosana edellyttää perustoteutuksen lisäksi joidenkin lisäosien toteutusta.

Projektipisteistä muodostuu osa-arvosana kaavalla arvosana = pisteet/100. Projektipisteet muodostavat 45% kurssin kokonaisarvosanasta.

Minimitoteutus (maksimiarvosana 1): maksimissaan 140 pistettä. Minitoteutuksesta tulee löytyä seuraavat ominaisuudet:

  • Ohjelma kääntyy

  • Ohjelmassa on yksi dialogi-ikkuna (esim. alkumenu)

  • Ohjelma käyttää pääikkunanaan valmiina annettua toteutusta

  • Ohjelma hakee tutkintojen rakennetiedot määritellyistä JSON-tiedostoista ja käyttää tiedostojen käsittelyyn tarkoitettua rajapintaa niiden lukemisen toteuttamisessa

  • Ohjelma osaa näyttää valitun tutkinnon rakenteen pääikkunassa

  • Ohjelmassa on käytetty periytymistä rakenteen osien toteuttamisessa

  • Loppudokumentti, josta löytyy:

    • Luokkien vastuujako (luokkakaavio on tässä hyödyllinen)

    • Ryhmän työnjako

Toteuttamalla minimitoteutuksen päälle määriteltyjä perus- ja lisäominaisuuksia sekä muilla harjoitustyön ansioilla saa kerrytettyä lisää projektipisteitä.

Perustoteutus (maksimiarvosana 3): vähintään 300 pistettä

  • Ohjelmaan on toteutettu graafinen käyttöliittymä kokonaan itse (ei käytetä kurssin valmista pohjaa)

  • Ohjelma hakee tutkintojen rakennetiedot Sisun API:sta ja käyttää API-tietojen lukemisen toteuttamiseen siihen tarkoitettua rajapintaa.

    • Sisun API:sta lisää alempana.

  • Ohjelma toimii eli näytettävää tutkintoa voi vaihtaa ja opiskelijan tutkinnon tilanne esitetään ohjelmassa.

  • Ohjelma selviää hallitusti asetustiedostojen käsittelyssä tapahtuvista virheistä.

  • Ohjelmalle on toteutettu yksikkötestejä

  • Toteutuksen bonuspisteillä voi kompensoida virheitä yhden arvosanan verran.

Huipputoteutus (maksimiarvosana 5): vähintään 500 pistettä

  • Ohjelmassa on toteutettuna vähintään kaksi lisäosaa (yksi lisäosa on lähtökohtaisesti 50-100 pistettä)

  • Toteutuksen bonuspisteillä voi kompensoida virheitä yhden arvosanan verran

Lisäominaisuudet

Alla olevia lisäominaisuuksia ei tarvitse toteuttaa, mutta hyvästä lisäosan toteutuksesta ansaitsee lisäpisteitä. Lähtökohtaisesti kukin lisäosa on arvoltaan 50-100 pistettä. Yksittäisen lisäosan arvoa voidaan kuitenkin tarvittaessa kasvattaa myöhemmin, jos se osoittautuu erityisen työlääksi. Korotuksen saaminen edellyttää, että lisäosa on dokumentoitu palautuksessa siten, että ne selkeästi on esitetty lisäosiksi. Töiden tarkastajat eivät etsi lisäosia palautetusta koodista.

  • Kurssin katselunäkymä. Vietäessä hiiren kursori jonkin kurssin yläpuolelle, kyseisestä kurssista näytetään lisätietoja näytöllä.

  • Opiskelija-asetukset. Ohjelman käynnistyksen yhteydessä avataan asetusikkuna, josta voi asettaa ohjelmaa käyttävän opiskelijan tiedot. Suorituksen tilanne haetaan ja tallennetaan JSON-tiedostoon.

  • Opiskelijan etenemisen aikataulun esittäminen tutkinnon rakenteeseen peilaten.

  • Opettajaroolin lisääminen ohjelmaan

  • Sisun API:sta löytyvän jonkin tietokokonaisuuden esim. arviointikohteiden esittäminen osana ohjelmaa

  • Ohjelmaan on toteutettu graafista käyttöliittymää testaavat yksikkötestit (kts. TestFX-viitekehys JavaFX-ohjelmien testaukseen).

  • Oma lisäominaisuus. Ohjelmaan on toteutettu jokin itse keksitty tämän listan ulkopuolinen lisäominaisuus.

  • Huom! Lisäominaisuuden pitää olla selkeästi koodaustyötä vaativa ominaisuus.

  • Huom! KAIKKI LISÄOSAT PITÄÄ DOKUMENTOIDA PISTEET SAADAKSEEN

Arvosanan määräytyminen

Arvosana koostuu erillisistä osioista ja bonuspisteistä. Loppuarvosanaa rajaa yllä määritellut toiminnalliset vaatimukset. Kahden lisäosan toteuttamisen jälkeen bonuspisteet voivat kompensoida kaksi lisäarvosanaa.

Arvosteltavat osiot:

  • Ohjelman suunnittelu ja kokonaisrakenne

  • Luokkasuunnittelu ja toteutus

    • Olio-ohjelmoinnin periaatteiden käyttö

    • Luokkien dokumentaatio

  • Poikkeuskäsittely

    • Poikkeusten oikea käyttö ja käsittely

  • Koodin laatu

    • Hyvien ohjelmointitapojen ja -periaatteiden noudattaminen

    • Koodityyli

  • Versiohistoria ja tiimityö

  • Bonuspisteet

    • Annetaan lisäosista ja erityisen hyvin toteutetuista toiminnallisuuksista

Lisätyö, joka lasketaan bonuspisteisiin:

  • Ylimääräiset, hyvin toteutetut yksikkötestit (yht. max. 150p)

  • Grafiikan taso (max. 100p)

  • Erittäin hyvä käyttöliittymä (max. 100p)

  • Laadukkaasti dokumentoidut rajapinnat ja luokat (yht. max. 50p)

Ympäristö

Työympäristö haetaan Course-Gitlabista. Jokaisella ryhmällä on oma ryhmän nimellä nimetty tietovarasto. Kannattaa huomata, että joidenkin ryhmien nimiä on jouduttu muokkaamaan, jotta ne käyvät GitLabin tietovaraston nimiksi. Versionhallinnan kautta on tarjolla valmis JavaFX-projektipohja sekä Sisun dataa sisältäviä JSON-tiedostoja. Aseta group_template_project remoteksi paikalliseen tietovarastoosi hakeaksesi kurssin puolen muutokset. Versionhallinnan käyttö on sekä arvosteltava osa projektia että osoitus tiimityöstä. Etätietovaraston tulee sisältää jokaiselta ryhmän jäseneltä selkeä kontribuutio projektiin.

Sisun API:n käytöstä

Sisun dataan pääsee käsiksi verkossa mm. ns. Kori API:n kautta. Kori API:n tekninen dokumentaatio on tarjolla sivulla https://sis-tuni.funidata.fi/kori/swagger-ui/index.html?configUrl=/kori/v3/api-docs/swagger-config&filter=true. API palauttaa dataa JSON-muodossa.

Harjoitustyön kannalta oleellinen tieto on, että listan yliopistomme tutkintorakenteista saa suorittamalla www-pyynnön https://sis-tuni.funidata.fi/kori/api/module-search?curriculumPeriodId=uta-lvv-2021&universityId=tuni-university-root-id&moduleType=DegreeProgramme&limit=1000.

Tutkintojen rakenteet on kuvattu Sisussa käyttäen suunnilleen seuraavanlaista tyyppihierarkiaa:

  • Abstrakti kattotyyppi Module.

  • DegreeProgramme.

    • Tutkintorakenteen juuritaso, joka kertoo tutkinnon nimen, laajuuden opintopisteinä jne.

  • StudyModule.

    • Opintokokonaisuus, jonka alaisuudessa on yleensä useita kursseja tai alimoduleita.

    • Opintokokonaisuudesta voi saada suoritusmerkinnän opintorekisteriin, ja sen yhteydessä on tietoa esim. opintokokonaisuuden laajuudesta opintopisteinä, arvostelukriteereistä sekä vastuuhenkilöistä.

  • GroupingModule.

    • “Tekninen apuväline” kuvaamaan tutkintorakenteen hierarkian välitasoa, jonka alaisuudessa on yleensä useita kursseja tai alimoduleita mutta joka ei kuitenkaan ole varsinainen opintokokonaisuus.

    • Eroaa opintokokonaisuudesta lähinnä siinä, että tästä ei voi saada erillistä suoritusmerkintää, eikä tämän yhteydessä siten ole tietoa esim. opintopisteistä, yms.

  • CourseUnit.

    • Kuvaa opintojakson: esim. koodi, nimi, laajuus opintopisteinä, kurssin kuvaus, jne.

    • Tämä ei Sisussa ole Module:n alityyppi, ja kurssitietoja haetaankin Sisusta API:sta eri päätepisteiden kautta kuin moduleita. Kurssejakin voi hakea esim. id:n tai groupId:n perusteella.

    • Tietyn groupId:n omaavan kurssin (tässä esim. groupId on “uta-ykoodi-47926”) tarkemmat tiedot saa seuraavanlaisella pyynnöllä: https://sis-tuni.funidata.fi/kori/api/course-units/by-group-id?groupId=uta-ykoodi-47926&universityId=tuni-university-root-id

    • Modulit, joiden alaisuudessa on suoraan kursseja, viittaavat kursseihin niiden groupId:n avulla.

Tutkintorakenne koostuu puumaisesta modulihierarkiasta. Kukin moduli, modulin tyypistä riippumatta, sisältää attribuutin rule, joka kuvaa kyseisen modulin alimodulit (= sen lapset puurakenteessa). Tutkintorakenteen voi siten käydä läpi / prosessoida aloittamalla sen juuritasolta eli sen DegreeProgramme-modulista, ja käymällä rekursiivisesti läpi kunkin kohdatun modulin rule-attribuutin kuvaamat alimodulit. Kunkin yksittäisen konkreettisen rule:n kohdalla on ilmaistu sen tyyppi. Esim. CourseUnitRule ja ModuleRule kuvaavat tiettyjä suoraan modulin alaisuuteen kuuluvia kursseja tai moduleita. Sen sijaan AnyCourseUnitRule ja AnyModuleRule ilmaisevat, että kyseisen modulin alaisuuteen saa lisätä mitä vain kursseja tai moduleita.

Edellämainittujen tyyppien tekniset kuvaukset löytyvät aiemmin jo mainitun Sisun Kori API:n dokumentaatiosivun https://sis-tuni.funidata.fi/kori/swagger-ui/index.html?configUrl=/kori/v3/api-docs/swagger-config&filter=true alaosasta.