지난번에 이은 애자일 이야기이다.
XP와 스크럼 등의 방법들도 매우 좋은 방법이지만 내가 근무하는 환경에서는 당췌 먹히지가 않는 방법들이었다. 그래서 기존 정보공학방법과의 타협이 필요했고 그 무엇인가 없을까?라는 생각에 가상 시나리오 써가면서 그리고 이전에 내가 근무하는 환경과 크게 동떨어지지 않는 환경을 검토하기 시작하였다.
그러던차에 다음의 통상적인 패턴이 보이기 시작한것이다.
위의 그림은 요구사항의 에러를 찾아내고 FIX하는데 드는 비용을 예로 들었지만 요구변경 숫자와도 직접적인 관계가 있다. 딱. 저만큼 요구변경 그 단계에서 일어난다.
또한 우리가 짜는 WBS에도 문제가 있다는 것을 알게 되었다.
+ 요구분석 (총 10일 / 2주)
+- 1차인터뷰 2일
+- 1차요구정리 1일
+- 2차인터뷰 2일
+- 2차요구정리 1일
+- 요구사항명세서작업 1일
+- 요구사항정의서작업 1일
+- 요구사항분석발표 1일
+ 설계 (총 10일 / 2주)
+- 프로세스정의서 1일
+- 프로세스명세서 1일
+- 인터페이스정의 1일
+- CRUD정의서 2일
+- Entity정의서 2일
+- 테이블정의서 2일
+- DB정의서/명세서 1일
+- 화면설계서 10일 (병행)
+ 개발 (총 20일 / 4주)
+- 열심히 개발 20일
+- 단위테스트 20일 (병행)
+ 통합 (총 2일)
+- 알파오픈
+ 테스트 (총 10일 / 2주)
+- 통합시험/성능시험 3일
+- 통합시험/성능시험개선 2일
+- 인수시험 5일
+- 인수시험개선 5일 (인수시험병행)
+ 전환 (총 3일)
+- 상용데이터전환 2일
+- 상용오픈/비상대기 1일
+기타
+- 주간보고 1주마다 1회
+- 월간보고 매월말 1회
위는 예시일뿐이지만 흔히 작성하는 WBS이다. (물론 내가 주구장창 작성했던 양식이기도 하고...)
그런데 위의 문제는 바로 크게는 "커뮤니케이션" 비용이 빠져 있다는 것이고 그 다음으로는 "재작업시간"이 과소평가되어 있다는 것이다. 거기다가 "프로젝트관리"에 대한 비용도 빠져 있다.
다시말해 다음의 것들이 빠져있다는 이야기이다.
1. 개발팀원간의 목표공유 (주간/월간회의만 가지고 될까?)
2. 고객과의 목표공유 (주간/월간보고만으로 가능할까?)
3. 재작업시간은 어디에?
4. 매뉴얼 작업 등의 문서작업은 언제하나요?
5. 고객에게 넘기기전에 개발팀원들끼리 리뷰하는 시간은 어디에?
6. 테스트 결과에 따른 품질완성도를 100%에 가깝다고 보고 있다.
7. 결정적으로 의사결정 시간이 없다!!!
8. 기타 등등등한 잔업들은 어디에?
--> 결국 밤새도 안되는 이상한 일정이 되고 만다.
즉, 인간이 내일 일을 예측하는것은 불가능에 가까운데 약 3개월간의 일정을 짜라니 끽해봐야 이정
밖에 안나오는 것이다. 결국은 밤새야 하는것이다. 일정이란게 잡혀 있고 결국 일정에 쫒기며 밤새서 해야 한다는 결론에 도달한다. 밤새서 할수 있으면 다행인데 밤새서도 못하기때문에 일정지연은 필연이다.
결국 밤새서 일하고 욕쳐먹고...
거기다가 요구사항 분석에 따라 설계하고 개발했음에도 고객의 마음과 다르다. 이게 진짜 환장하는 것이다.
그래서 받아 들인것이 공정의 부분 자동화와 작업의 통합이었다.
먼저 분석은 UML의 USE CASE와 Activity diagram를 사용하면 되지 않는가?
그리고 설계는 UML의 Class Diagram과 Sequence diagram으로 해결이 가능하다.
즉, 분석설계는 UML 4종셋으로 해결이 가능하였다.
그리고 개발단계에서 단위테스트는 JUNIT이나 Visual Studio의 단위테스트를 쓰면 빌드할때 마다 유닛테스트는 자동으로 되지 않는가?인터페이스 정의서는 Doxygen이라는 녀석이 있으니 이것을 사용하면 된다.
보고서는 Wiki를 사용하고 issue관리는 issue tracker를 사용하면 되는 것이다.
거기다가 상용으로 전환도 iBatis와 같은 O-R Mapping tool을 사용하면 되지 않을까?
소스관리는 SVN이라는 것으로 하면 그것도 간단할 것 같았다.
이 모든것을 사용하면 어느정도 자동화가 가능할 것 같았다.
그리고 받아 들인것이 가조립이었다.
* 아래의 부품들이 모여서 정확히 무엇이 될지는 조립해봐야 아는것 아닌가?
프라모델강좌나 후기를 보면 항상 다음과 같이 진행된다.
1. 부품분리
2. 가조립
3. 부품별도색
4. 영구조립
5. 마무리
재미 있는 것은 저 가조립이라는 것을 작게는 부품별로 크게는 큰 덩치별로 자주 할수록 더 좋은 품질이 나온다는 것이다.
다시말해 똑같은 프라모델이라도 가조립을 많이하고 어떤 색을 칠할것인지 의사결정을 빨리할 수록 더 나은 품질과 더 빠른 조립시간을 보장한다.
어떻게 보면 가조립은 작은 단위의 유닛테스트와 통합테스트되겠다.
즉, 유닛테스트와 통합테스트를 많이 하면 할 수록 의사결정에 들어가는 시간과 노력을 절감할 수 있다는 결론에 이른것이다.
그래서 하나더 받아들인것이 바로 목업개념이다.
* 1954년 F-4 팬텀II에 적용된 개발목업
최종형상을 눈으로 보고 손으로 만져 볼 수 있도록 하기위해 목업이라는 것을 받아 들였다.
이는 작동해야 한다는 전재를 하고 있으므로 정확하게는 목업보다는 "프로토타잎"에 더 가까운 개념이 되겠다.
다시 정리하면 다음과 같이 공정관리부분을 고쳤다.
1. 요구사항을 들으면서 "프로토타잎"을 만든다.
-> 이때 중요한것은 디자인 부분인데 디자인보다는 배치와 버튼의 위치와 버튼을
눌렀을때 작동하는것에 중점을 둔다. 그리고 팀원간의 팀웤을 점검하고 프로세
스를 점검하는 그런 시간을 가진다.
2. UI에 대한 프로토타잎이 끝나면 프로토타잎을 배포하고 요구사항에 대한 변경을
받아 2차 프로토타잎으로 갈지 아니면 개발공정으로 갈지 결정한다.
3. 개발공정으로 간다면 프로토타잎을 보며 UML로 역설계한다.
-> 여기서도 중요한것이 한번에 다하려 하지말고 iteration1에서는 추상화레벨을
높였다가 단계를 거듭하며 추상화 레벨을 낮춰가라
4. UML로 역설계한다음 논리적으로 이상없는지 검증하고 유닛테스트와 통합테스트
의 결과를 예측한다.
5. 프로토타잎에서 FIX된 대로 개발자에게 배포하고 개발을 진행하며 HUDSON이라
는 가조립 빌드툴로 매일 개발 진척도를 체크한다.
-> 이때 HUDSON에 MS TEST 또는 JUNIT 으로 나온 결과로 개발진척을 평가
하는것이 중요하다.
6. 개발중간에 2주에 한번씩 중간보고형식으로 가조립된 결과물을 고객과 공유한다.
7. 어느 정도 공정이 마무리되면 고객으로부터 Feedback을 받아 적용한다.
8. 문서 산출물은 쓸데없이 많이 만들지 않고 TRAC을 통해 관리한다.
9. 5~8번을 2주단위로 계속 반복한다.
이렇게 함으로써 문서작업, 통합테스트와 단위테스트 그리고 가장 중요한 의사결정 시간 및 인수시험을 단축할 수 있었다.
다음에는 시간이 되면 구체적으로 개발서버를 어떻게 구성하며 어떻게 유기적으로 시스템을 사용하는지에 대해 이야기해보자.
트랙백 주소 :: http://www.wolfpack.pe.kr/trackback/352