본문 바로가기

소프트웨어 정보/소프트웨어공학

소프트웨어 개발 방법론 - 구조적 개발 방법론

이번 시간에는 소프트웨어 개발 방법론 중 구조적 개발 방법론에 대하여 설명하도록 하겠습니다. 소프트웨어 방법론이란 과거 경험을 토대로 성공적으로 평가되는 소프트웨어를 분석 및 설계방법들을 모아 하나의 개발 방법으로 정형화 한 것을 의미합니다. 

 

소프트웨어 방법론은 구조적 개발 방법론과 소프트웨어 방법론으로 나눌 수 있습니다. 구조적 방법론은 위의 정의를 요구사항 분석 -> 설계 -> 구현 -> 검사 -> 디버깅 -> 유지보수의 순서로 정리할 수 있습니다.

 

요구사항 분석이란 구조적 분석 기법(도구)은 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 방법을 의미합니다. 사용자 면접, 현재 사용중인 문서 검토, 설문 조사 등의 방법을 사용하는데 이는 분석가가 갖추어야 할 가장 중요한 능력입니다. 거시적 관점에서 세부적인 요소를 관찰할 수 있는 능력이라고 할 수 있습니다. 이후에 설계, 구현, 검사, 디버깅, 유지보수 순서를 진행하게 됩니다. 또한, 구조적 분석 기법(도구)은 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 방법으로 종류에는 자료 흐름도, 자료 사전, 소단위 명세서, 개체 관계도, 상태 전이도 등이 있습니다.

 

자료 흐름도란 DFD로 Data Flow Diagram의 약자입니다.



직사각형은 자료의 출처를 의미하며, 화살표는 자료의 흐름을 의미합니다. 동그라미는 프로세스를 의미하고 위아래선으로 이루어진 도형은 자료저장소를 의미합니다.

 

자료흐름도의 특징은 7가지 정도 나열할 수 있습니다.

  - 시스템내의 모든 자료 흐름은 4가지의 기본 기호로 표시된다.

  - 각 각의 변환(처리)에 대하여 개별적인 상세화가 가능하다

  - 자료는 처리를 거쳐 변환될 때마다 새로운 명칭을 부여해야 한다

  - 자료흐름도의 최하위 처리는 소단위명세서를 갖는다.

  - 어떤 처리가 출력자료를 산출하기 위해서는 필요한 자료가 반드시 입력되어야 한다.

  - 상위단계의 처리와 하위 자료흐름도의 자료 흐름은 서로 일치돼야 한다.

  - Bubble Chart 라고도 부른다.

 

자료 사전이란 DD로 Data Dictionary의 약자입니다. 이 자료 사전은 DFD에 있는 자료를 더 자세히 정의하고 기록한 것으로 데이터를 설명하는 데이터 (메타 데이터)입니다.

 


각 기호의 의미는 위의 표와 같습니다. 

 

요구사항 분석이 완료되면 다음은 설계를 시작합니다. 구조적 방법론에서 설계는 모듀화 -> 추상화 -> 정보 은닉 -> 구조화 순서로 진행되는데  각각에 대하여 설명하고 넘어가도록 하겠습니다.

 

모듈화란 소프트웨어를 모듈 단위로 나누는 것을 의미합니다. 소프트웨어 복잡도가 감소하고, 변경이 쉬우며 프로그램 구현이 용이해지는데 결합도와 응집도로 나타냅니다. 결합도 (Coupling)는 모듈 간에 상호 의존도로 독립적인 모듈이 되기 위해서는 결합도가 약해야 합니다. 종류에는 데이터, 스탬프, 제어, 외부, 공통, 내용가 있는데 각 결합도의 순서는 이터 < 스탬프 < 제어 < 외부 < 공통 < 내용입니다.

  - 데이터 결합도(Data): 데이터 요소(파라미터,인수,매걔변수)로만 구성된 경우

  - 스탬프 결합도(Stamp): 배열이나 레코드 등의 자료구조가 전달될 경우

  - 제어 결합도(Control): 제어 요소가 전달된 경우

  - 외부 결합도(External): 외부로 선언한 데이터(변수)를 참조할 경우

  - 공통 결합도(Common): 공통 데이터 영역을 사용할 경우

  - 내용 결합도(Content): 내부 기능 및 내부 자료를 참조할 경우

 

응집도 (Cohesion)는 모듈 안의 요소들이 서로 관련되어 있는 정도로 모듈이 독립적인 기능으로 잘 정의되어 있는 정도를 나타냅니다. 독립적인 모듈이 되기 위해서는 응집도가 강해야 하는데 종류에는 우연적, 논리적, 시간적, 절차적, 교환적, 순차적, 기능적이 있는데 각 응집도의 순서는 우연적 < 논리적 < 시간적 < 절차적 < 교환적 < 순차적 < 기능적입니다.

  - 우연적 응집도(Coincidental) : 서로 관련 없는 요소로만 구성

  - 논리적 응집도(Logical) : 유사한 성격 또는 처리 요소들로 구성

  - 시간적 응집도(Temporal) : 특정 시간에 처리되는 몇 개의 기능을 모아 구성

  - 절차적 응집도(Procedural) : 구성 요소들이 그 기능을 순차적으로 수행할 경우

  - 교환적 응집도(Communication) : 동일한 입력과 출력을 사용하여 서로 다른 기능을

                                                  수행하는 구성 요소들이 모였을 경우

  - 순환적,순차적 응집도(Sequential) : 출력 데이터를 그 다음 활동의 입력 데이터로

                                                      사용할 경우

  - 기능적 응집도(Functional) : 단일 문제와 연관되어 수행될 경우

 

추상화란 전체적이고 포괄적인 개념을 설계한 후 세분화 구체화 시켜나가는 방법을 의미합니다.

 

정보 은닉이란 모듈 내부에 포함된 절차와 자료들의 정보를 숨겨서 다른 모듈이 접근하거나 변경하지 못하도록하는 기법을 의미합니다.

 

구조화란 공유도와 제어도로 나눌 수 있는데 공유도(Fan-In)란 어떤 모듈을 제어(호출)하는 상위 모듈의 개수를 의미하며 제어도(Fan-out)란 어떤 모듈에 의해 제어(호출)되는 하위 모듈의 개수를 의미합니다.

 

구현은 설계단계에서 생성된 내용을 컴퓨터가 알 수 있는 형태로 변환하는 과정(코딩)을 의미합니다. 프로그램 언어 선택 기준은 대상 업무 성격, 개발 담당자의 경험과 지식, 과거의 개발 실적 등으로 컴퓨터 프로그램을 여러 갈래로 분기하여 복잡하게 하지 않고, 순서대로, 선택적으로 반복합니다.

 

검사(Test)는 소프트웨어 품질 보증 활동의 하나로써 오류를 발견하기 위하여 프로그램 수행하는 과정을 의미합니다. 검사 기법에는 화이트 박스 테스트와 블랙 박스 테스트로 나누어지는데 각각에 대하여 설명하도록 하겠습니다.

 

화이트 박스 테스트는 구조 테스트로 모듈 안의 작동을 자세히 관찰할 수 있으며, 프로그램 원시 코드의 논리적인 구조를 커버하도록 테스트 케이스를 설계하는 프로그램 테스트 방법을 의미합니다. 프로그램의 제어 구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 제어하고 모듈 안의 작동을 직접 관찰합니다. 원시 코드의 모든 문장을 한 번 이상 수행하는 특징을가지고 있는데 종류에는 기초 경로 검사(Basic Path Testing, McCabe 제안), 조건 검사(Condition Testing), 루프 검사(Loop Testing), 데이터 흐름 검사(Data Flow Testing) 등이 있습니다.

 

블랙 박스 테스트는 기능 테스트로 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하기 위한 검사를 의미합니다. 발견할 수 있는 오류는 성능, 부정확한 기능, 인터페이스 오류 등이 존재하는데, 종류에는 동치분할검사(Equivalence Partitioning), 경계값 분석(Boundary Value Analysis), 원인-효과 그래프 검사(Cause-Effect Graphing Testing), 오류예측검사(Fault Based Testing), 비교검사(Comparison Testing) 등이 있습니다.

 

디버깅은 오류 수정 과정을 의미합니다.

 

유지 보수는 가장 많은 비용이 투입되는 단계로써 인수, 설치된 후 발생하는 모든 공학적 작업을 의미합니다. 유지보수 활동에는 수정 보수, 적응 보수, 기능 보수, 예방 보수 등이 있는데 각각에 대하여 간단하게 설명하도록 하겠습니다.

  - 수정 보수 (Corrective) : 오류 수정

  - 적응 보수 (Adaptive) : 환경 변화(하드웨어, 운영체제 등) 반영

  - 기능 보수 (Perfective) : 기능 개선, 가장 큰 비중 차지(Win98 -> Win 2000 -> Win XP)

  - 예방 보수 (Preventive) 

'소프트웨어 정보 > 소프트웨어공학' 카테고리의 다른 글

소프트웨어 재사용  (0) 2018.02.15
소프트웨어 개발 방법론 - 객체지향 개발 방법론  (0) 2018.02.14
형상 관리  (0) 2018.02.12
위험 관리  (0) 2018.02.11
품질 관리  (0) 2018.02.10