Whiteship's Note


대략난감 테스트 자동 생성기 Randoop

Good Tools : 2008. 11. 7. 18:01


http://people.csail.mit.edu/cpacheco/randoop/1.2/doc/userman.php

처음 보고는 이야.. 아주 별에 별 도구가 다 있구나. 생각을 하고 과연.. 잘 만들어 줄까?? 라는 기대반 호기심 반으로 들려봤습니다.

테스트를 작성할 대상이 되는 클래스는 예전에 사부님이 시켜주신 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;
    }

}
 
그리 복잡한 클래스는 아니지만 비즈니스 로직이 들어있죠. 저걸 대상으로 테스트 코드를 생성해봤습니다.

10초 동안 돌려서 만들어 봤습니다. 콘솔에 뭔가가 찍히는데 무슨 의미인지는 모르겠고 마지막에 생성된 파일 목록이 나오는데 다섯개나 만들어져있습니다.


저 중에서 RandoopTest.java는 테스트 스위트 파일이고 네 개의 소스 파일이 테스트 코드를 담고 있습니다.

문제는... 대체 뭘 테스트 한 건지도 모르겠는 코드가 14000~2만 라인씩 생성된다는 겁니다. 이클립스가 막 죽으려고 버버버벅 거립니다.

그 중에서 젤 간단해 보이는 걸 몇 개 보여드릴까요?


대략 난감입니다. 테스트를 돌리면 전부 성공하긴 합니다.


그냥 웃음 밖에 안나옵니다. 크하하하하... 저 수 많은 코드와 녹색불은.. 무슨 의미가 있을까요?


top

  1. Favicon of http://pragmatic.kr BlogIcon 김성안 2008.11.07 20:10 PERM. MOD/DEL REPLY

    이 도구는 처음 보지만 테스트 자동 생성은 의미(semantic)을 파악할 수 없기 때문에 대부분 커버리지를 높이는 목적으로 데이터를 자동생성하면서, 경계값 테스트라던지 테스팅 이론에 나오는 부분에 집중 합니다.

    이게 자바에서는 상당히 별 의미 없고 노력에 비해 얻는게 적은데 하드웨어 쪽이나 이런데 내려가면 중요한 얘기가 되더라고요.

    아니면 제출용 자료에서 테스트 커버리지를 요구할 때 살짝 이용해도 되겠군요.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.11.07 22:13 PERM MOD/DEL

    네.. 저는 하드웨어쪽은 전혀 모르기 때문에 어떨지 몰겠습니다. 제가 아는 선에서는 저 툴을 이용해서 어떤 긍정적인 효과를 볼 수 있을지는 잘 상상이 안 되네요. ^^;

  2. Favicon of http://toby.epril.com BlogIcon 토비 2008.11.07 21:18 PERM. MOD/DEL REPLY

    흠... 무작정 높은 커버리지만 요구하는 데서 살짝쿵 써먹을 수 있겠네.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.11.07 22:15 PERM MOD/DEL

    네;; 허허헐... 피상성을 중요시 한다면 그럴 수 있겠네요.

Write a comment.


아이고 머리야...

모하니?/Thinking : 2007. 4. 3. 23:30


사용자 삽입 이미지

hda3 파티션이 꽉찼습니다.

요즘 위키와 블로그가 이상해서 서버에 들어가서 새로 만들어서 테스트를 해보려고 DB를 만들려고 하는데 에러가 납니다.

ERROR 1006 (HY000): Can't create database 'testdatabse' (errno: 28)

에러 코드 1006 이라고 읽어야 하는건지 28이라고 읽어야 하는건지 암튼 참 성의 없는 에러 메시지는 구글신을 찾아가게 만듭니다.

검색 결과 : http://archives.neohapsis.com/archives/mysql/2006-q4/0877.html
눈에 띄는 건 딱 한줄 "You need more disk space."

그래서 df를 쳐보게 된거죠.

그럼 DB와 저 파티션이 무슨 관계인가.. DB 파일 넣는 디렉토리가 어딘가...서버에 xampp를 설치해 뒀기 때문에 xampp안에 들어있습니다. xampp는 /opt/lampp 에 들어있습니다.

즉... DB가 저 파티션에 있다는 거죠.. 이를 어쩐댜;; DB 설정파일에서 폴더 바꿔주고 그 쪽으로 폴더를 옮겨주면 되나요? 뭔가 잘못될까봐 안해봤는데요. 흠.. 그냥 해볼까요? 흐흣.

일단 오늘은 머리가 아파서 일찍 자고 내일 해봐야겠네요. :)

'모하니? > Thinking' 카테고리의 다른 글

Chance  (4) 2007.06.12
폼 나는 회의실 빌리기 도전기  (0) 2007.06.05
살아야 한다면...  (0) 2007.05.29
Epril 제 1회 스프링 공개 세미나 참가 후기  (2) 2007.04.21
너(중간고사)랑 놀기 싫어!  (0) 2007.04.19
아이고 머리야...  (4) 2007.04.03
디버깅 7시간 30분  (2) 2007.03.27
에러 삼매경  (2) 2007.03.23
공부가 안 될 때..  (6) 2007.03.14
아.. 깜짝아..  (0) 2007.03.12
개강한지 일주일이 되었군요.  (2) 2007.03.09
top

  1. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2007.04.04 00:39 PERM. MOD/DEL REPLY

    힘내세요~!ㅎ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.04.04 08:42 PERM MOD/DEL

    ㅇㅇ~!

  2. Favicon of http://gerions.egloos.com BlogIcon 윤걸 2007.04.04 13:10 PERM. MOD/DEL REPLY

    으음.. 예전에는 mysql 데이터만 옮겼었던거 같은데... 혹시 모르니까 mysqldump 로 풀 백업부터 받아놓고 옮겨봐~~ ㅎㅎ 아마도 될꼬얌

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.04.04 18:36 신고 PERM MOD/DEL

    후아.. 섯불리 손댔다가 엄청 고생했네요.ㅋㅋ;

Write a comment.