대략난감 테스트 자동 생성기 Randoop
Good Tools : 2008/11/07 18:01
http://people.csail.mit.edu/cpacheco/randoop/1.2/doc/userman.php
처음 보고는 이야.. 아주 별에 별 도구가 다 있구나. 생각을 하고 과연.. 잘 만들어 줄까?? 라는 기대반 호기심 반으로 들려봤습니다.
테스트를 작성할 대상이 되는 클래스는 예전에 사부님이 시켜주신 TTD 트레이닝 중 하나 볼링게임. 그 중에서도 Frame이라는 클래스를 마루타 삼기로 햇습니다.
그리 복잡한 클래스는 아니지만 비즈니스 로직이 들어있죠. 저걸 대상으로 테스트 코드를 생성해봤습니다.
10초 동안 돌려서 만들어 봤습니다. 콘솔에 뭔가가 찍히는데 무슨 의미인지는 모르겠고 마지막에 생성된 파일 목록이 나오는데 다섯개나 만들어져있습니다.
저 중에서 RandoopTest.java는 테스트 스위트 파일이고 네 개의 소스 파일이 테스트 코드를 담고 있습니다.
문제는... 대체 뭘 테스트 한 건지도 모르겠는 코드가 14000~2만 라인씩 생성된다는 겁니다. 이클립스가 막 죽으려고 버버버벅 거립니다.
그 중에서 젤 간단해 보이는 걸 몇 개 보여드릴까요?
대략 난감입니다. 테스트를 돌리면 전부 성공하긴 합니다.
그냥 웃음 밖에 안나옵니다. 크하하하하... 저 수 많은 코드와 녹색불은.. 무슨 의미가 있을까요?
처음 보고는 이야.. 아주 별에 별 도구가 다 있구나. 생각을 하고 과연.. 잘 만들어 줄까?? 라는 기대반 호기심 반으로 들려봤습니다.
테스트를 작성할 대상이 되는 클래스는 예전에 사부님이 시켜주신 TTD 트레이닝 중 하나 볼링게임. 그 중에서도 Frame이라는 클래스를 마루타 삼기로 햇습니다.
package domain;
import java.util.ArrayList;
import java.util.List;
public class Frame {
List<Roll> rollList = new ArrayList<Roll>();
protected Integer remainPinNumber = 10;
private Integer number;
public Frame(Integer frameNumber) {
this.number = frameNumber;
}
public Boolean isEnd() {
if (hasStrike() || rollList.size() == 2)
return true;
return false;
}
protected boolean hasStrike() {
for (Roll roll : rollList)
if (roll.getType() == RollType.STRIKE)
return true;
return false;
}
public void add(Roll roll) {
setRollType(roll);
remainPinNumber -= roll.getKnockDownPinCount();
rollList.add(roll);
}
protected void setRollType(Roll roll) {
Integer knockDownPinCount = roll.getKnockDownPinCount();
if (rollList.size() == 0 && knockDownPinCount == 10)
roll.setType(RollType.STRIKE);
else if (knockDownPinCount == 0)
roll.setType(RollType.GUTTER);
else if (knockDownPinCount == remainPinNumber)
roll.setType(RollType.SPARE);
}
public Integer getRollListSize() {
return rollList.size();
}
public Integer getRemainPinNumber() {
return remainPinNumber;
}
public Integer getScore() {
Integer score = 0;
for (Roll roll : rollList)
score += roll.getScore();
return score;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder("frame(");
builder.append(number).append(", ");
for (Roll roll : rollList)
builder.append(roll.toString());
builder.append(", ").append(getScore()).append(")");
return builder.toString();
}
public List<Roll> getRollList() {
return rollList;
}
}
import java.util.ArrayList;
import java.util.List;
public class Frame {
List<Roll> rollList = new ArrayList<Roll>();
protected Integer remainPinNumber = 10;
private Integer number;
public Frame(Integer frameNumber) {
this.number = frameNumber;
}
public Boolean isEnd() {
if (hasStrike() || rollList.size() == 2)
return true;
return false;
}
protected boolean hasStrike() {
for (Roll roll : rollList)
if (roll.getType() == RollType.STRIKE)
return true;
return false;
}
public void add(Roll roll) {
setRollType(roll);
remainPinNumber -= roll.getKnockDownPinCount();
rollList.add(roll);
}
protected void setRollType(Roll roll) {
Integer knockDownPinCount = roll.getKnockDownPinCount();
if (rollList.size() == 0 && knockDownPinCount == 10)
roll.setType(RollType.STRIKE);
else if (knockDownPinCount == 0)
roll.setType(RollType.GUTTER);
else if (knockDownPinCount == remainPinNumber)
roll.setType(RollType.SPARE);
}
public Integer getRollListSize() {
return rollList.size();
}
public Integer getRemainPinNumber() {
return remainPinNumber;
}
public Integer getScore() {
Integer score = 0;
for (Roll roll : rollList)
score += roll.getScore();
return score;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder("frame(");
builder.append(number).append(", ");
for (Roll roll : rollList)
builder.append(roll.toString());
builder.append(", ").append(getScore()).append(")");
return builder.toString();
}
public List<Roll> getRollList() {
return rollList;
}
}
그리 복잡한 클래스는 아니지만 비즈니스 로직이 들어있죠. 저걸 대상으로 테스트 코드를 생성해봤습니다.
10초 동안 돌려서 만들어 봤습니다. 콘솔에 뭔가가 찍히는데 무슨 의미인지는 모르겠고 마지막에 생성된 파일 목록이 나오는데 다섯개나 만들어져있습니다.
저 중에서 RandoopTest.java는 테스트 스위트 파일이고 네 개의 소스 파일이 테스트 코드를 담고 있습니다.
문제는... 대체 뭘 테스트 한 건지도 모르겠는 코드가 14000~2만 라인씩 생성된다는 겁니다. 이클립스가 막 죽으려고 버버버벅 거립니다.
그 중에서 젤 간단해 보이는 걸 몇 개 보여드릴까요?
대략 난감입니다. 테스트를 돌리면 전부 성공하긴 합니다.
그냥 웃음 밖에 안나옵니다. 크하하하하... 저 수 많은 코드와 녹색불은.. 무슨 의미가 있을까요?
'Good Tools' 카테고리의 다른 글
| 구글 토크 사전 (4) | 2009/01/05 |
|---|---|
| Word Cloud 만들어보기 (0) | 2008/12/08 |
| i구글의 날씨 위젯 좀 짱인듯.. (0) | 2008/11/28 |
| IntelliJ도 좋아보이는데.. 상용인게 안타깝네요 (4) | 2008/11/10 |
| SpringSource DM Server 이클립스 플러긴 (0) | 2008/11/10 |
| 대략난감 테스트 자동 생성기 Randoop (4) | 2008/11/07 |
| 데이터베이스 변경 관리 툴 LiquiBase (0) | 2008/11/04 |
| 맥용 녹음기 Sound Studio (0) | 2008/11/02 |
| Eclipse 3.4(Ganymede)에서 Subversive 설치가 순조롭지 않을 때 (2) | 2008/10/30 |
| Spring Webinar 우와.. (2) | 2008/10/29 |
| 맥OSX IRC 클라이언트 Colloquy (0) | 2008/10/29 |





