누군가가 문제에 대한 해결책을 작성해야한다고 가정하고 몇 가지 테스트를 통해 해결책을 테스트해야합니다. 그의 프로그램이 내 모든 테스트를 통과 할 수는 있지만 (아마도 반성 또는 무언가로) 문제에 대한 실제 해결책과 아무런 공통점이 없습니까?단위 테스트를 항상 통과시키는 방법은 무엇입니까?
답변
일반적인 경우 일반 케이스
, 아니. 테스트를 올바르게 구현했는지 알지 못하기 때문에 숙제를 제대로 수행하지 않아도 테스트를 통과 할 수 있습니다. 학생들이 테스트를 실행할 수있는 경우
특별 케이스
, 그들은 학습 알고리즘을 사용할 수 있습니다.
학생이 테스트의 소스 코드에 액세스 할 수있는 경우 리플렉션을 사용하여 예상 결과를 변수에 저장하는 것과 같은 속임수를 찾을 수 있습니다. 소스 코드 트릭을 찾을 수 없으면 테스트를 컴파일하고 실행할 수 있습니다.
학생들이 테스트의 바이트 코드에 액세스 할 수 있으면 학생들은이를 분해하고 소스 코드 트릭을 사용할 수 있습니다. 당신이 효과적으로 obsfuscated하더라도, 그들은 여전히 그것을 실행할 수 있습니다.
학생들이 다른 학생 코드와 비교하여 학생 코드를 테스트한다는 것을 알게되면, 그들이 수행해야하는 모든 작업이 일관성있게 수행됩니다.
권장
- 는 학생들에게 시험을 사용할 수 있도록하지 마십시오. 그들은 독립적으로 숙제를 테스트해야합니다. 공식 평가를 위해 숙제를 제출 한 후 테스트를 실행하십시오.
- 테스트를 더욱 강력하게 만들기 위해 임의 화를 사용하십시오.
- 테스트에서 학생 코드와 다른 학생 코드를 비교하면 모든 실패를 수동으로 조사해야합니다. 어쩌면 한 학생이 올바르게 구현되었고 다른 학생은 잘못된 구현을 복사했을 수도 있습니다. 이 경우 다수 규칙은 무능력을 보상합니다.
- 당신은 자신의 테스트를 수집하고 자신의 테스트를 테스트 할 수 있습니다.
좋은 답변입니다. ACM-ICPC와 같은 프로그래밍 경연 대회에서 경쟁 업체는 하나 또는 두 개의 테스트 케이스가 주어 지지만 완전히 다른 테스트 케이스가 코드 테스트에 사용됩니다. 코드 케이스는 학생들에게 공개되지 않습니다. 학생이 모든 테스트 케이스를 받았다면 실제 알고리즘을 작성하지 않고 입력에 대해보고 싶은 것을 반환 할 수 있지만 합당한 조치를 취하면 피할 수 있습니다. – JFA
확실히. 테스트에 대한 소스 코드가 없어도 ASM과 같은 바이트 코드 조작기 또는 디 컴파일러를 사용하여 입력과 원하는 응답을 상관시킬 수 있습니다.
JUnit 4에서는이 방법에 사용되는 @Ignore
주석이 있습니다
@Ignore
@Test
public void testSmth() {
...
}
을하지만 난 당신이 설명한 상황을 영상화하기 위해 노력하고있어. 그리고 내가 할 수있는 유일한 일은 ACM 문제 검증 자 (예 : PC^2)와 같은 것입니다.
그리고이 경우 테스트를 위해 코드를 호출하면 흐름을 완전히 제어 할 수 있습니다. 따라서 사용자는 이런 방식으로 속임수를 쓰지 않을 것입니다.
절대적으로입니다.
학생들이 테스트에서 찾고있는 것을 발견하면 숙제 문제를 해결하지 않고도 그 결과를 생성하는 코드를 작성할 수 있습니다.
반사? 예상되는 결과를 변수로 유지한다면 그렇습니다. 인라인 상수를 읽을 수 있는지 확실하지 않습니다. 그러나 관계없이 보안 관리자가있는 샌드 박스에서 코드를 실행하십시오. 어쨌든 그렇게하고 싶다면 : 코드가 악의적이거나 의도하지 않은 결과가 있다면 어떻게해야할까요?
아니면 포인터가 아주 많아서 프로그래머가 아니기 때문에 무료로 사용하지 마십시오 ... – JFA
- 1. MonoDevelop로 단위 테스트를 디버깅하는 방법은 무엇입니까?
- 2. 간단한 Silverlight 단위 테스트를 작성하는 방법은 무엇입니까?
- 3. 일반 C로 단위 테스트를 작성하는 방법은 무엇입니까?
- 4. Hudson에서 Silverlight 단위 테스트를 자동화하는 방법은 무엇입니까?
- 5. codeigniter가 뷰 파일을로드하고 변수를 통과시키는 방법은 무엇입니까?
- 6. 개체를 무시하고 마우스 피켓을 통과시키는 방법은 무엇입니까?
- 7. CPPUnit에서 단위 테스트를 끄는 방법
- 8. DAO (단위 저장소)는 단위 테스트를 받아야합니까?
- 9. 단위 테스트를 실행하는 MSBuild
- 10. 단위 테스트를 찾는 방법
- 11. 단위 테스트에서 오래된 DeploymentItem을 제거하는 방법은 무엇입니까?
- 12. muticore 컴퓨터에서 파이썬 단위 테스트를 빠르게하는 방법은 무엇입니까?
- 13. 라이브러리를 사용하지 않고 단위 테스트를 수행하는 방법은 무엇입니까?
- 14. 웹 서비스 클라이언트에 대한 단위 테스트를 설계하는 방법은 무엇입니까?
- 15. Silverlight 4에서 ActualWidth의 단위 테스트를 만드는 방법은 무엇입니까?
- 16. 단위 테스트를 할 수 있도록 내 수업을 리팩토링하는 방법은 무엇입니까?
- 17. DSSS 및 GDC를 사용하여 단위 테스트를 실행하는 방법은 무엇입니까?
- 18. 단위 테스트를 단순하고 독립적으로 유지하면서 DDD 불변성을 보장하는 방법은 무엇입니까?
- 19. Erlang으로 단위 테스트를 할 때 모듈 리로딩을 자동화하는 방법은 무엇입니까?
- 20. 스택 기능을 테스트하기 위해 PHP 단위 테스트를 작성하는 방법은 무엇입니까?
- 21. ORM을 사용하는 앱으로 단위 테스트를 수행하는 방법은 무엇입니까?
- 22. 논리가 변경되면 단위 테스트를 업데이트하는 올바른 방법은 무엇입니까?
- 23. 단위 테스트를 위해 moq를 사용하여 가짜 데이터를 생성하는 방법은 무엇입니까?
- 24. TableServiceContext.BeginSaveChanges를 사용하여 Silverlight 단위 테스트를 만드는 방법은 무엇입니까?
- 25. 단위 테스트를 위해 In-process ServicedComponent 인스턴스를 만드는 방법은 무엇입니까?
- 26. VS2008의 통합 테스트에서 단위 테스트를 분리하는 방법은 무엇입니까?
- 27. 단위 테스트를 통해 대화 상자를 처리하는 방법은 무엇입니까?
- 28. PDF 문서 생성을위한 단위 테스트를 설계하는 방법은 무엇입니까?
- 29. Xcode에서 라이브러리 프로젝트의 단위 테스트를 구성하는 방법은 무엇입니까?
- 30. Guile에서 TAP 표준으로 출력되는 단위 테스트를 만드는 방법은 무엇입니까?
그런 일이 발생했습니다. 이 사이트를 방문하여 숙제를 더 많이 또는 적게하는 대신에 실제로 학생 코드를 읽는 방법을 찾는 조교가있을 것 같습니다. (@brain_damage을 공격을하지 마십시오.) – bmargulies
@bmargulies을 내 CS 프로그램을 알고 적어도 종종 자동화 학년을 사용하는 조교가 필요합니다. 따라서 brain_damage가 학년일지도 모르지만, 그것은 그가 "속이고있다"는 것을 의미하지는 않습니다. 그는 단지 호기심을 가질 수 있습니다. –
@Matt 나는 그 이유 때문에 '속임수'라는 단어를 피했다. – bmargulies