2009-06-22 4 views
6

Visual Basic 6.0으로 작성된 후 이전에 .NET으로 포팅 된 대규모 레거시 응용 프로그램을 리팩터링하고 싶습니다. 이것을 확신하기 위해 기존 코드를 중심으로 단위 테스트를 수행하여 전후 비교할 수 있습니다. 이 작업을 수행하는 가장 쉽고 효과적인 방법은 무엇입니까?"레거시 코드로 효과적으로 작업"은 VB6에서 VB.NET으로 이식 된 응용 프로그램을 사용하는 사람을 도울 수 있습니까?

나에게 도움이 될 것 같은 'Working Effectively with Legacy Code'이라는 책이 있습니다. 그러나 그것은 객체 지향 언어만을 다룰 것으로 보이며 Visual Basic 6.0은 반드시 OO가 아닙니다. 이 책은 여전히 ​​나를 도울 수 있습니까? 나는 그것을 읽은 누군가가 그것을 보증 할 수 있기를 바라고있다.

특히이 응용 프로그램은 양식 자체 이외의 클래스를 사용하지 않습니다. 양식에서 직접 데이터베이스에 액세스하지만 일관되게는 액세스하지 않습니다. 이 프로젝트에는 표준이 전혀없는 스타일을 사용하는 사람들이있었습니다.

내가 말했듯이이 프로젝트는 VB.NET에 이식되었습니다. 그러나 Visual   Studio   2008 아래에서 컴파일된다는 의미에서 포팅되었습니다. 모든 코딩 개념은 Visual Basic 6.0입니다.

답변

7

object-oriented (OO) 언어 만 처리하지 않습니다. 큰 섹션은 C의 레거시 코드를 다루는 방법에 관한 것입니다.

그래, 구입하십시오!


라는 전체 장 (19 장)이있다 :

이 내 프로젝트가

을 객체 지향하지 않는가. 어떻게 안전하게 변경합니까?

또한 vbUnit, 당신이 Visual Basic 6.0TDD를 사용하는 데 도움이 수있는 xUnit 구현이있다.

사실, 질문을 잘못 읽고 너는 으로 가고 있다고 생각합니다. 이미 이동 한 것이 아니라으로 이동합니다. 이 경우에는 '유산'VB.NET 코드를 사용하는 것이 좋습니다. VB.NET의 OO 기능을 활용하고 나머지 책을 사용할 수 있습니다.

정말이 책을 더 추천 할 수 없습니다.

+1

+1. 한 작은 작은 문제. 질문에 응용 프로그램은 VB.NET에 이식되어 vbunit은 관련이 없다고합니다. – MarkJ

+0

감사합니다 MarkJ 나는 적절하게 편집했습니다 –

+0

고맙습니다. 그게 내가 알아야 할 것입니다. 나는 책을 집어 올께. MarkJ에게 감사의 말을 전합니다. –

1

예; 이 책의 개념은 크고 강력하며 OOP 이상으로 확장됩니다. 그리고 VB6 이 될 수 있습니다. 객체 지향적이지 만 객체 지향적 인 언어는 아닙니다.

이 책에서 가장 강력한 개념 중 하나는 코드를 깨뜨리고 테스트를 주입하거나 기능을 분리하거나 추상화 할 수있는 "솔기"의 개념입니다. 이것은 절차 적 코드에도 적용되는 개념 중 하나입니다.

1

더 구체적인 질문을하고 싶을 수 있습니다.

VB6은 그 자체로 순수한 OO 언어는 아니지만 OO에 대한 충분한 요소가있어 익숙해야합니다. 또한 VB6 IDE를위한 많은 단위 테스트 플러그 인이 있습니다.

그러나의는 높은 수준의 VB6의 구성 요소 중 일부를 살펴 보자 :

  • 양식 객체 (새로운 인스턴스를 생성 할 수 있습니다)입니다.
  • 모듈은 정적 메서드 만 사용하는 클래스처럼 동작합니다.
  • 클래스 & UserControls는 얻을 수있는 개체에 가깝습니다. 생성자가 부족하여 문제가 발생하지만 초기 개발자가 Initialize를 유지했거나 일관성있는 Init 하위를 작성했기를 바랍니다.
  • VB의 이벤트가 이상합니다. 그것은 또한 아마 당신을 가장 많이 여행 할 것입니다. 이벤트의 특정 순서에 의존하는 숨겨진 상태 코드는 의심의 여지없이 흩어져 있습니다.
  • 속성 페이지 글쎄, 그것은 그것이 무엇인지입니다.

VB의 모범 사례로 시작하십시오. 앱이 모범 사례 코드를 염두에두고 작성되지 않은 경우이 단계를 수행하면 많은 문제를 해결할 수 있다고 생각합니다.

+0

충분합니다. 내 질문을 편집하여 내 관심사를 강조하겠습니다. –

0

마틴 파울러 (Martin Fowler)의 Refactoring: Improving the design of existing code을 살펴볼 것을 권장합니다.

Professional Refactoring in Visual Basic의 줄을 따라 뭔가를 찾고있을 수도 있습니다. 나는 그것을 읽지 않았지만 적용 가능해 보인다.

+0

마틴 파울러 (Martin Fowler)의 리팩토링 책 (Refactoring book)을 읽었는데, 이는 내가 레거시 코드 주위에서 테스트해야한다는 것을 깨닫게했습니다. 당신은 정확합니다, 그것은 훌륭한 읽어야합니다. –

1

당신은 분명히 어떤 일을 해보았지만 .NET 작업을하기 전에 고려해야 할 전략이 있습니다.

기본 FORM 코드를 가능한 한 클래스 밖으로 옮깁니다. 양식 당 하나의 클래스 파일을 시작으로 사용하십시오. 본질적으로, 양식 이벤트 핸들러는 기본 클래스 인스턴스의 메소드에 대한 프록시 호출 만 수행해야합니다. 모든 사용자 정의 메소드를 클래스 파일로 옮길 수 있습니다.

Microsoft와 다른 사람들이 .NET 마이그레이션을 준비하는 데 도움이되는 모범 사례 가이드 (등)를 읽은 후에는 기본적으로 코드/리팩터링을해야 할 지옥에 약간의 설정이 필요합니다. 등의 오류 처리, 이벤트 주문, 후반 바인드 된 오브젝트/변종, 컬렉션,로

오류에 단어 코드 처리 : 그것은 평균 Visual Basic의 코더가 있었다 특히 이후에-오류 스파게티를 복제 특히 어렵다 흐름 제어 로직으로 사용하기에 좋지 않습니다. On Error 블록을 별도의 서브 루틴으로 분리 할 가치가 있습니다. 루틴에 2 개가 넘는 경우가 있습니다.

코드를 정리 한 후에는 Visual Basic 코드를 현명한 추상화 (예 : 단일 데이터 어댑터 클래스 & 연결 등)로 리팩토링하는 것도 고려해 볼 수 있습니다.하지만 최상의 판단을 내릴 수 있습니다. 그.

이 방법이 마음에 들지 않으므로 양식을 사용하여 물을 명확하게 테스트하십시오.

+0

합리적인 조언을하지만 단원 테스트를 시작하는 것이 원래 질문과 마찬가지로 매우 첫 번째 일이되어야합니다. – MarkJ

+1

단위 테스트 FORM (작성된대로)은 어렵습니다. 단위 테스트의 모든 영광과 시뮬레이션 이벤트에서 양식의 이벤트/상태 논리를 캡처하는 클래스를 만드는 것이 더 관리하기 쉽습니다. 하지만 네 말이 맞아. 나머지 조언은 단위 테스트가 작성된 후에 찾아야합니다. – hythlodayr

+0

단위 테스트 양식을 작성하는 것이 맞습니다. RS Conley는 Stackoverflow의 다른 곳에서 흥미로운 해답을 작성했습니다. 클래스에 위임하는 씬 래퍼 인 폼을 사용하는 것에 대한 이야기입니다.이 테스트에는 테스트 가능성을 비롯한 많은 이점이 있습니다. 그는 이것을 "수동 스크린"접근 방식이라고 부릅니다 (Martin Fowler 이후). – MarkJ

1

저는 C/C++ 프로젝트를 제어하기 위해 구입 한 사본을 소유하고 있습니다. 내가 C#/.NET 기능을 놓친 것처럼 제공해야합니다.

책은 매우 C/C++ ish이지만, John이 말했듯이, 객체없이 작업하는 장이 있습니다.

하지만 코드가 .NET으로 이식 된 경우 Visual Basic 6.0 코드가 아닙니다. .NET에는 Visual Basic/C#을 사용하여 코드 및 테스트에 연결할 수 있습니다. 그러나이 책은 응용 프로그램에 연결할 수있는 여러 가지 방법에 대한 개요를 제공하고 대규모의 오래된 프로젝트를 제어 할 수있는 전략을 제공합니다.

0

필자는 특성화 테스트가 가장 효과적이라고 생각합니다. 자동화해야합니다. 특성화 테스트를하지 않으면 응용 프로그램/코드를 실제로 실행하여 수동으로 테스트 할 수 있습니다. 새로운 코드를 추가 할 때 중요한 기능을 테스트하는 것은 그리 쉽지 않습니다. 이것은 내 자신의 경험에서 비롯된 것입니다.

새 코드를 추가 할 때 새싹 메서드 및 새싹 클래스가 중요합니다.