[CISA 이론 정리 - 3장] 06 대안적 개발 방법론 (1/2)

반응형
반응형

1. 객체 지향 시스템 개발(OOSD: Object Oriented System Development)

(1) 의의

① 프로그램을 객체(object) 단위로 조직하여 개발하고 유지보수한다.

② 객체는 모듈처럼 전체 프로그램에 속해 있는 한 부분이다.

③ 하지만 모듈과는 달리 독립적으로 기능하며 다른 객체들과도 상호 작용할 수 있다.

④ 이미 개발된 객체는 다른 프로그램에서 재사용할 수 있어서 개발 노력/시간이 절약된다.



(2) 객체(Object)

① 객체는 메소드(기능) 그리고 객체 식별과 기능 수행에 필요한 데이터 속성 값을 포함한다.

② OOSD에서는 프로그램을 일련의 연산 과정이 아니라 객체들 간 상호 작용으로 본다.

③ 마치 현실 세계가 다양한 사물들의 상호 작용인 것과 유사하다.

④ 한편 객체 안에 메소드와 속성을 내장시키는 것을 캡슐화(encapsulation)라고 한다.

⑤ 캡슐화를 하면 객체 내부에서 데이터가 연산되는 과정을 외부에서 알 수 없다.

⑥ 이를 데이터 은닉(data hiding)이라 하며, 데이터 은닉은 프로그램의 보안을 향상한다.



(3) 클래스 및 추상화

① OOSD에서는 프로그램 분석/설계 시 속성을 공유하는 객체 집합인 클래스를 정의한다.

② 클래스는 수학에서 집합에 해당하고 객체는 원소에 해당한다.

③ 클래스를 정의할 때는 핵심적 공통 속성만 도출하는 과정인 추상화(abstraction)를 한다.

④ 추상화를 할 때는 객체가 가져야 할 최소한의 속성만 골라낸다.

⑤ 클래스는 현실 세계에서 개별 사물들을 일반화하여 식별하는 것과 유사한 개념이다.

예) 직원들은 직급(이사/부장/과장/대리/사원)은 달라도 임직원으로 일반화할 수 있다.



(4) 상속(Inheritance)

① 한편 여러 클래스는 계층 구조를 띠고 있다.

② 다시 말해 상위 클래스(super-class)와 하위 클래스(sub-class) 관계를 가진다.

③ 이때 하위 클래스는 상위 클래스의 속성과 메소드를 상속한다.



2. 속성 응용 개발(RAD: Rapid Application Development)

(1) 의의

① RAD는 전략적으로 중요하고 기능이 분명한 시스템을 신속하게 개발하는 것이 목표이다.

② 그러면서도 낮은 비용과 높은 품질을 유지하는 것을 지향한다.

③ 이를 위해 생산성 높고 신속한 방식으로 개발 과정을 진행한다.

④ RAD는 요구 사항이 방대한 대규모 시스템을 개발하는 데는 적절하지 않는다.



(2) CASE 도구, SWAT 팀, 중앙 저장소(Repository)

① RAD에서는 잘 훈련되고 자동화된 개발 도구(CASE 도구) 사용에 능숙한 개발팀을 구성하는데 이 팀을 SWAT(Specialists with Advanced Tools) 팀이라고도 한다.

② CASE 도구(Computer Assisted Software Engineering tools)는 진화적 프로토타이핑, 산출물 공유, 자동 코드 생성 등에 필수적이다.

③ 결과물은 중앙 저장소에 보관 관리하며 재사용이 가능한 요소는 최대한 재사용한다.



(3) JAD, 진화적 프로토타이핑, 타임 박스 기법

① 개발자와 사용자가 분석 및 설계를 위한 워크샵을 공동 수행하고 긴밀하게 공조하는  이른바 JAD(Joint Application Development) 기법을 활용한다.

② 진화적 프로토타이핑을 적용하여 신속하게 도출한 일차 결과물의 품질을 향상해 간다.

③ 하지만 엄격한 시간 제약을 설정하여 일정 지연을 통제하는 기법을 타임 박스(time box) 기법을 사용한다.



(4) RAD의 단계 구성

① RAD는 시스템 개발 수명 주기를 구성하는 단계들이 중첩되고 통합되어 있다.


개념 정의 - 시스템이 지원할 기능과 데이터를 정의하고 개발 범위를 확정한다.

기능 설계 - 데이터/프로세스 모델 개발과 프로토타핑을 위한 워크샵을 개최한다.

개발 - 실제 DB와 시스템을 구축하고 이전 계획을 수립하고 시스템을 설치한다.

설치 - 인수 테스트, 훈련, 데이터 변환, 시스템 구현 등을 수행한다.




3. 애자일 개발(Agile Development)

(1) 의의

① 애자일 기법은 RAD처럼 시스템의 핵심 부분부터 신속하게 개발하는 것을 중시한다.

② RAD와의 차이점은 기술 환경 변화에 대한 민첩한 대응을 강조한다는 것이다.

③ 즉 개발 기간 자체의 단축보다는 변화에 대한 민첩한 대응에 초점을 맞춘 접근법이다.

④ 애자일 방법론에는 스크럼, XP, 크리스탈, 적응적 소프트웨어 개발 등이 있다.



(2) 반복적(Iterative) 개발 접근법

① 애자일 개발에서는 위해 반복적 단계 수행을 통해 시스템을 완성해 나간다.

② 서브 프로젝트마다 전체 중에서 가장 핵심적이고 중요한 부분부터 차례로 완성해 나간다.

③ 장기 계획은 개괄적으로 수립하고 단기 계획은 상세하게 수립한다.

④ 또한, 완성된 부분을 반복적으로 검사하여 품질을 향상하는 접근법을 따른다.



(3) 임파워먼트(Empowerment)와 패어 프로그래밍(Pair Programming)

① 프로젝트 관리자는 팀원들에게 권한을 대폭 이양하고 지원적인 역할을 수행한다.

② 팀원들은 2인 1조 방식으로 프로그램을 개발하는 데 이를 페어 프로그래밍이라고 한다.

③ 팀은 숙련도가 높은 팀원들로 비교적 작게 구성하는데 사용자들과 개발자들이 포함된다.



(4) 백로그(Backlog)

① 백로그란 개발해야 할 기능, 요구사항, 기술적 태스크들의 목록이다.

② 백로그는 전체 개발 범위와 매 회차별 개발 대상을 신속하게 파악할 수 있게 돕는다.

③ 회차(Sprint)란 기간 구분 단위로서 회차마다 일정 분량의 개발 범위가 할당된다.



(5) 암묵적 지식과 노하우의 공유

① 팀원들은 같은 장소에서 작업하여 상호 작용과 의사소통을 극대화한다.

② 매일 모든 팀원들이 참여하는 팀 회의를 하는데 회의 시간을 엄격하게 제한한다.

③ 객관화되고 문서화된 지식에 더해 경험을 통해 습득한 암묵적 지식과 노하우를 공유한다.



반응형

댓글

Designed by JB FACTORY