Refactoring - umíte ho? A jak se ho učíte?

balki

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #30 kdy: 27. 12. 2017, 19:17:57 »
Unit testy su naviac proceduralne, vhodne na testovanie bezstavovych procedur. (Na OOP nevhodne) Komplexnejsie spravanie sa s tym komplikovane testuje, ze sa na to clovek radsej vykasle. 

Osobne ich pouzivam presne na take procedury, kde viem, ze pre vstup A ma byt vystup B, uz mi to par krat zachranilo zadek.

Unit testy se samozřejmě s výhodou používají i na OOP, protože se jimi dá testovat i stavové chování objektů. Kdyby se daly testovat jen bezstavové metody, byly by takto omezené testy k ničemu.

V tomhle souhlasím. Jednotkové testy a OOP k sobě patří a součástí jednotkového testu běžně je uvedení objektu do nějakého požadovaného stavu a následně provolání jeho metod a kontrola vrácených hodnot a výsledného stavu.

Potíž je spíš v tom, přesně vědět, co má být ten požadovaný a cílový stav a jak se mají konkrétní metody chovat. Často to nikde popsané není a lidé to mají jen v hlavě – na rozdíl od požadavků vnějšího rozhraní, které spíš bývají někde napsané a schválené.

Mno ok, nechce sa mi siahodlhe debaty o tomto topicu vytvarat. Ale pokial skutocne clovek pise OOP a nie nejaku parodiu na to, tak vztahy medzi objektami neumoznuju dobre pokryt spravanie unit testami. Vezmite si uz len taky polymorfizmus, (Objekt A dedi od objektu B, nechytajte ma na terminologii, na triedy sa nehram :) ). Niekde v konfiguracii objektu C je malo dolezity objekt A. S objektom A sa spravi unit test. Unit test prejde. Ale zrazu nieco blbne na produkcii. To preto, lebo v konfiguracii je objekt B.  Uviedol som najtrivialnejsi pripad. Ani rozne "mocky" nie su spasonosne riesenie, lebo nerataju so vsetkymi moznymi nastaveniami v produkcii. OOP vytvara velku sadu moznosti, lebo zapuzdruje vykonavany kod.

Unit testy su fajn, ale netreba sa na ne velmi spoliehat.  Jim Coplien, uznavany autor, ktory skuma oop, momentalne robi agilne techniky povedal: "Unit testing is nothing more than intellectual masturbation." Nieco v tom zmysle, ze unit testy sa pisu kvoli unit testom a tomu, co si zmysli porogramator testovat. Netestuju to, ci je program spravny.


jpu

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #31 kdy: 27. 12. 2017, 19:35:46 »
Vyborny. Takze k tematu opet nic. Tohle forum je k zbliti.
Na blbou otázku blbá odpověď ... .
Omyl sudruhu. Tady na rootu kvitne blbost. Neexistuje blba otazka, len hlupa odpoved. A hlupost je tu rozsirena :)

Franta <xkucf03/>

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #32 kdy: 27. 12. 2017, 19:44:54 »
Unit testy su naviac proceduralne, vhodne na testovanie bezstavovych procedur. (Na OOP nevhodne) Komplexnejsie spravanie sa s tym komplikovane testuje, ze sa na to clovek radsej vykasle. 

Osobne ich pouzivam presne na take procedury, kde viem, ze pre vstup A ma byt vystup B, uz mi to par krat zachranilo zadek.

Unit testy se samozřejmě s výhodou používají i na OOP, protože se jimi dá testovat i stavové chování objektů. Kdyby se daly testovat jen bezstavové metody, byly by takto omezené testy k ničemu.

V tomhle souhlasím. Jednotkové testy a OOP k sobě patří a součástí jednotkového testu běžně je uvedení objektu do nějakého požadovaného stavu a následně provolání jeho metod a kontrola vrácených hodnot a výsledného stavu.

Potíž je spíš v tom, přesně vědět, co má být ten požadovaný a cílový stav a jak se mají konkrétní metody chovat. Často to nikde popsané není a lidé to mají jen v hlavě – na rozdíl od požadavků vnějšího rozhraní, které spíš bývají někde napsané a schválené.
Ale pokial skutocne clovek pise OOP a nie nejaku parodiu na to, tak vztahy medzi objektami neumoznuju dobre pokryt spravanie unit testami. Vezmite si uz len taky polymorfizmus, (Objekt A dedi od objektu B, nechytajte ma na terminologii, na triedy sa nehram :) ). Niekde v konfiguracii objektu C je malo dolezity objekt A. S objektom A sa spravi unit test. Unit test prejde. Ale zrazu nieco blbne na produkcii. To preto, lebo v konfiguracii je objekt B.  Uviedol som najtrivialnejsi pripad. Ani rozne "mocky" nie su spasonosne riesenie, lebo nerataju so vsetkymi moznymi nastaveniami v produkcii. OOP vytvara velku sadu moznosti, lebo zapuzdruje vykonavany kod.


To se klidně může stát, ovšem problém není v OOP, ale v tom, že nemáš nikde přesně specifikované, jak se má který objekt/třída chovat – takže jednotkové testy střílíš od boku. Představ si, že bys měl proceduru s padesáti parametry, některé vstupní, některé výstupní, některé oboje a zdokumentované to budeš mít jen minimálně – přestože tam není žádné OOP, jednotkový test taky nenapíšeš – resp. nějaký napíšeš, ale bude k ničemu, protože nevíš, jak se to (na téhle úrovni) má chovat. Oproti tomu integrační/systémové testy napíšeš a budou ti užitečné, protože třeba implementuješ protokol podle nějakého RFC nebo máš závaznou specifikaci, kterou ti podepsal zákazník – na tom se dá stavět.

(případně nemáš vůbec nic a programuješ to jen na základě domněnek a výkřiků, které se k tobě dostaly po telefonu, ale tam už bych pak nemluvil o vývoji softwaru resp. softwarovém inženýrství)

BTW: dělal jsem i v týmu, kde se drželo 100% pokrytí jednotkovými testy a návrh i na úrovni tříd byl písemně zdokumentovaný a bylo možné psát dobré jednotkové testy – byla to příjemná práce a mělo to úroveň. Ale běžná praxe ve většině firem to rozhodně není – nemají na to. A dokud (pokud) je nedokopeš k tomu, aby bylo dobře specifikované chování na úrovni tříd, tak nemá smysl si nalhávat, že tě jednotkové testy spasí. Je lepší začít tím, co máš dané a dobře popsané – což bývá vnější rozhraní → integrační/systémové testy. A taky až si bude zákazník na něco stěžovat, tak to bude právě rozpor se specifikací vnějšího rozhraní – ovšem jestli si mezi třídami uvnitř předáváš takové hodnoty nebo makové je mu úplně jedno.

Xaomi

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #33 kdy: 27. 12. 2017, 20:26:47 »
Nepoužívám Javu, takže takové berličky nepotřebuju :-).

balki

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #34 kdy: 27. 12. 2017, 20:34:47 »
To se klidně může stát, ovšem problém není v OOP, ale v tom, že nemáš nikde přesně specifikované, jak se má který objekt/třída chovat – takže jednotkové testy střílíš od boku.

To casto ani nebyva specifikovane, pokial nenajimaju uplne lopaty ako programatorov. Inak musi byt ozrutny analyticky tim a bolo by lacnejsie, ak by to kodili analytici.


Představ si, že bys měl proceduru s padesáti parametry, některé vstupní, některé výstupní, některé oboje a zdokumentované to budeš mít jen minimálně – přestože tam není žádné OOP, jednotkový test taky nenapíšeš – resp. nějaký napíšeš, ale bude k ničemu, protože nevíš, jak se to (na téhle úrovni) má chovat.

Ak ma procedura 50 parametrov, tak tam uz nieco strasne smrdi.


Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #35 kdy: 27. 12. 2017, 21:36:39 »
Zrovna s refaktoringem ti jednotkové testy moc nepomohou, protože je musíš taky přepsat a tím ztrácíš jistotu, že program funguje stejně jako dřív – pokud jsi udělal chybu v kódu, pravděpodobně ji uděláš i při přepisování testu, protože vycházíš třeba z nějakých mylných předpokladů, jak se má program chovat a tu chybu zadrátuješ do kódu i do testu.

Pokud chceš refaktorovat trochu víc, než přejmenovávat lokální proměnné uvnitř metod nebo měnit odsazení, tak potřebuješ integrační/systémové testy, které ověří funkčnost celku.

Pokud refaktoruji víc, tak samozřejmě v součinnosti s uživatelem. Co se jednotkových testů týče, tak stále mám problém je nějak rozumně uchopit, aby byly ku pomoci. Snažím se je dělat, ale přijdou mi zatím takové... Zvláštní... A tvůrce daného ERP je momentálně docela „tlačí“ jako jedinou samospásnou věc (alespoň mi to tak přijde) a myslím si, že zas tak „samospásné“ nejsou, ale jak říkám, možná je neumím řádně uchopit a psát...

Unknown

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #36 kdy: 27. 12. 2017, 21:55:51 »
Také mi vadí, že i na čtení diskuze na Devel.cz musíš být registrován. Dost to degraduje jeho smysl.

A ptal jste se Illicha proc to tak je? Treba k tomu maji nejaky dobry duvod...

Míla Rozner

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #37 kdy: 27. 12. 2017, 22:21:44 »
Také mi vadí, že i na čtení diskuze na Devel.cz musíš být registrován. Dost to degraduje jeho smysl.

A ptal jste se Illicha proc to tak je? Treba k tomu maji nejaky dobry duvod...

Ptala se ho spousta lidí. Dokonce byly přímo na Develu otázky/ankety, co vylepšit a vyhrával tam názor, že by aspoň pro čtení měl být otevřený přístup. A nic z toho. Už to fakt nemá smysl řešit.

Kit

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #38 kdy: 28. 12. 2017, 02:24:14 »
Vezmite si uz len taky polymorfizmus, (Objekt A dedi od objektu B, nechytajte ma na terminologii, na triedy sa nehram :) ). Niekde v konfiguracii objektu C je malo dolezity objekt A. S objektom A sa spravi unit test. Unit test prejde. Ale zrazu nieco blbne na produkcii. To preto, lebo v konfiguracii je objekt B.  Uviedol som najtrivialnejsi pripad. Ani rozne "mocky" nie su spasonosne riesenie, lebo nerataju so vsetkymi moznymi nastaveniami v produkcii. OOP vytvara velku sadu moznosti, lebo zapuzdruje vykonavany kod.

Porušil jsi LSP, tak se nediv.

Kit

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #39 kdy: 28. 12. 2017, 02:26:19 »
Pokud refaktoruji víc, tak samozřejmě v součinnosti s uživatelem. Co se jednotkových testů týče, tak stále mám problém je nějak rozumně uchopit, aby byly ku pomoci. Snažím se je dělat, ale přijdou mi zatím takové... Zvláštní... A tvůrce daného ERP je momentálně docela „tlačí“ jako jedinou samospásnou věc (alespoň mi to tak přijde) a myslím si, že zas tak „samospásné“ nejsou, ale jak říkám, možná je neumím řádně uchopit a psát...

Do refaktorování uživatel vůbec nemá co mluvit, neboť funkcionalita se nemění.

Ivan Nový

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #40 kdy: 28. 12. 2017, 08:31:04 »
Unit testy su naviac proceduralne, vhodne na testovanie bezstavovych procedur. (Na OOP nevhodne) Komplexnejsie spravanie sa s tym komplikovane testuje, ze sa na to clovek radsej vykasle. 

Osobne ich pouzivam presne na take procedury, kde viem, ze pre vstup A ma byt vystup B, uz mi to par krat zachranilo zadek.

Unit testy se samozřejmě s výhodou používají i na OOP, protože se jimi dá testovat i stavové chování objektů. Kdyby se daly testovat jen bezstavové metody, byly by takto omezené testy k ničemu.

V tomhle souhlasím. Jednotkové testy a OOP k sobě patří a součástí jednotkového testu běžně je uvedení objektu do nějakého požadovaného stavu a následně provolání jeho metod a kontrola vrácených hodnot a výsledného stavu.

Potíž je spíš v tom, přesně vědět, co má být ten požadovaný a cílový stav a jak se mají konkrétní metody chovat. Často to nikde popsané není a lidé to mají jen v hlavě – na rozdíl od požadavků vnějšího rozhraní, které spíš bývají někde napsané a schválené.
Ale pokial skutocne clovek pise OOP a nie nejaku parodiu na to, tak vztahy medzi objektami neumoznuju dobre pokryt spravanie unit testami. Vezmite si uz len taky polymorfizmus, (Objekt A dedi od objektu B, nechytajte ma na terminologii, na triedy sa nehram :) ). Niekde v konfiguracii objektu C je malo dolezity objekt A. S objektom A sa spravi unit test. Unit test prejde. Ale zrazu nieco blbne na produkcii. To preto, lebo v konfiguracii je objekt B.  Uviedol som najtrivialnejsi pripad. Ani rozne "mocky" nie su spasonosne riesenie, lebo nerataju so vsetkymi moznymi nastaveniami v produkcii. OOP vytvara velku sadu moznosti, lebo zapuzdruje vykonavany kod.


To se klidně může stát, ovšem problém není v OOP, ale v tom, že nemáš nikde přesně specifikované, jak se má který objekt/třída chovat – takže jednotkové testy střílíš od boku. Představ si, že bys měl proceduru s padesáti parametry, některé vstupní, některé výstupní, některé oboje a zdokumentované to budeš mít jen minimálně – přestože tam není žádné OOP, jednotkový test taky nenapíšeš – resp. nějaký napíšeš, ale bude k ničemu, protože nevíš, jak se to (na téhle úrovni) má chovat. Oproti tomu integrační/systémové testy napíšeš a budou ti užitečné, protože třeba implementuješ protokol podle nějakého RFC nebo máš závaznou specifikaci, kterou ti podepsal zákazník – na tom se dá stavět.

(případně nemáš vůbec nic a programuješ to jen na základě domněnek a výkřiků, které se k tobě dostaly po telefonu, ale tam už bych pak nemluvil o vývoji softwaru resp. softwarovém inženýrství)

BTW: dělal jsem i v týmu, kde se drželo 100% pokrytí jednotkovými testy a návrh i na úrovni tříd byl písemně zdokumentovaný a bylo možné psát dobré jednotkové testy – byla to příjemná práce a mělo to úroveň. Ale běžná praxe ve většině firem to rozhodně není – nemají na to. A dokud (pokud) je nedokopeš k tomu, aby bylo dobře specifikované chování na úrovni tříd, tak nemá smysl si nalhávat, že tě jednotkové testy spasí. Je lepší začít tím, co máš dané a dobře popsané – což bývá vnější rozhraní → integrační/systémové testy. A taky až si bude zákazník na něco stěžovat, tak to bude právě rozpor se specifikací vnějšího rozhraní – ovšem jestli si mezi třídami uvnitř předáváš takové hodnoty nebo makové je mu úplně jedno.

To je omyl, softwarové inženýrství je právě z těch výkřiků sestavit funkční systém, který funkčností přesahuje představy zákazníků.

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #41 kdy: 28. 12. 2017, 10:08:57 »
... žvást, žvást, žvást, ...

Ivane Jasánku Nový, ty ses rozhodl, že dneska zrušíš tohle téma, že?

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #42 kdy: 28. 12. 2017, 10:20:59 »
... žvást, žvást, žvást, ...

Ivane Jasánku Nový, ty ses rozhodl, že dneska zrušíš tohle téma, že?

Hele a není lepší na toho dementa nereagovat a nevyvolávat v něm nutkání psát ty hovadské posty?

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #43 kdy: 28. 12. 2017, 11:21:07 »
Do refaktorování uživatel vůbec nemá co mluvit, neboť funkcionalita se nemění.

To sice nemá, ale bez testů to do produkce nepustím... Opravdu si nelajznu, že tam bude nějaká chyba, jsme jen lidé.

jpu

Re:Refactoring - umíte ho? A jak se ho učíte?
« Odpověď #44 kdy: 28. 12. 2017, 11:55:41 »
testy nerobi vacsina firiem. nemaju na to kapacity, seru na to, a jednak nevedia ako na to. taka je realita