2009-12-17 5 views
1

복잡한 유형이 다른 기본 유형을보다 현저하게 확장하는 독립형 유형의 많은 스키마를 다시 작성하는 것에 대해 생각하고 있습니다. 이것에 대한 이론적 근거는 부분적으로 개념적입니다. 왜냐하면 대부분의 유형은 명확한 계층 적 구조를 가진 도메인 객체의 특정 인스턴스이기 때문에 부분적으로 실용적입니다. 왜냐하면 우리는 JAXB 생성 클래스를 사용하여 XML 읽기 논리를 처리하기 때문에 쓰기가 불가능하기 때문입니다 반사 또는 많은 instanceof 및 캐스팅없이 일반적인 기능을위한 방법. 블레.스키마 (xsd) 동등성에 대한 회귀 테스트

내 기본적인 질문은 다른 사람이 함수 동등성을 위해 두 개의 XSD 스키마를 테스트하는 좋은 방법을 알고 있는지 여부입니다. 이 스키마 리펙토링을 올바르게 수행하면 파일 자체가 매우 다를지라도 유효한 것으로 간주되는 문서 세트는 두 스키마에 대해 정확히 동일해야합니다. 이것은 테스트 프레임 워크가 도움이 될 수있는 것과 같은 것으로 들립니다. JUnit 테스트를위한 테스트 입력을 제안 할 툴이 있다는 것을 알고 있으며, 이전 스키마와 새로운 스키마에 대한 유효성을 테스트하기 위해 엣지 케이스 XML 문서를 생성하는 도구가 있는지 궁금합니다.

제쳐두고 - 이것이 끔찍한 생각이라면 (아니면 더 좋은 대안이 있다면) 지금 당장 멈추십시오. :-)

감사합니다.

+0

아야 .............. – Skilldrick

+0

JAXB 클래스가 동등한 지 쉽게 테스트 할 수 있습니까? –

+0

@jon - 아마도 클래스가 스키마가 지시하는 것의 전체를 포함하지 않기 때문에. 각각의 타입이 같은 빈 프로퍼티를 가지고 있다는 것을 확인하는 것이 흥미로운 아이디어이다. 그러나 어떤 클래스의 에러를 검사하는데 좋을 것이다. 그러나 그것이 전체적으로 간다고 생각하지는 않는다. XML 유효성 검사는 나를 긴장하게 만듭니다.) –

답변

2

몇 가지 조사 후, 나는 내가 찾고있을 것입니다 것은 정확히 종류 같은 소리 Liquid XML Sample Generator, 건너했습니다 (I없는 확신하지만 아주이 테스트 에지 경우에 것이 얼마나 좋은) .

더 이상 잘 관리되지 않거나 잘 문서화되지는 않지만 주어진 스키마에 대해 유효하거나 유효하지 않은 XML 문서를 정의하고이를 테스트하는 프로그래밍 방식을 더 많이 사용합니다. 불행히도 테스트 케이스는 위의 XML 샘플 생성기가 할 수있는 것처럼 각 개별 노드의 가능성을 바꾸는 대신 선형으로 해석되는 것 같습니다. 결과적으로 더 나은 적용 범위를 적용하는 것이 가능 해지는 반면 그렇게하려면 많은 작업이 필요할 것입니다.

그래서 적어도 이전 버전의 스키마에서 여러 문서를 생성 한 다음 새 스키마에 대해 유효성을 검사하고 그 반대의 경우에도 실행 가능한 대체 기능이있는 것으로 나타났습니다. 결정적이지는 않다. (단위 테스트는 절대로 존재하지 않는다.) 그러나 각 방향으로 수 백 또는 수천 개의 테스트를 실행하면 스키마가 동등하다는 확신을 줄 수있다.

나는 우아한 테스트 솔루션을 제시하는 것이 여전히 행복 할 것이지만, 한 시간 씩 인터넷을 통해 나는 그 라인을 따라 무언가가 존재할 것이라는 희망을 많이 갖고 있지 않다.

+0

궁극적으로 은색 글 머리 기호가없는 것 같기 때문에, 필자는 제작에서 캡처 된 일부 XML과 XML을 사용하여 생성 된 XML 문서의 코퍼스를 사용했습니다. 이것은 (물론 xcut notes처럼) 100 % 확신을주지 못했지만 확실히 먼 길을 가졌습니다. –

2

두 문맥 자유 문법이 동등한 지의 문제는 결정할 수없는 것이므로이 문제에 대한 일반적인 대답은 없습니다. this wikipedia page을 참조하십시오.

이론적 인 작업이 있었지만 선반에서 포장하여 제공하는 도구는 없습니다.

은 스키마를 디자인하는 방법 (익명 형식, 명명 규칙 등을 금지)에 대해 특정 가정을 할 경우이 문제를 해결합니다. 그런 다음 eclipse XSD (독립형 앱에서 일식 외부에서 작동하는 라이브러리)을 사용하여 비교를 수행 할 수 있습니다.

마지막으로 다음은이 문제를 자세히 설명하는 link to a research paper입니다.

+0

내가 줄 수있는 하나 이상의 upvote보다 더 가치가 흥미롭고 유익한 답변 주셔서 감사합니다. 특히 그것이 결정할 수없는 문제라는 것을 아는 것은 흥미 롭습니다 - 이것은 큰 표본을 가진 경험적 테스트를 더 받아 들일 수있게합니다. –

관련 문제