개발생명주기단계별/통합_시스템 테스팅

Petri Nets 모델링 예 by Jan Martijn van der Werf

grapevine9700 2023. 6. 26. 07:00
반응형

출처: 
Process Modeling 10: An informal introduction to Petri nets, Jan Martijn van der Werf, Utrecht University,

https://www.youtube.com/watch?v=yHfEmYsqgMk

 

 

신호등 예로 페트리 네트 모델링 과정을 설명한 동영상을 텍스트화 한 것이다.

 


 

횡단보도 신호등 설계 예

아래 기준을 충족하는 횡단보도 신호등을 설계하고자 한다.

  • 차량용 신호등이 정상 동작해야 한다. 즉, 빨간불에서 녹색불로, 다음은 노란불로, 그리고 다시 빨간불로 변한다.  
  • 보행자가 버튼을 누르면, 신호등은 사람이 건너갈 수 있도록 한다.
  • 안전성(Safety) 기준: 횡단하기 전과 후, 신호등은 한쪽이 다시 녹색으로 바뀌기 전에 먼저 양쪽에 빨간불 신호를 주어야 한다.

 

이 문제를 세 부분으로 더 작게 나누어 설계를 시작한다.

  1. 안전성에 관한 부분
  2. 차량용 신호등에 관한 부분
  3. 보행자용 신호등에 관한 부분

 

페트리 네트 모델링을 위해서 설계자는 아래 3가지 질문을 던진다.

  • 플레이스: What are the conditions?
  • 토큰: What resembles a token?
  • 트랜지션: What are the actions? When is an action allowed? How do actions change the conditions?

 

 

Part 1: Safety

문제: 횡단하기 전과 후, 신호등은 한쪽이 다시 녹색으로 바뀌기 전에 먼저 양쪽에 빨간불 신호를 주어야 한다.

 

조건은? 횡단이 안전하다(safe)” 또는 안전하지 않다(unsafe)”

토큰이 상징하는 것은? 안전한 경우 토큰을 포함하고 그렇지 않은 경우면 포함하지 않는다

액션은? 없음

 

식별된 조건을 플레이스로 표현한다. 우선 안전하다고 보고 이 플레이스에 토큰을 포함시킨다.

 

 

Part 2: The traffic light for cars

문제: 차량용 신호등이 정상 동작해야 한다.

 

조건은? 교통 신호가 빨간불(red)이다, 녹색불(green)이다, 노란불(yellow)이다.

토큰이 상징하는 것은? 교통 신호 색

액션은? 교통 신호 색이 바뀐다.

 

빨간불, 녹색불, 노란불을 나타내는 플레이스를 생성하고, 초기 조건이 안전하다고 가정하여 빨간불에 토큰을 놓는다. 액션에 상응하는 트랜지션 turn green(빨간불에서 녹색불로), turn yellow(녹색불에서 노란불로), turn red(노란불에서 빨간불로)를 표현한다.

 

 

Part 3: Pedestrian light

문제: 보행자가 버튼을 누르면, 신호등은 사람이 건너갈 수 있도록 한다.

 

조건은? 교통 신호가 빨간색(red) 또는 녹색이다(green). 횡단 버튼이 눌렸다(pushed) 또는 눌리지 않았다(unpushed).

토큰이 상징하는 것은? 교통 신호 색과 횡단 버튼 두 가지를 상징한다.

액션은? 교통 신호가 바뀐다(turn green 또는 turn red), 버튼을 누른다(push button) 

 

조건을 나타내는 4개의 플레이스를 생성한다. 초기에 횡단 버튼이 눌리지 않은 상태이고 초기 신호가 빨간불이므로 unpushedred에 각각 토큰을 준다. 다음은 버튼을 누르는 액션을 표현하기 위해 플레이스 unpushed에서 pushed로 가는 트랜지션 push button을 표현한다. 트랜지션 turn green은 버튼이 pushed이고 신호가 red일 경우에만 허용된다. 트랜지션 turn red는 신호를 다시 빨간불로 바꾸고 버튼은 unpushed가 되도록 한다.  

 

 

파트1과 파트2 통합하기

차를 위한 교통 신호가 녹색불로 바뀌는 것이 안전성측면에서 어떤 의미인지 물을 필요가 있다. 트랜지션 turn green은 상황을 안전하지 않게 만드므로 플레이스 safe에서 트랜지션 turn green으로 가는 선을 긋는다(, 녹색불로 바뀌는 것은 플레이스 safe의 토큰을 소비하는 것을 의미함). 그렇다면 언제 다시 안전해지는가? 당연히 신호가 빨간불로 바뀔 때이다. 따라서 트랜지션 turn red에서 플레이스 safe로 가는 간선을 추가한다.

 

 

통합된 파트1+2에 파트3 통합하기

보행자용 교통 신호가 녹색불로 바뀌는 것은 상황을 안전하지 않게 만드므로 플레이스 safe에서 트랜지션 turn green으로 가는 선을 긋는다. 마찬가지로 신호가 빨간불로 바뀌면 다시 안전해지므로 트랜지션 turn red에서 플레이스 safe로 가는 선을 추가한다.

 

 

모델 검토하기  

우리 솔루션이 정확한지 페트리 네트 토큰 발사(시뮬레이션)를 통해 확인한다.

 

페트리 네트 모델링을 지원하는 무료 도구가 여럿 존재하는 데, 여기서는 PIPEv4.3.0를 사용하였다(다운로드 여기). PIPE 도구는 플레이스나 트랜지션에 같은 이름이 중복 사용되는 것을 허용하지 않으므로 차량용 빨간불은 red 보행자용 빨간불은 red_p와 같이 달리 명명하였다. PIPE 도구에서 애니메이션 모드로 전환하면 활성화된 트랜지션이 빨간색으로 자동 표시되며, 해당 부분을 클릭하여 발사하거나 또는 랜덤 발사도 가능하다.

처음에 차량용 트랜지션 turn green과 보행자용 push button이 활성화된다. 트랜지션 turn green을 발사하면 플레이스 redsafe에서 토큰을 소비하고 플레이스 green에 토큰을 생성한다. 이제 트랜지션 push button과 트랜지션 turn yellow가 활성화된 상태가 된다. 여기서 트랜지션 push button을 발사하면 유일하게 가능한 일은 신호등이 노란색으로 바뀌었다가 빨간색으로 바뀌는 것이다. 다음은 차량용 트랜지션 turn green과 보행자용 트랜지션 turn green이 모두 활성화된다

  

이 모델이 괜찮아 보이지만 설계자의 마음에 들지 않는 동작이 있다. 보행자에게 녹색불을 주지 않고도 차량용 트랜지션 turn green을 발사할 수 있다.

 

 

재모델링

이해하기 단계로 돌아가서 왜 이런 일이 발생하는지, 문제를 어떻게 해결할 수 있는지 생각한다. 액션 turn green이 언제 허용되는지에 대해 재고할 필요가 있는 데, 신호가 녹색불이 되려면 빨간불이 켜져 있어야 하고(red), 상황이 안전해야(safe) 한다. 그렇다면 보행자용 버튼은 어떠한가? 이 버튼을 누르지 않은 경우에만(unpushed) 차량용 신호가 녹색불로 바뀌도록 허용하면 어떻게 되는가?

  

플레이스 unpushed에 토큰이 있는 경우에만 트랜지션 turn green이 가능하도록 만들기 위해 unpushed에서 turn green으로 간선을 연결한다. 트랜지션 turn green은 버튼의 상태를 변경하지 않으며 오로지 해당 위치에 토큰이 있는지 여부만 읽고자 한다. 따라서 이 트랜지션 실행 후 플레이스 unpushed에 토큰을 다시 넣어줘야 한다. 이를 위해 turn green에서 unpushed로 가는 간선도 추가한다.

 

 

수정된 모델 검토하기  

다시 토큰 발사를 수행하여 변경된 페트리 네트 모델이 정확한지 확인한다.

처음에 트랜지션 turn greenpush button이 활성화된다. 트랜지션 turn green을 발사하면 플레이스 red, safe, unpushed에서 토큰 하나를 소비하고 플레이스 green, unpushed에 토큰을 생성한다. 다음으로 트랜지션 push button을 실행한다. 이제 일어날 수 있는 유일한 일은 자동차의 신호등이 노란색으로 바뀐 다음 다시 빨간색으로 바뀌는 것이다. 그러면 상황이 다시 안전한 상태가 된다(, 신호등이 빨간색이고 토큰이 플레이스 safe에 들어가 있다). 이 때 플레이스 unpushed에 토큰이 없으므로 자동차의 트랜지션 turn green은 활성화되지 않으며, 우리가 발사할 수 있는 유일한 트랜지션은 보행자의 트랜지션 turn green이다. 이 보행자용 turn green을 발사하면 이어서 보행자의 turn red가 활성화되고, 이를 발사하면  초기 상태로 돌아간다.

 

설계자는 이 모델이 주어진 문제를 충분히 표현하고 있다고 생각하여 이를 최종 결과로 하였다.

 

 

 

반응형