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

atarist

Re:Netbeans - základy ladění v Javě
« Odpověď #60 kdy: 23. 10. 2016, 17:15:05 »
Ale jeste jednou, at to zvladnes i ty:
Prisla ti chyba. Od QA nebo z produkce od zakaznika. Pochopitelne je to chyba razeni "to se nemuze stat".
Co udelas? Napises test? Nebo udelas neco pred tim?

Tu chybu od zákazníka podle jeho popisu vstupních podmínek nacpu do testů a budu se ji snažit zreplikovat. Ve chvíli, kdy test neprojde, už vím, co mám kde opravovat.

Tak tohle ti zdaleka vzdycky neprojde. Pocinaje tim, ze nemusis mit ty same konfigurace, co ma zakaznik, a konce tim, ze proste nedostanes v reportu dost informaci.

Zpravidla mi popis chyby od zákazníka stačí, jeho konfiguraci mívám namockovanou, takže s tím nebývá problém. Pokud v to reportu nedostanu dost informací, vyptám si další, nechám si poslat logy apod.

Jenze to je dost okrajovy priklad, kdy mas pro jednu appku jednoho zakaznika (to jsou nejaky webovy obchody ze?). V praxi mas X zakazniku s Y konfiguracemi, navic ty chyby jsou skutecne zpusobeny necim, s cim prakticky zadna aplikace a testy nepocitaji.

Namatkou - na chvilku vypadla DNS, zakaznik presunul cast infrastruktury jinam (a stare IP jsou kesovany kdovi kde), ma to na nejake obskurnejsi architekture (s390x je kupodivu stale oblibena), ma tam spesl. nastaveni FW, kratkodoby vypadek NFS, problematika selinuxu, rozjizdi se (z libovolnych dale neovlivnitelnych duvodu) systemovy cas, zakaznik updatoval "neco" v systemu (tech moznych kombinaci balicku jsou miliardy). Takze ve vysledku jsi rad, kdyz jsou ochotni poslat coredump nebo aspon stacktrace. Btw jestli jsi schopny v rozumnem case to vsechno ^ pokryt, aby vysledkem byla i jen pitoma knowledgebase, tak bych pro Tebe mel peknou nabidku :)


Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #61 kdy: 23. 10. 2016, 17:18:22 »
Jistěže jsou nepoužitelné, když Kit žádné větší projekty v javě nepíše. Nechápu, proč se pořád k javě vyjadřuje, nemá vůbec smysl to tady řešit.

Většinou se jen vyjádřím k tématu, pak v BTW něco prohodím (jako např. tady), někdo se mě začne na něco vyptávat a já jen trpělivě odpovídám. Pokud nechcete číst mé odpovědi, tak se mě na nic neptejte a budete mít klid.

Tezko neodpovedet, kdyz systematicky kazes bludy.

Čekal jsem, že zrovna ty mi to vyčteš, i když o tom víš prd. Za chvíli se jistě přidá i javaman.

Re:Netbeans - základy ladění v Javě
« Odpověď #62 kdy: 23. 10. 2016, 17:31:24 »
někdo se mě začne na něco vyptávat a já jen trpělivě odpovídám
Škoda že vám ta trpělivost došla zrovna ve chvíli, kdy to začalo být zajímavé a ptal jsem se vás na zcela konkrétní příklad.

Psát jednotkové testy je snadné. Jenže drtivá většinu funkcí dnešního softwaru netvoří ty jednotky, ale ty vazby mezi nimi. A to zatím moc efektivně testovat neumíme.

Re:Netbeans - základy ladění v Javě
« Odpověď #63 kdy: 23. 10. 2016, 17:35:20 »

Čekal jsem, že zrovna ty mi to vyčteš, i když o tom víš prd. Za chvíli se jistě přidá i javaman.

A co mam rict nekomu, kdo tu kazde nedopochopeneho strejdu Boba, aniz by mel za sebou praci v teamu na necem vetsim? nekomu, kdo tu placa nesmysly a radi nepouzivat vcelku uzitecne techniky, jenom protoze jsou v rozporu s jeho ideologii?

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #64 kdy: 23. 10. 2016, 17:39:23 »
Jenze to je dost okrajovy priklad, kdy mas pro jednu appku jednoho zakaznika (to jsou nejaky webovy obchody ze?). V praxi mas X zakazniku s Y konfiguracemi, navic ty chyby jsou skutecne zpusobeny necim, s cim prakticky zadna aplikace a testy nepocitaji.

Namatkou - na chvilku vypadla DNS, zakaznik presunul cast infrastruktury jinam (a stare IP jsou kesovany kdovi kde), ma to na nejake obskurnejsi architekture (s390x je kupodivu stale oblibena), ma tam spesl. nastaveni FW, kratkodoby vypadek NFS, problematika selinuxu, rozjizdi se (z libovolnych dale neovlivnitelnych duvodu) systemovy cas, zakaznik updatoval "neco" v systemu (tech moznych kombinaci balicku jsou miliardy). Takze ve vysledku jsi rad, kdyz jsou ochotni poslat coredump nebo aspon stacktrace. Btw jestli jsi schopny v rozumnem case to vsechno ^ pokryt, aby vysledkem byla i jen pitoma knowledgebase, tak bych pro Tebe mel peknou nabidku :)

Většinu z toho mám pokrytu integračními testy, ve kterých mám namockované selhání DNS či databáze, systémový čas si beru z jednoho místa (typicky z databáze), takže chybová hlášení zpravidla odpovídají skutečnému místu vzniku chyby a zákazník si často je schopen zjednat nápravu i bez mé asistence.


javaman ((

Re:Netbeans - základy ladění v Javě
« Odpověď #65 kdy: 23. 10. 2016, 17:43:07 »
Jistěže jsou nepoužitelné, když Kit žádné větší projekty v javě nepíše. Nechápu, proč se pořád k javě vyjadřuje, nemá vůbec smysl to tady řešit.

Většinou se jen vyjádřím k tématu, pak v BTW něco prohodím (jako např. tady), někdo se mě začne na něco vyptávat a já jen trpělivě odpovídám. Pokud nechcete číst mé odpovědi, tak se mě na nic neptejte a budete mít klid.

Tezko neodpovedet, kdyz systematicky kazes bludy.

Čekal jsem, že zrovna ty mi to vyčteš, i když o tom víš prd. Za chvíli se jistě přidá i javaman.

Tak já jsem rád, že dostanu odpovědi alespoň na něco. Celkem se mi to líbí, jen je tam znát, že tomu až tak nerozumíš a zároveň jsi neviděl reálné projekty. Což nesnižuje inspirativnost. Občas to jsou dost píčoviny, ale i tak jsem za to rád. Lepší než tvůj brácha a nebo pologramotný jurdo.

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #66 kdy: 23. 10. 2016, 18:06:26 »
někdo se mě začne na něco vyptávat a já jen trpělivě odpovídám
Škoda že vám ta trpělivost došla zrovna ve chvíli, kdy to začalo být zajímavé a ptal jsem se vás na zcela konkrétní příklad.

Psát jednotkové testy je snadné. Jenže drtivá většinu funkcí dnešního softwaru netvoří ty jednotky, ale ty vazby mezi nimi. A to zatím moc efektivně testovat neumíme.

Ta chyba mi nešla zreprodukovat, neboť mi Java hlásila chyby syntaxe. Navíc v tom byla hromada externích závislostí, které se mi nechtělo mockovat jen proto, abych někomu něco dokazoval. Na první pohled jsem však viděl souběh a to jsem také napsal.

Na vazby mezi jednotkami jsou integrační testy. Ty dělám samozřejmě také.

Re:Netbeans - základy ladění v Javě
« Odpověď #67 kdy: 23. 10. 2016, 18:44:24 »
Ta chyba mi nešla zreprodukovat, neboť mi Java hlásila chyby syntaxe.
Opravdu píšete o tomhle komentáři? Měl jste zkopírovat kód tak jak je, nijak ho neupravovat a vložit do souboru cz/root/test/Main.java a přeložit ho kompilátorem Java 8. To je dnes aktuální verze.

Navíc v tom byla hromada externích závislostí, které se mi nechtělo mockovat jen proto, abych někomu něco dokazoval.
Už to, že je tam jediný import jediné třídy by vám mohlo napovědět, že tam rozhodně hromada externích závislostí není. A ta jediná závislost, která tam v importech je, je ze standardní knihovny Java 8 SE. Další závislosti jsou na třídách z java.lang, opět součást Java SE.

Na první pohled jsem však viděl souběh a to jsem také napsal.
To „na první pohled jsem viděl“ máte integrované v automatických testech? Že pokaždé, když se spustí build, vzbudí vás to a ukáže vám to kód, abyste na první pohled viděl nebo neviděl souběh? To, že je tam na první pohled viditelná chyba v souběhu je záměr. Já jsem se vás ptal, jak byste na tu chybu přišel pomocí testů, kdybyste o ní nevěděl. To, že je ta chyba vidět na první pohled, vám snad situaci nekomplikuje, ne? Představte si, že je to třída třetí strany, kterou máte použít. Psal jste, že si na externí komponenty píšete testy, abyste ověřil, zda fungují správně – třeba ověřujete, že suma(100, 200) vrátí 300. Zajímá mne, jak by tedy vypadal ten váš test na tuhle třídu.

Na vazby mezi jednotkami jsou integrační testy. Ty dělám samozřejmě také.
Ptal jsem se na příklad s navazováním HTTPS spojení a odpověď jsem nedostal.

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #68 kdy: 23. 10. 2016, 18:54:36 »
Ta chyba mi nešla zreprodukovat, neboť mi Java hlásila chyby syntaxe.
Opravdu píšete o tomhle komentáři? Měl jste zkopírovat kód tak jak je, nijak ho neupravovat a vložit do souboru cz/root/test/Main.java a přeložit ho kompilátorem Java 8. To je dnes aktuální verze.

Používám Javu 7.

dustin

Re:Netbeans - základy ladění v Javě
« Odpověď #69 kdy: 23. 10. 2016, 18:59:49 »
Tak snad na první pohled vidíš lambda výrazy, takže tě nemůže překvapit, že to ve staré javě nezkompiluješ a nemá smysl sem psát hlášku o chybě syntaxe.

Re:Netbeans - základy ladění v Javě
« Odpověď #70 kdy: 23. 10. 2016, 19:02:26 »
Používám Javu 7.

Což je vzhledem k vašim komentářům zvláštní, ale dobře, tady to máte přepsané pro Javu 7:

Kód: [Vybrat]
package cz.root.test;

public class Main {

    private String result = "You lost!";

    public Main(final Reporter reporter) {
        new Thread() {
            @Override
            public void run() {
                reporter.report(result);
            }
        }.start();
        result = "You win!";
    }

    public static void main(String[] args) {
        new Main(new Reporter() {
            @Override
            public void report(String message) {
                System.out.println(message);
            }
        });
    }
   
    public interface Reporter {
        void report(String message);
    }
}


Edit 19:05: Doplnil jsem rozhraní Reporter modifikátor public, aby se to dalo použít v jiné třídě.
« Poslední změna: 23. 10. 2016, 19:05:51 od Filip Jirsák »

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #71 kdy: 23. 10. 2016, 19:03:12 »
Tak snad na první pohled vidíš lambda výrazy, takže tě nemůže překvapit, že to ve staré javě nezkompiluješ a nemá smysl sem psát hlášku o chybě syntaxe.

Máš pravdu. Nepřekvapilo mě to. Přece kvůli této diskuzi nebudu přeinstalovávat JDK.

Re:Netbeans - základy ladění v Javě
« Odpověď #72 kdy: 23. 10. 2016, 19:03:58 »
Ta chyba mi nešla zreprodukovat, neboť mi Java hlásila chyby syntaxe.
Opravdu píšete o tomhle komentáři? Měl jste zkopírovat kód tak jak je, nijak ho neupravovat a vložit do souboru cz/root/test/Main.java a přeložit ho kompilátorem Java 8. To je dnes aktuální verze.

Používám Javu 7.

Facepalm.

Kit

Re:Netbeans - základy ladění v Javě
« Odpověď #73 kdy: 23. 10. 2016, 19:18:42 »
Používám Javu 7.

Kód: [Vybrat]
...

Už mi to jede, včetně lost i win. Teď už jen k tomu napsat požadované testy...

gll

Re:Netbeans - základy ladění v Javě
« Odpověď #74 kdy: 23. 10. 2016, 23:46:01 »
Kód: [Vybrat]
package cz.root.test;

public class Main {

    private String result = "You lost!";

    public Main(final Reporter reporter) {
        new Thread() {
            @Override
            public void run() {
                reporter.report(result);
            }
        }.start();
        result = "You win!";
    }

    public static void main(String[] args) {
        new Main(new Reporter() {
            @Override
            public void report(String message) {
                System.out.println(message);
            }
        });
    }
   
    public interface Reporter {
        void report(String message);
    }
}


TDD předpokládá, že se píše testovatelný kód. Dobrá zásada je nepoužívat mutable proměnné a raw vlákna.