Aineopintojen harjoitustyö: ohjelmistotekniikka, kevät 2024
% Ohjelmistotekniikka % Matti Luukkainen, Jussi Mäki-Kahra ja 7 ohjaajaa % 1.11.2021
Ohjelmistotekniikka
- Tutustutaan ohjelmistokehityksen periaatteisiin sekä menetelmiin ja sovelletaan niitä toteuttamalla pienehkö harjoitustyö
. . .
- Kurssi osa aineopintoja
- Pakollisina esitietoina
- Ohjelmoinnin jatkokurssi
- Tietokantojen perusteet
- Hyödyllinen esitieto: Tietokone työvälineenä
. . .
- Kurssimateriaali
- https://ohjelmistotekniikka-hy.github.io/
Suoritusmuoto
- Kolmella ensimmäisellä viikolla ohjauksessa tai omatoimisesti tehtävät laskarit
- palautetaan “internettiin”
. . .
- Viikolla 2 aloitetaan itsenäisesti tehtävä harjoitustyö
- Työtä edistetään pala palalta viikoittaisten tavoitteiden ohjaamana
- Kurssilla ei ole koetta
. . .
- Harjoitustyö tulee tehdä kurssin aikataulujen puitteissa
- Kesken jäänyttä harjoitustyötä ei voi jatkaa seuraavalla kurssilla (keväällä 2022)
- Muista siis varata riittävästi aikaa (10-15h viikossa) koko periodin ajaksi!
Luento, deadlinet ja ohjaus
- Kurssilla on vain yksi luento
- Laskareiden ja harjoitustyön välitavoitteiden viikoittaiset deadlinet tiistaina klo 23:59
. . .
- Pajaa kampuksella (BK107)
- ma 14-16
- ti 14-16
- ke 14-16
- Pajaa zoomissa
- to 14-16
- Myös kurssin Discordissa voi kysellä apua ongelmatilanteissa, erityisesti klo 9-16
Arvosteluperusteet
- Jaossa 60 pistettä jotka jakautuvat seuraavasti
- Viikkodeadlinet 17p
- osa viikkopisteistä tulee laskareista
- Koodikatselmointi 2p
- Dokumentaatio 12p
- Automatisoitu testaus 5p
- Lopullinen ohjelma 24p
- laajuus, ominaisuudet ja koodin laatu
- Viikkodeadlinet 17p
. . .
- Arvosanaan 1 riittää 30 pistettä, arvosanaan 5 tarvitaan noin 55 pistettä.
- Läpipääsyyn vaatimuksena on lisäksi vähintään 10 pistettä lopullisesta ohjelmasta
#
TEORIA
Ohjelmistotuotanto
- Kun ollaan tekemässä suurempaa ohjelmistoa jonkun muun kuin koodarin itsensä käyttöön, tarvitaan systemaattinen työskentelymenetelmä
- muuten riskinä mm. että lopputulos ei vastaa käyttäjän tarvetta
. . .
- Menetelmästä riippumatta ohjelmiston systemaattinen kehittäminen, eli ohjelmistotuotanto (engl. software engineering) sisältää useita erilaisia aktiviteettejä/vaiheita
. . .
- vaatimusmäärittelyä
- suunnittelu
- toteutus
- testaus
- ylläpito
Vaatimusmäärittely
- Kartoitetaan ohjelman tulevien käyttäjien tai tilaajan kanssa, mitä toiminnallisuutta ohjelmaan halutaan
. . .
- Tämän lisäksi kartoitetaan ohjelman toimintaympäristön ja toteutusteknologian järjestelmälle asettamia rajoitteita
. . .
- Tuloksena jonkinlainen dokumentti, johon vaatimukset kirjataan
- Dokumentin muoto vaihtelee: paksu mapillinen papereita tai joukko postit-lappuja tai …
Vaatimusten kirjaaminen
- On olemassa lukuisia tapoja dokumentoida vaatimuksen
. . .
- Kurssin ennen vuotta 2018 pidetyissä versioissa käyttäjien vaatimukset dokumentointiin käyttötapauksina (engl. use case)
- tapa on jo vanhahtava ja olemme jo hylänneet sen sen
- Kurssilla Ohjelmistotuotanto tutustumme nykyään yleisesti käytössä oleviin käyttäjätarinoihin (engl. user story)
. . .
- Käytämme tällä kurssilla hieman kevyempää tapaa
- Kirjaamme järjestelmältä toivotun toiminnallisuuden vapaamuotoisena ranskalaisista viivoista koostuvana feature-listana
Kurssin referenssisovellus: TodoApp
https://github.com/ohjelmistotekniikka-hy/python-todo-app havainnollistaa monia kurssin asioita ja toimii myös mallina omalle harjoitustyölle
- todoapp eli sovellus, jonka avulla käyttäjien on mahdollista pitää kirjaa omista tekemättömistä töistä, eli todoista
Katsotaan esimerkkinä Todo-sovelluksen vaatimusmäärittelyä
. . .
- Aloitetaan tunnistamalla järjestelmän käyttäjäroolit
- Todo-sovelluksella kaksi käyttäjäroolia
- normaalit käyttäjät
- laajemmilla oikeuksilla varustetut ylläpitäjät
. . .
- Mietitään mitä toiminnallisuuksia kunkin käyttäjärooli tarvisee
TodoApp:in vaatimusmäärittely
- Todo-sovelluksen normaalien käyttäjien toiminnallisuuksia ovat esim. seuraavat
- käyttäjä voi luoda järjestelmään käyttäjätunnuksen
- käyttäjä voi kirjautua järjestelmään
- kirjautumisen jälkeen käyttäjä näkee omat tekemättömät työt eli todot
- kirjaantunut käyttäjä voi luoda uuden tehtävän eli todon
- kirjaantunut käyttäjä voi merkitä todon tehdyksi, jolloin se häviää listalta
. . .
- Ylläpitäjän toiminnallisuuksia esim. seuraavat
- ylläpitäjä näkee tilastoja sovelluksen käytöstä
- ylläpitäjä voi poistaa normaalin käyttäjätunnuksen
Vaatimusmäärittely: toimintaympäristön rajoitteet, käyttöliittymä
- Ohjelmiston vaatimuksiin kuuluvat myös toimintaympäristön rajoitteet
- Todo-sovellusta koskevat seuraavat rajoitteet:
- ohjelmiston tulee toimia Linux- ja OSX-käyttöjärjestelmillä varustetuissa koneissa
- toteutetaan Pythonin TkInter-kirjaston avulla
- käyttäjien ja todojen tiedot talletetaan paikallisen koneen levylle
. . .
- Vaatimusmäärittelyn aikana hahmotellaan yleensä myös sovelluksen käyttöliittymä
Todo-sovelluksen käyttöliittymäluonnos
{ width=370 }
Suunnittelu
- Suunnittelu jakautuu kahteen erilliseen vaiheeseen
. . .
- Arkkitehtuurisuunnittelussa määritellään ohjelman rakenne karkealla tasolla
- mistä suuremmista rakennekomponenteista ohjelma koostuu
- miten komponentit yhdistetään, eli minkälaisia komponenttien väliset rajapinnat ovat
- mitä riippuvuuksia ohjelmalla on esim. ohjelmakirjastoihin, tietokantoihin ja ulkoisiin rajapintoihin
. . .
- Arkkitehtuurisuunnittelua tarkentaa oliosuunnittelu
- minkälaisisista luokista komponentit koostuvat
- miten luokat kutsuvat toistensa metodeja sekä mitä apukirjastoja ne käyttävät
- Myös ohjelmiston suunnittelu, erityisesti sen arkkitehtuuri dokumentoidaan
Testaus
- Toteutuksen yhteydessä ja sen jälkeen järjestelmää testataan
- Testausta on monentasoista
. . .
- Yksikkötestauksessa tutkitaan yksittäisten metodien ja luokkien toimintaa.
- ohjelmoijan vastuulla
. . .
- Kun erikseen ohjelmoidut luokat yhdistetään, suoritetaan integraatiotestaus
- varmistetaan erillisten osien yhteentoimivuus
- ohjelmoijan vastuulla
. . .
- Järjestelmätestauksessa testataan ohjelmistoa kokonaisuutena: toimiiko se vaatimusdokumentin mukaisesti
- suoritetaan ohjelman todellisen käyttöliittymän kautta
- saattaa tapahtua erillisen laadunhallintatiimin toimesta
Vesiputousmalli
- Ohjelmistoja on 70-luvulta asti tehty vaihe vaiheelta etenevän vesiputousmallin (engl. waterfall model) mukaan
. . .
- Vesiputousmallissa edellä esitellyt ohjelmistotuotannon vaiheet suoritetaan peräkkäin
{ width=400 }
. . .
- Eri vaiheet ovat yleensä erillisten tiimien tekemiä
- Edellyttää perusteellista ja raskasta dokumentaatiota
Vesiputousmallin ongelmat
- Mallin toimivuus perustuu siihen oletukseen, että vaatimukset pystytään määrittelemään täydellisesti etukäteen
. . .
- Näin ei useinkaan ole
- Asiakkaat eivät osaa ilmaista kaikki ohjelmistolle asettamansa vaatimukset
- Vasta käyttäessään valmista ohjelmistoa asiakkaat ymmärtää, mitä he haluavat
- Vaikka vaatimukset kunnossa laatimishetkellä, toimintaympäristö voi muuttua ja valmistuessaan ohjelmisto on vanhentunut
. . .
- Toinen suuri ongelma on myöhään aloitettava testaus
- Erityisesti integraatiotestauksessa löytyy usein pahoja ongelmia, joiden korjaaminen on hidasta ja kallista
Ketterä ohjelmistokehitys
- Vesiputousmallin heikkoudet ovat johtaneet 2000-luvun alun jälkeen ketterien (engl. agile) menetelmien käyttöönottoon
- Alussa kartoitetaan pääpiirteissään ohjelmiston vaatimuksia ja hahmotellaan ohjelmiston alustava arkkitehtuuri
. . .
- Tämän jälkeen suoritetaan useita iteraatioita, joiden aikana ohjelmistoa rakennetaan pala palalta eteenpäin
- Kussakin iteraatiossa suunnitellaan ja toteutetaan valmiiksi pieni osa ohjelmiston vaatimuksista
Ketterä ohjelmistokehitys
- Asiakas pääsee kokeilemaan ohjelmistoa jokaisen iteraation jälkeen
- Voidaan jo aikaisessa vaiheessa todeta, onko kehitystyö etenemässä oikeaan suuntaan
- Vaatimuksia voidaan tarvittaessa tarkentaa ja muuttaa
{ width=350 }
. . .
Kurssin harjoitustyö ketterässä hengessä viikon mittaisilla iteraatioilla
#
TYÖKALUJA
Työkaluja
- Tarvitsemme ohjelmistokehityksessä suuren joukon käytännön työkaluja.
- Komentorivi ja versionhallinta
- olet jo ehkä käyttänyt muilla kursseilla komentoriviä ja git-versionhallintaa
- molemmat ovat tärkeässä roolissa ohjelmistokehityksessä
- harjoitellaan viikon 1 laskareissa
. . .
- poetry ja invoke
- Olet todennäköisesti ohjelmoinut Pythonia VS codella ja tottunut suorittamaan ohjelman ja testit “nappia painamalla”
- tutkimme kurssilla hieman miten Pythonilla tehdyn ohjelmiston hallinnointi tapahtuu VS coden ulkopuolella
- tarvittavien kirjastojen lataaminen, koodin sekä testin suorittaminen
- Python-projektien hallinnointiin on olemassa muutamia vaihtoehtoja, käytössämme poetry ja invoke
Unittest
- Ohjelmistojen testaus tapahtuu nykyään automatisoitujen testityökalujen toimesta
. . .
- unittest eräs pythonin automatisoidun testauksen työkaluista
- Tulet kurssin ja myöhempienkin opintojesi aikana kirjoittamaan paljon automatisoituja testejä
- Viikon 2 laskareissa harjoitellaan Unittestin perusteita
pylint
- Automaattisten testien lisäksi koodille voidaan määritellä erilaisia automaattisesti tarkastettavia tyylillisiä sääntöjä
- ylläpidetään koodin luettavuutta ja varmistetaan, että koodi noudateta samoja tyylillisiä konventioita
. . .
- Käytämme kurssilla tarkoitukseen pylint-nimistä työkalua
. . .
- pylintin avulla kontrolloimme mm. muuttujien nimentää, sulkumerkkien sijoittelua ja välilyönnin käytön systemaattisuutta
docstring
- Osa ohjelmiston dokumentointia on lähdekoodin luokkien julkisten metodien kuvaus
- Pythonissa lähdekoodi dokumentoidaan käyttäen docstring-työkalua
- Dokumentointi tapahtuu kirjoittamalla koodin yhteyteen sopivasti muotoiltuja kommentteja
{ width=350 }
#
UML
UML ja dokumentointi
- Dokumentoinnissa ja suunnittelun tukena tarvitaan ohjelman rakennetta ja toimintaa havainnollistavia kaavioita
. . .
- UML eli Unified Modeling Language on 1997 standardoitu olio-ohjelmistojen mallintamiseen tarkoitettu mallinnuskieli
- UML sisältää 13 erilaista kaaviotyyppiä
- UML oli aikoinaan todella suosittu, nyt sen suosio on hiipumaan päin, muutama tärkein kaaviotyyppi kannattaa kuitenkin osata
. . .
- Käytämme kurssilla luokka-, pakkaus- ja sekvenssikaavioita
Luokkakaaviot
- Kurssin Tietokantojen perusteista tuttujen luokkakaavioiden käyttötarkoitus on luokkien ja niiden välisten suhteiden kuvailu
- Todo-sovelluksen oleellista tietosisältöä kuvaavat luokat
class Todo:
def __init__(self, content, done=False, user):
self.content = content
self.done = done
self.user = user
self.id = str(uuid.uuid4())
class User:
def __init__(self, username, password):
self.username = username
self.password = password
Todo-sovelluksen tietosisällön luokkakaavio
- Yhdellä käyttäjällä voi olla monta Todoa
- Todo liittyy aina yhteen käyttäjään
{ width=400 }
Todo-sovelluksen tietosisällön luokkakaavio
- Yleensä ei ole mielekästä kuvata luokkia tällä tarkkuudella, eli luokkakaavioihin riittää merkitä luokan nimi
{ width=260 }
- Kaaviota parempi paikka esim. metodien kuvaamiselle on koodiin liittyvä docstring
Pakkauskaavio
- Ohjelmiston korkeamman tason rakenne näkyy yleensä siinä miten koodi on jaettu hakemistoihin
. . .
- Todo-sovelluksen koodi on sijoitettu hakemistoihin seuraavasti:
:::::::::::::: {.columns}
::: {.column width=”50%”}
{ width=150 }
:::
::: {.column width=”50%”}
::: ::::::::::::::
Pakkauskaavio
- Hakemistorakenne voidaan kuvata UML:ssä pakkauskaaviolla
:::::::::::::: {.columns}
::: {.column width=”50%”}
{ width=150 }
:::
::: {.column width=”50%”}
{ width=200 }
:::
::::::::::::::
- Pakkausten välille on merkitty riippuvuus jos pakkauksen luokat käyttävät toisen pakkauksen luokkia
Toiminnallisuuden kuvaaminen
- Luokka- ja pakkauskaaviot kuvaavat ohjelman rakennetta
- Ohjelman toiminta ei kuitenkaan tule niistä ilmi millään tavalla
. . .
- Esim. Ohpen Unicafe-tehtävä
{ width=300 } - Vaikka kaavioon on nyt merkitty metodien nimet, ei ohjelman toimintalogiikka selviä kaaviosta
- Esim. mitä tapahtuu, kun maksukortilla jolla on rahaa 3 euroa, ostataan edullinen lounas?
Sekvenssikaavio
. . .
- Kehitetty alunperin kuvaamaan verkossa olevien ohjelmien keskinäisen kommunikoinnin etenemistä
- Sopivat jossain määrin kuvaamaan, miten ohjelman oliot kutsuvat toistensa metodeja suorituksen aikana
Sekvenssikaavio
Mitä tapahtuu, kun maksukortilla jolla on rahaa 3 euroa, ostataan edullinen lounas?
. . .
class Kassapaate:
def __init__(self):
self.EDULLISEN_HINTA = 2.5
def syo_edullisesti(self, kortti: Maksukortti):
if kortti.saldo < self.EDULLISEN_HINTA:
return False
kortti.ota_rahaa(self.EDULLISEN_HINTA):
self.edulliset += 1
return True
Onnistunut ostos sekvenssikaaviona
{ width=350 }
- Oliot ovat laatikoita joista lähtee alas “elämänlanka”
- Aika etenee ylhäältä alas
- Metodikutsut ovat nuolia, jotka yhdistävää kutsuvan ja kutsutun olion elämänlangat
- Paluuarvo merkitään katkoviivalla
#
HARJOITUSTYÖ
Yleistä
- Kurssin pääpainon muodostaa viikolla 2 aloitettava harjoitustyö
-
Harjoitustyössä toteutetaan itsenäisesti ohjelmisto omavalintaisesta aiheesta
- Harjoitustyötä tehdään itsenäisesti, mutta tarjolla on pajaohjausta
- Pajaa kampuksella
- ma 14-16 (BK107)
- ti 14-16 (BK107)
- ke 14-16 (BK107)
- to 14-16 (zoom)
Älä plagioi
- Kurssilla seurataan Helsingin yliopiston opintokäytäntöjä
- Plagiarismi ja opintovilppi, eli esimerkiksi netissä olevien tai kaverilta saatujen vastausten kopiointi ja niiden palauttaminen omana työnä on kiellettyä
- Todettu opintovilppi johtaa kurssisuorituksen hylkäämiseen ja toistuva opintovilppi voi johtaa opinto-oikeuden määräaikaiseen menettämiseen
Työn eteneminen
- Edetään viikottaisten tavoitteiden mukaan
- Työ on saatava valmiiksi kurssin aikana ja sitä on toteutettava tasaisesti, muuten kurssi katsotaan keskeytetyksi
. . .
- Samaa ohjelmaa ei voi jatkaa seuraavalla kurssilla (eli keväällä 2022), vaan työ on aloitettava uudella aiheella alusta
. . .
- Koko kurssin arvostelu perustuu pääasiassa harjoitustyöstä saataviin pisteisiin
- Osa pisteistä kertyy viikoittaisten välitavoitteiden kautta, osa taas perustuu työn lopulliseen palautukseen
Kieli
- Harjoitustyön ohjelmointikieli on Python tai Java
- Ohjelmakoodin muuttujat, luokat ja metodit kirjoitetaan englanniksi
- Dokumentaatio voidaan kirjoittaa joko suomeksi tai englanniksi
. . .
- Web-sovelluksia kurssilla ei sallita
- Sovelluksessa voi toki olla webissä toimivia komponentteja, mutta sovelluksen käyttöliittymän tulee olla ns. desktop-sovellus
Ohjelman toteutus
- Toteutus etenee “iteratiivisesti ja inkrementaalisesti”
- Heti ensimmäisellä viikolla toteutetaan pieni käyttökelpoinen osa toiminnallisuudesta
- ohjelman ydin pidetään koko ajan toimivana, uutta toiminnallisuutta lisäten, kunnes tavoiteltu laajuus on saavutettu
. . .
- Iteratiiviseen tapaan tehdä ohjelma liittyy kiinteästi automatisoitu testaus
- Uutta toiminnallisuutta lisättäessä ja vanhaa muokatessa täytyy varmistua, että kaikki vanhat ominaisuudet toimivat edelleen
. . .
- Jotta ohjelmaa pystyisi testaamaan, on tärkeää että sovelluslogiikkaa ei kirjoiteta käyttöliittymän sekaan
. . .
- Graafiseen käyttöliittymään suositellaan Pythonilla Tkinteriä tai Pygamea ja Javalla JavaFX:ää
- Tiedon talletus joko tiedostoon tai tietokantaan suositeltavaa
Ohjelman toteutus
- Tavoitteena on tuottaa ohjelma, joka voitaisiin antaa toiselle opiskelijalle ylläpidettäväksi ja täydennettäväksi
- koodin on siis oltava ymmärrettävää ja jatkokehitityksen mahdollistavaa
. . .
- Lopullisessa palautuksessa on oltava lähdekoodin lisäksi dokumentaatio ja automaattiset testit sekä Java-sovelluksissa jar-tiedosto
. . .
- Toivottava dokumentaation taso käy ilmi referenssisovelluksesta https://github.com/ohjelmistotekniikka-hy/python-todo-app
. . .
- Voit ottaa mallia referenssisovelluksen dokumentaatiosta mutta älä copypastea, se johtaa hylkäämiseen
Koodin laatuvaatimukset
- Kurssin tavoitteena on, että tuotoksesi voisi ottaa kuka tahansa kaverisi tai muu opiskelija ylläpidettäväksi ja laajennettavaksi
- Lopullisessa palautuksessa tavoitteena on Clean code eli selkeä, ylläpidettävä ja toimivaksi automatisoidusti testattu koodi
. . .
- Jos käytät Pygamea, tyyli ei voi olla sama kuin Ohjelmoinnin jatkokurssin pygamemateriaalissa
- ks https://ohjelmistotekniikka-hy.github.io/fi/tasks/pygame
Hyvän aiheen ominaisuudet
- Itseäsi kiinnostava aihe
- Riittävän mutta ei liian laaja
- Vältä eeppisiä aiheita, aloita riittävän pienestä
- Valitse aihe, jonka perustoiminnallisuuden saa toteutettua nopeasti, mutta jota saa myös laajennettua helposti
- Hyvässä aiheessa on muutamia logiikkaluokkia, tiedostojen tai tietokannan käsittelyä ja sovelluslogiikasta eriytetty käyttöliittymä
. . .
- Kurssilla pääpaino on
- Toimivuus ja varautuminen virhetilanteisiin
- Luokkien vastuut
- Ohjelman selkeä rakenne
- Laajennettavuus ja ylläpidettävyys
. . .
- Tällä kurssilla ei ole tärkeää:
- Tekoäly
- Grafiikka
- Tietoturva
- Tehokkuus
Huonon aiheen ominaisuuksia
- Kannattaa yrittää välttää aiheita, joissa pääpaino on tiedon säilömisessä tai liian monimutkaisessa käyttöliittymässä
- Paljon tietoa säilövät, esim. yli 3 tietokantataulua tarvitsevat sovellukset sopivat yleensä paremmin kurssille Tietokantasovellus
- Käyttöliittymäkeskeisissä aiheissa voi olla vaikea keksiä sovelluslogiikkaa, joka on enemmän tämän kurssin painopiste
Esimerkkejä aiheista
- Hyötyohjelmat
- Aritmetiikan harjoittelua
- Tehtävägeneraattori, joka antaa käyttäjälle tehtävän sekä mallivastauksen (esim. matematiikkaa, fysiikkaa, kemiaa, …)
- Code Snippet Manageri
- Laskin, funktiolaskin, graafinen laskin
- Budjetointisovellus
- Opintojen seurantasovellus
- HTML WYSIWYG-editor (What you see is what you get)
Esimerkkejä aiheista
- Reaaliaikaiset pelit
- Tetris
- Pong
- Pacman
- Tower Defence
- Asteroids
- Space Invaders
- Yksinkertainen tasohyppypeli, esimerkiksi The Impossible Game
Esimerkkejä aiheista
- Vuoropohjaiset pelit
- Tammi
- Yatzy
- Miinaharava
- Laivanupotus
- Yksinkertainen roolipeli tai luolastoseikkailu
- Sudoku
- Muistipeli
- Ristinolla (mielivaltaisen kokoisella ruudukolla?)
Esimerkkejä aiheista
- Korttipelit
- En Garde
- Pasianssi
- UNO
- Texas Hold’em
- Omaan tieteenalaan, sivuaineeseen tai harrastukseen liittyvät hyötyohjelmat
- Yksinkertainen fysiikkasimulaattori
- DNA-ketjujen tutkija
- Keräilykorttien hallintajärjestelmä
- Fraktaaligeneraattori
Arvosteluperusteet tarkemmin
- Kurssin maksimi on 60 pistettä
- Ennen loppupalautusta jaossa 19 pistettä
- Viikkodeadlinet 17p
- Koodikatselmointi 2p
. . .
- Loppupalautus ratkaise 41 pisteen kohtalon
- Dokumentaatio 12p
- Automatisoitu testaus 5p
- Lopullinen ohjelma 24p
- Laajuus, ominaisuudet ja koodin laatu
. . .
- Arvosanaan 1 riittää 30 pistettä, arvosanaan 5 tarvitaan noin 55 pistettä
- Läpipääsyyn vaatimuksena on lisäksi vähintään 10 pistettä lopullisesta ohjelmasta
Harjoitustyön vaikutus kurssipisteisiin
Ohjelman pisteet jakautuvat seuraavasti
- käyttöliittymä 4p
- 0p yksinkertainen tekstikäyttöliittymä
- 1-2p monimutkainen tekstikäyttöliittymä
- 2-3p yksinkertainen graafinen käyttöliittymä
- 4p laaja graafinen käyttöliittymä
. . .
- tiedon pysyväistalletus 4p
- 0p ei pysyväistalletusta
- 1-2p tiedosto
- 3-4p tietokanta
- 3-4p internet
. . .
- sovelluslogiikan kompleksisuus 3p
- ohjelman lajuus 4p
. . .
- ulkoisten kirjastojen hyödyntäminen 1p
- release / suorituskelpoinen jar-tiedosto 1p
- koodin laatu 5p
- virheiden käsittely 2p
Harjoitustyön toimivuus
- Koneiden konfiguraatioissa on eroja, ja tällä kurssilla ei riitä että harjoitustyössä tekemäsi sovellus toimii vain omalla koneellasi
. . .
- Harjoitustyösi pitää pystyä joka viikko suorittamaan, kääntämään ja testaamaan komentoriviltä käsin laitoksen linux-koneilla (tai uusimmat päivitykset sisältävällä cubbli-linuxilla)
- muussa tapauksessa työtä ei tarkasteta ja menetät viikon/loppupalautuksen pisteet
- Varminta käyttää Javan versiota 11
. . .
- Pääset testaamaan ohjelmaasi laitoksen koneella myös kotoa käsin käyttämällä etätyöpöytää
✍️ Löysitkö kirjoitusvirheen? Tee korjausehdotus muokkaamalla tätä tiedostoa GitHubissa.