소프트웨어 프로세스란 ?
소프트웨어 프로세스란 소프트웨어 개발에 필요한 모든 행동들의 집합을 의미한다. 1장에서 공부했듯이, 다양한 프로세스들이 있지만 공통적으로 Specification, development, validation, evolution 과정을 포함한다. 우리는 이번 수업을 통해서 다음 2가지의 프로세스를 공부할 것이다.
- Plan-driven Process : 개발하기 전, 모든 계획을 미리 작성한 후 그에 맞게 개발 및 유지보수가 진행된다.
- Agile Process : 점층적인 개발이 특징이며, 계획 역시 점층적으로 발전한다. 요구사항 변경에 쉽게 대응할 수 있다.
소프트웨어 프로세스 모델
- The Waterfall Model
- Incremental Development
- Integration and Configuration
The Waterfall Model
Plan-driven model 중 하나이며, 소프트웨어 구체화 단계와 개발 단계가 명확히 구분되어 있다.
위 사진은 Waterfall Model Process를 의미한다.
우선 요구사항을 먼저 정의한 후, 시스템을 디자인 하는 것을 볼 수 있다. 그 후 개발에 들어간 후, 코드들을 합쳐 통합하여 테스트하며 유지보수를 진행한다. 화살표를 보면 알 수 있듯이, Waterfall Model 에서는 다음 단계로 진행하려면 이전 단계의 작업을 모두 완수하여야한다. 또한 마지막 단계인 유지보수 단계에 이르러야 그제서야 다시 이전 단계의 작업들을 진행할 수 있다는게 큰 특징이다.
이러한 특징 때문에, 유저의 요구사항이 변경될 시, 재빠른 피드백이 어렵다는 단점이 존재한다. 지금처럼 모든게 급변하는 시대에서는 잘 사용하지 않는 모델이다.
Incremental Development
Agile Model 중 하나이며, 점층적인 개발을 목표로한다.
위 사진은 Incremental Development Process를 의미한다.
앞서 보았던 Watefall Model 과는 다르게 요구사항 구체화, 개발, 유지보수 단계가 구분되어 진행되는 것이 아닌 함께 진행된다는 점이 큰 특징이다. 언제든지 이전 단계로 돌아가 요구사항에 맞게 코드를 수정할 수 있으며 그에 따른 다양한 테스트 버전 소프트웨어가 도출되는 것이 핵심이다.
이러한 특징 덕분에 Incremental Development Process는 요구사항의 변경에도 빠르게 대처할 수 있다는 큰 장점이 있다. 유저 피드백이 빠르며, 중간 중간 꼭 거쳐야하는 큰 단계가 없기 때문에, 빠르게 개발할 수 있는 장점이 있다. 그러나 중간 절차가 없기 때문에 자세한 진행사항을 보기 어렵다는 단점과, 다양한 기능을 염두하고 개발하는 것이 아니기 때문에 후에 기능 추가시 성능 저하의 우려가 존재한다.
Integration and Configuration
이 모델은 이미 작성된 코드를 재사용하거나, 현존하는 컴포넌트, 어플리케이션 시스템에서 필요한 부분을 가져와 통합해 개발하는 모델이다. 기본적으로 모든 소프트웨어는 재사용 될 수 있다는 믿음에서 시작된 모델이다.
요구사항을 먼저 분석한 후, 요구사항에 맞는 현존하는 소프트웨어를 찾는다. 그 후 자신들에게 필요한 소스만 가져오는 타협 단계를 거친다. 그 후 사용할 수 있게 컴포넌트를 적용시키거나 본인의 시스템과 맞지 않다면 새롭게 개발하는 단계를 거친 후 시스템을 하나로 합치며 마무리한다. 이는 이미 존재하는 코드들을 재사용하는 것이기에, 새롭게 개발하데 드는 비용과 부담이 현저히 줄어들며 개발 속도도 향상된다는 큰 장점이 존재한다.
그러나 본인의 시스템에 정확히 맞아 떨어지는 코드들은 찾기 힘들며, 후에 유지보수 시에도 시스템에 대한 제어권이 줄어든다는 단점 또한 확실하다.
프로세스 활동
앞서 말했듯이 프로세스는 공통적으로 Specification, development, validation, evolution 과정을 포함한다. devlopment 는 크게 design과 implementation 으로 나눌 수 있다. 지금부터 5가지 과정에서 어떠한 행동들이 취해지는지 알아보겠다.
• Specification
이는 사용자가 시스템에게 바라는 요구사항과 지켜야할 제약조건을 정의하는 단계이다. 요구사항이 명확히 정의되어야 이후에 이어지는 단계들도 의미가 생기며, 수월하게 작용한다. 이는 매우 중요하기 때문에 후에 후에 다시 언급할 예정이다.
• Design
이는 실제로 개발하기 전 전체적인 아키텍처를 디자인하는 단계이다. 정의된 요구사항에 맞게 아키텍쳐, 데이터베이스, 인터페이스, 컴포넌트를 디자인한다.
• Implementation
디자인 된 아키텍처를 참고하여 실제로 구현하는 단계이다. 주로 Design 단계와 병행하여 함께 이루어진다.
• Validation
구현된 소프트웨어의 Verification과 Validation을 확인하는 단계이다. Verification이란 소프트웨어가 에러 없이 잘 만들어지고 있는지를 확인하는 단계라면 Validation이란 본 시스템이 정말 필요한 시스템인지, 요구사항에는 맞는지 확인하는 단계이다. 이는 주로 Testing을 통해 이루어진다. Testing은 Component -> System -> Customer 단계로 이루어지며, 컴포넌트 단계에서는 독립적인 함수 및 컴포넌트의 기능적 테스트가 이루어진다. 시스템 단계에서는 모든 컴포넌트를 합친 하나의 시스템의 테스트가 이루어진다. 마지막 유저 단계에서는 앞서 테스트된 시스템이 유저의 니즈에 맞는지 테스트한다.
• Evolution
마지막으로 유지보수 하는 단계이다. 비즈니스 환경이 바뀌기 때문에 고객의 요구사항 또한 꾸준히 바뀐다. 때문에 새로운 요구사항이 정의된다면 변경사항을 파악하고 새롭게 구현하는 부분이 필요하며 이를 위한 단계이다.
'학교 수업 > 소프트웨어 공학' 카테고리의 다른 글
# 1장 소프트웨어 공학이란 ? (0) | 2021.10.16 |
---|