학부 때 배웠던, 신입 때 배웠던 기본을 지키지 못해서 프로젝트가 초 딜레이되었다.
잊지 않기 위해서 정리하자.
작은 범위에서 큰 범위까지 모두 아래의 흐름이 잘 이뤄져야 한다.
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. 결론
앞으로는 반드시 소프트웨어 개발 절차에 맡게 프로젝트를 진행해서 성공적으로 마무리를 짓자.
'테크 > 기초 지식' 카테고리의 다른 글
[C++] const_cast와 mutable 기초 (0) | 2019.08.14 |
---|---|
메모리 (0) | 2019.08.12 |
[좋은 코딩 습관] - 변수, 함수 이름 잘 짓기 (0) | 2018.07.04 |
[최악의 코딩 습관] - 중복 코드 생성 (0) | 2018.06.25 |
C++ 객체지향 프로그래밍에서 오버라이딩과 Upcasting(업캐스팅), Downcasting(다운캐스팅) (2) | 2016.11.10 |