1. 복잡도 

개요 

복잡도 

 문제를 푸는 데 걸리는 시간을 언급할 때 복잡도를 사용 

 복잡도 측정 시 길이, if문의 수, 모듈 사이의 정보의 흐름 등과 같은 시스템의 속성으로 측정 

 소프트웨어 시스템의 속성들의 유형 

- Intra-Modular Attribute 

  → 개별적인 모듈의 속성들 

- Inter-Modular Attribute 

  → 의존성을 가지는 모듈의 집합으로써 보여지는 시스템의 속성들 


복잡도 측정 


Halstead’s 방법(Software Science) 

 코드의 라인 수(LOC)를 세는 것 

 소프트웨어의 연산자(Operators)와 오퍼랜드(Operands)의 수를 사용 

 기본 4개의 엔터티 정의 


McCabe’s 순환복잡도(Cyclomatic Complexity) 

 프로그램의 제어의 흐름을 그래픽으로 표시 기반 

 하나의 절차 그래프 또는 하나의 메인 프로그램은 오직 하나의 출발점과 끝점을 가지고 있다고 가정 

 각 노드는 출발 노드로부터 도달될 수 있고, 끝 노드도 각 노드에서 도달될 수 있음 

- 이 경우, 그래프는 연결되어 있음 

 만약 프로그램이 메인 프로그램과 하나 또는 그 이상의 프로시저로 구성되었다면 

- 그때 제어 그래프는 각 프로시저와 메인 프로그램과 함께 여러 개의 연결 요소를 가지고 있음 


McCabe’s 순환복잡도(Cyclomatic Complexity) 

 프로그램의 구성요소의 순환복잡도에 대해 최대 10까지 제한 

 복잡도 측정 규준은 테스팅할 때 적용 

     

그 이외의 복잡도 측정 규준(Suffer)의 공통점 

 The Time in Man-month, 코드의 라인 수, Task의 크기에 달려있음 

 이런 것들은 모듈의 최적화된 코드를 결정 

 모듈 속에 있을 수 있는 에러를 추정 

 소프트웨어의 비용 산출 시 사용 


설계 평가 기준 

모듈의 크기 

소규모 시스템 

함수, 서브루틴 

대규모 시스템 

독립 프로그램 

- 하나의 수행 파일 

모듈 응집력(Module Cohesion) 

모듈 안의 요소들이 강한 응집력을 갖도록 설계 

모듈 결합도(Module Coupling) 

다른 모듈과의 결합도가 약한 모듈이 되도록 설계 

설계 요령(Design Heuristics) 


구조적 설계(Structured Design) 

개념 

시스템을 이루는 모듈의 구조를 파악하는 방법 

모듈 분해의 계층적, 인터페이스 지향적 접근 


시스템 구조도(Structure Chart) 

시스템 구조도의 도출 

시스템을 모듈 단위로 분할 

모듈의 계층적 구성 

모듈 사이의 입출력 인터페이스 

모듈의 이름과 기능 



자료의 변환 흐름(Transformation Flow) 

변환 분석 

자료 흐름도를 입력 흐름, 변환센터, 출력 흐름으로 분할하는 과정 



변환 분석방법 

자료흐름도에서 입력 자료 흐름과 출력 자료 흐름을  파악   1 

중앙 변환 부분을 식별  2 

변환 중심부를 축으로 최상위 구조(First-cut) 작성  3 

각 모듈의 하위 구조도 같은 방법으로 분석  4 

설계 기준을 적용하여 수정, 최적화  5 


다섯 가지 구조 

저장소 구조(Repository Architecture) 

서브 시스템들이 단일 중앙 저장소의 자료를 접근하고 변경 


MVC(Model View Controller) 구조 

 모델, 뷰, 제어구조라는 세 가지 다른 서브 시스템으로 구성 

 모델 서브 시스템 

- 도메인의 지식을 저장, 보관 

 뷰 서브 시스템 

- 사용자에게 보여주는 시스템 

 제어 서브 시스템 

- 사용자와의 상호 작용 관리  


클라이언트 / 서버 구조 

 서버 

- 클라이언트라는 서브 시스템에게 서비스를 제공 

 클라이언트 

- 사용자와 대화 

계층 구조 

 시스템이 계층적으로 분할 

 각 서브 시스템이 하나의 계층이 되어 하위층이 제공하는 서비스를 상위층의 서브 시스템이 사용 


파이프 필터 구조 

 서브 시스템이 입력 데이터를 받아 처리하고,  결과를 다른 시스템에 보냄 

 서브 시스템을 필터라 하고, 서브 시스템 사이의 관계를 파이프라 함 


설계 문서화 

정의 

 시스템의 목표 및 주요 기능에 대한 서술 

 요구분석에 의한 시스템 구조의 명세 

– 자료구조(파일 또는 DB 구조) 

– 모듈 설계 

– 알고리즘 설계 

– 시스템 구조 등 


자료구조 설계 

정의 

사용되어지는 데이터(자료)에 대한 명세 

 명세내용 

파일이름 

자료를 보관할 파일(또는 DB)의 이름 

파일종류 

자료의 보관 형태 

자료이름 

자료형 

자릿수 등 


모듈 명세서 

개요 

 모듈의 세부처리 기능을 기술한 내역 

 시스템 구조도의 박스에 표현되지 않은 자세한 알고리즘을 기술 

 모듈의 내부 자료에 대한 설명을 포함 

 프로그램 구조도와 함께 시스템의 동작 상태를 예측할 수 있는 근거 제공 


알고리즘 설계 

상세설계의 표현 

설계의 표현과 코딩이 용이할 것 

수행이 가능할 것 

유지보수가 용이할 것 


모듈 명세화 기법 

흐름도(Flow Chart) 

N-S 도표(Nassi-Schneiderman Chart) 

의사 코드(Pseudo Code) 

의사 결정표(Decision Table) 

의사 결정도(Decision Diagram) 

PDL(Program Design Language) 

상태천이도(State Transition Diagram) 

행위도(Action Diagram) 


알고리즘 설계 

N-S 도표(Nassi-Schneiderman Chart) 

논리 기술의 기본 형태인 순차, 선택, 반복의 표현을 박스로 표현 



NS - 도표의 표현 규칙 

 도표는 항상 사각형 

 도표의 제어흐름은 위에서 아래로 

 수평으로 그어진 줄은 항상 평행 

 빈 박스 - Null Statement 

 모든 사각형은 다시 하나의 N - S도표 


장단점 

장점 

 구조적 프로그램 

 배우기 쉽고, 읽기 쉬우며 원시 코드로 전환이 쉬움 

 프로그램의 구조를 쉽게 파악할 수 있음 

 프로그램의 복잡도, 제어구조를 한눈에 볼 수 있음 

단점 

 도표를 그려야 하는 불편함 

 수정이 용이하지 않음 


의사코드(Pseudo Code) 

 모듈의 입출력 자료, 내부 자료, 수행 절차 등을 알고리즘의 형태로 기술 

 실제 프로그램과 유사하나 특정 프로그래밍 언어에 독립적 

 전문적 용어의 사용은 가능하지만 프로그래머의 고유한 스타일이나 특성이 무시될 수 있음 

 의사 코드를 쓰는 방식이 다를 수 있으므로 한 프로젝트 안에서 표준을 만들 필요가 있음 


ex)

Module 주급계산(고용자 레코드; 주급총액) 

   Assume  

  1<급여형태<3 

  0<주간 근무 시간<100 

   End Assume 

   Define 

  Rate: Real  /* 시간 당 급료 */ 

   Endefine 

   If (급여형태=1) Then  Rate=4.2 

   Elseif (급여 형태=2) Then Rate=6.0 

   Else  Rate=9.0 

   Endif 

   Select Using (주간근무시간) From 

  Case (1-40): 주급총액=주간근무시간*Rate 

  Case (41-50): 주급총액=(주간근무시간*Rate)*0.5 

  Case (51-99): 주급총액=(주간근무시간*Rate)*1.0 

   Endselect 

End Module   


사용자 인터페이스(User Interface) 

설계 

사용자 분석 

대화설계 원리 

메뉴 선택 

양식 채움(Form-Fill) 인터페이스 

명령어 방식 

직접 조작 

화면 설계 시 주의 사항 



중요성 

초기의 컴퓨터 -> 알고리즘이 중요 

     최근의 컴퓨터 -> 사용자의 입장이 중요  


평가 기준 

배우기 쉬움  

속도  

사용 중 오류의 빈도 

사용자의 만족  

사용법의 유지  


시스템의 최종 사용자에 대한 지식 

나이, 인원 

컴퓨터에 대한 기본 지식, 동기 

사용자의 부류 

다양한 사용자 부류 

 초보자 

 능숙하지 못한 사용자 

 전문가 



Posted by 멜데스