테스트와 통합
하향식 통합 ( top-down integration )**
상위 모듈에서 하위 모듈로 점진적으로 구현한다.
시스템에 심각한 문제를 일으킬 수 있는 오류를 초기에 잡을 수 있고, 오류를 분류하기 쉽다.
스텁(stub) 코드를 이용해서 시스템 전체 모습을 초기에 보여줄 수 있다.
스폰서가 시스템이 진행되는 상태를 직관적으로 파악할 수 있다.
상향식 통합 ( bottom-up integration )
하위 모듈에서 부터 상위 모듈 순으로 구현함으로 스텁 코드는 필요 없다. 대신 하위 모듈을 조절할 수 있는 드라이버 모듈(driver module)을 만들어야 한다.
하위 모듈이 매우 중요하고 핵심적이며, 심각한 문제를 일으킬 우려가 있는 시스템은 상향식 통합이 유리하다. 단 시스템의 전체 골격을 파악하기 힘들다.
상위 레벨의 인터페이스까지 테스트하려면 시간이 많이 소요된다.
독립된 기능을 가지는 여러 개의 작은 모듈은 쓰레드(thread)로 묶어 각각을 병렬적으로 구현한 다음 결합하는 방법을 사용 할 수 있다.
시스템에서 중요한 쓰레드부터 구현하고, 덜 중요한 스레드는 천천히 구현해서 나중에 통합할 수 있다.
프로그래머의 사기가 중진되고 각 구성원은 시스템의 진행 상황을 쉽게 파악할 수 있다.
말은 쉽지만, 이처럼 공학적 접근 방법에 따라 단계별 산출물을 만들고 관리하는 인련의 작업이 개발자에게 매우 지루하고 번거로운 작업이다. 하지만 이런 과정 없이 소프트웨어를 개발하면 나중에 더 많은 시간과 비용을 들여야 한다.
소프트웨어 위기도 처음 시스템을 개발할 때 드는 비용보다 개발 후 시스템을 유지하고 보수하는데 더 많은 비용과 노력이 드는데서 기인한다.