SCRUM. У кого на работе считают, что используют?
Если я тестирую например функцию y=f(a,b,c) - это будет юнит тест или нет?
Может будет, а может и нет. Зависит от того, что именно происходит в этой функции.
Пусть a - канал связи (не важно, Ethernet или COM), b - массив данных, с - количество данных, которые надо передать, y - результат передачи.
Так вот, если ты для a передашь реальные канал связи, то это уже совершенно точно никакой не юнит-тест.
А если функция вычисляется от нескольких секунд до нескольких минут это быстро или нет.
Я таких функций еще ни разу не встречал. Я правда никогда не занимался сложными расчетами, но, я уверен, даже сложные расчеты можно поделить на части и протестировать отдельные элементы. Несколько секунд для одного юнит-теста - это очень много.
Опять же, я знаю парня, который занимается тестированием софта для самолетов, у них там миллионы тестов, которые исполняются долго (просто потому что их очень много), но там и требования совершенно другие, да и контора та занимается только тестированием. Так что специфика может проявиться, то в целом, все имеющиеся юнит-тесты должны исполняться не больше 1 минуты.
А если каждый параметр вариируется с шагом 0.5 или с шагом 0.01 будет разница или нет?
Не понял, какое влияние на функцию оказывают изменяющиеся параметры? Что именно ты хочешь тестировать?
Может тогда определимся с понятием "выпустил интерфейс"?
Выпустил интерфейс - это значит, что библиотека/сборка, в которой находится интерфейс получила свою версию и была прошла через release процесс (процесс этот на всех фирмах
разный).
и тогда все будет шоколадно?
Как минимум решит большую часть проблем.
Проект "А" был оттестирован 3 года назад, теперь мне его надо просто компильнуть по новому, заказчик имя фирмы поменял.
Ну и в чем проблема, если известна версия библиотеки Х, с которой был релиз 3 года назад, то компилишь с библиотекой 3-х летней давности и никаких проблем.
Git подойдет?
Подойдет конечно. Надо только придумать, как там отслеживать "релизнутые" версии, например ставить тэги.
Либа Х лежит в репо1, проект С в репо2 нужна одна новая ветка, так как менятся будет и то и другое
Ты про разделение ответственности что-нибудь слышал? Либа Х, очевидно, является компонентой для проекта С. Значит работа должна выстраиваться так:
1) проект
С создает требования для либы Х
2) либа Х реализует эти требования, производит тестирование по требованиям и выпускает (делает release) версия X.Y.1
3) проект С берет выпущенную версию либы Х и делает свои изменения.
В принципе, можно подойти к этому процессу не так строго и разрабатывать параллельно, т.е. проект С может базироваться на nightly build'е либы Х... но разработка либы Х все равно остается независимым от проекта С процессом. В то время как разработка проекта С зависит от либы Х. Короче говоря, либа Х как была в своем репо1, так и остается, также как и проект С и нет ни одной причины сливать их в одну ветку.
А если нужно тогда как? делать новые интерфейс IAbc2?
Например так.
В шарпе можно добавлять новые функции без изменения имени интерфейса.
заказчику объяснить сможете отчего его хотелку нельзя сделать?
Я не понимаю проблемы. Если между А и Б нет никакой связи, то, соответственно, нет и информации. Т.е. либо делается связь, либо объясняешь почему эту связь нельзя сделать. В чем тут проблема?
примерчик мона? Простейший пример, есть прога, нужно ввести число А и Б, по нажатию кнопы получить сумму. Все должно происходить "на экране" - "визуально"
Примерчик чего? Примерчик тестирования функции, которая считает сумму?
Я бы сделал такое приложение на WPF. Соотвественно мне нужно было бы 1) ModelView (которое не надо было бы тестировать в виду отсутствия логики) 2) односторонний конвертер string to int (2 теста) и 3) модель с 1 функцией (для суммы одного теста будет достаточно). Для того, чтобы проветить, что все работает можно было бы сделать системный тест, который бы запускался ночью и кликал бы в нужные места.
И что все удается держать синхронно?
Нет конечно! В этом и прелесть тестов, что при изменении логики ты вынужден синхронизировать тесты.