Arvutiteaduse instituut
  1. Kursused
  2. 2023/24 kevad
  3. Objektorienteeritud programmeerimine (LTAT.03.003)
EN
Logi sisse

Objektorienteeritud programmeerimine 2023/24 kevad

  • Kodutööd ja praktikumid
  • Loengud
  • Kursuse korraldus
  • IDE juhend
  • Süvendusrühm
  • Silumisest

Silumisest

Või «Appi, mu kood on katki!»

Selles dokumendis on Eclipse näited heleda taustaga ja IntelliJ näited tumeda taustaga!

Mu kood on katki ja viie minuti pärast maailm lõppeb/pomm plahvatab/kontrolltöö saab läbi; vii mind kohe asja tuumani!

Mis on silumine?

«See ei ole defekt — see on dokumenteerimata funktsionaalsus.»

—TUNDMATU PROGRAMMEERIJA

Silumine on defektide ja vigade leidmine ja parandamine.

Vaata lisaks:
https://et.wikipedia.org/wiki/Silumine
https://en.wikipedia.org/wiki/Debugging

Üldised soovitused

Silumisest üldiselt

«Kõik teavad, et silumine on kaks korda raskem kui programmeerimine. Seega kui sa programmeerid nii kavalalt kui oskad, kuidas sa peaksid oskama seda siluda?»

—BRIAN KERNIGHAN

Ennetamine

Silumine ei ole enamike inimeste lemmiktegevus. Kuna kõik aga teevad vigu, siis tuleb seda aeg-ajalt siiski teha. Seega on kasulik kirjutada koodi arvestades sellega, et seda tuleb tulevikus muuta ja siluda.

  • Oluline on kirjutada «miks» kommentaare: mitte mida tehakse(see on ju kirjas koodis), vaid miks tehakse:
  • Mitte kirjutada liiga keerulist koodi, sest seda on raskem analüüsida
  • Jälgida ühe töö printsiipi: funktsioon peaks tegema üht asja

Silumisprotsess

«Arvutite ajaloos pole silumine kunagi võtnud üllatavalt vähe aega.»

—STEVEN LEVY

  • Muuda üht asja korraga: see lihtsustab põhjuse leidmist
  • Selgita oma koodi kellelegi, kasvõi kummipardile: see aitab ise koodi mõista.
  • Sektsioon: silumistehnikad

Vaata lisaks:


https://www.ibm.com/support/knowledgecenter/en/SSY2VQ_2.0.0/com.ibm.aix.pli.doc/ibmx2mst131.htm

https://onextrapixel.com/10-useful-tips-for-debugging-and-troubleshooting-in-programming/
https://rubberduckdebugging.com/

Java

«Kui sa õpid programmeerima Javas, on sul alati tööd!»

—PATRICIA SEYBOLD, 1998

  • Kuula kompilaatori hoiatusi ja soovitusi

IntelliJ:

  • Analyze→Inspect Code
    • Eriti Probable Bugs
  • Välja lülitada Internationalization issues ja Spelling, v.a. inglise keeles programmeerides

Eclipse:

  • Kolmanda osapoole laiendus: FindBugs
    • Help→Install New Software…
    • http://findbugs.cs.umd.edu/eclipse
    • Järgi instruktsioone ja taaskäivita Eclipse
    • Paremklõps projektil ja Find Bugs

Invariandid(assertid)

Assert-laused ehk invariantide kontroll lubab koodis kontrollida tingimusi, mis peaksid alati tõesed olema. Sellise tingimuse mittekehtimine peaks näitama viga programmi koodis. Nende kontrollimise saab väljalaskeversioonis välja lülitada.

Vaata lisaks:
https://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

Silumistehnikad

«Algaja — ma leidsin vea üles
Kogenu — ma leidsin ühe vea üles
»

—FIONA CONDON

Kood ei kompileeri

  1. Loe veateadet!
  2. IntelliJ: Alt+Enter

Kood kompileerib, aga teeb valesid asju

Baastehnikad:

  1. Loe kood mõttega läbi!
  2. Kasuta silurit, et jälgida programmi käiku
  3. Logi — lihtne, aga sageli vähem efektiivne kui siluri kasutamine
    1. Selleks on sobilikum System.err; kasutatakse samamoodi kui System.out

Kood hangub

  1. Logi — kiiresti leiab lõputu tsükli
  2. Pane siluriga pausile ja vaata pinujälge(stack trace)

Siluri kasutamine

Silur on tööriist, mis lubab interaktiivselt siluda. Koodi saab huvitavades kohtades sammhaaval jooksutada ning jälgida muutujate väärtuseid.

1 Siluri ajastu kivimite lademed Saaremaal (Allikas: Tartu Ülikooli Loodusmuuseumi geoloogiamuusemum)
  • Lisa katkepunkte(breakpoint)
    • Selleks kliki koodist vasakul reanumbri kõrval
      • IntelliJ: paremal üks klikk
      • Eclipse: vasakul topeltklikk
    • Koodirea kõrvale tekib mull
    • Siin peatatakse siludes jooksutamine ja minnakse silumisrežiimi
  • Katkepunkte saab lisada ka erinditile erinditüübi järgi!
    • Näiteks kui programm väljub veateatega

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
at Arvupaarisummad.main(Arvupaarisummad.java:11)

  • IntelliJ: Run→View Breakpoints(Ctrl+Shift+F8)→ →Java Exception Breakpoints
  • Eclipse: Run→Add Java Exception Breakpoint
  • Valid erinditüübi; näites ArrayIndexOutOfBoundsException
  • Nüüd peatub programm seda tüüpi erindi esinemisel ja saab vaadata programmi olekut
  • NB! Osasid erindeid juhtub Java normaalse jooksmise käigus üsna palju; kasulik on peatada ainult Uncaught korral
  • Käivita silur
    • IntelliJ: Run→Debug või Alt+Shift+F9
    • Eclipse: Run→Debug või F11
  • Tekivad erinevad variandid koos kiirklahvidega, millega saab läbi projekti sammhaaval minna.
  • Avanenud vaates(Eclipse’is tuleb selleks dialoogis Yes vajutada) saab vaadata muutujate väärtuseid ja programmi funktsioonikutsete pinu ehk teekonda main funktsioonist jooksva funktsioonini
  • Lisaks saab muutujate ja osade avaldiste kohale hiire viies näha nende hetkeväärtuseid

Inglisekeelseid juhendeid/õpetusi:

Eclipse: http://www.vogella.com/tutorials/EclipseDebugging/article.html
IntellijJ IDEA ametilik: https://www.jetbrains.com/help/idea/debugging.html
Eclipse ametlik: https://www.eclipse.org/community/eclipse_newsletter/2017/june/article1.php
Muud tööriistad, edasijõudnutele: https://www.infoq.com/articles/Advanced-Java-Debugging-Techniques

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused