소프트웨어공학
[소프트웨어공학] 4. Software Processes (1)
leziwn.cs
2023. 9. 21. 18:51
The Software Process
: 소프트웨어 시스템을 개발하기 위한 체계적인 활동들
- 많은 소프트웨어 프로세스가 존재한다.
▶ 반드시 포함되어야 하는 활동들:
- 명세화: 소프트웨어 시스템이 해야 할 일을 정의한다.
- 설계 및 구현: 시스템의 구조를 정의하고 구현한다.
- 검증: 소프트웨어가 고객이 원하는 것과 일치하는지 확인한다.
- 진화: 변화하는 고객의 요구를 만족시키기 위해 진화한다.
▶ 소프트웨어 프로세스 모델
: 소프트웨어 프로세스를 단순하게 나타낸 것 (추상화시켜 표현한 것)
- 폭포수 모델 -- 예) 기차/자동차 제어 모델 (요구사항이 명확하고, 변경되지 않는다.)
- 점증적 개발 -- 예) 여행 (사용자와 상호작용)
- 재사용 기반 소프트웨어 공학 모델 -- 예) 수강신청 시스템 개발 경험이 있는 사람이 우리학교 수강신청 시스템을 개발할 때 (재사용)
Software Process Descriptions
▶ 프로세스를 설명할 때 포함되는 것:
- 제품: 프로세스 활동의 결과물
- 역할: 프로세스에 참여하는 사람들의 책임
- 사전/사후 조건: 프로세스 활동이 이루어지거나 제품이 만들어지는 전과 후에 만족해야 하는 조건들
Software Process Model
- 실무에서, 특히 대규모 시스템에서는 모든 일반적인 프로세스에서 가장 좋은 특징을 일부 조합해서 사용하여 개발한다.
폭포수 모델 (Waterfall model)
- 소프트웨어 개발 프로세스를 별도의 식별된 단계로 나누어 표현한다.
- 앞 단계가 끝나야 다음 단계로 넘어갈 수 있다.
- 예) 국방 (안정성이 중요하고, 요구사항이 명확)
▶ 폭포수 모델 - 단점
- 프로젝트를 개별 단계로 유연하지 않게 분할하면, 고객의 요구사항 변경 요구에 대응하기 어렵다.
--> 요구사항이 잘 이해되고, 설계 과정에서 변경이 제한될 때 적합하다.
▶ 폭포수 모델 - 사용
- 시스템이 여러 사이트에서 개발되는 대규모 엔지니어링 프로젝트에서 주로 사용된다.
- 폭포수 모델의 계획 중심적 특성이 작업을 조정하는 데 도움이 된다.
점증적 개발 (Incremental development model)
▶ 점증적 개발 - 장점
- 고객 요구사항 변경을 수용하는 비용이 절감된다.
- 다시 분석하고 작성해야 하는 문서의 양이 <폭포수 모델>보다 훨씬 적다. - 이미 진행된 개발 작업에 대한 고객 피드백을 더 쉽게 얻는다.
- 고객은 소프트웨어 시연에 의견을 줄 수 있고, 얼마나 많이 구현되었는지 확인할 수 있다. - 고객에게 유용한 소프트웨어를 빠르게 전달하고 배포할 수 있다.
- 고객은 <폭포수 모델>보다 더 빨리 소프트웨어가 제공하는 가치를 경험하고 실제로 사용해볼 수 있다.
▶ 점증적 개발 - 단점
- 프로세스가 가시적이지 않다.
- 중간 산출물을 문서로 확인하기 어렵다. - 새로운 증가분이 반영되면서 시스템 구조를 훼손시키는 경향이 있다.
- 소프트웨어 개선을 위해 리팩토링 하는 데 시간과 돈을 들이지 않으면, 정기적인 변경으로 인해 구조가 손상되는 경향이 있다.
재사용 기반 소프트웨어 공학 모델 (Reuse-oriented software engineering model)
: 시스템이 기존 구성요소 또는 COTS 시스템에 통합되는 체계적인 재사용을 기반으로 한다.
▶ 재사용 기반 소프트웨어 공학 모델 - 장점
- 개발해야 하는 소프트웨어 양을 줄인다.
- 비용이 감소한다.
- 소프트웨어를 고객에게 빠르게 전달할 수 있다.
▶ 재사용 기반 소프트웨어 공학 모델 - 단점
- 요구사항 타협은 불가피하다.
- 시스템이 사용자의 진정한 요구사항을 만족시키기 어려울 수 있다.
Process activities
1) 명세화 (Software specification)
: 시스템을 개발하기 위해 어떤 서비스가 필요한지 이해하고 정의하며, 시스템의 운영/개발에 대한 제약사항을 찾아내는 프로세스
2) 설계와 개발 (구현, 코딩) (Software design and implementation)
- 소프트웨어 설계: 명세를 실현하는 소프트웨어 구조를 설계한다.
- 구현: 소프트웨어 구조를 실행 가능한 프로그램으로 변환한다.
※ Design Process
▶ 설계 활동 --> 설계 결과
- 아키텍처 설계: 시스템의 전체 구조, 주요 구성 요소(하위 시스템/모듈), 이들의 관계 및 배포 방법을 식별한다.
--> 시스템 아키텍처 - 인터페이스 설계: 시스템 컴포넌트들 사이의 인터페이스를 정의한다.
--> 인터페이스 명세 - 컴포넌트 설계: 각 시스템 구성 요소의 작동 방식을 설계한다.
--> 컴포넌트 명세 - 데이터베이스 설계: 시스템의 데이터 구조를 설계하고, 데이터베이스에서 어떻게 표현할지 결정한다.
--> 데이터베이스 명세
3) 검증 & 확인 (Software verification & validation)
: 시스템이 주어진 명세를 잘 따르고 있다는 것과 시스템 고객의 요구사항을 만족시키고 있다는 것을 보이기 위한 것
+ 확인(checking)/검토(review) 프로세스, 테스팅
※ Stages of Testing
: 컴포넌트 테스트 --> 시스템 테스트 --> 수락 테스트
- 개발/컴포넌트 테스트
- 개별 구성요소는 독립적으로 테스트된다.
- 구성요소는 함수, 객체, 관련된 엔티티 그룹일 수 있다. --> 서브시스템, 모듈 - 시스템 테스트
: 시스템 전체를 테스트한다. - 수락 테스트
: 시스템이 고객의 요구사항을 충족하는지 확인하기 위해, 고객 데이터로 테스트한다.
4) 진화 (Software evolution)
: 변화하는 비즈니스 환경으로 요구사항이 변경됨에 따라, 비즈니스를 지원하는 소프트웨어도 진화하고 변경되어야 한다.