구체적인 기능 요구사항
- 출처와 정확도, 값의 범위, 빈도를 포함해 시스템에 들어가는 모든 입력을 명시했는가?
- 목적과 정확도 값의 범위, 빈도, 형식을 포함해 시스템에서 나오는 모든 출력을 명시했는가?
- 웹 페이지와 보고서 등을 위한 모든 출력 형식을 명시했는가?
- 모든 외장 하드웨어와 소프트웨어 인터페이스를 명시했는가?
- 데이터 교환(hand shaking)과 오류 검사, 통신 프로토콜을 포함한 모든 외부 통신 인터페이스를 명시했는가?
- 사용자가 수행하고자 하는 모든 작업을 명시했는가?
- 각 작업에 사용되는 데이터와 작업의 결과로 얻은 데이터를 명시했는가?
비기능적(품질) 요구사항
- 모든 필수 연산에 대해서 예상 응답 시간을 사용자 관점에서 명시했는가?
- 처리 시간이나 데이터 전송률, 시스템 처리량과 같이 시간을 고려해야 하는 사항을 명시했는가?
- 보안 수준을 명시했는가?
- 소프트웨어 실패로 인한 결과와 실패 시 보호해야 하는 중요한 정보, 오류 검출과 복구를 위한 방법을 포함한 안정성에 대한 대책을 명시했는가?
- 최소 메모리와 디스크 공간을 명시했는가?
- 특정한 기능의 변경과 운영 환경의 변경, 다른 소프트웨어와의 인터페이스의 변경을 수용할 수 있는 능력을 포함한 시스템의 유지보수성을 명시했는가?
- 프로젝트의 성공이나 실패에 대해서 정의했는가?
요구사항의 품질
- 요구사항을 사용자의 언어로 작성했는가? 사용자도 동의하는가?
- 각 요구사항이 다른 요구사항들과 충돌하지 않는가?
- 견고하면서 변경이 쉬워야 하는 것처럼 서로 충돌하는 특성들 사이의 트레이드오프(trade-off)를 명시했는가?
- 요구사항에서 설계에 대한 명세를 피하고 있는가?
- 요구사항이 일괄된 수준으로 기술되어 있는가?
- 더/덜 구체적으로 기술해야 할 요구사항은 없는가?
- 따로 구현할 수 있으면서 여전히 이해할 수 있을 정도로 요구사항이 명확한가? 개발자도 그렇게 생각하는가?
- 각 항목이 문제점과 해결책에 관련되어 있는가? 각 항목을 문제 환경에서 그 근원까지 추적할 수 있는가?
- 각 요구사항이 테스트 가능한가? 각 요구사항이 만족스러운지를 결정하기 위한 개별적인 테스트가 가능한가?
- 요구사항에 대한 가능한 모든 변경 사항을 명시했는가?
요구사항의 완성도
- 개발을 시작하기 전에 정보를 사용할 수 없다면 그 부분을 명시했는가?
- 제품이 모든 요구사항을 충족한다는 점에서 요구사항이 완비되었다고 생각하는가?
- 모든 요구사항에 만족하는가? 구현이 불가능한 요구사항과 고객과 상사에게 보여주기 위해 넣은 요구사항을 제거했는가?