#title 개발방법론과 정보공학 [[TableOfContents]] ==== 개발방법론이란? ==== 개발방법론이란, 소프트웨어 공학의 원리를 소프트웨어 라이프 사이클에 적용한 개념으로 소프트웨어 개발을 위해 작업활동, 절차, 산출물, 기법등을 체계적으로 정리한 것이다. 일부 서적에서는 개발방법론이라는 것 자체를 혐오하는 글도 본 적이 있다. 혐오의 이유는 개발방법론이 정해진 절차나 기법을 이용하여 소프트웨어를 개발하기 때문에 사람의 생각 자체가 없어지는 것이 가장 큰 이유라고 한다. 어쨌든 개발방법론은 성공적인 프로젝트를 위한 하나의 로드맵이다. 개발방법론이 새로운 것이 아니라면 이미 많은 프로젝트에서 적용되고 성공이 어느 정도 검증된 것이므로 이를 참고하여 프로젝트가 처한 현실에 맞게 커스터마이징하여 사용하는 것은 나쁘지 않으리라 생각한다. 개발방법론은 다음과 같은 구성요소를 가진다. * 작업절차 (단계별 활동, 단계별 세부작업, 활동순서) * 작업방법(누가, 언제, 무엇을 작업하는지 기술) * 산출물 * 관리(계획수립, 진행, 품질, 외주, 예산, 인력등) * 기법(작업수행시 필요한 기술 및 기법) * 도구 ==== 개발방법론의 분류 ==== 개발방법론은 1970년대 부터 현재까지 발전해 왔다. 다음은 개발방법론들이다. ||기법||설명|| ||구조적 기법||1970년대 시작, 기능중심|| ||정보공학 기법||1980년대 시작, 자료구조 중심|| ||객체지향 기법||1990년대 시작, 객체 중심|| ||CBD 기법||2000년대 시작, 컴포넌트 중심|| ==== 개발방법론의 적용 ==== 1970년대에 시작된 구조적 기법이 CBD 기법보다 나쁘다고 혹은 좋다고는 말 할 수 없다. 각각 장/단점이 존재하기 때문에 프로젝트에 어떤 개발방법론이 가장 어울리는지 살펴보아야 한다. 즉, 프로젝트 특성을 무시한 채 특정 개발방법론을 강요하거나 형식적인 사용으로 문서만 잔뜩 만들어 내고 별다른 효과를 얻지 못 할 수도 있다는 것이다. 그래서 개발방법론을 적용할 경우에는 다음을 고려해야 한다. * 프로젝트의 특성과 규모 * 소프트웨어 품질 관리의 인식 제고 * 효과적인 활용 가치 인식 ==== 정보공학 방법론 ==== 필자가 생각하기로는 현재까지 출현한 개발방법론들 중에 정보공학방법론이 데이터베이스 시스템을 개발하는 방법론으로 가장 적합하다고 여겨진다. 정보공학방법론 자체가 데이터 중심의 방법론이기 때문에 데이터베이스 개발과는 매우 잘 맞는다. 정보공학방법론은 데이터와 프로세스간의 상호관계를 중요하게 여기며, 다음 그림과 같은 피라미드 구조를 가진다. attachment:개발방법론과정보공학/info_engineering.jpg?width=40% 단계별 수행내용은 다음과 같다. * 정보전략계획 * 경영전략, 조직 및 목표에 대한 조사 * 업무에 대한 개략적인 분석 * 현행시스템의 분석 및 평가 * 업무영역분석 * 데이터 모델링 * 프로세스 모델링 * CRUD 메트릭스 * 업무시스템설계 * 업무 프로세스의 정의 * 프리젠테이션 레이어(사용자뷰) 설계 * 분산 설계 * 시스템구축 * 응용 프로그램 작성 ==== 논란의 핵! ==== 업무영역분석 단계에서 데이터 모델링과 프로세스 모델링을 한다. 그런데 여기에 논란거리가 있다. 1. 데이터 모델링 -> 프로세스 모델링 -> CRUD 메트릭스 2. 프로세스 모델링 -> 데이터 모델링 -> CRUD 메트릭스 3. 프로세스 모델링과 데이터 모델링 병행 -> CRUD 메트릭스 여러분은 어떤 것이 데이터베이스 시스템을 개발하는데 가장 유리할 것이라 생각하는가? 예전에 필자라면 1번이 가장 유리하다고 판단했을 것이다. 하지만 요즘의 필자라면 아무 상관이 없다. 중요한 것은 어떤 작업이 선행되느냐가 아니라 현실세계를 컴퓨터세계로 옮기기 위해서 현실에 존재하는 데이터와 프로세스를 얼마나 표현을 잘 했느냐다. 그러기 위해서는 모델링 전문가가 필요하다. 특히나 데이터 모델링의 경우는 더욱 그렇다. 왜냐하면 데이터는 쉽게 변하지 않기 때문이다. 예를 들어, 오른손 잡이가 왼손으로 밥을 잘 먹기 위해서 밥먹는 방법을 바꿀 수는 있어도, 오른팔과 왼팔을 바꿀 수는 없는 이치이다. ==== 참고: 개발방법론 비교자료 ==== attachment:개발방법론과정보공학/compare_mothod.jpg