Я знаю, что уже есть вопросы о миграции VB6, но база кода моего проекта содержит здесь несколько новых вопросов.
Я должен сказать, что качество, структура и архитектура кода - это просто кошмар. Есть 2 больших проекта: Nr.1 с 40 формами, 40 модулями и несколькими файлами классов, этот EXE является своего рода "базовой системой". Nr.2 с 80 формами, 20 модулями и несколькими файлами класса, эта функция EXE вызывает "базовую систему". Тогда есть ~ 10 других проектов с графическим интерфейсом (1-3 формы) и еще 90 проектов без GUI, большинство из которых - EXE файлы, некоторые DLL файлы. DLL записываются на C, С++ и VB6.
Кодекс развивается эволюционно с 10 лет и написан в основном одним (плохим) разработчиком за раз.
- Функции с 500 строк (и более) очень распространены.
- 90% компонентов GUI называются text1, command2 (1),...
- копировать и вставлять повсюду e. г. проект EXE (без GUI) с 5000 строками кода был скопирован, и единственное изменение в копии заключалось в том, чтобы отправлять файлы в Mail вместо FTP (есть еще 2 копии того же проекта).
- У меня когда-то была небольшая форма (15 полей), где я должен был решить небольшую проблему (обычно не более получаса), каждый раз, когда я что-то менял, это либо не работало, либо создавало новые ошибки в форма. Через 2 дня я решил полностью переписать форму и из ~ 20 SQL-заявлений в старой форме, только 2 остались в новой.
- даже не спрашивайте о комментариях в коде...
Я взял на себя проект несколько месяцев назад, и я единственный сопровождающий. Существует постоянный (но низкий) поток запросов на изменение и ошибок, и мы получаем бюджет обслуживания от наших клиентов, чтобы поддерживать программное обеспечение и "обновляться" с точки зрения требований законодательства.
Мои параметры
1) Перепишите с нуля. В этом случае я мог бы написать его на Java для переносимости. Проблема здесь в том, что помимо некоторой (старой) помощи пользователю нет документации, поэтому уродливый код - это "документация". Существует один Человек, который знает на высоком уровне, как это должно делать программное обеспечение. Также трудно убедить руководство в том, что он это сделает, даже если в долгосрочной перспективе будет огромная экономия средств, есть политические проблемы. Я также не могу сделать этот проект (vb) за раз, потому что структура базы данных не лучше, чем код, который тоже должен выполняться с нуля. Поэтому я могу сразу изменить все программное обеспечение.
2) Перенесите код в VB.NET/С# Перенос основных проектов во-первых, я протестировал это уже и получил ~ 2000 обновлений комментариев от Project Nr.1, большинство из них, такие как Screen.MousePointer, изменено, функции с вариантами возвращаемых значений и т.д. Моя идея здесь после преобразования, создания классов для абстракции БД, изменения кода для использования этих классов и рефакторинга, переноса и изменения других проектов, а также, когда весь код использует классы БД, измените структуру БД.
3) Реорганизуйте код в VB6 всякий раз, когда мне что-то нужно что-то менять (я уже делаю это частично), а в какой-то момент рефакторинг тоже остальное. Таким образом, легче видеть оригинальную функциональность, потому что это оригинальный код и когда есть ошибки, очевидно, что они не могут быть результатами миграции. Когда код реорганизуется (я предполагаю, что он будет на 50-75% меньше, а затем), проще переносить его на .NET. Затем измените структуру БД (а затем выполните еще один раунд рефакторинга...).
В будущем есть некоторые большие изменения (совместим с Win7 и еще один большой CR, который затрагивает большие части кода), поэтому была бы хорошая возможность сделать эти изменения, так как я буду иметь чтобы пройти через много кода.
Мой вопрос: у кого есть опыт/подсказки для переноса плохого, уродливого кода? Какие варианты вы бы предложили?