Re[11]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 20:25
Оценка: 6 (1)
Здравствуйте, samius, Вы писали:

S>У нас HG. Он тоже умеет, но т.к. изменения расползаются по репозиториям, откат в основном репозитории не очень популярная мера. Мерж был все равно преждевременен.

Нет. hg умеет именно откатывать (чего свн не умеет). Я же предлагаю сделать новый КОМИТ с откатом. Тогда этот комит расползется ко всем.
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[10]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 13:05
Оценка: 3 (1)
OS>>А, понял. Не тестируете бесполезный код. Тут я с вами согласен.
OS>>Вот только я предпочитаю вообще не иметь бесполезного кода.
A>Ээээ, а почему код, который регистрирует нового пользователя стал бесполезным? И как не иметь системы регистрации пользователей?

Я там имел ввиду, что распределение обязанностей по классам в ASP.NET не удобное. Из-за этого приходится писать всякую чушь. В Вашем примере — не "код который регистрирует нового пользователя", а код, "который реагирует на комманду контроллера с тем чтобы выполнить регистрацию пользователя и определить реакцию веб сервера на запрос". Он еще и не напрямую вызывается... Бэээээээ!
Короче архитектура должна быть другая и тогда такого кода вообще не возникает.
Re[3]: Developer Testing
От: vnfedotov Россия  
Дата: 27.11.09 18:57
Оценка: 1 (1)
Здравствуйте, npe, Вы писали:

npe>Но такие тесты должна писать отдельная команда, пусть даже выделенная из состава разработчиков? Мне думается именно так. Ведь, по сути, что модульные, что интеграционные, что функциональные тесты — это почти самостоятельные под-проекты. Заниматься ими время от времени (например, ближе к концу релиза) смысла большого нет (это уже из моего опыта).


Есть тесты и есть тесты. Функциональные тесты разработчиков — это не самостоятельные подпроекты, это часть процесса разработки. Заниматься ими после разработки — трата дорогого времени разработчика. Посмотрите в сторону Test-driven development. Разработчик пишет unit-тесты, пишет стаб класса и его методов. Прогоняет unit-тесты. Все тесты фейлят(если тест проходит на стабе, это плохой тест). Разработчик пишет и правит реализацию, до тех пор пока все тесты не пройдут.

Можно ли считать такие тесты тестированием? Нет. Приведу простой пример из книжки Бейзера "Тестирование черного ящика":
нужно написать метод вычисления функции y=x^2;
разработчик написал такой юнит-тест: assert(y(2)==4);
в реализацию вкралась ошибка, вместо y=x^2 получилось y=2*x;

Юнит-тест проходит, а метод реализован неправильно. Кто виноват? Виноват PM, который не выделил команду тестировщиков. Тестировщики тестируют совсем иначе. Правильный тестировщик разобьет входные данные на классы эквивалентности, например [-2;0;2], и обязательно обнаружит такую ошибку на одном из тестов, в данном случае 2 из 3-х зафейлят.

Классы эквивалентности — лишь одна из техник, ваши разработчики знакомы с теорией тестирования? Вряд ли. Потому что они не должны быть с ней знакомы.

Вывод: разработчики должны писать юнит-тесты, они избавят от глупых ошибок и траты времени группы тестирования на ошибки типа "метод падает при любом вызове"; группа тестирования должна быть и должна писать свои тесты, функциональные/интеграционные и все какие понадобятся; ожидать, что юнит-тесты разработчиков хоть как-то повлияют на качество ошибочно — хороший разработчик и без тестов делает мало ошибок, плохому тесты не помогут.
Re[4]: Developer Testing
От: ulu http://sm-art.biz
Дата: 28.11.09 10:36
Оценка: +1
Здравствуйте, vnfedotov, Вы писали:

V> ожидать, что юнит-тесты разработчиков хоть как-то повлияют на качество ошибочно — хороший разработчик и без тестов делает мало ошибок, плохому тесты не помогут.


Вообще-то, суть TDD как раз и заключается, что юнит тесты очень даже положительно влияют на качество. И не только потому, что хороший разработчик сделает еще меньше (по статистике, в 5-10 раз) ошибок. Тесты помогают (иногда вынуждают) улучшить дизайн приложения, это признают даже лучшие из разработчиков.
Re[8]: Developer Testing
От: ulu http://sm-art.biz
Дата: 01.12.09 14:13
Оценка: +1
Здравствуйте, vnfedotov, Вы писали:

V>Т.е. эффективность в плане качества сильно зависит от типа выполняемого проекта, уровня команды итд.


Это точно. Проблема внедрения TDD в том, что он(а) не дает немедленного эффекта: разработчикам надо какое-то время переучиваться. Кроме того, если у Вас практикуется Big Design Up Front, то большого смысла в TDD нет.
Re[22]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 11:51
Оценка: +1
Здравствуйте, Aikin, Вы писали:

A>Давай закончим на этом. У меня нет всей информации что есть у тебя. Но я все равно уверен, что ты можешь изменить ситуацию и сделать свою работу проще.


Давай закончим. Спасибо за беседу!
Да, я знаю что могу, я знаю как, но наверху убеждены что то что мне проще, для остальных сложнее. Мне удается достучаться до начальства, убедить что нужны изменения, найти понимание. Но когда я честно предупреждаю что просто не будет и что плоды изменений видно будет не завтра, то на этом все заканчивается, потому что завтра нужны новые фичи, которые уже вчера проданы.

A>СВУ, Aikin

СУВ, samius
Developer Testing
От: npe  
Дата: 27.11.09 07:16
Оценка:
День добрый,

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

Исходная ситуация: на данный момент, после выполнения задания программист должен провести тесты, которые бы доказывали, что он выполнил задание именно так, как надо. Выполненные тесты документируются и прикрепляются к задаче (есть своя система task management'а). В силу, скажем так, особенностей проектирования и реализации приложения, тесты, которые может провест программист, относятся к категории функциональных/интеграционных (проводить unit tests невозможно). Другими словами, чтобы протестировать правильность выполнения надо собрать и запустить приложение и проверить, как оно там живет. Тем не менее, при таком подходе количество ошибок, которые программисты вносят в другие части кода, не уменьшается .

Почитав умные книги и погуглив, я пришел к выводу, что:

— под developer testing понимаются, по большей части, unit tests
— нагружать программиста интеграционным и функциональными тестами смысла нет (в силу ряда причин, хорошо описанных, например, в "Code Complete" 2nd), т.к. качество это сильно не повысит (не программисткое это дело), а времени и нервов займет больше.

Собственно, вопросы:

— Я правильно понимаю суть developer testing? Или есть положительный опыт выполнения программистами дополнительных тестов?
— Я правильно понимаю, что разработкой интеграционных/функциональных тестов должны заниматься отдельные люди (риторический вопрос, но все же)?

Заранее спасибо.
---
npe
Re: Developer Testing
От: ulu http://sm-art.biz
Дата: 27.11.09 09:21
Оценка:
Я (девелопер) часто начинаю с написания интеграционных тестов, потом быстренько их озеленяю, потом привожу в порядок код. В идеале, в процессе рефакторинга пишу юнит тесты, но часто лень. Но я фрилансер, я сам себе и архитектор, и QA.

Интеграционные тесты -- в смысле, они задействуют тестовую базу (или вообще ее не трогают), не отправляют писем и т.д. Функциональных тестов я не пишу.

Под developer tests понимаются тесты, предполагающие знание внутренней работы системы. Например, проверить, что такой-то метод с такими-то параметрами возвращает такое-то значение. Такие тесты не имеют business value, и нужны только самим программистам. Другое дело -- тесты, которые проверяют поведение системы и прямо завязаны на клиентские истории. Они тоже могут быть юнит тестами (см BDD), но тестируют не конкретный метод конкретного класса, а работу системы в конкретном контексте. Тогда можно менять реализацию при сохранении существующей функциональности, и девелоперские тесты упадут, а клиентские останутся.

Если же проводить юнит тесты невозможно, целесообразно изменить дизайн приложения (глубокая мудрость, к которой программистский мир идет уже который десяток лет).

ulu

Здравствуйте, npe, Вы писали:

npe>День добрый,


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


npe>Исходная ситуация: на данный момент, после выполнения задания программист должен провести тесты, которые бы доказывали, что он выполнил задание именно так, как надо. Выполненные тесты документируются и прикрепляются к задаче (есть своя система task management'а). В силу, скажем так, особенностей проектирования и реализации приложения, тесты, которые может провест программист, относятся к категории функциональных/интеграционных (проводить unit tests невозможно). Другими словами, чтобы протестировать правильность выполнения надо собрать и запустить приложение и проверить, как оно там живет. Тем не менее, при таком подходе количество ошибок, которые программисты вносят в другие части кода, не уменьшается .


npe>Почитав умные книги и погуглив, я пришел к выводу, что:


npe>- под developer testing понимаются, по большей части, unit tests

npe>- нагружать программиста интеграционным и функциональными тестами смысла нет (в силу ряда причин, хорошо описанных, например, в "Code Complete" 2nd), т.к. качество это сильно не повысит (не программисткое это дело), а времени и нервов займет больше.

npe>Собственно, вопросы:


npe>- Я правильно понимаю суть developer testing? Или есть положительный опыт выполнения программистами дополнительных тестов?

npe>- Я правильно понимаю, что разработкой интеграционных/функциональных тестов должны заниматься отдельные люди (риторический вопрос, но все же)?

npe>Заранее спасибо.

npe>---
npe>npe
Re: Developer Testing
От: Other Sam Россия  
Дата: 27.11.09 10:41
Оценка:
> Исходная ситуация: на данный момент, после выполнения задания программист должен провести тесты, которые бы доказывали, что он выполнил задание именно так, как надо. Выполненные тесты документируются и прикрепляются к задаче (есть своя система task management'а). В силу, скажем так, особенностей проектирования и реализации приложения, тесты, которые может провест программист, относятся к категории функциональных/интеграционных (проводить unit tests невозможно). Другими словами, чтобы протестировать правильность выполнения надо собрать и запус�
�ить приложение и проверить, как оно там живет. Тем не менее, при таком подходе количество ошибок, которые программисты вносят в другие части кода, не уменьшается .
>
> Почитав умные книги и погуглив, я пришел к выводу, что:
>
> — под developer testing понимаются, по большей части, unit tests
> — нагружать программиста интеграционным и функциональными тестами смысла нет (в силу ряда причин, хорошо описанных, например, в "Code Complete" 2nd), т.к. качество это сильно не повысит (не программисткое это дело), а времени и нервов займет больше.
>
> Собственно, вопросы:
>
> — Я правильно понимаю суть developer testing? Или есть положительный опыт выполнения программистами дополнительных тестов?
> — Я правильно понимаю, что разработкой интеграционных/функциональных тестов должны заниматься отдельные люди (риторический вопрос, но все же)?

Разработчики пишут все тесты, и модульные (unit tests) и интеграционные.
При определенной сноровке можно (и нужно) писать также и автоматические
функциональные тесты.

Те программисты которые занимаются реализацией новой функциональности
или исправлением дефектов также должны писать модульные тесты.
Заставлять писать тесты (не принимать выполненое задание если нет
тестов) я считаю неразумным. Я полагаю лучше измерять степень покрытия
тестами, и требовать от комманды удержания этой метрики на высоком
уровне. Как они будут этого добиваться пусть решают сами. Таким образом
они будут оказывать друг на друга давление с тем, чтобы код был покрыт
тестами на нужном уровне.

Кто будет писать интеграционные тесты пусть решает технический лидер
команды.

Автоматические функциональные тесты (такие тесты, которые поднимаю
систему целиком, и проверяют как она работает с точки зрения
пользователя) — это открытый вопрос. С одной стороны это вроде бы задача
отдела контроля качества, с другой стороны сделать систему пригодной для
автоматического функционального тестирования может только главный
архитектор.
Posted via RSDN NNTP Server 2.1 beta
Re: Developer Testing
От: Marduk Великобритания  
Дата: 27.11.09 16:44
Оценка:
Здравствуйте, npe, Вы писали:

npe>Почитав умные книги и погуглив, я пришел к выводу, что:


npe>- под developer testing понимаются, по большей части, unit tests

npe>- нагружать программиста интеграционным и функциональными тестами смысла нет (в силу ряда причин, хорошо описанных, например, в "Code Complete" 2nd), т.к. качество это сильно не повысит (не программисткое это дело), а времени и нервов займет больше.

npe>Собственно, вопросы:


npe>- Я правильно понимаю суть developer testing? Или есть положительный опыт выполнения программистами дополнительных тестов?


Примерно так это обычно и понимается, но всё зависит от специфики конкретной разрабатываемой системы, от сложности тестирования.

npe>- Я правильно понимаю, что разработкой интеграционных/функциональных тестов должны заниматься отдельные люди (риторический вопрос, но все же)?


Давайте лучше посмотрим, на какие уровни абстракции можно разбить тестируемую систему, чтобы понять, кому на этом уровне можно доверить тестирование.
Можно выделить 3 основных уровня:

1) Уровень ядра — уровень, на котором каждый компонент представляет некоторую атомарную часть движка и не соответствует бизнес-функционалу, не инкапсулирует его. На этом уровне код покрывается юнит-тестами и этим занимаются именно разработчики, так как только они с нужном объеме понимают специфику того или иного тестируемого модуля на данном уровне

2) Уровень реализации кода, соответствующего бизнес-функционалу — на данном уровне все программные компоненты уже отражают бизнес-логику системы. В идеале это фактически полнофункциональная система, к которой только UI не прикрутили. На этом уровне тесты разрабатывают по-прежнему программисты, но часть задач может быть делегирована отдельной команде, которая занимается автоматизацией тестирования. Например, отдельным автоматизаторам можно делегировать тестирование модулей, к которым можно достучаться извне тестируемой системы. Например, веб-сервисы, ряд проверок баз данных, возможно, какие-то вспомогательные утилиты, которым что-то передается на вход и что-то выводится в какой-то поток.

3) Уровень UI — обычно на этот уровень разработчики не лезут, так как своих задач полно. Тут нужна отдельная команда. Но на этом уровне разработчики могут помочь команде, которая занимается автоматизацией. В частности можно оговорить, на какие объекты наложить определенные атрибуты, чтобы систему можно было легче тестировать автоматически.

Да, еще можно ввести нулевой уровень — уровень сборки. Кстати, это дело автоматизировать имеет смысл в первую очередь. Во-первых и отдача будет достаточно быстрой, да и автосборка — это основа для автоматизированного конвейера, на входе которого только ссылки на хранилище файлов проекта, а на выходе — собранный и протестированный продукт с выдачей всех необходимых метрик, как покрытие кода, мера соответствия поведения системы заявленным требованиям ( % успешно пройденных тестов, как самая грубая оценка ) и прочее.
Re[2]: Developer Testing
От: npe  
Дата: 27.11.09 17:30
Оценка:
OS>Я полагаю лучше измерять степень покрытия
OS>тестами, и требовать от комманды удержания этой метрики на высоком
OS>уровне. Как они будут этого добиваться пусть решают сами. Таким образом
OS>они будут оказывать друг на друга давление с тем, чтобы код был покрыт
OS>тестами на нужном уровне.

У вас есть положительный опыт при использовании этой метрики? Я имею в виду, что она реально помогла повысила качество выполнения заданий. Допустим, упала плотность ошибок или что-то в этом роде. Диспутов на тему полезности/бесполезности расчета степени покрытия я читал массу, хотелось бы послушать "истории из жизни" .

OS>Кто будет писать интеграционные тесты пусть решает технический лидер

OS>команды.

Но такие тесты должна писать отдельная команда, пусть даже выделенная из состава разработчиков? Мне думается именно так. Ведь, по сути, что модульные, что интеграционные, что функциональные тесты — это почти самостоятельные под-проекты. Заниматься ими время от времени (например, ближе к концу релиза) смысла большого нет (это уже из моего опыта).

OS>Автоматические функциональные тесты (такие тесты, которые поднимаю

OS>систему целиком, и проверяют как она работает с точки зрения
OS>пользователя) — это открытый вопрос. С одной стороны это вроде бы задача
OS>отдела контроля качества, с другой стороны сделать систему пригодной для
OS>автоматического функционального тестирования может только главный
OS>архитектор.

Ага... А если его нет? (риторический вопрос...).
Re[2]: Developer Testing
От: npe  
Дата: 27.11.09 17:36
Оценка:
M>Давайте лучше посмотрим, на какие уровни абстракции можно разбить тестируемую систему, чтобы понять, кому на этом уровне можно доверить тестирование.
M>Можно выделить 3 основных уровня:

Спасибо за выделение уровней. Поможет при задушевных беседах с заказчиком.
Re[3]: Developer Testing
От: Other Sam Россия  
Дата: 27.11.09 18:09
Оценка:
> У вас есть положительный опыт при использовании этой метрики? Я имею в виду, что она реально помогла повысила качество выполнения заданий. Допустим, упала плотность ошибок или что-то в этом роде. Диспутов на тему полезности/бесполезности расчета степени покрытия я читал массу, хотелось бы послушать "истории из жизни" .

Увы, такого опыта нет. Я либо был рядовым разработчиком в проекте, и мне
было не важна эта метрика, я за ней не следил. Либо вел проекты без
модульного тестирования вообще, либо тесты охватывали всё (реально думаю
было близко к 85-90%).

> Но такие тесты должна писать отдельная команда, пусть даже выделенная из состава разработчиков? Мне думается именно так. Ведь, по сути, что модульные, что интеграционные, что функциональные тесты — это почти самостоятельные под-проекты. Заниматься ими время от времени (например, ближе к концу релиза) смысла большого нет (это уже из моего опыта).


У меня другое мнение на этот счет. Интеграционные тесты должен писать
кто-то сильно интегрированный в комманду разработчиков. Такие тесты
нужно исправлять при каждом изменении архитектуры (вывели часть
функциональности в отдельный модуль — добавили тесты проверяющие
сопряжение этого модуля со всеми остальными, упростили какой-либо модуль
— убрали тесты, добавили зависимость одного модуля от другого — добавили
тесты...). Понятно, что разработчикам придется и самим кое-где править
такие тесты (переименование методов, изменение сигнатур), но им, когда
они работают над функциональностью, чужды задачи интеграционного
тестирования. Поэтому решать сколько и каких интеграционных тестов
необходимо, должен архитектор, техлид или ведущий разработчик.
И кстати, не для всякой системы есть необходимость в интеграционных
тестах. Только для модульных систем.

> OS>Автоматические функциональные тесты (такие тесты, которые поднимаю

> OS>систему целиком, и проверяют как она работает с точки зрения
> OS>пользователя) — это открытый вопрос. С одной стороны это вроде бы задача
> OS>отдела контроля качества, с другой стороны сделать систему пригодной для
> OS>автоматического функционального тестирования может только главный
> OS>архитектор.
>
> Ага... А если его нет? (риторический вопрос...).

Главный архитектор есть всегда. Если есть какая-то система, то ее кто-то
построил, и он-то и есть главный архитектор, как бы его не называли.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Developer Testing
От: vnfedotov Россия  
Дата: 27.11.09 19:04
Оценка:
V>Правильный тестировщик разобьет входные данные на классы эквивалентности, например [-2;0;2], и обязательно обнаружит такую ошибку на одном из тестов, в данном случае 2 из 3-х зафейлят.

опечатка, должно быть [-3;0;2]
Re[4]: Developer Testing
От: npe  
Дата: 27.11.09 19:30
Оценка:
V>Вывод: разработчики должны писать юнит-тесты, они избавят от глупых ошибок и траты времени группы тестирования на ошибки типа "метод падает при любом вызове"; группа тестирования должна быть и должна писать свои тесты, функциональные/интеграционные и все какие понадобятся; ожидать, что юнит-тесты разработчиков хоть как-то повлияют на качество ошибочно — хороший разработчик и без тестов делает мало ошибок, плохому тесты не помогут.

Полностью согласен. Соответствует моему опыту и текущему положению дел в проекте. Не в том смысле, что дела именно так и обстоят, а в том, что они идут с точностью до наоборот и последствия расцветают пышным цветом...

Спасибо.
Re[5]: Developer Testing
От: vnfedotov Россия  
Дата: 28.11.09 14:15
Оценка:
Здравствуйте, ulu, Вы писали:

ulu>Вообще-то, суть TDD как раз и заключается, что юнит тесты очень даже положительно влияют на качество. И не только потому, что хороший разработчик сделает еще меньше (по статистике, в 5-10 раз) ошибок. Тесты помогают (иногда вынуждают) улучшить дизайн приложения, это признают даже лучшие из разработчиков.


увы, вы ошибаетесь. Связь применения TDD и качества готового продукта исследовалась неоднократно и достоверно обнаружена так и не была.
Re[6]: Developer Testing
От: Other Sam Россия  
Дата: 29.11.09 09:23
Оценка:
> увы, вы ошибаетесь. Связь применения TDD и качества готового продукта
> исследовалась
> <http://theruntime.com/blogs/jacob/archive/2008/01/22/tdd-proven-effective-or-is-it.aspx&gt;
> неоднократно и достоверно обнаружена так и не была.

Думаю стоит поискать связь между качеством продукта версии №3 в проектах
с TDD и non-TDD.

Реализовать метод X написав предварительно тест, и просто реализовать
метод X и проверить — это примерно одно и то же. А вот внести в метод X
изменения при наличии и отсутствии тестов (покрывающих всю систему) это
далеко не одно и то же.
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Developer Testing
От: ulu http://sm-art.biz
Дата: 29.11.09 12:38
Оценка:
Здравствуйте, vnfedotov, Вы писали:

V>Здравствуйте, ulu, Вы писали:


ulu>>Вообще-то, суть TDD как раз и заключается, что юнит тесты очень даже положительно влияют на качество. И не только потому, что хороший разработчик сделает еще меньше (по статистике, в 5-10 раз) ошибок. Тесты помогают (иногда вынуждают) улучшить дизайн приложения, это признают даже лучшие из разработчиков.


V>увы, вы ошибаетесь. Связь применения TDD и качества готового продукта исследовалась неоднократно и достоверно обнаружена так и не была.


Хмм.. неубедительно, 24 студента трудились над олимпиадными задачками, не имея, судя по всему, большого опыта применения TDD. К тому же, насколько я понял, авторы исследования (и сами студенты) не знают разницы между TDD и Test First.

По другую сторону баррикад, не говоря уже об очень уважаемых (это субъективно) людях, исследования Microsoft и IBM, проводимые с реальными командами разработчиков, работающих над реальными продуктами. Вот ссылка.
Re[3]: Developer Testing
От: Marduk Великобритания  
Дата: 30.11.09 19:00
Оценка:
Здравствуйте, npe, Вы писали:

M>>Давайте лучше посмотрим, на какие уровни абстракции можно разбить тестируемую систему, чтобы понять, кому на этом уровне можно доверить тестирование.

M>>Можно выделить 3 основных уровня:

npe>Спасибо за выделение уровней. Поможет при задушевных беседах с заказчиком.


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

здесь и
здесь
Re[4]: Developer Testing
От: npe  
Дата: 01.12.09 07:28
Оценка:
M>Кстати, чуть-чуть в сторону от темы, но такой более высокоуровневый взгляд на вопрос автоматизации вот тут:

M>здесь и

M>здесь

Спасибо . Эта тема у нас тоже очень актуальна. "Борьба за качество" началась именно с внедрения автоматизированных тестов. Причем, абсолютно без учета прошлого негативного опыта в этом деле.

Поделился ссылками с сотрудником, отвечающим за разработку софта и попутно за автоматизацию тестов по этому софту. Демотивирующий эффект на лицо .
Re[2]: Developer Testing
От: npe  
Дата: 01.12.09 07:50
Оценка:
Здравствуйте, Marduk, Вы писали:

M>Давайте лучше посмотрим, на какие уровни абстракции можно разбить тестируемую систему, чтобы понять, кому на этом уровне можно доверить тестирование.

M>Можно выделить 3 основных уровня:

Ок. Если представить себе вполне обыденную ситуацию: в приложении трудно выделить эти уровни. Точнее, скажем так, выделить-то можно (с сильными размываниями границ), но, вот, организовать модульное и интеграционное тестирование этих уровней — невозможно. Ну, спроектировано приложение так .

Теперь начинается поддержка приложения: копятся баги + change requests, организуются релизы и т.п. Разумеется, при исправлении багов и выполнении change requests добавляются новые ошибки. Как правило (делал анализ), причиной тому:

— невнимательность при выполнении задания.
— недостаточно тщательное функциональное тестирование выполненного задания программистом (программист может только выполнить функциональные тесты)

Была идея, что невнимательность можно компенсировать developer testing. Практика показала, что программисты недостаточно хорошо проектируют и документируют тесты. В принципе, я это ожидал и умные книги про это предупреждают...

Теперь, как говорится, внимание вопрос. В этой ситуации, когда заказчик не хочет переделки приложения и выделения отдельной команды тестеров, мне на ум приходят только 2 вещи:

— организация code review (выполненного задания и проведенных тестов);
— повышение квалификации разработчиков в области тестирования до минимально приемлемого уровня (чтобы, хоть, мнимально необходимое количество test cases могли прикинуть).

Есть ли еще какие-нибудь подходы? Может, чего упускаю?

Спасибо...
Re[3]: Developer Testing
От: Marduk Великобритания  
Дата: 01.12.09 10:21
Оценка:
Здравствуйте, npe, Вы писали:

npe>Здравствуйте, Marduk, Вы писали:


M>>Давайте лучше посмотрим, на какие уровни абстракции можно разбить тестируемую систему, чтобы понять, кому на этом уровне можно доверить тестирование.

M>>Можно выделить 3 основных уровня:

npe>Ок. Если представить себе вполне обыденную ситуацию: в приложении трудно выделить эти уровни. Точнее, скажем так, выделить-то можно (с сильными размываниями границ), но, вот, организовать модульное и интеграционное тестирование этих уровней — невозможно. Ну, спроектировано приложение так .


npe>Теперь начинается поддержка приложения: копятся баги + change requests, организуются релизы и т.п. Разумеется, при исправлении багов и выполнении change requests добавляются новые ошибки. Как правило (делал анализ), причиной тому:


npe>- невнимательность при выполнении задания.

npe>- недостаточно тщательное функциональное тестирование выполненного задания программистом (программист может только выполнить функциональные тесты)

npe>Была идея, что невнимательность можно компенсировать developer testing. Практика показала, что программисты недостаточно хорошо проектируют и документируют тесты. В принципе, я это ожидал и умные книги про это предупреждают...


npe>Теперь, как говорится, внимание вопрос. В этой ситуации, когда заказчик не хочет переделки приложения и выделения отдельной команды тестеров, мне на ум приходят только 2 вещи:


npe>- организация code review (выполненного задания и проведенных тестов);


Да, это нужно. Причем, если код-ревью перекрестное, то выполняется еще и задача обмена информации между разработчиками. Например, кто-то не знает, что некоторый функционал уже написан и использует самоделки, а ревьюер может порекомендовать то решение, которое уже есть.

npe>- повышение квалификации разработчиков в области тестирования до минимально приемлемого уровня (чтобы, хоть, мнимально необходимое количество test cases могли прикинуть).


npe>Есть ли еще какие-нибудь подходы? Может, чего упускаю?

npe>Спасибо...

Я бы еще подумал над тем, чтобы тестирование интенсивно выдавало результаты. То есть, не так что решили разработчики когда-нибудь прогнать тесты, тогда их и запустили, а сделать так, чтобы эти тесты бегались постоянно (возможно на отдельной машине). Как только появятся изменения, из-за которых что-то перестает работать как надо, вы узнаете об этом достаточно быстро (не позднее времени полного прогона тестов).
Re[5]: Developer Testing
От: Marduk Великобритания  
Дата: 01.12.09 10:31
Оценка:
Здравствуйте, npe, Вы писали:

M>>Кстати, чуть-чуть в сторону от темы, но такой более высокоуровневый взгляд на вопрос автоматизации вот тут:


M>>здесь и

M>>здесь

npe>Спасибо . Эта тема у нас тоже очень актуальна. "Борьба за качество" началась именно с внедрения автоматизированных тестов. Причем, абсолютно без учета прошлого негативного опыта в этом деле.


npe>Поделился ссылками с сотрудником, отвечающим за разработку софта и попутно за автоматизацию тестов по этому софту. Демотивирующий эффект на лицо .


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

А вот если рассматривать автоматизацию тестирования как средство оптимизации затрат на тестирование, в т.ч. за счет делегирования рутинных и объемных задач машине, то вот тут вполне можно преуспеть. То есть, имеет смысл определить, есть ли при тестировании такие задачи, а они наверняка есть. Та же сборка системы, та же инсталляция. Если используются базы данных, то заготовка некоторой модельной базы (а это служит хорошей основой для тестирования), импорт/експорт и т.п.

В тех ссылках ,что я привел просто выделены уровни, которые имеет смысл рассматривать и в какой последовательности их рассматривать.
Re[7]: Developer Testing
От: vnfedotov Россия  
Дата: 01.12.09 10:43
Оценка:
Здравствуйте, ulu, Вы писали:

ulu>По другую сторону баррикад, не говоря уже об очень уважаемых (это субъективно) людях, исследования Microsoft и IBM, проводимые с реальными командами разработчиков, работающих над реальными продуктами. Вот ссылка.


Очень любопытно, первая статья утверждает, что плотность дефектов уменьшается вместе с покрытием кода тестами Или я чего-то не понял, или это революция.

Вторая, компилирующая результаты других исследований, обыденно подтверждает, что профит был только в половине случаев. Т.е. эффективность в плане качества сильно зависит от типа выполняемого проекта, уровня команды итд.
Re[4]: Developer Testing
От: Аноним  
Дата: 01.12.09 19:59
Оценка:
Здравствуйте, Marduk, Вы писали:

M>Я бы еще подумал над тем, чтобы тестирование интенсивно выдавало результаты. То есть, не так что решили разработчики когда-нибудь прогнать тесты, тогда их и запустили, а сделать так, чтобы эти тесты бегались постоянно (возможно на отдельной машине). Как только появятся изменения, из-за которых что-то перестает работать как надо, вы узнаете об этом достаточно быстро (не позднее времени полного прогона тестов).


У нас разработчики не прогоняют тесты. По процессу, они должны всего лишь завершить выполнение задания набором функциональных тестов. Понятное дело, единообразия в проектировании тестов тут никакого нет. Да и тесты выполняются вручную. Как правило, потом они никому не передаются (для включения в общий набор тестов) и остаются лишь как доказательство правильности выполнения. Поэтому и завел речь про возможные пути улучшения качества в данной ситуации.

Те тесты, которые сейчас автоматизируются, заказчик позиционирует как регрессионные... Громко сказано, но все же. Охватывать они должны все функции. Будем ли считать тестовое покрытие функций... Сложный вопрос. Пока я его не поднимаю. Не то, чтобы стесняюсь, просто со стороны заказчика обсуждать не с кем. Понимаю, что выглядит все это со стороны забавно , но пока ситуация такая.

Наша концептуальная "беда" с заказчиком — ITIL . У заказчика все выстроено под ITIL, соответственно, цикл разработки софта (см. вышеописанный) "втиснут" в Change/Release Management Process и полностью ему подчинен. Но это уже друая тема для обсуждения...
Re[5]: Developer Testing
От: npe  
Дата: 01.12.09 20:22
Оценка:
Поспешил ответить, не залогинясь... Сорри.
Re[8]: Developer Testing
От: Gmoorick Россия  
Дата: 11.12.09 10:59
Оценка:
Здравствуйте, vnfedotov, Вы писали:

V>Здравствуйте, ulu, Вы писали:


ulu>>По другую сторону баррикад, не говоря уже об очень уважаемых (это субъективно) людях, исследования Microsoft и IBM, проводимые с реальными командами разработчиков, работающих над реальными продуктами. Вот ссылка.


V>Очень любопытно, первая статья утверждает, что плотность дефектов уменьшается вместе с покрытием кода тестами Или я чего-то не понял, или это революция.


V>Вторая, компилирующая результаты других исследований, обыденно подтверждает, что профит был только в половине случаев. Т.е. эффективность в плане качества сильно зависит от типа выполняемого проекта, уровня команды итд.
Re[8]: Developer Testing
От: Gmoorick Россия  
Дата: 11.12.09 11:08
Оценка:
V>Здравствуйте, ulu, Вы писали:

ulu>>По другую сторону баррикад, не говоря уже об очень уважаемых (это субъективно) людях, исследования Microsoft и IBM, проводимые с реальными командами разработчиков, работающих над реальными продуктами. Вот ссылка.


V>Очень любопытно, первая статья утверждает, что плотность дефектов уменьшается вместе с покрытием кода тестами Или я чего-то не понял, или это революция.


V>Вторая, компилирующая результаты других исследований, обыденно подтверждает, что профит был только в половине случаев. Т.е. эффективность в плане качества сильно зависит от типа выполняемого проекта, уровня команды итд.


Скорее не так поняли:

>The pre-release defect density of the four products, measured as defects per thousand lines of code, decreased between 40% and 90% relative to the >projects that did not use TDD.The teams' management reported subjectively a 15–35% increase in initial development time,

> though the teams agreed that this was offset by reduced maintenance costs.

Количество багов при TDD, уменьшается на 40-90%, но скорость разработки на 15-35% замедляется. Но команды решили, что уменьшение стоимости сопровождения стоит таких потерь

>Based on the findings of the existing studies, it can be concluded that TDD seems to improve software quality, especially when employed in an industrial context. The findings were not so obvious in the semiindustrial or academic context, but none of those studies reported on decreased quality either.

Можно решить, что TDD, улучшает качество, особенно хорошо в индустриальных задачах. В полуиндустриальных или академических задачах преимущество не такое очевидное, но ни одно из исследований не показало уменьшения качества.
Индустриальные — тут скорее просто коммерческие. Отличаются от академических тем, что требования меняются часто в процессе разработки.
Re: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 15:47
Оценка:
npe>День добрый,
Добрый


npe>Исходная ситуация: на данный момент, после выполнения задания программист должен провести тесты, которые бы доказывали, что он выполнил задание именно так, как надо.

А кто будет писать тесты которые докажут, что тесты написанные разработчиком написаны "именно так, как надо"? Quis custodiet ipsos custodes?


ИМО:
Программисты (хорошо) пишут только те тесты которые помогают именно им. Тесты которые они пишут чтобы доказать кому-то, что они пишут хорошо изначально обречены на провал.
Моя задача написать рабочий код. Я пишу тесты которые помогают мне его написать (поэnому тесты у меня в основном идут впереди). Если я не уверен в написанном коде я пишу тест. Если я в коде уверен зачем мне тест?



Это были общие слова. Теперь конкретно по вопросам:
npe>- Я правильно понимаю суть developer testing? Или есть положительный опыт выполнения программистами дополнительных тестов?
npe>- Я правильно понимаю, что разработкой интеграционных/функциональных тестов должны заниматься отдельные люди (риторический вопрос, но все же)?
Под developer testing понимаются, тесты помогающие разработке. Тесте помогающие верификации приложения относятся к QA тестам.
Юнит тесты пишутся для сложных классов с большой концентрацией логики на строку кода. Т.е. там где программист сам не уверен в правильности реализации.
Писать юнит тест для контроллера формы большого смыла не имеет. Тут больше подойдет тест конкретного сценария ("при добавлении покупки в корзину бла-бла-бла) (не знаю интеграционный это или функциональный -- для меня это бесполезное знание).


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[2]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 16:26
Оценка:
Здравствуйте, Aikin, Вы писали:

A>ИМО:

A>Программисты (хорошо) пишут только те тесты которые помогают именно им. Тесты которые они пишут чтобы доказать кому-то, что они пишут хорошо изначально обречены на провал.
+1

A>Моя задача написать рабочий код. Я пишу тесты которые помогают мне его написать (поэnому тесты у меня в основном идут впереди). Если я не уверен в написанном коде я пишу тест. Если я в коде уверен зачем мне тест?


Когда придет пора рефакторинга, а теста нет, то ничто не скажет о работоспособности кода после рефакторинга.
Тест помогает не только написать, но и поддерживать.
Re[3]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 17:33
Оценка:
Здравствуйте, samius, Вы писали:

S>Когда придет пора рефакторинга, а теста нет, то ничто не скажет о работоспособности кода после рефакторинга.

S>Тест помогает не только написать, но и поддерживать.
Если код не получил теста, то он несложный. Несложный код несложно рефакторить. Тем более этот код скорее всего покрыт тестами сценариев.
Если же я не уверен в том, что сделаю рефакторинг без ошибок что мне помешает написать тест перед рефакторингом?

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[3]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 17:37
Оценка:
Здравствуйте, samius, Вы писали:

S>Когда придет пора рефакторинга, а теста нет, то ничто не скажет о работоспособности кода после рефакторинга.

S>Тест помогает не только написать, но и поддерживать.
А вообще, 70% разработчиков не пишут тестов. Как-то они ведь определяют что код поломался.
Ну и я же как-то жил столько лет без тестов Ж)))

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[4]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 17:40
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Когда придет пора рефакторинга, а теста нет, то ничто не скажет о работоспособности кода после рефакторинга.

S>>Тест помогает не только написать, но и поддерживать.
A>Если код не получил теста, то он несложный. Несложный код несложно рефакторить. Тем более этот код скорее всего покрыт тестами сценариев.
Несложный код легко рефакторить. Но вот код, который зависит от того, который рефакторится может легко сломаться.

A>Если же я не уверен в том, что сделаю рефакторинг без ошибок что мне помешает написать тест перед рефакторингом?

Например, объем зависящего кода, использующего код, который нужно рефакторить.
Re[4]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 17:51
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Когда придет пора рефакторинга, а теста нет, то ничто не скажет о работоспособности кода после рефакторинга.

S>>Тест помогает не только написать, но и поддерживать.
A>А вообще, 70% разработчиков не пишут тестов. Как-то они ведь определяют что код поломался.
А они иногда и не определяют что код поломался. Скомпилилось, чекин и ... через неделю толпа баг-репортов.

A>Ну и я же как-то жил столько лет без тестов Ж)))

Я тоже жил без тестов. Но это ничего не доказывает.

Пример из недавней практики: переводили 10мб проект с .net 2.0 на .net 4. Сконвертировали, исправили что надо (чтобы компилилось), запустили, пощупали, и смержили изменения с основной веткой. После этого оказывается что вся система встала раком из-за мааленького такого изменения в рантайме, что даже в breaking changes ничего о нем не было. Кстати, благодаря MozgC-у удалось обойти довольно быстро. Но факт остается фактом — все думали что изменения не настолько серьезные для того чтобы прогнать все капитально.
Re[5]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 18:46
Оценка:
Здравствуйте, samius, Вы писали:

S>Несложный код легко рефакторить. Но вот код, который зависит от того, который рефакторится может легко сломаться.

Если он изначально предполагал много зависимых элементов, то скорее всего на него я бы написал тест. Так как высока цена ошибки.

Если теста все же нет, то:
S>Например, объем зависящего кода, использующего код, который нужно рефакторить.
Как мне это помешает добавить покрытие ключевых сценариев к этому коду?



В процессе принятия решения "быть или не быть" играет роль квадрат рисков:
Высок ли риск поломать другие части системы * Высока ли вероятность допустить ошибку
       мало зависимых        много зависимых
п
р
о
с            1                      2
т
о
й


с
л
о
ж            3                      4
н
ы
й

4 нужно обязательно тестировать, 3/4 просто нжуно ( ), 1 не обязательно.

Естественно никаких квадратов я перед принятием решения не рисую. Все происходит интуитивно.
И самое главное: цена ошибки обычно низка (во всяком случае в моих проектах).


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[5]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 18:46
Оценка:
Здравствуйте, samius, Вы писали:

S>А они иногда и не определяют что код поломался. Скомпилилось, чекин и ... через неделю толпа баг-репортов.

И никто их с работы не выгнал. Сидят вон, кодют. Потому как цена ошибки низкая


A>>Ну и я же как-то жил столько лет без тестов Ж)))

S>Я тоже жил без тестов. Но это ничего не доказывает.
Это показывает, что без тестов тоже возможны успешные проеты.



S>Пример из недавней практики: переводили 10мб проект с .net 2.0 на .net 4. Сконвертировали, исправили что надо (чтобы компилилось), запустили, пощупали, и смержили изменения с основной веткой. После этого оказывается что вся система встала раком из-за мааленького такого изменения в рантайме, что даже в breaking changes ничего о нем не было. Кстати, благодаря MozgC-у удалось обойти довольно быстро. Но факт остается фактом — все думали что изменения не настолько серьезные для того чтобы прогнать все капитально.

(Хотелось бы иметь больше информации)
Ну ведь все равно же пофиксили. Все остались с работой. Заказчики довольны. Что еще надо?

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[6]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 19:00
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>А они иногда и не определяют что код поломался. Скомпилилось, чекин и ... через неделю толпа баг-репортов.

A>И никто их с работы не выгнал. Сидят вон, кодют. Потому как цена ошибки низкая
Если дело дошло до баг-репортов, то как-правило цена ошибки выше цены вовремя написанного теста.

S>>Я тоже жил без тестов. Но это ничего не доказывает.

A>Это показывает, что без тестов тоже возможны успешные проеты.
Успешные проекты без тестов возможны, но то что я жил без тестов к этому отношения не имеет.

S>>Пример из недавней практики: переводили 10мб проект с .net 2.0 на .net 4. Сконвертировали, исправили что надо (чтобы компилилось), запустили, пощупали, и смержили изменения с основной веткой. После этого оказывается что вся система встала раком из-за мааленького такого изменения в рантайме, что даже в breaking changes ничего о нем не было. Кстати, благодаря MozgC-у удалось обойти довольно быстро. Но факт остается фактом — все думали что изменения не настолько серьезные для того чтобы прогнать все капитально.

A>(Хотелось бы иметь больше информации)
http://www.rsdn.ru/forum/dotnet/3807699.flat.aspx
Автор: samius
Дата: 15.05.10


A>Ну ведь все равно же пофиксили. Все остались с работой. Заказчики довольны. Что еще надо?

Надо кнопку, которая ответит на вопрос, все ли впорядке. Кнопка есть, но ее не нажимают, потому как она мало что покрывает. Мои усилия (пока) тщетны.
Re[7]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 19:12
Оценка:
Здравствуйте, samius, Вы писали:

S>Если дело дошло до баг-репортов, то как-правило цена ошибки выше цены вовремя написанного теста.

Выше -- да, никто не спорит. Но не настолько высока чтобы подкладывать солому (тратить время и писать тесты на все и вся).

S>Успешные проекты без тестов возможны, но то что я жил без тестов к этому отношения не имеет.

ИМО, имеет.

S>http://www.rsdn.ru/forum/dotnet/3807699.flat.aspx
Автор: samius
Дата: 15.05.10

Но эксепшен все же в логи попал и довольно таки быстро. Не вижу больших проблем.

S>Надо кнопку, которая ответит на вопрос, все ли впорядке. Кнопка есть, но ее не нажимают, потому как она мало что покрывает. Мои усилия (пока) тщетны.

Не догнал


P.S. Что-то мы удаляемся от темы

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[6]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 19:13
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Несложный код легко рефакторить. Но вот код, который зависит от того, который рефакторится может легко сломаться.

A>Если он изначально предполагал много зависимых элементов, то скорее всего на него я бы написал тест. Так как высока цена ошибки.
А если он оброс зависимостями потом?
Но меня сейчас волнует не тот код, который мы рефакторим, а тот, который зависит от него. Ведь если нет теста на рефактируемый код, то сам рефактируемый код проверить довольно дешево. А вот проверить все что от него зависит уже дороже.

A>Если теста все же нет, то:

S>>Например, объем зависящего кода, использующего код, который нужно рефакторить.
A>Как мне это помешает добавить покрытие ключевых сценариев к этому коду?
Добавление тестов опосля может быть осложнено, т.к. тесты предъявляют определенные требования к дизайну, которые как-правило не выполняются, если не писать тесты наперед, или хотя бы не предугадывать необходимость тестирования в этом месте.

A>В процессе принятия решения "быть или не быть" играет роль квадрат рисков:

A>Высок ли риск поломать другие части системы * Высока ли вероятность допустить ошибку

A>4 нужно обязательно тестировать, 3/4 просто нжуно ( ), 1 не обязательно.


Да, но код, который зависит... Его надо тестировать. Иначе мы не узнаем, как например добавление новой функциональности скажется на нем.

A>Естественно никаких квадратов я перед принятием решения не рисую. Все происходит интуитивно.

A>И самое главное: цена ошибки обычно низка (во всяком случае в моих проектах).

Да, анализ цены ошибки это хорошо. Есть еще другой аспект — рефакторинг. Я вот очкую делать рефакторинг, когда не могу убедиться в его корректности, потому как боюсь спровоцировать ошибки (пусть даже и низкой стоимости). Как следствие — со временем код захламляется и увеличивает стоимость изменений.
Re[7]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 19:30
Оценка:
Здравствуйте, samius, Вы писали:

S>А если он оброс зависимостями потом?

S>Но меня сейчас волнует не тот код, который мы рефакторим, а тот, который зависит от него. Ведь если нет теста на рефактируемый код, то сам рефактируемый код проверить довольно дешево. А вот проверить все что от него зависит уже дороже.
Мы обсуждаем отсутствие тестов на "тот код, который мы рефакторим". Почему ты считаешь, что у тебя будут тесты на зависимй код, а у меня нет?

S>Да, но код, который зависит... Его надо тестировать. Иначе мы не узнаем, как например добавление новой функциональности скажется на нем.

Т.е. мы рассматриваем сценарий: простой код зависящий от простого и еще простого и т.д. Каков процент таких случаев?
Есть тесты на ключевые сценарии. Есть ручное тестирование. Есть багтрекер в конце концов.

С другой стороны, то что я описал выше -- не алгоритм для робота: делай так, а не иначе. Алгоритм намного сложнее, часть его мне совершенно непонятна, но основа такая: я не тестирую простой код без необходимости.


S>Да, анализ цены ошибки это хорошо. Есть еще другой аспект — рефакторинг. Я вот очкую делать рефакторинг, когда не могу убедиться в его корректности, потому как боюсь спровоцировать ошибки (пусть даже и низкой стоимости). Как следствие — со временем код захламляется и увеличивает стоимость изменений.

С тех же успехом можно боятся того, что твои тесты не словят всех ошибок и не делать рефакторинг.


СУВ, Aikin
P.S. скатываемся в какую-то болтологию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[8]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 19:48
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Если дело дошло до баг-репортов, то как-правило цена ошибки выше цены вовремя написанного теста.

A>Выше -- да, никто не спорит. Но не настолько высока чтобы подкладывать солому (тратить время и писать тесты на все и вся).
Я написал код. Я его проверил под отладчиком (без теста). Через месяц Вася Пупкин его модифицирует и использует в новом месте, тоже его проверяет. Потом я изменяю код, проверяю под отладчиком, но Васин код не работает, а я не знаю о его существовании. Узнает ли Вася о том что его код не работает до релиза? Если нет команды бета-тестеров, то в общем случае — не факт. Это риторика.

S>>Успешные проекты без тестов возможны, но то что я жил без тестов к этому отношения не имеет.

A>ИМО, имеет.


S>>http://www.rsdn.ru/forum/dotnet/3807699.flat.aspx
Автор: samius
Дата: 15.05.10

A>Но эксепшен все же в логи попал и довольно таки быстро. Не вижу больших проблем.
Проблема в том, что ветка, в которой проводилась конвертация, была смержена в основную. Если бы ситуацию не обошли быстро, это могло бы парализовать разработку на неопределенный срок.

S>>Надо кнопку, которая ответит на вопрос, все ли впорядке. Кнопка есть, но ее не нажимают, потому как она мало что покрывает. Мои усилия (пока) тщетны.

A>Не догнал
У нас в команде не любят тестировать, потому мероприятия по привитию тестирования очень сложно проводить. Код пишется без рассчета на тестирвание, тестирование нетривиально. Проблемы с оценкой работоспособности есть и все это понимают, но что-либо предпринимать не спешат.

A>P.S. Что-то мы удаляемся от темы

Да, я уж забыл о чем тема, увлекся диалогом.
Re[8]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 19:57
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


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

A>Мы обсуждаем отсутствие тестов на "тот код, который мы рефакторим". Почему ты считаешь, что у тебя будут тесты на зависимй код, а у меня нет?

Я считаю безотносительно личностей. Как раз наоборот, описываю проблемы текущего моего проекта. Т.е. у меня тестов на зависимый код нет и это мешает рефакторить.

S>>Да, но код, который зависит... Его надо тестировать. Иначе мы не узнаем, как например добавление новой функциональности скажется на нем.

A>Т.е. мы рассматриваем сценарий: простой код зависящий от простого и еще простого и т.д. Каков процент таких случаев?
A>Есть тесты на ключевые сценарии. Есть ручное тестирование. Есть багтрекер в конце концов.
Есть ситуации когда этого нет. Ну то есть не совсем нет, но почти нет. Тесты на ключевые сценарии затруднены дизайном, не подразумевающим тесты. Система слишком сложна для более-менее ручного тестирования в процессе разработки, а команды тестеров нет. Багтрекер есть. Но беда когда одно неконтроллируемое тестами изменение вносит несколько багов.

A>С другой стороны, то что я описал выше -- не алгоритм для робота: делай так, а не иначе. Алгоритм намного сложнее, часть его мне совершенно непонятна, но основа такая: я не тестирую простой код без необходимости.

Можно сказать что мы говорим как раз о необходимости. Я например вижу необходимость в том, что бы оценивать корректность изменений до нажатия на кнопку Commit. Это самый дешевый способ локализации ошибок, когда известно что повлияло без отрыва от контекста.

A>С тех же успехом можно боятся того, что твои тесты не словят всех ошибок и не делать рефакторинг.

Когда тесты проверяют хотя бы основные сценарии — уже легче с рефакторингом, чем когда полная неизвестность.

A>СУВ, Aikin

A>P.S. скатываемся в какую-то болтологию.
Да, завязываем.
Re[9]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 20:10
Оценка:
Здравствуйте, samius, Вы писали:

S>>>http://www.rsdn.ru/forum/dotnet/3807699.flat.aspx
Автор: samius
Дата: 15.05.10

A>>Но эксепшен все же в логи попал и довольно таки быстро. Не вижу больших проблем.
S>Проблема в том, что ветка, в которой проводилась конвертация, была смержена в основную. Если бы ситуацию не обошли быстро, это могло бы парализовать разработку на неопределенный срок.
СВН позволяет откатывать изменения: делаешь мерж из trunk в trunk, номера ревизий указываешь в обратном порядке (или жмешь галку reverse (вроде так)).


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[10]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 20:20
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Проблема в том, что ветка, в которой проводилась конвертация, была смержена в основную. Если бы ситуацию не обошли быстро, это могло бы парализовать разработку на неопределенный срок.

A>СВН позволяет откатывать изменения: делаешь мерж из trunk в trunk, номера ревизий указываешь в обратном порядке (или жмешь галку reverse (вроде так)).

У нас HG. Он тоже умеет, но т.к. изменения расползаются по репозиториям, откат в основном репозитории не очень популярная мера. Мерж был все равно преждевременен.
Re[9]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 27.05.10 20:23
Оценка:
Здравствуйте, samius, Вы писали:

A>>Мы обсуждаем отсутствие тестов на "тот код, который мы рефакторим". Почему ты считаешь, что у тебя будут тесты на зависимй код, а у меня нет?

S>Я считаю безотносительно личностей. Как раз наоборот, описываю проблемы текущего моего проекта. Т.е. у меня тестов на зависимый код нет и это мешает рефакторить.
Прости, никакого перехода на личности не было. Все что я хотел сказать это то, что наличие тестов на зависимый код не зависит ( ) от того есть ли тесты на основной кусок.

S>Есть ситуации когда этого нет. Ну то есть не совсем нет, но почти нет. Тесты на ключевые сценарии затруднены дизайном, не подразумевающим тесты. Система слишком сложна для более-менее ручного тестирования в процессе разработки, а команды тестеров нет.

Ключевые сценарии я проверяю не из нутри приложения (код), а снаружи. Для вэба есть WatiN (я использую), Selenium. Для десктопа не знаю что есть, но что-то пробегало.
Во многих случаях это намного проще чем писать тесты на сам кода.
По поводу "как из нетестируемого сделать тестируемое": надеюсь ты уже видел Эффективная работа с унаследованным кодом. Книга просто супер!

S>Можно сказать что мы говорим как раз о необходимости. Я например вижу необходимость в том, что бы оценивать корректность изменений до нажатия на кнопку Commit.

Угу. Только я говорю о том, что в простых случах мне достаточно головы



СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[10]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 20:46
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Я считаю безотносительно личностей. Как раз наоборот, описываю проблемы текущего моего проекта. Т.е. у меня тестов на зависимый код нет и это мешает рефакторить.

A>Прости, никакого перехода на личности не было. Все что я хотел сказать это то, что наличие тестов на зависимый код не зависит ( ) от того есть ли тесты на основной кусок.
Все верно, я лишь о том что общая нехватка тестов может мешать и заранее сложно предугадать где они будут нужны через пол года. И если их не писать сразу, то потом это будет сложнее, т.к. код наверняка будет не готов к этому.

S>>Есть ситуации когда этого нет. Ну то есть не совсем нет, но почти нет. Тесты на ключевые сценарии затруднены дизайном, не подразумевающим тесты. Система слишком сложна для более-менее ручного тестирования в процессе разработки, а команды тестеров нет.

A>Ключевые сценарии я проверяю не из нутри приложения (код), а снаружи. Для вэба есть WatiN (я использую), Selenium. Для десктопа не знаю что есть, но что-то пробегало.
Конечно есть, но в моем случае пользоваться этим очень сложно. Требуется проверить взаимодействие нескольких приложений (2-3 толстых клиента разных конфигураций в трехзвенке), да еще и сервера могут взаимодействовать. Снаружи автоматизированно практически нереально.

A>Во многих случаях это намного проще чем писать тесты на сам кода.

A>По поводу "как из нетестируемого сделать тестируемое": надеюсь ты уже видел Эффективная работа с унаследованным кодом. Книга просто супер!
Книгу видел, но не читал. (Цена: 125 337 руб. — это реальная цена? По-моему это цена от жигулей)
Проблема правда не в том, что мы не можем работать эффективно с кодом, а в том что не хотим. Да и код не унаследованный а свой. И я 4 года наблюдал как он тух и пытался достучаться наверх с мыслью о том, что нужны меры.

S>>Можно сказать что мы говорим как раз о необходимости. Я например вижу необходимость в том, что бы оценивать корректность изменений до нажатия на кнопку Commit.

A>Угу. Только я говорю о том, что в простых случах мне достаточно головы
Когда голова одна, с ней легко договориться. Когда голов несколько, и ими движут разные мотивы, то нет одного мнения.
Re[12]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.10 20:48
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>У нас HG. Он тоже умеет, но т.к. изменения расползаются по репозиториям, откат в основном репозитории не очень популярная мера. Мерж был все равно преждевременен.

A>Нет. hg умеет именно откатывать (чего свн не умеет). Я же предлагаю сделать новый КОМИТ с откатом. Тогда этот комит расползется ко всем.
Да, это способ!
Re[2]: Developer Testing
От: Other Sam Россия  
Дата: 27.05.10 20:49
Оценка:
> для меня это бесполезное знание).
Извиняюсь, Aikin, что влезаю в переписку. Мне интересно понять Вашу
точку зрения и ее аргументы. Все что выше — я прочитал. И мне кажется,
что Вы сильно недооцениваете важность модульных тестов.
Вот пример простого кода. Нужно ли на этот фрагмент писать модульный
тест (Unit test)?
public int fn1(int a, int b) {
     return (a+(b-1))/b;
}
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 07:49
Оценка:
Здравствуйте, samius, Вы писали:

S>Все верно, я лишь о том что общая нехватка тестов может мешать и заранее сложно предугадать где они будут нужны через пол года. И если их не писать сразу, то потом это будет сложнее, т.к. код наверняка будет не готов к этому.

Ты оппелируешь к 100% покрытию?
Я в него не верею. Поэтому иду дальше: я не верю в необходимость тестирования простых случаев.

S>Конечно есть, но в моем случае пользоваться этим очень сложно. Требуется проверить взаимодействие нескольких приложений (2-3 толстых клиента разных конфигураций в трехзвенке), да еще и сервера могут взаимодействовать. Снаружи автоматизированно практически нереально.

Не верю! Если пользователи пользуются, то и программа может.

A>>Во многих случаях это намного проще чем писать тесты на сам кода.

A>>По поводу "как из нетестируемого сделать тестируемое": надеюсь ты уже видел Эффективная работа с унаследованным кодом. Книга просто супер!
S>Книгу видел, но не читал. (Цена: 125 337 руб. — это реальная цена? По-моему это цена от жигулей)
Это в белорусских рублях. Дели на 100.
S>Проблема правда не в том, что мы не можем работать эффективно с кодом, а в том что не хотим.
Не говори Мы, говори Я!
S> Да и код не унаследованный а свой. И я 4 года наблюдал как он тух и пытался достучаться наверх с мыслью о том, что нужны меры.
Перевод названия некоректный. В оригинале legasy code. Почитай введение. Чел говорит: "некоторое уже сейчас пишут legasy код". У него легаси код -- код не подтвержденный тестами.

S>Когда голова одна, с ней легко договориться. Когда голов несколько, и ими движут разные мотивы, то нет одного мнения.

Коимт нажимаю Я. И Я решаю готов ли Я его сделать.


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[3]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 08:03
Оценка:
Здравствуйте, Other Sam, Вы писали:

>> для меня это бесполезное знание).

OS>Извиняюсь, Aikin, что влезаю в переписку.
Да не вопрос

OS>
OS>public int fn1(int a, int b) {
OS>     return (a+(b-1))/b;
OS>}
OS>

Код сам по себе не всегда может служить базой для такой оценки. Например этот.
Необходимы дополнительные сведения: что что за код, как будет использоватся, насколько важную часть бизнесс логики он представляет.
Например если этот код подсчитывает величину налога, то тест на него 100% будет.


P.S. Ты процитировал: "для меня это бесполезное знание)". Контент был таков: ... подойдет тест конкретного сценария ... не знаю интеграционный это [тест] или функциональный -- для меня это бесполезное знание)
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[13]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 08:03
Оценка:
Здравствуйте, samius, Вы писали:


A>>Нет. hg умеет именно откатывать (чего свн не умеет). Я же предлагаю сделать новый КОМИТ с откатом. Тогда этот комит расползется ко всем.

S>Да, это способ!
Все что я хочу сказать: мы не принимаем окончательных решений. Все можно исправить!

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[12]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 08:21
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Все верно, я лишь о том что общая нехватка тестов может мешать и заранее сложно предугадать где они будут нужны через пол года. И если их не писать сразу, то потом это будет сложнее, т.к. код наверняка будет не готов к этому.

A>Ты оппелируешь к 100% покрытию?
Нет. Я вообще противник постановки задачи "даешь покрытие". Использую покрытие для как местячковый инструмент для оценки покрытия конкретного куска кода и только.

S>>Снаружи автоматизированно практически нереально.

A>Не верю! Если пользователи пользуются, то и программа может.
Практически = почти. Может, но это очень дорого. Возможно дороже чем пара тестеров на постоянной основе.

A>Это в белорусских рублях. Дели на 100.

А я испугался

S>>Проблема правда не в том, что мы не можем работать эффективно с кодом, а в том что не хотим.

A>Не говори Мы, говори Я!
Имею полное право говорить Мы, потому как именно Я хочу, но не только от меня все зависит. Остальные члены команды не ставят эффективность работы на первое место и заставить их хотеть у меня не получается.

A>Перевод названия некоректный. В оригинале legasy code. Почитай введение. Чел говорит: "некоторое уже сейчас пишут legasy код". У него легаси код -- код не подтвержденный тестами.

Почитаю

S>>Когда голова одна, с ней легко договориться. Когда голов несколько, и ими движут разные мотивы, то нет одного мнения.

A>Коимт нажимаю Я. И Я решаю готов ли Я его сделать.
Это правильно. Но я не могу похвастаться тем же.
Re[13]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 09:02
Оценка:
Здравствуйте, samius, Вы писали:

A>>Ты оппелируешь к 100% покрытию?

S>Нет. Я вообще противник постановки задачи "даешь покрытие". Использую покрытие для как местячковый инструмент для оценки покрытия конкретного куска кода и только.
Тогда я тебя не понимаю.

S>>>Снаружи автоматизированно практически нереально.

A>>Не верю! Если пользователи пользуются, то и программа может.
S>Практически = почти. Может, но это очень дорого. Возможно дороже чем пара тестеров на постоянной основе.
А может вы просто не пробовали.
Что собой представляет точка входа в приложение? Presentation Layer?

S>>>Проблема правда не в том, что мы не можем работать эффективно с кодом, а в том что не хотим.

A>>Не говори Мы, говори Я!
S>Имею полное право говорить Мы, потому как именно Я хочу, но не только от меня все зависит. Остальные члены команды не ставят эффективность работы на первое место и заставить их хотеть у меня не получается.
Ок, т.е. твои слова выше можно читать так: "Проблема правда не в том, что Я не могу работать эффективно с кодом, а в том что не хочу."

A>>Перевод названия некоректный. В оригинале legasy code. Почитай введение. Чел говорит: "некоторое уже сейчас пишут legasy код". У него легаси код -- код не подтвержденный тестами.

S>Почитаю
Обязательно почитай. Это одна из немногих книг (из 4-7) которой я восхищен.

S>>>Когда голова одна, с ней легко договориться. Когда голов несколько, и ими движут разные мотивы, то нет одного мнения.

A>>Коимт нажимаю Я. И Я решаю готов ли Я его сделать.
S>Это правильно. Но я не могу похвастаться тем же.
Вы запускаете в космос корабли? Содаете ПО для мед оборудования? От твоей ошибки зависят жизни или миллионы долларов?
Успокойся, скажи себе "я не гений, я совершаю ошибки, НО я могу их исправить". Сразу станет проще. И ты увидишь, что работаешь быстрее, а ошибок совершаешь не так уж и много (открою секрет: примерно столько же, как и раньше).


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[14]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 09:24
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Нет. Я вообще противник постановки задачи "даешь покрытие". Использую покрытие для как местячковый инструмент для оценки покрытия конкретного куска кода и только.

A>Тогда я тебя не понимаю.


S>>>>Снаружи автоматизированно практически нереально.

A>>>Не верю! Если пользователи пользуются, то и программа может.
S>>Практически = почти. Может, но это очень дорого. Возможно дороже чем пара тестеров на постоянной основе.
A>А может вы просто не пробовали.
A>Что собой представляет точка входа в приложение? Presentation Layer?
От 10 до 40 минутная настройка окружения, в том числе с виртуальными машинами. PL это уже можно сказать финиш.

S>>Имею полное право говорить Мы, потому как именно Я хочу, но не только от меня все зависит. Остальные члены команды не ставят эффективность работы на первое место и заставить их хотеть у меня не получается.

A>Ок, т.е. твои слова выше можно читать так: "Проблема правда не в том, что Я не могу работать эффективно с кодом, а в том что не хочу."
Т.е. проблема во мне?

A>>>Коимт нажимаю Я. И Я решаю готов ли Я его сделать.

S>>Это правильно. Но я не могу похвастаться тем же.
A>Вы запускаете в космос корабли? Содаете ПО для мед оборудования? От твоей ошибки зависят жизни или миллионы долларов?
ПО для мед оборудования. Жизни — зависят. Не от моей ошибки непосредственно, а от врачей, которые работают с моими ошибками.
A>Успокойся, скажи себе "я не гений, я совершаю ошибки, НО я могу их исправить". Сразу станет проще. И ты увидишь, что работаешь быстрее, а ошибок совершаешь не так уж и много (открою секрет: примерно столько же, как и раньше).
Я знаю что я не гений, я знаю что все можно исправить. Но когда из-за моей ошибки встает раком работа в клинике на неделю — это неприятно. Когда идет потеря данных за пол-года (результаты обследований пациентов) — еще хуже.
Re[4]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 09:36
Оценка:
On 05/28/2010 03:03 PM, Aikin wrote:
> Здравствуйте, Other Sam, Вы писали:
>
>>> для меня это бесполезное знание).
> OS>Извиняюсь, Aikin, что влезаю в переписку.
> Да не вопрос
>
> OS>
> OS>public int fn1(int a, int b) {
> OS>      return (a+(b-1))/b;
> OS>}
> OS>

> Код сам по себе не всегда может служить базой для такой оценки. Например этот.
> Необходимы дополнительные сведения: что что за код, как будет использоватся, насколько важную часть бизнесс логики он представляет.
> Например если этот код подсчитывает величину налога, то тест на него 100% будет.
>
>
> P.S. Ты процитировал: "для меня это бесполезное знание)". Контент был таков: ... подойдет тест конкретного сценария ... не знаю интеграционный это [тест] или функциональный -- для меня это бесполезное знание)

Это пример вычисления наименьшего большего целого от частного двух целых
чисел, извиняюсь что не сообщил сразу. Хотя этот момент как
иллюстрастрация необходимости комментирования сработал .
В общем этот пример я здесь раньше в какой-то ветке форума нашел.

Вот еще информация: это код который подсчитывает сколько нужно ящиков
вместимостью b лампочек для отгрузки a лампочек.
Так вот, нужен ли для этого фрагмента кода модульный тест?
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 09:37
Оценка:
Здравствуйте, samius, Вы писали:

A>>Что собой представляет точка входа в приложение? Presentation Layer?

S>От 10 до 40 минутная настройка окружения, в том числе с виртуальными машинами. PL это уже можно сказать финиш.
Это ведь один раз. Потом можно только использовать PL.
Кроме того, почему бы не попытаться автоматизировать процесс развертывания?

A>>Ок, т.е. твои слова выше можно читать так: "Проблема правда не в том, что Я не могу работать эффективно с кодом, а в том что не хочу."

S>Т.е. проблема во мне?
Тебе виднее.

A>>Вы запускаете в космос корабли? Содаете ПО для мед оборудования? От твоей ошибки зависят жизни или миллионы долларов?

S>ПО для мед оборудования. Жизни — зависят. Не от моей ошибки непосредственно, а от врачей, которые работают с моими ошибками.
Это, конечно же, меняет дело. Сорри, с таким не работал. У вас, возможно, требуется покрытие даже простых кусков.

A>>Успокойся, скажи себе "я не гений, я совершаю ошибки, НО я могу их исправить". Сразу станет проще. И ты увидишь, что работаешь быстрее, а ошибок совершаешь не так уж и много (открою секрет: примерно столько же, как и раньше).

S>Я знаю что я не гений, я знаю что все можно исправить. Но когда из-за моей ошибки встает раком работа в клинике на неделю — это неприятно. Когда идет потеря данных за пол-года (результаты обследований пациентов) — еще хуже.
От этого спасает бэкапы базы.
А при наличии бэкапа и автоматизированного развертывания вернуться в к предыдущему релизу не так уж и сложно.


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[5]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 09:48
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Вот еще информация: это код который подсчитывает сколько нужно ящиков

OS>вместимостью b лампочек для отгрузки a лампочек.
OS>Так вот, нужен ли для этого фрагмента кода модульный тест?
1. Как я могу быть уверен в коде, когда даже не понимаю как он работает?
2. Скорее всего этот метод основа всей системы (для автоматизации склада)


Конечно же на него будут тесты. Много тестов

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[16]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 10:11
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


A>>>Что собой представляет точка входа в приложение? Presentation Layer?

S>>От 10 до 40 минутная настройка окружения, в том числе с виртуальными машинами. PL это уже можно сказать финиш.
A>Это ведь один раз. Потом можно только использовать PL.
A>Кроме того, почему бы не попытаться автоматизировать процесс развертывания?
Для разных сценариев используются разные процессы развертывания. Для автоматизации этих процессов нужны ресурсы, а они заняты написанием нового кода. Я не говорю что так и должно быть.

S>>Т.е. проблема во мне?

A>Тебе виднее.
Я так не считаю.

S>>Я знаю что я не гений, я знаю что все можно исправить. Но когда из-за моей ошибки встает раком работа в клинике на неделю — это неприятно. Когда идет потеря данных за пол-года (результаты обследований пациентов) — еще хуже.

A>От этого спасает бэкапы базы.
Объемы данных делают этот процесс затруднительным на поставляемом оборудовании.

A>А при наличии бэкапа и автоматизированного развертывания вернуться в к предыдущему релизу не так уж и сложно.

Согласен.
Re[6]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 10:18
Оценка:
> Конечно же на него будут тесты. Много тестов
Для того фрагмента нужен всего один тест с несколькими проверками. Или
два теста, если при написании первого теста программист прохалявит и не
обработает все нужные кейсы и в них обнаружатся баги. Тогда появится
второй тест с нужными кейсами (а может быть просто в первый допишутся...)

Ну ладно, на такой фрагмент кода Вы будете писать тест. Я Вас правильно
понял?
Тогда в каких же случаях Вы НЕ пишете тест?
Posted via RSDN NNTP Server 2.1 beta
Re[17]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 10:26
Оценка:
Здравствуйте, samius, Вы писали:

S>Для разных сценариев используются разные процессы развертывания. Для автоматизации этих процессов нужны ресурсы, а они заняты написанием нового кода. Я не говорю что так и должно быть.

Возьмите один из сценариев. Самый важный. Попробуйте его автоматизировать и протестировать. Если вам, конечно это надо.

S>>>Т.е. проблема во мне?

A>>Тебе виднее.
S>Я так не считаю.
S>>>И я 4 года наблюдал как он тух и пытался достучаться наверх с мыслью о том, что нужны меры.
Проблема есть. Ты сам на нее указал. !Тебе! нужно ее решение (ты уже ходил к начальству -- ему не нужно). Почему бы тебе самому не попытаться ее решить?
Никогда не поверю, что ты не можешь уделить этому свое время.


A>>От этого спасает бэкапы базы.

S>Объемы данных делают этот процесс затруднительным на поставляемом оборудовании.
Это проблема. Ее нужно решать. Объясните заказчику ОН получит, если предоставит эту вохможность.



И самое главное. Не нужно пытаться сделать этоза раз. Если !ТЫ! сделаешь это за год -- это будет круто! Но делать нужно постепенно. На каждом этапе получая пользу от нововведений.


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[7]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 10:36
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Тогда в каких же случаях Вы НЕ пишете тест?

Самый простой пример это контроллер ASP .Net MVC

Отсюда: http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx
    public void Register(string name, string website, string comment)
    {
        var attendee = new Attendee(name, website, comment);
        _repository.SaveNewAttendee(attendee);
        RenderView("confirm", attendee);
    }



И вот предлагаемый тест:
[Test]

public void ShouldSaveAttendee()
{
    var repository = new FakeRepository();

    var mockViewEngine = new MockViewEngine();
    var controller = new MainController(repository, mockViewEngine);
    controller.ControllerContext = new ControllerContext(new RequestContext(new HttpContextStub(), new RouteData()), controller);
    controller.Register("Jeffrey.',", "http://www.jeffreypalermo.com?=&@%20", "this comment!?,'.");

    Attendee attendee = repository.SavedAttendee;
    Assert.That(attendee.Name, Is.EqualTo("Jeffrey.',"));
    Assert.That(attendee.Website, Is.EqualTo("http://www.jeffreypalermo.com?=&@%20"));
    Assert.That(attendee.Comment, Is.EqualTo("this comment!?,'."));
 
    Assert.That(mockViewEngine.ActualViewContext.ViewName, Is.EqualTo("confirm"));
    Assert.That(mockViewEngine.ActualViewContext.ViewData, Is.EqualTo(attendee));
}



Так вот у МЕНЯ этого теста не будет. До тех пор, пока от тестируемого кода не будет зависить "чья нибудь жизнь".

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[18]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 10:58
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Для разных сценариев используются разные процессы развертывания. Для автоматизации этих процессов нужны ресурсы, а они заняты написанием нового кода. Я не говорю что так и должно быть.

A>Возьмите один из сценариев. Самый важный. Попробуйте его автоматизировать и протестировать. Если вам, конечно это надо.
Надо, но не настолько чтобы бросать текущие задачи.

S>>>>И я 4 года наблюдал как он тух и пытался достучаться наверх с мыслью о том, что нужны меры.

A>Проблема есть. Ты сам на нее указал. !Тебе! нужно ее решение (ты уже ходил к начальству -- ему не нужно). Почему бы тебе самому не попытаться ее решить?
A>Никогда не поверю, что ты не можешь уделить этому свое время.
Потому что я не могу решить эту проблему один. Пока я решаю ее кусочек, остальные колбасят еще 5 кусков. Да и свое личное время я найду куда применить. Потому как ученый уже.

A>>>От этого спасает бэкапы базы.

S>>Объемы данных делают этот процесс затруднительным на поставляемом оборудовании.
A>Это проблема. Ее нужно решать. Объясните заказчику ОН получит, если предоставит эту вохможность.

Заказчик итак бегает раз в месяц за очередным террабайтником. Если ему внушить что ему нужно не один, а два или три, он будет очень расстроен.

A>И самое главное. Не нужно пытаться сделать этоза раз. Если !ТЫ! сделаешь это за год -- это будет круто! Но делать нужно постепенно. На каждом этапе получая пользу от нововведений.

Не поверишь, я за 4 года не смог протолкнуть в систему DI контейнеры, хотя сам с ними знаком с 2004-го, когда я еще не знал, как оно называется.
Re[19]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 11:03
Оценка:
Здравствуйте, samius, Вы писали:

S>Потому что я не могу решить эту проблему один. Пока я решаю ее кусочек, остальные колбасят еще 5 кусков. Да и свое личное время я найду куда применить. Потому как ученый уже.

Я не говорю про личное время. Я про рабочее время. Никогда не поверю что ты работаешь все 8 часов.
На форум, вот, у тебя время нашлось.


A>>И самое главное. Не нужно пытаться сделать этоза раз. Если !ТЫ! сделаешь это за год -- это будет круто! Но делать нужно постепенно. На каждом этапе получая пользу от нововведений.

S>Не поверишь, я за 4 года не смог протолкнуть в систему DI контейнеры, хотя сам с ними знаком с 2004-го, когда я еще не знал, как оно называется.
DI может и не протолкнешь, но вот автоматическое развертывание сделать можно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[20]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 11:15
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Потому что я не могу решить эту проблему один. Пока я решаю ее кусочек, остальные колбасят еще 5 кусков. Да и свое личное время я найду куда применить. Потому как ученый уже.

A>Я не говорю про личное время. Я про рабочее время. Никогда не поверю что ты работаешь все 8 часов.
A>На форум, вот, у тебя время нашлось.
Даже если я буду тратить на решение этой проблемы все 8 часов, я никогда ее не решу один. От меня же требуются решения других проблем, причем в таком стиле, который усугубляет решение этой проблемы.
Да. Сейчас идет вялый дискасс с офисом, а офис очень сильно колбасит с инетом. Это, конечно не оправдание моему болтанию на форуме.

S>>Не поверишь, я за 4 года не смог протолкнуть в систему DI контейнеры, хотя сам с ними знаком с 2004-го, когда я еще не знал, как оно называется.

A>DI может и не протолкнешь, но вот автоматическое развертывание сделать можно.
Автоматическое развертывание есть, проблема с автоматическим конфигурированием автоматического развертывания. Но все равно это будет самодеятельность, за которую мне благодарность не выпишут. А более того, могут и отломать мою самодеятельность, если она будет чему-то мешать. Так происходит с тестами, которые я пишу.
Re[21]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 11:38
Оценка:
Здравствуйте, samius, Вы писали:

S>>>Не поверишь, я за 4 года не смог протолкнуть в систему DI контейнеры, хотя сам с ними знаком с 2004-го, когда я еще не знал, как оно называется.

A>>DI может и не протолкнешь, но вот автоматическое развертывание сделать можно.
S>Автоматическое развертывание есть, проблема с автоматическим конфигурированием автоматического развертывания. Но все равно это будет самодеятельность, за которую мне благодарность не выпишут. А более того, могут и отломать мою самодеятельность, если она будет чему-то мешать. Так происходит с тестами, которые я пишу.
Давай закончим на этом. У меня нет всей информации что есть у тебя. Но я все равно уверен, что ты можешь изменить ситуацию и сделать свою работу проще.

СВУ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[7]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 11:39
Оценка:
Здравствуйте, samius, Вы писали:

A>>Если он изначально предполагал много зависимых элементов, то скорее всего на него я бы написал тест. Так как высока цена ошибки.

S>А если он оброс зависимостями потом?
S>Но меня сейчас волнует не тот код, который мы рефакторим, а тот, который зависит от него. Ведь если нет теста на рефактируемый код, то сам рефактируемый код проверить довольно дешево. А вот проверить все что от него зависит уже дороже.
Насколько я понял, только ты пишешь тесты. Как же ты рефакторишь код от которого зависит функциональность написанная не тобой?


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[8]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 11:55
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Насколько я понял, только ты пишешь тесты. Как же ты рефакторишь код от которого зависит функциональность написанная не тобой?

Я его стараюсь не трогать без необходимости. Но когда необходимо, то коньяку для храбрости! Шутка. Каждый раз как с бенгальским огнем на бочке с порохом.
Re[8]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 12:21
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, Other Sam, Вы писали:


OS>>Тогда в каких же случаях Вы НЕ пишете тест?

A>Самый простой пример это контроллер ASP .Net MVC

A>Отсюда: http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx

A>
A>    public void Register(string name, string website, string comment)
A>    {
A>        var attendee = new Attendee(name, website, comment);
A>        _repository.SaveNewAttendee(attendee);
A>        RenderView("confirm", attendee);
A>    }
A>



A>И вот предлагаемый тест:

A>
A>[Test]

A>public void ShouldSaveAttendee()
A>{
A>    var repository = new FakeRepository();

A>    var mockViewEngine = new MockViewEngine();
A>    var controller = new MainController(repository, mockViewEngine);
A>    controller.ControllerContext = new ControllerContext(new RequestContext(new HttpContextStub(), new RouteData()), controller);
A>    controller.Register("Jeffrey.',", "http://www.jeffreypalermo.com?=&@%20", "this comment!?,'.");

A>    Attendee attendee = repository.SavedAttendee;
A>    Assert.That(attendee.Name, Is.EqualTo("Jeffrey.',"));
A>    Assert.That(attendee.Website, Is.EqualTo("http://www.jeffreypalermo.com?=&@%20"));
A>    Assert.That(attendee.Comment, Is.EqualTo("this comment!?,'."));
 
A>    Assert.That(mockViewEngine.ActualViewContext.ViewName, Is.EqualTo("confirm"));
A>    Assert.That(mockViewEngine.ActualViewContext.ViewData, Is.EqualTo(attendee));
A>}
A>



A>Так вот у МЕНЯ этого теста не будет. До тех пор, пока от тестируемого кода не будет зависить "чья нибудь жизнь".


A>СУВ, Aikin


А, понял. Не тестируете бесполезный код. Тут я с вами согласен.
Вот только я предпочитаю вообще не иметь бесполезного кода.
Re[9]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 12:36
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>А, понял. Не тестируете бесполезный код. Тут я с вами согласен.

OS>Вот только я предпочитаю вообще не иметь бесполезного кода.
Ээээ, а почему код, который регистрирует нового пользователя стал бесполезным? И как не иметь системы регистрации пользователей?


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[12]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 12:51
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Перевод названия некоректный. В оригинале legasy code. Почитай введение. Чел говорит: "некоторое уже сейчас пишут legasy код". У него легаси код -- код не подтвержденный тестами.

Lega<b>c</b>y
Но ты прав в том, что

Michael Feathers' Working Effectively with Legacy Code (ISBN 0-13-117705-2) introduced a definition of legacy code as code without tests, which reflects the perspective of legacy code being difficult to work with in part due to a lack of automated regression tests. He also defined Characterization Tests to start putting legacy code under test.

Re[13]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 12:56
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Aikin, Вы писали:


A>>Перевод названия некоректный. В оригинале legasy code. Почитай введение. Чел говорит: "некоторое уже сейчас пишут legasy код". У него легаси код -- код не подтвержденный тестами.

S>Lega<b>c</b>y
Ага, вот значит почему я не сразу смог найти книгу

Кстати, буквально пару часов назад автор книги (я подписан на его блог) написал интересную статью. Незнаю насколько полезную, но все же интересную. про покрытие кода тестами (не построчное).

http://blog.objectmentor.com/articles/2010/05/28/a-coverage-metric-that-matters


There’s simply that much untested code. It’s better to write tests for the new code that you write and write tests for existing code you have to change, at the time you have to change it. Over time, you get more coverage, but your coverage percentage isn’t a goal. The goal is to make your changes safely.

...

The metric I’m thinking about is percentage of commits on files which are covered by tests relative to the number of commits on files without tests.

...

If you write tests for all of your changes, it will continue to rise. At a certain point, you may want to track only a window of commits, say, the commits which have happened only in the last year. When you do this, you can end up very close to 100%.


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[8]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 12:58
Оценка:
OS>>Тогда в каких же случаях Вы НЕ пишете тест?
A>Самый простой пример это контроллер ASP .Net MVC

A>Отсюда: http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx

A>
A>    public void Register(string name, string website, string comment)
A>    {
A>        var attendee = new Attendee(name, website, comment);
A>        _repository.SaveNewAttendee(attendee);
A>        RenderView("confirm", attendee);
A>    }
A>



A>И вот предлагаемый тест:

A>
A>[Test]

A>public void ShouldSaveAttendee()
A>{
A>    var repository = new FakeRepository();

A>    var mockViewEngine = new MockViewEngine();
A>    var controller = new MainController(repository, mockViewEngine);
A>    controller.ControllerContext = new ControllerContext(new RequestContext(new HttpContextStub(), new RouteData()), controller);
A>    controller.Register("Jeffrey.',", "http://www.jeffreypalermo.com?=&@%20", "this comment!?,'.");

A>    Attendee attendee = repository.SavedAttendee;
A>    Assert.That(attendee.Name, Is.EqualTo("Jeffrey.',"));
A>    Assert.That(attendee.Website, Is.EqualTo("http://www.jeffreypalermo.com?=&@%20"));
A>    Assert.That(attendee.Comment, Is.EqualTo("this comment!?,'."));
 
A>    Assert.That(mockViewEngine.ActualViewContext.ViewName, Is.EqualTo("confirm"));
A>    Assert.That(mockViewEngine.ActualViewContext.ViewData, Is.EqualTo(attendee));
A>}
A>


A>Так вот у МЕНЯ этого теста не будет. До тех пор, пока от тестируемого кода не будет зависить "чья нибудь жизнь".


Я посмотрел еще раз Ваш пример, и подумал, что он просто неправильно оформлен.

SiteModel model;
public void SetUp() {
  model = ...; // Здесь вся лажа по созданию "лесов" для тестов.
}
[Test]
public void ShouldSaveAttendee()
{
    ViewContext resultView = model.controller.Register("Jeffrey.',", "http://www.jeffreypalermo.com?=&@%20", "this comment!?,'.");

    // Проверяем ожидаемое изменение состояния сайта
    Attendee attendee = model.repository.SavedAttendee; // TODO: скорее всего нужно model.repository.getLast() или что-то вроде того
    Assert.That(attendee.Name, Is.EqualTo("Jeffrey.',"));
    Assert.That(attendee.Website, Is.EqualTo("http://www.jeffreypalermo.com?=&@%20"));
    Assert.That(attendee.Comment, Is.EqualTo("this comment!?,'."));
 
    // Проверяем ответ веб сервера
    Assert.That(resultView.ViewName, Is.EqualTo("confirm"));
    Assert.That(resultView.ViewData, Is.EqualTo(attendee));
}

Во! Вот так! Я бы еще повыбрасывал Assert.That(... Is.EqualTo("... ИМХО не наглядно.
Итак в SetUp поднимаем все что нужно для проверки, а в тестах только проверяем.
И вот тогда будут нормальные тесты, тогда можно будет думать о том что там и как.

[Test]
public void TestRegisterAttendee()
{
    ViewContext resultView;

    // Normal case
    resultView = model.controller.Register("abc", "http://site.local?=&@%20", "comment");
    Assert.Equals("abc", model.model.repository.SavedAttendee.Name);
    Assert.Equals("confirm", resultView.ViewName);

    // Empty name
    resultView = model.controller.Register("", "http://site.local?=&@%20", "comment");
    Assert.IsNull(model.model.repository.SavedAttendee);
    Assert.Equals("ErrorView", resultView.ViewName);

    // и так далее на обработку всех ситуаций вызовов Register.
    // todo: Not Unique name
    // todo: Wrong URL
    // todo: Empty Comment
    // todo: Too long comment
    // todo: Not Unique URL

    // при этом вышеприведенный Ваш тест (ShouldSaveAttendee) нужно тоже оставить. Он 
    // полностью проверяет корректность рабоыт Register в нормальных условиях, а 
    // TestRegisterAttendee проверяет корректность работы в пограничных условиях.

}


В итоге для одного проекта нужно только один раз написать SetUp.
А далее — писать тесты легко. Фактически программисту все равно приходится проверять корректность кода. А при наличии уже написаного SetUp написать тест и прогнать его один раз, легче, чем вручную проверить корректность кода.
Re[14]: Developer Testing
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.05.10 13:07
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, samius, Вы писали:


S>>Здравствуйте, Aikin, Вы писали:


A>Кстати, буквально пару часов назад автор книги (я подписан на его блог) написал интересную статью. Незнаю насколько полезную, но все же интересную. про покрытие кода тестами (не построчное).


A>http://blog.objectmentor.com/articles/2010/05/28/a-coverage-metric-that-matters


A>

A>There’s simply that much untested code. It’s better to write tests for the new code that you write and write tests for existing code you have to change, at the time you have to change it. Over time, you get more coverage, but your coverage percentage isn’t a goal. The goal is to make your changes safely.

С этим я абсолютно согласен. Ну а метрика мне не нужна. Я по поводу метрик, связанных с покрытием и спускаемых сверху, считаю что они приводят лишь к раскрашиванию кода в нужный цвет (некоторыми безответственными разработчиками), вместо того чтобы проверять код. В свою очередь, метрику проверки основных сценариев сложно оценить, но очень легко ощутить на собственной шкуре.

A>СУВ, Aikin
Re[9]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 13:24
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Во! Вот так! Я бы еще повыбрасывал Assert.That(... Is.EqualTo("... ИМХО не наглядно.

а я тащусь от этой фичи

OS>Итак в SetUp поднимаем все что нужно для проверки, а в тестах только проверяем.

OS>И вот тогда будут нормальные тесты, тогда можно будет думать о том что там и как.
Я все равно не буду писать этот тест. Как бы круто он не выглядел.
Писать пару десяток строчек для проверки трех... увольте.

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[11]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 13:24
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Короче архитектура должна быть другая и тогда такого кода вообще не возникает.

Архитектура ASP MVC рульна. Она идет от Ruby on Rails.

OS>Я там имел ввиду, что распределение обязанностей по классам в ASP.NET не удобное. Из-за этого приходится писать всякую чушь. В Вашем примере — не "код который регистрирует нового пользователя", а код, "который реагирует на комманду контроллера с тем чтобы выполнить регистрацию пользователя и определить реакцию веб сервера на запрос".

Это место склейки базы (_repository) и UI (RenderView("confirm", attendee)). Этот код где-то должен быть. Не думаю что в жаве это будет лучше.
Выкинуть его невозможно без ухудшения архитектуры. Заменить да, но, ИМО, будет только хуже. Уж поверь моему опыту и знанию технологии.

OS> Он еще и не напрямую вызывается... Бэээээээ!

Он вызывается из фрэймворка. Мой код никак не вызывает этот метод.
Что-то похожее можно увидеть в Spring MVC для Java.


СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[10]: Developer Testing
От: Other Sam Россия  
Дата: 28.05.10 13:31
Оценка:
OS>>Во! Вот так! Я бы еще повыбрасывал Assert.That(... Is.EqualTo("... ИМХО не наглядно.
A>а я тащусь от этой фичи

OS>>Итак в SetUp поднимаем все что нужно для проверки, а в тестах только проверяем.

OS>>И вот тогда будут нормальные тесты, тогда можно будет думать о том что там и как.
A>Я все равно не буду писать этот тест. Как бы круто он не выглядел.
A>Писать пару десяток строчек для проверки трех... увольте.

A>СУВ, Aikin


Ну тут простой выбор. Проверить вручную за 15-20 минут. Или написать тест за те же 15-20 минут.
Re[11]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 28.05.10 13:38
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Ну тут простой выбор. Проверить вручную за 15-20 минут. Или написать тест за те же 15-20 минут.

Вернемся к моему первому сообщению:

Писать юнит тест для контроллера формы большого смыла не имеет. Тут больше подойдет тест конкретного сценария.

Вот он будет. Который заодно проверит как же отренедерилась вью и не забыл ли я поля на форме.

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[12]: Developer Testing
От: Other Sam Россия  
Дата: 29.05.10 11:54
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, Other Sam, Вы писали:


OS>>Короче архитектура должна быть другая и тогда такого кода вообще не возникает.

A>Архитектура ASP MVC рульна. Она идет от Ruby on Rails.

MVC — рульна, согласен. MVC поверх HTTP — ОТСТОЙ!
Мое мнение для веба (для HTTP) нужно провести разделительную линию между клиентом (браузером) и сервером. Вообще эта линия уже есть — сам HTTP. А далее определить все сообщения (запросы и их параметры) и реакцию сервера на эти запросы.
ASP.NET задумывался для того, чтобы сделать программирование для веба таким же "легким" как программирование для десктопа. Ха. Это удалось в полной мере!

OS>>Я там имел ввиду, что распределение обязанностей по классам в ASP.NET не удобное. Из-за этого приходится писать всякую чушь. В Вашем примере — не "код который регистрирует нового пользователя", а код, "который реагирует на комманду контроллера с тем чтобы выполнить регистрацию пользователя и определить реакцию веб сервера на запрос".

A>Это место склейки базы (_repository) и UI (RenderView("confirm", attendee)). Этот код где-то должен быть. Не думаю что в жаве это будет лучше.
A>Выкинуть его невозможно без ухудшения архитектуры. Заменить да, но, ИМО, будет только хуже. Уж поверь моему опыту и знанию технологии.

С этим не соглашусь. В этом "месте склейки" есть задачи такого плана.
Сначала напомню шаблон Layers (я здесь использую лармановский вариант)
1. Подать команду в "уровень объектов предметной области" (в BLL, в Domain Model, по разному называется). Инициатор такой команды объект из Уровня приложения. Команда может выполниться успешно или провалиться по разным причинам (BLL сообщит причину, если что).
2. Определить реакцию сервера на запрос. В зависимости от успешности или неуспешности выполнения команды. Это ответственность объекта из Уровня приложения.
3. Создать страницу которая должна появляться после успешного выполнения команды. Это ответственность объекта из уровня представления.

// ---------- application layer
package myapplayer;
class App1 {
  mybll.Bll1 bll;
  ...
  public Response registerAttendee(Attendee a) {
    try {
      bll.registerAttendee(a);
      return new AttendeeDisplayResponse(a);
    } catch (Exception e) {
      return new ErrorResponse(e);
    }
  }
}
// --------- UI layer ------
package myuilayer;
class PageRenderer { 
  // я в реальных проектах применяю XSLT для UI уровня, но тогда для 
  // новичков не наглядно (один из уровней приложения написан на функциональном языке - XSLT).
  public void render(HttpServletRequest req, HttpServletResponse res, Response r) {
    if(r instanceof AttendeeDisplayResponse) {
      AttendeeDisplayResponse ra = (AttendeeDisplayResponse)r;
      req.setAttribute("ATTENDEE", ra);
      transfer("Attendee.jsp");
    } else {
      throw new RuntimeException("Not implemented response");
    }
  }
}


Ну как, видно? Тест UI уровня — элементарный! Тест уровня приложения — еще проще. Bll — как обычно (его тестить напряжно, но зато он не на что не завязан).


OS>> Он еще и не напрямую вызывается... Бэээээээ!

A>Он вызывается из фрэймворка. Мой код никак не вызывает этот метод.
A>Что-то похожее можно увидеть в Spring MVC для Java.


A>СУВ, Aikin
Re[13]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 02.06.10 10:21
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>ASP.NET задумывался для того, чтобы сделать программирование для веба таким же "легким" как программирование для десктопа. Ха. Это удалось в полной мере!

У вас есть хотя бы поверхностные знания о том что вы критикуете? Судя по вышенаписанному нет.
Хинт: я не зря выделили MVC в названии ASP MVC


OS>Ну как, видно? Тест UI уровня — элементарный! Тест уровня приложения — еще проще. Bll — как обычно (его тестить напряжно, но зато он не на что не завязан).

Видно вот что:
у меня был один небольшой метод на три строчки.

Твое "улучшение" состоит из:
метода registerAttendee() и нового кода в методе render(), так же создан новый класс AttendeeDisplayResponse, добавлен метод бизнесс логики registerAttendee() о котором никто не просил.

И вы хотите сказать что это улучшение????
Да за один метод render() который превращается в макаронину из if-ов я не буду использовать этот способ.


Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[14]: Developer Testing
От: Other Sam Россия  
Дата: 02.06.10 12:51
Оценка:
On 06/02/2010 05:21 PM, Aikin wrote:
>
> OS>ASP.NET задумывался для того, чтобы сделать программирование для веба
> таким же "легким" как программирование для десктопа. Ха. Это удалось в
> полной мере!
> У вас есть хотя бы поверхностные знания о том что вы критикуете? Судя по
> вышенаписанному нет.
> Хинт: я не зря выделили MVC в названии ASP *MVC*
>
>
> OS>Ну как, видно? Тест UI уровня — элементарный! Тест уровня приложения
> — еще проще. Bll — как обычно (его тестить напряжно, но зато он не на
> что не завязан).
> Видно вот что:
> у меня был один небольшой метод на три строчки.
>
> Твое "улучшение" состоит из:
> метода registerAttendee() и нового кода в методе render(), так же создан
> новый класс AttendeeDisplayResponse, добавлен метод бизнесс логики
> registerAttendee() о котором никто не просил.
>
> И вы хотите сказать что это улучшение????
> Да за один метод render() который превращается в макаронину из if-ов я
> не буду использовать этот способ.

Я как знал, что не догоните!!!! ВНИМАТЕЛЬНО!!!! Смотрите на КАРТИНКУ в
моем посте!!! (Это архитектура позволяющая строить огромные системы).
ВНИМАТЕЛЬНО читайте комментарии
// ---------- application layer
// --------- UI layer ------
Они не просто так! Они разъясняют архитектуру.
Там еще есть комментарии. Из них вы поймете, что есть и другие способы
организации UI layer (более подходящие, более ясные. Один из них XSLT).

Ну и AttendeeDisplayResponse (этот класс — следствие применения layers в
HTTP приложении).
Вот объяснение:
1. Реакция на запрос определяется в Application Layer (см картинку!!!).
Цитирую с картинки: "Переходы между окнами/страницами"
2. Подготовка данных для UI уровня производится в Application Layer.
Снова цитирую по картинке: "Объединение/преобразование данных для
объектов уровня представления".
3. HTML — уровень представления. (ничего касающегося HTML не должно быть
нигде кроме UI Layer).
4. Есть еще косвенное (из-за выбора XSLT) следствие, определяющее
необходимость *Response объектов.
Таким образом из Application Layer в UI layer должны полететь данные для
страницы и реакция на запрос. Как этого добиться?

Выбор:
А) Передавать один или несколько объектов предментой области.
Б) Передавать универсальный объект (например XML)
В) Создать семейство контейнеров для объектов предметной области
Вариант А — не подходит (объекты слишком мелкие, UI уровень распухнет).
Вариант Б — плохой (в Application Layer появится два представления одних
и тех же данных: объекты предметной области, и их же представление в
универсальном формате).
Вариант В — неплохой. На семейство этих контейнеров можно еще повесить
требования по предствалению данных в нужных для UI формате. Тогда совсем
хорошо.

-----------
Теперь по поводу того, что я 3 строчки заменил на тучу.
Добавьте в ваш пример что-нибудь более осмысленное.
Например различная реакция при вызове Register анонимным пользователем,
Пользователем у которого нет разрешений на регистрацию Attendee, в
случае если Attendee с таким именем и website уже есть в базе.
В моем случае
   public Response registerAttendee(Attendee a) {
     try {
       bll.registerAttendee(a);
       return new AttendeeDisplayResponse(a);
       // Реакция на те же действия анонимного пользователя,
       // может быть определена в UI (а может и здесь)
       return (isAnonimous()
         ? RedirectResult.SignUp
         : new AttendeeDisplayResponse(a)
       );
     } catch (AccessViolationException e) {
       return new NoAccessResponse(e);
     } catch (DublicateAttendeeException e) {
       // этот catch можно было вообще не писать, уже все сделано!
       return new ErrorResponse(e);
     } catch (Exception e) {
       return new ErrorResponse(e);
     }
   }
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 07.06.10 08:12
Оценка:
Здравствуйте, Other Sam, Вы писали:

Нет, мне однозначно нравится с вами общаться!
Вы хотя бы пытались читать что я пишу?

OS>Я как знал, что не догоните!!!! ВНИМАТЕЛЬНО!!!! Смотрите на КАРТИНКУ в

OS>моем посте!!! (Это архитектура позволяющая строить огромные системы).
OS>ВНИМАТЕЛЬНО читайте комментарии
OS>// ---------- application layer
OS>// --------- UI layer ------
OS>Они не просто так! Они разъясняют архитектуру.
OS>Там еще есть комментарии. Из них вы поймете, что есть и другие способы
OS>организации UI layer (более подходящие, более ясные. Один из них XSLT).
Что такое слои я знаю. Зачем они нужны тоже.
Возможно вы сильно удивитесь, но контроллер (мы ведь с него начали, так?) относится к UI layer. Поэтому все остальные слои пустьостанутся за рамками нашей дискусии.

Ну и еще на заметку, раз вы не хотите ознакомится с ASP MVC: кроме кода контроллера в UI layer-е будет только вьюшка (Register.aspx), т.е. только разметка.

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re[16]: Developer Testing
От: Other Sam Россия  
Дата: 07.06.10 11:16
Оценка:
> Нет, мне однозначно нравится с вами общаться!
> Вы хотя бы пытались *читать* что я пишу?
Да, хватит уже пытаться съязвить... В этом нет смысла.

> OS>Я как знал, что не догоните!!!! ВНИМАТЕЛЬНО!!!! Смотрите на КАРТИНКУ в

> OS>моем посте!!! (Это архитектура позволяющая строить огромные системы).
> OS>ВНИМАТЕЛЬНО читайте комментарии
> OS>// ---------- application layer
> OS>// --------- UI layer ------
> OS>Они не просто так! Они разъясняют архитектуру.
> OS>Там еще есть комментарии. Из них вы поймете, что есть и другие способы
> OS>организации UI layer (более подходящие, более ясные. Один из них XSLT).
> Что такое слои я знаю. Зачем они нужны тоже.
> Возможно вы сильно удивитесь, но контроллер (мы ведь с него начали,
> так?) относится к UI layer. Поэтому все остальные слои пустьостанутся за
> рамками нашей дискусии.
>
> Ну и еще на заметку, раз вы не хотите ознакомится с ASP MVC: кроме кода
> контроллера в UI layer-е будет только вьюшка (Register.aspx), т.е.
> только разметка.

Контроллер может относиться к UI (в глобальном плане) а может и не
относиться.
Но вот если аккуратненько вынуть часть системы учавствующую в одном
конкретном MVC и разместить ее по логическим уровням Layers, тогда
контроллер однозначно оказывается в Application Layer (выше модели, и
ниже вью).
Но это не важно. Какая разница где в Layers находится Контроллер, если в
рассматриваемой системе нет ни Layers ни Controller.

Каждую часть MVC тестировать легко и приятно.
На Layers приятно строить большие системы.
MVC (в том числе ASP MVC) — плохой выбор для ВЕБ.
Ваше нежелание тестировать свой код (который вы выше приводили), так и
осталось для меня иррациональным. Ваше нежелание выкинуть тот код — тоже
не понимаю. (Тестировать не хочу, т.к. код слишком жидкий и тесты будут
падать при каждом чихе, а выкинуть не хочу, просто потомучто).

--------

Кстати, в ветке design недавно было обсуждение MVC. И там тоже был
разброс в понимании деталей...

Я задумался, уж не я-ли туплю?!
Проверяю:

1. Русская вика: http://ru.wikipedia.org/wiki/Model-View-Controller
"...Controller... ....и информирует модель и представление..."
(не верно)!

2. Нерусская вика:
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
"The controller receives input and initiates a response by making
calls on model objects."
Мой перевод: Получателем входных воздействий является Контроллер. И он
же инициирует отклик системы путем обращения к объектам Моделям.
(верно)

"...controller accepts input... ...and instructs the model and
viewport..." (технически верно, но допускает некорректное толкование).

Обратите внимание указывается Viewport, а не View! Есть подозрение, что
это писал явьщик-свингист. Там вьюпорт — это UI контрол для аггрегации
вьюшек.
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JViewport.html Если
посмотрим на него, то можно понять, что его можно "за уши" притянуть под
понятие Контроллер (методы setExtentSize, setViewSize,
scrollRectToVisible), а можно также притянуть за уши к понятию Модель
(getInsets, getView, addChangeListener, firePropertyChange...). В общем
в контексте обсуждения MVC зря упоминается столь сложный объект, да еще
и с именем похожим на View.

3. Еще в нерусской вике:
"The controller may (in some implementations) issue a general
instruction to the view to render itself. In others, the view is
automatically notified by the model of changes in state (Observer) which
require a screen update."
Мой перевод:
"В некоторых реализациях Контроллер может посылать общие команды во
вью, для отображения своего представления. В остальных реализациях
Вьюшки автоматически оповещаются моделью, обо всех изменениях
(Посредством событий) которые влекут перерисовку отображения".
(В целом близко к классике, но формулировки очень ненадежные).

Здесь, когда говорится о посылке событий из контроллера во вью, я думаю,
имеют ввиду объекты Action (Что-то близкое к шаблону проектирования
Комманда (Command)). Такие объекты Action сами уведомляют Вьюшки чтобы
например задизейблить кнопку, или пункт меню соответствующий этой
Action. В пользу моей догадки говорит то, что упоминается "general
instructions" (общие команды, общие для всех контроллеров комманды?).

4. Диаграммы в виках содержат ОЧЕНЬ неприятную неточность!!! Стрелочка
от Контроллека к вью! Ее быть не должно!!! Я решил поискать диаграмму
классов для этого шаблона у фаулера, однако набрел на
http://www.martinfowler.com/eaaDev/uiArchs.html
Он там сокрушается, что все по разному понимают MVC и предлагает свой
вариант, с разъяснениями. Так вот в подтверждение того, что стрелочки
быть не должно его слова "Controller and view should (mostly) not
communicate directly but through the model.". Перевожу: "Контроллеры и
Вью не должны взаимодействовать напрямую, а только через Модель (хотя
допускаются исключения)".

5. В конечном итоге я обратился к Trygve Reenskaug
http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Там этот шаблон еще только зарождался, так что не очень-то понятно, но я
нашел http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/MVC_pattern.pdf
"MVC Pattern Language" Там в этом PDF на странице 14 приведены диаграммы
(уже почти UML), на которых видно, что контроллер не взаимодействует с
вью, а только с моделью.

В общем, если кто-то чувствует неуверенность в понимании MVC
ознакомьтесь с несколькими статьями (увы на английском), а также
посмотрите несколько реализаций (это должны быть GUI приложения, а не
Веб). Ну и знайте — в вике неточности.
Posted via RSDN NNTP Server 2.1 beta
Re[17]: Developer Testing
От: Aikin Беларусь kavaleu.ru
Дата: 07.06.10 11:42
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Ваше нежелание тестировать свой код (который вы выше приводили), так и

OS>осталось для меня иррациональным.
Еще раз: он слишком прост, чтобы я в нем засомневался.

OS>Ваше нежелание выкинуть тот код — тоже не понимаю.

Не вижу альтернатив. То что вы привели раньше наоборот усложнение, а не упрощение.

OS>(Тестировать не хочу, т.к. код слишком жидкий и тесты будут

OS>падать при каждом чихе, а выкинуть не хочу, просто потомучто).
Этот код, скорее всего, вообще не будет изменятся в дальнейшем.




>> Нет, мне однозначно нравится с вами общаться!

>> Вы хотя бы пытались *читать* что я пишу?
OS>Да, хватит уже пытаться съязвить... В этом нет смысла.
Жаль.

OS>На Layers приятно строить большие системы.

Забудь про слои. Они здесь не в тему! Мы сейчас обсуждаем совсем другой вопрос.

OS>MVC (в том числе ASP MVC) — плохой выбор для ВЕБ.

А "мужики-то не знают! (с)" и написали целый фреймворк, на которм написано много крупных вэб приложений. Например Stack Overflow


OS>Кстати, в ветке design недавно было обсуждение MVC. И там тоже был

OS>разброс в понимании деталей...

OS>...


OS>В общем, если кто-то чувствует неуверенность в понимании MVC

OS>ознакомьтесь с несколькими статьями (увы на английском), а также
OS>посмотрите несколько реализаций (это должны быть GUI приложения, а не
OS>Веб). Ну и знайте — в вике неточности.
То что вариантов MVC вагон и маленькая тележка я в курсе.
Но дело в том, что я не рассматриваю архитектурный паттерн. Я говорю про конкретную его реализацию в ASP MVC.
Мне не нужно его реализовывать, он уже реализован во фреймворке.


P.S. Не пишите, плиз, такие развернутые посты. Не тратьте свое время. Я вполне себе состоявшийся специалист и не только знаю о всем том, что вы уже говорили, но и сложил свое мнение об этом.
СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1466>>
Re: Developer Testing
От: Аноним  
Дата: 06.08.10 23:09
Оценка:
Здравствуйте, npe, Вы писали:

npe>Исходная ситуация: ...


Читая этот абзац, подумал: а не в одном ли мы проекте трудимся? Очень знакомая ситуация.

3 года уже работаю в таком проекте (самому проекту уже 10 лет; где-то 1.5млн строчек кода; разработка будет вестись пока у продукта есть пользователи; одно слово — БАНК).

Придя и увидев, что инфраструктура юнит тестов скорее мертва, чем жива (в автоматический процесс сборки процедура запуска тестов не входит, а сами разработчики трогают имеющиеся тесты, только если они перестают собираться), я погоревал чуток и стал как все (и без тестов хватало поводов задуматься: а туда ли я пришёл работать куда хотел?).

Не так давно моя позиция изменилась.

Изменилась под влиянием:
— нового члена в команде (который, вдохнув в меня веру, сам её потерял и перестал быть членом команды
— и двух книг (почему-то мною пропущенных ранее):
— "Working Effectively with Legacy Code.chm"
— "Meszaros G. — xUnit Test Patterns. Refactoring Test Code(2007)(883).pdf"

Новичку дали задачу связанную с компонентом, который я годом ранее написал. Он обратился ко мне с вопросами и, слово за слово, стали писать тесты на новую функциональность. Первые же тесты показали пару проблем в старом коде: пусть не фатальных, но пропущенных и QA и на code review. Тогда я стал заново изучать литературу.

Первая книга показала, что legacy code таки можно взять за жабры и загнать под тесты.
Вторая — как правильно эти и другие тесты писать и как затем поддерживать.

Дао, оказалось, заключено в том, что тесты — это не тесты.

Написание тестов позволяет сократить время уходящее на кодирование, при сохранении качества кода (количества багов).
Как? Да очень просто:
— тесты позволяют спрашивать систему как она себя ведёт (когда кода МНОГО, а документации МАЛО — это очень экономит время)
— тесты избавляют от рутинных действий, что позволяет не терять внимание и экономить массу времени (типичная ситуация — не нужно запускать приложение и делать 25 мышекликательных движений, чтобы увидеть результаты своих изменений)
— тесты могут документировать требования по которым писался/пишется код (и плевать, что они его не тестируют даже на 20%!)
— тесты могут документировать API (на уровне достаточном для того, чтобы начать задавать правильные вопросы коду или коллегам)
— тесты выявляют опечатки в коде существенно быстрее, чем мозг.

Хочу отметить, что всё это можно получить без необходимости ставить раком всю команду (читать: убедить, что тесты писать надо и научить как это делать правильно).

Ставить раком нужно только если стоит цель повысить-таки качество кода и есть необходимые ресурсы (время, знания).
Re[2]: Developer Testing
От: -VaS- Россия vaskir.blogspot.com
Дата: 09.08.10 18:00
Оценка:
А>Изменилась под влиянием:
А>- нового члена в команде (который, вдохнув в меня веру, сам её потерял и перестал быть членом команды
А>- и двух книг (почему-то мною пропущенных ранее):
А> — "Working Effectively with Legacy Code.chm"
А> — "Meszaros G. — xUnit Test Patterns. Refactoring Test Code(2007)(883).pdf"

Еще крайне рекомендую вот эту книгу
Re[3]: Developer Testing
От: Аноним  
Дата: 09.08.10 18:41
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>Еще крайне рекомендую вот эту книгу


Угу, она тоже попала в мой список книг к прочтению. Правда, только на третье место
Примусь за неё при первой возможности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.