Dozvuky pražského setkání: Je psaní testů příliš drahé?

Posted by Jan Kubr Fri, 10 Aug 2007 09:03:00 GMT

Minulý týden se v pražském Světozoru uskutečnilo druhé setkání příznivců Ruby on Rails. Průběh setkání pěkně popsal Jirka Kubíček. Právě jemu a Karmimu patří velký dík za bezvadně zvládnutou organizaci. Já jsem se na ní jen vezl a promluvil krátce na mé oblíbené téma - testování v Ruby on Rails. Dostupné jsou slajdy z přednášky a ukážeme i nějaké fotky, to ale až o něco později, vyvolání filmu přece jen chvíli trvá;). Později také doplním podrobnější články o představených testovacích nástrojích a postupech. Dnes velmi neodborně na takové "ekonomické" téma.

Diskuze po prezentaci se dotkla zajímavého tématu, totiž jestli se testovat opravdu vyplácí. David Majda správně upozornil, že důsledné psaní testů znamená, že v podstatě píšete všechen kód dvakrát nebo i víckrát. Podotkl, že to tedy znamená minimálně dvojnásobné náklady a že bychom si proto měli spočítat, kolik nás potenciální chyba v naší aplikaci stojí a na základě toho rozmyslet, jestli testovat nebo ne. (Doplnil své oblíbené "většina dat na webu je víceméně bezcenná").

S onou poznámkou o bezcennosti asi nemá smysl dlouho polemizovat, snad jen podotknu, že s rozvojem internetu jako aplikační platformy se přes web přistupuje k velmi cenným datům a jejich poškození může stát opravdu hodně.

Spíš jsem ale přemítal o té úvaze "kvalitní testy -> min. 2x tolik kódu -> min. 2x větší náklady", která mi ve Světozoru přišla jako platná. Včera jsem (opět) přepisoval část kódu, který napsal někdo jiný, abych ho mohl znovupoužít na implementaci chtěného (víceméně jsem něco zjednodušoval a částečně přesouval z controlleru do modelů).

Původní kód byl dobře pokryt testy, a tak jsem nejen velmi rychle zjistil, jestli jsem svým refactoringem něco rozbil (hádejte, samozřejmě že ano), ale i více pochopil, jak má vše fungovat, protože detailně (programátorsky) to samozřejmě nikde specifikované nebylo. Snažil jsem se představit, jak bych něco podobného provedl bez testů a ta myšlenka mě celkem vystrašila. Trvalo by mi daleko déle zjistit, co chtěl autor svou Ruby básní říci a myslím, že (z nedostatku trpělivosti) bych stejně vyprodukoval něco, co by v nějakých krajních případech rozbilo předešlou funkcionalitu.

Tedy ano, kódu jsem napsal daleko více, než kdybychom netestovali, ale čas strávený jeho vytvářením byl kratší, než kdybychom žádné testy neměli. O větší radosti z takové práce ani nemluvě. Myslím tedy, že od určité velikosti projektu a počtu tvůrců je psát testy ekonomicky výhodnější.

Na druhou stranu uznávám, že malý nekritický projekt jednoho programátora testy příliš nevyžaduje. (Každý malý projekt by ale měl mít velké ambice;).

Spatlal jsem takový graf, který myšlenku shrnuje:

Na začátku projektu se psaní testů může zdát zbytečné (případně jako na setkání zmíněná onanie) a je to pochopitelné, protože jejich efekt se ještě neprojevuje. Později ale od začátku důsledně psané testy čas šetří a pomáhají udržet kód čistý a s malým množstvím chyb.

2 comments | Tags , | atom

Comments

Leave a response

  1. Avatar
    Honza
    about 1 hour later:
    neb jak řikaj panove z twitteru: "Testy vás zachrání, když jste v průseru, nebo potřebujete něco rychle změnit..." Nesouhlasím s tím, že malý projekt o jednom programátoru se bez testů obejde, protože z vlastní zkušenosti vím, že kód, který jsem psal před docela dlouhou dobou je skoro jako cizí a nejsem schopen si plňe uvědomit všechny vazby, jedině testy mě můžou upozornit, že dělám něco špatně. Testy jsou holt investicí do budoucna a ještě jsem neslyšel někoho kdo by praktikoval nebo jenom zkoušel TDD a tvrdil, že se mu to nakonec nevyplatilo.
  2. Avatar
    David Majda
    about 1 hour later:

    V zásadě s tebou souhlasím, že ta úvaha typu "2x víc kódu -> 2x dražší vývoj" je poněkud zjednodušená. Trochu jsem si to uvědomil už během diskuze ve Světozoru, ale nechtěl jsem to tam už nějak víc rozpitvávat. Šlo mi hlavně o to, upozornit na nutnost nad věcmi přemýšlet, a ne je bezhlavě používat "protože je to teď in".

    S velikostí projektu a počtem lidí máš 100% pravdu, sám jsem to viděl na našem matfyzáckém softwarovém projektu (6 lidí). Tam se testy moc vyplatily. Podobně když je kód trochu složitý a "nelineární" (v tom smyslu, že malá změna někde způsobí nečekaný problém úplně jinde) - to je zas případ mé diplomky, kteoru mám testy poměrně dobře pokrytou, a myslím že se mi to vyplácí.

    Jo a jsem rád, že ses dotknul tématu "radosti z práce". To je totiž faktor dost podstatný, málo zmiňovaný a také dost obtížně měřitelný.

Leave a comment