Поможет ли «Эффективная работа с устаревшим кодом» кому-то, работающему с приложением, портированным с VB6 на VB.NET? - PullRequest
6 голосов
/ 23 июня 2009

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

Есть книга под названием " Эффективная работа с устаревшим кодом ", которая, похоже, может мне помочь. Однако, похоже, что он имеет дело только с объектно-ориентированными языками, а Visual Basic 6.0 не обязательно является ОО. Может ли эта книга все еще помочь мне? Я надеюсь, что кто-то, кто прочитал это, может поручиться за это.

В частности, это приложение не использует никаких классов, кроме самих форм. Он обращается к базе данных напрямую из форм, а не последовательно. Над этим проектом работало несколько человек, и все они использовали свои собственные стили без каких-либо стандартов.

Как я уже сказал, этот проект был портирован на VB.NET. Однако он портирован только в том смысле, что компилируется в Visual Studio 2008. Все концепции кодирования - это Visual Basic 6.0.

Ответы [ 7 ]

7 голосов
/ 23 июня 2009

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

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


Существует целая глава (глава 19), которая называется:

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

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

На самом деле, я неправильно прочитал вопрос и подумал, что вы собираетесь портировать, а не то, что вы уже перенесли.В этом случае у вас есть тонна «устаревшего» * ​​1026 * VB.NET кода, который вам подойдет.Вы можете воспользоваться преимуществами OO-возможностей VB.NET и использовать оставшуюся часть книги.

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

1 голос
/ 23 июня 2009

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

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

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

1 голос
/ 23 июня 2009

У вас определенно есть какая-то работа для вас, но вот стратегия, которую следует рассмотреть, прежде чем выполнять ЛЮБУЮ работу .NET.

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

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

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

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

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

1 голос
/ 23 июня 2009

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

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

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

  • Формы объектов ARE (вы можете создавать новые экземпляры).
  • Модули ведут себя как классы только со статическими методами.
  • Классы и UserControls находятся как можно ближе к объектам, которые вы получите. Отсутствие конструктора усложняет ситуацию, но мы надеемся, что первоначальный разработчик остался с Initialize или написал согласованную подпрограмму Init.
  • События в VB странные; это также то, что, вероятно, запутает вас больше всего. Скрытый код с состоянием, который зависит от определенного порядка событий, без сомнения, разбросан повсюду.
  • Страницы недвижимости. Ну, это то, что есть.

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

1 голос
/ 23 июня 2009

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

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

0 голосов
/ 23 июня 2009

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

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

0 голосов
/ 23 июня 2009

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

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

...