화제 끓는 냄비에 대한 Property based testing 시도 (3) 끓는/보온 - 상태 천이를 생각한다

소개



화제 끓는 냄비에 대해 Property based testing (2) 온수 (물) 에 계속
fast-check을 사용하여 Property based testing을 시도하고 있습니다.
소재로
테스트 설계 콘테스트 U-30 클래스 에서 테스트 기반으로 지정됨
「화제 끓는 포트 요구 사양서(GOMA-1015형) 제7판으로 결정했습니다.
fast-check는 상태를 랜덤 워크 시켜 실패하는 테스트 케이스를 찾는 방법도 구현됨

준비



상태 전이를 나타내는 좋은 도구가 없는지 찾고 있었던 곳
자바 스크립트 state-machine-cat라는 라이브러리를 발견했습니다.
여기를 사용하여 그리면서 상태 전환을 생각해 봅시다.

상태 천이



이전까지의 상태



state-machine-cat 형식의 소스 코드
  • initialize => off의 상태 천이는 constructor()의 움직임이라고 생각한다
  • _water = 0

  • 전원 on(plugIn())/off(plugOff())는 뚜껑의 상태에 따라 아래와 같이 상태를 왕래한다
  • 뚜껑이 닫힌 경우 off <-> idle
  • 뚜껑이 열려 있는 경우 open/off <-> open/on

  • 마찬가지로 뚜껑의 상태는 전원 on(plugIn())/off(plugOff())에 따라 아래와 같이 상태를 왕래한다
  • 전원 on의 경우 idle <-> open/on
  • 전원 off의 경우 off <-> open/off

  • 뚜껑을 여는 행위(open())에 관하여
  • 전원이 켜진 상태에서 뚜껑이 열려 있고 전원이 꺼진 상태에서 뚜껑이 열려있는 경우 상태를 나눕니다

  • 유휴 상태는 전원이 켜져 있고 뚜껑이 닫힌 상태
  • 급탕(물)(dispense()) 기능은 전원 ON 및 뚜껑이 닫혀 있는 경우에만 기동한다
  • 또한 그 안에 들어있는 물은 10ml/sec의 속도로 감소한다

  • 주수(fill())는 전원 on/off에 관계없이 뚜껑이 열려 있으면(open/off or open/on) 실시할 수 있다
  • 그 때는 안에 들어 있는 물에 임의의 양(water) 추가할 수 있다




  • 끓는/보온 상태를 추가한 버전



    state-machine-cat 형식의 소스 코드
    이전과의 차이는 이쪽

  • off의 경우 수온 (_temperature)을 실온 25 ℃로 초기화한다.
  • 아이들 상태에서도 물이 10ml 이상이되면 자동적으로 끓는 중 (boil)으로 천이한다
  • 전원 ON 중에 뚜껑을 열면 (open/on) 수온 (_temperature)은 실온 25 ℃로 떨어진다.
  • 끓는 (보일)/보온 (keep) 상태를 총칭하여 active로 표현하고 전원 off (plugOff)하면 off 상태로 천이한다
  • 활성 중에 뚜껑을 열면 (open/on) 수온 (_temperature)이 실온에서 25 ℃로 떨어진다
  • active 상태는 끓는 중(boil)과 보온(keep)의 2개의 상태가 있다
  • boil 상태는 _start를 현재 시간으로 초기화하고 초당 1.25 ℃ 수온 (_temperature)을 상승시킨다.
  • keep 상태는 항상 수온 (_temperature)을 100 ℃로 유지한다
  • keep 상태에서 재비등 (reboil ()) 버튼을 누르면 boil 상태로 전환
  • keep 상태에서 급탕(dispense()) 버튼을 누르면 급탕된다
  • 안에 들어있는 뜨거운 물은 10 ml/sec의 속도로 감소합니다

  • keep 상태에서 온수가 10ml 이하가되면 idle 상태로 천이한다




  • 마지막으로



    다음은 테스트가 아니라 구현을 상태 전이에 맞추고 싶습니다. 라고 생각합니다.
    또한 코드에 실수가 있으면 Pull request은 환영합니다.
    길어졌지만 끝까지 읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기