SRS 문서의 구조는 프로젝트의 성격이나 조직의 표준에 따라 다를 수 있지만, 일반적으로 IEEE 830 표준 (IEEE Recommended Practice for Software Requirements Specifications)에서 권장하는 구조를 많이 따릅니다.
주요 구성 요소는 다음과 같습니다.
서론 (Introduction)
목적 (Purpose)
: SRS 문서 자체의 목적과 이 문서를 읽어야 할 대상을 기술합니다.
범위 (Scope)
: 개발할 소프트웨어의 이름, 목표, 주요 기능 등을 간략히 설명하고, 시스템이 무엇을 하고 무엇을 하지 않는지를 명확히 합니다.
정의, 약어, 두문자어 (Definitions, Acronyms, and Abbreviations)
: 문서 내에서 사용되는 전문 용어나 약어들을 정의합니다.
참고 자료 (References)
: SRS 작성에 참고한 다른 문서(예: 프로젝트 계획서, 관련 표준) 목록을 제시합니다.
개요 (Overview)
: SRS 문서의 나머지 부분이 어떻게 구성되어 있는지, 각 장의 내용은 무엇인지 간략히 안내합니다.
전반적인 설명 (Overall Description)
제품의 관점 (Product Perspective)
: 개발할 시스템이 다른 관련 시스템이나 기존 시스템과 어떤 관계를 맺는지 설명합니다. (예: 독립형 제품인지, 더 큰 시스템의 일부인지)
제품 기능 (Product Functions)
: 시스템이 수행해야 할 주요 기능들을 요약하여 설명합니다. 상세한 기능 요구사항은 다음 장에서 다룹니다.
사용자 특성 (User Characteristics)
: 시스템을 사용할 주요 사용자 그룹과 각 그룹의 지식 수준, 경험, 기술적 배경 등을 기술합니다.
제약 조건 (Constraints)
: 개발 과정이나 결과물에 영향을 미치는 제한 사항들을 명시합니다. (예: 특정 하드웨어/소프트웨어 사용, 개발 언어 제한, 예산/일정 제약, 보안 규정 준수 등)
가정 및 의존성 (Assumptions and Dependencies)
: SRS의 내용이 사실이라고 가정하는 사항이나, 프로젝트 성공에 영향을 미치는 외부 요인들을 기술합니다.
세부 요구사항 (Specific Requirements)
이 부분이 SRS 문서의 핵심이며, 시스템이 충족해야 할 모든 요구사항을 구체적으로 기술합니다.
일반적으로 기능 요구사항, 비기능 요구사항, 인터페이스 요구사항 등으로 구분하여 작성합니다. 이 부분은 아래에서 더 자세히 살펴보겠습니다.
부록 (Appendices) 및 색인 (Index)
(선택 사항)
본문에 포함하기 어려운 추가 정보(예: 데이터 모델, 상세한 유스케이스 기술서)나 용어 색인 등을 제공할 수 있습니다.
측정 가능하고 검증 가능하게 작성하는 것이 중요합니다. (예: "빠른 응답"보다는 "2초 이내 응답")
시스템의 전반적인 품질과 사용자 경험에 큰 영향을 미칩니다.
기능 요구사항이 "무엇을 만들 것인가"에 대한 답이라면, 비기능 요구사항은 "얼마나 잘 만들 것인가"에 대한 답이라고 할 수 있습니다.
모든 요구사항은 하나의 의미로만 해석될 수 있도록 명확하게 작성되어야 합니다. 주관적인 표현이나 애매한 용어 사용을 피해야 합니다.
나쁜 예: "시스템은 사용자 친화적이어야 한다." (모호함)
좋은 예: "시스템은 주요 기능에 대해 3번 이하의 클릭으로 접근 가능해야 한다." (구체적)
완전성 (Complete)
시스템이 수행해야 할 모든 기능, 성능, 제약 조건 등이 빠짐없이 기술되어야 합니다.
"나중에 정함(To Be Determined, TBD)"과 같은 부분은 최소화해야 합니다.
일관성 (Consistent)
문서 내의 요구사항들이 서로 모순되거나 충돌하지 않아야 합니다.
용어나 표현 방식도 일관되게 사용해야 합니다.
정확성 (Correct)
모든 요구사항은 고객이나 사용자가 실제로 원하는 바를 정확하게 반영해야 합니다.
검증 가능성 (Verifiable / Testable)
각 요구사항은 테스트나 분석을 통해 시스템이 해당 요구사항을 만족하는지 여부를 확인할 수 있도록 작성되어야 합니다.
측정 불가능한 요구사항은 피해야 합니다.
추적 가능성 (Traceable)
각 요구사항은 고유 식별자를 가져야 하며, 설계 문서, 코드, 테스트 케이스 등과 연결되어 변경 이력을 추적할 수 있어야 합니다.
수정 용이성 (Modifiable)
요구사항은 변경될 수 있음을 염두에 두고, 변경이 발생했을 때 쉽게 수정하고 관리할 수 있도록 구조화되어야 합니다.
우선순위 부여 (Prioritized)
모든 요구사항이 동일한 중요도를 갖지는 않습니다.
MoSCoW (Must have, Should have, Could have, Won't have) 기법 등을 사용하여 각 요구사항의 우선순위를 명시하면 한정된 자원 내에서 효율적인 개발 계획을 세우는 데 도움이 됩니다.
소프트웨어 요구사항 명세서(SRS)는 단순히 형식적인 문서가 아니라, 프로젝트의 성공과 실패를 가를 수 있는 매우 중요한 산출물입니다.
잘 만들어진 SRS는 개발팀에게 명확한 방향을 제시하고, 이해관계자 간의 오해를 줄이며, 변경 관리를 용이하게 하여 결국 고품질의 소프트웨어를 만드는 데 든든한 기초가 됩니다.
다음 시간에는 요구사항을 분석하는 다양한 기법들, 예를 들어 정형/비정형 분석, 인터뷰, 워크숍 등에 대해 자세히 알아보겠습니다.