2011-01-03 2 views
0

저는 C#에서 작업 중이며 소프트웨어 버전을 업그레이드 할 때 테스트 할 수 있도록 디스크에 저장된 소프트웨어에 사용자 지정 "설정"개체가 있습니다.저장된 설정에 대한 업그레이드 경로 테스트

예를 들어 "버전 A"의 소프트웨어가 있고 해당 버전의 설정이있는 경우 소프트웨어의 "버전 B"로 업그레이드 할 때 "설정 A"를 완전히 업그레이드 할 수 있습니다.

나중에 소프트웨어의 "버전 C"로 업그레이드 할 때 A-> C 및 B-> C (버전 n + 1은 버전보다 n + 1 더 많은 테스트 케이스 필요)의 업그레이드 경로를 테스트해야합니다. n).

큰 문제는 테스트 경로의 기하 급수적 인 성장이 신속하게 유지하기 어렵다는 것입니다.

이 문제를 처리하는 표준 방법이 있습니까? 내가 가진


몇 가지 중요한 문제는 다음과 같습니다

설정은 반드시 로컬 컴퓨터에 저장되지 않습니다, 그래서 요구 사항을 상속 소프트웨어는 컴퓨터에서 컴퓨터로 이러한 설정을 전송할 수 있도록.

MSDN은 ClickOnce 설정이 직접 지원하지 않으므로 원격 컴퓨터에서 설정을 저장하기 위해 [내] 사용자 지정 설정 클래스를 개발해야합니다. "라고 말합니다.

+0

설치/업그레이드시 실제로해야합니까? 업그레이드 후 응용 프로그램이 처음 실행될 때 설정을 업그레이드하는 방법은 무엇입니까? 이 방법은 훨씬 간단합니다. – Jay

답변

2

응용 프로그램을 업그레이드 한 후 처음 실행할 때 주석을 추가했습니다.

이러한 업그레이드 경로를 모두 개발하거나 설치/업그레이드 절차에이 통합 경로를 적용해야하는 것이 염려 스러운지는 분명하지 않습니다.

public interface ISettingsUpgrader 
{ 
    void UpgradeSettings(); 
} 

public abstract class SettingsUpgrader : SettingsUpgrader 
{ 
    protected int version; 

    public virtual void UpgradeSettings() 
    { 
     // load settings and read version info 
     version = settingsVersion; 
    } 
} 

public class SettingsUpgraderV2 : SettingsUpgrader 
{ 
    public override void UpgradeSettings() 
    { 
     base.UpgradeSettings(); 
     if(version > 1) return; 

     // do the v1 -> v2 upgrade 
    } 
} 

public class SettingsUpgraderV3 : SettingsUpgraderV2 
{ 
    public override void UpgradeSettings() 
    { 
     base.UpgradeSettings(); 
     if(version > 2) return; 

     // do the v2 -> v3 upgrade 
    } 
} 

그래서, 각각의 새로운 버전, 당신은 단지에 있습니다 문제가 구축하고 점점 더 많은 설정 업그레이드, 그것을 할 수있는 간단하고 상대적으로 쉬운 방법을 테스트하는 방법과 경우

이있다 이 규칙을 따르고 이전 버전의 업그레이드를 구현하십시오. 기본 설정 파일 처리는 모두 기본, 추상 클래스로 진행되며 필요에 따라 연속 업그레이드가 수행됩니다.

테스트 결과에 따르면, 각각의 새 버전은 (1) 기본 방법이 호출 됨 - 기능이 이미 기존 테스트에 의해 커버 됨 - (2) 최신 v (n-1) - > v (n)이 올바르게 실행됩니다.

옵션을 이전 버전으로 롤백하지 않는 한, 각 레벨에서 설정 롤백 절차를 구현하는 것이 좋습니다.

+0

+1 단순하지만 강력한 해결책 – k3b

2

설치 관리자는 일반적으로 관리자 권한을 사용하여 실행해야하므로 일반적으로 네트워크에 액세스 할 수 있어야합니다. 당신이해야 할 일은 현재 버전의 app config (또는 그런 식으로한다면 레지스트리 키)에 접근하여 파일 위치를 얻은 다음 FileStream을 사용하여 로컬 comp, 로컬 서버 , 또는 회사 서버를 사용할 수 있습니다. 인터넷 주소에서 가져 오기에는 다른 메커니즘이 필요합니다.

내가 수행 할 작업은 전환을 계층화하는 것입니다. 설정 파일을 A에서 D로 변환하려면 먼저 B로 변환 한 다음 C로 변환하고 THEN에서 D로 변환하십시오. 이것은 성능이 좋지 않을 수 있지만 사용자가 구형 버전의 버전이 지나치게 오래된 경우에만 가능합니다. 소프트웨어; 이전 버전의 정기적 인 업데이트는 하나의 레이어 만 통과하면됩니다. 또한 각 레이어를 변경하여 닫을 수 있다는 극단적 인 이점이 있습니다. 버전 A를 버전 B로 바꿀 코드가 생기면 다시 돌아와서 버전 C 업데이트 로직을 추가하기 위해 브레이크를 돌릴 필요가 없습니다.

+0

답을 읽으십시오. 내 것은 정말 당신 가까이에 있었으므로 +1 – NotMe

1

업그레이드를 처리하는 가장 좋은 방법은 한 번에 한 단계 씩 업그레이드하는 것입니다. C.

에 B에서 다음 일, A에서 B로

C A에서 업그레이드를 테스트 할 때 당신이 먼저 A와 B를 실행해야 다음 B C에 업그레이드 경로를 빌드 :

귀하의 예를 촬영

이렇게하면 테스트 시나리오가 상당히 제한 될 것입니다. 내가 본 소프트웨어 중 상당수가 이런 식으로 업그레이드를합니다. 필드를 테이블에 추가 (B로 업그레이드) 한 경우에만 즉시 제거되도록 할 수 있습니다 (C로 업그레이드). 시나리오를 제한하기 위해 지불해야 할 작은 가격입니다.

업그레이드 스크립트를 작성하면 직전 버전에서 현재 버전으로 이동하기 만하면됩니다.

관련 문제