올해 목표

[잡담]
사용자 삽입 이미지

늦었지만 2009년 목표..
  • 아들 잘 키우기 - 밝고 건강하게만 자라다오~~
  • 게임 대박 - 올해는 만들고 있는 게임도 공개되고 꽤 바쁠듯..
  • 다이어트 - 5키로 감량하기..T_T
  • TDD 좀 더 잘 하기
  • 모든 패턴, 리팩토링을 자유롭게 사용할 정도로 되기
  • C#을 C++ 만큼 잘 쓰기
  • 일주일에 영문 아티클 5개 이상 읽기
  • 한달에 전공 외 서적 두 권 이상 읽기

2009/01/08 00:03 2009/01/08 00:03

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/273

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

  1. 건즈사랑 [2009/01/08 21:42]  [댓글주소]  [수정/삭제]  [댓글쓰기]

    안녕하세요. 이곳에서 마이에트 공식 블로그가 있다는 글을 보고 링크주소(blog.maiet.net)를 눌렀는데 페이지를 표시할 수 없다고 나오네요. 블로그가 없어진 건가요?

[로그인][오픈아이디란?]

새해 복 많이 받으세요..~

[잡담]
블로그를 찾아주신 모든 분들

내년에도 원하는 일 꼭 이루시고,
건강하시길 바랍니다.

새해 福 많이 받으세요..
2008/12/31 18:31 2008/12/31 18:31

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/272

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

[로그인][오픈아이디란?]

칼 위거스 방법론(상대적인 가중치를 사용한 우선순위 결정 방법)

[개발]
각각의 기능을 그것이 구현되었을 경우 발생할 이득의 관점에서 평가하고, 구현되지 않았을 경우 야기될 수 있는 손해 관점에서도 평가한다. 팀원들은 모두 각자 각각의 기능별로 이득과 손실에 대한 상대적인 평가치를 1점에서 9점 사이의 점수로 매기고 그 값을 모두 합산한다.


기능
상대적 이득상대적 손해가치가치 %추정치비용 %우선순위
경기 결과를 그래프 형태로 시각화하는 기능
8
6
14
42
32
53
0.79
사진을 업로드할 수 있게 하는 기능
9
2
11
33
21
34
0.97
선수 신상 정보 입력 기능
3
5
8
25
8
13
1.92
합계
20
13
33
100
61
100



위 표를 예로 들면, 경기 결과를 그래프 형태로 시각화하는 가능을 구현했을 때 발생하는 이득은 8점으로 계산되었다. 사진을 업로드하는 기능에 비해서는 약간 적은 이득을 갖는 것으로 평가되었지만, 선수들의 신상 정보를 입력할 수 있게 해 주는 기능에 비해서는 높은 이득을 가지는 것으로 평가되었다. 상대적인 손해 관점에서 보면, 사진 업로드 기능은 구현하지 않더라도 손해는 거의 없다. 한편, 경기 결과를 그래프 형태로 시각화 하는 기능이나 신상정보 입력 기능 같은 것들은 구현되지 않을 경우 손해가 제법 크다.

각각의 기능에 대해 상대적 이득 점수와 손해 점수를 합산하여 가치 난에 기입한다. 필요하다면 이득 점수와 손해 점수에 가중치를 적용할 수도 있다. 가치 난에 기입된 점수들을 점부 합하면(위 표의 경우 33) 모든 기능들을 전부 구현할 경우 얻을 수 있는 가치의 총합을 구할 수 있다. 가치% 란에는 각 기능의 가치 난에 기입된 값을 그 총합으로 나눈 값에 100을 곱하여 넣는데, 이 값으로 각 기능이 전체 가치에 기여하는 정도를 알 수 있다.

추정치라는 이름의 열에는 스토리 점수나 이상적 작업일 단위로 평가한 추정치를 기입한다. 여기에 기입된 값을 추정치 총합(위 표의 경우 61)으로 나누어 100을 곱한 값을 비용%란에 기입한다.

마지막 열인 우선순위 부분에는 가치%열에 기입된 값을 비용%열에 기입된 값으로 나눈 결과를 기록한다. 그 값이 클수록 높은 우선순위를 갖게 된다. 구현에 투자하는 노력 대비 가치가 더 큰 것으로 평가되는 것이기 때문이다. 위 표의 경우, 신상 정보 입력 기능이 가장 높은 우선순위를 갖는 것으로 나와 있다. 가치 측면으로 보면 경기 결과를 그래프 형태로 시각화 하는 기능에 비해 1/2 정도의 가치밖에는 안 되지만, 비용 면에서 보면 1/4이다. 그렇기 때문에 가장 높은 우선순위를 가지게 된 것이다. 비용 대비 가치 비율이 가장 좋기 때문이다.

----

이 방법으로 우선순위를 매겨보니 확실히 좀 더 객관적으로 우선순위를 정할 수 있게 된 것 같다. 개인적으로 1순위라고 생각했던 것이 최하위권으로 랭크되고 실제로 개발하는 동안 최하위권이 합리적이었던 경우도 있었다. 우선순위 정하는 방법도 간단해 한 달 일정 정도의 기능들의 우선순위를 정하는데 30분도 안걸린다. (위 표를 엑셀로 만들어놓고 쓰면 좋음)

우선순위를 결정하는 좀 더 자세한 내용을 알고 싶다면 다음 책을 추천한다. 위 내용도 거의 이 책을 보고 베꼈음(...)

사용자 삽입 이미지



2008/12/28 13:49 2008/12/28 13:49

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/271

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

[로그인][오픈아이디란?]

몇가지 C++용 Mock Framework

[개발]


몇가지 Mock Framework를 써보니.. GoogleMock이 짱..-_-b
2008/12/28 12:40 2008/12/28 12:40

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/270

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

[로그인][오픈아이디란?]

GoogleMock

[개발]
그동안 c++용 테스트 프레임워크로 UnitTest++를 추천하곤 했었는데 이제부턴 GoogleTest를 추천해야겠다. 바로 GoogleMock 프레임워크가 나왔기 때문..

UnitTest++에는 Mock 객체에 대한 지원이 아무것도 없어 Mock 객체를 만드는 것이 여간 귀찮은 게 아닌데, GoogleMock을 사용하면 아래처럼 쉽게 Mock 객체를 만들어 테스트할 수 있다.

Mock 객체는 이런 식으로 만들고

class MockTurtle : public Turtle {
  ...
  MOCK_METHOD0(PenUp, void());
  MOCK_METHOD0(PenDown, void());
  MOCK_METHOD1(Forward, void(int distance));
  MOCK_METHOD1(Turn, void(int degrees));
  MOCK_METHOD2(GoTo, void(int x, int y));
  MOCK_CONST_METHOD0(GetX, int());
  MOCK_CONST_METHOD0(GetY, int());
};


이런 식으로 Mock객체의 기대값을 넣어 테스트할 수 있다.

using testing::AtLeast;
using testing::Return;

TEST(PainterTest, CanDrawSomething) {

  MockTurtle turtle;
  EXPECT_CALL(turtle, PenDown())
      .Times(AtLeast(1));

  EXPECT_CALL(turtle, GetX())
    .WillOnce(Return(100))
    .WillOnce(Return(200))
    .WillOnce(Return(300));

  Painter painter(&turtle);

  EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
}




우리 프로젝트도 GoogleTest로 이주하면 좋겠으나 그동안 만들어놓은 테스트 코드가 너무 많아 엄두가 안난다. 팀원들 겨우 적응했는데 새로 적응하는 것도 쉽지 않을테고...

여러모로 안타까움..;_;

관련 링크
2008/12/12 19:10 2008/12/12 19:10

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/269

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

[로그인][오픈아이디란?]