요구사항은 소프트웨어 시스템이 수행해야 할 것과 소프트웨어 시스템에 있어야 할 특성을 기술한 문장
이라고 할 수 있다.
프로젝트 실패의 가장 중요한 이유 중 하나는 명확하지 못한 요구사항 정의이기에 요구사항을 정확히 할 필요가 있다.
소프트웨어 개발을 위해 스테이크 홀더들이 제시하는 다양한 요구사항을 분류하면 기능에 대한 요구사항
, 비기능에 대한 요구사항
, 인터페이스에 대한 요구사항
으로 구분할 수 있다.
사용자의 업무 처리와 직접 관련되어 소프트웨어 시스템이 수행해야 하는 요구 내용을 의미한다.
이러한 요구사항이 구현되지 않으면 사용자는 수작업으로 해당 업무를 처리해야 하기에 반드시 구현되어야 하는 항목이다.
기능적 요구사항을 정할 때는 기능성
, 데이터
, 사용자
를 고려해야 한다.
비기능적 요구사항은 다음과 같은 6가지 관점에서 제시될 수 있다.
시스템, 문서 형식, 파일 형식 등에 제한받지 않고 사용 가능해야 한다.
소프트웨어 실행을 위해 최소한의 메모리를 제공해야 한다.
다양한 방식의 입출력 장치를 제공해야 한다.
질의에 대한 응답 시간은 1초를 넘지 말아야 한다.
데이터베이스는 실시간 업데이트가 가능해야 한다.
사용자 유형별 접근 권한을 제한해야 한다.
데이터는 암호화해야 한다.
한글과 영어를 지원해야 한다.
모든 날짜 표기는 YYYY-MM-DD
여야 한다.
유지보수가 용이해야 한다.
합리적으로 동작해야 한다.
사용자와의 인터페이스 뿐만 아니라 기존 시스템과의 연동도 포함해야 한다.
요구사항은 소프트웨어 개발을 위한 기준점이 될 수 있으므로 정확하고 명확해야 한다. 요구사항을 정의할 때는 다음과 같은 부정적 현상이 발생하지 않도록 주의해야 한다.
관련 없는 정보가 포함되거나 모호한 표현이 존재하는 경우
언급되어야 할 사항이 누락되는 경우
아직 결정되지 않는 구현 관련 사항이 포함되는 경우
전후 내용에 일관성이 없는 경우
하나의 표현이 여러 가지 의미로 해석되는 경우
아직 정의하지 않은 사항을 앞서 참조하는 경우
사실에 근거하지 않고 막연한 추측과 기대에 근거하는 경우