Pracnost pokrytí legacy kódu unit testy testy rubrika: Programování: Jiné

2 Tom Developer
položil/-a 16.5. 11:58

Zdravím vespolek,

zvažujeme jak u nás vyrobit testy k existujícímu kódu. Uvažuji, jak to může být pracné. Máte někdo zkušenosti s projektem tohoto typu?
Uvítám jakékoli zkušenosti, nemusí se týkat rozsahu níže popsaného projektu.

Vím, že by to chtělo kód zároveň i refaktorovat, ale aktuálně je business cílem vytvořit unit testy. (Ostatní typy testů nejsou na závadu) Takže refactoring v míře nutné pro nasazení
testů. (každopádně je to i doporučený postup z Working Effectively with Legacy Code. Vím že tvořit testy k existujícímu starému kódu není snadné. Dejme tomu, že někdo z týmu v tom má alespoň minimum praxe.

Parametry projektu:

  • Rozsah: Desítky let práce menšího týmu. Poslední léta se více upravuje než tvoří nový kód.

  • Velikost kódu - stovky adresářů, vyšší tisíce souborů, nižší milióny řádků kódu.

  • Zapeklitost: Někdy byl kód psán s ohledem na čitelnost, jinde ne. Oficiálně se koukalo pouze na to, zda/jak daná věc funguje. Často se stane, že najdete
    "optimalizace" snižující čitelnost. Existují části kódu které lze přepisem zkrátit i 10 krát.

  • Správa verzí (SVN) obsahuje jen část historie za několik posledních let.

  • Použitý jazyk: Většinou C++, C. (Jen zlomek je v C++ 11 resp. C++ 14).

  • Realizační tým značnou část toho kódu zná.

  • Porůznu existuje, často bohužel zastaralá, dokumentace. Kde není lze v rámci projektu prohlásit současné chování za správné.

Komentáře

  • Tom Developer : I ve vývoji SW postupně začínají vznikat smysluplné technické normy pro systémy, které jsou nějykým způsobem kritické. Vidím paralelu s tím, že lávku přes potok si mohu postavit podle svého, ale k projektu silničního mostu přes údolí je také třeba dodat dokumentaci podpovídající ČSN. Stejně tak některé nasazení SW vyřaduje, díky bohu, existanci unit testů. Více bohužel zatím nemohu prozradit. 23.5. 8:24
  • Tom Developer : Díky za odpovědi. Vím, že refactoring je často nutnou součástí vzniku unit testů. Jeden z důvodů proč je existence unit testů dobrým příznakem kvality SW. A že něco takového nejde odhadnout. 23.5. 8:28
  • skodap : Ahoj, znamena to, ze unit testy musite pridat kvoli spleniu ČSN? 25.5. 15:14
  • Tom Developer : Zákazník je z ciziny. Nicméně existuje i ČSN požadující unit testy. Ale to už je případně na samostatnou otázku. 25.5. 17:39
  • kohven : V takových smlouvách většinou bývá i nějaké "právo na audit softwaru někým od zákazníka", takže bych si dal velký pozor na to, ty testy jen tak nafejkovat nebo říkat unit testy něčemu, co ze své povahy unit test prokazatelně není (trvá desítky vteřiny, leze do DB, ovlivňuje jiné testy, apod...). 28.5. 17:26
  • Tom Developer : Většina odpovědí radí jít shora. Souhlasím a také začnu u komponentních testů. Zatím jsem si musel napsat logovací obal svěřené komponenty, abych zjistil, jak se používá. A už se tím našla statická proměnná, která nejspíš dělá problémy. Tak teď to ještě vysvětlit okolí. 21.7. 11:52
odkaz
8 kohven
odpověděl/-a 17.5. 15:43

Pokud to chcete kvůli sobě (nemáte to ve smlouvě se zákazníkem), tak bych asi taky unit testy v první fázi vzdal.
Většinou už se to takhle dodatečně bez velkého refactoringu dopsat nedá. Ale jakýkoliv automatizovaný test je lepší než žádný,
takže už testování velkých celků může být překvapivě užitečné. Imho hlavní užitečnost unit testů je v tom, že člověka nutí psát jinak. Více SRP.
Ale pokud vám vedení řeklo: Že unit testy musí být za každou cenu, čeká vás dlouhá cesta a refactoring v míře nutné pro nasazení unit testů taky může v některých případech znamenat kompletní přepsání.

Komentáře

  • harrison314 : Suhlasim, sam som sa stretol s legaci projektami, co bolo staticke peklo, to sa testovat (unit testami) nedalo, nejake testy su fajn, ale tu by som skor siel tym, ze sa bude testovat to co sa da (Ui testy, integracne testy,...). 17.5. 16:52
  • Občan : Souhlas. Raději i pracuji na kódu, který je na první pohled krásně testovatelný a bez testů. Než na nějakém balastu, co má nicneříkající testy převážně o tom, že metoda je definovaná a při jedné sadě vstupu něco vrací. Ale pochopitelně live unit testy, které při každém uložení vypíšou počet úspěšných testů jsou prostě paráda, ale hold ne vždy to jde. 18.5. 18:37

Pro zobrazení všech 9 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.

Otázky uživatele Tom Developer