From 59d01d11c8809701b4ef4e8d410506c8d63aad13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vili=20Sinerv=C3=A4?= Date: Sat, 24 Sep 2022 11:05:39 +0300 Subject: [PATCH] Viikon dokumentaatio --- README.md | 4 ++++ dokumentaatio/kattavuus.png | Bin 0 -> 48432 bytes dokumentaatio/testausdokumentti.md | 17 +++++++++++++++++ dokumentaatio/viikko3.md | 9 +++++++++ 4 files changed, 30 insertions(+) create mode 100644 dokumentaatio/kattavuus.png create mode 100644 dokumentaatio/testausdokumentti.md create mode 100644 dokumentaatio/viikko3.md diff --git a/README.md b/README.md index 5d19a35..b265f20 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,11 @@ ## Dokumentaatio [Määrittelydokumentti](https://github.com/ArcticCoder/markov-music-generator/blob/main/dokumentaatio/maarittelydokumentti.md) +[Testausdokumentti](https://github.com/ArcticCoder/markov-music-generator/blob/main/dokumentaatio/testausdokumentti.md) + ### Viikkoraportit [Viikko 1](https://github.com/ArcticCoder/markov-music-generator/blob/main/dokumentaatio/viikko1.md) [Viikko 2](https://github.com/ArcticCoder/markov-music-generator/blob/main/dokumentaatio/viikko2.md) + +[Viikko 3](https://github.com/ArcticCoder/markov-music-generator/blob/main/dokumentaatio/viikko3.md) diff --git a/dokumentaatio/kattavuus.png b/dokumentaatio/kattavuus.png new file mode 100644 index 0000000000000000000000000000000000000000..85c74b1c8cf40637da9adad11927f6f9446fc456 GIT binary patch literal 48432 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 literal 0 HcmV?d00001 diff --git a/dokumentaatio/testausdokumentti.md b/dokumentaatio/testausdokumentti.md new file mode 100644 index 0000000..0ec6805 --- /dev/null +++ b/dokumentaatio/testausdokumentti.md @@ -0,0 +1,17 @@ +# Testausdokumentti + +## Testien toteutus +Automaattinen yksikkötestaus on toteutettu pytest-kirjastolla ja testikattavuuden raportoinnin hoitaa coverage-kirjasto. + +## Ohjeet +Ennen testien suorittamista tulee pytest- ja coverage-kirjastot olla asennettuna käytössä olevassa ympäristössä. Testit saa suoritettua kommennolla + +`pytest src` + +projektin juurikansiosta. Testikattavuusraportin voi luoda juurikansiosta komennolla + +` coverage run --branch -m pytest src && coverage html` + +Tämän jälkeen raportti löytyy tiedostosta `htmlcov/index.html`. + +![Testikattavuusraportti. Kokonaiskattavuus 99%](https://github.com/ArcticCoder/markov-music-generator/blob/master/kattavuus.png?raw=true) diff --git a/dokumentaatio/viikko3.md b/dokumentaatio/viikko3.md new file mode 100644 index 0000000..6c1110d --- /dev/null +++ b/dokumentaatio/viikko3.md @@ -0,0 +1,9 @@ +# Viikkoraportti 3 + +Toteutin tällä viikolla varsinaisen Markovin ketjun omaa trie-tietorakennettani hyödyntäen. Varmistin ensin manuaalisesti, että toeutukseni vaikuttaa toimivalta. Tämän jälkeen kirjoitin yksikkötestauksen käyttäen pohjana omia aiempia testejäni. + +Opin uutta Markovin ketjuista, sekä pythonin tarjoamista ominaisuuksista. + +Minulla oli jälleen melko rajallisesti aikaa käytettävissä, mutta olen tyytyväinen ohjelmani etenemiseen tähän asti. Ensi viikolla toteutan varsinaisen musiikkidatan lukemisen ja melodian generoimisen. Osana tätä toteutan myös käyttöliittymän, joka tulee olemaan ohjaajan ehdotuksesta komentorivivalikko. Tavoitteena on, että ensi viikon jälkeen minulla on toteutettavana enää rytmin generoiminen yhdellä tai useammalla tavalla, sekä muut mahdolliset lopputulosta parantavat hienosäädöt ja erinnäiset säätöparametrit. Uskon vahvasti aikani riittävän tähän tavoitteeseen. + +Aikaa käytin tällä viikolla noin 5h.