1984년 카네기멜론 대학에 소프트웨어 공학 전문 연구소인 SEI(softwareengineeringinstitute)가 미 국방성의 지원을 받아 미국 소프트웨어 산업 능력을 향상시킬 목적으로 설립되었다. 미 국방성이 이 연구소에 요청한 것은 소프트웨어를 위한 성숙도 모델의 개발이다. 미 국방성은 수많은 업체로부터 소프트웨어 납품을 받는데 업체마다 품질이 달랐다.
그래서 업체의 개발 능력이 과연 어느 정도인지 객관적으로 측정하고, 요구하는 품질에 대한 기준을 제시해줄 목적으로 요청을 한 것이다. 그 결과 성숙도 모델인 SW-CMM(SW-CapabilityMaturityModel, 이하 CMM)이 만들어졌다. 이는 프로젝트 개발 조직에서 프로세스 성숙도가 높은 조직이 성숙도가 낮은 조직보다 높은 품질의 소프트웨어를 생산할 수 있다는 모델이다.
CMM은 소프트웨어 공급자의 강점과 약점을 평가하는 수단으로, 개발자가 프로세스의 능력을 스스로 평가하고 평가 결과에 따른 개선 방향을 설정하는 데도 사용되었다. 이 후 여러 모델이 추가 개발되고, 소프트웨어 사용 환경의 변화, 기존 모델 등과의 중복 문제 등을 해결하기 위하여 새로운 모델의 필요성이 대두되었다.
SEI는 소프트웨어 역량 성숙도 모델 CMM 2.0 버전과 SECM(SystemEngineeringCapabilityModel) 그리고 통합제품개발(integratedproductdevelopment)-CMM 모델을 통합하고 정리하여 ISO 15504(SPICE)와 호환이 가능한 CMMI라는 통합 모델을 2000년 8월 발표하게 되었다. CMM과 CMMI의 차이는 [표 9-12]와 같다.
표 9-12 CMM과 CMMI의 비교
표 9-12 CMM과 CMMI의 비교
단계
CMM
CMMI
1
초기(initial)
초기(initial)
2
반복(repeatable)
관리(managed)
3
정의(defined)
정의(defined)
4
관리(managed)
정량적 관리(quantitativelymanaged)
5
최적화(optimizing)
최적화(optimizing)
CMMI(CapabilityMaturityModelIntegration)는 프로세스 표준화의 기준과 방향을 제시하므로 조직 프로세스에 대한 측정뿐 아니라 평가 지표로도 활용할 수 있는데, 이때 능력을 평가하거나 성숙도를 평가할 수 있다. CMMI의 각 약자는 다음과 같은 의미를 지닌다.
■ C(능력, Capability) 일반적으로 능력이 있다, 없다는 뭔가를 할 수 있는 힘이 있느냐, 없느냐로 말할 수 있다. 소프트웨어 개발에서 능력이란 개발 목표(주어진 기간, 정해진 비용, 고품질 등)를 달성할 수 있는 힘이다. 능력이 있는 조직은 개발 목표를 달성할 수 있다. 그러나 능력이 없는 조직은 개발 기간이 연장된다거나 비용이 더 추가된다거나 품질이 떨어지는 소프트웨어를 개발함으로써 개발 목표를 달성하지 못한다.
■ M(성숙도, Maturity) 성숙의 사전적 의미는 '생물의 발육이 완전히 이루어짐', '몸과 마음이 자라서 어른스럽게 됨', '경험이나 습관을 쌓아 익숙해짐' 등으로, 다 자라서(완성되어) 책임감이 있는 느낌을 준다. 소프트웨어 개발에서 성숙도가 높은 조직이란 책임감이 있는 조직으로서 사용자가 만족하는 고품질의 소프트웨어를 개발하기 위해 개발 과정에서 객관적이고 정량적인 근거에 따라 프로세스가 측정되고 지속적인 개선이 이루어지는 조직을 말한다.
반면 성숙하지 못한 조직은 책임감이 떨어지는 서투른 조직으로, 개발 프로세스가 객관적인 근거에 의해 진행되지 않기 때문에 사용자가 만족하는 고품질의 소프트웨어가 만들어질 수 없다.
표 9-13 성숙도가 높은 조직과 낮은 조직의 특징
표 9-13 성숙도가 높은 조직과 낮은 조직의 특징
구분
특징
성숙도 높음
• 소프트웨어 개발/관리 프로세스가 조직 차원에서 이루어진다. • 구성원들이 소프트웨어 프로세스를 잘 알고 있다. • 프로세스를 따라 수행함으로써 역할과 책임이 명확하다. • 제품 품질을 중요하게 여기고, 사용자의 만족도를 측정한다. • 조직 차원의 표준 프로세스가 일관성 있게 준수되고 있다.
성숙도 낮음
• 조직 내에 정해진 프로세스가 없어 필요할 때마다 임시방편으로 만들어 사용하고 있다. • 문제가 발생했을 때 근본적인 해결 방안을 찾기보다는 임시방편으로 해결하려고 한다. • 객관적인 비용 산정과 근거에 의한 일정이 산출되지 않아 개발 기간과 비용이 초과하는 경우가 많다. • 제품 품질에 대해 객관적으로 평가하지 못한다. • 제품의 기능, 품질보다 납기일을 최우선으로 생각한다.
■ M(모델, Model) 여기서 모델은 일반적으로 알고 있는 모델의 의미와 약간 다르다. 여기서는 프로세스를 감사(audit)하는 의미로 사용한다. 즉 기준대로 하고 있는지, 그렇지 않은지를 검사하는 것이다. CMMI는 그 기준을 제시하고 있는데 그것이 '수행 지침(bestpractice)'이라는 모델이다. 조직이 프로세스 개선을 원한다면, CMMI는 그 조직이 무엇을 해야 하는지에 대해 '수행 지침'을 통해서 알려준다. 그러나 구체적으로 어떻게 할지는 조직의 역량에 맡겨둔다.
■ I(통합, Integration) 여러 가지 프로세스의 기준을 하나로 통합했다는 의미이다. 소프트웨어 개발 생명주기의 각 단계, 즉 계획부터 유지보수까지 모든 과정을 통합한 모델이라는 의미가 있다.
결국 CMMI는 조직의 프로세스에 대한 가이드이자 기준이며 '능력'과 '성숙도'로 조직의 프로세스를 측정하고 평가하는 모델의 통합 버전인 프로세스 개선 성숙도 모델이라 할 수 있다.
2. CMMI의 구성
CMMI는 개발 조직의 소프트웨어 프로세스 성숙도를 [표 9-14]처럼 5단계로 구분한 후, 각 단계별 목적을 달성하기 위해 [표 9-15]와 같이 4개의 범주로 구분된 22개의 프로세스 영역(PS: ProcessArea)으로 구성하고 있다.
표 9-14 CMMI 5단계(소프트웨어 프로세스 성숙도)
표 9-14 CMMI 5단계(소프트웨어 프로세스 성숙도)
단계
프로세스
내용
1. 초기(initial) 단계
프로세스 없음
예측/통제 불가능
2. 관리(managed) 단계
규칙화된 프로세스
기본적인 프로젝트 관리 체계 수립
3. 정의(defined) 단계
표준화된 프로세스
조직 차원의 표준 프로세스를 통한 프로젝트 지원
4. 정량적 관리(quantitativelymanaged) 단계
예측 가능한 프로세스
정량적으로 프로세스가 측정/통제됨
5. 최적화(optimizing) 단계
지속적 개선 프로세스
프로세스 개선 활동
표 9-15 CMMI의 4가지 범주로 구분된 22개의 프로세스 영역
표 9-15 CMMI의 4가지 범주로 구분된 22개의 프로세스 영역
범주
프로세스 영역
프로젝트 관리
프로젝트 계획, 감시, 제어와 관련된 프로젝트 관리 행위들을 다루는 프로세스 영역들로 구성됨.
① 프로젝트 계획(PP: projectplanning-L2) ② 프로젝트 감시 및 통제(PMC: ProjectMonitoringandControl-L2) ③ 협력 업체 관리(SAM: SupplierAgreementManagement-L2) ④ 통합된 프로젝트 관리(IPM: IntegratedProjectManagement+IPPD-L3) * IPPD: IntegratedProductandProcessDevelopment ⑤ 위험 관리(RSKM: RiskManagement-L3) ⑥ 정량적 프로젝트 관리(QPM: QuantitativeProjectManagement-L4)
공학
여러 공학 분야에 걸쳐서 공유되는 개발과 유지보수와 관련된 활동들을 다루는 프로세스 영역들로 구성됨.
⑦ 요구 사항 관리(REQM: RequirementsManagement-L2) ⑧ 요구 사항 개발(RD: RequirementsDevelopment-L3) ⑨ 기술적 솔루션(TS: TechnicalSolution-L3) ⑩ 제품 통합(PI: ProductIntegration-L3) ⑪ 확인(VER: Verification-L3) ⑫ 검증(VAL : Validation-L3)
프로세스 관리
프로세스의 정의, 계획, 배치, 구현, 감시, 제어, 평가, 측정, 개선과 관련된 여러 프로젝트에 걸쳐진 활동들을 포함하는 프로세스 영역들로 구성됨.
⑬ 조직 차원의 프로세스 개선(OPF: OrganizationalProcessFocus-L3) ⑭ 조직 차원의 프로세스 정의(OPD: OrganizationalProcessDefinition+IPPD-L3) ⑮ 조직 차원의 교육 훈련(OT: OrganizationalTraining-L3) ⑯ 조직 차원의 프로세스 성과 관리(OPP: OrganizationalProcessPerformance-L4) ⑰ 조직 차원의 혁신 활동 전개(OID: OrganizationalInnovationandDeployment-L5)
지원
제품 개발과 유지보수를 지원하는 활동들을 다루는 내용으로, 프로젝트를 목적으로 한 프로세스 영역과 조직에 적응하는 것을 목적으로 하는 프로세스 영역들로 구성됨.
⑱ 형상 관리(CM: ConfigurationManagement-L2) ⑲ 프로세스/제품 품질 보증(PPQA: ProcessandProductQualityAssurance-L2) ⑳ 측정 및 분석(MA: MeasurementandAnalysis-L2) ㉑ 의사결정 분석 및 해결(DAR: DecisionAnalysisandResolution-L3) ㉒ 근본 원인 분석 및 해결(CAR: CausalAnalysisandResolution-L5)
CMMI는 22개 각각의 프로세스 영역을 만족시키기 위해서 반드시 일반(공통) 목표(GG: GenericGoal)와 세부(구체) 목표(SG: SpecificGoal)를 만족시켜야 한다.
■ 일반 목표와 수행 지침 • 목표 : 모든 프로세스 영역에 공통으로 적용되는 목표로서 하나의 프로세스 영역에서 일반적인 목표를 달성했다는 것은 해당 프로세스의 활동들이 조직에 내재화되어 자연스럽게 수행될 수 있음을 의미한다.
• 수행 지침 : 일반적인 목표를 만족시키기 위해 수행해야 하는 활동이 무엇인지를 설명한다.
■ 세부 목표와 수행 지침 • 목표 : 특정 프로세스 영역에만 적용되는 좁은 의미의 구체적인 목표로서 특정 프로세스 영역을 만족시키기 위해서는 반드시 세부적인 목표를 완전히 만족시켜야 한다.
• 수행 지침 : 세부적인 목표를 만족시키기 위해 수행해야 하는 활동이 무엇인지를 설명한다.
각 프로세스 영역의 구성 요소는 3가지 범주로 그룹화되는데, 22개의 프로세스 영역(PA)이 [그림 9-18]과 같은 구조를 따른다. 반드시 달성해야 할 필수 구성 요소에 일반 목표와 세부 목표가 있고, 수행할 것으로 기대되는 예상 구성 요소에는 일반 수행 지침과 세부 수행 지침이 있으며, 정보 제공 측면의 다양한 구성 요소가 있다.
■ 필수 구성 요소 조직이 프로세스 영역을 만족시키기 위해 무엇을 성취해야 하는지를 기술하는 구성 요소이다. 세부 목표와 일반 목표가 이에 해당한다. 목표를 만족시키는 것은 프로세스 영역이 만족되었는지를 결정하기 위한 기반으로 평가 시 사용된다.
■ 예상 구성 요소 조직이 필수 구성 요소를 성취하기 위해 전형적으로 무엇을 구현해야 하는지를 기술하는 구성 요소이다. 이 구성 요소들은 누가 평가를 수행하고 개선을 구현하는지를 가이드한다. 일반 수행 지침과 세부 수행 지침이 이에 해당된다.
■ 정보 제공 구성 요소 필수 구성 요소와 예상 구성 요소에 접근할 수 있도록 돕는 세부 내용을 제공한다. 예제 작업 산출물, 하위 지침, 일반 수행 지침의 정책, 입문 노트, 관련 프로세스 영역 등이 이에 해당된다.
3. CMMI의 평가 방법
CMMI 평가는 단계적 표현(stagedrepresentation) 방법의 성숙 단계(maturitylevel)와 연속적 표현(continuousrepresentation) 방법의 능력 단계(capabilitylevel)로 나누어 이루어진다.
4. 단계적 표현 방법의 성숙 단계
성숙 단계는 조직에서 해당 업무를 얼마나 체계적으로 수행하고 있는지를 나타내며, 지표로는 1에서 5까지 5단계로 구분하여 사용하고 있다.
CMMI 성숙 단계는 [표 9-16]과 같이 단계별로 충족되어야 하는 프로세스 영역이 정의되어 있고, [그림 9-21]처럼 계단형으로 구성되어 단계적 표현 방법이라고도 한다. 그리고 각 단계의 프로세스 영역을 모두 만족하면 다음 단계로 넘어간다. 예들 들어, 정의 단계는 관리 단계의 프로세스 영역을 모두 만족하고, 정의 단계의 프로세스 영역까지 모두 만족한다는 의미이다.
표 9-16 성숙도 단계별 프로세스 영역
표 9-16 성숙도 단계별 프로세스 영역
단계
범주
프로세스 영역
1. 초기 단계
프로세스 없음
2. 관리 단계
프로젝트별로 프로세스 존재
• 요구 사항 관리 • 프로젝트 계획 수립 • 프로젝트 감시 및 통제 • 협력 업체 관리 • 측정 및 분석 • 프로세스/제품 품질 보증 • 형상 관리
3. 정의 단계
조직 차원의 프로세스 존재(프로세스 표준화)
• 요구 사항 개발 • 기술적 솔루션 • 제품 통합 • 검증, 확인 • 조직 차원의 프로세스 개선 • 조직 차원의 프로세스 정의 • 조직 차원의 교육 훈련 • 통합된 프로젝트 관리 • 위험 관리 • 의사결정 분석 및 해결
4. 정량적 관리 단계
측정 가능한 정량적 프로세스 존재
• 조직 차원의 프로세스 성과 관리 • 정량적 프로젝트 관리
5. 최적화 단계
프로세스를 지속적으로 개선
• 조직 차원의 혁신 활동 전개 • 근본 원인 분석 및 해결
5. 연속적 표현 방법의 능력 단계
능력 단계에 대한 이해를 돕기 위해 성숙 단계와 같은 예를 사용해보자. 연속적 표현 방법의 능력 단계는 국어(80점), 수학(90점), 영어(70점), 과학(85점), 사회(78점)의 각 과목별 등급을 정하는 것이다. 즉 능력 단계는 프로세스 영역 능력 수준을 측정하는 연속적 표현 모델로, 해당 조직의 각 프로세스 영역에 대한 능력이 얼마나 되는지를 나타낸다.
능력 단계는 프로세스 영역별 능력 수준을 확인함으로써 어떤 영역이 잘되고, 어떤 영역의 능력이 떨어지는지를 살펴 보완할 부분을 파악하기도 한다.
이렇게 프로세스 영역별 능력 수준을 점검하면 어떤 프로세스 영역이 다른 프로세스 영역에 비해 떨어지는지 알 수 있으므로 그 영역만 집중적으로 관리할 수 있다. 또 중요하다고 생각하는 프로세스 영역에 대해서는 그 수준을 높이기 위해 더 많은 자원을 투입하여 능력 수준을 높일 수 있다. 앞에서 든 비유로 설명한다면, 과학 과목이 다른 과목보다 성적이 낮은 경우 과학 과목을 열심히 공부해서 점수를 올리고, 수학이 중요하다고 생각하면 다른 과목보다 수학을 집중적으로 공부하여 수학 실력을 향상시킬 수 있는 것과 같다.
[ë¤ì´ë² ì§ì백과]CMMI 모델 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))
기업의 의사결정에 있어서 부서,조직간의 복잡하게 얽힌 문제들로 인해서 대립이 생기고 결국 논의자체도 진행되지 못하는 상황을 개선시키위해 근본원인을 찾아 이를 극복할 수 있는 혁신적인 방안을 도출하고 하기와 같은 일련의 과정을 논리적으로 파악해 나감.
-. 무엇을 어떻게 바꿀것인가? (What to do change?) – 흐름을 막는 제약과 핵심문제를 찾음
-. 무엇으로 바꿀것인가? (What to change to?) – 전체 흐름량을 최대화
-. 어떻게 바꿀것인가? (How to cause the change?) – 핵심문제를 해결하고 제약흐름을 최대화
등과 같은 일련의 과정을 논리적으로 파악해 나감.
2. 6가지도구
-. CRT : Current Reality Tree (현재 상황나무)
-. Cloud (Core Conflict Cloud : 대립의 중심)
-. EC : Evaporating Cloud (갈등해소를 위한 해결책 주입)
-. FRT : Future Reality Tree (미래 상황나무)
-. PT : PreRequisite Tree (전제 조건나무)
-. TT : Transition Tree (실행 계획 나무)
* CRT (문제점 열거, 인과관계 파악, 문제점 도출) -> UDE : 바람직하지 않은 결과 (CRT에서의 문제점 들) -> Cloud (문제원인, 모순, 대립 해소하기 위한 수단) -> FRT (Cloud의 문제해결책의 검증) -> NB : 부정적 가지 (Cloud의 대립해소 아이디어 실행 시, 새롭게 발생하는 문제) -> PT (어떻게 바꿀것인가?에 대한 수단, 목표달성과정의 장애와 극복을 위한 중간목표 전개) -> TT (PT의 중간목표 달성을 위한 필요행동)
출처 : [네이버 지식백과]단위 테스트(쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))
출처 : [네이버 지식백과]통합 테스트(쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))
단위 테스트
단위 테스트(unittest)는 프로그램의 기본 단위인 모듈을 테스트하여 모듈 테스트(moduletest)라고도 한다. 구현 단계에서 각 모듈의 개발을 완료한 후 개발자가 명세서의 내용대로 정확히 구현되었는지를 테스트한다. 즉 개별 모듈이 제대로 구현되어 정해진 기능을 정확히 수행하는지를 테스트한다. 화이트박스 테스트와 블랙박스 테스트를 모두 사용할 수 있지만 모듈 내부의 구조를 구체적으로 들여다볼 수 있는 화이트박스 테스트 같은 구조적 테스트를 주로 시행한다.
단위 테스트가 개발된 모듈만 테스트하기 때문에 쉬울 것 같지만, 시스템은 수많은 모듈이 서로 정보를 주고받으며 연결되어 있다. 즉 테스트할 모듈을 호출하는 모듈도 있고, 테스트할 모듈이 호출하는 모듈도 있다. 따라서 한 모듈을 테스트하려면 그 모듈과 직접 관련된 상위 모듈과 하위 모듈까지 모두 존재해야 정확히 테스트할 수 있다.
그러나 하나의 모듈을 테스트할 때 상위나 하위 모듈이 개발이 안 된 경우도 있다. 이때 상위나 하위 모듈이 개발될 때까지 기다릴 수는 없으므로 가상의 상위나 하위 모듈을 만들어 사용해야 한다. 상위 모듈의 역할을 하는 가상의 모듈을 테스트 드라이버(testdriver)라 하고 그 역할은 테스트할 모듈을 호출하는 것이다. 즉 필요한 데이터를 인자를 통하여 넘겨주고, 테스트가 완료된 후 그 결과 값을 받는 역할을 해준다.
반대로 하위 모듈의 역할을 하는 모듈을 테스트 스텁(stub)이라고 한다. 스텁 모듈은 테스트할 모듈이 호출할 때 인자를 통해 받은 값을 가지고 수행한 후 그 결과를 테스트할 모듈에 넘겨주는 역할을 한다. 따라서 드라이버와 스텁 모듈은 테스트할 때 필요한 기능만 제공할 있도록 단순히 구현한다.
[그림 8-23]은 드라이브와 스텁 모듈이 테스트 대상과 맺는 관계를 보여준다.
그림 8-23 드라이버/스텁 모듈과 테스트 대상 모듈의 관계
단위 테스트를 수행하면 다음과 같은 오류를 발견할 수 있다.
• 잘못 사용한 자료형 • 잘못된 논리 연산자 • 알고리즘 오류에 따른 원치 않는 결과 • 틀린 계산 수식에 의한 잘못된 결과 • 탈출구가 없는 반복문의 사용
단위 테스트가 끝난 모듈을 통합하는 과정에서 발생할 수 있는 오류를 찾는 테스트가 통합 테스트(integrationtest)이다. 실제 업무에서는 단위 모듈이 개별적으로 존재하는 것이 아니고 여러 모듈이 유기적 관계를 맺고 있으므로 이러한 모듈들을 결합한 형태로 테스트를 수행해봐야 한다. 이때 주로 확인하는 것은 '모듈 간의 상호작용이 정상적으로 수행되는가'이다. 즉 모듈 사이의 인터페이스 오류는 없는지, 모듈이 올바르게 연계되어 동작하고 있는지를 체크한다.
개별 모듈을 테스트하는 단위 테스트에서는 오류가 발견되지 않았어도, 모듈을 통합하면 상호 간의 인자나 공유 데이터 구조 등에서 오류가 발생할 수 있다. 또 단위 테스트 시 가상의 드라이버와 스텁 모듈을 만들어 테스트를 잘 수행했더라도, 상당히 제한적인 여건에서 테스트를 수행한 것이다. 그러므로 실제 모듈 통합 시에는 다른 결과가 나올 수도 있다. 실제 개발에서는 모듈 간의 상호작용과 인터페이스에서 많은 오류가 발생하는 것을 볼 수 있다. 그러므로 통합 테스트가 필요한데, 그 방법에는 모듈 통합을 한꺼번에 하는 방법과 점진적으로 하는 방법이 있다.
모듈 통합을 한꺼번에 하는 방법으로는 빅뱅(big-bang) 테스트를 들 수 있다. 빅뱅 테스트는 단위 테스트가 끝난 모듈을 한꺼번에 결합하여 수행하는 방식이다. 이 방법은 소규모 프로그램이나 프로그램의 일부를 대상으로 하는 경우가 많고 그만큼 절차가 간단하고 쉽다. 그러나 한꺼번에 통합하면 오류가 발생했을 때 어떤 모듈에서 오류가 존재하고 또 그 원인이 무엇인지 찾기가 매우 어렵다.
모듈 통합을 점진적으로 하는 방법은 모듈 통합을 한꺼번에 하는 방법의 문제를 극복하는 방법으로, 완성된 모듈을 기존에 테스트된 모듈과 하나씩 통합하면서 테스트한다. 문제가 발생하면 바로 직전에 통합하여 테스트한 모듈에서 오류가 발생했다고 짐작할 수 있으므로 오류를 찾기가 쉽다. 점진적 통합 방식은 가장 상위에 있는 모듈부터 테스트하는지, 가장 하위에 있는 모듈부터 테스트하는지에 따라 하향식 기법과 상향식 기법으로 나뉜다.
1. 점진적 모듈 통합 방법 : 하향식 기법
하향식(top-down) 기법은 시스템을 구성하는 모듈의 계층 구조에서 맨 상위의 모듈부터 시작하여 점차 하위 모듈 방향으로 통합하는 방법이다.
[그림 8-24]의 예에서 맨 상위 모듈 A를 모듈 B와 통합하여 테스트한다. 그다음으로 모듈 C를 먼저 선택할지, 아니면 B 아래에 있는 모듈 E를 먼저 선택할지 결정해야 한다. 이때 모듈 C를 먼저 선택하는 방식을 넓이 우선(breadthfirst) 방식이라 하고 모듈 E를 먼저 선택하는 방식을 깊이 우선(depthfirst) 방식이라 한다.
넓이 우선 방식으로 테스트하면 (A, B)→(A, C)→(A, D)→(A, B, E)→(A, B, F)→(A, C, G)와 같이 같은 행에서는 옆으로 가며 통합 테스트를 한다. 반면, 깊이 우선 방식에 따라 테스트하면 (A, B)→(A, B, E)→(A, B, F)→(A, C)→(A, C, G)→(A, D) 순으로 통합하며 테스트한다. 즉 하위 방향으로 내려가면서 통합하지만, 같은 행에서는 옆이 우선이 아니라 그 아래 모듈을 먼저 통합하여 테스트한다. 또한 하향식 방식에서는 상위 모듈부터 테스트를 수행하기 때문에 단위 테스트에서 설명한 스텁 모듈이 필요하다.
그림 8-24 점진적 모듈 통합 방법을 설명하기 위한 모듈 구성도
일반적으로 모듈의 종속 관계에서 상위 모듈은 시스템 전체의 흐름을 관장하고, 하위 모듈은 각 기능을 구현하는 형태로 구성되어 있다. 그러므로 하향식 기법을 이용하면 프로그램 전체에 영향을 줄 수 있는 오류를 일찍 발견하기가 쉽다. 그러나 하위 모듈이 임시로 만든 스텁들로 대체되어 결과가 완전하지 않을 수도 있고 스텁 수가 많으면 스텁을 만드는 데 시간과 노력이 많이 들 수 있다. 따라서 모듈 간의 인터페이스와 시스템의 동작이 정상적으로 잘되고 있는지를 빨리 파악하고자 할 때 하향식 기법을 사용하는 것이 좋다.
2. 점진적 모듈 통합 방법 : 상향식 기법
상향식(bottom-up) 기법은 하향식 기법과는 반대로 가장 말단에 있는 최하위 모듈부터 테스트를 시작한다. 하향식에서 스텁이 필요했다면, 상향식에서는 상위 모듈의 역할을 하는 테스트 드라이버가 필요하다. 이 드라이버는 하위 모듈을 순서에 맞게 호출하고, 호출할 때 필요한 매개 변수를 제공하며, 반환 값을 전달하는 역할을 한다.
[그림 8-24]에서 상향식 기법을 이용하여 테스트하는 순서는 다음과 같다. 우선 가장 말단(레벨 3)에 있는 모듈 E와 F를 모듈 B에 통합하여 테스트한다. 그다음 모듈 G를 모듈 C에 통합하여 테스트한다. 마지막으로 모듈 B, C, D를 모듈 A에 통합하여 테스트한다.
상향식 기법의 장점은 최하위 모듈들을 개별적으로 병행하여 테스트할 수 있기 때문에 하위에 있는 모듈들을 충분히 테스트할 수 있다는 것이다. 또한 정밀한 계산이나 데이터 처리가 요구되는 시스템 같은 경우에 사용하면 좋다. 그러나 상위 모듈에 오류가 발견되면 그 모듈과 관련된 하위의 모듈을 다시 테스트해야 하는 번거로움이 생길 수 있다.