기능 목록을 작성할 때마다 혼란이 많아 이번에 정리를 하고 시작하려고 한다.
기능 목록과 기능 정의서를 작성하는 정확한 규칙이 나오지 않아 사람들이 가장 많이 사용한 방법 중 나에게 맞는 것을 찾아 정리하기로 했다.
이 규칙에 맞춰 기능 목록을 작성하고 순서를 정리해 두면, 기능 정의서 작성 순서와도 거의 비슷해서 개인 프로젝트에서도 활용할 수 있을 것 같다.
예시 기능 요구 사항
- 주어진 횟수 동안
n대의 자동차는 전진 또는 멈출 수 있다. - 각 자동차에 이름을 부여하며, 전진 상태 출력 시 자동차 이름을 함께 출력한다.
- 자동차 이름은 쉼표(
,)로 구분하며, 이름은 5자 이하만 가능하다. - 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진 조건: 0에서 9 사이의 무작위 값을 구한 후, 그 값이 4 이상일 경우 전진한다.
- 게임 종료 시 누가 우승했는지 결과를 알려준다. 우승자는 한 명 이상일 수 있다.
- 우승자가 여러 명일 경우 쉼표(
,)로 구분하여 출력한다. - 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException을 발생시키고 애플리케이션을 종료한다.
예시 실행 결과
경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
gray,son,bang
시도할 횟수는 몇 회인가요?
3
실행 결과
gray : -
son : -
bang : -
gray : -
son : -
bang : --
gray : -
son : -
bang : ---
최종 우승자 : bang
기능 요구 사항 분석
기능 요구 사항 검토 및 정리
프로젝트의 전체 기능 요구 사항을 검토하여 필요한 기능을 정리합니다.
사용자가 수행할 작업 명확화
사용자가 수행해야 하는 작업(입력, 출력, 계산 등)을 명확히 정의하여 프로젝트 목표를 구체화합니다.
비개발자와의 소통 도구로서 기능 요구 사항 정립
기능 요구 사항은 비개발자와의 소통 도구로서 중요하므로, 모호한 표현을 제거하고 명확하게 작성합니다.
요구 사항 명확화
요구 사항이 명확해야 이후 기능 목록 작성이 수월하며, 기획자와 개발자가 같은 방향을 설정할 수 있습니다.
기능 정의
프로그램 시퀀스
- 자동차 이름 입력
- 횟수 입력
- 각 차수별 시행
- 우승자 출력
예외 상황
- 자동차 이름 입력 예외
- 횟수 입력 예외
기능 정의 목록
- 사용자 입력
- 자동차
- 자동차 목록 기능
- 레이싱 게임
기능 목록화
기능을 한 줄로 요약해 목록을 작성합니다.
각 기능의 목적과 간단한 설명을 덧붙여, 기능을 이해하기 쉽도록 합니다.
기능 목록은 구현 과정에서 README 파일에 반영하여, 지속적으로 업데이트되는 살아있는 문서로 유지합니다.
| 구분 | 주 기능 | 상세 기능 |
|---|---|---|
| 1. 사용자 입력 | ||
| 1.1 자동차 이름이 조건에 맞는지 확인 | 1.1.1 자동차 이름이 빈 값, null 값인 경우 예외 처리 | |
| 1.1.2 자동차 이름이 5글자 이상인 경우 예외 처리 | ||
| 1.1.3 자동차 이름이 중복인 경우 예외 처리 | ||
| 1.2 입력된 횟수가 제대로 입력되었는지 확인 | 1.2.1 입력된 횟수에 문자가 포함된 경우 예외 처리 | |
| 1.2.2 입력된 횟수가 1 미만인 경우 예외 처리 | ||
| 1.2.3 입력된 횟수가 빈 값, null 값인 경우 예외 처리 | ||
| 1.3 쉼표를 기준으로 이름을 나누어 리스트로 저장 | 1.3.1 쉼표를 기준으로 이름을 분리 | |
| 1.3.2 분리된 이름 리스트화 | ||
| 2. 자동차 | ||
| 2.1 자동차 이름 생성 | 2.1.1 각 자동차 이름 설정 | |
| 2.2 이동 거리 생성 | 2.2.1 이동 거리 설정 | |
| 2.3 전진 여부를 확인하는 함수 | 2.3.1 무작위 값(0~9) 생성 | |
| 2.3.2 무작위 값 중 4 이상인 경우 이동 거리 증가 | ||
| 3. 자동차 목록 기능 | ||
| 3.1 자동차 목록 생성 및 추가 | 3.1.1 각 자동차를 목록에 추가 | |
| 3.2 턴마다 자동차를 전진시키는 함수 | 3.2.1 전진 여부 확인 | |
| 3.2.2 이동 거리 업데이트 | ||
| 3.3 각 턴의 결과를 출력하는 함수 | 3.3.1 차수별 전진 상태 출력 | |
| 3.4 우승자를 판단해 목록화하는 함수 | 3.4.1 우승자 판별 | |
| 3.4.2 우승자 리스트화 | ||
| 4. 레이싱 게임 | ||
| 4.1 자동차 목록 생성 및 자동차 생성 | 4.1.1 입력 받은 자동차 초기화 및 목록 생성 | |
| 4.2 입력된 턴 수만큼 게임 진행 | 4.2.1 게임 진행 | |
| 4.3 우승자 목록 생성 및 출력 | 4.3.1 우승자 출력 |
우선순위 지정
기능별 우선순위를 지정하여 효율적으로 개발합니다.
우선순위에 따라 필수 기능을 먼저, 선택 기능을 나중에 구현합니다.
프로젝트의 규모에 따라 버전별 기능 분할 또는 단계별 우선순위를 정할 수 있습니다.
기능 설명 구체화
각 기능에 필요한 작업, 입력, 출력 등을 구체적으로 설명합니다.
클래스 설계나 메서드 구현 등 구체적인 코드는 포함하지 않으며, 필요한 경우 기능 목록을 업데이트하면서 세부 내용을 추가합니다.
정상적인 경우와 예외 상황을 지속적으로 반영하여 기능이 안정적으로 구현될 수 있도록 합니다.
| 구분 | 주 기능 | 상세 기능 | 설명 | 입력 값 | 출력 값 |
|---|---|---|---|---|---|
| 1. 사용자 입력 | |||||
| 1.1 자동차 이름이 조건에 맞는지 확인 | 1.1.1 자동차 이름이 빈 값, null 값인 경우 예외 처리 | 자동차 이름이 빈 값이거나 null인 경우 예외를 발생시킴 | "", null |
예외 발생 | |
| 1.1.2 자동차 이름이 5글자 이상인 경우 예외 처리 | 자동차 이름이 5글자를 초과할 경우 예외를 발생시킴 | "abcdef" |
예외 발생 | ||
| 1.1.3 자동차 이름이 중복인 경우 예외 처리 | 동일한 이름이 여러 번 입력된 경우 예외를 발생시킴 | "gray, gray" |
예외 발생 | ||
| 1.2 입력된 횟수가 제대로 입력 되었는지 확인 | 1.2.1 입력된 횟수에 문자가 포함된 경우 예외 처리 | 이동 횟수에 문자가 포함된 경우 예외를 발생시킴 | "3a" |
예외 발생 | |
| 1.2.2 입력된 횟수가 1 미만인 경우 예외 처리 | 입력된 횟수가 1보다 작을 경우 예외를 발생시킴 | 0 |
예외 발생 | ||
| 1.2.3 입력된 횟수가 빈 값, null 값인 경우 예외 처리 | 입력 값이 빈 값이거나 null인 경우 예외를 발생시킴 | "", null |
예외 발생 |
기능 간 의존성 확인
기능 간 연관성이나 의존성을 확인하여 실행
순서를 조정합니다.
예를 들어, “사용자 입력”이 완료되어야 “게임 진행”이 시작되므로, 기능 목록이 프로젝트의 기본 구조 역할을 하도록 연결성과 순서를 정리합니다.
참고 자료
[우테코 2주차 – [자동차 경주] 프로그래밍 요구사항 파악 + 구현 기능 목록 작성](https://hellobrocolli.tistory.com/101)