Перенос приложения VB6 на VB.Net кто-нибудь может сказать, сколько это стоит усилий?

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

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

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

  • значительно меньше, чем усилия, которые вы использовали на оригинале?
  • несколько меньше, чем усилия, которые вы использовали на оригинале?
  • то же самое, что и усилия, которые вы использовали на оригинале?
  • больше?
  • много больше?

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

7 ответов


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

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

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

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

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

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

  4. но вам нужно решить, следует ли использовать какие-либо преимущества фреймворка, которые вы вручную закодировали в VB6. Например, цикл через строку для поиска определенного символ(ы) теперь так же прост, как The_String.IndexOf ("c") я обнаружил, что в моем случае я прошел через код несколько раз и все лучше и лучше использовал класс (т. е. объектную ориентацию), а также лакомства фреймворка, когда мне стало удобно... это увеличивает время разработки (см. мантру понимания клиента), но ваш код будет более эффективным, чем когда-либо в VB6. Вы мог бы просто порт для того чтобы получить ошибки вне и не принять никакое преимущество обязательно от рамки.

  5. Я не нашел никаких проблем с элементами управления 3rd party active-X. Вы можете добавить ссылку на база объектов, COM-объекты и т. д. Возможно даже, что поставщик элемента управления имеет версию .Net (управляемый код)... Или могут быть подходящие альтернативы, так как вы написали вещь в VB6. (См. мантру понимания клиента)

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

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

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


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

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

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

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


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

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

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


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

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

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


по-моему,

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

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

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

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

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

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

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

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

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

редактировать грамматических ошибок... =P


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

вы должны взглянуть на MS ' Free Book -обновление Microsoft Visual Basic 6.0 до Microsoft Visual Basic .NET.

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


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

но серьезно, это, вероятно, не далеко - или даже низко-потому что у клиента будет некоторое причина для необходимости порта сделано. Это будет не просто прямой порт - им понадобится какое-то" небольшое улучшение", которое взорвет весь проект.

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

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

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