Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Делать ли рефакторинг в такой ситуации?

1259  1 2 3 все
Simple Nothing is f*cked13.01.09 13:44
Simple
13.01.09 13:44 
1. Практически невозможно написать тест.
2. Времени в обрез.
3. Код - жуткая помойка.
4. Изменение вроде бы небольшое, но в будущем возможны и другие.
Пп. 1, 2 и 4 вроде бы голосуют против, но п. 3 орет очень громко за. Поделитесь опытом :)
#1 
megabyte завсегдатай13.01.09 15:25
megabyte
NEW 13.01.09 15:25 
в ответ Simple 13.01.09 13:44
IMHO. Не писать из-за пп 1 и 2. Когда появится время, то внести в план написание юнит-тестов, рефакторинг и вперед.
Как вариант, написать тесты только для требуемого изменения, позже писать тесты для новых изменений, а там глядишь, руки и до глобального рефкоринга дойдут.
#2 
Simple Nothing is f*cked13.01.09 15:32
Simple
NEW 13.01.09 15:32 
в ответ megabyte 13.01.09 15:25
Да, я тоже в итоге склоняюсь к такому решению. Проблема в том, что настоящий тест сделать ваще нельзя: код можно выполнить только у клиента.
Писать юнит-тесты можно до усрачки: очень много данных. Пока охватишь все, поседеешь :( А переделывать 700-строчный спагетти без полных тестов скорее всего выйдет боком.
#3 
megabyte завсегдатай13.01.09 15:50
megabyte
NEW 13.01.09 15:50 
в ответ Simple 13.01.09 15:32
Можно только посочувствовать. 700 строчек одним методом/ф-цией чтоль? :-)
#4 
  scorpi_ посетитель13.01.09 16:16
NEW 13.01.09 16:16 
в ответ Simple 13.01.09 13:44
По-моему 1 и 4 - тоже за. По поводу 2 - надо убеждать менеджмент, что так работать нельзя. По поводу 4 - если изменение локальное, то нельзя вычленить этот кусочек в отдельную функцию/класс, и написать к нему тесты?
#5 
  scorpi_ посетитель13.01.09 16:18
NEW 13.01.09 16:18 
в ответ Simple 13.01.09 15:32
В ответ на:
Проблема в том, что настоящий тест сделать ваще нельзя: код можно выполнить только у клиента.

Даже с моками нельзя оттестировать?
#6 
AlexOtt постоялец13.01.09 16:52
AlexOtt
NEW 13.01.09 16:52 
в ответ megabyte 13.01.09 15:50
у нас есть в проекте функция почти на 2000 строк - когда я в нее смотрю, обычно требуется пакетик, как в самолете выдают :-)
#7 
megabyte завсегдатай13.01.09 17:41
megabyte
NEW 13.01.09 17:41 
в ответ AlexOtt 13.01.09 16:52
А что послужило причиной для такой длинной ф-ции? Нерадивый студент? :-)
#8 
Simple Nothing is f*cked13.01.09 18:56
Simple
NEW 13.01.09 18:56 
в ответ megabyte 13.01.09 15:50
И это еще не предел :)
#9 
Simple Nothing is f*cked13.01.09 18:58
Simple
NEW 13.01.09 18:58 
в ответ scorpi_ 13.01.09 16:16
Я уже начал. Кроме того, агитирую перейти на svn и написать build script.
Кстати, не знаешь, есnm такой тул dsp -> jam?
#10 
Simple Nothing is f*cked13.01.09 19:01
Simple
NEW 13.01.09 19:01 
в ответ scorpi_ 13.01.09 16:18
Кажется, я опять что-то новое щас узнаю :-D Пошел в гугл.
#11 
Simple Nothing is f*cked13.01.09 19:02
Simple
NEW 13.01.09 19:02 
в ответ megabyte 13.01.09 17:41
Причина обычно одна и та же: некогда сделать как положено.
#12 
Simple Nothing is f*cked13.01.09 19:48
Simple
NEW 13.01.09 19:48 
в ответ AlexOtt 13.01.09 16:52
нп
Какой тест-фреймворк посоветуете взять?
#13 
AlexOtt постоялец13.01.09 20:09
AlexOtt
NEW 13.01.09 20:09 
в ответ Simple 13.01.09 19:48
какой язык-то? :-) для С++ я пользуюсь boost::test, для эрланга - eunit, haskell - quickcheck, common lisp - xlunit
#14 
AlexOtt постоялец13.01.09 20:10
AlexOtt
NEW 13.01.09 20:10 
в ответ megabyte 13.01.09 17:41
желание делать только быстрые исправления ошибок, а не пытаться перерабатывать архитектуру/переписывать функционал
#15 
AlexOtt постоялец13.01.09 20:11
AlexOtt
NEW 13.01.09 20:11 
в ответ Simple 13.01.09 18:58
мы пользуемся сmake в качестве кросс-платформенной системы сборки. ну и интеграция с ctest + прокидка данных в dashboard тоже имеют свои плюсы
#16 
  scorpi_ посетитель13.01.09 20:31
NEW 13.01.09 20:31 
в ответ Simple 13.01.09 18:58
Господи, у вас шестёрка что ли?
По инструментам - я голосую за выбор Алекса: Boost.Test и CMake.
Что касается mock-объектов, С++-frameworks меня не вполне удовлетворяют, смотри сам что тебе подойдёт: http://stackoverflow.com/questions/38493/are-there-any-good-c-mock-object-framew...
#17 
Simple Nothing is f*cked13.01.09 21:28
Simple
NEW 13.01.09 21:28 
в ответ AlexOtt 13.01.09 20:09
Я узкий специалист :) С++. boost::test не подходит из-за компилятора.
#18 
Simple Nothing is f*cked13.01.09 21:29
Simple
NEW 13.01.09 21:29 
в ответ scorpi_ 13.01.09 20:31
Угу. Только в старой конторе перешли на 9-ку, как мне вздумалось уйти :-D
Спасибо, посмотрю.
#19 
megabyte завсегдатай13.01.09 21:54
megabyte
NEW 13.01.09 21:54 
в ответ Simple 13.01.09 19:48
Использую CppUnit.
#20 
  scorpi_ посетитель13.01.09 22:28
NEW 13.01.09 22:28 
в ответ Simple 13.01.09 21:28
Я узкий специалист
Похудел что ли?
В ответ на:
boost::test не подходит из-за компилятора

Можно взять старую версию буста. В 1.28 Boost.Test ещё работал с VC++ 6.0 SP5: http://svn.boost.org/svn/boost/tags/release/Boost_1_28_0/boost/status/cs-win32.h...
А вообще, я удивляюсь, как ты 8 насчитал. Use best tools, уже всяко не проходит.
#21 
  scorpi_ посетитель13.01.09 23:01
NEW 13.01.09 23:01 
в ответ megabyte 13.01.09 21:54
В ответ на:
Использую CppUnit.

Калька с Явы ещё никогда не была хорошим С++ решением.
#22 
Simple Nothing is f*cked14.01.09 06:28
Simple
NEW 14.01.09 06:28 
в ответ scorpi_ 13.01.09 22:28
В ответ на:
Похудел что ли?

Некогда :)
В ответ на:
Можно взять старую версию буста. В 1.28 Boost.Test ещё работал с VC++ 6.0 SP5:...

А стоит ли? Впрочем, почти все тулы, которые я посмотрел, требуют компилятор поновее.
В ответ на:
А вообще, я удивляюсь, как ты 8 насчитал. Use best tools, уже всяко не проходит.

Там контекст другой: "... for the money". А тут код просто не пройдет через новый компилятор.
#23 
megabyte завсегдатай14.01.09 10:37
megabyte
NEW 14.01.09 10:37 
в ответ scorpi_ 13.01.09 23:01
Мeня устраивает. К тому же есть поддержка VC++ 6.
#24 
Simple Nothing is f*cked14.01.09 10:56
Simple
NEW 14.01.09 10:56 
в ответ megabyte 14.01.09 10:37
Я скачал UnitTest++. С небольшим ковырянием пошло и на VC6 :) Выглядит неплохо, посмотрим.
#25 
  scorpi_ посетитель14.01.09 16:01
NEW 14.01.09 16:01 
в ответ Simple 14.01.09 06:28
А стоит ли? Впрочем, почти все тулы, которые я посмотрел, требуют компилятор поновее.
Стоит. Он намного удобнее, я пробовал несколько самых ходовых. А когда уломаешь своих перейти на девятку, то можно будет легко мигрировать на последную версия буста и юзать другие приятные вещи.
Там контекст другой: "... for the money". А тут код просто не пройдет через новый компилятор.
Нифига. Шестёрка - это издевательство над программистом, а не бест тул. Причины-то они какие называют?
#26 
  scorpi_ посетитель14.01.09 16:03
NEW 14.01.09 16:03 
в ответ Simple 14.01.09 10:56, Последний раз изменено 14.01.09 16:14 (scorpi_)
Я скачал UnitTest++. С небольшим ковырянием пошло и на VC6 :) Выглядит неплохо, посмотрим
Попробуй ещё другие. Здесь http://gamesfromwithin.com/?p=29 есть небольшое сравнение, правда я сейчас читаю на StackOverflow, что UnitTest++ написал автор этого сравнения после того ознакомился с другими. Зато Boost.Test во-первых more mature, во-вторых peer reviewed.
#27 
  scorpi_ посетитель14.01.09 16:06
NEW 14.01.09 16:06 
в ответ Simple 13.01.09 18:58
Кстати, не знаешь, есnm такой тул dsp -> jam?
Это ты агитируешь за jam, или вы уже на джеме? Если нет, то я видел в сети руби-скрипт для конвертации dsw => CMake.
#28 
Simple Nothing is f*cked14.01.09 16:23
Simple
NEW 14.01.09 16:23 
в ответ scorpi_ 14.01.09 16:01
В ответ на:
Стоит. Он намного удобнее, я пробовал несколько самых ходовых. А когда уломаешь своих перейти на девятку, то можно будет легко мигрировать на последную версия буста и юзать другие приятные вещи.

Ок, гляну.
В ответ на:
Нифига. Шестёрка - это издевательство над программистом, а не бест тул. Причины-то они какие называют?

Да ладно тебе :) Если немного настроить, добавить пару аддинов и макросов, вполне можно работать.
Причина та, которую я уже упомянул. Якобы. Я пока не пробовал, не до того.
#29 
Simple Nothing is f*cked14.01.09 16:26
Simple
NEW 14.01.09 16:26 
в ответ scorpi_ 14.01.09 16:06
Мы ваще пока ни на чем :) Даже батника с вызовом msdev project /make нет.
Посмотрел Boost.Build V2, но есть некоторые вопросы - дока скудновата. Или cmake по-твоему удобнее?
#30 
  scorpi_ посетитель14.01.09 16:41
NEW 14.01.09 16:41 
в ответ Simple 14.01.09 16:23
Ок, гляну.
UnitTest++ на самом деле появился после того, как я последний раз обзор делал, так что я его не пробовал. Сейчас глянул доку - делался он явно под впечатлением от буст.тест.
Причина та, которую я уже упомянул. Якобы.
Я упустил её видимо. Напомни плиз.
#31 
Simple Nothing is f*cked14.01.09 16:53
Simple
NEW 14.01.09 16:53 
в ответ scorpi_ 14.01.09 16:41
Ну что код не пройдет через новый компилятор.
#32 
  scorpi_ посетитель14.01.09 17:01
NEW 14.01.09 17:01 
в ответ Simple 14.01.09 16:26, Последний раз изменено 14.01.09 17:09 (scorpi_)
Мы ваще пока ни на чем :) Даже батника с вызовом msdev project /make нет.
Ну ты попал :)) Ну ничего, прослывёшь щас там гуру со своими нововведениями, заделаешься тим-лидом :)
Посмотрел Boost.Build V2, но есть некоторые вопросы - дока скудновата. Или cmake по-твоему удобнее?
Будущее Boost.Build вообще мне кажется неизвестно. Бустовцы ещё раньше обсуждали возможность перехода на Scons, сейчас вроде как cmake занялись. У CMake есть один плюс - он генерирует обычные проект-файлы, так что может проще будет уломать коллег. Единственное что для них изменится: новые файлы надо будет добавлять не в студии, а в cmake.
#33 
Simple Nothing is f*cked14.01.09 17:08
Simple
NEW 14.01.09 17:08 
в ответ scorpi_ 14.01.09 17:01
В ответ на:
Ну ты попал :)) Ну ничего, прослывёшь щас там гуру со своими нововведениями, заделаешься тим-лидом :)

Это единственное, что удерживает меня от того, чтобы выброситься из окна :-D Не знаю, насколько ценится опыт вытаскивания проекта из полной жопы, но хочется попробовать.
В ответ на:
Будущее Boost.Build вообще мне кажется неизвестно. Бустовцы ещё раньше обсуждали возможность перехода на Scons, сейчас вроде как cmake занялись. У CMake есть один плюс - он генерирует обычные проект-файлы, так что может проще будет уломать коллег. Единственное что для них измениться: новые файлы надо будет добавлять не в студии, а в cmake.

Обязательно гляну на досуге.
Спасибо еще раз за все советы :)
#34 
  scorpi_ посетитель14.01.09 17:08
NEW 14.01.09 17:08 
в ответ Simple 14.01.09 16:53
Долго что ли попробовать? Лично у меня ещё ни при одном апгрейде проблем не было.
#35 
AlexOtt постоялец14.01.09 18:45
AlexOtt
NEW 14.01.09 18:45 
в ответ Simple 14.01.09 17:08
в репозитории буста переход на cmake уже практически завершен, и может быть официально войдет в 1.38. интеграция с ctest была одним из аргументов за переход.
#36 
Simple Nothing is f*cked14.01.09 21:35
Simple
NEW 14.01.09 21:35 
в ответ scorpi_ 14.01.09 17:08
Я бы тебе показал кусок кода, да боюсь за твое здоровье :-D
#37 
  scorpi_ посетитель14.01.09 21:42
NEW 14.01.09 21:42 
в ответ Simple 14.01.09 21:35
У меня крепкое здоровье. Покажи, если NDA не мешает.
#38 
Simple Nothing is f*cked14.01.09 21:50
Simple
NEW 14.01.09 21:50 
в ответ scorpi_ 14.01.09 21:42
Завтра кину в личку.
#39 
Simple Nothing is f*cked14.01.09 21:58
Simple
NEW 14.01.09 21:58 
в ответ AlexOtt 14.01.09 18:45
На первый взгляд, cmake генерит dsp/vproj. Какой мне от этого толк?
#40 
  scorpi_ посетитель15.01.09 00:20
NEW 15.01.09 00:20 
в ответ Simple 14.01.09 21:58
CMake даёт platform- и compiler-independence. Кроме того CTest, CPack, CDash предоставляют функциональность для continuous integration.
#41 
Simple Nothing is f*cked15.01.09 12:08
Simple
NEW 15.01.09 12:08 
в ответ scorpi_ 15.01.09 00:20
Это ясно. Но мне нужен билд одним куском, все остальное пока подождет :) Можно как-то сделать это?
#42 
AlexOtt постоялец15.01.09 13:12
AlexOtt
NEW 15.01.09 13:12 
в ответ Simple 14.01.09 21:58
если пользуетесь только под виндой и одной версией компилятора, то особого толку нет. но если пользуетесь хотя бы разными версиями визуал студии, то толк уже есть, поскольку он генерит соответствующий проект. Ну и управление всяческими настройками и т.п. - тоже может быть удобным
#43 
Simple Nothing is f*cked17.01.09 15:16
Simple
NEW 17.01.09 15:16 
в ответ Simple 13.01.09 13:44
Я, кажется, нашел книгу, точно соответствующую ситуации: "Working Effectively with Legacy Code". Если кого-то интересует, могу выложить куда-нить.
#44 
  scorpi_ посетитель02.02.09 16:10
NEW 02.02.09 16:10 
в ответ Simple 17.01.09 15:16
На РСДН'e рекомендовали книгу C++ Cookbook, в ней половина первой главы посвящена Boost.Build
#45 
Simple Nothing is f*cked02.02.09 22:09
Simple
NEW 02.02.09 22:09 
в ответ scorpi_ 02.02.09 16:10
Уже качаю :)
Кстати, хотел тебя спросить: ты где-то писал, что пользуешься вижуал ассистом. Хорошая вещь?
#46 
  scorpi_ посетитель02.02.09 22:19
NEW 02.02.09 22:19 
в ответ Simple 02.02.09 22:09, Последний раз изменено 02.02.09 22:20 (scorpi_)
Да, просто супер! Если меня теперь на чистый VC++ посадить, то ломка будет неслабая. Там рефакторинг, гораздо более мощное автодополнение чем родное, автоформат, must have короче. Я правда его купил по дешёвке, как студент, но он и так недорогой. Недоработки конечно есть, но всё же гораздо лучше чем ничего.
#47 
Simple Nothing is f*cked02.02.09 22:24
Simple
NEW 02.02.09 22:24 
в ответ scorpi_ 02.02.09 22:19
А рефакторинг у него надежный? Ну, в смысле, если я делаю extract method, он пытается определить возможные косяки?
#48 
  scorpi_ посетитель02.02.09 22:43
NEW 02.02.09 22:43 
в ответ Simple 02.02.09 22:24
Он иной раз лезет в лишние файлы, но вообще его можно делать с предпросмотром и убирать ненужное. Но вообще особо явно вроде не лажал.
#49 
Simple Nothing is f*cked02.02.09 22:44
Simple
NEW 02.02.09 22:44 
в ответ scorpi_ 02.02.09 22:43
Завтра скачаю трайал и попробую. Он вроде бы даже для 6-й студии есть :-D
#50 
Simple Nothing is f*cked04.02.09 09:22
Simple
NEW 04.02.09 09:22 
в ответ scorpi_ 02.02.09 22:43
Поставил пробник. Впечатления - во! Буду уламывать шефа купить, если откажет - куплю себе персонал эдишн :)
#51 
  scorpi_ посетитель04.02.09 14:27
NEW 04.02.09 14:27 
в ответ Simple 04.02.09 09:22

#52 
Simple Nothing is f*cked12.02.09 23:14
Simple
NEW 12.02.09 23:14 
в ответ AlexOtt 15.01.09 13:12
Я таки решил его освоить. Первые несколько проектов уже подключил. Есть некоторые заморочки, но, думаю, найду решение.
#53 
1 2 3 все