원래 언급 된 다음 Macke의 답변 아래 주석으로 업데이트 된 문제에 대한 나의 이해에는 다음이 포함됩니다. 1) 두 가지 에지 유형 (종속성 및 충돌)이 지시됩니다. 2) 두 노드가 한 에지로 연결된 경우 다른 노드이거나 반대의 경우에도 다른 노드로 연결해서는 안됩니다. 3) 서로 다른 유형의 에지를 혼합하여 두 노드 사이의 경로를 구성 할 수 있다면 무시되는 상황이 아니라 오류입니다. 4) 한 유형의 모서리를 사용하는 두 노드 사이에 경로가 있으면 다른 유형의 모서리를 사용하여 두 노드 사이에 다른 경로가 없을 수 있습니다. 5) 단일 에지 유형 또는 혼합 에지 유형의 사이클은 허용되지 않습니다 (응용 프로그램의 추측으로는 충돌 전용 사이클이 오류인지 확실하지 않지만이 조건을 제거 할 수는 없습니다).
또한, 사용 된 데이터 구조가 이러한 요구 사항의 위반이 표현되는 것을 막지 못한다고 가정합니다 (예 : 노드 쌍이 항상 노드 쌍에서 (유형, 방향)으로 맵에서 조건 2를 위반하는 그래프를 표현할 수 없음) 가장 적은 수의 노드가 먼저 있습니다.) 특정 오류를 표현할 수없는 경우 고려할 사례 수가 줄어 듭니다.
실제로 여기에서 고려할 수있는 세 가지 그래프가 있습니다 : 하나의 에지 유형 중 두 가지 유형과 두 유형 중 하나의 조합으로 구성된 혼합 그래프. 이를 사용하여 최대 수의 노드까지 모든 그래프를 체계적으로 생성 할 수 있습니다. 먼저 두 개의 정렬 된 노드 쌍 사이에 하나 이상의 에지를 갖는 N 노드의 가능한 모든 그래프를 생성하십시오 (이것은 방향성 그래프이기 때문에 정렬 된 쌍입니다). 이러한 그래프의 가능한 모든 쌍을 가져 오십시오. 하나는 종속성을 나타내고 다른 하나는 충돌을 나타냅니다. 각 쌍의 조합을 형성하십시오.
데이터 구조가 조건 2의 위반을 표현할 수없는 경우 종속성 그래프의 공간에 맞거나 그 반대의 가능한 모든 충돌 그래프 만 구성하여 고려할 사례를 크게 줄일 수 있습니다. 그렇지 않으면 공용체를 형성하는 동안 조건 2의 위반을 감지 할 수 있습니다.
첫 번째 노드에서 결합 된 그래프의 폭이 넓은 순회에서 모든 도달 가능한 노드에 대한 모든 경로 세트를 빌드 할 수 있으며 그렇게하면 모든 조건의 위반을 확인할 수 있습니다 (사이클 감지의 경우 사용 Tarjan의 알고리즘을 .)
다른 노드의 경로는 다른 경우 첫 번째 노드의 경로로 표시되므로 그래프가 연결 해제 된 경우에도 첫 번째 노드의 경로 만 고려해야합니다.
혼합 에지 경로가 오류가 아니라 단순히 무시 될 수있는 경우 (조건 3), 종속성 및 충돌 그래프를 독립적으로 고려하고 노드 중 하나에 도달 할 수 있는지 확인하면 충분합니다.
N-1 노드의 그래프 검사에서 발견 된 경로를 기억하면 N 노드의 그래프를 생성하고 평가하기위한 시작점으로 사용할 수 있습니다.
이것은 노드간에 동일한 유형의 여러 모서리를 생성하지 않지만이를 확장 할 수 있습니다. 그러나 이는 사례 수를 크게 증가 시키므로 테스트중인 코드로이를 표시하기가 불가능하거나 실패한 경우 사전에 그러한 사례를 모두 필터링하지 않는 것이 좋습니다.
이와 같이 오라클을 작성하는 비결은 그것이 비효율적이라는 것을 의미하더라도 가능한 한 간단하게 유지하여 신뢰를 확립 할 수 있도록하는 것입니다.
테스트 사례를 생성 할 수단이 있고 제품을 불량과 정확하게 분리하기 위해 생성 한 오라클을 신뢰하면이를 사용하여 대상 코드의 자동 테스트를 수행 할 수 있습니다. 이것이 가능하지 않은 경우, 다음 최선의 선택은 독특한 경우에 대한 결과를 살펴 보는 것입니다. 오라클은 찾은 오류를 분류하고 각 유형의 경로 수와 길이, 두 유형의 경로 시작 부분에 노드가 있는지 여부 등 허용 된 사례에 대한 정보를 제공 할 수 있습니다. 전에 보지 못한 사례를 찾는 데 도움이 될 수 있습니다.