неделя, 11 декември 2011 г.

Code retreat #3

На 3ти декември се проведе Code Retreat #3.

Събрахме се 20тина души на различно ниво, с основната идея да се осъвършенстваме като програмисти. За повечето TDD беше нова концепция, така че основния фокус беше върху нейното овладяване.

Ще опиша накратко какво научих от срещата:
  • Тестването е хубаво нещо. Ако имате възможност - правете го. Не че не го знаех това и преди, но сега е по-затвърдено :)
  • Тестовете са идеалния начин да се рефакторира кода. Причината е, че при наличие на тестове сме малко по-спокойни и сме готови да направим по-големи промени на кода.
  • Писането на fake-ове, с други думи код, който не е верен в общия случай, но прави така, че тестовете да минават, е установена практика. До колко съм съгласен с нея още не знам :)
  • TDD не е сребърен куршум. Според мен трябва да се използва с мярка. Понякога влагането на малко повече време в началото за взимане на важни дизайнерски решения ще се отплати многократно по-късно. Това, че TDD се фокусира върху конкретното следващото нещо, което трябва да се имплементира, и това по някакъв начин ни успокоява, защото имаме да мислим за малко неща е хубаво, но според мен е твърде силно опростяване.
  • Тестовете са хубав начин за комуникация. Може би много по-добър от вербалната комуникация, защото 1) стоят в репозиторито и 2) могат да бъдат изпълнени. Ако има възможност да се генерира документация и примери от тестове аз съм "за" с 2 ръце. Също - ако може да се намали изпращането на мейли, чатове и вербална комуникация между членовете на един екип за сметка на повече и по ясни тестове, "за" съм с 3 ръце :)
В заключение, TDD е малко или много свързано с писане на тестове. Ако имате удобен начин да пишете тестове не ви коства много да пробвате TDD. Проблема в момента е, че практиката да се пишат тестове не е добре улегнала в повечето проекти, и ако решите да пишете patch за проект, който не ползва тестове, шансовете са че и вие няма да напишете тест, защото първоначалното усилие по изграждането на условия за тестване не е малко. От друга страна ако проекта ползва тестове, то направо е престъпление да го допълвате, без да пишете тестове към него, даже в някои случаи няма да ви позволят.

Така че, ако имате възможност да пишете тестове -- пробвайте TDD. Ако не, поне се старайте новите проекти в които участвате да имат изградена система за тестване, и ползвайте TDD в тях :) Ако TDD не ви харесва, нека това не подбива мнението ви за тестването по принцип.