2011-04-26 3 views
1

C++ 강의에서 학생들은 과제를 해결해야합니다. 각 솔루션은 동일한 기능 및 동일한 매개 변수 (함수 이름, 반환 값, 전달 매개 변수)를 사용하여 동일한 기능을 구현해야합니다. 내부의 코드 만 다릅니다.복수 학생 프로그래밍 솔루션의 효과적인 테스트

그래서 모든 솔루션 (약 30 개)을 효과적인 방법으로 테스트하는 방법에 대해 생각하고 있습니다. 어쩌면 가장 좋은 방법은 유닛 테스트와 함께 각 솔루션을 한 번 컴파일하고 실행하는 쉘 스크립트 (또는 이와 비슷한)뿐만 아니라 단위 테스트를 작성하는 것일 수 있습니다.

하지만이 문제를 해결할 수있는 다른 방법이있을 수 있습니다.

답변

1

단위 테스트가 자동화 된 테스트의 가장 효율적인 유형 중 하나 인 이유는 (다른 유형의 테스트와 비교하여) 투자 회수가 상대적으로 적기 때문입니다. 테스트.

학생들에게 산문으로 작성된 사양 대신 테스트 세트를 제공하기까지 할 수도 있습니다. 이는 테스트 주도 개발이라는 개념을 도입 할 수 있습니다 (일반적으로 반복적으로 테스트를 작성하는 경향이 있지만 일괄 적으로 테스트를 작성하지는 않습니다).

+0

학생들에게 테스트 슈트를주는 것은 흥미로운 사실입니다. 어쩌면 나는 그것을 할 것이고, 그것은 많은 일을 덜어 줄 수있다. (비록 내 학생들에게는 많은 일을하는 것을 꺼리지 만 효과적 일 것임에 틀림 없다.) –

0

아마도 분명하지는 않지만 경계 테스트 매개 변수 값을 사용하여 여러 번 코드를 실행하는 것으로 충분하지 않습니까?

+0

요점은, 내가 약 30 가지의 솔루션을 가지고 있으며, 각각의 컴파일 시간을 너무 많이 소비한다고 생각합니다. 아니면 ** ** 나는 ** 뭔가 빠졌어? –

+0

@macs : 왜 손으로 컴파일하겠습니까? 각 학생의 작품이 이메일이나 웹 사이트를 통해 제출되었다고 가정합니다. 테스트 프레임 워크에 내용을 복사하여 붙여 넣기 만하면 컴파일되고 실행됩니다. – wallyk

+0

나는 "그대로"해결책을 원한다. 때때로 복사 및 붙여 넣기는 오류가 발생하기 쉬운 경향이있다. 따라서 나는 스크립트를 사용하고 (다른 폴더에서) 모든 솔루션을 수집하고 각각을 테스트 프레임 워크와 비교하여 컴파일하려고했다. 하지만 더 똑똑한 해결책이있을 거라 생각했는데 그것이 내가 묻는 이유입니다. –

1

예, 대부분의 경우 단위 테스트가 확실한 해결책입니다.

컴파일러 경고 및 정적 분석도 유용합니다.

타이밍을 매개 변수 집합이 주어진 프로그램의 실행은 또 다른 상당히 자동화 된 옵션입니다. 평가할 대상에 따라 다릅니다.

(원하는 경우 평가 용 구현을 스왑 할 수있는) 우수한 진단 기능을 갖춘 기본 클래스를 만드는 것이 또 다른 옵션입니다. 그들이 사용해야하는 인터페이스를 제공하고 두 가지 구현을 유지할 수도 있습니다. 그런 다음 진단 구현을 사용하여 평소와 같이 프로그램을 실행하십시오. 그것은 당신이 찾고있는 것에 달려 있습니다.

+1

기본 클래스/인터페이스에 대해 +1 간격. 모든 프로그램이 클래스를 통해 표현되는 것은 아닙니다. 실제로 알고리즘은 클래스가 아닌 함수입니다. –

+0

은 클래스/인터페이스를 보호합니다. 실제로 OP가 찾고있는 것에 달려 있습니다.예 : 사용할 수있는 양호한 멀티 스레딩 인터페이스가 있고이를 사용하는 것이 요구되는 경우 테스트는 생성되는 스레드 수, 활성 스레드의 최대 수 등을 분석 할 수 있습니다. 그것이 콜렉션 타입 또는 할당자인 경우, 복사 및/또는 할당 통계의 양이 생성 될 수있다. 다시 말하지만, 그것은 맥이 무엇을 찾고 있는지에 달려있다. 그 관점에서 테스트하기가 더 쉽습니다. 그들은 단지 인터페이스를 구현할 필요가 있기 때문에 ... 나쁜 옵션이 아닐 수도 있습니다. – justin

+0

그 자체로는 나쁜 옵션이라고 결코 말한 적이 없습니다. 항상 바로 옆에있는 작업에는 적합하지 않습니다. –

관련 문제