GithubHelp home page GithubHelp logo

ot-harjoitustyo's Introduction

Ohjelmistotekniikka, harjoitustyö

Sanastotreeni

Sovellus on tarkoitettu vieraskielisen sanaston harjoitteluun. Sanaston sanoja voi harjoitella kirjautumatta harjoittelunäkymässä. Kirjautuneena käyttäjänä harjoittelun edistyminen voidaan tallentaa tietokantaan ja sanastoon on mahdollista lisätä omia sanoja sanojenlisäysnäkymässä. Sanat tallentuvat SQLite -tietokantaan. Tietokannan sanasto on Teemu Kerolan keräämää operating systems -sanastoa.

Python -versio

Sovelluksen sujuvan toiminnan kannalta Python -version tulisi olla vähintään 3.8.

Dokumentaatio

vaatimusmäärittely

arkkitehtuurikuvaus

työaikakirjanpito

changelog

uusin release

käyttöohje

testaus

Asennus

  1. Asenna riippuvuudet komennolla:
poetry install
  1. Käynnistä sovellus komennolla:
poetry run invoke start

Komentorivitoiminnot

Ohjelman suorittaminen

Aloita ohjelman suoritus komennolla:

poetry run invoke start

Testaus

Aloita testaus komennolla:

poetry run invoke test

Testikattavuus

Testikattavuusraportin saa tuotettua komennolla:

poetry run invoke coverage-report

Raportti löytyy htmlcov -hakemistosta.

Koodin laatu

Tiedoston .pylintrc määrittelemät tarkistukset voi suorittaa komennolla:

poetry run invoke lint

ot-harjoitustyo's People

Contributors

minnaron avatar

Watchers

 avatar

ot-harjoitustyo's Issues

Koodikatselmointi

Koodikatselmointi

Sovellus kloonattu: ke 27.4.2022 klo 14:57

Aloitan yhteenvedosta: projekti etenee hienosti. Projekti käynnistyi ongelmitta ja pyydetyt poetry run invoke - komennot toimivat. Iso osa määrittelydokumentissa kuvatuista toiminnallisuuksista on jo olemassa. Hienoa työtä!

Kommentit Poetrykomennoista ja toiminnallisuuksista

  • Kaikki poetry run invoke - komennot toimivat
  • Testit suoritettiin onnistuneesti.
  • Coverage-raportin luonti onnistui. Testien haaraumakattavuus on yli 40 prosenttia.
  • Pylint-huomioita oli viisi.

Kommentit koodista pakkauksittain

Entities

  • Luokka Person oli selkeä. Voisiko salasanan validoinnin metodeja siirtää tänne?
  • Luokka Practise oli vaikeaselkoisempi. Lukijana oli vaikea ymmärtää, mihin käyttötarkoitukseen mm. attribuutit 'self.id', 'self.new', 'self.counter_start' ja 'self.translation_id' liittyvät. Mm. nämä voisi avata viikolla kuusi docstringissä?

Service

  • Luokka UserService oli selkeä. Metodien nimistä on helppo ymmärtää, mitä mikin metodi tekee. Luokasta luotavan olion attribuutit on selkeät.
  • Luokka PractiseService oli vaikeaselkoinen aluksi. Tämä luokka hyötyisi mielestäni erityisesti huolellisesta docstring-dokumentoinnista.
    • Ymmärsinkö oikein, että kun luokan olio luodaan, kutsutaan metodia initialize(), joka mm. alustaa joitakin tietosisältöjä.
    • kutsun initialize() jälkeen näytettäisiin määritettävän uudelleen samoja tietosisältöjä, joita määriteltiin metodikutsun aikana. Onkohan näin (esim. self.__button_word_index_orig = practise_service.get_word_orig_indexes() )? Onkohan tämä tarpeellista sovelluksen toiminnan kannalta, tai onkohan jäänyt esim. sovellusta kehittäessä?
    • Toimintalogiikka yhdessä UI:n kanssa oli vaikea aluksi hahmottaa. Itselleni tätä erityisesti esim. vaikeutti, että metodi handle_button_click oli luokassa ui, vaikka nappitoiminnallisuus oli luokassa practiseView, joten koodia lukiessa piti siirtyä pitkä polku kokonaisuuden hahmoittamiseksi.

Ui

  • Näkymät luovat UI-luokat olivat mielestäni selkeitä. Hyvin muotoiltua koodia, kuvaavat nimet. Hienoa!
  • Yllä mainitsemani toiminnallisuuksien sijoittaminen eri luokkiin oli kaltaiselleni noviisikoodilukijalle vaikealukuista.

Repositoriot

  • Repositorioiden koodi oli helppolukuista ja hyvin muotoiltu.
  • Kyselyt näyttivät hyvin suunnitelluilta. Ylempänä esitinkin yhden ajatuksen toimenpiteiden ketjusta ja transaktion käyttämisestä.

Testit

  • Testit olivat selkeitä. Kattavuus ei vielä ole viikon 6 vaatimustasolla, eli testit varmaan laajenevat
  • En ollut vielä tutustunut Mock() olioihin ja opin uutta testejä tutkiessa, kiitos siitä!

Kommentit dokumentaatiosta

  • Vaatimusmäärittely oli selkeä ja hyvin kirjoitettu. Lukijana oli helppo saada käsitys toiminnallisuuksista ja tämänhetkisen toteutuksen tilasta. Hienoa!
  • Pakkauskaavio oli selkeä ja helposti ymmärrettävä.
  • Sekvenssikaavio oli itselleni vaikeaselkoinen. Mikäli ymmärsin toiminnan oikein, niin kun käyttäjä syöttää uuden sanaparin, käynnistyy seuraava tapahtumakulku:
    • UI-pakkauksen luokan AddWordsView olion metodi _save_words kutsuu Service-pakkauksen luokan WordService olion metodia _add_words (tulisiko tämän olla add_words, ilman ensimmäistä alaviivaa)
    • Tämä kutsuttu olio
      • 'tekee' aluksi käsittelytyötä annetuille argumenteille ja sitten
      • kutsuu repositorioluokan metodia add_pair_word_and_translation.
    • Tämän jälkeen repositorioluokan olio kutsuu omia metodejaan ja
      • annetut sanat käsitellään ja mahdollisesti tallennetaan,
      • sanojen ID:t palautetaan ja
      • palautetut ID:t syötetään lopuksi käännösparit sisältävään tauluun.
      • Jos tämä epäonnistuu, palautetaan Service-pakkauksen oliolle tieto epäonnistumisesta.

Meniköhän oikein? En ihan hoksannut, palautuuko tieto myös UI-pakkauksen oliolle? Sekvenssikaaviossa nuoli menee vielä tänne. Vaikka tämän kurssin asioissa tietokantaoperaatiot eivät olleet niin keskiössä, mietin, että voisiko tässä usean metodikutsun sarjassa jotakin mennä pieleen? Voisiko esim. transaktio olla turvallisempi ratkaisu tiedon tallentamiseen? Mietin, että tällöin sekvenssikaaviossakin tapahtumaketju ehkä yksinkertaistuisi.

Kommentit näkymistä

Näkymä etusivu

  • Kaikki toiminnallisuudet toimivat
  • Käyttäjänä en hoksannut aluksi, että rekisteröitymällä voin lisätä sanoja.
  • Parannusehdotus: jokin ohjaava teksti, joka ilmaisee, miksi rekisteröinti on kannattavaa.

Näkymä luo käyttäjätunnus

  • Testattu, toimii
  • salasana validoidaan, pitää olla sama salasana. Tyhjä salasana käy, kuten vaatimusmäärittelyssä olikin esitetty.
  • Muista lisätä käyttäjätunnuksen validointi. Oli vaatimusmäärittelyssä, mutta taisi puuttua vielä (tehty-merkintää ei ollut, eli on varmasti sinulla tiedossa). Nyt oli mahdollista luoda yhden merkin käyttäjätunnus.

Näkymä kirjaudu

  • Testattu, toimii niin kuin pitää
  • Salasana tarkastetaan, käyttäjätunnus tarkastetaan

Näkymä etusivu kirjautumisen jälkeen

  • Testattu, kaikki toiminnallisuudet toimivat

Näkymä Lisää sanoja

En aluksi nähnyt kaikkia widgettejä ja päädyin tämänkaltaiseen pohdintaan:

  • Logiikkaa oli vaikea oivaltaa. Näkymässä on kaksi tekstikenttää ja oletan, että molempiin on tarkoitus laittaa sana. Sitten valitaan käännettävä kieli. Onkohan käännettävä kieli vasemmassa laatikossa ja käännös oikealla? Miten syötetty sanapari tallennetaan?
  • Miten näkymästä palataan päänäkymään?
  • Miten syötetään toinen sanapari?
    Oivalsin tässä vaiheessa, että näkymää pitää hiirellä laajentaa, jotta kaikki näkymän widgetit tulevat esiin.
    Näkymän ladatessa osa widgeteistä oli piilossa
    Näkymä leventämisen jälkeen

Parannusehdotus: suosittelen varmistamaan, että käyttäjä joko näkee kaikki näkymän toiminnallisuudet näkymän latauduttua tai tietää, että näkymää pitää laajentaa.

Kun widgetit olivat esillä, logiikka oli selkeä.

  • Parannusehdotus: Käyttäjälle voisi näyttää jonkinlaisen viestin, miten sanan lisäämisen kanssa kävi. Onnistuiko lisäys? Oliko sana jo sanakirjassa?
  • Olit hienosti ratkaissut tilanteet, joissa samalla sanalla voi olla useampi merkitys toisella kielellä!

Näkymä harjoittele

  • Selkeä näkymä, käyttäjänä on helppo ymmärtää, mitä näkymässä on tarkoitus tehdä.
  • Parannusehdotus: Voisiko valittu painike jollain tavalla muuttua (esim. aktivoidun painikkeen väri muuttuu, tai painike deaktivoituu), jotta käyttäjä tietäisi, että valinta on rekisteröity?
  • Huomio: kun klikkaan kahta vasemmanpuoleista sanaa, saan virheilmoituksen 'valitse ensin yksi sana vasemmalta.' Se on epäintuitiivinen, koska käyttäjänä alan miettimään, että enkö ole juuri valinnut vasemmalta sanaa. Jos tämän jälken klikkaan oikealta sanaa (eli ensin kahta sanaa vasemmalta, sitten yhtä oikealta), saan saman virheen. Nytkin käyttäjänä mietin, että klikkasinhan minä vasemmalta ja oikealta.
  • Parannusehdotus: Samoja sanoja tuli ajoittain usein vastaan. Voisiko tätä ehkäistä jollain tavalla? Olikohan tämä vaatimusmäärittelyn jatkokehitysideoissa mainittu 'sanojen priorisointi'?

Loppusanat

Hienoa työtä tähän asti! Toivottavasti tästä palautteesta on sinulle hyötyä projektin viimeistelyvaiheessa. Tsemppiä viimeistelyyn!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.