2019년 10월 30일 수요일

시퀀스맵으로 유저스토리를 만들어 TDD 까지 연계해보자


문서와 설명으로만 프로젝트를 진행하는 경우가 있다. 다들 머리속에는 같은 것을 그리고 있는데 아무도 그걸 구체화 시키지 않는다. 특히나 프로그래머는 뭐든지 로직으로만 생각하는 경우가 있는데, 그렇게 하다보면 로직->테스트코드작성 순으로 생각하게되는경향이 있다.
따라서 로직은 개발자한테 맡기되 고객/기획/디자이너/개발자가 공통된 하나의 스토리를 기반으로 같은 상상을 하게 해주는 좀더 구체화된것이 필요하다.
DDD 의 유비쿼터스언어 또한 언어라는 한계에서오는 제한으로 쉽게 진행되지 못하는경우가 있다.
이것을 애초부터 순서도로 만드는 거다. 인간의 언어에 제한되지 않는 순서도로 만들어서 상상했던 결과물이 최종결과물과 같은 순서도를 가진다면 누구나 수긍할수있는 프로젝트가 될것이다.

순서도를 그리는데는 시간도 걸리고 솔직히 귀찮다.
정말 좋은 PlantUml 을 사용해서 조금이라도 덜 귀찮게 만들수 있다.
단, 쓸데없는 중복코드를 피하기 위해서 별도의 함수파일을 만들자.

장점으로는 빨간색글씨로 TestCaseStory 를 미리 지정하여 , 테스터와 개발자가 동시에 테스트케이스를 작성할수 있다는거다.
10 단위로 되어있는 항목 중간에 1단위의 세부 항목을 넣을수 있다.



methods.txt
@startuml

title "Sequence UML"

!global $current_action = ""
!global $auto_num_step = 10
!global $current_auto_num = 0



!function a($to, $action)
     a($current_action, $to, $action)
!endfunction

!function a($from, $to, $action)
     !if ($action == 0 || $action == 1)
         setautonum($action)
         a($current_action, $from, $to)
     !else
          $from -> $to : $printautonum() $action
          !$current_action = $to
     !endif
   
!endfunction


!function alt_start($condition)
     alt $condition
!endfunction

!function alt_else($condition)
     else $condition
!endfunction

!function alt_end()
    end
!endfunction


!function s($from)
     activate $from
!endfunction

!function e($from)
     deactivate $from
!endfunction

!function setautonum($step)
     !$auto_num_step = $step
!endfunction


!function resume()
     !$auto_num_step = 10
     !$current_auto_num = ( $current_auto_num / 10 ) * 10
!endfunction


!function resetautonum($num)
     !$auto_num_step = 10
     !$current_auto_num = $num - $auto_num_step
!endfunction


!function $printautonum()
     !$outprint = $current_auto_num
     !$current_auto_num = $current_auto_num + $auto_num_step
     !if ($auto_num_step == 0)
          !$outprint = ""
          !$auto_num_step = 10
     !else
          !$outprint =   "<font color=red><b>[TCS1_" + $test1($current_auto_num)    +"]</b></font>"
     !endif
     !return $outprint
!endfunction

!function $test1($step)
     !if (%strlen($step) == 2)
          !return  "0" + $step
     !endif
     !return  $step
!endfunction

!function n($from,$message)
     note right of $from
            $message
     end note
!endfunction



@enduml


Source.txt

@startuml
!include methods.txt


'--- 사용자/앱구분 ---
!$유저 = "유저"
!$유저 = "유저"

'--- 참가화면 ---
!$메인화면 = "메인화면"
!$탭메뉴 = "탭메뉴"

!$쿠폰메인화면 = "쿠폰메인화면"
!$카테고리목록 = "카테고리목록"
!$상점목록 = "상점목록"
!$더보기단순링크 = "더보기_단순링크"
!$쿠폰목록 = "쿠폰목록"

!$앱 = "앱"


box "DPoint앱" #LightBlue
actor $유저
end box

box "메인화면" #LightBlue
     participant $메인화면
     participant $탭메뉴
end box

box "쿠폰화면" #LightBlue
     participant $쿠폰메인화면
     participant $카테고리목록
     participant $상점목록
     participant $더보기단순링크
     participant $쿠폰목록
end box


== TCS1 : 앱기동후 쿠폰탭을 클릭하여 쿠폰메인화면으로 이동 하는 유저스토리 ==
a($유저, $메인화면, "앱기동")
a($탭메뉴, "쿠폰버튼클릭")
     a($쿠폰메인화면, "화면오픈")
     s($쿠폰메인화면)
          a($카테고리목록, "카테고리목록표시",0)
          n($카테고리목록,"기본1개목록표시")
                 
          s($카테고리목록)
               a($카테고리목록,"기본1개목록표시",1)
               resume()
               a($카테고리목록,"기본2개목록표시")
               a($카테고리목록,"기본2개목록표시")
               resetautonum(100)
               box "test1" #LightBlue
                    a($카테고리목록,"기본2개목록표시")
                    a($카테고리목록,"기본3개목록표시")
               end box
               resume()
               alt_start("해당카테고리의 쿠폰이 1개이상있을시")
                    a($카테고리목록 , "일반카테고리목록표시")
               alt_end()
               a($카테고리목록 , "카테고리\n자동선택")
                    activate "카테고리목록"

               a($메인화면, $탭메뉴, "메뉴변경")

               alt_start("해당카테고리가없거나\n처음 시동시")
                         a($카테고리목록, $카테고리목록, "전체항목선택")
               alt_else("이전에 선택한 탭이 있었고\n 해당항목이 존재할경우 ")
                         a($카테고리목록, "지정된항목선택")
               alt_end()
               deactivate "카테고리목록"
          e($카테고리목록)
     e($쿠폰메인화면)

@enduml



0 comments:

댓글 쓰기