0. 개요

  1. Software Life Cycle
  2. Development process
  3. Development process Models
  4. Modularity
  5. Documentation

1. Software Life Cycle

처음으로 소프트웨어가 개발된 후에, 한동안 소프트웨어는 사용된다. 시간이 흐르면서 소프트웨어에 여러가지 에러 및 개선사항들이 발견되기 때문에, 여러가지 변화를 소프트웨어는 반영할 수 있어야 한다. 그래서 소프트웨어가 구식이 될 때까지(obsolute) 계속해서 사용하고 수정하는 두가지 단계의 과정이 반복된다.

2. Development process

위의 소프트웨어 생명주기에서, 소프트웨어 개발 과정은 총 4가지 단계로 나누어질 수 있다

  1. Analysis
  2. Design
  3. Implementation
  4. Testing

2-1. Analysis

시스템 혹은 소프트웨어가 완수해야할 내용을 구체화하는 단계

  • 유저 정의 (일반 or 특정 유저)
  • 수요 정의
  • 요구사항 정의
  • 방법론 정의

2-2. Design

분석 단계에서 정의된 요소를 어떻게 시스템이 수행할 수 있는지 정의하는 단계

잘 정립된 원칙을 사용하는 design phase를 modularity로 부른다. 시스템은 작으 모듈들로 나누어질 수 있으며, 각각의 모듈들은 설계 및 테스트 후에 다른 모듈들과 연결되어 전체 프로그램을 구성할 수 있게 된다.

2-3. Implementation

구현(Implementation)은 직접 프로그램을 작성 및 구현하는 단계로서, 흐름도 및 의사코드등의 방법들을 활용해서 실제 코드 작성 직전에 프로그램의 논리적 흐름을 파악하는데에 사용할 수 있다. 이후에, 프로그래머는 실제 프로그래밍 언어를 이용하여 코드를 작성한다.

2-4. Testing

말그대로 코드가 작성된 후에 테스트 하는 단계이며, 크게 두가지 방법으로 나뉘게 된다.

구분 Black Box testing White Box testing
수행 인원 테스트 엔지니어 or 유저 프로그래머
프로그램에 대한 지식 내부 구조 및 작동방식을 모름 프로그램에 대한 모든 정보를 이해하고 있음
특징 요구사항을 집중적으로 테스트함 모든 지침을 준수하고, 가능한 모든 경우를 테스트함

3. Development process Models

앞서 말한 개발 과정을 수행하기 위해서 다양한 방법론들이 존재한다. 전통적인 소프트웨어 개발 모델 중에서 폭포수 모델(waterfall model)과 점진적 모델(incremental model)이 존재함

3-1. Waterfall Model

대표적인 단방향 개발 흐름을 가지고 있으며, 이전 단계의 작업이 수행되지 않으면 다음 단계의 작업을 수행할 수 없다. 사용자의 요구사항 변경을 반영하기가 어려운 구조이기 때문에, 요구사항이 잘 정립되어 있을 떄에만 사용하기 적합한 개발 모델이다

3-2. Incremetal Model

단어 그대로 점진적으로 소프트웨어가 구성이 된다. 사용자의 요구사항이 우선순위가 있으면, 우선순위가 높은 요구사항을 수행할 수 있는 모듈부터 개발을 시작하는 방법이다. 테스팅 단계에서도 중요한 시스템 혹은 모듈을 중심으로 테스트를 진행한다. 모듈 각각의 개발 과정은 앞서 말한 4가지의 개발 과정을 포함한다. 프로젝트의 실패 리스크를 낮출 수 있다는 장점이 있으며, 폭포수 모델에 비해서 사용자의 요구사항 변경에 더 잘 대처할 수 있다.

4. Modularity

모듈화는 프로그램을 개발할 때에 이해하고 다루기 쉬운 형태로 작은 단계로 쪼깨는 것을 말한다. 따라서 큰 프로그램을 서로 상호작용할 수 있는 작은 프로그램으로 나누는 것이다.

다음의 두 가지 방법은 모듈성을 나타내는데에 사용될 수 있다

  • Structure Chart: 절차지향 프로그래밍에서 함수들 간의 관계를 표현
  • Class Diagram: 객체지향 프로그래밍에서 클래스 간의 관계를 표현

4-1. Coupling

결합도는 서로 다른 두개의 모듈이 얼마나 인접한지를 의미. 결합도가 높다는 것은 모듈끼리 서로 의존성 높다는 것을 의미한다. 실제로는 모듈끼리 완벽히 독립적인 것은 불가능하기 때문에, 최대한 결합도를 낮추고자 하는 것을 목표로 한다.

  • Data Coupling: 두 모듈의 하나의 데이터를 공유하고 있을 때에
  • Control Coupling: 한 모듈이 다른 모듈에 대한 제어권을 가지고 있을 때

4-2. Cohesion

응집도는 모듈 내부에서의 요소가 얼마나 인접한지를 의미한다.

  • logical Cohesion: 유사한 구조를 가지고 있는 기능들을 단순히 모아놓은 형태의 모듈; 약한 형태의 응집
  • functional Cohesion: 모듈의 모든 기능이 단 하나의 행동을 수행하기 위하여 구성됨; 강한 형태의 응집

5. Documentation

Documetation은 크게 두가지 목적을 위해서 작성되며, 소프트웨어와 함께 계속해서 수정되어야 한다.

  1. User Documentaion: 소프트웨어의 기능과 어떻게 사용할 수 있을 지에 대해서 기술
  2. System Documentaion: 소프트웨어의 내부 구성에 대해서 설명, 소프트웨어 생명 주기에서 시스템이 어떻게 유지 보수되어야 할지에 대해서 기술