Как TDD научил меня не использовать TDD

от автора

Думаю, это будет простая заметка и объяснение, без придирчивых преобразований, но та самая мысль о том, что TDD научил меня мыслить по-другому — правда. Но в итоге, это привело к тому, что я отказался от него.

Давным давно, в 2009 году, прослышав о TDD я решил внедрить его в команду, будучи даже не тимлидом. Надо мной посмеялись и сказали: ну, давай, попробуй.
И я честно пытался. Итого над своим кодом я порой думал несколько часов и писал почти идеальный код (ну, вы же понимаете). В итоге, все придирки от ревьюверов было «ну, тут можно же вот так и вроде норм».
И это был чэллендж, брошенный самому себе. И я его выполнил в течение месяца. И научился писать код, который легко покрывал все мои тесты TDD.

Как я пишу функцию. Начнем с сложения двух чисел:

function calc(a,b){ 	return a+b; } 

Хм, но ведь всякое бывает.

function isNumber(n){ 	return Number(n); } function calc(a,b){ 	return isNumber(a)+isNumber(b); } 

Да, но это же не все…

function isNumber(number){ 	const n = parseInt(number, 10); 	const result = !isNaN(n) && isFinite(n); 	return result && n; } function calc(a,b){ 	const newA = isNumber(a); 	const newB = isNumber(b);  	if (typeof(newA)==="number" && typeof(newB)==="number"){ 		return a+b; 	} 	return null; } 

Но блин, это ведт тоже не все…

function isNumber(number){ 	n = parseInt(number, 10); 	const result = n.toString()===number.toString() && !isNaN(n) && isFinite(n); 	return result && n; }  function calc(a,b){ 	const newA = isNumber(a); 	const newB = isNumber(b);  	if (typeof(newA)==="number" && typeof(newB)==="number"){ 		return a+b; 	} 	return null; } 

Вот, теперь кажется все.

К чему я это? А, да. Не доверяй входящим переменным.
И не доверяй возвращаемым переменным. Не до фанатизма, но все-таки.
Тесты могут поменять. И при этом проверять будешь не ты, а кто-то другой, который даже не увидит ошибку: не во всех проектах выделяют 2 часа на ревью.
Со временем я перестал писать тесты от слова совсем, но я всегда и исключительно всегда спрашивал: ты уверен что там придет число? Или не null? А вдруг это будет что-то иное? А если функция вернет тебе ошибку или еще какую-нибудь дичь?
Да, не любили, да, боролись, а потом приняли в паре ошибок и понеслось.

Не верьте входящим переменным, не верьте результату и код будет сложноватым, но безопасным.

ссылка на оригинал статьи https://habr.com/ru/post/487192/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *