소프트웨어 개발 방법론이란?
소프트웨어 개발 방법론은 소프트웨어를 생산하는 데에 필요한 프로그래밍 개발 과정들을 정리하고 표준화하여 프로그래머들이 프로그래밍 개발과정에서 각개인이 개발과정에서의 일관성을 유지하고 프로그래머들간의 효과적인 협업이 이루어질수 있도록 돕기 위한 방법론이다. - 위키백과 -
소프트웨어 생명주기 관리 모델에서는 프로젝트가 어떤 순서로 진행될지 그리고 중간에 어떤 산출물을 점검할 지에 대해 주로 관심을 가졌다면, 소프트웨어 개발 방법론은 소프트웨어를 어떻게 만들지에 대해 관심을 가진다.
따라서 개발 방법론에는 단계별 산출물 뿐만 아니라 산출물은 누가 어떤 순서로 어떻게 만들어야 하는지 그리고 어떤 도구를 사용해야 하는지 구체적으로 정의하고 있다.
즉, 소프트웨어 개발에 필요한 반복적인 과정(절차, 방법, 산출물, 관리, 기법, 도구)을 체계적으로 정리하고 표준화 시킨 것.
구성요소 | 설명 |
작업절차 | 소프트웨어를 진행할 때 이루어지는 작업의 순서 |
작업방법 | 각 단계별 작업마다 수행해야 할 일(누가, 언제, 무엇을) |
산출물 | 단계별로 나오는 산출물(설계서, 명세서) |
관리 | 개발 진행을 어떻게 제어하고 감독할 것인지 |
기법 | 단계별 작업 시 사용하는 기술, 기법(DFD, ERD, Usecase) |
도구 | 사용하는 기법 별 지원 도구(PowerPoint, Excel, ERWin) |
[소프트웨어 개발 방법론의 구성]
소프트웨어 개발 방법론의 종류
소프트웨어 개발방법론은 정보공학 방법론, 객체지향 방법론, CBD(Component Base Development) 방법론, 애자일 방법론이 이렇게 크게 4가지로 나눌 수 있다. 산업계에는 다양한 개발방법론이 나와있고 대규모 IT회사에는 자체적인 개발방법론을 보유하고 있지만, 이는 완전히 새로운 개념이 아니라 앞서 열거한 4가지 방법론의 단점을 보완하거나 각각의 방법론의 장점을 따와 합성한 것들이 대부분이다.
○ 정보공학 개발 방법론
정보공학 개발 방법론은 기업 전체, 또는 기업의 주요부분을 계획, 분석, 설계 및 구축에 정형화된 기법들을 상호 연관성 있게 통합, 적용하는 데이터 중심의 방법론이다.
정보공학 개발 방법론 절차
[출처] helloit.tistory.com/category/%EA%B0%9C%EB%B0%9C%EB%B0%A9%EB%B2%95%EB%A1%A0
단계 | 설명 |
ISP (Information Strategy Planning) | 정보전략계획 : 기업의 중장기 정보화 전략 수립 |
BAA (Business Area Analysis) | 업무영역분석 : 업무영역별 데이터와 프로세스 모델링, 연관분석(ERD, DFD) |
BSD (Business System Design) | 업무시스템설계 : 프로세스와 데이터 설계 |
SC (System Construction) | 시스템 구축 : 데이터 상세설계, 프로그램 코딩 |
정보공학 개발 방법론은 비즈니스 시스템 규모 성장과 소프트웨어 공학 발전에 따라 1980년대 중반에 등장한 방법론으로 기업의 전사적인 관점에서 출발해 데이터 중심으로 시스템을 구축하는 방법론이다. 기업의 중장기 정보화 전략을 수립하는 ISP와 업무 영역을 분석하는 BAA(Business Area Analysis), 업무시스템을 설계하는 BSD(Business System Design) 그리고 시스템을 구축하는 SC(System Construction) 단계로 구성된다.
ISP 단계에서는 기업의 경영전략을 뒷받침할 수 있는 정보화 전략을 수립하기 위해 현행 업무프로세스와 시스템을 분석하고 미래 아키텍처와 전략계획을 수립하게 된다.
BAA 단계는 기업의 업무 현황을 분석해서 개념 수준의 데이터와 프로세스를 설계하는 업무분석 단계이다.
BSD 단계는 실질적으로 시스템을 설계하는 단계로 우리가 많이 사용하고 있는 논리적 ER 다이어그램으로 데이터를 설계하고 분할 다이어그램, 액션 다이어그램, 의존 다이어그램을 사용해 프로세스를 설계한다.
SC 단계에서는 물리적 데이터베이스를 설계하고 BSD 단계에서 작성한 산출물을 바탕으로 프로그램을 개발하게 된다. 이론적인 정보공학 방법론에서는 BSD 단계에서 작성한 산출물을 바탕으로 프로그램 코드를 생성할 수 있는데, 대부분의 프로젝트에서는 설계문서만 만들고 코드는 개발자가 직접 만드는 방식으로 개발을 진행한다.
정보공학 개발 방법론의 특징
[정보공학 개발 방법론의 특징]
특징 | 설명 |
ISP 중심 | 기업의 경영전략을 지원하기 위해 IT 전략수립에서 출발 |
데이터 중심 | 비즈니스의 중심은 데이터, IT도 데이터 관점에서 설계 |
공학적 접근 | Case Tool과 같은 자동화 도구 사용 설계 후 코드 자동생성 |
정보공학 개발 방법론은 다양한 특징을 가지고 있지만 대표적으로 다음과 같이 세 개로 요약할 수 있다.
첫째 정보공학 개발 방법론은 ISP 중심이다. ISP를 통해 기업 전체적인 업무와 정보화 현황을 정리한 다음 시스템 구축을 위한 계획을 수립한다.
둘째로 데이터 중심 방법론이다. 비즈니스의 중심은 데이터에 있다고 생각하고 IT도 데이터 관점으로 설계한다.
마지막으로 공학적으로 접근한다는 특징을 가지고 있다. 캐이스 툴(Case Tool)과 같은 자동화 도구를 사용해 설계하고 코드를 자동 생성한다. 물론 생성된 코드는 프로그램으로 동작하지 않는다. 하지만 프로그램이 가져야 하는 전체적인 윤곽을 잡아주는 역할을 한다.
현재 산업계에서 가장 많이 사용하는 방법론은 무엇일까? 바로 정보공학 방법론이다. 많은 기업에서 3~5년 주기로 ISP 프로젝트를 통해 정보화 전략을 수립하고 그에 따른 정보시스템을 구축한다. 기업 업무 중심에는 데이터베이스가 있으면 시스템은 데이터를 어떻게 하면 잘 쌓을지 그리고 어떻게 데이터를 활용해 기업의 생산성을 높일지 고민하면서 발전하고 있다. 지금 화두가 되고 있는 인공지능 기술도 기업에서 쌓아놓은 데이터 기반 하에 성능을 발휘할 수 있다.
그럼 프로젝트 관점에서 정보공학 방법론을 다시 한 번 살펴보자. 실제로 프로젝트 개발 과정에서 필요한 산출물 종류는 그렇게 많지 않다. 설계할 때는 스토리보드, 데이터 설계서, UI 설계서 정도를 작성하고 개발 과정에서는 이를 바탕으로 물리적 테이블과 프로그램 코드가 만들어 진다. 이런 관점에서 정보공학 방법론을 바라 본다면 BAA에 해당하는 요구분석 단계에서는 요구사항 명세서가 만들어지고 BSD에 해당하는 시스템 설계 단계에서는 논리 ERD와 업무 프로세서를 설명하는 프로세스 구조도/흐름도가 만들어 진다. 그리고 SC에 해당하는 개발 단계에서는 물리 ERD, UI, 프로그램 코드가 개발된다.
정보공학 방법론이라고 해서 거창한 무엇인가 있는 게 아니라 일반적으로 수행하는 개발방식이 정보공학 방법론의 간소화 버전이라 생각하면 된다. 앞으로 설계와 개발 과정에서는 간소화된 정보공학 방법론을 기반으로 설명하도록 한다.
[정보공학 개발 방법론 개념도]
○ 객체지향 개발 방법론
객체지향 개발 방법론을 알아보기 전에 먼저 객체의 개념부터 살펴보자. 간단히 얘기하면 객체란 사물을 논리적으로 추상화한 것이다. 추상화란 우리가 관심 있는 부분만 추려내는 것이다. 따라서 객체는 사물에 대해 관심 있는 부분만 추려내 추상화한 것이다.
이렇게 만들어진 객체는 데이터와 기능을 동시에 가지고 있다. 하나의 객체는 다른 객체가 가지고 있는 데이터와 기능을 사용할 수 있고, 이런 능력은 객체 간 결합을 가능하게 한다. 객체지향 개발 방법론은 이런 객체의 특성을 활용해 객체를 생성하고 구체화하면서 프로그램을 진행한다. 정보공학 개발 방법론처럼 데이터와 프로세스를 따로 설계하지 않고 데이터와 프로세스를 모두 객체에 담아 오로지 객체의 관점에서 프로그램을 개발한다.
객체지향 개발 방법론에서는 분석, 설계, 구현의 전 과정을 객체 중심으로 진행한다. 심지어 데이터를 저장하는 테이블도 따로 설계하지 않고 데이터 객체로 설계한다. 데이터는 결국 데이터베이스에 저장되는데 만일 데이터베이스가 객체형 DB라면 별다른 변환과정 없이 데이터 객체를 그대로 저장하면 되지만, 관계형 DB를 사용한다면 객체를 관계형 테이블로 변환하는 과정이 필요하다. 이 과정을 객체-관계 매핑(Object Relation Mapping)이라 하며 현재 대부분의 회사에서 관계형 데이터베이스를 사용하고 있기 때문에 객체-관계 매핑은 필수적인 과정이라 할 수 있다.
객체지향 개발 방법론은 실 세계를 정확하게 반영하며, 높은 재사용성과 안정성을 갖고 있다는 장점이 있지만, 관계형 DB로 구성되어 있는 현재 산업계에서는 객체-관계 매핑 과정이 필수적이기 때문에 활발하게 사용되지는 않는다. 관계형 DB에서 제공하는 SQL은 풍부한 기능을 가지고 있어 많은 개발자 들이 이 분야에서 지식과 노하우를 축적하고 있다. 이 또한 관계형 DB에서 객체형 DB로의 이전을 가로막는 장애물이 되고 있다.
많은 프로젝트에서 Java와 같은 객체지향 언어를 사용하기 때문에 프로세스 설계 과정에서는 객체지향 개발 방법론 개념이 많이 사용되고 있으며 데이터 설계 과정에서는 기존의 정보공학 방법론이 많이 사용된다. 즉, 프로그램은 객체지향 언어를 사용하고 데이터베이스는 관계형으로 설계한다.
○ CBD 개발 방법론
CBD(Component Base Development) 개발 방법론의 핵심 기술인 컴포넌트 개념에 대해 알아보자. 컴포넌트는 인터페이스로 접근 가능하고 독립적인 기능을 수행하는 모듈로써 교체가 가능한 소프트웨어 부품이다. 컴포넌트는 사용방법을 알려주는 설명서를 제공해야 한다. 우리가 주변에서 쉽게 볼 수 있는 컴포넌트들에는 윈도우에서 사용할 수 있는 DLL, OCX와 자바로 개발된 Spring, Struts 등이 있다.
CBD 개발 방법론은 크게 컴포넌트를 개발하는 CD(Component Development) 단계와 개발된 컴포넌트를 사용해서 개발을 진행하는 CBD(Component Base Development) 단계로 나눌 수 있다. CD 단계에서는 도메인을 분석해 컴포넌트 대상 업무를 선별하고 컴포넌트를 개발해 저장소에 입력한다. CBD 단계에서는 요구 분석을 통해 컴포넌트 기반으로 설계하고 필요한 컴포넌트를 저장소에서 찾아서 조립하는 방식으로 프로그램 개발을 진행한다. 만일 필요한 컴포넌트가 저장소에 없다면 CD 단계로 돌아가서 컴포넌트를 개발하고 이를 사용해 개발을 계속 진행한다.
프로젝트 제안서를 보면 많은 업체에서 CBD 개발 방법론을 사용해 프로젝트를 진행한다고 하는데 이것은 정확한 표현이 아니다. 전자정부 프레임워크를 사용하는 웹프로젝트를 예로 들면 대부분의 공통 기능을 프레임워크에서 제공하지만 도메인에 특화된 기능들은 현장에서 개발하는 경우가 많다. 순수한 CBD 프로젝트가 되려면 그러한 기능들을 컴포넌트화해서 회사의 다른 프로젝트에서 재사용할 수 있도록 개발해야 한다.
CBD 방법론은 적절한 컴포넌트가 개발된 상황에서 사용한다면 재사용성이 우수하고 컴포넌트 조립을 통한 개발을 통해 생산성을 획기적으로 높일 수 있다는 장점이 있지만, 높은 설계 및 개발 수준을 요구하는 컴포넌트의 특성 상 국내 컴포넌트 개발 기술이 부족하고 먼저 개발된 컴포넌트를 공유하고 활용할 수 있는 유통 체계가 미흡하다는 한계점을 가지고 있다.
○ 애자일(Agile) 개발 방법론
애자일 개발 방법론은 기존 방법론들이 너무 절차를 중시한 나머지 변화에 대응하기 어려웠던 단점을 개선하기 위해 나왔다. 애자일 방법론은 절차보다는 사람을, 문서보다는 작동하는 소프트웨어를, 미리 철저하게 계획하기 보다는 변화에 대한 민첩한 대응을, 계약과 협상에 얽매이기 보다는 고객과의 협력을 중요하게 생각한다.
- 애자일(Agile) 방법론은 구체적인 개발 프로세스가 아닌 개발 지침, 철학에 가깝다.
- 변화를 수용하고 협업과 제품의 빠른 인도를 강조하는 반복적 개발 방법
- 문서화보다 코드, 프로그램, 소프트웨어 자체를 중요시 함
- 요구사항의 변화는 불가피하며 이에 대응하는 것이 현실적이다.
- 기존의 개발 프로세스는 설계 기간이 길며 재작업 시 오버헤드가 크다.
- 환경의 빠른 변화에 대응하는 것이 중요하다.
- 애자일 선언문(Agile Manifesto) 🔗
- 공정과 도구보다 개인과 상호작용을
- 포괄적인 문서보다 작동하는 소프트웨어를
- 계약 협상보다 고객과의 협력을
- 계획을 따르기보다 변화에 대응하기를
- 요구사항이 바뀌기 쉬운 중소형의 비즈니스 시스템이나 전자 상거래 응용에 적합하다.
- 애자일 방법론의 종류
- 익스트림 프로그래밍(Extreme Programming, XP)
- 짝 프로그래밍(Pair Programming)
- 테스트 주도 개발(Test Driven Development, TDD)
- 스크럼(Scrum)
[출처] flearning-blog.tistory.com/230
[출처] 소프트웨어 개발 방법론 - 깊고넓은지식창고 multicore-it.com/46
[출처] 소프트웨어 개발 방법론 - 애자일(Agile) 방법론
'IT 관련기술' 카테고리의 다른 글
무료 아이콘 사이트 추천 : Flaticon, iconfinder (1) | 2021.01.13 |
---|---|
오라클 버추얼박스(VirtualBox)에 우분투(Ubuntu) 설치하기 #2 (1) | 2021.01.12 |
eclipse(이클립스) 테마 설치 및 변경하기 with Dark theme (0) | 2021.01.12 |
오라클 버추얼박스(VirtualBox)에 우분투(Ubuntu) 설치하기 #1 (0) | 2021.01.11 |
오라클 버추얼박스(VirtualBox) 다운로드 및 설치 방법 (8) | 2021.01.11 |
댓글