Polygon

12. Stress

Evenharder 2015. 8. 18. 16:28

Tests, Validator, Main solution, Checker까지 다 만들었다면 문제의 90%는 만든 것이라고 볼 수 있습니다. 이제 필요한 것은 알고리즘의 검증도 있겠지만은, Polygon에서는 이렇게 만든 것을 가지고 자유롭게 테스트를 해볼 수 있도록 했습니다. 그 중 하나가 Stress입니다. Stress는 generator를 이용해서 test를 일정 시간동안 random하게 생성해내면서 혹시 있을지도 모르는 countercase를 찾는 것이 목적입니다. 어떤 soultion이 시간 제한이나 메모리 제한 등을 준수하는지 확인하고자 하는 것이 아님을 명심하시기 바랍니다(이는 Invocation이 담당합니다). Stress 탭에서 Add Stress를 누르면 다음과 같은 화면이 나타납니다.




각 항목을 설명하자면 다음과 같습니다.


  • Script pattern: Generator의 script를 쓰면 됩니다. Generator의 기본적인 인자까지만 써도, Polygon이 내부적으로 추가적인 인자를 더해 seed값을 바꾸기 때문에 random한 test가 생성됩니다. 

  • Memory limit: 각 test당 사용할 수 있는 메모리의 제한입니다. 일반적으로 General Info의 것과 동일하게 설정되어 있습니다.

  • Time limit: 각 test 당 사용할 수 있는 시간의 제한입니다. 역시 일반적으로 General Info의 것과 동일하게 설정되어 있습니다.

  • Total time limit: Stress를 얼마나 돌릴 것인지 설정하는 항목이며, 5초, 15초, 30초, 60초, 90초, 120초가 가능합니다.

  • Solutions: Stress를 통해 돌릴 solution을 의미합니다. 직접 타이핑하는 수도 있으며(이 때 프로그램명과 확장자를 써야 합니다), 옆의 Add 버튼을 이용해 solution을 선택해서 올리는 수도 있습니다.

  • Description: 이 Stress가 무슨 의미를 가지는지 적는 비고란이라고 보면 되겠습니다.
이 때 Save를 누르면 Stress가 저장됩니다. 이렇게 만든 Stress는 탭에서 Run을 통해서 실행을 할 수 있으며, View를 통해서 설정 사항을 볼 수 있고, Edit을 통해서 그 사항들을 수정할 수 있으며, Delete를 통해 삭제가 가능합니다.

Run을 할 경우, Stress가 돌아가면서 random한 test를 각 solution에 집어넣습니다. Stress의 종료 조건은 다음과 같습니다.

  • 사용자가 탭에서 Cancel을 누른 경우입니다. 이 때 Stress는 무효 처리 됩니다.

  • Stress가 어떤 solution에 대해서 countercase, 즉 반례를 찾아낸 경우입니다. Stress가 성공한 것입니다. 이 때는 추가적으로 해당 Stress가 파란색으로 나타나며, Add to test를 통해 원하는 test set에 집어넣을 수 있습니다.

  • Stress가 지정된 시간만큼 random한 test case를 집어넣었으나, 반례를 찾지 못한 경우입니다.

  • Stress를 돌리다가, 어떤 solution이 Correct나 Wrong answer 이외의 verdict(ex. Time limit exceeded, Runtime error)를 낸 경우입니다. 이 때는 solution 자체가 잘못된 것으로, 해당 Stress가 빨간색으로 나타납니다.
Stress는 이렇게 잘못된 알고리즘으로부터 도출된 일부 solution의 wrong answer를 집어내서 countertest를 쉽게 만들 수 있다는 장점이 있습니다. 특히 실수 할 법한 코드를 걸러내는 역할을 수행하는데 제격입니다.