Aaronaught는 이미 훌륭한 답변을했지만 기능적 요구 사항이 무엇인지에 대해 완전히 잘못된 다른 답변이 있었기 때문에 비 기능적 요구 사항입니다.
비 기능적 요구 사항은 "제품이 가지고 있어야하는 품질 또는 재산"입니다 ¹. 제임스 테일러는 비 기능적 요구 사항은 "[...]는 요구 사항이며, 고객에게도 중요하며 때로는 기능적 요구 사항보다 훨씬 중요하다"고 말합니다 . 그런 다음 제품 로고와 장비의 정확성 및 신뢰성이라는 두 가지 예를 제시합니다. 이 두 가지 예는 다음과 같이 잘 나타납니다.
- 비 기능적 요구 사항은 "현재 인터넷은 중요하며 웹 사이트를 갖고 싶어합니다"와 같은 마케팅 요술쟁이가 아닙니다.
- 비 기능적 요구 사항은 고객의 생산성과 제품 사용 능력에 큰 영향을 줄 수 있으므로 고객과 관련이 있습니다.
- 비 기능적 요구 사항은 전적으로 객관적입니다.
마지막 요점은 필수적입니다. 요구 사항이 주관적인 경우 요구 사항 목록에서 수행 할 작업이 없습니다. 주관적인 것으로부터 검증 테스트를 구축하는 것은 불가능하다 . 요구 사항 목록의 유일한 목적은 고객의 분명한 기대치를 열거하는 것입니다. "이 정사각형이 빨간색이되기를 원합니다"는 요구 사항입니다. "이 정사각형의 색상이 좋으면 좋겠다"는 설명이 필요한 소원입니다.
요구 사항 목록은 계약과 같습니다 (대부분의 경우 계약의 일부 임). 고객과 개발 회사가 서명 한 것으로 소송의 경우 귀하의 업무가 올바르게 수행되었는지 판단하기 위해 법적으로 사용됩니다. 나를 위해, 당신이 실제로 수행 한 것은 아니기 때문에, 어떻게 내가 당신에게 소프트웨어 제품을 주문하는 경우, 즉 "제품이 큰해야한다"지정하고 제품이 완료되면 지불을 거부 할 좋은 제품?
몇 가지 예를 보도록하겠습니다.
1. 소프트웨어 제품이 최종 사용자에게 반응합니다.
이것은 요구 사항이 아닙니다. 기능적이지 않습니다. 작동하지 않습니다. 그것은 단지 요구 사항이 아닙니다. 조금도. 값이 0입니다. 유효성 검사 테스트 중에 소프트웨어 시스템이이 요구 사항을 충족하는지 확인할 수 없습니다. QA 부서 나 고객 모두 귀하가 아닙니다.
2. 사용자 통계 재로드는 100ms 미만의 시간의 90 %를 수행합니다. 부록 G 파트 2에 지정된 성능과 CPU의로드 10 % 미만, 메모리의 경우 50 % 미만, 활성 R / W 디스크 작동이없는 머신에서 테스트 할 때.
요구 사항입니다. 부록 G 파트 2가 충분히 정확하다면, 비슷한 하드웨어를 가진 머신을 가지고 QA 부서에서 검증 테스트를 수행 할 수 있으며, 항상 이진 결과를 얻을 것입니다 : 합격 또는 불합격.
기능적 요구 사항입니까? 번호는 지정하지 않는 어떤 시스템이 수행해야합니다. 소프트웨어 응용 프로그램이 사용자 통계를 다시로드 할 수 있어야한다고 지정하기 전에 기능 요구 사항이 있었을 것입니다.
기능이 필요하지 않습니까? 그것은. 백분율 임계 값이 지정된 경우 제품에 있어야하는 속성, 즉 최대 / 평균 응답 시간을 지정합니다.
3. 응용 프로그램이 C #으로 작성되었습니다.
이것이 필수 요건입니까? 문맥이 없으면 우리는 정말로 모른다. 나중에 사용 언어에 대해 동료들과 논의하는 것을 피하기 위해이 요구 사항을 삽입하여 원하는 수석 개발자의 소원 일 수 있습니다. 하드웨어 / 소프트웨어, 레거시 또는 호환성 요소를 기반으로하는 요구 사항 일 수도 있습니다. 우리는 모른다.
4. 제품의 C # 코드베이스는 Microsoft 최소 권장 규칙 및 Microsoft 세계화 규칙을 따릅니다.
이것은 이상한 일입니다. 개인적으로 나는 그것을 요구 사항이라고 부르지 않고 표준과 모범 사례를 지정하는 별도의 문서에 넣습니다.
5. 응용 프로그램의 기본 창에는 파란색 (# 00f) 10px 테두리가 있고 분홍색 (#fcc)으로 채워진 원이 있습니다.이 원은 테두리의 내부 가장자리에 있고 직경이 3px이며 서로 20px로 구분됩니다.
요구 사항이며 작동하지 않는 요구 사항입니다. 그것은 우리가 검증 테스트 기간 동안 테스트 할 수 뭔가를 지정하고, 그렇지 제품의 속성을 지정 어떤 제품이 수행하도록 구성된다.
6. 차량 추적 시스템은 ± 0.016mph의 정밀도로 속도를 측정합니다.
또한 비 기능적 요구 사항. 시스템 정밀도의 측정 가능한 임계 값을 제공합니다. 그것은 시스템이 무엇을해야하는지 말하지는 않지만 시스템이 얼마나 정확한지 알려줍니다. 하지만 기다려? 차량 추적 시스템 이 속도를 측정 한다고 알려줍니다 . 기능적인 요구 사항입니까? 글쎄, 우리는 측정의 정확성이 아니라 측정의 정확성에 악센트를두기 때문에.
7. 차량 추적 시스템은 차량의 속도를 측정합니다.
이제는 기능 요구 사항입니다. 시스템 작동 방식이 아니라 시스템 작동 방식을 알려줍니다. 기능 요구 사항을 통해 차량 추적 시스템이 속도, 배터리 전력, 압력을 측정한다는 사실을 알 수 있습니다. 전등이 켜져 있는지 여부를 알 수 없습니다.
8. 웹 사이트의 페이지는 850ms가 걸립니다. 로드합니다.
이것은 요구 사항이 아닙니다. 하나가 되려고하지만 완전히 유효하지 않습니다. 이것을 어떻게 자산화 하시겠습니까? 어떤 페이지? 모든? 쿼드 코어 클라이언트 시스템의 로컬 1Gbps 네트워크와 SSD가 2 % 사용 된 8 코어 서버 또는 구식 노트북과 크 래피 랩톱의 모뎀을 통해 테스트되었으며 웹 사이트가 99 %로 사용되는 작은 서버에서 호스팅되고 있음 ? "로드"란 무엇입니까? 페이지를 다운로드한다는 의미입니까? 다운로드하여 표시 하시겠습니까? 큰 데이터와 함께 POST 요청을 보낸 다음 응답을로드하고 표시합니까?
결론적으로, 비 기능 요구 사항은 요구 사항이 대신 말하는 완전히 객관적이고 자동 또는 수동 검증 테스트를 통해 확인 할 수 있습니다 뭔가 설명하는 수단 항상 어떤 시스템이하고있다가, 그것을 설명 하는 방법을 시스템 뭔가하고있다 거나 하는 방법을 시스템이 자체이다 .
¹ 정보 기술 프로젝트 관리 : 소프트웨어, 하드웨어 및 통합 이니셔티브에 프로젝트 관리 전략 적용, James Taylor, ISBN : 0814408117.