Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 00:07
Оценка: 8 (4) +1 -7 :)))
Потому что тема больно общая.

Вчера наткнулся на это (вроде не баян). ППКС, так как я сам test infected. Программистам смотреть обязательно, вне зависимости от языка и платформы.

26.06.09 18:04: Перенесено модератором из 'О жизни' — Кодт
www.blinnov.com
Re: Юнит-тесты: пожалуй, лучше в "О жизни"
От: iHateLogins  
Дата: 25.06.09 02:25
Оценка: 7 (4) +7 -3 :)))
Юнит-тесты уже становятся параноей, в 99% они превращаются в тестирование сеттеров и геттеров и код типа Assert.AreEqual(2+2, 4). Ну или еще очень модно тестировать всякие "бизнес-методы" типа GetCustomerByID , которые неявно превращаются в тестирование движка БД.

Я уже не говорю, что юнит-тесты значительно усложняют доработки в системе, потому что любая доработка становится ГЕМОРРОЕМ, надо перерабатывать и рефакторить кучу тестов, и value от юнит-тестов начинает асимптотически стремится к нулю. Также юнит-тесты привносят кучу неявных contracts, т.е. любой метод, который я хотел бы скрыть и доработать по мере необходимости, становится "public contract" и на него появляются внешние зависимости.

Функциональные тесты куда как более ценны, хотя и с ними тоже нужно знать меру.

Короче, никакие тесты не сделают из плохого кода хороший и не уменьшат стоимость разработки просто от их наличия. Пишите лучше код, следите за руками, думайте о коде и нанимайте хороших ручных тестировщиков — которые, конечно, должны в коде хотя бы приблизительно разбираться.
Re: Юнит-тесты: пожалуй, лучше в "О жизни"
От: Anton Batenev Россия https://github.com/abbat
Дата: 25.06.09 02:50
Оценка: +5
Здравствуйте, landerhigh, Вы писали:

l> Потому что тема больно общая.

l> Вчера наткнулся на это (вроде не баян). ППКС, так как я сам test infected. Программистам смотреть обязательно, вне зависимости от языка и платформы.

Эм. А ссылка правильная? А то у меня вот это :\
avalon 1.0rc1 rev 247, zlib 1.2.3
Re[2]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 04:09
Оценка: +1
Здравствуйте, iHateLogins, Вы писали:

HL>Юнит-тесты уже становятся параноей, в 99% они превращаются в тестирование сеттеров и геттеров и код типа Assert.AreEqual(2+2, 4).

Не читал, но осуждаю, да?

Если Вы не умеете их готовить, то это вовсе не значит, что все не умеют.
www.blinnov.com
Re[2]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 04:09
Оценка: :)
Здравствуйте, Anton Batenev, Вы писали:

AB>Эм. А ссылка правильная? А то у меня вот это :\

Правильная. Попробуй в лисе.
www.blinnov.com
Re[3]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: iHateLogins  
Дата: 25.06.09 04:33
Оценка: 1 (1) +4
Здравствуйте, landerhigh, Вы писали:

HL>>Юнит-тесты уже становятся параноей, в 99% они превращаются в тестирование сеттеров и геттеров и код типа Assert.AreEqual(2+2, 4).

L>Не читал, но осуждаю, да?

L>Если Вы не умеете их готовить, то это вовсе не значит, что все не умеют.


Да я не осуждаю сами юнит-тесты, идея-то неплохая в общем, и для ряда задач очень нужная. Для парсеров, компиляторов итд. Для ERP-барахла, однако, где, как тут недавно говорили, 2+2 не всегда равно 4, юнит-тесты очень часто оказываются пустой тратой времени. Не всегда, но очень часто.
Re[4]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 04:34
Оценка: +1
Здравствуйте, iHateLogins, Вы писали:

L>>Если Вы не умеете их готовить, то это вовсе не значит, что все не умеют.

HL>Да я не осуждаю сами юнит-тесты, идея-то неплохая в общем, и для ряда задач очень нужная. Для парсеров, компиляторов итд. Для ERP-барахла, однако, где, как тут недавно говорили, 2+2 не всегда равно 4, юнит-тесты очень часто оказываются пустой тратой времени. Не всегда, но очень часто.
В этой презентухе как раз основное внимание уделено всем тем мифом, что ты привел в своем посте. В том числе и по геттерам прошлись и иже с ними.
www.blinnov.com
Re: Юнит-тесты: пожалуй, лучше в "О жизни"
От: Laurel  
Дата: 25.06.09 05:01
Оценка: 3 (3) +9 :))) :))
Здравствуйте, landerhigh, Вы писали:

А еще можно было в виде плагина к Chrome сделать. Было бы еще круче, а потенциальная аудитория еще меньше.
Re: Юнит-тесты: пожалуй, лучше в "О жизни"
От: BokiyIS  
Дата: 25.06.09 05:36
Оценка: 1 (1) +5
Здравствуйте, landerhigh, Вы писали:

L>Потому что тема больно общая.


L>Вчера наткнулся на это (вроде не баян). ППКС, так как я сам test infected. Программистам смотреть обязательно, вне зависимости от языка и платформы.


Они бы ещё в этой презентации каждую букву на отдельный слайд вынесли
Re: Юнит-тесты: пожалуй, лучше в "О жизни"
От: neFormal Россия  
Дата: 25.06.09 06:16
Оценка: 3 (1) +3
Здравствуйте, landerhigh, Вы писали:

L>Программистам смотреть обязательно, вне зависимости от языка и платформы.


если надо столько времени доказывать полезность тестов, значит с идеей тестирования не всё в порядке.. //К.О.
...coding for chaos...
Re[2]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 06:24
Оценка:
Здравствуйте, neFormal, Вы писали:

F>если надо столько времени доказывать полезность тестов, значит с идеей тестирования не всё в порядке.. //К.О.

Прочитал сначала это, потом твою подпись. Глубоко задумался.
www.blinnov.com
Re[3]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: neFormal Россия  
Дата: 25.06.09 06:40
Оценка:
Здравствуйте, landerhigh, Вы писали:

F>>если надо столько времени доказывать полезность тестов, значит с идеей тестирования не всё в порядке.. //К.О.

L>Прочитал сначала это, потом твою подпись. Глубоко задумался.

это хорошо, что возражений не последовало..
...coding for chaos...
Re[2]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: x64 Россия http://x64blog.name
Дата: 25.06.09 06:49
Оценка:
BIS>Они бы ещё в этой презентации каждую букву на отдельный слайд вынесли

Угу, запарился тыкать...
JID: x64j@jabber.ru
Re[4]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: landerhigh Пират  
Дата: 25.06.09 07:05
Оценка:
Здравствуйте, neFormal, Вы писали:

F>это хорошо, что возражений не последовало..

А тема не для этого. С теми, кому "тесты писать некогда, копать надо", спорить бесполезно.
www.blinnov.com
Re[5]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: neFormal Россия  
Дата: 25.06.09 07:11
Оценка:
Здравствуйте, landerhigh, Вы писали:

F>>это хорошо, что возражений не последовало..

L>А тема не для этого. С теми, кому "тесты писать некогда, копать надо", спорить бесполезно.

заметь, я этого не говорил..
вот так потихоньку и откроются все проблемы авто-тестов
...coding for chaos...
Re[5]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: iHateLogins  
Дата: 25.06.09 07:39
Оценка: +4 -3
Здравствуйте, landerhigh, Вы писали:

L>>>Если Вы не умеете их готовить, то это вовсе не значит, что все не умеют.

HL>>Да я не осуждаю сами юнит-тесты, идея-то неплохая в общем, и для ряда задач очень нужная. Для парсеров, компиляторов итд. Для ERP-барахла, однако, где, как тут недавно говорили, 2+2 не всегда равно 4, юнит-тесты очень часто оказываются пустой тратой времени. Не всегда, но очень часто.
L>В этой презентухе как раз основное внимание уделено всем тем мифом, что ты привел в своем посте. В том числе и по геттерам прошлись и иже с ними.

Видно, что презу писал какой-то дебиловатый скрум-мастер или тренер, который сам код не трогал и не писал и не представляет себе, что применимость юнит-тестов сильно зависит от предметной области.

Одно дело — реализация спеки какого-то стандарта, которая (реализация) будет черным ящиком. Пример — парсер XML, XSLT, регекспов. Реализаций куча — спека одна. Другое дело — это "бузинесс"-"методы" GetCustomerById, который состоит из вызова "select * from Customer where CustomerID = @id", в котором тестировать НЕЧЕГО. Ну т.е. конечно можно протестировать что он возвращает кастомеров с ID=3, ID=1, поддерживает отрицательные ID, в результате есть такие-то колонки итд. Но усилий по написанию и, главное, поддержке вы потратите гораздо больше, чем если просто откроете site.com/Customers/1 и убедитесь, что оно не валится. Ну или заскиптуете каким-нить веб-кликером за 5 секунд. Или просто Вася зайдёт на страничку и убедится, что не валится.

Короче, Шура, пишите, пишите тесты. Только потом не возмущайтесь, добавление колонки в базу стало СВЕРХ-СЛОЖНЫМ ИНЖЕНЕРНЫМ ПРОЕКТОМ.
Re[5]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: neFormal Россия  
Дата: 25.06.09 08:01
Оценка:
Здравствуйте, landerhigh, Вы писали:

L>В том числе и по геттерам прошлись и иже с ними.


вроде единственное упоминание get/set было о том, что не стоит их обкладывать тестами, чтобы повысить "покрытие кода тестами"..
как то несерьёзно даже..
...coding for chaos...
Re[5]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: iHateLogins  
Дата: 25.06.09 08:06
Оценка: 3 (2) +6 -2
Здравствуйте, landerhigh, Вы писали:

F>>это хорошо, что возражений не последовало..

L>А тема не для этого. С теми, кому "тесты писать некогда, копать надо", спорить бесполезно.

Также бесполезно спорить с людьми, которые вместо того, чтобы копать (заметьте — не решать дифуры, не искать нефть, а именно копать) начинают "тестировать лопату" каждые 15 минут, проверять схемы экскаватора, цементируют яму бетоном (для надёжности), хотя знают, что завтра бетон придётся вытаскивать обратно.

Имхо, всё это — естественная реакция. ИТ так далеко шагнуло за последние 10 лет, что, если писать эффективные программы ЭФФЕКТИВНО, толпу всякой около-итной шушеры придётся гнать взашей. Вот они и держутся, как могут. И начинается... простейшие сайтики становятся сложнейшими инжереными проектами с командой поддержки в 20-30 человек, вместо простых селектов в базе накручиваются просто МЕГАТОННЫ всякого водопроводного (plumbing) говно-кода, фреймворки над фреймворками... а дальше начинается... добавить колонку? СЛОЖНЕЙШАЯ ЗАДАЧА! Переработать модуль? Да проще новый написать, желательно даже не модуль, а проект с нуля, потому что разобраться в тоннах запутанного кода с десятками тысяч никому не нужных юнит-тестов становится просто невозможно.
Re[2]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: iHateLogins  
Дата: 25.06.09 08:17
Оценка: 1 (1) +1 -3
Знакомо?

[TestMethod]
public void TestCustomerObject()
{
   Customer c = new Customer();
   c.Name = "Vasya";
   Assert.AreEqual(c.Name, "Vasya");
}



или вот еще:
[TestMethod]
public void TestCustomerObject()
{
   Customer c = new Customer();
   c.ID = 1;
   c.Name = "Vasya";
   c.Create();
    
   Customer c2 = GetCustomerByID(1);
   Assert.AreEqual(c.Name, c2.Name);
}



И это нынче называется "юнит-тестами бизнес-логики"! Бизнес, блин, логики!
Re[6]: Юнит-тесты: пожалуй, лучше в "О жизни"
От: Vladek Россия Github
Дата: 25.06.09 08:39
Оценка: 1 (1)
Здравствуйте, iHateLogins, Вы писали:

L>>В этой презентухе как раз основное внимание уделено всем тем мифом, что ты привел в своем посте. В том числе и по геттерам прошлись и иже с ними.


HL>Одно дело — реализация спеки какого-то стандарта, которая (реализация) будет черным ящиком. Пример — парсер XML, XSLT, регекспов. Реализаций куча — спека одна.


Ага, тестировать надо только публичный API.

HL> Другое дело — это "бузинесс"-"методы" GetCustomerById, который состоит из вызова "select * from Customer where CustomerID = @id", в котором тестировать НЕЧЕГО. Ну т.е. конечно можно протестировать что он возвращает кастомеров с ID=3, ID=1, поддерживает отрицательные ID, в результате есть такие-то колонки итд. Но усилий по написанию и, главное, поддержке вы потратите гораздо больше, чем если просто откроете site.com/Customers/1 и убедитесь, что оно не валится. Ну или заскиптуете каким-нить веб-кликером за 5 секунд. Или просто Вася зайдёт на страничку и убедится, что не валится.


Из презентации:

Test only that API exposes.


В GetCustomerById, если это часть public API, тестируется маппинг объектов. Доступ к БД мокируется. Если такой тест трудно написать, значит в этом методе проблемы и само намерение написать тест уже показало это.

Если приходится тестировать закрытый метод, то это в 99% случаев значит что этот метод должен быть открытым в другом классе.


HL>Короче, Шура, пишите, пишите тесты. Только потом не возмущайтесь, добавление колонки в базу стало СВЕРХ-СЛОЖНЫМ ИНЖЕНЕРНЫМ ПРОЕКТОМ.


Ну я говорю, с маппингом проблемы.
enum Bool { True, False, FileNotFound }
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.