학부 때 배웠던, 신입 때 배웠던 기본을 지키지 못해서 프로젝트가 초 딜레이되었다.

잊지 않기 위해서 정리하자.

작은 범위에서 큰 범위까지 모두 아래의 흐름이 잘 이뤄져야 한다.

 

1. 문제 정의

[망한 이유]

(1) 문제를 제대로 정의했다고 생각했는데, 문제를 정의한 게 아닌 해야할 거를 정의함

[결론]

* 어떤 상황, 어떤 부분 디테일하게 문제가 무엇인지 정확히 알자.

 

2. 요구 사항 개발

[망한 이유]

(1) 초기 요구 사항을 꼼꼼히 수립하지 못함 (확장성 여부 생각 안 함 및 일정에 쫒겨 시간 할애하지 않음)

(2) 프로젝트 중간에 요구 사항이 바뀜 (당연하게 4년 짬밥으로 예측했어야 했는데 안 함)

(3) 프로젝트가 끝나고 새로운 요구 사항이 생김 (초기 회의에서는 해당 요구사항에 대한 불필요함을 말하며 사라졌는데, 갑자기 해야할 것으로 바껴있음... 의사소통 문제인 지, 무슨 문제인 지 참 회사 생활 어려움)

[결과]

* 어디서부터 손을 대야 할 지 막막해짐. (바뀐 요구사항과 새로운 요구사항에 대한 추가 개발이 기존 요구사항에서 개발한 부분과 충돌, 유연성 고려하지 않은 대가)

 

3. 구현 계획 수립

[망한 이유]

(1) 기존 시스템 파악이 덜 되어 가능성 여부가 불투명함 (시스템이 너무 큼, 아직도 일부만 파악함, 조금 슬럼프...)

(2) 가능성 여부를 모르는 일정 산정이 너무 어려움 (일정 산정은 참... 어떻게 보면 예습과 같다... 짬내서 해야하는 것)

[결과]

* 결국 동작하지 않음 (구현을 성공적으로 수행하기 위한 기초 작업의 검증이 필요함 - Prototype 구현)

* 기초 작업의 가능성을 보긴 했는데, 현재 구축된 시스템 안에서 적용하는 게 배꼽이 배보다 더 커지는 상태

 

4. 소프트웨어 아키텍처 또는 상위 수준 디자인

[망한 이유]

(1) 초반에는 그래도 설계 흉내를 내었는데, 말 그대로 흉내였음

(2) 기존 설계를 파악하지 않고 내 멋대로 설계를 진행함

(3) 이론 상 설계와 실제 설계의 차이점이 너무 큼 (선배에게 자문을 구했는데, 너무 선배의 지식에만 의존)

[결과]

* 예측과 계속 다른 결과가 나타나며, 처음 예측했던 것보다 더욱 더 거대해져버림

 

5. 상세 설계

[망한 이유]

[결과]

* 상세 설계 단계를 하지 않음. 초기 설계대로 붙잡고만 있다가 꾸역 꾸역 진행

 

6. 코드 작성 및 디버깅

[망한 이유]

(1) 초기 설계 단계에서 머물러 변화하는 요구사항에 대한 상세설계를 하지 않았으니 명확한 코드 작성이 안 됨

(2) 꼬일대로 꼬여서 여기 수정하면 저기가 터지고, 저기 수정하면 또 다른데가 터져버림

[결과]

* 무한 디버깅 시작...

 

7. 단위 테스트

[망한 이유]

(1) 테스트 케이스 없음

(2) ASSETE() 문 고려하기엔 동작 돌아가는 데에 급급 (내가 아닌 코드 리뷰에 맡김)

[결과]

* 테스트 점검 결과 얼마나 많은 이슈가 나올 지 무서움

 

8. 통합 테스트

[망한 이유]

[결과]

* 하지 않음

 

9. 통합

[망한 이유]

(1) 막연히 이럴 거라고 예측하고 구현한 부분들을 넣었는데, 알고보니 생각보다 훨씬 더 거대했음

(2) Task Branch를 Merge하는 과정 중에 Code-Conflict 무수히 발생

(3) 꾸준히 Branch 병합하면서 진행했으면 Risk 관리가 되었겠지만, 나중에 끝내고 한 방에 해야지 했다가 한 방에 KO

[결과]

* Side-Effect의 시작

 

10. 시스템 테스트

[망한 이유]

[결과]

* 하지 않음

 

11. 유지 보수

[망한 이유]

(1) 구조를 알고 설계하기보다, 설계 없이 기존 구조에 넣으면서 작업하였으므로 Side 예측이 되지 않음

[결과]

* 꼼꼼히 테스트했다고 생각했는데, 하나를 고치면 다른 곳에서 또 하나 문제가 터지고, 계속된 옆그레이드의 반복

 

12. 결론

앞으로는 반드시 소프트웨어 개발 절차에 맡게 프로젝트를 진행해서 성공적으로 마무리를 짓자.

+ Recent posts