정적, 동적영역 코드 초기개발비용과 유지비용에 대하여
코드가 동작하기도 전에 동작을 보장하도록 노력해보자
- 개발자(IDE 의존) 영역
- 타입 정의
- enum보다 인터페이스 이용
- 정적 분석
- IDE 활용 가능
- 피드백: IDE의 경고
- 대부분의 IDE에서 경고, 오류 감지
- ex)
String name = 264;
- ex)
- IDE에 따라서는 경고가 없을 수 있음, 이 경우 컴파일 타임에 분석해야 함
- 대부분의 IDE에서 경고, 오류 감지
- 기타 플러그인 사용
- 오타 확인: Code Spell Checker
- 컴파일러 영역
- 정적분석
- 피드백: 컴파일 에러
- 컴파일러에 대해 이해도가 높을 수록 통제할 수 있는 영역이 커짐, 단 현실에서 프로젝트 참여 인원 모두가 같은 이해도를 갖기엔 시간대비 효용성이 부족해 보일 수 있음.
- 정적분석
- 런타임 영역
- 동적 분석
- 피드백: 테스트 코드를 실행시켜 커버리지를 늘림
- 분기를 완전탐색 할 수 있도록 테스트 하면 되지만 도메인 복잡도가 증가함에 따라 테스트 개발비용과 유지비용이 증가하게 되어 결국 좋은 품질을 위한 테스트코드의 이점이 사라질 수 있음(
도메인 복잡도에 의하여 복잡도가 증가한 테스트코드는 누가 테스트 할 것인가?).
- 동적 분석
| 영역 구분 | 정적 동적 구분 | 초기개발비용 | 유지보수비용 |
|---|---|---|---|
| 개발자 영역 | 정적 | 높음 | 낮음 |
| 컴파일러 영역 | 정적 | 높음 | 낮음 |
| 런타임 영역 | 동적 | 낮음 | 높음 |
- 고정된 개발비용 대비 분석 구분
- 개발비용이 같다면 정적분석이 가능하도록 구현하여 유지보수비용을 줄이는게 적절할 수 있습니다. 소프트웨어 특성상 모든 것이 변할 수 있다는 가정 자체는 변함이 없기 때문에, 고려해야 할 환경 조건이 같다면 유지보수비용을 줄여 총 비용을 줄이는 방향으로 개발하는 것이 타당할 수 있습니다.
시간이 갈수록 초기개발비용보다 유지보수비용이 점차 증가함
- 소프트웨어 수명주기에 따른 초기개발비용과 유지보수비용
- 소프트웨어의 수명주기가 짧다면(지속적으로 버전업이 될 필요가 없다면) 시간에 의존하지 않으므로 유지보수비용에 대해 don’t care 가 됩니다. 따라서. 런타임영역을 고려하여 개발비용을 줄이는 방향으로 프로그래밍 하는것이 적절할 수 있습니다.
- 주기적인 버전업, 유지보수가 필요한 경우는 시간이 지남에 따라 유지보수비용이 소모됨에 따라 초기개발비용보다 낮은 유지보수비용에 초점을 맞추어 개발하는 것이 적절할 수 있습니다.