본문 바로가기
소프트웨어공학

[S/W] Modular Programming과 복잡도 제어(Complexity Control)

by IT 정복가 2022. 11. 16.
728x90

Modular Programming

Modular Programming Structured Programming

- Divide-and-Conquer 이론: Module 화의 기본

(문제를 여러 개로 분해하여 해결한 후 풀린 부분 문제들을 거꾸로 조합하여 원래의 문제를 푸는 방식이다.)

Divide-and-Conquer 이론

Module의 특징

1. 독립적으로 Test / 수행이 가능

2. 하나의 Entry(입구)와 하나의 Exit(출구)가 존재

3. 제어 구조를 가짐(순차구조, 선택구조, 반복구조) 

 

(Module화는 Program의 복잡도, 개발유지/보수 비용, Error 발생률을 제어해준다.)

 

Modular Programming의 장점

1. Program을 이해하는데 용이

2. Test하는데 용이

3. 수정 / 보완에 용이

4. 유지 / 보수 비용 감소

(Module의 크기가 작기때문에 이러한 장점이 나타난다.)

 

Module의 크기 결정

- IBM > 50 라인 이하를 권장

- Weinberg > 30개 이하의 명령어가 적당

- 일반적으로, 10~100개 정도의 명령어가 적당(1개의 Module 안에)


* Structured ProgrammingObject-Oriented Programming(객체 지향)으로 발전 후 CBD(Component-based-Develoment)기법으로 발전 

Object-Oriented Programming
객체 지향 기술 요소
- 객체(Object): Data + 연산으로 이루어짐
- 클래스(Class): Data + Method로 이루어짐
- 메시지(Message): 객체와 객체 간의 정보 교한

CBD 기법
재사용
- Component를 생성/통합
- 품질 향상, 안정성 확보, 개발 전체 비용 감소, 유지/보수 비용 감소
- Plug & Play 기술 개발

*Plug & Play란?
꽂아서(Plug) 바로 사용(Play)한다는 의미로 컴퓨터에 주변기기를 추가할 때 별도의 물리적인 설정을 하지 않아도 설치만 하면 그대로 사용할 수 있도록 하는 기능

복잡도 측정법

  • 1970년대 개발
  • Module의 크기가 주된 요인
  • 자동화 가능

1. S/W Science 이론

- Module 길이(N) = N1 + N2 (N1: 연산자의 총 수, N2: 피연산자의 총 수)

- 기준(N') = n1log2n1 + n2log2n2 (n1: 서로 다른 연산자 총 수, n2: 서로 다른 피연산자 총 수)

- 자신이 디자인한 Module의 길이(N)와 기준(N')이 비슷할 때가 가장 이상적

 

2. Control Variable Complexity 기법

- Cm = C + V (C: 비교 횟수, V: 비교시 참조된 유일한 변수의 수)

- (Cm1 + Cm2 + ... + Cmn) / n = 평균 복잡도

- 평균 복잡도를 구한 후 Module들을 평균 복잡도 근처 값으로 조절  

 

3. Cyclomatic Number 기법

- Module의 제어흐름에 의해 복잡도 측정

- 수학적 관점 > Cyclomatic Number = edge 수 - node 수 + 2*접속 성분 수

- 복잡도 관점 > Cyclomatic Number = 비교 횟수 + 1 (기준 = 10)

Module 간의 관계성

  1. 결합도(Coupling): Module들 간의 독립성 정도
  2. 반 결합도(Decoupling)
  3. 응집도(Cohesion): Module의 기능이 독립적으로 확실히 정의되었을 때

<결론>

좋은 프로그래밍이란?

- 좋은 프로그래밍은 Module들 간 결합도는 낮고 응집도는 높은 프로그래밍이다.

728x90