Поможет ли "эффективная работа с устаревшим кодом" кому-то, кто работает с приложением, портированным с VB6 на VB.NET?

Я хотел бы рефакторинг большой устаревших приложений, изначально написанных в Visual Basic 6.0 и впоследствии портирован .Сеть. Чтобы сделать это с уверенностью, я хочу иметь модульные тесты вокруг существующего кода, чтобы я мог сравнить до и после. Каков самый простой и эффективный способ сделать это?

есть книга под названием "эффективная работа с устаревшим кодом

7 ответов


Он не просто имеет дело с объектно-ориентированное (OO) языки. Большие разделы о том, как работать с устаревшим кодом в C.

Так что да, покупайте его!


есть целая глава (Глава 19) называется:

мой проект не является объектно-ориентированным. Как сделать безопасные изменения?

есть vbUnit, an xUnit реализация, которая может помочь вам использовать TDD С Visual Basic 6.0.

на самом деле, я неправильно понял вопрос и подумал, что вы идет в порт, не то, что вы уже перенесли. В этом случае у вас есть тонна "наследия"VB.NET код, что это полностью книга для вас. Вы можете воспользоваться VB.NET ' S OO возможности и использовать остальную часть книги.

Я действительно не могу рекомендовать эту книгу больше.


да; концепции книги велики и могущественны и простираются за пределы ООП. И VB6 может быть объектно-ориентированный, хотя это не так тщательно, как объектно-ориентированный язык, как некоторые.

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


вы можете сделать вопросы более конкретными.

хотя VB6 не является чистым языком OO как таковым, есть достаточно элементов OO, которые должны быть знакомы; кроме того, существует ряд модулей модульного тестирования для VB6 IDE.

но давайте рассмотрим некоторые из компонентов высокого уровня VB6:

  • формы являются объектами (вы можете создавать новые экземпляры).
  • модули ведут себя как классы только со статическими методами.
  • классы & UserControls максимально близки к объектам, которые вы получите. Отсутствие конструктора делает вещи грубыми, но, надеюсь, оригинальный разработчик остался с Initialize или написал последовательный init sub.
  • события в VB странные; это также то, что, вероятно, споткнется вас больше всего. Скрытый, статусный код, который зависит от конкретного порядка событий, без сомнения, разбросан повсюду.
  • страницы свойств. Что ж, так оно и есть.

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


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

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

после прочтения руководства по передовой практике (etc.) по Microsoft и другие, чтобы помочь вам подготовиться к миграции .NET, вы в основном настроены на маленькие кусочки ада, которые вам придется перекодировать/рефакторинг: раздражения, такие как обработка ошибок, порядок событий, поздние связанные объекты / варианты, коллекции и т. д.

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

после очистки кода Вы также можете рассмотреть возможность рефакторинга кода Visual Basic в разумные абстракции(например, один класс адаптера данных и соединение и т. д.), но вы будете лучшим судьей в этом.

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


У меня есть копия, которую я купил, чтобы попытаться сделать наш проект C/C++ под контроля. Как я пропустил функциональность C#/ .NET должен предложить.

книги очень C / C++ ish, но, как говорит Джон, есть глава о работе без объектов.

но, если, как вы говорите, ваш код портирован на .NET, это больше не код Visual Basic 6.0. .NET имеет множество способов Visual Basic / C#, позволяющих вам подключиться к вашему коду и тесту. Но, тем не менее, книга даст вам хорошее обзор различных способов подключения к приложению и стратегий управления большим старым проектом.


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

возможно, вы ищете что-то вроде профессиональный рефакторинг в Visual Basic. Я не читал его, но, похоже, оно применимо.


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

метод Sprout и класс Sprout важны при добавлении нового кода.