소프트웨어는 현실 세계에서 문제를 해결하기 위해 만들어집니다.
클라이언트가 원하는 소프트웨어를 개발하기 위해, 즉 문제를 해결하기 위해 가장 중요한 것은 요구사항을 분석하는 것 입니다.
소프트웨어 개발의 계획 단계에서 클라이언트가 무엇(what)을 요구하는지 정확하게 파악하는 것은 매우 중요합니다. 클라이언트는 개발적 지식을 모르는 경우가 많습니다. 그리고 클라이언트 본인이 어떤 것을 원하는지 정확하게 모를 수도 있습니다.
따라서 클라이언트와의 원활한 협력을 위해서 요구사항을 정확하게 파악하는 것은 프로젝트의 성공을 좌지우지 하는 중요한 작업입니다.
요구 분석 과정에서는 어떻게(how)보다는 무엇을(what)에 관점을 두어야 합니다.
분석과정에서는 요구를 어떻게 구현할지를 고민하는 단계가 아니라, 무엇을 구현해야 하는지를 도출해나가는 단계이기 때문입니다.
요구란?
시스템에 대한 고객의 요청을 확정한 것을 의미합니다. 이는 짧고 간단하게 시스템이 무엇을 하는가를 나타내는 것입니다.
요구는 기능요구와 비기능 요구로 나눌 수 있습니다.
기능 요구란 업무절차나 동작과 같이 쉽게 파악될 수 있고 동사로 표현되는 요구사항입니다. 반면에 비기능 요구란 기능 이외에 갖추어야 하는 조건이나 특징으로 형용사로 표현되는 요구사항입니다.
소프트웨어 엔지니어는 클라이언트의 도메인(전문분야)에 대해 알아가는 과정을 거쳐야 합니다. 문제를 해결하는 것도 중요하지만, 문제의 배경에 대한 이해가 필요하기 때문입니다.
이를 통해 빠른 개발과 더 좋은 시스템, 추가적인 확장을 고려해볼 수 있습니다.
도메인의 목적, 구조, 동작을 위한 객체, 프로세스, 규칙 등을 찾습니다.
도메인의 개념을 정리하여 사전을 작성합니다.
운영 규칙, 정책, 규정, 절차, 가이드라인, 표준안 등을 정리합니다.
클라이언트와의 인터뷰, 설문, 브레인스토밍, 사용사례 분석 등을 통해 요구사항을 추출할 수 있습니다.
추출한 요구 후보를 요구 품질에 적합한지 분석하고 결정하여 최종 요구로 확정하는 단계입니다.
소프트웨어 엔지니어는 요구사항 분석 과정을 통해 자신이 무엇을 해야하는지 정확하게 파악하는 것이 프로젝트의 성공을 향한 지름길이라고 할 수 있습니다.