2013-02-18 3 views
0

매우 엄격한 테스트 기반 개발 JUnit 환경에서 직접 교육하고 있습니다. 나는 무작위성을 테스트하기위한 최선의 방법이 그러한 분위기에 있다는 것을 알아 내려하고있다. 예를 들어, 대기열과 항목이있는 임의의 대기열 배열을 구현하고 해당 항목을 배열의 색인 0- (n-1)이있는 항목으로 즉시 전환합니다 (따라서 임의의 항목이 대기열에서 벗어날 때 시뮬레이션합니다). 대기열에서 제외됨). 여기 내 대기열 방식 형태로 몇 가지 예제 코드는 다음과 같습니다JUnit 프레임 워크의 임의성 테스트

 int randIndex = StdRandom.uniform(size); // generate random index to swap with last item 
     Item tmp = randArray[randIndex]; 
     randArray[size] = item; 
     randArray[randIndex] = randArray[size]; //perform swap to create a random item for dequeue 
     randArray[size] = tmp; 
     size++; 

내가 내 대기열 방법이 실제로 무작위로 배열의 다른 인덱스와 대기 변수를 전환되어 있는지 확인하기 위해 몇 가지 검사를 실행합니다. 일반적으로 나는 enqueue() 호출을 반복하여 결과를 출력하는 Main() 메소드에 몇 가지 코드를 던지기 만하면, 난 그 코드가 무작위로 느껴 지는지 확인하려고한다.

그러나 제가 말했듯이, 저는 이것을 매우 엄격한 단위 테스트 프레임 워크에서하고 싶습니다. JUnit은 거의 독점적으로 assert 문을 사용하는 것처럼 보입니다.하지만 몬테카를로 유형을 실행하고 특정 엡실론에 대해 평균을 확인하지 않는 한 내가 무엇에 대해 주장해야하는지 잘 모르겠습니다. 그러나 이는 테스트를위한 것 같습니다. 그런 간단한 방법.

+1

테스트에 필요한 노력이없는 몇 가지 사항이 있습니다. 이것은 그들 중 하나처럼 들립니다. – Bill

+0

.. 또는 일부 숨겨진 의제가 있습니다.) – cybye

답변

0

테스트를 두 부분으로 나눌 수 있습니다.

1) 주어진 난수 시퀀스의 의사 난수를 사용하면 큐잉이 예상대로 작동하는지 테스트합니다. 이를 위해 임의의 고정 된 수의 int 값을 정의하십시오 (예 : "5,2,100,3"). 그런 다음에는 enque가 예상 된 요소를 전달한다는 것을 asser로 테스트하십시오.

2) Random() java 클래스를 테스트하십시오. Random()이 잘 구현되었으므로이 테스트를 생략해야합니다.

그렇지 않으면 2) 당신은 Chi-Square 난수 테스트를 사용하고, 그 말은 당신이 말한 것처럼 soem 엡실론 안에있는 것입니다. 그러나이 woul은 잔인한 점이므로 1 점을 지키십시오.

0

저는 정말로 당신이 가고있는 것이 확실하지 않지만 난수 생성기 자체를 테스트하는 것처럼 읽었습니다. .

java SecureRandom을 사용하는 경우에는 엔트로피와 관련하여 매우 유용 할 것입니다. SecureRandom을 참조하십시오. 의심 스럽다면 엔트로피 체커를 사용하거나 인터넷의 일부 소스에서 실제 무작위 시퀀스를 사용하십시오. like here