소프트웨어 설계와 추상화


추상화라는 것을 어떻게 정량화 할 수 있을지는 잘 모르겠지만, 추상화를 시키려는 목적을 인간이 쉽게 인식하기 위함이라고 정의해본다면 어떤 지표에 의해 기계적으로 측정되고 판단할 수 있을 것이다.

현실세계에 존해자는 어떤 물체의 특징을 있는 그대로 표현한다면, 인간의 인식 관점에서 바라볼 때 어렵고 인식하기 어려울 것이다.

그것을 정보의 손실을 감안하더라도 인간의 인식을 증진시키기 위해 덜 중요하다고 판단되는 부분을 과감하게 쳐내버린다면, 인간의 인식으로 쉽게 파악할 수 있을 것이다.

사실, 소프트웨어의 설계는 다른 사람이 그 내용을 학습하는 것과 비슷하다고 볼 수 있다.

그림1 에서 위의 그림이 세포 분열의 real한 그림이다. 잘 모르는 사람들은 저 사진만 보고 세포분열의 몇번째 단계인지 쉽게 이해하지 못한다. 그것이 정말 real한 그림임에도. 현실세계를 있는 그대로 표현하는 것은 인간의 인식에 도움이 되지 않을 수 있는 것이다.

그림2에서 현실세계를 보다 real하게 반영하기 위해 아래 그림과 같이 detail하게 표현하면 할 수록 현실세계에 보다 가깝게 표현될 수 있겠지만, 인간의 인식능력에 한계가 있어서 오히려 이해하기 어려워진다.

결국, 소프트웨어 설계에서 real-world를 표현하기 위해 정말 하나도 빼트리지 않고 현실적으로 표현했다고 하는 것이 바람직하지 않을 수 있다.

그래서 과감하게 정보를 은닉하고 중요한 특징들을 부각시켜서 인간의 인식 능력으로도 쉽게 파악할 수 있도록 해야 한다. 그래서 아래 그림과 같이 표현하고 각각의 특징을 정의하여 각 단계간의 구별되는 속성이 표현된다면, 인간이 쉽게 파악할 수 있을 것이다.

세포분열

그림1

일기예보

그림2

설계에서의 추상화 단계라는 것이 이와 비슷하다고 생각한다. 모든 것을 있는 그대로 모두 표현하는 것은 사람을 불편하게 만든다. 적절하게 숨겨지고 모르는 것도 있어야 오히려 편안하게 생각한다.

Evidence based training method(교육학 책)란 책을 읽다가 갑자기 설계쪽에 급하게 적용시켜봤음.

(약간 오해가 있을 수도 있는 표현이긴 한데, 설계에서 정보를 누락시키라는 의미는 아니다. 정보를 모두 표현하기는 하지만 여러 view point를 가지고 각 viewpoint에서만 필요한 정보를 표현해야 한다는 의미이다.

예를 들면, 필요 정보가 Info1,2,3,4,5,6,7,8,9,10이 있다고 가정할 때, Viewpoint A,B,C로 필요정보를 표현하고자 한다면, A에서는 1,3,5,7,9를 B에서는 2,4,6,7,8,9,10을, C에서는 1,2,3,4,5,6,7을 표현하라는 것이다. 어째 이렇게 써놓고보니 당연한 소리를 한 것이 되어버렸음.. 결국 viewpoint의 목적은 인간의 인식 능력에 도움을 주기 위한 것이라는 것이다.

정보를 loss시키는 것 혹은 일부 관심사항(concerns)만 표현하는 것을 추상화라고 표현하는 것이 적절한지에 대해서는 좀 생각해 봐야 할 것 같긴 함….)

관련링크

IEEE std 1016-2009 systems design

ISO/IEC 42010 RECOMMENDED PRACTICE FOR ARCHITECTURAL DESCRIPTION

LAYERED ARCHITECTURE DESIGN GUIDE

소프트웨어 설계 지표 – INSTABILITY, ABSTRACTNESS

CHAPTER 4: A TECHNIQUE FOR ARCHITECTURE AND DESIGN(1)

CHAPTER 4: A TECHNIQUE FOR ARCHITECTURE AND DESIGN(2)

CHAPTER 4: A TECHNIQUE FOR ARCHITECTURE AND DESIGN(3)

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중