Netbeans - základy ladění v Javě

Re:Netbeans - základy ladění v Javě
« Odpověď #90 kdy: 24. 10. 2016, 17:45:06 »
Tak dlouho do Kida hučíme, že debugger má svoje (omezené) použití, až najednou říká to samé.

Comedy Gold.


gll

Re:Netbeans - základy ladění v Javě
« Odpověď #91 kdy: 24. 10. 2016, 17:47:22 »
Jak snadno se debuguje (základní věci - krokování, sledování hodnot, evaluate kód v aktuálním kontextu rámce, podmíněné breakpointy, watches) java ve vimu?

Na tohle všechno v pohodě stačí command line rozhraní.

Re:Netbeans - základy ladění v Javě
« Odpověď #92 kdy: 24. 10. 2016, 17:57:25 »
Jak snadno se debuguje (základní věci - krokování, sledování hodnot, evaluate kód v aktuálním kontextu rámce, podmíněné breakpointy, watches) java ve vimu?

Na tohle všechno v pohodě stačí command line rozhraní.

Ale musíš dost obětovat. Třebas mouse over nad kódem se zobrazováním hodnot má svoje kouzlo, dokud jsi v "explorativním" módu.

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #93 kdy: 24. 10. 2016, 18:09:17 »
Na tohle všechno v pohodě stačí command line rozhraní.

Ale musíš dost obětovat. Třebas mouse over nad kódem se zobrazováním hodnot má svoje kouzlo, dokud jsi v "explorativním" módu.

Ty používáš při programování myš?

Re:Netbeans - základy ladění v Javě
« Odpověď #94 kdy: 24. 10. 2016, 18:31:24 »
Na tohle všechno v pohodě stačí command line rozhraní.

Ale musíš dost obětovat. Třebas mouse over nad kódem se zobrazováním hodnot má svoje kouzlo, dokud jsi v "explorativním" módu.

Ty používáš při programování myš?

Zalezi na okolnostech. Pri editaci nebo refaktoringu temer vubec, pri prozkoumavani nekdy ano. Podobne trebas v browseru...


Re:Netbeans - základy ladění v Javě
« Odpověď #95 kdy: 24. 10. 2016, 19:41:53 »
Ano, vadí mi spíš nadužívání debuggeru tam, kde by i primitivní test snadno odhalil chybu. Docela mě baví alergické reakce na mé, často hodně zjednodušující, příspěvky. Stačí se jen zmínit o getterech, MVC, debuggeru či jiném postupu či nástroji, který používám jinak než mainstream a rázem se z toho vyvine vlna nadávek, urážek a pokusů o ponižování. Baví mě utahovat si z blbců, to je vše. Všimni si, že jim nenadávám, ani se je nesnažím urazit. Na to si úplně vystačí sami.
Váš úvodní příspěvek nebyl hodně zjednodušující, váš úvodní příspěvek byl klamný. Teď jste konečně pochopil, že jste přestřelil, tak ze své původní pozice „nenápadně“ couváte. Když jste měl předvést praktický příklad toho, jak to děláte, nejprve jste nepoznal Javu 8, a když jste kód dostal naservírovaný na stříbrném podnose, k napsání testu jste se nějak nedostal.

Kdybyste nástroje používal jinak, než mainstream, a dokázal to předvést a obhájit, bylo by to záslužné. A dalo by se říkat, že si utahujete z blbců, a že na to máte právo, protože tomu rozumíte daleko lépe. Jenže zatím jste nic nepředvedl. Zatím jste ukázal přesně to, kvůli čemu si utahujete z toho mainstreamu – že opakujete nějaké poučky, kterými se ani sám neřídíte. A když je máte aplikovat v praxi, tak to nedokážete.

Přitom zrovna automatizované testování je pořád hodně podceňované. Používat ho není jednoduché, ale spousta problémů se dá odstranit, ví se, jak na to, a jejich odstranění by bylo méně nákladné, než absence automatizovaného testování. Jenže abyste to mohl propagovat, musíte nejprve sám dobře vědět, jaké problémy mohou nastat, jaké předpoklady musí být splněny, aby bylo možné automatizované testování úspěšně používat – a tedy také vědět, kdy je použití automatického testování často obtížné nebo nemožné. Vy se místo toho necháte nachytat na učebnicový příklad, u kterého musí každý, kdo o testování něco ví, okamžitě vypálit – i kdyby ho s tím příkladem vzbudili o půlnoci  –, že testování vyžaduje testovatelné objekty (ne jen kód, ale i komponenty a vyšší úrovně programu) a že závislost na komponentách třetích stran obvykle testování znemožňuje nebo alespoň velmi komplikuje. A že v takovém případě je potřeba rezignovat na testování jako ověřování správnosti a spíš ho brát jako usnadnění debugování.

xxxxx

Re:Netbeans - základy ladění v Javě
« Odpověď #96 kdy: 24. 10. 2016, 22:36:52 »
co to je zas za klauni tenhlete kit? teoretick, co si precetl knizku a napsal super otestovany tic-tack-toe?

atarist

Re:Netbeans - základy ladění v Javě
« Odpověď #97 kdy: 24. 10. 2016, 22:46:55 »
co to je zas za klauni tenhlete kit? teoretick, co si precetl knizku a napsal super otestovany tic-tack-toe?

ja bych to nepodcenoval, urcite dela ve velkym teamu a je tam guru

Re:Netbeans - základy ladění v Javě
« Odpověď #98 kdy: 24. 10. 2016, 22:57:56 »
co to je zas za klauni tenhlete kit? teoretick, co si precetl knizku a napsal super otestovany tic-tack-toe?

ja bych to nepodcenoval, urcite dela ve velkym teamu a je tam guru

A pristi sprint to tic-tac-toe dodaji.

perceptron

Re:Netbeans - základy ladění v Javě
« Odpověď #99 kdy: 25. 10. 2016, 09:45:46 »
Citace
urcite dela ve velkym teamu a je tam guru
to nevieme lebo kit sa vyhyba odpovedi na otazke o velkosti teamu jak kit getterom

alebo existuje zazracny team co vyvija javu bez debuggera bez getterov a setterov vo vime

alebo je to one man show


gll

Re:Netbeans - základy ladění v Javě
« Odpověď #100 kdy: 25. 10. 2016, 15:40:38 »
Vy se místo toho necháte nachytat na učebnicový příklad, u kterého musí každý, kdo o testování něco ví, okamžitě vypálit – i kdyby ho s tím příkladem vzbudili o půlnoci  –, že testování vyžaduje testovatelné objekty (ne jen kód, ale i komponenty a vyšší úrovně programu) a že závislost na komponentách třetích stran obvykle testování znemožňuje nebo alespoň velmi komplikuje. A že v takovém případě je potřeba rezignovat na testování jako ověřování správnosti a spíš ho brát jako usnadnění debugování.

Jak to myslíš? Testy té komponenty má napsat její autor. Pokud ty potřebuješ testovat svůj kód a ta kompnenta ti překáží, tak ji můžeš nahradit nějakou dummy komponentou. Doporučuji ti něco si o tom přečíst a nechytračit tady s buzením o půlnoci.

Re:Netbeans - základy ladění v Javě
« Odpověď #101 kdy: 25. 10. 2016, 16:14:09 »
Vy se místo toho necháte nachytat na učebnicový příklad, u kterého musí každý, kdo o testování něco ví, okamžitě vypálit – i kdyby ho s tím příkladem vzbudili o půlnoci  –, že testování vyžaduje testovatelné objekty (ne jen kód, ale i komponenty a vyšší úrovně programu) a že závislost na komponentách třetích stran obvykle testování znemožňuje nebo alespoň velmi komplikuje. A že v takovém případě je potřeba rezignovat na testování jako ověřování správnosti a spíš ho brát jako usnadnění debugování.

Jak to myslíš? Testy té komponenty má napsat její autor. Pokud ty potřebuješ testovat svůj kód a ta kompnenta ti překáží, tak ji můžeš nahradit nějakou dummy komponentou. Doporučuji ti něco si o tom přečíst a nechytračit tady s buzením o půlnoci.

A kdyz jsi ji zdedil po predchozim pachateli?

A nekdy (velmi pravdepodobne ne v tomhle pripade) dava i smysl i napsat si neco malo testu na 3rd party komponenty.

gll

Re:Netbeans - základy ladění v Javě
« Odpověď #102 kdy: 25. 10. 2016, 16:17:36 »
Vy se místo toho necháte nachytat na učebnicový příklad, u kterého musí každý, kdo o testování něco ví, okamžitě vypálit – i kdyby ho s tím příkladem vzbudili o půlnoci  –, že testování vyžaduje testovatelné objekty (ne jen kód, ale i komponenty a vyšší úrovně programu) a že závislost na komponentách třetích stran obvykle testování znemožňuje nebo alespoň velmi komplikuje. A že v takovém případě je potřeba rezignovat na testování jako ověřování správnosti a spíš ho brát jako usnadnění debugování.

Jak to myslíš? Testy té komponenty má napsat její autor. Pokud ty potřebuješ testovat svůj kód a ta kompnenta ti překáží, tak ji můžeš nahradit nějakou dummy komponentou. Doporučuji ti něco si o tom přečíst a nechytračit tady s buzením o půlnoci.

A kdyz jsi ji zdedil po predchozim pachateli?

A nekdy (velmi pravdepodobne ne v tomhle pripade) dava i smysl i napsat si neco malo testu na 3rd party komponenty.

Reagoval jsem na větu, že v takovém případě je třeba rezignovat na testování.

Re:Netbeans - základy ladění v Javě
« Odpověď #103 kdy: 25. 10. 2016, 21:18:47 »
Jak to myslíš? Testy té komponenty má napsat její autor. Pokud ty potřebuješ testovat svůj kód a ta kompnenta ti překáží, tak ji můžeš nahradit nějakou dummy komponentou.
Myslím to tak, jak jsem to v této diskusi několikrát napsal – že testování komponent je jednoduché, ze všech možných testů je to to nejjednodušší testování. Ovšem z toho, že vám procházejí testy komponent, neplyne o funkčnosti programu vůbec nic. Protože program vznikne teprve tehdy, když ty komponenty poskládáte, navzájem je propojíte. Přičemž to propojování zase může být dobře i špatně – to, že propojení fungujících komponent vůbec nezaručuje, že bude fungovat i celek, je klíčová znalost, bez níž nemůžete nic testovat.

Takže postupně. Testy komponenty má napsat autor. Jenže autor napíše testy toho, jak si myslí, že by jeho komponenta měla fungovat. Což je něco jiného, než jak komponenta ve skutečnosti funguje (a tenhle rozdíl se snažíme odhalit pomocí jednotkových testů), a hlavně je to něco jiného, než jak si uživatel myslí, že komponenta funguje (a tohle autorovy testy neodhalí). Konkrétně je to problém rozdílu specifikace a implementace a nejednoznačnosti specifikace (z té nejednoznačnosti mimo jiné plyne, že je lepší, pokud jednotkové testy píše někdo jiný, než autor, protože je jistá šance, že když nejednoznačnou specifikaci jinak pochopí autor implementace a jinak autor testu, implementace pak testem neprojde). Testy jsou svým způsobem také specifikace, jenže uživatel komponenty ji nepoužívá na základě specifikace definované testy, ale na základě specifikace popsané někde v dokumentaci (v lepším případě).

Pokud budu testovat svůj kód, komponenta mi překáží a nahradím ji dummy komponentou (v terminologii testování se používá „mock“ komponenta, česky by se řeklo třeba „falešná“ komponenta), testuju jenom to, zda můj kód funguje s mou představou o fungování té komponenty. Nebo-li neodhalím žádnou chybu plynoucí z toho, že má představa o fungování komponenty je odlišná od toho, jak komponenta doopravdy funguje.

Když to celé dobře dopadne a budu mít kód založený na představě o fungování komponenty, která bude alespoň v rozsahu používání té komponenty odpovídat realitě (což taky nejde 100% otestovat, i když budu mít komponentu dobře testovatelnou), pořád ještě zbývá vazba mezi těmi komponentami. Protože ty komponenty obvykle do sebe nezapadnou tak, jak jsou hotové, ale je potřeba je propojit nějakým kódem. Tenhle kód je závislý na obou komponentách, už jenom proto se bude testovat dost těžko. A často je ten kód velmi závislý na okolním prostředí, což testování ještě dál komplikuje. Aneb když vy mi dáte perfektně otestovanou komponentu, která bude počítat třeba jednoduchý součet, já správně pochopím všechny nuance fungování vaší komponenty, moje mock implementace vaší komponenty se bude chovat úplně stejně, jako vaše komponenta, pořád ještě zdaleka není vyhráno. Protože já tu vaši komponentu budu volat jako webovou službu, nebo pomocí meziprocesové komunikace, nebo třeba jenom ve vícevláknovém prostředí,  čímž jste nepočítal – a všechno tohle může tu spolupráci dvou perfektně otestovaných komponent zničit mnoha různými způsoby.

Přičemž shodou okolností tohle propojování komponent tvoří čím dál větší objem napsaného software. Protože těch základních komponent je už spousta a jejich vývoj už se rozhodně nezrychluje. Za to se z těch základních komponent dá skládat čím dál víc různých programů, tedy ten rostoucí objem software mají na svědomí právě ty mezikomponentové vazby. (Proto se taky dnes od spousty programátorů chce, aby uměly ty komponenty spojovat, ale není potřeba, aby je uměly vytvářet. Což někteří programátoři, kteří umějí ty komponenty vytvářet, ale neumějí s nimi dál pracovat, těžce nesou a kompenzují si to tím, že se označují za „opravdové programátory“ a ostatní pak třeba za „lepiče kódu“.) Ty mezikomponentové vazby dnes pořádně testovat neumíme, většinou se snažíme otestovat alespoň něco tak, že to naroubujeme na jednotkové testy, případně použijeme nějaký framework, který ty vazby umožní dělat jednotně a se znovupoužitelným kódem. Což jde ale použít jedině u vlastních komponent v rámci jedné aplikace – když třeba voláte nějakou komponentu jako webovou službu, bez spolupráce protistrany neotestujete skoro nic. Zeptejte se lidí, kteří teď implementují EET do pokladních systémů, jak je to testovatelné – a to EET ještě má alespoň nějaké testovací prostředí.

Snad jsem vám to alespoň trochu objasnil a to, co jste si snad někde přečetl, si teď dokážete lépe srovnat.

Doporučuji ti něco si o tom přečíst a nechytračit tady s buzením o půlnoci.
Až zase někdy narazíte na někoho, kdo tvrdí něco jiného, než vy, a budete mít potřebu ho poučovat, že si má něco přečíst, zvažte variantu, že rozdíl v tvrzeních je způsobený tím, že vy jste si možná něco přečetl, ale nepochopil jste to. Předejdete tak sebeztrapňování, jako se vám to stalo v citovaném komentáři.

Reagoval jsem na větu, že v takovém případě je třeba rezignovat na testování.
Hlavně že jste tam tu větu citoval, že? „Rezignovat na testování“ je něco jiného, než „rezignovat na testování jako ověřování správnosti“.