Портирование приложения VB6 на VB.Net: кто-нибудь может оценить, сколько это усилий? - PullRequest
10 голосов
/ 12 марта 2010

В 2002 году я сделал довольно большое приложение для клиента на VB6. Он использовал множество пользовательских элементов управления и сторонних элементов управления меню (для размещения значков рядом с названиями меню). Он имел динамически «разделяемые» панели, TreeView с флажками с несколькими состояниями и т. Д. Очень богатый пользовательский интерфейс. Мое общее время работы над проектом составило около 500 часов, которые клиент любезно позволил мне распределить на целый месяц . (Да, это была такая такая работа.) Однако они были очень счастливы, и они оплатили счет вовремя без каких-либо аргументов.

Так что, не имея контактов с ними в течение многих лет, они внезапно звонят и задаются вопросом, могу ли я обновить приложение до .Net для них. Моя первоначальная реакция - просто отклониться, так как я не пользуюсь VB.Net. И прочитав кучу постов на SO о трудностях портирования и т. Д., И т. Д., Я даже больше склонен, так сказать, к снижению.

Тем не менее, прежде чем я скажу им "нет", я заинтересован в грубой оценке того, сколько усилий потребуется. Я хотел бы услышать от любого, кто сделал такого рода вещи и чувствовал, сколько это работы. Было ли это:

  • Значительно меньше усилий, которые вы приложили к оригиналу?
  • Несколько меньше усилий, которые вы приложили к оригиналу?
  • Так же, как усилие, которое вы использовали на оригинале?
  • Подробнее
  • намного больше?

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

Ответы [ 7 ]

9 голосов
/ 13 марта 2010

Я сделал то, о чем тебя просили. В моем случае это была (MGMT) система любительского турнира по боулингу: база данных участников MGMT (личная информация, информация о IRS / выигрышах, списки рассылки и т. Д. И т. Д.), MGMT турнира (назначения игроков, подсчет очков, генерация билетов на лэйн, проверка регистра на выигрыш и дополнительные игры, и т. д. и т. д.), а также генерация EDI IRS для всех победителей в данном году Плюс около миллиарда маленьких предметов, разбросанных по ~ 50 экранам / подэкранам.

Ключ - ПОНИМАНИЕ КЛИЕНТА - Вы должны четко понимать, что они понимают, что это не тривиально; это новое приключение для ОБА из вас (особенно если вы новичок в VB.Net). Если им понравилась ваша работа раньше, они вполне могут дать вам свободу действий в изучении VB.Net на своем никеле.

Чтение некоторых из предыдущих ответов позволяет мне высказать несколько предложений (основываясь на 30-летнем опыте разработчика программного обеспечения, последние 20 лет из которых в качестве консультанта ....)

  1. Берите свои деньги, если они предложат это. Вы должны принести свои навыки в 20-м веке; позвольте им заплатить за это (опять же, если они согласятся). Они могут быть Просмотр журнала и хотят "новейшие вещи" без всякой веской причины - но, возможно, они понимают, что они могут продлить жизнь (ваш ) приложение по этому порту. По сути, у них могут быть самые разные причудливые причины для этого ... если они НЕ нанимают вас, чтобы РЕШИТЬ, является ли этот порт хорошей идеей. Затем вы можете выразить любое беспокойство по поводу решения ПРОЦЕСС из-за хороших отношений с клиентами; НО, если они хотят сделать это, то это может быть и ваша работа.

  2. Возьми все это безумство: C # против VB.Net с крошкой соли. Я работал ИСКЛЮЧИТЕЛЬНО в VB.Net / ASPX.net (против C #) с момента его создания, и мне еще не приходилось сталкиваться с ЛЮБОЙ функциональностью, недоступной в VB.Net. Есть некоторые «пуристы», которые рассматривают VB.Net как игрушку. Ну, я пришел со времен написания на ассемблере, затем на C, затем на C ++ (и вы можете добавить Fortran, PL1 для хорошей меры), затем на VB5, затем на 6, затем на VB.Net ... и сейчас на JAVA для Android. Это все хорошее удовольствие ... и у каждого есть свои достоинства и недостатки. Помните, что C # и VB.Net по сути являются всего лишь графическим интерфейсом для достижения промежуточного уровня метаязыка. Вы можете написать УЖАСНУЮ (измеряемую эффективностью, использованием памяти или любым другим выбранным вами метрикой!) Программу на C # и отличную в VB.Net (и наоборот). НЕ УРАВНЯЙТЕ ХОРОШЕЕ ПРОГРАММИРОВАНИЕ С СИНТАКСОМ ЯЗЫКА. (... C # является "превосходным" ???? Дай мне перерыв.)

  3. Я решил позволить Visual Studio выполнить большую часть тяжелой работы за первый проход. Затем вы проходите через ошибки gazzillion и очищаете их. Идет довольно быстро.

  4. НО вам нужно решить, использовать ли какие-либо преимущества системы, которые вы кодировали вручную в VB6. НАПРИМЕР. цикл по строке для поиска конкретного символа (символов) теперь так же прост, как и The_String.IndexOf ("c"). Я обнаружил, что в моем случае я несколько раз просматривал код и все лучше и лучше использовал класс (т.е. объект ориентация), а также полезные свойства фреймворка, как мне стало удобно ... это увеличивает ваше время разработки (см. ПОНИМАНИЕ КЛИЕНТА), НО ваш код БУДЕТ БОЛЕЕ Эффективнее, чем когда-либо в VB6. Вы могли бы просто портировать, чтобы получить ошибки и не использовать ЛЮБОЕ преимущество обязательно из фреймворка.

  5. Я не обнаружил никаких проблем со сторонними элементами управления active-x. Вы можете добавить ссылку на объекты FRAMEWORK, COM-объекты и т. Д. Может даже оказаться, что у поставщика элементов управления есть версия .Net (управляемого кода) ... ИЛИ могут быть подходящие альтернативы, поскольку вы написали эту вещь в VB6. (См. ПОНИМАНИЕ КЛИЕНТА мантру)

Так что если ваше все еще читает, то теперь я наконец скажу вам, что вторая попытка моего приложения в VB.Net CONVERTED / PORTED из VB6 была ~ 1/3 от первоначального времени, чтобы добраться до рабочая модель ... и я также изучал структуру. (Если вы уверены в своих навыках, выучили несколько языков за эти годы, вы быстро получите суть VB.Net - это СУБТЕТРИИ, которые требуют времени.)

Я должен предупредить вас, что вещь, которая может ДЕЙСТВИТЕЛЬНО убить вас, если вы не будете достаточно хорошо проповедовать КЛИЕНТА, заключается в том, что они хотят вносить изменения, пока вы переносите (и это ОЧЕНЬ ПОДОБНО, так как они его используют какое-то время ... я был очень верен и в моем случае.

Здесь нет жесткого и быстрого правила. Может случиться так, что изменения на самом деле помогут вам быстрее понять структуру, ИЛИ изменения могут быть настоящей болью. Только вы можете определить, каким вкусом они могут быть. И если они выглядят как тип PAINFUL - вы можете сначала попросить выполнить преобразование, чтобы надежно воспроизвести функциональность, - ТОГДА вернитесь назад и просмотрите код, чтобы внести изменения и воспользоваться преимуществами инфраструктуры по мере необходимости. Но, как я уже сказал, здесь нет НИКАКИХ жестких и быстрых правил - и не позволяйте пуристам говорить вам по-другому - помните, что они, вероятно, те же самые парни, которые говорили, что PASCAL собирается захватить мир!

4 голосов
/ 12 марта 2010

Так что, не имея контактов с ними в течение многих лет, они неожиданно звонят и задаются вопросом, могу ли я обновить приложение до .Net для них.

Вы должны спросить , почему они хотят, чтобы это было сделано.

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

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

3 голосов
/ 30 августа 2010

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

Я сделал ТОЧНО то, о чем вы спрашиваете о коммерческом программном продукте, который состоял примерно из 500 клоков. Мы уравновесили желание рефакторинга с желанием заставить что-то работать и выпустить как можно быстрее.

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

2 голосов
/ 12 марта 2010

На мой взгляд,

Visual Basic 6 и Visual Basic .NET настолько различны, что вы должны забыть об их совпадении в названии и рассматривать это как переход на .NET = P

Я думаю, что у вас есть одно большое преимущество и один недостаток:

  • Преимущество: Вы уже знаете, что должно делать приложение. Возможно, у вас будет несколько встреч с вашими клиентами, чтобы добавить некоторые модификации или новые функции, но у вас есть основная часть требований, которые очень ясны. У вас даже будет старое рабочее приложение, которое вы сможете увидеть, пока вы или ваша команда кодируете.

  • Недостаток : вам придется выучить новый язык. Сказать, сколько времени уйдет, очень субъективно. Я всегда думал, что изучение нового языка не проблема, большая проблема будет, если вам придется учиться программировать! Но вы знаете, чтобы программировать. Вы будете знать, что хотите сделать, и вам останется только поискать, как это сделать в новом языке.

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

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

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

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

Извините, мой английский не очень хорош, и, вероятно, я допустил много грамматических ошибок.

РЕДАКТИРОВАТЬ грамматические ошибки ... = P

2 голосов
/ 12 марта 2010

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

Единственное хорошее предложение, которое у меня есть, - использовать Visual Studio 2008 для преобразования (не VS 2005). При использовании встроенного преобразователя в VS 2008 было гораздо меньше проблем, чем в VS 2005. Не уверен, почему, просто так было.

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

1 голос
/ 12 марта 2010

Это огромная тема.

Вам стоит взглянуть на бесплатную книгу MS - Обновление Microsoft Visual Basic 6.0 до Microsoft Visual Basic .NET .

Если бы вы переписали с нуля, а не просто попытались перенести предыдущее приложение, это не должно занять слишком много времени. VB.Net имеет некоторые функции, которые сделают сборку нового приложения короче. Поскольку кажется, что вы еще не знаете VB.Net, вам потребуется больше всего времени, чтобы научиться делать вещи по-новому (тм) .

1 голос
/ 12 марта 2010

Я бы пошел на два месяца в этот раз.

А если серьезно, это, вероятно, не за горами & mdash; или даже низкий & mdash; потому что у клиента будет некоторая причина для необходимости сделать порт готовым. Это будет не просто прямой порт - им понадобится небольшое «маленькое улучшение», которое взорвет весь проект.

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

Я также обеспокоен тем, что вы не используете vb.net. Если вы являетесь пользователем C # и хотели бы реализовать его таким образом, у вас все будет хорошо, но в противном случае это не стартер. VB.Net достаточно отличается от vb6, чтобы вы могли попасть в неприятности.

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

...