Viikko 6 - Testaus ja varmentaminen

Johdanto

Esimerkkivastaukset

Näissä harjoituksissa tutustutaan ohjelmien testaamiseen. Testaus on jokaisen ohjelmoijan arkipäivää ja se on tyyppien jälkeen tärkein tapa tuottaa konsistenttia koodia. Testaaminen on työläämpää kuin tyypintarkastus, mutta vähemmän tehokasta ja vähemmän vaivalloista kuin todistaminen.

Tämä kappale perustuu Real World Haskellin lukuun 11.

Funktio-ohjelmoinnin sivuvaikutukset Kiitokset kuvasta Eerik Kukkoselle.

Funktio-ohjelmoinnin sivuvaikutukset 1

Tehtävänanto

Maatalouden tutkimusinstituutti tekee tutkimusta siitä, kuinka eri lannoitteet vaikuttavat pellolla. Johtuen epätarkoista traktorikuskeista, lannoitteita ei kuitenkaan saada aina sinne minne pitää. Lannoitetut alueet pystytään kuitenkin aina tekemään kompassiakselien suuntaisiksi suorakaiteiksi ja niiden sijainti tiedetään.

Toteuta kätevä ja turvallinen kirjasto tälläisen tutkimusaineiston käyttöön. Kirjaston tulee pystyä käsittelemään suorakaiteita ja niihin liittyviä biomassa- ja lannoitearvoja. Koska lannoite- ja mittausalat voivat olla osittain päällekkäin, niin kirjasto tarvitsee ehdottomasti funktiot, joilla voidaan laskea, leikkaavatko nämä alat, millainen suorakaide leikkaus on, mikä on suorakaiteiden tai niiden yhdisteen pinta-ala sekä määritellä pienin mahdollinen suorakaide, joka kattaa koko mittausjoukon.

Operaatiot

  1. Mitä tyyppejä määrittelisit?
  2. Mitä funktioita ja operaatioita määrittelisit?

Luokat

  1. Sopivatko yo. tyypit mihinkään Haskellin perustyyppiluokista? Onko mikään niistä Monoid, Functor, Applicative tai Monad? Esimerkiksi suorakaide, johon on liitetty jokin mittaustieto, lienee funktori mittaustiedon suhteen.
  2. Keksitkö muita hyödyllisiä tyyppiluokkia?

Toteutus

  1. Toteuta yo. määritelmät. Huomaa, että demokerta on ehkä mielekkäämpi, jos teet toteutukset hieman huolimattomasti ja testaamatta. Voit myös tehdä toteutukset samaan aikaan seuraavan tehdävän kanssa.

Lainalaisuudet

  1. Mitä lainalaisuuksia funktioidesi ja operaattoreidesi kuuluu noudattaa, että malli on oikea? Esimerkkeinä voit käyttää seuraavia:

    1. ‘’Kahden suorakaiteen yhdisteen pinta-alan täytyy olla pienempi tai yhtä suuri kuin samojen suorakaiteiden yhteenlaskettu pinta-ala.’’
    2. ‘’Jos suorakaiteet leikkaavat, leikkauksen ala poikkeaa nollasta.’’
    3. Käyttämiesi tyyppiluokkien lainalaisuudet.
  2. Kirjoita lainalaisuudet formaalisti QuickCheck-määreinä (ks. Real World Haskell, kappale 11).

  3. Testaa lainalaisuutesi QuickCheckillä.

  4. Löysitkö virheitä? Kerro, mitä virheitä teit, ja mikä testi paljasti ne.

  5. Testaa HPC ohjelmalla, että testisi kattavat koko kirjaston.

  6. Todista (käsin) mielestäsi olennaisin tai heikoimmin QuickCheckille sopiva lainalaisuus.

(Tähti) Suoritusaika

  1. Selvitä miten Criterion-moduli toimii. (Ks. myös kurssin video suoritusajan mittauksesta)
  2. Selvitä mikä on hitain operaatio kirjastossasi.
  3. Paranna hitaimman operaation tehokkuutta. (Vastaukseksi voit esittää tekemäsi muutoksen)

(Tähti) Visualisaatio

  1. Toteuta myös funktiot alueiden visualisointiin

Reflektio

Tärkeää: Tämäkin on tehtävä!

  1. Listaa kaikki epäselväksi jääneet asiat, jotta osaat kysyä niistä demotilaisuudessa.
  2. Käy ryhmäsi kanssa läpi kaikki tehtävät ennen torstain demopalautusta
  3. Pohtikaa ryhmässä lyhyesti

  1. Kiitokset kuvasta Eerik Kukkoselle.

blog comments powered by Disqus