IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:28.1.2013 22:17

Dobrý den,
již asi před třemi měsíci mi v hlavě utkvěla myšlenka vlastního browseru. Zdálo se to jako větší sousto, takže jsem rád, že jsem to dal do kupy. Protože mne UI nijak neláká a pohybuji se převážně v Shellu a také proto, že tím dosáhnu vyšší rychlosti, udělal jsem jej v konzoli. Uvažuji ale i o UI verzi, každopádně jsem zvědavý, jaké budou ohlasy. Prohlížeč bude poskytovat nejzákladnější funkce + orvu něco málo z JS a CSS. Dočasně bylo odsunuto odesílání formulářů - dělalo to neplechu. A https protokol mi chviličku potrvá - ale ten snad bude brzy. Jinak prohlížeč běží bez problémů. Rozvržení dialogů teprve vymýšlím, tak nemají žádná tlačítka - všechny dialogy potvrdíte a ukončíte příkazem "ok". Tlačítka tam ale rozhodně přibudou - včetně inputů. V brzké době plánuji možnost nastavení vlastních názvů příkazů, automatické doplňování a s tím související historie, záložky, zprovoznění https protokolu a bezproblémové odesílání formulářů.

Manuál:

Hlavní ovládání:

Všechny příkazy jsou nezávislé na velikosti písmen.

V prvním řádku zadáváte příkazy - klávesou Enter je klasicky odesíláte. Mezi hlavní ovládání se řadí tlačítko Tab - kterým přepínáte Controly dopředu. Posun opačným směrem provedete klávesou F2. Veškerá tlačítka "stisknete" zapsáním jejich názvu jako příkzu. V textu se pohybujete šipkami vertikálního směru - v nastavitelné rychlosti, která je brána spíše jako menší, oproti tomu klávesami PageUp/Down se posunete o celou stránku. Nastavení rychlosti scrollování proběhne příkazem "speed hodnota". Esc, jak už to tak bývá, ukončí program.

Pro Control typu prohlížeč platí následující ovládání:

go - přesune se na zadanou adresu v aktuálním tabu (go url), místo url lze zadat číslo linku - dozvíte se ze stránky, či dialogu links
nt - totéž, akorát se otevře v novém tabu, místo url lze zadat číslo linku - dozvíte se ze stránky, či dialogu links
next - přesune na následující tab, pokud mu zadáte jako parametr URL, automaticky na ni přejde
prev - totéž v opačném směru, pokud mu zadáte jako parametr URL, automaticky na ni přejde
tab - přesune se na zadaný tab (tab číslo tabu => tab 1/2/3/...)
close - zavře buď aktuální tab, nebo ten, který zadáte v parametru s tím, že alespoň jeden tab musí zbýt
forth - přejde o stránku vpřed
back - přejde o stránku vzad
links - zobrazí seznam všech linků a jejich id

Odkaz:

http://www.ulozto.cz/…lithedoe-zip

Je možné, že jsem někde něco zapomněl, či tak - ale snad ne... :)

 
Odpovědět
28.1.2013 22:17
Avatar
matesax
Tvůrce
Avatar
matesax:28.1.2013 22:25

Oprava - jak z obrázků vidíte, docházelo k zkracování inteligentně nezalamovatelných řádků.

Soubor zde:

http://www.ulozto.cz/…lithedoe-zip

(Samozřejmě dále budu updatovat po velkých krocích.)

Editováno 28.1.2013 22:30
 
Nahoru Odpovědět
28.1.2013 22:25
Avatar
matesax
Tvůrce
Avatar
matesax:28.1.2013 22:41

Moc se omlouvám - skutečně poslední oprava - všechno se muselo sejít ve chvíli, kdy už to mělo být OK... Teď už fakt končím. :)

http://www.ulozto.cz/…lithedoe-zip

Editováno 28.1.2013 22:47
 
Nahoru Odpovědět
28.1.2013 22:41
Avatar
Luboš Běhounek Satik:28.1.2013 23:23

Možná by nemuselo bejt špatný schovávat menu a vyvolat ho přes nějakou klávesu, třeba když jsem prohlížel devbook, tak jsem musel pokaždý seskrolovat pod menu, po každý změně stránky a začalo to bejt otravný :) .

A ještě bych upravil adresní řádek - na stránku bych skákal i jen po zadání adresy - bez příkazu go - stačí vzít string po první mezeru a pokud to nevypadá jako žádný vnitřní příkaz, tak to načíst jako stránku.

Nahoru Odpovědět
28.1.2013 23:23
https://www.facebook.com/peasantsandcastles/
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
matesax:29.1.2013 5:51

Proto používej nt - a přecházej mezi taby (next/prev/tab) - tím ti zůstane pozice původní stránky nezměněna. Také si můžeš nastavit rychlost scrollování, či používat PageUp/Down Každopádně plánuji jak panely, tak dolní statusovou lištu. Takže i ProgressBar načtení stránky. Napsal jsem pouze nejbližší změny.

Pro lepší orientaci bude mít seznam tabů obdobný dialog jako links. (v budoucnu i forms)

Jo a s tou URL jako příkaz - dost blbě by se s tím pracovalo - tak 2 písmena tě nezabijí - ne? :) Můj zákazník = můj pán... => kouknu na to.

Editováno 29.1.2013 5:55
 
Nahoru Odpovědět
29.1.2013 5:51
Avatar
matesax
Tvůrce
Avatar
matesax:29.1.2013 8:19

A je to! :) HTTPS oficiálně jede. Můžete tedy konečně prohlížet třeba Facebook. Bohužel na formuláře nemám čas - škola. Ale snad to ještě dnes stihnu...

http://www.ulozto.cz/…lithedoe-zip

 
Nahoru Odpovědět
29.1.2013 8:19
Avatar
lcet.m
Člen
Avatar
lcet.m:29.1.2013 9:12

A hele, HtmlAgilityPack.dll :)

Kazdopadne doufam, ze taky uvidime zdrojak...

 
Nahoru Odpovědět
29.1.2013 9:12
Avatar
matesax
Tvůrce
Avatar
Odpovídá na lcet.m
matesax:29.1.2013 9:30

Svého parseru jsem se nevzdal - chybí mi tam jen jedna kravina - takže si to pak porovnám - a nechám, co z toho vyjde lépe... Zdroják dám do funkční verze. Zde to je jen pro nápady, bugy, atd.

 
Nahoru Odpovědět
29.1.2013 9:30
Avatar
matesax
Tvůrce
Avatar
matesax:29.1.2013 14:51

Zapomněl jsem dodat, že krom pár chybiček jsem přidal i ten příkaz tabs. Nyní jsem ještě opravil další chyby. Až dodělám formuláře, dám to již do normálního článku - i se zdrojáky.

http://www.ulozto.cz/…lithedoe-zip

 
Nahoru Odpovědět
29.1.2013 14:51
Avatar
matesax
Tvůrce
Avatar
matesax:29.1.2013 16:37

Au - zapomněl jsem na cookies - přihlašování a tak. No to bude kruté... :)

 
Nahoru Odpovědět
29.1.2013 16:37
Avatar
matesax
Tvůrce
Avatar
Odpovídá na lcet.m
matesax:31.1.2013 16:18

Ten tvůj slavný HtmlAgilityPack neumí zpracovat formuláře - nenalezne jejich koncovou značku...

 
Nahoru Odpovědět
31.1.2013 16:18
Avatar
lcet.m
Člen
Avatar
Odpovídá na matesax
lcet.m:4.2.2013 22:12

HtmlAgilityPack není můj. Tag form samozřejmě zpracovává stejně jako jakýkoliv jiný tag, nebo jsem nepochopil, jak to myslíš?

 
Nahoru Odpovědět
4.2.2013 22:12
Avatar
matesax
Tvůrce
Avatar
Odpovídá na lcet.m
matesax:4.2.2013 22:15

Nedokáže si poradit s errorem - nenačte zbytek, který mu patří. To tem můj bez problémů... :)

 
Nahoru Odpovědět
4.2.2013 22:15
Avatar
lcet.m
Člen
Avatar
lcet.m:4.2.2013 22:24

No, nesetkal jsem se s tím, ale budiž, možné je všechno. Můžeš ten form s "errorem" ukázat?

 
Nahoru Odpovědět
4.2.2013 22:24
Avatar
matesax
Tvůrce
Avatar
Odpovídá na lcet.m
matesax:5.2.2013 5:48

Právě, že skoro každý... Třeba zdejší vyhledávací...

 
Nahoru Odpovědět
5.2.2013 5:48
Avatar
Зайчик
Člen
Avatar
Odpovídá na matesax
Зайчик:5.2.2013 23:01

klobouk dolů :P líbí škoda že je to v dot netu :D

Nahoru Odpovědět
5.2.2013 23:01
Коммунизм для нашего будущего!
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Зайчик
Kit:6.2.2013 8:47

Kde vidíš .NET?

Nahoru Odpovědět
6.2.2013 8:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 8:50

Třeba screen aplikace úplně nahoře.

Nahoru Odpovědět
6.2.2013 8:50
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:6.2.2013 8:53

Já tam vidím MonoDevelop, na něm linuxovou konzoli, ale .NET nikde.

Nahoru Odpovědět
6.2.2013 8:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 9:04

Aha, to je Linux, já viděl .cs soubory a útržky c# kódu, tak jsem předpokládal taky .NET :)

Nahoru Odpovědět
6.2.2013 9:04
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:6.2.2013 9:12

Zrovna jsem se dočetl, že .NET nemusí být jen na MS platformě, ale je dán specifikací bajtkódu. Takže jsi měl vlastně pravdu. Je to .NET. Výsledné programy se dají spustit na Linuxu i ve Windows. Jen je to na linuxových OS minoritní záležitost.

Nahoru Odpovědět
6.2.2013 9:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 9:17

Jak je to na Linuxu netuším, Linux jsem zkoušel před sedmi lety a nezaujal mě, tak se o tenhle směr moc nezajímám.

Nahoru Odpovědět
6.2.2013 9:17
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:6.2.2013 9:22

Když jsem Linux poprvé zkoušel asi před 15 lety, tak mě také moc nezaujal. Dnes sleduji, jak MS uvádí jako novinky vlastnosti, které byly na Linuxu běžné už před 5 lety.

Nahoru Odpovědět
6.2.2013 9:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 9:36

To mě ani tak nevadí, já jsem na OS (co se týká funkcí) celkem nenáročnej, takže jsem spíš proti velkým novinkám (kterým se nedá vyhnout), protože se zas musím učit něco nového :)

To je taky jeden z hlavních důvodů, proč mě Linux nezaujal - než bych se s ním naučil aspoň na úroveň srovnatelnou s tím, jak se teď orientuju ve Windows (žádný zázrak, ale na vše co potřebuji mi to stačí), než bych našel alternativy programů, které používám, než bych se s nima naučil, tak by to zabralo spoustu času...

Nahoru Odpovědět
6.2.2013 9:36
https://www.facebook.com/peasantsandcastles/
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek Satik
David Čápka Hartinger:6.2.2013 9:39

Já bych Linux klidně používal, ale nikdy mi moc dobře nefungoval, vždy jsem měl problém s nějakým kusem HW nebo mi prostě najednou spadl.

Nahoru Odpovědět
6.2.2013 9:39
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:6.2.2013 9:49

Je fakt, že než jsem si vytunil své linuxové systémy, tak to byla trnitá cesta. Dodnes si vylepšuji Vim o různé šablony, makra a další doplňky, protože bez nich je Vim horší než IDE.

Nahoru Odpovědět
6.2.2013 9:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Čápka Hartinger
matesax:6.2.2013 11:05

Já si Linux složil jako Puzzle - baví mne právě to, že se pořád něco děje... Ale nevžil jsem se tak dobře jako do C# do žádného jiného jazyka - tak zatím dělám majoritně v .NET... Bash Shell skripty se občas hodí - ovšem nenašel jsem s k nim cestu - menší věci dělám v interpretovaných jazycích - JS, Python,... (Zajímavé byly začátky s IDLE.)

Každopádně k Windows se již nikdy nevrátím. (Měl jsem nedobrovolnou přestávku, která jasně ukázala, že Windows není pro mne.) Neberte mne jako jiné fanatiky - schválně píši, že Windows není pro mne - ne že je to strašné, že by měli zrušit Microsoft, atd... Každý má své, jen některé důvody se dají brát jako pokus o satiru...

Editováno 6.2.2013 11:07
 
Nahoru Odpovědět
6.2.2013 11:05
Avatar
matesax
Tvůrce
Avatar
matesax:6.2.2013 12:14

Vy už mi dekrementaci dáváte jen tak - abyste nevyšli ze cviku - ne? :)

 
Nahoru Odpovědět
6.2.2013 12:14
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:6.2.2013 12:19

A tos mi připomněl, že jsem furt ještě nějak nepochopil, proč jsi mi psal, že vyvíjet v IDE je odvážné... Teď už to teda asi chápu - že jako frajeři kódujou v textovym editoru? V tom případě tady nejde o odvahu, jen o stupeň masochismu :)

 
Nahoru Odpovědět
6.2.2013 12:19
Avatar
lcet.m
Člen
Avatar
lcet.m:6.2.2013 12:20

A taky musím uznat, že kdybych měl vyvíjet bez VS, tak bysch asi taky rezignoval na var a ref a out :P

 
Nahoru Odpovědět
6.2.2013 12:20
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:6.2.2013 12:31

Správně. Frajeři IDE nepoužívají, protože si vystačí s textovým editorem. Nejlépe Vim nebo Emacs. Ostatní editory jsou jen náhražkami Notepadu.

Minulý týden jsem si vyzkoušel Eclipse i NetBeans. Ani jedno mě neoslovilo, připadlo mi to takové těžkopádné.

Nahoru Odpovědět
6.2.2013 12:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 13:20

Eclipse a Netbeans přišly težkopádné i mně (dělal jsem v nich PHP a Javu), Visual Studio je (na čistý C#) svižné, s ASP.NET už je to horší :)

Nahoru Odpovědět
6.2.2013 13:20
https://www.facebook.com/peasantsandcastles/
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:6.2.2013 13:41

No, to je asi co člověk to názor. Já si tedy myslím, že minimálně v případě .NET Visual Studio udělá opravdu hodně práce za člověka. Ale samozřejmě v hobby sféře na tom tolik nezáleží. Já bych tedy bez intellisense už programovat nechtěl. Máme 2013...

 
Nahoru Odpovědět
6.2.2013 13:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:6.2.2013 14:39

Intellisense mi také vyhovuje. Proto používám Vim. Udělá hodně práce za člověka. Máme přece rok 2013.

Nahoru Odpovědět
6.2.2013 14:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:6.2.2013 14:47

Vůbec netuším, jak moc je Vim propojený třeba s kompilátorem apod., ale ukazuje třeba syntaktické chyby v kódu při kompilaci?

Jak řešíš debugování - třeba krokování programu apod?

Nahoru Odpovědět
6.2.2013 14:47
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:6.2.2013 15:30

Vim mám propojený z kompilátorem přes Make, ale možností je víc. Každý si to udělá tak, jak mu to nejlépe vyhovuje. Barví syntaxi, takže první filtr je už v editoru a chyby ukazuje přímo kompilátor. Dá se nastavit, že kurzor naběhne na místo chyby, ale já to nepoužívám.

Když používám TDD, tak debugování ani krokování programu nepotřebuji. V TDD dělám i profilování.

Nahoru Odpovědět
6.2.2013 15:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:6.2.2013 17:51

Když používám TDD, tak debugování ani krokování programu nepotřebuji.

Hustý

 
Nahoru Odpovědět
6.2.2013 17:51
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:6.2.2013 17:55

No co? Testy to udělají všechno za tebe. Záleží jen na tom, jak dobře je umíš psát.

Nahoru Odpovědět
6.2.2013 17:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:6.2.2013 19:09

Můžu se zeptat, jen pro představu, jaký cca (rozsahem, určením...) systém jsi takhle někdy dokončil? Nemyslím to nějak rejpavě, jen pro mě je tohle trochu nepředstavitelné. Neumím si představit, jak bych dělal takový test třeba na práci se síťovým streamem, což aktuálně řeším a bez breakpointu a masivního krokování bych nedal dohromady asi nic...

Editováno 6.2.2013 19:09
 
Nahoru Odpovědět
6.2.2013 19:09
Avatar
Odpovídá na lcet.m
Luboš Běhounek Satik:6.2.2013 19:43

Připojuju se k dotazu m.tecla, bez breakpointu, krokování a nahlížení do obsahů proměnných bych se i u některých "jednodušších" věcí asi zbláznil.
Např. v minulém zaměstnání, kde jsme dělali na jednom projektu do škol (70 000 řádků), kde se využívalo renderování 3D scény, síťová komunikace, více vláken, fyzikální engine apod. si bez těchto debugovacích pomůcek představit moc nedovedu, i s nimi se občas některé chyby hledaly dost špatně.

Nahoru Odpovědět
6.2.2013 19:43
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:7.2.2013 8:43

Rozsah není podstatný. Vždy se testuje jen malá část kódu, která je do cca 15 řádek a vzniká postupně. Proto jsem také psal, že se nemají psát delší metody než těch 15 řádek, protože na těch delších by se už muselo krokovat a dávat breakpointy.

Luboš Běhounek Satik: V krátkých metodách je jen minimum proměnných. Místo nahlížení do proměnných si je nechám vypisovat testem. Po odladění to vypisování v testu nahradím assertem.

Nahoru Odpovědět
7.2.2013 8:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:7.2.2013 10:30

Zajímavé, zajímavé... Musím říct, že se mi myšlenka TDD hrozně líbí, ale nějak často narážím na to, že bych měl testy výrazně rozsáhlejší než samotný program, na což v praxi prostě nebývá čas. Tedy čistý TDD, to znamená nejdřív test a potom kód, jsem nezkoušel, ale párkrát jsem se snažil pokrýt testy existující funkcionalitu, abych měl jistotu, že nějakou změnou nerozložím něco funkčního. Ale dělat mockupy na databázi, nedej bože nějak souběžně testovat server a klienta, to mě zkrátka nějak nepřesvědčilo o efektivnosti.

 
Nahoru Odpovědět
7.2.2013 10:30
Avatar
lcet.m
Člen
Avatar
lcet.m:7.2.2013 10:33

Moment, teď mě něco napadalo - ty v tom tvém textovém editoru předpokládám nemůžeš zapnout break na výjimkách uvnitř catch? Tak to už si ale vůbec neumím představit - někde na vrchu ti vyskočí výjimka, která probublala bůh ví odkud a ty nemůžeš ani krokovat, ani zastavit na té výjimce. Tak tohle nemůže být v reálu efektivní, to se na mě nezlob...

A ještě se připtám - píšeš takhle i vícevláknové aplikace?

Editováno 7.2.2013 10:35
 
Nahoru Odpovědět
7.2.2013 10:33
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:7.2.2013 11:00

Testy mám obvykle 2× delší než produkční kód. Čas ušetřený nepsáním testů strávíš ručním laděním. Testy jedou automaticky a prověřují program i po změně běhového prostředí. Tím ten čas šetří. Vždy je něco za něco.

Pokrývat testy stávající funkcionalitu je pozdě. Program se musí přizpůsobovat testům, nikoli naopak.

Mocky na databázi dělám běžně. Je to jednodušší, než to na první pohled vypadá. Server a klient se testují zvlášť.

Výjimku si mohu vyvolat kdy chci jakou chci. Stačí si napsat vhodný mock, který podstrčím konstruktoru přes DI. Výjimku vzniklou v produkčním kódu si zase mohu odchytit v testu.

Jak chceš jinak ladit vícevláknové aplikace než přes TDD? Jak chceš jinak simulovat race condition? Jak simuluješ odpojenou databázi nebo chybné heslo? jak simuluješ chybnou strukturu databáze? Bez TDD to moc nejde.

Nahoru Odpovědět
7.2.2013 11:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka Hartinger
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka Hartinger:7.2.2013 11:05

Obrovská výhoda testů je, že se napíší jednou a poté testují sami. Zatímco při ručním testování je třeba aplikaci testovat stále znovu a znovu na ty samé funkčnosti, které mohla rozbít nová funkčnost.

Nahoru Odpovědět
7.2.2013 11:05
You are the greatest project you will ever work on.
Avatar
lcet.m
Člen
Avatar
lcet.m:7.2.2013 13:56

Zajímavá teorie. Jestli to takhle funguje i v praxi, tak bod pro ty, kdo to zvládají. Já jsem bohužel do TDD ještě nedorostl...

 
Nahoru Odpovědět
7.2.2013 13:56
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:7.2.2013 14:11

Ono to zpočátku připadne dost nelogické psát nejprve testy a teprve pak program. Jenže když ty testy pojmeš jako specifikaci zadání, tak už to nějakou logiku získá.

Když si pak třeba klient stěžuje, že při určité kombinaci hodnot program dává špatné výsledky, tak nejprve testy rozšíříš o tyto vstupní hodnoty (případně o mocky třeba na různé stavy databáze) a doplníš assert na správnou výstupní hodnotu.

TDD hlavně donutí programátora psát kusy kódu tak, aby byly mezi sebou provázány pokud možno pouze přes nějaká rozhraní. Na taková rozhraní pak lepíš z jedné strany mocky a z druhé strany testy.

Nahoru Odpovědět
7.2.2013 14:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:7.2.2013 14:45

Zní to zajímavě, ale přijde mi, že ta časová režie psaní testů musí být hrozně velká (trojnásobek kódu), nehledě na to, že třikrát více kódu = větší šance udělat chybu, třeba i v unit testech.

A předpokládám, že i u TDD se může stát, že člověk něco opomene otestovat, nebo je nějaký postup, kdy se to stát nemůže.

A hlavní problém vidím v tom, že většině zákazníků (pokud to není nějaký bankovní/armádní software) nejde o kvalitu, ale hlavně o cenu, takže ve většině vývojářských firem se věci jako unit testy nepíšou většinou vůbec nebo jen pro nějaká problémová místa kódu.

Kit: ještě k tvému podpisu ("Hodnotit kvalitu programu podle délky kódu je stejné jako hodnotit kvalitu letadla podle hmotnosti.")
Je sakra rozdíl mezi tím, když sám programuješ malou aplikaci o pár tisících řádků, kterou si navrhneš, napíšeš testy a naprogramuješ - pak je jednoduché mít ten program kvalitní, ale u velkých projektů se něco takového dodržuje mnohem hůř - u programů, které mají třeba i stovky tisíc řádků, dělá na nich spousta lidí, kde každý má na programování jiný názor a jiné znalosti, vedení jde jen o to, aby to bylo co nejdříve a stálo to co nejmíň peněz...

Nahoru Odpovědět
7.2.2013 14:45
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Luboš Běhounek Satik:7.2.2013 14:51

(Na konci druhého odstavce mého příspěvku měl být místo tečky otazník.)

Nahoru Odpovědět
7.2.2013 14:51
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:7.2.2013 15:14

Režie psaní testů je časovou investicí, která se zpočátku moc nevrací, ale po zaběhnutí je součet časových nákladů testy+aplikace menší než součet aplikace+ladění. Jednotkové testy sice nenahradí testy integrační, ale ty jsou pak o poznání jednodušší.

Chyby v unit testech samozřejmě dělám také, ale přijde se na to hodně brzo, takže není problém. Psaní testů a aplikace se neustále střídá, za hodinu to může být i několik desítek iterací.

Pokud máš kvalitní zadání, v testech na nic nezapomeneš.

Podstatné na TDD je, že ladění děláš ručně, ale testy děláš automatizovaně. Sice napíšeš 3× více kódu, ale při ladění uděláš těch úhozů na klávesnici stejné množství a dvě třetiny nenávratně zmizí. Takže ve výsledku vidíš jen tu třetinu výsledného kódu. U TDD ti testy zůstávají napořád.

Ano, je velký rozdíl mezi Cesnou a Jumbem. To druhé je větší, těžší, kvalitnější a unese víc cestujících. Hmotnost však nemůže být jediným kritériem.

V programování je to stejné. Někdo napíše program na tisíc řádek a já udělám totéž na třech řádcích třeba využitím té správné knihovny. Znamená to snad, že jeho program je kvalitnější, když je delší?

Vedení vůbec nemusí tušit, že děláš TDD. Vývoj to nezpomaluje, ale zrychluje.

Nahoru Odpovědět
7.2.2013 15:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:7.2.2013 16:02

Kvalitní zadání jsem snad ještě neviděl, často ani zákazník pořádně sám neví, co chce.
A když se nějaký základní návrh dělá, tak je to většinou zhruba na úroveň důležitých tříd a jejich nejdůležitějších funkcí.

Některé problémy se podle mě při návrhu ani najít nedají, takže ti je testy neohlídají.
Např. jsme v předchozím zaměstnání ve hře řešili problém s fyzikou, kdy jsme využívali cizí fyzikální engine a nastal problém, že když se hráč přiblížil k domečku, tak ho to občas vystřelilo někam do vesmíru.
Ve hře je také možné do věcí kopat a nakonec jsme zjistili, že stačí dostatečně dlouho kopat do domečku a ten (i když je zafixovaný, takže se sám hýbat nemůže) se jakoby "nabije" energií a při kolizi ta obrovská energie hráče odmrští někam pryč.
I kdybych měl celý program sebelépe zadaný, tak by mě tohle nenapadlo.

Ladění jsme většinou prováděli až ve chvíli, kdy něco nefungovalo, nebo fungovalo špatně/pomalu, rozhodně jsme každou nově přidanou věc neladili hned ručně, takže pořád jsme cca na trojnásobku práce - na jedné straně psaní kódu a ladění chyb (až když se vyskytnou) a na druhé straně psaní testů vždy, psaní kódu a ladění chyb (až když se vyskytnou).

K té délce programu: já tím nechtěl říct, že delší program je kvalitnější, ale že u krátkých programů je mnohem jednodušší je udržet kvalitní, protože na tom většinou dělá jen jeden nebo dva lidi a celý program je jednodušší -> menší prostor k udělání chyby.
Na těch dlouhých programech obvykle dělá mnohem víc lidí, a jsou prostě mnohem komplikovanější -> více prostoru na udělání chyby.

Nahoru Odpovědět
7.2.2013 16:02
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 51 zpráv z 51.