블로그
유저 스토리: Softeer 개발의 첫걸음
- 등록일
- 2023-11-13 17:32:53
- 조회수
- 4,639
안녕하세요, softeer 개발자 조찬홍입니다.
User Story는 소프트웨어 개발 프로젝트에서 사용자의 관점에서 요구되는 기능을 간결하고 명확하게 기술한 것으로, 팀원 간의 원활한 소통과 효율적인 개발을 위한 기반이 됩니다.
저는 실제 소프티어 고도화 작업을 위하여 기능을 정의하고 UserStory를 작성하는 과정을 통해 서비스에 대해 더 많이 고민할 수 있었고, 이를 통해 더 높은 이해도를 가지고 개발에 참여할 수 있었습니다. 그래서 이번 글을 통해 User Story에 대해 소개하고자 합니다.
🚩 Agile의 기본 단위, Story
Agile에서는 개발 대상을 다수의 작은 기능으로 쪼개서 개발하는 과정을 반복하며 프로젝트를 수행하게 됩니다.
개발 대상을 분할 할 때는 Agile에서의 일의 기본 단위인 “스토리(Story)” 단위로 구분하게 되며, 스토리는 개발자가 개발해야 할 하나의 스펙 단위가 됩니다.
따라서 개발자는 스토리 단위의 요구 사항을 잘 정의할 필요가 있으며, 스토리를 작성할 때는 제품(서비스)가 아닌 "Customer(고객)"의 관점에서 요구 사항을 기술하여야 합니다.
그래서 “스토리”는 “유저 스토리”라고도 합니다.
📚User Story
그렇다면 유저 스토리는 어떻게 작성하여야 할까요?
유저 스토리 작성 방법으로는 “As a, I want, So that”과 “Given-When-Then”이 잘 알려져 있습니다.
저희들은 “As a, I want, So that”의 방법으로 유저 스토리를 정의하고, “Given-When-Then” 방법으로 유저 스토리에 맞는 시나리오를 작성하였습니다.
📕 Story
Story는 소프트웨어 개발 프로젝트에서 사용자의 관점에서 요구되는 기능을 간결하고 명확하게 기술하는 것으로 알려져 있습니다.
작성 방법은 다음과 같습니다.
As a [type of user]: user/who I want to [perform some task]: action/what so that I can [achieve some goal]: purpose/why
저희들은 위와 같은 양식 안에서, 사용자의 행위 관점에서 누가(who), 어떤 목적(purpose)를 위해, 어떤 행동(action)을 취해야하는지에 대한 정보를 담아 유저
스토리를 작성하였습니다.
📘 Scenario
간결한 문장을 통해 유저 스토리를 정의하였다면, 유저 스토리가 어떻게 동작해야 하는지를 구체화할 필요가 있습니다.
저희들은 “Given-When-Then” 방법을 통해 시나리오를 작성하며 이를 구체화하였습니다.
Given: 초기 상황, 사전 조건에서
When: 사용자가 특정한 행동을 하면
Then: 어떠한 결과가 나타나야 한다.
이 양식에 맞게 시나리오를 정의하며, 스토리에서 더 나아가 구체적인 시나리오를 사용자 관점에서 고민하여야 합니다.
저는 이 과정을 통해 미리 비지니스 로직을 미리 고민할 수 있었고, 테스트 코드 작성에도 큰 도움이 되었습니다.
❗❗ Output vs Outcome
시나리오 작성 시 한 가지 주의할 점은 사용자의 특정한 행동에 의한 결과가 Outcome 관점에서 기술되어야 한다는 점입니다.
Output과 Outcome은 동일하게 한국어로 “결과물”이라는 의미로 번역되지만, 실제로는 다른 관점을 가지고 있습니다.
Output은 단순히 Intput에 대한 결과물일 뿐이며, Outcome은 Output으로 초래된 결과나 변화를 의미합니다.
그러므로 시나리오를 작성할 때 Input에 대한 Output에서 나아가, purpose에 맞는 Outcome까지 고민하고 기술하도록 합시다.
예시
user story는 어떻게 작성되는지 예시를 통해 알아보도록 하겠습니다.
아래의 user story는 저희 서비스를 기반으로 작성된 실제 user story 중 하나입니다.
Story: 회원으로서 관심 있는 Algotutor 게시글을 바로 찾을 수 있도록 해당 게시글을 북마크 합니다. Scenario: User Can bookmark the Algotutor Post to Scrap Given 회원이 로그인 And Algotutor 게시물로 이동 When Algotutor 게시물의 “Bookmark” 버튼을 클릭 Then Algotutor 게시물을 Bookmark된 상태로 전환 And 마이페이지에 Bookmark한 게시글 등록
우선, story를 살펴보면 누구나 "누가(who), 어떤 목적(purpose)를 위해, 어떤 행동(action)을 취해야하는지"에 대한 정보를 빠르게 습득할 수 있습니다.
(who) 회원으로서
(purpose) 관심 있는 Algotutor 게시글을 바로 찾을 수 있도록
(action) 해당 게시글을 북마크합니다.
다음으로는 Scenario를 살펴보겠습니다.
Scenario는 표현하려는 행위를 간략히 적어주었으며, Given, When, Then을 통해 구체적으로 기술되어 있는 것을 확인할 수 있습니다.
또, 관심있는 Algotutor 게시글을 바로 찾기 위한 purpose에 맞게 “마이페이지에 Bookmark한 게시글 등록”이라는 부분을 통해 outcome이 작성된 것을 확인할 수 있습니다.
좋은 유저 스토리란?
그렇다면, 좋은 유저스토리란 어떤 것일까?
유저 스토리 작성에 대한 Hard core Rules은 없지만, 좋은 유저 스토리란 “INVEST”를 만족한다고 합니다.
Independent(독립적): 다른 유저 스토리에 지나치게 의존적이면 안된다.
Negotiable(협상 가능한): 즉, 소통을 통해 유동적으로 관리 될 수 있다.
Valuable(가치 있는): 여기서 ‘가치’는 고객 관점에서 평가되어야 한다.
Estimable(측정 가능한): 정확한 측정을 통해 프로젝트가 더 잘 관리될 수 있다.
Small(작은): 작고 명확할수록 정확한 리소스 측정에 유리하며, 유저 스토리간 독립적이다.
Testable(테스트 가능한): 유저 스토리가 잘 개발되었는지 확인할 수 있으며, 생산성을 높일 수 있다.
느낀 점
제가 느끼는 유저 스토리를 작성함으로써 얻는 이점은 크게 2가지였습니다.
📌 첫 번째는 “서비스에 대한 이해도”입니다.
실제 usecase 다이어그램을 그리고, 페르소나를 만들어 시나리오를 작성하며 기존의 요구사항 정의서를 기반으로한 개발에 비해 더 높은 이해도를 가지고
개발에 임할 수 있었습니다. 그리고 공통된 양식으로 작성된 userstory를 통해 팀원 간 소통하는 데 있어 더욱 빠르고 높은 이해도를 가지고 올 수 있었습니다.
📌 두 번째는 “테스트와 검증”입니다.
테스트 코드 작성이 익숙하지 않은 저에게는 시나리오를 작성한 경험이 큰 도움이 되었습니다. 실제로 테스트 코드 작성 시 시나리오를 기반으로 테스트 코드를 작성하였으며, 시나리오를 기반으로 한 인수 조건들을 충족하는 지 확인하는 데 유용했습니다.
이번 소프티어 고도화 프로젝트의 기획과 개발 등 전반적인 과정에 참여하면서, 개발 역량 뿐만 아니라 협업능력도 향상시킬 수 있었습니다.
앞으로도 소프티어 고도화 프로젝트를 참여하며 배운 점들을 공유해나가도록 하겠습니다.
감사합니다.
References
- https://cucumber.io/docs/gherkin/reference/
- https://www.guru99.com/gherkin-test-cucumber.html
- https://mvwi.co/posts/gherkin-cucumber