1. 컴포넌트 기반 개발
동향
소프트웨어의 재사용성과 빠른 생산성, 품질 향상을 위한 방법으로 확산
컴포넌트 간의 조립에 의한 새로운 어플리케이션과 시스템 개발로 확장 발전
시스템 개발은 코드 작성 대신에 기존 소프트웨어 컴포넌트를 조립하는 것으로 대체
종류
EJB
J2EE 안에서 기업용 비즈니스 어플리케이션을 개발하고 운용하기 위한 서버 측 컴포넌트 모델
– 한번 개발되면 재컴파일이나 소스 코드 수정 없이 다른 EJB 어플리케이션 플랫폼에서도 그대로 재사용 가능
CORBA
언어 독립적이나 사용하기 어려움
COM+
MS사에 너무 종속적인 문제점
전망
향후 EJB 컴포넌트 모델에 의해 개발 배포된 컴포넌트 (ejb.jar 파일) 증가 예상
Dll로 만들어진 컴포넌트들을 조립하여 큰 단위의 소프트웨어 시스템을 개발하는 데 초점
컴포넌트 기반 소프트웨어 개발
현재 소프트웨어 개발의 문제점
품질 관리의 어려움
저 생산성
높은 개발 비용
제어상의 어려움을 야기

컴포넌트 기반 소프트웨어 개발 방법(CBD) 등장
적합한 Off-The-Shelf 컴포넌트를 선택하여 개발하고, 잘 정의된 소프트웨어 아키텍처를 조립하는 소프트웨어 시스템 개념에 기반
상업적인 컴포넌트(COTS)는 다른 플랫폼과 다른 언어를 사용하여 서로 다른 개발자에 의해 개발 가능
개발 비용과 판매 시간을 감소시키고, 소프트웨어 시스템의 전체 품질, 신뢰성과 유지보수성 개선시킴
컴포넌트의 중요 특징
독립적이며, Clear Function을 완료하는 시스템의 대체 가능한 부분
잘 정의된 구조의 문법
인터페이스에 의해 다른 컴포넌트와 상호 통신
컴포넌트 기반 소프트웨어 시스템이 정확하고 효과적으로 실행될 수 있음을 보증하기 위해, 시스템 구조는 가장 중요한 요인
계층화되어 있고, 모듈러 아키텍처로 구성
컴포넌트 기반 소프트웨어 시스템 아키텍처

최상위 계층 비즈니스를 지원하는 어플리케이션 시스템
두 번째 계층 어플리케이션 도메인이나 특별한 비즈니스에서 사용 중인 컴포넌트로 구성
세 번째 계층 일반적인 소프트웨어와 엔티티를 위한 인터페이스로 구성된 Cross-Business 미들 웨어 컴포넌트
최하위 계층 기본적인 운영체제나 하드웨어와 관련된 인터페이스인 기본 컴포넌트 포함
컴포넌트 기반 소프트웨어 개발 생명주기
요구사항 분석(Requirements Analysis) 1
소프트웨어 구조 선택, 구성, 분석, 평가(Software Architecture Selection, Construction, Analysis and Evaluation) 2
컴포넌트 식별과 주문제작 (Component Identification and Customization) 3
시스템 통합(System Integration) 4
시스템 테스팅(System Testing) 5
소프트웨어 유지 보수(Software Maintenance) 6
컴포넌트 식별, 주문제작, 통합의 중요 부분
컴포넌트를 평가하기 위해 사용될 수 있는 기능성과 품질 요구사항에 기반한 후보 COTS 컴포넌트 평가
새로운 컴포넌트 기반 소프트웨어 시스템으로 통합된 후 변경되는 후보 COTS 컴포넌트의 주문 제작, 통합은 목적 소프트웨어 시스템의 다양한 컴포넌트 사이에서 대등 관계와 상호통신을 제공하기 위한 방법의 중요한 결과만
COTS(Commercial, Off-The-Shelf)
완성품으로 일반 대중에게 판매, 대여 또는 권한을 부여할 수 있는 컴퓨터 소프트웨어나 하드웨어, 기술 또는 컴퓨터 제품
장점
개발비용과 소요시간을 절약
단점
제3자가 되는 컴포넌트 벤더에 의존성이 커짐
컴포넌트 요구사항 분석
컴포넌트에 대한 요구사항을 관리, 확인, 문서화하고 이해하고 발견하는 프로세스
목적
– 컴포넌트와 연관된 인터페이스와 플랫폼, 프로그래밍 언어를 보다 잘 인식할 수 있는 컴포넌트와 관련된 요구사항을 만드는 것
오래된 시스템을 변경하거나 새로 개발하기 위한 사용자나 고객의 요구에 의해 시작
요구사항 수집과 정의, 요구사항 분석, 컴포넌트 모델링, 요구사항 확인의 네 단계로 구성
컴포넌트 개발
보다 나은 기능성, 다중 인터페이스와 관련된 높은 품질 컴포넌트를 위한 요구사항을 분석하는 프로세스
목적
– 융통성 있는 인터페이스, 잘 정의된 행위, 예상되는 결과와 연결되어 있는 요구사항을 만족하는 최종 컴포넌트 생성
실행, 기능 테스팅, 신뢰성 테스팅, 개발 문서의 네 가지 절차로 구성
입력
– 컴포넌트 요구사항 문서
출력
– 컴포넌트 증명과 시스템 유지 보수를 위해 준비되는 컴포넌트와 문서
컴포넌트 증명
컴포넌트 외부 발주
계약자의 작업을 회계 감사하고, 컴포넌트 아웃 소싱 계약 관리
컴포넌트 선택
기능성과 신뢰성에 대한 요구사항과 일치하는 컴포넌트를 선택
컴포넌트 테스팅
높은 품질, 신뢰성과 관련된 시스템 요구 사항을 만족하는지 점검하고, 후보 컴포넌트를 테스트 · 선택 · 아웃 소싱하기 위한 것
목적
컴포넌트가 만족스러운 품질과 신뢰성과 관련된 요구사항을 만족하는지 확인
관리 정책
컴포넌트 아웃 소싱은 소프트웨어 계약 관리자에 의해 요구
모든 후보 컴포넌트는 모든 알려진 결함을 제거하기 위해 테스트
테스팅은 목적 환경이나 모의 실험된 환경에서 이루어짐
입력
- 컴포넌트 개발 문서
출력
- 시스템 유지 보수를 위한 테스팅 문서
컴포넌트 주문제작
명확한 요구 사항을 위한 컴포넌트 변경
특별한 플랫폼상에서 컴포넌트를 동작시키기 위해 필요한 변화
더 나은 수행과 품질을 가지기 위해 컴포넌트를 갱신
목적
– 다른 컴포넌트와 협력하고, 특별한 환경에서 사용되어질 수 있는 개발된 컴포넌트를 위해 필요에 따라 변경
모든 컴포넌트는 동작 가능한 시스템에서의 요구사항이나 다른 컴포넌트와 관련된 인터페이스 요구사항과 연관되게 제작
– 입력
→ 시스템 요구사항, 컴포넌트 요구사항, 컴포넌트 개발문서
– 출력
→ 제작된 컴포넌트, 시스템 통합과 시스템 유지보수에 대한 문서
시스템 아키텍처 설계
컴포넌트 기반 시스템이 소프트웨어 구조를 생성, 선택, 평가하는 프로세스
목적
– 사용자 요구사항을 수집하고, 시스템 명세를 정의하고, 적당한 시스템 구조를 선택하고, 플랫폼이나 프로그래밍 언어 같은 실행하는 데 필요한 세부사항을 결정
시스템 요구사항 수집, 분석, 시스템 구조 설계, 시스템 명세로 구성
출력
– 통합을 위한 시스템 명세 문서, 시스템 테스팅 부분과 유지보수 부분을 위한 시스템 요구사항
시스템 통합
설계된 시스템 구조하의 전체 시스템에서 선택된 프로세스를 조립하는 프로세스
목적
– 선택된 컴포넌트에 의해 구성된 최종 시스템
– 통합, 테스팅, 컴포넌트 변경과 재통합 단계로 구성
– 입력
→ 시스템 요구사항 문서와 시스템 구조
– 출력
→ 시스템 테스팅 부분을 위해 준비된 최종 시스템과 시스템 유지 보수를 위한 문서
시스템 테스팅
시스템을 평가하는 프로세스
명확한 요구사항을 만족하는 시스템인지 확인
시스템 실행에서 결함 확인
목적
요구사항과 일치하여 선택된 컴포넌트에 의해 통합된 최종 시스템
기능 테스팅과 신뢰성 테스팅 포함
테스팅 전략 선택, 시스템 테스팅, 사용자가 선택한 테스팅으로 구성
입력
- 컴포넌트 개발과 시스템 통합으로부터의 문서
출력
- 시스템 유지 보수를 위한 테스팅 문서
시스템 유지 보수
소프트웨어를 효과적으로 사용하기 위해 요구되는 유지보수 활동과 서비스를 제공하는 프로세스
목적
– 변화된 환경에서 시스템을 적응시키고, 소프트웨어 수행이나 다른 속성을 개선시키고 결함을 제거하여 말단 사용자에게 효과적인 생산물과 서비스를 제공
시스템 유지 보수는 지원 전략과 문제 관리를 결정
출력
– 시스템 수명 주기를 위한 시스템 테스팅 부분을 위해 제시되는 새로운 버전
코드검사의 개념
개념
소프트웨어 공학의 기본 개념은 검사(Inspection)에 기초하고 있으며, 검사는 품질 문제를 개인에 의지하지 않고 조직적으로 해결하려는 노력이라 볼 수 있음
프로그래밍에 소요되는 비용 중 가장 핵심적인 부분은 오류를 찾아내고, 이를 고치는 것
코드 검사(Code Inspection)는 소프트웨어의 오류를 발견하여 제거함으로써 높은 품질의 소프트웨어를 얻기 위한 활동 중의 하나이며, 프로그램을 만든 후 이에 대한 검사를 수행하는 것
코드 검사는 소프트웨어 개발 과정에서 요구되는 공식 기술검토 중의 하나로 코드에 대한 시험 이전에 이루어지며, 이를 위한 검사 팀(Inspection Team)이 만들어져 코드에 관한 결함과 요구사항과 표준에 따라 프로그래밍이 이루어졌는지 조사하는 것
코드 검사는 단위시험(Unit Test) 이전이나 이후에 이루어짐
코드 검사는 공식적인 기술 검토인 만큼 잘 정의되어 있는 순서와 방법에 의해 이루어져야 하며 조심스럽게 진행
여러 사람들이 다른 사람이 만든 프로그램에 대한 지식을 공유할 수 있고, 함께 좋은 품질의 시스템을 개발한다는 공감대를 형성하는데 기여
프로그램 스타일을 표준화할 수 있으며, 코드가 개발 과정에서 나오는 문서로서 인식될 수 있게 함
현재 많은 소프트웨어 개발 조직에서 코드 검사를 소프트웨어 개발 라이프 사이클에 포함시켜 소프트웨어를 개발하고 있으며, 코드 검사는 품질 보증 활동(SQA: Software Quality Assurance)의 일부로 인식
코드 검사를 수행하는 것은 프로그램 개발도 개인에 의해 이루어지는 것이 아니라 조직에 의해 이루어짐을 보여주는 것이라 할 수 있음
코드 검사를 성공적으로 수행하기 위해 이를 수행하는 구성원은 코드 검사에 요구되는 훈련과 교육을 받아야 함
코드 검사를 위해 사전에 각 참여자의 역할이 주어짐
- 참여자들은 검사할 코드에 대해 미리 조사해 와야 하며 검사 결과는 품질 관리와 추후 관리를 위해 문서로 기록되어야 함
코드에 대한 검사는 프로젝트와 관계가 있는 동료 프로그래머들에 의해 수행되는 것이 일반적이며, 관리자들이 참석하지 않는 것이 바람직함
코드 검사 또한 신중하게 이루어져야 하며 코드 자체에 대한 기술적인 검토만 이루어져야 함
코드 검사는 공식적인 기술 검토회 중의 하나로 인식
- 따라서 검사를 위한 체계적인 틀이 만들어져야 하고 참여자는 이를 숙지하여 검사에 임해야 함
코드 검사를 위한 계획이 수립되어야 하고, 그 결과가 통계적인 자료로 수집되어 관리자에게 보고됨
코드검사 계획
새로 만들어지는 코드는 검사대상이 되고, 새로운 기능이 추가되거나 많은 변화가 가해진 코드는 검사 대상이 됨
일반적으로 코드 검사의 필요성이 느껴지면 이를 수행할 수 있음
검사해야 할 코드가 결정되면 코드를 만든 사람은 코드 검사 조정자에게 통보
조정자와 코드를 만든 저자가 검사할 팀을 선정하며, 코드 검사는 최소한도의 인원으로 수행되어야 함
검사 팀은 4 - 7명이 적당하며, 낭독자(Reader), 사회자(Moderator), 검사자(Inspector), 기록자(Recorder)와 프로그램을 만든 저자(Author)로 역할을 분담
검사 팀의 구성
저자(author) 코드를 만든 사람으로 코드에 대한 정보를 제공하고 문제점에 대한 답변을 할 수 있음
사회자(moderator) 코드 검사를 진행하는 의장이며 코드 검사에서 중심 역할을 수행
낭독자(reader) 코드를 한 줄씩 또는 한 절씩 읽어나가며 이를 해석
기록자(recorder) 검토 도중 문제점이나 오류를 기록하며 이를 요약하여 회의록을 만들고 그 결과를 배포
검사자(inspector) 검사자는 사전에 코드에 대해 구체적으로 검사하고 검토회 진행 중에도 이를 수행
코드검사 진행
제품의 개발 과정과 절차를 향상시키는 것이 품질과 생산성을 높이는 가장 효율적인 방법
개발 절차는 품질에 가장 큰 영향을 미치는 것으로 알려져 있으며, 품질 문제의 85%는 개발 과정과 직접적인 연관성을 가지고 있다고 알려져 있음
참여자들은 검토회를 하기 이전 코드를 읽고 의문점과 문제점을 파악하여야 함
코드 검사는 오류를 지적하는 것이지 그 해결 방법을 찾으려는 것이 아니며, 최소한도의 시간이 소요되도록 함
코드 검사는 일반적으로 4 - 5명이 팀이 되어 수행할 수 있고, 시간을 절약해야 하는 경우라면 일 대 일(One-To-One) 검사도 생각해볼 수 있음
다른 사람이 만든 코드를 검토하는 것은 매우 민감한 사항임
코드 검토를 통해 업무의 상승효과를 얻을 수 있도록 하여야 함
- 이를 위해 코드 검토는 기술적인 것(코드)에만 국한되어야 하며 조심스럽게 진행되어야 함
검토가 끝난 후 검토한 내용에 대해 다시 거론하는 것은 바람직하지 않음
코드의 오류 유형(Type)
데이터 오류(DA: Data Error)
데이터가 다루어지는데 발생하는 오류로 데이터 유형 정의, 변수 선언, 매개 변수에서 나타나는 오류
문서 오류(DC: Documentation Error)
프로그램 구성요소인 선언 부분, 서브루틴, 모듈에 대한 적합하지 않은 주석, 잘못되거나 불필요한 주석을 의미
기능 오류(FN: Function Error)
서브루틴이나 블록이 잘못된 것(What)을 수행하는 오류
논리 오류(LO: Logic Error)
서브루틴이나 블록이 수행하는 방법(How)이 잘못되어 있는 오류
성능 오류(PF: Performance Error)
프로그램을 수행하며 요구되는 효율성(성능)을 만족시키지 못하는 오류
표준 오류(ST: Standard Error)
과정이나 표현이 표준에 의해 이루어지지 않은 경우
기타(OT: Error)
문법적인 오류, 사람의 개성이 포함된 경우 등 앞의 유형으로 설명하기 힘든 불투명하고 애매모호한 오류를 나타냄
코드 검사 사후 검토
코드 저자는 코드 검사에서 나타난 오류와 문제점을 수정하여 이를 코드 검사 사회자에게 검사를 받음
- 이는 추후에 새로 나타나는 오류를 줄이고 더 이상의 오류가 발생하지 않도록 하는데 그 목적이 있음
일반적으로 코드 검사의 결과를 관리자들이 개인의 업무 수행 능력에 대한 평가로 사용되는 것은 바람직하지 않음
- 이유는 코드 검사가 적은 비용으로 보다 자유스러운 분위기 속에서 이루어질 수 있도록 하기 위함