여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미
시스템 구현시 해당 기능이 필요하다는 것을 알 수 있도록 정확하게 작성한다.
해당 기능을 이해할 때 중의적으로 해석되지 않도록 정확하게 작성한다.
시스템 구현을 위해 필요한 모든 것을 기술한다.
공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다.
기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성한다.
비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고, 재구성하여 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업이다.
재사용을 위해서는 누구나 이해할 수 있고 사용이 가능하도록 사용법을 공개해야 한다.
재사용되는 대상은 외부 모듈과의 결합도는 낮고, 응집도는 높아야한다.
함수와 객체 : 클래스나 메소드 단위로 소스 코드를 사용한다.
컴포넌트 : 독립적인 업무 또는 기능을 수행하는 실행 코드 기반으로 작성된 모듈이다.
컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용 한다.
공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용한다.
애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용한다.
결합도는 줄이고, 응집도는 높여서 모듈의 독립성과 재사용성을 높임
모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지시킴
복잡도와 중복성을 줄이고 일관성을 유지
모듈의 기능은 예측이 가능해야 하며, 지나치게 제한적이선 안됨
유지보수가 용이해야 함.
모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해한다.
하나의 입구와 하나의 출구를 갖도록 해야한다.
인덱스 번호나 기능 코드들이 전반적인 처리 논리 구조에 예기치 못한 영향을 끼치지 않도록 모듈 인터페이스를 설계해야한다.
효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시되어야 한다.