On the Criteria To Be Used in Decomposing Systems into Modules
2007/03/26 00:08
D.L. Parnas, CMU.
이 페이퍼는 소프트웨어 개발 시간을 줄이면서 시스템의 유연성(flexibility)와 이해도(comprehensibility)를 향상시킬 수 있는 메커니즘으로 모듈화(modularization)에 대해서 논의한다.
모듈화된 프로그래밍에서의 주요한 성과는 코딩 기술과 어셈블러의 개발로써 보여지고 있다. 그 성과에는 한 모듈을 작성할 때 다른 모듈에 대해 약간의 지식만을 가지고 작성이 가능하게 하는 것과, 전체 시스템을 재조립(reassembly)하지 않고 모듈들을 교체하거나 재조립이 가능하게 하는 것이다. 이러한 모듈화된 프로그래밍을 함으로써 얻을 수 있는 이득은 크게 3가지로써, 관리하기 쉽고, 제품의 유연성이 높아지고, 시스템의 이해도를 높일 수 있다. 여기서 말하는 모듈은 하위프로그램(sub-program)이라기 보다는 책임 할당(responsibility assignment)라 볼 수 있으며, 모듈화는 모듈에 대한 독립적인 작업 수행 이전에 행해져야 하는 디자인 결정들(design decisions)을 말한다.
이 논문에서는 예제로 KWIC Index Production System을 들고 있다. 크게 두 가지로 모듈화를 하였으며, 첫 번째는 Input, Circular Shift, Alphabetizing, Output, Master Control의 다섯 가지 모듈로 나누었고, 모듈에 대한 기능적인 설명과 모듈 사이에 주고받는 데이터 구조에 대해 설명하였다. 이 모듈들은 개발되기 이전에 인터페이스의 정의를 필요로 한다. 두 번째 모듈화는 유사하긴 하지만, 모듈의 정의에 모듈 외부로 보여줄 인터페이스를 정의하고 있다. 그 모듈들은 Line Storage, Input, Circular Shifter, Alphabetizer, Output, Master Control이 있다. 첫 째로, Line Storage에는 CHAR(r,w,c);r번째 줄 w번째 단어의 c번째 문자를 표현하는 정수 값, SETCHAR(r,w,c,d)는 CHAR(r,w,c)를 d로 표현되는 문자로 설정, WORDS(r)은 r번째 줄의 단어의 수를 리턴 등의 인터페이스와 그 기능을 정의하였다. 또 주요한 내용으로 Circular Shifter에 CSCHAR(l,w,c)는 l번째 circular shift의 w번째 단어의 c번째 문자를 리턴하며 파라미터에 대해서도 설명하고 있다. Alphabetizer는 ALPH, ITH(i);알파벳 순서로 i번째에 오는 circular shift의 index를 리턴 과 같은 인터페이스를 정의하고 있다.
첫 번째 모듈을 나누는데 있어서 기준은 processing하는 순서이며, 두 번째 모듈을 나누는 데 있어 기준으로 제시된 것은 자료 표현(data representation)의 정보를 숨김(information hiding)하는 것이다. 또한 information hiding외에도 세부적인 기준들(data structure, sequence of instructions, formats of control blocks, character codes, alphabetic orderings, sequence of certain items의 숨김)에 대해서 설명하고 있다. 두 번째 모듈화의 장점은 자료 표현을 다른 모듈로부터 숨기고 line storage에서 관리하며 인터페이스만 제공함으로 인해서, 이 시스템에서 변화 가능한 것들(Input형식, 라인 저장 방식, 단어를 4개씩 저장할 것인가 하는 결정, 간접 혹은 직접 정렬하여 circular shift를 저장할 것인지, 알파벳 순서로 리스트를 만드는 것을 on-demand로 할 것인지)에 따른 영향을 최소한으로 숨길 수 있다는 것이다. 그리고 시스템을 이해하는 데 있어 전체를 이해하지 않아도 되므로 이해도가 높아지고, 개발을 concurrent하게 할 수 있으므로 개발시간이 줄어들 수 있다. 이렇게 나눔으로 해서 실행시간에는 모듈간에 반복되는 스위칭으로 인해 효율이 떨어질 수 있지만, subroutine으로 맵핑해주는 다른 프로그램의 도움을 얻어 다소 극복할 수 있다. 이러한 information hiding외에도 계층 구조를 통해서 재사용성을 높일 수 있는 모듈의 구조를 만들 수 있다.(Dijkstra’s hierarchy)
이 페이퍼는 소프트웨어 개발 시간을 줄이면서 시스템의 유연성(flexibility)와 이해도(comprehensibility)를 향상시킬 수 있는 메커니즘으로 모듈화(modularization)에 대해서 논의한다.
모듈화된 프로그래밍에서의 주요한 성과는 코딩 기술과 어셈블러의 개발로써 보여지고 있다. 그 성과에는 한 모듈을 작성할 때 다른 모듈에 대해 약간의 지식만을 가지고 작성이 가능하게 하는 것과, 전체 시스템을 재조립(reassembly)하지 않고 모듈들을 교체하거나 재조립이 가능하게 하는 것이다. 이러한 모듈화된 프로그래밍을 함으로써 얻을 수 있는 이득은 크게 3가지로써, 관리하기 쉽고, 제품의 유연성이 높아지고, 시스템의 이해도를 높일 수 있다. 여기서 말하는 모듈은 하위프로그램(sub-program)이라기 보다는 책임 할당(responsibility assignment)라 볼 수 있으며, 모듈화는 모듈에 대한 독립적인 작업 수행 이전에 행해져야 하는 디자인 결정들(design decisions)을 말한다.
이 논문에서는 예제로 KWIC Index Production System을 들고 있다. 크게 두 가지로 모듈화를 하였으며, 첫 번째는 Input, Circular Shift, Alphabetizing, Output, Master Control의 다섯 가지 모듈로 나누었고, 모듈에 대한 기능적인 설명과 모듈 사이에 주고받는 데이터 구조에 대해 설명하였다. 이 모듈들은 개발되기 이전에 인터페이스의 정의를 필요로 한다. 두 번째 모듈화는 유사하긴 하지만, 모듈의 정의에 모듈 외부로 보여줄 인터페이스를 정의하고 있다. 그 모듈들은 Line Storage, Input, Circular Shifter, Alphabetizer, Output, Master Control이 있다. 첫 째로, Line Storage에는 CHAR(r,w,c);r번째 줄 w번째 단어의 c번째 문자를 표현하는 정수 값, SETCHAR(r,w,c,d)는 CHAR(r,w,c)를 d로 표현되는 문자로 설정, WORDS(r)은 r번째 줄의 단어의 수를 리턴 등의 인터페이스와 그 기능을 정의하였다. 또 주요한 내용으로 Circular Shifter에 CSCHAR(l,w,c)는 l번째 circular shift의 w번째 단어의 c번째 문자를 리턴하며 파라미터에 대해서도 설명하고 있다. Alphabetizer는 ALPH, ITH(i);알파벳 순서로 i번째에 오는 circular shift의 index를 리턴 과 같은 인터페이스를 정의하고 있다.
첫 번째 모듈을 나누는데 있어서 기준은 processing하는 순서이며, 두 번째 모듈을 나누는 데 있어 기준으로 제시된 것은 자료 표현(data representation)의 정보를 숨김(information hiding)하는 것이다. 또한 information hiding외에도 세부적인 기준들(data structure, sequence of instructions, formats of control blocks, character codes, alphabetic orderings, sequence of certain items의 숨김)에 대해서 설명하고 있다. 두 번째 모듈화의 장점은 자료 표현을 다른 모듈로부터 숨기고 line storage에서 관리하며 인터페이스만 제공함으로 인해서, 이 시스템에서 변화 가능한 것들(Input형식, 라인 저장 방식, 단어를 4개씩 저장할 것인가 하는 결정, 간접 혹은 직접 정렬하여 circular shift를 저장할 것인지, 알파벳 순서로 리스트를 만드는 것을 on-demand로 할 것인지)에 따른 영향을 최소한으로 숨길 수 있다는 것이다. 그리고 시스템을 이해하는 데 있어 전체를 이해하지 않아도 되므로 이해도가 높아지고, 개발을 concurrent하게 할 수 있으므로 개발시간이 줄어들 수 있다. 이렇게 나눔으로 해서 실행시간에는 모듈간에 반복되는 스위칭으로 인해 효율이 떨어질 수 있지만, subroutine으로 맵핑해주는 다른 프로그램의 도움을 얻어 다소 극복할 수 있다. 이러한 information hiding외에도 계층 구조를 통해서 재사용성을 높일 수 있는 모듈의 구조를 만들 수 있다.(Dijkstra’s hierarchy)
이올린에 북마크하기