Tag Archives: Feature Modeling

Feature Dependency

Feature들 간에는 필연적으로 모델에 명시적으로 표현되지 않는 dependency가 존재할 수 밖에 없다. 어떤 feature의 변경이 예기치 않게 다른 feature에 영향을 주게 된다면 이는 제품 개발 과정에서 불확정 리스크가 되어 지속적으로 나쁜 영향을 끼칠 여지를 갖게 한다. 결국 이러한 dependency를 어떻게 찾을 수 있고 줄일 수 있을지를 고민해 보는 것은 중요한 과정이 된다.

“If features are independent each other, each of them can be developed in isolation, and effects of a variation can be localized to the corresponding component. However, as features usually are not independent, a feature variation may cause changes to many components implementing other features.”

“In the product line context, products of a product line must be derivable from product line asset. Product line assets must be designed so that inclusion or exclusion of variable features causes little changes to components implementing other features.”

– Feature Dependency Analysis for Product Line Component Design (Kwanwoo Lee, Kyo C. Kang)

지난 세미나 논문이었던 ‘Feature Dependency Analysis for Product Line Component Design’에서는 이러한 디펜더시를 분류하고 줄일 수 있는 방법을 제시하고 있다. 하지만 이 논문을 읽기에 앞서서 디펜던시를 고민해 보고 카테고라이징 하려는 노력을 기울여 본다면 좋은 경험이 될 것이라 생각한다.

  • Feature Model의 표현과 구조에 대한 이해
  • FM에서 commonality와 variability가 표현되는 형식
  • FM에서 selection/binding이 어떻게 진행되는지

일단 이 정도에 대한 이해가 선행된다면 디펜던시에 대해 기본적으로 고민해 볼 수 있지 않을까. 사실 벌써 알고 있어야 하는 것들이지만 이 기회에 분명히 정리해두고 넘어가는 것이 좋을 것 같다.

디펜던시는 우선 physical case와 mental case로 분류하여 볼 수 있지 않을까 생각한다. 어떤 feature가 자발적으로 다른 feature를 참조하거나 사용하는 경우로서 physical case를 분류하고, 스스로가 수행하는 역할에 직접적으로 관련되지는 않지만 전체 시스템의 운영을 위해 고려되어야만 하는 경우로서 mental case를 분류하면 어떨까라는 생각이다.

Physical한 경우는 그만큼 명료하다. 어떤 feature가 활성화 되기 위하여 선제적으로 기능하고 있어야하는 다른 feature가 요구될 수 있다. 다른 feature의 정보를 참조해야 하거나 동작을 위해서 다른 feature의 기능의 사용이 필요한 경우가 여기에 해당할 수 있겠다. 또한 이러한 참조/사용의 결과로 연관된 feature의 변경을 유발하는 경우와 그렇지 않은 경우를 나누어 볼 수 있을 것 같다. 그리고 이러한 분류가 유효하다면 참조/사용과 수정의 경우는 서로 orthogonal하게 분리되어 서로 다른 시각에서 고려되어야 할 것이다.

여기서 생긴 의문점은 “하나의 feature에 관련된 n 경우의 디펜던시를 찾고 분석하는 것도 중요하겠지만, 어떤 한 디펜던시에 의해 다른 디펜던시들이 implicit 하게 유발 되는 경우를 조심해야 한다”라는 생각이었다. 이는 아마도 당연히 참인 가정일 것이고, 이러한 implicit한 특징이 디펜던시의 분석을 어렵고도 중요하게 만드는 핵심 요인이 될 것이라 예측해 본다. Entity의 수가 linear하게 증가한다고 하더라도 relationship의 경우의 수는 exponential하게 증가할 수 있다. 떄문에 이러한 늪에 빠지지 않기 위해서 명료하고 localize하여 디펜던시를 관리해야 할 것이다.

Mental한 경우는 이와 같은 implicit한 디펜던시를 분류하기 위해 생각한 것이다. Physical case한 경우와 같이 명시적이지 않기 떄문에 쉽게 찾을 수는 없지만, 디펜던시의 의도치 않은 확장(전염)을 방지하기 위해서 꼭 유심히 분석되어야 할 부분이라고 생각한다. (아직 세부적인 사항을 제시할 정도로 명쾌하게 생각이 전개되지는 않는다)

끝으로, 모든 디펜던시는 physical한 관계에서 부터 시작되는 것이 아닐까 예상해 본다. 결국 이러한 physical한 관계가 trigger가 되어서 mental한 디펜던시를 유발시키는 관계에 있지는 것은 아닐지. 앞으로 논문을 읽으며 고민한 내용을 확인해 보아야겠다.