5. Klaidų taisymas (debug)

Klaidų tipai ir taisymo technikos


Pamokos tikslas - paskatinti klysti, daug ir dažnai.


Prieš pradėdami veiklą, padiskutuokite, ar dažnai klystama? Kaip mokiniai jaučiasi, kai suklysta? Ar gali klaida būti gera, sėkminga?  


Klaidą galima matyti kaip nesėkmę, bet geriau ją matyti kaip naują galimybę kitokiam sprendimui ar naujam bandymui, taigi radus klaidą reikia džiaugtis! Įkvėpimui - išradimai, atsiradę per klaidą.


Programuojant klaidos yra neišvengiamos ir beveik būtinos. Todėl jos turi netgi savo pavadinimą - „bug“ (vabalas), taisyti klaidas - debug, debug’inti. Pavadinimas kilo iš kompiuterio techninio gedimo, kurį iš tikrųjų sukėlė jame įsivėlęs kandis. Nuo tada, jei programa turi klaidų, sakoma, jog ji turi bug’ų.


Yra netgi atskira testuotojų specialybė. Šių žmonių darbas - kompiuterinėse programose ieškoti klaidų.


Kokios gali būti klaidos?

  • Spausdinimo klaida, pvz. praleista raidė kintamojo pavadinime. Tokias klaidas dažniausiai „pamato“ tam tikros programos, atpažįstančios klaidas. Jos nurodo, kokia tai klaida bei kurioje kodo eilutėje. App Lab šį darbą atlieka Debug Console (apie ją vėliau).   

  • Spausdinimo klaidos, kurių programa neatpažįsta, bei kitos smulkios klaidos. Dažniausiai sunkiai randamos, bet lengvai ištaisomos. Pavyzdžiui, trūkstami skliausteliai uždavinyje x + y * z vietoje, parametrai sukeisti vietomis, pvz.,  panaudota komanda button (id, text), kuri sukuria mygtuką su nurodytu ID bei mygtuko tekstu, bet programuotojas per klaidą sukeičia parametrus vietomis ir įrašo tekstą vietoje ID ir atvirkščiai.

  • Loginės klaidos, t.y. neteisingas algoritmas: bloga įvykių seka, komanda naudojama ne pagal paskirtį ir pan. Tai sunkiausiai ištaisomos klaidos, dažnai prireikia tiesiog sukurti algoritmą iš naujo, permąstant visą logiką dar kartą.

Klaidų taisymo (debug’inimo) technikos


Nėra vieno teisingo būdo ieškoti klaidų. Turi elgtis tarsi detektyvas: įtarti, šnipinėti, žiūrėti iš arti ir iš toli. Čia kelios technikos/būdai, kurie gali padėti:

  • Dažnas testavimas programos kūrimo metu padeda klaidų išvengti arba greitai jas atrasti.  

  • Registruoti/spausdinti duomenis programos metu. Pavyzdžiui, jei neteisingai skaičiuojami žaidėjo taškai žaidimo metu, console.log komandos pagalba galima žaidžiant spausdinti taškų skaičių ir šitaip atsekti, kurioje programos vietoje nutinka klaida.

  • Raskite vietą, kurioje nutinka problema ir ieškokite klaidos nuo tos vietos į viršų, t.y. į programos pradžią.  

  • Jei programa ilga, išskaidykite ją į mažesnes dalis. Dalinkite per pusę, jei reikia - dar per pusę ir ieškokite klaidos ten. Neradę, pereikite prie kitos dalies.

  • Jei klaida atsirado neseniai, galima atkurti anksčiau išsaugotą programos versiją ir paskutinę dalį kurti iš naujo. 


Patarimai:

  • Klaida gali būti ne toje vietoje, kurioje tikiesi ją rasti. Dažnai nutinka, kad tyrinėji ir daug laiko praleidi prie neteisingos kodo vietos. Būk atviras ir kritiškai peržiūrėk ir kitas programos dalis.  

  • Pabandyk problemą įgarsinti - paaiškink ją sau ar draugui.  

  • Patikrink duomenis, kuriuos įveda vartotojas. Gal bėda juose, o ne pačioje programoje?

  • Atsitrauk. Nenaudinga praleisti daug laiko ieškant tos pačios klaidos, tai neefektyvu. Geriau atsitraukti, daryti kitus darbus, vėliau vėl grįžti.

Radus klaidą ir ją taisant, svarbu galvoti apie visą programą - ar nepažeisime kitos jos dalies, ir nesukursim dar krūvos naujų bug’ų?


Debug galimybės App Lab


Console.log komanda (Variables komandų kategorijoje) atspausdina tekstą debug konsolėje. Ši komanda padeda suprasti, ar įvyko suprogramuotas įvykis, ar/kaip pasikeitė kintamojo reikšmė ir pan. Programėlės vartotojas ar žaidėjas šio teksto nemato - jis skirtas tik programuotojui.


Watch funkcija leidžia stebėti, kaip keičiasi kintamojo reikšmė.



Aktyvus apšilimo žaidimas


Šis žaidimas padės mokiniams atsipalaiduoti ir juoktis iš savo klaidų.

Trukmė: 10-20 min.

Dalyvių skaičius: 15+ (kuo daugiau, tuo smagiau)


Eiga:

Dalyviai sustoja ratu (veidu į ratą), susikimba rankomis.

Komandos: šok į vidų, šok laukan, šok į kairę, šok į dešinę.

I lygis. Veiklos vadovas balsu sako komandą ir atlieka tą veiksmą, dalyviai daro lygiai tą patį. Pakartokite 8-10 kartų.

II lygis. Dalyviai balsu pasako priešingą komandą nei veiklos vadovas, tačiau atlieka teisingą veiksmą (pvz., jei vadovas sako „šok į kairę“, dalyviai sako „šok į dešinę“, tačiau iš tikrųjų šoka į kairę)

III lygis. Dalyviai balsu pakartoja veiklos vadovo komandą, tačiau atlieka priešingą veiksmą (pvz., jei vadovas sako „šok į kairę“, dalyviai sako „šok į kairę“, tačiau iš tikrųjų šoka į dešinę)


Techninė užduotis


Ištaisyk klaidas


1. Spausdinimo bei loginės klaidos, randamos „plika akimi“, be papildomų programų


Užduotis. Šioje programoje piešiama komandų pagalba. Ištaisykite programą, kad paspaudus mygtuką „Eiti“, būtų piešiama linija, o paspaudus mygtukus „Į kairę“ ir „Į dešinę“, rodyklė suktųsi į atitinkamą pusę.

Užduoties programa: http://tinyurl.com/vezlys1

Programa-atsakymas: http://tinyurl.com/vezlys2

Užuominos:

  • Ar teisingi mygtukų pavadinimai (ID)? Juos patikrinti galima užvedus pelytę ant norimo mygtuko Design skiltyje;

  • Ar visi mygtukai suprogramuoti?

  • Ar panaudotos teisingos komandos?

  • Ar pasirinktas teisingas įvykis?

Atsakymai.

  1. Neteisingas pirmojo mygtuko ID. Jis turėtų būti „eiti“

  2. Neteisingas pirmojo mygtuko įvykis, jis turėtų būti click. (Dabar piešiama nuspaudus bet kurį mygtuką klaviatūroje)

  3. Nesuprogramuotas mygtukas „Į dešinę“

  4. Mygtukas „Į kairę“ šiuo metu sukasi į dešinę. Naudokite komandą turnLeft

Kai mokiniai atliks užduotį, pasiūlykite nupiešti ką nors neįprasta rodyklių pagalba, pvz., raketą ar smegenis. Žingsnių ilgį ir pasisukimo kampą galima pakeisti didinant/mažinant skaičius pačiose komandose.

2. Klaidos, kurioms rasti reikės debug konsolės.


Užduotis. Šioje programoje mygtukais galime valdyti taškų skaičių. Ištaisykite programą, kad paspaudus mygtuką +1, pridėtume 1, o paspaudus mygtuką -1, atimtume 1 skaičių.

Užduoties programa: http://tinyurl.com/taskai1

Programa-atsakymas: http://tinyurl.com/taskai2


Panaudokite Watch funkciją kintamojo reikšmės kitimui stebėti.


Užuominos:

  • Ar visur teisingas kintamojo pavadinimas?

  • Ar teisingi matematiniai veiksmai?

  • Ar komandos sudėliotos gera logine seka? Kodėl atimant neskaičiuoja pirmojo taško?

  • Ar žaidimas pradedamas nuo 0 taškų?

Atsakymai.

  1. var taskai turi būti lygus 0 - žaidimą pradedame nuo nulio taškų.

  2. 3 eilutėje neteisingai užrašytas kintamojo pavadinimas

  3. 7 ir 8 eilutės turėtų būti sukeistos vietomis - atimame tašką ir tik tada parodome rezultatą

  4. Atimties veiksme turime atimti 1 vietoje 2

Kas toliau? Anksčiau užbaigusiems užduotį mokiniams pasiūlykite pratęsti programą, pvz., jei žaidėjas surenka daugiau nei 10 taškų, pasikeičia ekranas.

Atsakymas:



Eiga:

  1. Pasidalinkite projekto nuoroda, paprašykite dalyvių jį remiksuoti, ieškoti ir taisyti klaidas, Jei reikia, pasidalinkite užuominomis.

  2. Tegul dalyviai dirba savarankiškai arba konsultuojasi tarpusavyje.

5 views