본문 바로가기
컴퓨터공학

소프트웨어 공학 : 요구분석

by oobw 2023. 10. 23.

소프트웨어 공학에서 요구분석은 프로젝트의 성공 여부를 결정하는 핵심 단계 중 하나입니다. 정확한 요구분석을 통해 시스템이 사용자와 이해관계자의 기대와 필요를 충족시키도록 설계되고 구현될 수 있습니다. 이 글에서는 요구분석의 중요성, 그 과정, 그리고 요구분석에서 고려해야 할 주요 사항에 대해 공유합니다.

1. 요구분석의 정의

요구분석

요구사항은 시스템 또는 소프트웨어가 어떤 기능을 수행해야 하거나 어떤 특성을 가져야 하는지에 대한 사용자, 클라이언트 또는 이해관계자의 필요와 기대를 표현한 것입니다. 이는 시스템의 목적, 기능, 성능, 제약사항 등을 구체적, 명확하고 검증 가능한 형태로 기술한 것을 의미합니다.

 

요구사항은 크게 두 가지로 분류될 수 있습니다.

  1. 기능적 요구사항 (Functional Requirements): 시스템이 수행해야 할 구체적인 기능들을 설명합니다. 예를 들면, 사용자 인증, 데이터 입력 및 출력, 계산, 데이터베이스 쿼리와 같은 특정 작업이 여기에 해당됩니다.
  2. 비기능적 요구사항 (Non-functional Requirements): 시스템의 성능, 보안, 사용성, 신뢰성과 같은 특성을 설명합니다. 이는 시스템이 어떻게 동작해야 하는지에 관한 것이며, 그 품질 표준을 정의합니다.

요구분석은 소프트웨어 개발 프로젝트의 성공을 위한 핵심 단계입니다. 다음과 같은 이유로 요구분석의 중요성을 강조할 수 있습니다.

  1. 사용자 만족도 증대: 요구분석을 통해 사용자의 필요와 기대를 정확히 파악하면, 그에 따라 소프트웨어를 개발할 수 있으며, 이로 인해 사용자 만족도가 증대됩니다.
  2. 프로젝트 비용 감소: 초기 단계에서의 요구사항의 누락이나 오류는 나중에 발견될수록 수정 비용이 증가합니다. 따라서, 요구분석을 통해 초기에 요구사항을 정확히 파악하면 프로젝트의 전반적인 비용을 줄일 수 있습니다.
  3. 개발 시간 단축: 명확하고 완전한 요구사항을 바탕으로 개발을 진행하면, 불필요한 수정이나 재작업을 줄일 수 있으며, 이로 인해 개발 시간을 단축할 수 있습니다.
  4. 프로젝트 리스크 감소: 불명확하거나 누락된 요구사항은 프로젝트 리스크를 증가시킵니다. 반면, 철저한 요구분석을 통해 이러한 리스크를 미리 파악하고 대응할 수 있습니다.

요구분석은 개발 과정의 초기 단계이기 때문에 그 중요성이 더욱 강조됩니다. 정확한 요구분석 없이 프로젝트를 시작하는 것은 지도 없이 여행을 떠나는 것과 유사하며, 이는 높은 확률로 실패로 이어질 수 있습니다.

2. 요구분석의 과정

요구사항의 과정에 대해서 자세히 알아보겠습니다.

1) 요구사항의 수집

이 단계에서는 사용자, 이해관계자, 클라이언트 및 기타 관련자들로부터 시스템에 대한 요구사항을 집계합니다. 이 과정은 다양한 방법을 통해 이루어집니다.

  • 인터뷰: 이해관계자나 사용자와 1:1로 대화를 통해 요구사항을 직접 수집하는 방법입니다.
  • 설문조사: 대규모 사용자 그룹의 의견을 수집하기 위한 도구로서, 설문지를 통해 요구사항을 파악합니다.
  • 브레인스토밍: 여러 사람이 모여 아이디어를 자유롭게 제시하며 요구사항을 도출하는 방식입니다.
  • 프로토타이핑: 초기 버전의 시스템이나 제품을 만들어 사용자의 반응을 통해 요구사항을 파악합니다.
  • 사용자 스토리 및 유스케이스 작성: 사용자의 관점에서 시스템을 어떻게 사용할지에 대한 시나리오를 작성함으로써 요구사항을 도출합니다.

2) 요구사항의 분석

수집된 요구사항은 불명확, 중복되거나 서로 충돌하는 경우가 있을 수 있습니다. 요구사항 분석 단계에서는 이러한 문제점을 파악하고 명확하게 정제하여 구조화합니다. 또한 이 단계에서는 기술적으로 실행 가능한 요구사항인지, 비즈니스 목적과 일치하는지 등을 평가합니다.

3) 요구사항의 명세

정제된 요구사항을 문서화하는 단계입니다. 요구사항 명세서는 프로젝트 팀원, 이해관계자, 개발자, 테스터 등 다양한 대상자들이 참조하는 중요한 문서입니다. 명세서는 명확하고 구체적이며, 모호함이 없어야 합니다.

4) 요구사항의 검증

마지막 단계에서는 요구사항 명세서가 사용자 및 이해관계자의 원래 의도와 일치하는지, 빠뜨린 요구사항이 없는지, 오류나 모호한 부분이 없는지 확인합니다. 이 단계에서 발견된 문제점은 즉시 수정되어야 합니다. 검증 방법으로는 리뷰, 인스펙션, 프로토타이핑, 시뮬레이션 등이 있습니다.

요구분석의 각 단계는 순차적으로 이루어지며, 각 단계마다 결과물이 충분히 검토되고 승인되어야 합니다. 이 과정을 통해 프로젝트 초기부터 사용자와 이해관계자의 기대와 필요를 정확히 파악하고, 이를 바탕으로 효과적인 소프트웨어 개발을 진행할 수 있습니다.

 

3. 요구사항의 종류

소프트웨어 개발에서의 요구사항은 크게 기능적 요구사항과 비기능적 요구사항으로 나뉩니다. 이 두 가지 요구사항은 소프트웨어의 특성과 성능을 결정하는 핵심적인 요소입니다.

1) 기능적 요구사항 (Functional Requirements)

기능적 요구사항은 소프트웨어가 사용자나 시스템에 대하여 수행해야 할 구체적인 기능들을 설명합니다. 다시 말해, "시스템이 무엇을 해야 하는가?"에 대한 답을 제공합니다. 이러한 요구사항은 시스템의 주된 업무 기능과 관련된 것들을 중심으로 합니다.

예시

  • 사용자는 로그인과 로그아웃을 할 수 있어야 한다.
  • 시스템은 사용자의 주문 내역을 데이터베이스에 저장해야 한다.
  • 사용자는 상품 검색 기능을 통해 원하는 상품을 찾을 수 있어야 한다.

2) 비기능적 요구사항 (Non-functional Requirements)

비기능적 요구사항은 시스템의 성능, 보안, 사용성, 신뢰성 등과 같은 특성을 설명합니다. 이는 시스템이 어떻게 동작해야 하는지에 대한 기준을 제시하며, 소프트웨어의 품질을 결정하는 요소입니다. 비기능적 요구사항은 시스템의 기능적 행동 외에도 시스템 전체에 영향을 미치는 특성들을 포함합니다.

예시

  • 성능 요구사항: 웹 페이지는 사용자의 요청에 대해 2초 내에 응답해야 한다.
  • 보안 요구사항: 사용자의 개인정보는 암호화되어 저장되어야 한다.
  • 사용성 요구사항: 사용자 인터페이스는 직관적이어야 하며, 사용자가 기능을 쉽게 이해하고 사용할 수 있어야 한다.
  • 신뢰성 요구사항: 시스템은 연중무휴 99.9%의 가용성을 보장해야 한다.
  • 확장성 요구사항: 추가적인 사용자나 데이터 증가에도 시스템 성능이 유지되어야 한다.

비기능적 요구사항은 종종 기능적 요구사항만큼 명확하게 표현되지 않을 수 있기 때문에, 정확한 명세와 검증이 필요합니다. 또한, 이러한 요구사항들은 시스템의 전반적인 품질과 성공에 결정적인 역할을 하므로 중요도가 매우 높습니다.

마치며

요구분석은 소프트웨어 개발의 초기 단계에서 수행되며, 이 단계에서 결정된 사항들은 프로젝트의 전체 수명주기 동안 영향을 미칩니다. 따라서, 효과적인 요구분석은 프로젝트의 성공을 위한 핵심 요소입니다. 정확한 요구분석을 통해 사용자의 만족도를 높이고, 프로젝트의 리스크를 줄일 수 있으므로, 이 과정에 충분한 시간과 노력을 투자하는 것이 중요합니다.