wiki:TyypillisiaDemevikoja
Last modified 9 months ago Last modified on 2017-03-12 17:48:11

Käytä sivun TIM-versiota


































Tyyppillisiä demojen vikoja

0. Palautusongelmia

  • java-ohjelmat pitää palauttaa .java -tiedostoina, ei .txt-tiedostoin
  • palautettu saman tehtävän vastaus monta kertaa ja pisteitä tulee liikaa (saman tiedoston saa merkitä useampaankin tehtävään, mutta pisteiden summa pitää olla oikein)

1. Kommentointi

  • JavaDoc kommentointi puuttuu tai vaillinaista!!!
  • ei kommentoitu muuttujien merkitystä
  • ei kommentoitu paluuarvoa (@return)

2. Testaus

  • testejä puuttuu
  • testejä ei edes ole koskaan ajettu (eivät käänny)
  • testattu jotakin tehtävän kannalta täysin epäoleellista (jotta voidaan sanoa että on testi...)
  • testit liian suppeita Esim:
         * funMin(f,-4.0,4.0,0.005) ~~~ -1.0;
    
    ei riitä, koska tämän testin voisi "tyydyttää" funktiolla jossa on
         return -1;
    
  • testeissä turhia testejä pidentäviä apumuuttujia Esim. turhaa:
         * String syote5 = "3.2 $";
         * pilkoSyotteesta(syote5) === true;
    
    kun voisi olla
         * pilkoSyotteesta("3.2 $") === true;
    
    Tai
         * double testi1;
         * testi1 = rv.annaKerroin("mk");
         * testi1 ~~~ 1.0;
    
    kun voisi olla
         * rv.annaKerroin("mk") ~~~ 1.0;
    
    Tai
         *  double maara = 10.0;
         *  String valuutta = "skr";
         *  laskeKurssi(maara, valuutta) ~~~ 6.0;
    
    kun voisi olla
         *  laskeKurssi(10.0, "skr") ~~~ 6.0;
    

  • testeissä käytettävät muuttujan nimet huonoja (testi ei ole hyvä muuttujan nimi)
  • testit huonoja, esim lisäyksen jälkeen testataan vain että määrä kasvoi, ei miten datasisältö muuttui
  • testataan lukemalla tiedoston sisältöä jota testiohjelma ei ole itse kirjoittanut => testi hajoaa jos tiedoston sisältöä muutetaan

3. Koodaus

  • ei-olio -ohjelmia, eli käytetty kohtuuttomasti static-määrettä
  • huono: kaksi rinnakaista taulukkoa, parempi: taulukollinen valuutta-olioita.
  • turhaa "kikkailua" tyyliin:
        if ((s = sc.nextLine()).equals("loppu")) break;
    
    kun selkeämpi olisi
         s = sc.nextLine();
         if ( s.equals("loppu") ) break;
    
  • jos on funktio jonka palauttaa jotakin, niin edes virhetilanteessa ei saa silloin tulostaa (tehtävä on palauttaa tulos, ei tulostaa, virhe hoidetaan tällöin poikkeuksella).
  • jos perusyksikkö 1. tehtävässä vaihdetaan muuksi kuin mk, niin ohjelma edelleen tulostelee markkoja.
  • kunnon muuttajien nimet! a, b jne eivät sellaisia ole mutta kuin silloin, kun lähdekaavoissa esiintyvät.
  • aliohjelma tekee vaan oman pienen selkeän hommansa
  • tiedostoja jää sulkematta
  • O(n2) algoritmejä silloin kun O(n) tai jopa parempikin riittäisi (tyypillisesti mm. poistaminen)