프로젝트 xxx에 적용하고 싶은 개발방법

64
1 Copyright © 2009 Xener Systems, Inc. All Rights Reserved. 프프프프 XXX 프 프프프프 프프 프프프프 프프프 2010/04/21 [email protected]

Upload: dohyoung-rim

Post on 26-May-2015

2.244 views

Category:

Technology


2 download

DESCRIPTION

소프트웨어 개발 프로젝트 XXX에 적용하고 싶은 개발 방법을 기술. 행복하게 개발하기가 목적.

TRANSCRIPT

Page 1: 프로젝트 Xxx에 적용하고 싶은 개발방법

1Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

프로젝트 XXX 에 적용하고 싶은 개발방법

임도형2010/04/21

[email protected]

Page 2: 프로젝트 Xxx에 적용하고 싶은 개발방법

2Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

본 문서의 목적

• 프로젝트 XXX 를 진행할 때 적용할 개발 방법을 제안합니다 .

Page 3: 프로젝트 Xxx에 적용하고 싶은 개발방법

3Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

적용하고자 하는 방법의 목적

• 모두가 행복하기 위하여– 개발자

• 개발 다운 개발– 관리자

• 일정 잘 맞추고 , 개발자 관리 좋고 , 유지보수 좋고

– 회사• 잘 팔리고 , 1 인당 매출액 좋고 , 유지보수 비용

적고– 고객

• 저렴한 가격에 , 성능 / 기능 좋고 , 기능 개선과 버그 픽스 빠르고 .

Page 4: 프로젝트 Xxx에 적용하고 싶은 개발방법

4Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

행복하기 위한 각 관련자의 역할

• 개발자– 최대한 제대로 개발할 수 있도록 노력

• 관리자– 개발자가 제대로 개발할 수 있도록 지원– 회사와의 일정 조율

• 회사– 적절한 일정 제시

Page 5: 프로젝트 Xxx에 적용하고 싶은 개발방법

5Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

실천 항목

Page 6: 프로젝트 Xxx에 적용하고 싶은 개발방법

6Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

실천 항목

• 분석 / 설계 시에 팀원의 참여• 충분한 분석 / 설계• GUI 개발도 설계를 기반으로• 충분한 테스트 케이스• 자동화된 빌드 , 테스트• 가독성을 최상의 품질 요소로• 1 일 빌드 , 자동 테스트 실행• 모든 산출물의 리뷰• scrum 적용

– 진행 상황에 따른 일정 조절 및 개발 범위 조정– 팀원이 선택 가능한 업무 배분– 계획과 회고에 따른 시스템 개선

Page 7: 프로젝트 Xxx에 적용하고 싶은 개발방법

7Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

분석 / 설계 시에 팀원의 참여

Page 8: 프로젝트 Xxx에 적용하고 싶은 개발방법

8Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

잘 팔리는 제품 .

• 품질 속성만 만족하면 잘 팔릴까– 기능 , 성능 , 안정성 , 유지보수성 , 확장성

• 잘 팔릴 만한 제품을 고민하는 것은 누구의 몫 ? 기획자 ?

• 언제나 기획은 불충분하다 . 불충분할 수 밖에 없다 .

• 소프트웨어에 기획자 + 개발자의 구도가 적당할까 ?

Page 9: 프로젝트 Xxx에 적용하고 싶은 개발방법

9Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가치 창조하기

• 고객이 감동할 수 있는 가치를 찾아내야 한다 . 제품에 불어넣어야 한다 .

• 개발팀에서 해야 한다 .

• ideation 을 통해 구체화 된다 . 상상하고 , 끄집어 내고 , 검토하고 , 정의하고 .

• 프로젝트 관련자 모두가 참여하는 것이 바람직하다 .

• 이러한 ideation 은 분석단계에서 진행되며 , 작업 결과는 보통 요구사항의 형태로 정리된다 .

• 즉 요구사항정의 시에도 팀원 전원의 참여가 필요하다 .

Page 10: 프로젝트 Xxx에 적용하고 싶은 개발방법

10Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

소프트웨어 개발에서의 생각

• 개발에서 생각하는 것은 분석 / 설계에 관련된 것이다 .

• 코딩은 단지 그 결과를 코드로 구현하는 것 뿐이다 .

• 생각을 하게 하지 않는 개발업무는 개발자의 의욕을 꺽는다 . 개발자를 생각하게 하여야 한다 .

Page 11: 프로젝트 Xxx에 적용하고 싶은 개발방법

11Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

분석 / 설계의 구분

• 3 가지로 구분된다 .– 시스템 구조 분석 / 설계– 기반 분석 / 설계– 기능 컴퍼넌트 분석 / 설계

Page 12: 프로젝트 Xxx에 적용하고 싶은 개발방법

12Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

시스템 구조 분석 / 설계

• 각 기능을 제공할 컴퍼넌트의 정의와 컴퍼넌트 간의 관계 정의

• 각 컴퍼넌트들 마다의 기능 요구사항을 정의하고 , 각 컴퍼넌트의 인터페이스까지 정의한다 .

• 기술적인 측면 보다는 시스템 전체적인 흐름을 이해하기 위하여 팀원 모두가 참여하는 것이 바람직하다 .

• 이 단계를 참여하지 못한 개발자는 전체적인 시스템을 이해하기 어렵다 .– 업무의 백업이 어렵다 .– 업무의 선택이 어려워 진다 .– 지엽적인 개발이 될 수 밖에 없다 .

Page 13: 프로젝트 Xxx에 적용하고 싶은 개발방법

13Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

기반 분석 / 설계

• 일반적인 시스템에서 필요로 하는 기능을 제공한다 .– 예 : 컴퍼넌트 로딩 , 로그 , 통신 방법

• 성능에 많은 영향을 끼친다 .

• 기술적인 난이도가 있다 .

• 타 컴퍼넌트의 개발에 기반이 되며 , 선행되어야 한다 .

• 보통 Application Server, framework 이 대신하기도 한다 .

• 모든 팀원이 참여하기 곤란하다 .

Page 14: 프로젝트 Xxx에 적용하고 싶은 개발방법

14Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

기능 컴퍼넌트 분석 / 설계

• 구조 설계에서 정의한 각 컴퍼넌트 자체를 구현하기 위한 것 .

• 특정 업무 담당자가 진행한다 .

• 구현할 기능과 타 컴퍼넌트와의 인터페이스는 구조 설계에서 정의되어 있다 .

Page 15: 프로젝트 Xxx에 적용하고 싶은 개발방법

15Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

실 적용 사례

• 6 개월 일정의 프로젝트에서 3 개월을 분석 / 설계로 진행했으며 , 코딩 , 테스트 , 패키징에 각각 1 개월씩이 소요됨 .

• 코딩 1 개월 때는 고민할 사항 없이 깔끔하게 진행되었고 , 이후 테스트 , 패키징에서도 문제가 발생하지 않았다 .

• 설계된 사항이 크게 변경되는 것이 없었으며 , 이러한 이유로 프로젝트 완료와 유시보수 시에도 문서가 살아있었다 .

• 버그픽스는 설계와 관계없는 것이고 , 기능 추가는 설계서에 추가하면 되고 .

Page 16: 프로젝트 Xxx에 적용하고 싶은 개발방법

16Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

충분한 분석 / 설계

Page 17: 프로젝트 Xxx에 적용하고 싶은 개발방법

17Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

분석 / 설계와 코딩

• 개발의 실체는 고민이다 .

• 고민 과정이 분석 / 설계이고 , 코딩은 그 구현일 뿐이다 .

• 코딩 시에 고민하게 되면 삽질이 필수적이다 .

• 코딩 시에는 고민을 하지 않아야 한다 . 최대한 지양하여야 한다 .

• 어차피 고민해야 하는 것을 분석 / 설계에서 마무리하고 코딩으로 들어가야 한다 .

• 모든 분석 / 설계는 리뷰를 통해 구현 전에 검토하는 것을 원칙으로 한다 .

Page 18: 프로젝트 Xxx에 적용하고 싶은 개발방법

18Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

GUI 개발도 설계를 기반으로

Page 19: 프로젝트 Xxx에 적용하고 싶은 개발방법

19Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

GUI 개발의 특징

• GUI 에 대한 평가가 제품 전체에 대한 평가로 적용되기도 한다 .

• 까다로운 사용자 편의성을 제공해야 한다 .

• 또한 디자인적인 요소도 포함되어야 하기에 단순 개발역량만으로는 안된다 .

• 그러나 개발 과정 자체는 단순 노가다에 가깝다 .– 개발 자동화도 어렵다 .– 테스트 자동화도 어렵다 .

• 무척 중요하지만 어렵고도 지치게 한다 .

Page 20: 프로젝트 Xxx에 적용하고 싶은 개발방법

20Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

GUI 의 분석과 설계

• 가장 문서화하기 힘든 부분이다 .

• 더불어 가장 삽질을 많이 하는 부분이다 . 또한 삽질의 크기가 큰 부분이다 . 그렇기 때문에 설계가 더더욱 중요하다 .

• 설계된 결과의 형태는 중요하지 않다 . 종이에 그리건 , 툴로 그리건 .

• 중요한 것은 설계가 되어야 하고 , 검토 후에 구현되어야 한다는 것이다 .

Page 21: 프로젝트 Xxx에 적용하고 싶은 개발방법

21Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

설계의 의미

• 개발중의 고민이 설계이다 .

• 코딩하기 전에 고민을 충분히 하지 않으면 , 코딩 중에 뒤엎기가 발생한다 .

• GUI 개발도 코딩이며 , 역시 충분히 고민해 놓지 않으면 뒤엎기가 발생한다 .

• GUI 특징으로 인해 설계는 그림으로 그려져야 하고 , 이는 다른 부분의 설계보다 손이 많이 간다 .

• 하지만 그렇더라도 설계가 충분히 되어야 한다 . 설계를 뒤엎는 것이 코드를 뒤엎는 것보다 낳다 .

• 설계된 결과는 상상할 필요 없이 눈으로 확인되어야 한다 .

Page 22: 프로젝트 Xxx에 적용하고 싶은 개발방법

22Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

GUI 설계 참여자

• GUI 는 단지 view 가 아니다 . 시스템 전체의 기능을 눈으로 보여준다 .

• GUI 개발자도 시스템 전체를 이해해야하고 , 타 부분 개발자도 GUI 를 파악하고 있어야 한다 .

• 전체 시스템의 이해를 포기하는 순간 , 생각을 배제하는 개발자 즉 코더임을 자청하는 것이다 .

• GUI 의 이해를 포기하는 순간 , 전체 시스템 파악을 포기하는 것이다 .

Page 23: 프로젝트 Xxx에 적용하고 싶은 개발방법

23Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

테스트 케이스

Page 24: 프로젝트 Xxx에 적용하고 싶은 개발방법

24Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

why must 테스트 케이스

• 영향도 분석은 실제적으로 불가능하다 . 대충하기도 무척 어렵다 .

• 특정 부분을 변경 했을 때 기존의 것이 모두 제대로 동작하는지를 확인하는 유일한 방법은 충분한 테스트 케이스 뿐이다 . 요걸 회귀테스트라 한다 .

• 수정에 의한 감추어진 버그는 , 테스트 케이스가 없다면 몇 달 뒤에 고객이 찾아 줄 것이다 .

• 방금 수정한 것에 의한 버그를 테스트 케이스가 잡아준 경우와 , 몇 달 뒤에 고객이 발견하여 등록된 경우 둘 사이의 버그 픽스의 공수 , 난이도는 비교가 안된다 .

Page 25: 프로젝트 Xxx에 적용하고 싶은 개발방법

25Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

어느 정도 양의 테스트 케이스

• 최소한 본 코드의 양과 동일한 라인 수의 .

• 최소한 작업한 본 코드의 메소드 수와 동일한 개수의 테스트 케이스 개수 .

• 최소한 본 코드의 사용예를 볼 수 있는 .

• 컴퍼넌트 단위의 테스트 케이스는 충분히 꼼꼼하게 .

• 시스템 단위의 테스트 케이스는 QA 팀에서도 활용할 수 있게 . 혹은 QA 팀에서 실행하는 테스트 항목 수 정도로 . 혹은 QA 팀에서 테스트 케이스를 직접 작성할 수 있도록 .

Page 26: 프로젝트 Xxx에 적용하고 싶은 개발방법

26Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

자동 실행

• 모든 테스트 케이스는 한방에 실행 될 수 있어야 한다 .

• 사람 손으로 일일이 실행하는 테스트 케이스는 제대로 활용되지 못한다 . GUI 테스트는 그래서 더 어렵고 허술하다 .

• GUI 와 같이 자동실행하기 어렵더라도 , 최선의 방법을 찾아내야 한다 .

Page 27: 프로젝트 Xxx에 적용하고 싶은 개발방법

27Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

테스트 케이스와 생산성

• 테스트 케이스 작성 역시 공수가 필요하다 .

• 임도형이 파악하는 구현 시의 공수 증가는 1.5 배 정도 .

• 임도형이 파악하는 유지보수 시의 공수 이득은 10 배 정도 .

• 개발 비용과 유지보수 비용을 1:2 로 했을 때– 비적용 공수 : 3 ( = 1+2 )– 적용 공수 : 1.7 ( = 1*1.5 + 2*0.1 )

• 테스트 케이스 작성을 먼저 할 경우 해당 로직의 사용예를 먼저 구현해 보는 효과가 있어서 , 삽질을 많이 방지하게 한다 .

• 구현 시의 공수는 유지보수 시에 발견될 버그를 구현 시에 픽스하는 것으로 생각할 수 있다 .

Page 28: 프로젝트 Xxx에 적용하고 싶은 개발방법

28Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

테스트 케이스와 유지보수

• 타인이 개발한 부분을 파악할 때 , 살펴 보기 가장 좋은 부분은 테스트 케이스이다 .

• 컴퍼넌트 기반의 코드는 그 진입점을 찾기도 어렵다 .

• 테스트 케이스 자체가 코드의 사용 예가 된다 .

• 테스트 케이스 코드에는 대상 코드가 사용되는 입력값과 출력값의 예도 있다 .

• 새로운 기능을 추가하거나 버그를 수정하기 위해서는 로직을 전부 파악하고 목적에 맞는 샘플을 작성해야 한다 . 기존에 테스트 케이스가 있으면 , 이를 참조하기 넘 좋다 .

Page 29: 프로젝트 Xxx에 적용하고 싶은 개발방법

29Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

테스트 케이스와 리팩토링

• 리팩토링은 기능은 그대로 유지한 채 내부의 구조를 개선하는 것이다 .

• 시스템이 커질 수록 리팩토링의 필요성은 절대적이다 .

• 테스트 케이스가 없이는 리팩토링은 불가능하다 . 기존의 기능이 그대로인 것을 어떻게 보장하는가 .

• 클래스의 이름 변경 , 엔티티의 이름 변경과 같은 사소한 리팩토링 조차도 테스트 케이스 없이는 많은 손이 가고 힘들다 .

• 테스트 케이스 없이는 구조 변경이나 뒤엎기는 큰 비용을 감수해야 한다 .

Page 30: 프로젝트 Xxx에 적용하고 싶은 개발방법

30Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

그 외 효용

• 만약 어떤 컴퍼넌트가 테스트 케이스를 작성하기 어려운 경우라면 , 시스템의 구조가 적절하지 않은 것이다 .

• 테스트 케이스 작성이 용이하도록 하다보면 시스템의 구조가 좋아진다 . 컴퍼넌트 간의 종속성이 줄어든다 .

Page 31: 프로젝트 Xxx에 적용하고 싶은 개발방법

31Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

실 적용 사례

• 약 30 개의 컴퍼넌트 , 400 개의 클래스로 이루어진 시스템에 약 2000 개의 테스트 케이스가 있었다 .

• 각 컴퍼넌트는 개별적으로 테스트 가능하였다 .

• 릴리즈 이후 1년 간 최대 미 처리 버그수가 5 개를 넘지 않았다 . 유지 보수에 들어간 공수가 미미 . 별도의 유지보수 인력 배정 불필요 .

• 유지 보수 시에 어느 부분을 수정 후에 어느 테스트 케이스에서 실패하면 안도감이 느껴진다 . 무엇을 선택할 것인가 ?– modify & pray– cover & improve

• 고의적으로 삽입된 버그의 검출률이 80% 이상이 되도록 유지되었다 .

Page 32: 프로젝트 Xxx에 적용하고 싶은 개발방법

32Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가독성

Page 33: 프로젝트 Xxx에 적용하고 싶은 개발방법

33Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가독성과 유지보수성

• 가장 좋은 코드는 읽기 쉬운 코드이다 .

• 유지보수 ?– 기능을 추가하거나 버그를 픽스하는 것 .

• 주석을 읽어야 하거나 , 문서를 읽어야 하거나 , 로직을 파악하기 힘들면 유지보수가 힘들어 진다 .

• 읽기 어려운 코드라면 주석을 잘 달거나 , 문서를 잘 만들거나 별도의 노력을 해야 한다 . 하지만 잘 안 된다 . 이건 경험적 진리이다 .

• 가독성이 떨어지면 , 적지 않은 경우 , 다시 개발한다 .

Page 34: 프로젝트 Xxx에 적용하고 싶은 개발방법

34Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가독성과 성능

• 일반적으로 가독성이 좋은 코드는 실행 시에 오버로드를 요구한다 . ( 예 : 별도로 뽑은 메소드 , 인터페이스 사용 )

• 성능 문제는 튜닝으로 처리해야 한다 .

• 튜닝은 비정규화 작업이다 . 정형화된 코드를 비정형화 하는 것은 쉽지만 , 비정형화된 것을 정형화하는 것은 무척이나 어렵다 .

• 전체 시스템의 성능에서 특정 부위가 좌우하는 비중을 가늠하는 것은 거의 정확하지 못하다 .

• 가독성 없는 코드를 정리하는 것은 무척이나 어렵지만 , 가독성 좋은 코드를 성능 튜닝하는 것은 할만하다 .

Page 35: 프로젝트 Xxx에 적용하고 싶은 개발방법

35Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가독성과 생산성

• 가독성 향상으로 인한 개발 시의 생산성 저하는 미미하다 .– 타이핑 시간이 생산성에 영향을 주지 않는다 .

• 그보다는 유지보수성이 좋아지기 때문에 전체적인 생산성은 좋아진다 .

Page 36: 프로젝트 Xxx에 적용하고 싶은 개발방법

36Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

가독성을 위한 실천 항목

• 단어의 축약 엄금 .– 축약은 가독성의 상극이다 .

• 클래스명 , 메소드명 , 변수명을 확실하게 .– 이름 짓기가 어렵다면 개념이 불확실한 것이다 .

설계가 부족한 것이다 .

• 주석 지양 .– 코드 자체로 이해가 되도록 한다 . 주석은 이런

코드가 될 수 밖에 없는 사항을 설명하거나 , 입출력의 예를 명시할 때만 사용한다 .

• 하나의 블록은 50 line 이 넘지 안게

• indent 는 3 개까지만

Page 37: 프로젝트 Xxx에 적용하고 싶은 개발방법

37Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

자동화된 빌드 / 테스트

Page 38: 프로젝트 Xxx에 적용하고 싶은 개발방법

38Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

자동화

• 머리로 생각하는 개발에 집중하게 하자 .

• 반복되는 것 , 기계적인 업무의 것들을 자동화 하자 .

• 빌드 자동화– 빌드 스크립트 .– daily build

• 테스트 자동화– 모든 테스트는 사람이 손이 아닌 한방에 가능하게 .

• 자동화를 위한 툴이나 환경을 위한 개발이 필요할 수도 있다 . 이런 것도 개발이며 , 업무에 포함된다 .

Page 39: 프로젝트 Xxx에 적용하고 싶은 개발방법

39Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

일일 빌드

• 보통 CI(Continuous Integration) 이라고도 한다 .

• 프로젝트 내내 빌드되고 테스트 성공하는 것을 보장한다 .

• 이것이 없이는 빌드성공하고 테스트 성공하는 것에 대한 강제성이 없어진다 .

• 빌드가 안되거나 테스트가 실패한 코드는 타 팀원의 업무를 진행하지 못하게 한다 .

• 목숨처럼 지켜야 하는 것 .

Page 40: 프로젝트 Xxx에 적용하고 싶은 개발방법

40Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

리뷰

Page 41: 프로젝트 Xxx에 적용하고 싶은 개발방법

41Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

리뷰 방법

• 모든 업무 결과를 리뷰한다 .

• 정규적 혹은 비정규적으로 진행한다 . 대신 2주 이상을 넘기면 안된다 .

• 하나의 업무에 대한 리뷰 시간은 30 분 정도로 하고 , 최대 1 시간을 넘지 않는다 .

• 프로세스 상에 언급된 산출물의 경우 리뷰 자체를 업무로 진행한다 .

Page 42: 프로젝트 Xxx에 적용하고 싶은 개발방법

42Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

코드 리뷰 대상

• 리뷰 대상은 문서 , 테스트 케이스 , 본 코드이다 .

• 문서– 외부와의 인터페이스– 그렇게 로직을 구성한 이유– 이외의 모든 고민이 담겨 있어야 한다 .

• 테스트 케이스– 중점 리뷰 사항– 테스트 케이스 양의 적절함– 테스트 케이스 안의 코드 샘플의 적절함

• 본 코드– 일반적인 가독성– 상식적인 품질

Page 43: 프로젝트 Xxx에 적용하고 싶은 개발방법

43Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 적용

Page 44: 프로젝트 Xxx에 적용하고 싶은 개발방법

44Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

스트럼의 개요

• 한달 정도의 주기로 개발을 진행

• 각 주기별로 계획 , 실천 , 회고를 반복 .

• 각 주기별로 구현할 개발 항목을 선정

• 개발자가 개발할 항목을 선택

• 매일 마다 진행 사항을 공유

• 자세한 사항은 별도로 소개

Page 45: 프로젝트 Xxx에 적용하고 싶은 개발방법

45Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

효과

• 일정 예측이 용이해 진다 .• 일정 조정이 용이해 진다 .• 팀원이 원하는 업무를 선택할 수 있다 .• 팀 개발 환경 자체의 개선이 가능하다 .• 업무 백업이 자연스럽게 된다 .

Page 46: 프로젝트 Xxx에 적용하고 싶은 개발방법

46Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 효과 - 일정 예측이 용이해 진다 .

• 스토리 포인트를 사용하여 각 업무별 크기를 결정한다 .

• 스토리 포인트– 관련자들이 모두 모여 크기를 투표한다 .– 최대치와 최소치를 제시한 자가 생각을 설명한다 .– 만장일치 될 때까지 반복한다 .

• 소수가 어렴풋이 산정한 일정보다는 정확하다 .

• 산정된 업무의 크기와 실제 진행된 크기를 가지고 팀의 개발 속도를 구할 수 있다 .

• 첫 번 째 주기 이후에는 이 개발 속도를 가지고 진행할 수 있는 업무 범위를 비교적 정확하게 추정할 수 있다 .

Page 47: 프로젝트 Xxx에 적용하고 싶은 개발방법

47Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 효과 - 일정 조정이 용이해 진다 .

• 돌발성 업무가 발생한 경우 초과되는 스토리 포인트만큼의 업무를 우선순위에 따라 배제한다 .

• 이미 빡박한 일정에서 끼어드는 돌발성 업무에 합리적으로 대처할 수 있다 .

• 관리자에게 중요한 것은 어느 시점에서 특정 업무의 완료 여부를 예측할 수 있는 지이다 .

Page 48: 프로젝트 Xxx에 적용하고 싶은 개발방법

48Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 효과 - 팀원이 원하는 업무를 선택할 수 있다 .

• 업무를 팀장의 결정에 의한 할당이 아닌 , 나열된 업무 중에 개발자가 선택하게 한다 .

• 이러한 점은 개발자 동기 부여에 크게 영향을 끼친다 .

Page 49: 프로젝트 Xxx에 적용하고 싶은 개발방법

49Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 효과 - 팀 개발 자체의 개선이 가능하다 .

• 계획 , 실행 , 회고의 과정을 통하여 보다 합리적이고 , 효율적이고 , 참여할 수 있는 시스템으로 개선할 수 있다 .

• 소프트웨어 개발의 가장 중요한 요소는 개발자이다 .

• 개발자의 동기 부여가 프로젝트 성공을 결정한다 .

Page 50: 프로젝트 Xxx에 적용하고 싶은 개발방법

50Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

SCRUM 효과 - 업무 백업이 자연스럽게 된다 .

• 특정 분야의 업무는 특정 개발자가 담당하는 것이 아니라 , 희망자가 선택하게 되어 자연스럽게 업무의 백업이 이루어진다 .

• 팀 전체의 업무를 알게 된다 .

• 기술적 기반이 다른 경우가 아니라면 자연스럽게 업무를 순환할 수 있다 .

Page 51: 프로젝트 Xxx에 적용하고 싶은 개발방법

51Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

위험성

Page 52: 프로젝트 Xxx에 적용하고 싶은 개발방법

52Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

위험성 항목들

• 지체되는 일정• 팀원의 무관심• 미검증 기술

Page 53: 프로젝트 Xxx에 적용하고 싶은 개발방법

53Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

위험성 – 지체되는 일정

• 분석과 설계에 팀원 모두가 참여할 경우 진행이 늦어진다 .

• 방안– 분석 / 설계 단계의 기간을 충분히 갖는 것이지 전체

프로젝트가 지연되는 것이 아니다 .– 더욱이 유지보수가 쉬워진다 .

Page 54: 프로젝트 Xxx에 적용하고 싶은 개발방법

54Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

위험성 - 팀원의 무관심

• 팀원이 무관심할 경우 일반적인 개발방법보다 프로젝트 진행이 위험할 수 있다 .

• 방안– 능동적으로 개선할 수 있는 것으로 의욕을

고취하여야 한다 .

Page 55: 프로젝트 Xxx에 적용하고 싶은 개발방법

55Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

위험성 – 미검증 기술

• 구현 단계에서 미검증된 기술의 문제로 인해 프로젝트가 위험하게 될 수 있다 .

• 방안– 분석 / 설계 기간 중에 검증하거나 대안을 찾는다 .

Page 56: 프로젝트 Xxx에 적용하고 싶은 개발방법

56Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

실천 항목 요약

Page 57: 프로젝트 Xxx에 적용하고 싶은 개발방법

57Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

요약된 실천 항목

• 분석 / 설계에 중점

• 자동화

• 테스트 케이스

• 리뷰

• SCRUM

Page 58: 프로젝트 Xxx에 적용하고 싶은 개발방법

58Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

상상

Page 59: 프로젝트 Xxx에 적용하고 싶은 개발방법

59Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

구현 시의 개발자의 모습

• 아침에 출근하여 daily build 가 잘못된 것이 있는지 확인한다 . 있으면 이를 최우선으로 처리한다 .

• standup 미팅에 참석하여 팀의 진행 사항을 파악한다 . 고민되고 있다는 타인의 문제에 대해서 도움을 주어야 겠다고 언급 . 나의 진행 상황은 별 특이사항이 없어서 패스한다 .

• 새로운 컴퍼넌트 구현의 업무를 선택한다 .• 구현할 컴퍼넌트에 대한 정의를 시스템 설계서에서 확인한다 .• 어떻게 구현할 지를 이리 저리 고민하고 , 그 결과를 문서로

작성한다 .• 그 문서를 리뷰 받는다 .• 정의된 인터페이스를 구현한 껍데기 컴퍼넌트를 코딩한다 .• 이를 사용한 테스트 케이스를 작성한다 .• 껍데기 컴퍼넌트의 로직을 완성하고 , 테스트 케이스가

성공함을 확인한다 .• 전체 테스트 케이스가 동작함을 확인한다 .• 커밋하고 로그를 남긴다 .

Page 60: 프로젝트 Xxx에 적용하고 싶은 개발방법

60Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

유지보수 시의 개발자 모습

• 아침에 출근하여 daily build 의 결과를 확인한다 .• standup 미팅에서 버그를 업무로 선택한다 .• 대상 버전의 소스를 다운로드한다 .• 버그를 재현하는 테스트 케이스를 작성한다 .• 작성한 테스트 케이스가 성공하도록 본 코드를 수정한

다 .• 기존 모든 테스트 케이스가 성공하는 것을 확인한다 .• 본 코드와 테스트 케이스를 커밋하고 버그 트랙킹

시스템에 메시지를 남긴다 .

Page 61: 프로젝트 Xxx에 적용하고 싶은 개발방법

61Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

기타

Page 62: 프로젝트 Xxx에 적용하고 싶은 개발방법

62Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

개발 환경 안 for Java

• Eclipse for IDE• JUnit for test framework• maven for build tool• SVN for SCM• TRAC for issue tracking system• Hudson for daily build & auto test• SpingNote for documentation share• <<TODO : ? >> for flex test framework• JBoss for WAS

Page 63: 프로젝트 Xxx에 적용하고 싶은 개발방법

63Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

고민되다 언급하지 않은 실천 항목

• 야근 금지• 자기 계발 의무• 일정 버퍼링

Page 64: 프로젝트 Xxx에 적용하고 싶은 개발방법

Copyright © 2009 Xener Systems, Inc. All Rights Reserved.

Special Thanks!Are There Any Other Questions?