Ilmoittaudu yhteen aloitustilaisuuksista täällä. Kurssin läpäisy edellyttää miniprojektiin osallistumista tai sen hyväksilukemista.
Laskareissa käytettävän uv:n versioissa alle 0.13.4 on tietoturvahaavoittuvuus (GHSA-hq85-5cpj-mr62). Sen hyödyntäminen edellyttää, että hyökkääjä pystyy sieppaamaan verkkoliikenteesi, esim. julkisessa wifissä, joten riski on pieni, mutta päivitys on nopea tehdä.
- Jos et ole vielä asentanut uv:ta, sinun ei tarvitse tehdä mitään: asennusohjeen mukaan asennettaessa saat automaattisesti korjatun version
- Jos olet jo asentanut uv:n, tarkista versio komennolla
uv --version, sen pitää olla vähintään 0.13.4 - Jos versio on vanhempi, päivitä uv komennolla
uv self update(jos asensit uv:n Homebrew'lla:brew upgrade uv)
Osa 0
Kurssi on jo ohjelmointia hallitseville tarkoitettu johdanto ohjelmistotuotantoon, eli systemaattiseen tapaan tehdä hieman laajempia ohjelmistoja useamman hengen tiimissä ulkoiselle asiakkaalle. Erityinen paino kurssilla on niin sanotuissa ketterissä ohjelmistotuotantomenetelmissä.
Esitiedot ja sisältö
Esitietovaatimuksina kurssilla on seuraavien kurssien suoritus (tai vastaavat tiedot)
- Ohjelmoinnin perusteet ja jatkokurssi
- Tietokantojen perusteet
- Tietokannat ja Web-ohjelmointi (aiemmalta nimeltään Tietokantasovellus)
Kurssien Ohjelmistotekniikka ja Tietokone työvälineenä suorituksesta on myös hyötyä.
Kurssin suoritettuaan opiskelijalla tulisi olla riittävät tiedolliset ja tekniset valmiudet toimia juniorikehittäjän roolissa pienessä ohjelmistotiimissä, esimerkiksi Tietojenkäsittelytieteen osaston opintojaksolla Ohjelmistoprojekti.
Hieman tarkemmin eriteltynä, suoritettuaan kurssin opiskelija
- tuntee ohjelmistoprosessin vaiheet (vaatimusmäärittely, suunnittelu, toteutus ja laadunhallinta)
- tietää miten vaatimuksia hallitaan ketterässä ohjelmistotuotantoprosessissa
- ymmärtää suunnittelun, toteutuksen ja testauksen vastuut ja luonteen ketterässä ohjelmistotuotannossa
- tunnistaa tiimityöskentelyn merkityksen ja tuntee keinoja tukea sitä ketterässä tiimissä
- ymmärtää ohjelmiston laadunhallinnan perusteet
- osaa tehdä ohjelmistokehityksestä hallittua ja toistettavaa versionhallinnan, automatisoidun testauksen ja jatkuvan integraation avulla
- osaa hyödyntää tekoälyä hallitusti sovelluskehityksessä
Kurssin suorittaminen ja arvostelu
Kurssi koostuu kolmesta komponentista, luennoista, laskuharjoituksista ja miniprojektista.
Luennot
Kurssilla on 10 luentoa sekä neljä vierailuluentoa. Luennoilla käydään pääasiassa läpi ohjelmistotuotantoon liittyvää käsitteistöä ja teoriaa, samaa asiaa mihin tämä materiaali keskittyy.
Kurssin luennot pidetään salissa B123 ja tallenteet ovat nähtävillä luentojen jälkeen, jos Unitube-tallennus toimii… Vuoden 2025 tallenteet ovat myös käytettävissä, sisältö on päällisin puolin sama.
Laskuharjoitukset
Kurssiin liittyy viikoittaiset laskuharjoitukset. Tehtäviä laskareissa on kahdentyyppisiä.
-
Luennoilla ja tässä materiaalissa käytävää teoriaa kertaavat viikoittaiset monivalintatehtävät, monivalintatehtävien deadline on sunnuntaina klo 23.59.
-
Toinen osa tehtävistä käsittelee ohjelmointia, versionhallintaa, automatisoitua testaamista ja tekoälyn hyödyntämistä ohjelmistokehityksessä, näiden deadline on maanantaina klo 23.59 (viikon 7 deadline poikkeaa tästä, ks. tehtäväsivu). Tehtävien ohjelmointikieli on Python.
Laskuharjoitusten oletettu kuormittavuus on viikoilla 1–2 noin 8 tuntia, viikolla 3 noin 6 tuntia, viikoilla 4–6 noin 4 tuntia ja viikolla 7 noin 6 tuntia. Monivalintatehtäviin vastaaminen on suhteellisen nopeaa, mutta järkevästi vastaaminen edellyttää osallistumista luennoille ja/tai viikon materiaalin lukemista.
Tekoäly kurssilla
Viikoittaisiin tehtäviin kuuluu [tekoäly]-merkittyjä tehtäviä, joissa harjoitellaan koodausagenttien hallittua käyttöä ohjelmistokehityksessä. Niihin liittyvä teoria on erillisessä materiaalissa Tekoäly ohjelmistotuotannossa. Tehtävät voi tehdä joko GitHub Copilotilla tai OpenCodella CurreChatin kielimalleja käyttäen. Kurssimateriaalin kertaamiseen voit käyttää OhtuBotteja, esim. materiaalista kysymyksiä esittävää Kertaajaa. Huomaa kuitenkin, että monivalintatehtävät korvaavat luentopäiväkirjat on kirjoitettava itse ilman tekoälyä.
Miniprojekti
Kurssin viikoilla 3–7 järjestetään miniprojekti, eli ryhmässä tehtävä pieni harjoitustyö, jonka pääasiallisena tarkoituksena on projektinhallinnan, tiimityöskentelyn sekä eräiden laadunhallintatekniikoiden harjoittelu.
Kukin miniprojektiryhmä koostuu 4–6 opiskelijasta, ryhmillä on myös asiakas, jota ryhmä tapaa viikoittain. Ensimmäisellä viikolla asiakastapaamiseen tulee varata 90 minuuttia, myöhemmillä viikoilla 30 minuuttia.
Kurssin lopussa on miniprojektien yhteinen kahden tunnin mittainen demotilaisuus.
Miniprojekteissa työskentelyyn tulee varata yhteensä noin 6 tuntia aikaa viikossa.
Kurssin läpäisyn edellytyksenä on hyväksytysti suoritettu tai hyväksiluettu miniprojekti.
Miniprojektit tapaavat asiakasta kampuksella.
Miniprojektista lisää täällä.
Miniprojektin hyväksilukeminen
Miniprojektiin osallistuminen ei ole välttämätöntä jos täytät työkokemuksen perusteella tapahtuvan Ohjelmistoprojektin (10 op) hyväksiluvun edellyttämät kriteerit.
Kriteerit selviävät täältä kohdasta Laaja suoritus: Ohjelmistoprojekti
Toisin kuin Ohjelmistoprojektin hyväksilukuun, miniprojektin hyväksilukuun vaaditaan ainoastaan kolmen kuukauden työkokemus.
Jos hyväksiluet miniprojektin työkokemuksella, kerro asiasta sähköpostitse (matti.luukkainen@helsinki.fi) siinä vaiheessa kun olet tehnyt ensimmäisen viikon tehtävät.
HUOM: miniprojektin hyväksiluku tapahtuu lähettämällä email osoitteeseen matti.luukkainen@helsinki.fi, eli ÄLÄ LÄHETÄ MAILIA osoitteeseen kumpula-student@helsinki.fi.
Kurssin arvostelu
Kurssilta on jaossa yhteensä 40 pistettä, jotka jakautuvat eri komponenttien kesken seuraavasti
- laskarit 10 pistettä
- luentoihin liittyvät monivalintatehtävät 2 pistettä
- viikoittaiset ohjelmointi/versionhallinta/konfigurointitehtävät 8 pistettä
- miniprojekti 11 pistettä
- koe 18 pistettä
- osallistuminen paikan päällä vierailuluennoille 1 piste (0,33 pistettä yhdestä vierailuluentokertaläsnäolosta, eli täydet pisteet saa kolmella osallistumiskerralla)
Arvosanaan 1 riittää 20 pistettä, arvosanaan 5 tarvitaan 36 pistettä.
Läpipääsy edellyttää lisäksi miniprojektin hyväksyttyä suoritusta (tai hyväksilukua) ja vähintään puolet kokeen pisteistä. Lisäaikaa kokeeseen haetaan sähköpostilla opettajalta (matti.luukkainen@helsinki.fi).
Jos hyväksiluet miniprojektin, kokeen ja laskarien pistemääräsi skaalataan kertomalla 40/29:llä ja arvosana määritellään skaalatun pistemäärän perusteella.
Laskarien pisteytysperusteet
Viikoittaisista monivalintatehtävistä on siis tarjolla 2 kurssipistettä. Täysiin kurssipisteisiin riittää 90 % monivalintakysymyspisteistä (mvp).
Pisteet tulevat seuraavan kaavan mukaan:
| monivalintapisteitä | kurssipisteitä |
|---|---|
| 4.5 | 2 |
| 4.0 | 1.5 |
| 3.5 | 1 |
| 3.0 | 0.5 |
| 2.5 | 0 |
Kaikki monivalintatehtävät ovat joukkoja väittämiä, joista jokainen voi olla oikein tai väärin. Jokaisen viikon monivalintakysymyksistä on tarjolla yksi mvp, joka lasketaan seuraavan kaavan mukaan:
- jos oikeatVastaukset/vaittamaLukumaara on pienempi tai yhtä suuri kuin 0.45, tuloksena on 0 mvp:tä.
- jos oikeatVastaukset/vaittamaLukumaara on suurempi kuin 0.45, kasvaa mvp-määrä lineaarisesti siten, että kaikkien kohtien ollessa oikein saa yhden mvp:n.
Normaaleista laskareista on tarjolla 8 kurssipistettä. Täysiin kurssipisteisiin edellytetään 90 % normaalien laskareiden tekemistä. Yhden kurssipisteen saa tekemällä 10 % tehtävistä, ja tästä pistemäärä kasvaa lineaarisesti täysiin pisteisiin asti. Esimerkiksi 50 % tehtävistä tuo 4,5 kurssipistettä.
Monivalintojen korvaaminen luentopäiväkirjalla
Kurssin viikkojen 1-5 luentoja kertaavat monivalintatehtävät (2/40 pistettä). Monivalinnat ovat herättäneet tunteita, en ole itsekään monivalintojen fani. Hyödyt ovat kuitenkin kiistattomat, monivalintojen käyttöönoton jälkeen kokeiden tulokset ovat parantuneet. Tämä on linjassa ns. testausvaikutuksen (engl. testing effect, retrieval practice) kanssa: asioiden aktiivinen mieleen palauttaminen tehostaa oppimista selvästi enemmän kuin pelkkä materiaalin uudelleenlukeminen (Roediger & Karpicke 2006).
Monivalinnoille on tarjolla myös vaihtoehto, viikoittainen luentopäiväkirja!
Luentopäiväkirja on noin A4:n kokoinen omin sanoin tehty yhteenveto viikon luentojen aihepiireistä. Muoto voi olla melkein mikä vaan, joko proosatekstiä, lista ranskalaisia viivoja tai vaikkapa mind map. Luentopäiväkirjan voi tehdä joko koneella tai käsin.
Luentopäiväkirja ei kuitenkaan missään tapauksessa saa olla plagiaatti (ts. luentomateriaalin copy paste) tai esim. tekoälyllä generoitu. Tällainen tulkitaan opintovilpiksi ja käsitellään HY:n vilppikäytänteiden mukaisesti.
Kunkin viikon luentopäiväkirjan deadline on viikon sunnuntai klo 23:59, palautus tapahtuu sähköpostitse matti.luukkainen@helsinki.fi. Viikon palautus tuo 0–1 monivalintapistettä. Alle yhden pisteen saa lähinnä silloin, jos luentopäiväkirjaa ei ole tehty tosissaan. Luentopäiväkirjoista koostuvat monivalintapisteet muuntuvat kurssipisteiksi kuten normaalit monivalintapisteet, ks. edellinen luku.
HUOM ei ole mahdollista tehdä osalla viikoista monivalintoja ja osalla luentopäiväkirjoja. Molemmat saa toki tehdä, ja tällöin kurssipisteet määrittyvät sen mukaan kumpi menee paremmin. Eli jos päätät tehdä luentopäiväkirjoja, tee niitä ensimmäisestä viikosta lähtien.
Versionhallinta 1 op
Saat bonuksena suoritusmerkinnän opintojaksolta Versionhallinta 1 op tekemällä kaikki tämän kurssin versionhallintatehtävät (merkitty tehtävän yhteyteen) ja suorittamalla hyväksytysti miniprojektin (tai hyväksilukemalla sen).
Luennot - laskuharjoitukset - miniprojekti
Kurssi siis sisältää kolme pääkomponenttia, luennot, viikoittaiset laskuharjoitukset sekä miniprojektin. Komponentit ovat luonteeltaan melko erilaisia, ja se on joskus aiheuttanut hämmennystä opiskelijoiden keskuudessa.
Kurssin luennoilla keskitytään pääosin ohjelmistokehityksen teoriaan ja käsitteistöön. Laskareista monivalintatehtävät liittyvät kunkin viikon luentoihin.
Ohjelmointia, versionhallintaa, automatisoitua testaamista ja tekoälyn hyödyntämistä käsittelevien teknisempien tehtävien aihepiirejä ei taas luennoilla käsitellä oikeastaan ollenkaan (lukuun ottamatta testaukseen liittyvää teoriaa). Tekoälytehtäviin liittyvä teoria on erillisessä materiaalissa Tekoäly ohjelmistotuotannossa, jota luennoilla sivutaan vain vähän.
Miniprojektin ideana taas on yhdistää luentojen teoria ja laskareissa käsitellyt teknisemmät asiat, ja soveltaa niitä käytännössä pienessä ohjelmistoprojektissa.
Kokeessa suurin paino on teoriassa ja sen soveltamisessa käytäntöön. Laskareiden teknisimpiä asioita, kuten versionhallintaa, ei kokeessa kysytä. Tarkemmin kokeesta ja siihen valmistautumisesta kurssin viimeisellä luennolla.
Kuten pian nähdään, ohjelmistotuotanto kattaa suuren kirjon erilaisia asioita alkaen ihmisten johtamisesta aina teknisimpiin komentoriviltä suoritettaviin operaatioihin asti. Sama heijastuu myös kurssin rakenteessa, kurssilla on erihenkisiä komponentteja, jotka kaikki ovat yhtä tärkeitä, ja jokaisella on oma painoarvonsa kurssin arvostelussa. Teoria-asioita arvioidaan koemenestyksen perusteella, käytännöllisimpiä asioita taas “jatkuvana arviona” laskareista kertyvien pisteiden ja miniprojektissa suoriutumisen perusteella.
Aikataulu
Viikko 1
- Luento 1: maanantai 26.10. klo 12-14 B123
- Johdanto
- Ohjelmistotuotantoprosessin vaiheet
- Ketterä ohjelmistokehitys
- tallenne: youtube, unitube
- vuoden 2025 tallenteet
- Luento 2: tiistai 27.10. klo 12-14 B123
- Laskarit
- Luentojen 1 ja 2 monivalintatehtävät deadline sunnuntai 1.11. klo 23:59:00
- ohjelmointi/versionhallinta/konfigurointitehtävät deadline maanantai 2.11. klo 23:59
Viikko 2
- Luento 3: maanantai 2.11. klo 12-14 B123
- Vaatimusmäärittely
- Ketterä vaatimusten hallinta
- tallenne: youtube, unitube
- vuoden 2025 tallenteet: youtube, unitube
- Luento 4: tiistai 3.11. klo 12-14 B123
- Ketterä vaatimusten hallinta jatkuu
- Sprintin suunnittelu ja hallinta
- tallenne: youtube, unitube
- vuoden 2025 tallenteet: youtube, unitube
- Laskarit
- Luentojen 3 ja 4 monivalintatehtävät deadline sunnuntai 8.11. klo 23:59:00
- ohjelmointi/versionhallinta/konfigurointitehtävät deadline maanantai 9.11. klo 23:59
Viikko 3
- Luento 5: maanantai 9.11. klo 12-14 B123
- Laadunhallinnan perusteet
- vuoden 2025 tallenteet: youtube, unitube
- Luento 6: tiistai 10.11. klo 12-14 B123
- Ketterien menetelmien testauskäytänteet
- vuoden 2025 tallenteet: youtube, unitube
- Laskarit
- monivalintatehtävät deadline sunnuntai 15.11. klo 23:59:00
- ohjelmointi/versionhallinta/konfigurointitehtävät, deadline maanantai 16.11. klo 23:59
- Miniprojekti
- Aloitustilaisuudet (jokainen osallistuu yhteen)
- ma 9.11. klo 14–16 C220
- ti 10.11. klo 14–16 D122
- ke 11.11. klo 16–18 C220
- to 12.11. klo 10–12 BK114
- to 12.11. klo 14–16 B222
- Aloitustilaisuudet (jokainen osallistuu yhteen)
Viikko 4
- Luento 7: maanantai 16.11. klo 12-14 B123
- Tuotannossa tapahtuva laadunhallinta
- DevOps
- vuoden 2025 tallenteet:
- Luento 8: tiistai 17.11. klo 12-14 B123
- Arkkitehtuurisuunnittelu
- Arkkitehtuuri ketterissä menetemissä
- Olio/komponenttisuunnittelu
- vuoden 2025 tallenteet: youtube, unitube
- Laskarit
- monivalintatehtävät deadline sunnuntai 22.11. klo 23:59:00
- ohjelmointi/versionhallinta/konfigurointitehtävät, deadline maanantai 23.11. klo 23:59
- Miniprojekti
- Asiakastapaamiset (sprintin 1 review, sprintin 2 suunnittelu)
Viikko 5
- Luento 9: maanantai 23.11. klo 12-14 B123
- Vierailuluennot
- Osallistumisesta paikan päällä on jaossa 1 kurssipiste (0.33 pistettä per kerta)
- Luento 10: tiistai 24.11. klo 12-14 B123
- Lauri Suomalainen (Teamit): Ohjelmistotuotanto kokonaisuutena: DevOps, tiimitopologiat ja platform engineering
- Laskarit
- monivalintatehtävät deadline sunnuntai 6.12. klo 23:59:00
- ohjelmointi/versionhallinta/konfigurointitehtävät, deadline maanantai 30.11. klo 23:59
- Miniprojekti
- Asiakastapaamiset (sprintin 2 review, sprintin 3 suunnittelu)
Viikko 6
- Luento 11: maanantai 30.11. klo 12-14 B123
- Laajan skaalan ketterä ohjelmistokehitys
- Ketterien menetelmien käyttö ja hyödyt tutkimuksen valossa
- vuoden 2025 tallenteet: youtube, unitube
- Vierailuluennot
- Luento 12: tiistai 1.12. klo 12-14 B123
- Ville Nordberg (Trail openers): Voiko tekoälyä tehdä kestävästi?
- Irene Nikkarinen (Kesko): Datatieteilijän elämää
- Laskarit
- ohjelmointi/versionhallinta/konfigurointitehtävät, deadline maanantai 7.12. klo 23:59
- Miniprojekti
- Asiakastapaamiset (sprintin 3 review, sprintin 4 suunnittelu)
Viikko 7
- Vierailuluennot
- Osallistumisesta paikan päällä on jaossa 1 kurssipiste (0.33 pistettä per kerta)
- Luento 13: maanantai 7.12. klo 12-14 B123
- Olli Warro (Bought): Ohjelmistokehittäjä sarjayrittäjänä
- Matti Paksula (Donut Lab): Ohjelmoijasta ohjelmistotuottajaksi
- Luento 14: tiistai 8.12. klo 12-14 B123
- Kasper Hirvikoski (Unity): Ohjelmistoprojektien johtaminen
- Aleksandr Tereshchenko ja Risto Mikkola (Unity): AI usage at Unity
- Laskarit
- ohjelmointi/versionhallinta/konfigurointitehtävät, deadline sunnuntaina 20.12. klo 23:59
- Miniprojekti
- Loppudemot
- ti 8.12. klo 14–16 B123
- ke 9.12. klo 10–12 B123
- Loppudemot
Viikko 8
- Kurssikoe tiistaina 15.12. klo 13-16 A111 ja B123, ilmoittautuminen viimeistään la 5.12. klo 23.59, ohje ilmoittautumiseen
Typoja materiaalissa
Kun huomaat kurssimateriaalissa kirjoitusvirheitä, tee korjausehdotus. Kurssimateriaali on repositoriossa https://github.com/ohjelmistotuotanto-hy/ohjelmistotuotanto-hy.github.io tiedostoissa osa0.md jne.
Muutosehdotuksen tekeminen aloitetaan painamalla tiedoston kynä-symbolia. GitHub tekee tällöin repositoriosta automaattisesti oman kopion (fork).
Kun teksti on editoitu halutunkaltaiseksi, painetaan oikean yläkulman Commit changes… -painiketta, kirjoitetaan muutokselle lyhyt kuvaus ja valitaan Propose changes.
Tämän jälkeen muutosehdotuksesta luodaan vielä pull request painamalla Create pull request.
Ja kun kurssihenkilökunta mergeää pull requestin, typo korjautuu materiaalista.