Modularity is one of the most important principles in software engineering. According to modularity principle, the structure of software is decomposed into a set of relatively independent modules that hide inner details and only expose relevant information. The information hiding of modules supports to manage the complexity of software development.
Among various proposals for automatic modularization of software designs, we follow the line of concept-based approaches that use the theory of Formal Concept Analysis (FCA). These approaches provide an intent, in the form of propositional formula, of an identified module and this intent is useful to interpret the meaning of the module. However, to apply concept-based approaches in large-scale software designs, the $\emph{granularity problem}$ should be addressed. Roughly speaking, FCA generally results in a relatively fine granularity of modules because of the conjunctive characterization of formal concepts and, thus, may be inadequate for large-scale designs.
To address this problem, we investigate recent proposals for concept formulations, named Property-Oriented Concept Analysis (POCA) and Object-Oriented Concept Analysis (OOCA). This investigation reveals that these recent concept formulations can provide $\emph{coarser}$ modules than those of FCA. In addition, the formulation of OOCA guarantees the encapsulation of intents in identified modules and, thus, OOCA is superior to other concept formulations with respect to the principle of information hiding. Consequently, we decide the employment of OOCA in software modularization.
For practicality, we employ Genetic Algorithm (GA) and design a chromosome representation to avoid the explicit construction of a concept lattice and the enumeration of concept partitions. Because there are generally very large number of concept partitions, it is inevitable to adopt a search technique for finding plausible concept partitions within a reasonable time. In addition, we develop a set of modularization operators and visualization schemes to revise a selected concept partition.
To illustrate the potential of our approach, we perform the case study with a real insurance software design where our result is comparable with that of $\textsf{Bunch}$, one of frequently referenced modularization tools with respect to $\textsf{MoJo}$ distance. And, our technique has advantages in the revision of proposed modular structures because of intents for understanding identified modules in the form of propositional formula.
모듈화는 가장 중요한 소프트웨어 공학의 원칙 중의 하나이다. 모듈화 원칙에 따라서 소프트웨어의 구조는 내부 정보를 은닉하고 필요한 정보만을 공개하는 상대적으로 독립적인 모듈들로 구성된다. 이러한 모듈들의 정보 은닉을 통해서 소프트웨어 개발의 복잡도를 억제할 수 있다.
지금까지 소프트웨어 설계를 위한 자동화된 모듈화 기법들 중에서 본 연구는 Formal Concept Analysis (FCA)를 사용하는 개념 기반 접근방법들을 따른다. 개념 기반 접근방법들은 식별된 모듈에 대해서 명제논리 형태로 표현되는 의도 (intent)를 제공하는데, 이러한 의도는 식별된 모듈의 의미를 파악하는데 유용하다. 그러나, 개념 기반 접근방법들을 대규모 소프트웨어에 적용되기 위해서는 크기 문제 (granularity problem)가 해결되어야 한다. 일반적으로 FCA는 기반하고 있는 수학적 정의에 의해서 식별된 모듈들의 크기가 세밀하여 대규모 설계에 적합하지 못하다.
이러한 문제를 해결하기 위해서 우리는 새로운 개념 분석 기법들인 Property-Oriented Concept Analysis (POCA)와 Object-Oriented Concept Analysis (OOCA)를 소프트웨어 모듈화 관점에서 연구하였다. 이러한 연구를 통해서 새로운 개념 분석 기법들이 FCA 보다 큰 규모의 모듈을 식별할 수 있음을 알 수 있었다. 또한, OOCA는 의도를 구성하는 내용들을 식별된 모듈 내에 캡슐화함으로써 정보 은닉 관점에서 우수함이 밝혀졌다. 따라서, 우리는 소프트웨어 모듈화에 있어서 OOCA를 적용하기로 결정하였다.
본 연구의 실용성을 위해서 새로운 유전자 구조를 설계하여 유전자 알고리즘를 적용하였다. 설계된 유전자 구조는 모든 개념들의 생성없이 유용한 모듈 구조의 효율적인 검색을 지원한다. 일반적으로 대규모 소프트웨어 설계에서는 아주 많은 수의 개념들이 존재할 수 있음으로, 적절한 시간 내에 유용한 모듈 구조를 검색하는 효율적인 검색 기법의 적용이 필수적이다. 또한, 선택된 모듈 구조를 수정하기 위한 모듈화 연산자와 시각화 기법을 개발하였다.
제안된 기법의 효용성을 보이기 위해서 실제 보험 소프트웨어의 설계에 대한 사례 연구를 수행하였다. 사례 연구를 통해서 제안된 기법이 $\textsf{MoJo}$ 거리 측면에서 널리 언급되는 모듈화 도구의 하나인 $\textsf{Bunch}$와 유사한 수준의 결과를 제공하며, 식별된 모듈에 대해서 명제 논리로 표현되는 의도를 제공함으로써 모듈화 구조를 이해하고 수정하는데 장점을 가짐을 보일 수 있었다.