Informatika 2. Udržovateľný kód

Podobné dokumenty
Návrh, implementácia a prevádzka informačného systému

TESTOVANIE SOFTVÉRU MANUÁLNE

Základy algoritmizácie a programovania

Čo je to Refactoring?

ALGORITMY A PROGRAMOVANIE VO VÝVOJOVOM PROSTREDÍ LAZARUS. Vývojové prostredie Lazarus, prvý program

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE FAKULTA INFORMATIKY A INFORMAČNÝCH TECHNOLÓGIÍ. Metodika verzií zdrojového kódu

2. Nahratie mapy pre Locus Map - formát sqlite alebo mbtiles do zariadenia (telefón, tablet) s OS Android.

ZRÝCHLENÝ PREDAJ (AJ CEZ DOTYKOVÚ OBRAZOVKU)

Organizačné štruktúry.

Task, async, await METÓ DY VÝPOČTOVEJ INTELIGENCIE A C# FA K ULTA E L E K T ROTECHNIKY A INFORMATIKY S LOVENSKÁ T E CHNICKÁ U NIVERZITA

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov

MATLAB (1) - úvod do programovania vedeckých problémov. LS 2017, 8.predn.

Užívateľská príručka. Vytvorte 1 medzi stránkami v niekoľkých jednoduchých krokoch

Automatické pohony na brány

Virtuálna Registračná Pokladnica. Modul OPD pre ios

Kajot Casino Ltd. Popis hry Classic 7

Microsoft Outlook. Stručný prehľad základných funkcií. Ing.Anna Grejtáková, SPP DFBERG

MS OFFICE OUTLOOK 2007

Import Excel Univerzál

Operačný systém Úvodná prednáška

Programovanie I. Úvod do programovania Mgr. Stanislav Horal, Katedra informatiky, FPV, UCM

SKLADOVÁ INVENTÚRA 1 VYTVORENIE INVENTÚRY. 1.1 Nastavenie skladovej inventúry

Návod na použite plaftormy ELMARK E- Business obsahuje popis hlavných možností a funkcií programu. Príručka je štruktúrovaná podľa poradia možností.

Moderné vzdelávanie pre vedomostnú spoločnosť/projekt je spolufinancovaný zo zdrojov EÚ. Grafy

PODPROGRAMY. Vyčlenenie podprogramu a jeho pomenovanie robíme v deklarácii programu a aktiváciu vykonáme volaním podprogramu.

Kajot Casino Ltd. Popis hry Turbo 27

Textový editor WORD. Práca s obrázkami a automatickými tvarmi vo Worde

MS PowerPoint - Úvod.

Stručný návod na inštaláciu Wi-Fi routra pre T-Mobile mobilný internet

Úvodná strana IS ZASIELKY Prvky úvodnej stránky:

NÁVOD NA INŠTALÁCIU A OBSLUHU SAMOOBSLUŽNÉHO AKTIVAČNÉHO PORTÁLU

Aktualizácia operačného systému Android tabletu Samsung Note 10.1 model N8010

Práca s elektronickou prihláškou SOČ

P R O L U C. POZNÁMKY individuálnej účtovnej závierky pre rok 2014

Návod na aplikáciu Mobile Pay pre Orange

Hromadná korešpondencia v programe Word Lektor: Ing. Jaroslav Mišovych

Univerzálne dia kové ovládanie TV SAT DVD AUX

V nej je potrebné skontrolovať správnosť prenesených a prepočítaných zostatkov z roku 2008.

CM WiFi-Box. Technické inštrukcie. (pre kotly PelTec/PelTec-lambda) VYKUROVACIA TECHNIKA. Domáci wifi router.

Dell S2718H/S2718HX/S2718HN/ S2718NX Dell Display Manager Návod na obsluhu

CERTIFIKAČNÉ ELEKTRONICKÉ TESTOVANIA - PERSPEKTÍVA

GPS Loc. Užívateľský manuál. mobilné aplikácie. pre online prístup do systému GPS Loc cez mobilnú aplikáciu

PROGRAMOVANIE A JEHO POZÍCIA VPREDMETE INFORMATIKA. Mgr. Ján Guniš

Import cenových akcií FRESH

Používateľská príručka k aplikácii na SOČ

Metodické usmernenie č. 4/2007 k poskytovaniu informácií prostredníctvom portálu Úradu pre dohľad nad zdravotnou starostlivosťou

Pracovné prostredie MS EXCEL 2003.

Zachovanie mentálnej mapy pri interakcií s grafom. RNDr. Jana Katreniaková PhD.

Žiadosť o poskytnutie dotácie z FPU v roku 2016

Školská sieť EDU. Rozdelenie škôl. Obsah: Deleba škôl podľa času zaradenia do projektu: Delba škôl podľa rýchlosti pripojenia:

Multihosting Užívateľská príručka

M R2454 SK

Základné informácie. k papierovej forme testovania žiakov 5. ročníka ZŠ T5-2017

P R O L E M FAKTURA Z VYDAJA OBSAH. Vystavenie faktúry z výdaja postup, podmienky... 2

Formuláre PowerPoint MGR. LUCIA BUDINSKÁ,

Seminár k záverečnej práci

Pred samotnou prácou s objednávkami odporúčame vykonať súvisiace nastavenia cez menu Firma - Nastavenie

Prevody z pointfree tvaru na pointwise tvar

Tlač do PDF a odosielanie dokladov cez . OBSAH

TomTom Referenčná príručka

Predaj cez PC pokladňu

Integrovaný systém manažérstva Nové požiadavky noriem ISO

Obr. 1 - názov podpísaného súboru/kontajnera v sivej lište

Objektovo orientované programovanie v C# ERIK KUČERA METÓDY VÝPOČTOVEJ INTELIGENCIE PREDNÁŠKA 3

Vytvorenie používateľov a nastavenie prístupov

SYSTEMATICKÉ VZDELÁVANIE PRACOVNÍKOV V ORGANIZÁCII

Ukladanie údajov a databázové systémy. Prof. MUDr. Martin Rusnák, CSc Prof. MUDr. Viera Rusnáková, CSc PhDr. Marek Psota, PhD

Čo ak program potrebuje pamäť, ktorej veľkosť závisí od konkrétneho vstupu?

Postup pre firmy s licenciou Profesionál účtovná firma

Vyhľadávanie a práca so záznamami - CREPČ 2

Komfortná správa rozvádzačov

KOMISNÝ PREDAJ. Obr. 1

Postup registrácie certifikátov do Windows

Program "Inventúra program.xlsm"

Poznámky k vydaniu AirKey

Písanie ZP. Alexandra. O čom to je. Postup. kontrola. Citovanie. Odkazy Abstrakt. textu

MAIS. Verejný portál - kalendárny rozvrh. Používateľská minipríručka pre používateľov systému MAIS. APZ Bratislava

AKO PRIPRAVIŤ MONEY S4 / S5 NA NOVÝ ÚČTOVNÝ ROK

Jemný úvod do spracovania XML

ľudovej zábavy, zariadenia detských ihrísk a športovo-rekreačné zariadenia Ing. Monika Laurovičová odbor skúšobníctva

Microsoft Project CVIČENIE 6 1

Evidencia hrobov. Inštalácia programu

ONLINE POBOČKA. pre zamestnávateľov MANUÁL

DOBROPISY. Dobropisy je potrebné rozlišovať podľa základného rozlíšenia: 1. dodavateľské 2. odberateľské

Kombinatorická pravdepodobnosť (opakovanie)

Testovanie 5. v školskom roku 2015/2016. Testovanie sa uskutoční 25. novembra 2015 (streda). Žiaci budú testy písať v nasledovnom poradí:

Externé zariadenia Používateľská príručka

2. PRIDANIE ZÁVEREČNEJ PRÁCE DO EVIDENCIE ZÁVEREČNÝCH PRÁC (EZP) A OZNAČENIE PRÁCE AKO FINÁLNEJ.

Prenesenie daňovej povinnosti podľa 69 ods. 12 písm. f, g, h, i, j zákona o DPH

Krížovka. Hot Potatoes JCross ( červená farba) = vytvorenie krížovky, do ktorej vpisujeme odpovede na zadané otázky. Priradenie

UČEBNÉ ŠTÝLY U ŠTUDENTOV INFORMATIKY A PODPORNÉ A VÝUČBOVÉ ŠTÝLY

U N I V E R Z I N S K Á I T A I L V E R E N L N T A S O

Moderná IŽK všeobecné pokyny pre prácu s modernou IŽK

MQL4. MQL4 MQL4 MQL4 MQL4 MQL4 Script MQL4 MQL4 MQL4 MQL4 MQL4 MQL4 MQL4 MQL4. MQL4 MQL4 MQL4 MQL4 Indicator MQL4 MQL4 MQL4 MQL4 MQL4 EA

Vybrané novinky v IS WISP

Úvod. Prehľad funkcií NORMAL OPERATION

Používateľská príručka: MOODLE

Príručka Mobility Tool + pre príjemcov grantu

Ako sme postavili Benátky

Osoba podľa 8 zákona finančné limity, pravidlá a postupy platné od

Transkript:

Informatika 2 Udržovateľný kód

Pojmy zavedené v 1. prednáške (1) typy chýb syntaktické behové logické techniky boja s chybami testovanie ladenie písanie udržovateľného kódu Informatika 2 1

Pojmy zavedené v 1. prednáške (2) testovanie rôzne pohľady aplikačné testovanie a testovanie jednotiek biela a čierna skrinka pozitívne a negatívne manuálne a automatické manuálne testovanie jednotiek prechádzanie zdrojového kódu priama komunikácia s objektom BlueJ využitie funkcie object inspector Informatika 2 2

Pojmy zavedené v 1. prednáške (3) automatické testovanie testy regresie test driven development testovacie triedy JUnit správa assertequals prípravky fixtures Informatika 2 3

Pojmy zavedené v 1. prednáške (4) ladenie manuálne prechádzanie kódu ladiace výpisy debugger Informatika 2 4

Cieľ prednášky charakteristiky dobrého návrhu tried nízka implementačná závislosť vysoká súdržnosť duplicita kódu zlá vlastnosť kódu návrh tried určený zodpovednosťou refaktoring zlepšenie kódu príklad: Hra World of FRI Informatika 2 5

World of FRI Informatika 2 6

Implementačná závislosť (1) coupling úroveň vzájomného prepojenia tried zmeny v implementácii jednej triedy si vynútia zmeny v implementácii druhej, závislej triedy snažíme sa minimalizovať Informatika 2 7

Implementačná závislosť (2) vonkajší pohľad rozhranie = čo objekt robí vnútorný pohľad implementácia = ako to robí minimálna závislosť používa iba dobre navrhnuté rozhranie implementačná závislosť požíva ako to robí Informatika 2 8

Znaky minimálnej závislosti pochopenie triedy bez nutnosti skúmať triedy, na ktorých je závislá zmena implementácie jednej triedy nevyžaduje zmeny iných tried Informatika 2 9

Súdržnosť kódu cohesion počet a rôznosť úloh jednej jednotky kódu vysoká súdržnosť jednotka má jedinú logickú úlohu metóda práve jedna presne definovaná úloha operácia. trieda jedna presne definovaná logická entita cieľ maximalizácia súdržnosti Informatika 2 10

Vysoká súdržnosť uľahčuje pochopenie úloh triedy a metód opakované použitie (reuse) triedy alebo metód v iných častiach kódu, v inom softvéri Informatika 2 11

Zodpovednosťou riadený návrh (1) responsibility-driven design objekt má len jednu úlohu objekt zodpovedá za svoj stav dáta objekt zodpovedá za zmeny stavu operácie s dátami informácie o svojom stave poskytuje objekt atribúty tvoria logický celok metódy implementujú jednu operáciu Informatika 2 12

Zodpovednosťou riadený návrh (2) do ktorej triedy pridať novú metódu? čie dáta bude metóda spracovávať? každá trieda je zodpovedná za operácie so svojimi vlastnými dátami Informatika 2 13

Aká veľká má byť trieda? metóda? metóda je príliš dlhá, ak vykonáva viac ako jednu úlohu operáciu trieda je príliš zložitá, ak spája viac ako jednu logickú entitu rešpektovanie týchto pravidiel necháva ešte stále dostatočný priestor programátorovi Informatika 2 14

Hra World of FRI Informatika 2 15

WoF existujúci kód hra textová adventúra miestnosti: terasa, aula, bufet, labak, kancelaria príkazy: chod, pomoc, ukonci smery: sever, vychod, juh, zapad Informatika 2 16

Wof diagram tried Informatika 2 17

Trieda NazvyPrikazov definícia všetkých platných príkazov názvy príkazov pole reťazcov overuje platnosť príkazu Informatika 2 18

Trieda Parser číta vstup hráča z terminálu rozpoznáva vo vstupe slová príkazov príkazy kontroluje prostredníctvom inštancie triedy NazvyPríkazov vytvára inštancie triedy Prikaz Informatika 2 19

Trieda Prikaz inštancie sú nemeniteľné objekty reprezentuje zadaný príkaz príkaz má 2 časti: názov a parameter overuje platnosť príkazu (nazov!= null) Informatika 2 20

Trieda Miestnost reprezentuje určitý priestor v hre má východy do iných miestností východy označené smerom neexistujúci východ = null Informatika 2 21

Trieda Hra hlavná trieda nastavuje hru vytvorí miestnosti nastaví miestnostiam východy vykonáva príkazy hráča Informatika 2 22

Návrh testov regresné testovanie testy pred zmenami príprava kontroly korektnosti zmien úpravy existujúceho kódu po krokoch overenie správnosti každého kroku Informatika 2 23

Diagram tried s testovacími triedami Informatika 2 24

NazvyPrikazovTest testjeprikaz pozitívne testy na všetky platne príkazy negatívne testy na neplatné príkazy Informatika 2 25

PrikazTest testdajnazov testdajparameter testjeneznamy testmaparameter pozitívne a negatívne testy častí príkazu Informatika 2 26

MiestnostTest testnemavychody testsever testjuh testy nastavenia východov priamy prístup k atribútom Informatika 2 27

Parser, Hra nemajú testy komunikujú priamo s užívateľom cez terminál => nedajú sa automaticky testovať Informatika 2 28

Výsledky testov pred úpravami Informatika 2 29

Duplicita v existujúcom kóde (1) Informatika 2 30

Duplicita v existujúcom kóde (2) prehliadka kódu duplicita v triede Hra metóda vypisprivitanie vypíše privítanie info o aktuálnej miestnosti a jej východoch metóda choddomiestnosti vyhľadá miestnosť v zadanom smere z aktuálnej prejde do nej vypíše info o aktuálnej miestnosti a jej východoch Informatika 2 31

Info o aktuálnej miestnosti (1) System.out.println("Teraz si v miestnosti + aaktualna.dajpopis()); System.out.print("Vychody: "); if (aaktualna.asevernyvychod!= null) { System.out.print("sever "); } if (aaktualna.avychodnyvychod!= null) { System.out.print("vychod "); }... Informatika 2 32

Info o aktuálnej miestnosti... if (aaktualna.ajuznyvychod!= null) { System.out.print("juh "); } if (aaktualna.azapadnyvychod!= null) { System.out.print("zapad "); } System.out.println(); Informatika 2 33

Duplicita kódu (1) nežiaduci jav pri modifikáciách nutnosť úpravy kódu na viacerých miestach zväčšuje pravdepodobnosť vzniku chyby znižuje čitateľnosť a zrozumiteľnosť kódu Informatika 2 34

Duplicita kódu (2) indikuje zlý návrh znižuje súdržnosť choddomiestnosti vypisprivitanie odstraňovanie duplicít jedna zo zásad udržovateľnosti kódu => refaktoring: samostatná metóda pre duplicitný kód regresné testovanie Informatika 2 35

Refaktoring úprava fungujúceho kódu so zachovaním jeho funkčnosti nemení čo objekt robí mení ako to objekt robí zlepšenie udržovateľnosti kódu Informatika 2 36

Info o aktuálnej miestnosti nová metóda definovaná v triede Hra private void vypisinfomiestnosti() { // pôvodne duplicitný kód } v metódach vypisprivitanie a choddomiestnosti poslanie správy vypisinfomiestnosti(); Informatika 2 37

Regresné testovanie! spustiť znovu všetky testy Informatika 2 38

Zadanie rozšírenia hry možné smery sú sever, východ, juh a západ rozšíriť hru o smery dole a hore Informatika 2 39

Postup práce nájsť časti kódu, kde sa smery priamo používajú redukcia týchto častí na nutné minimum refaktoring doplnenie nových smerov Informatika 2 40

Smery trieda Miestnost atribút pre každý východ inicializácia v konštruktore metóda nastavvychody nastavenie všetkých východov Informatika 2 41

Smery trieda Hra metóda vytvormiestnosti vytvára miestnosti a nastavuje im východy (v smeroch) metóda choddomiestnosti vyhľadá miestnosť v zadanom smere z aktuálnej a prejde do nej metóda vypisinfomiestnosti vypíše info o aktuálnej miestnosti aj s jej východmi Informatika 2 42

Metoda choddomiestnosti Miestnost novamiestnost = null; if (smer.equals("sever")) { novamiestnost = aaktualna.asevernyvychod; } if (smer.equals("vychod")) { novamiestnost = aaktualna.avychodnyvychod; } if (smer.equals("juh")) { novamiestnost = aaktualna.ajuznyvychod; } if (smer.equals("zapad")) { novamiestnost = aaktualna.azapadnyvychod; } Informatika 2 43

Priamy prístup k atribútom priamy prístup hry k východom atribútom miestnosti porušenie zapuzdrenia základný princíp zvyšuje implementačnú závislosť Informatika 2 44

Závislosť Hra na Miestnost cieľ: odstrániť riešenie posielanie správ miestnosti Informatika 2 45

Úpravy triedy Miestnost atribúty budú neverejné pridanie prístupovej metódy public Miestnost dajvychod(string pasmer) Informatika 2 46

Telo metódy dajvychod(pasmer) if (pasmer.equals("sever")) { return asevernyvychod; } if (pasmer.equals("vychod")) { return avychodnyvychod; } if (pasmer.equals("juh")) { return ajuznyvychod; } if (pasmer.equals("zapad")) { return azapadnyvychod; } return null; Informatika 2 47

Výsledok refaktoringu! nezabudnúť pustiť testy znížila sa implementačná závislosť triedy Hra na triede Miestnost pre zvýšenie počtu smerov, treba stále rozširovať triedy Hra a Miestnost Informatika 2 48

Trieda Miestnost problémy východy sú definované ako atribúty => každá metóda v triede Miestnost musí vedieť zoznam smerov riešenie: uloženie smerov do zoznamu poznámka: s pôvodnými verejnými atribútmi by to bolo zložitejšie Informatika 2 49

Zoznam smerov kontajner treba vyhľadávať ArrayList, pole komplikované; nutnosť vyhľadávania v cykle riešenie kontajner HashMap Informatika 2 50

Kontajner HashMap (1) neusporiadaná množina dvojíc dvojica = (kľúč; hodnota) možnosť vyhľadávania podľa kľúča hodnota kľúča musí byť unikátna generická trieda možnosť meniť typ kľúča možnosť meniť typ hodnoty Informatika 2 51

Kontajner HashMap (2) Informatika 2 52

Správa keyset objektom HashMap keyset vytvára množinu všetkých kľúčov zoznam je neusporiadaný množina nedá sa pristupovať pomocou indexu dá sa prechádzať pomocou cyklu foreach Informatika 2 53

Trieda Miestnost zmena implementácie rozhranie bezo zmien trieda Hra žiadne zmeny Informatika 2 54

Atribúty v triede Miestnost private Miestnost asevernyvychod; private Miestnost ajuznyvychod; private Miestnost avychodnyvychod; private Miestnost azapadnyvychod; private HashMap<String, Miestnost> avychody; názov smeru miestnosť v smere Informatika 2 55

Konštruktor v triede Miestnost this.asevernyvychod = null; this.ajuznyvychod = null; this.avychodnyvychod = null; this.azapadnyvychod = null; avychody = new HashMap<String, Miestnost>(); Informatika 2 56

Metóda dajvychod(pasmer) if (pasmer.equals("sever")) { return asevernyvychod; }... return null; return avychody.get(pasmer); Informatika 2 57

Smery priame použitie trieda Hra vytvormiestnosti vytvára miestnosti a nastavuje im východy vypisinfomiestnosti vypíše info o aktuálnej miestnosti aj s jej východmi trieda Miestnost nastavvychody nastavenie jednotlivých východov rapídne sa zmenšil počet výskytov priameho použitia smerov = 1 Informatika 2 58

Ďalšie zmeny metóda nastavvychody v triede Miestnost parametre = zoznam všetkých východov nastavovanie každého východu osobitne komplikácia pri pridávaní nového smeru zmena na metódu nastavvychod(pasmer, pamiestnost) zmena rozhrania Informatika 2 59

nastavvychod v triede Miestnost public void nastavvychod(string pasmer, Miestnost pamiestnost) { avychody.put(pasmer, pamiestnost); } Informatika 2 60

Dôsledky pre triedu Hra dôsledok zmeny rozhrania triedy Miestnost metóda vytvormiestnosti vytvára jednotlivé miestnosti nastavuje východy náhrada správy nastavvychody miestnosti na postupnosťou správ nastavvychod miestnosti Informatika 2 61

Metóda dajvychod(pasmer) terasa.nastavvychody(null, aula, labak, bufet); terasa.nastavvychod("vychod", aula); terasa.nastavvychod("juh", labak); terasa.nastavvychod("sever", bufet); Informatika 2 62

Čo zostáva smery sú priamo využité na dvoch miestach metóda vytvormiestnosti musí obsahovať smery metóda vypisinfomiestnosti odstrániť z vypisinfomiestnosti presun vytvárania popisu východov do triedy Miestnost zmena rozhrania Informatika 2 63

Návrh tried určený zodpovednosťou atribút pre východy miestnosť výpis informácie o miestnosti hra porušenie RDD informácie o sebe poskytuje miestnosť Informatika 2 64

Trieda Miestnost dajpopisvychodov public String dajpopisvychodov() { String vychody = "Vychody:"; for (String smer : avychody.keyset()) { vychody = vychody + " " + smer; } return vychody; } Informatika 2 65

Dôsledok pre triedu Hra private void vypisinfomiestnosti() { System.out.println("Teraz si v miestnosti " + aaktualna.dajpopis()); System.out.println(aAktualna.dajPopisVychodov()); System.out.println(); } Informatika 2 66

Nová verejná metóda = nový test testdajpopisvychodov do testovacej triedy MiestnostTest Informatika 2 67

Smery priame použitie trieda Hra vytvormiestnosti vytvára miestnosti a nastavuje im východy smery priamo použité už len na jednom mieste Informatika 2 68

Pridanie nových smerov... aula.nastavvychod("dole", jedalen); jedalen.nastavvychod("hore", aula);... Informatika 2 69

Zhodnotenie riešenia smery hore, dole boli pridané jednoduchá možnosť pridať iné nové smery (napr. teleport) jediné miesto metóda vytvormiestnosti Informatika 2 70

Zmeny softvéru Softvér nie je román román sa napíše len raz Krstný otec, tretie aktualizované vydanie úspešný softvér sa stále opravuje, rozširuje. neudržovaný softvér umiera. Informatika 2 71

Kvalita kódu implementačná závislosť súdržnosť jasne definovaná zodpovednosť kvalitný kód neobsahuje duplicitu dodržiava zapuzdrenie Informatika 2 72

Vývoj kódu vývoj dopĺňanie nových funkcií niekedy odstraňovanie chýb mení čo aplikácia robí rieši ako to aplikácia robí možnosť zväčšovania metód a triedy možnosť znižovania kvality kódu Informatika 2 73

Tvorba softvéru oprava chyby, nová funkcia zmena funkcie nové testy + staré (regresné) testy refaktoring zmena (zvýšenie) kvality regresné testy (nové + staré) Informatika 2 74

Vďaka za pozornosť

text Informatika 2 76