Experience with semi-formal verification(semi-formal verification 경험담)


한글버전은 아래로..

I read the article below and have a look at past experiences.

Http://www.moreagile.net/2016/01/vdd.html (korean version)

When I was studying formal verification at graduate school, I did not have any curriculum in the school. At that time, my major was about testing, so I think it might be very similar, but formal verification was much more academic and noble. And it was much stronger if it could be applied.

It is more powerful because it approaches mathematical proof.
It can also cover parallel systems (not only concurrent systems).

One day, in order to solve the problem of the CAN protocol, there was a research paper about a protocol that prevents the starvation by putting the upper protocol in CAN. I tried the mathematical proof that the starvation do not happen in that protocol. The way I used it was a semi-formal verification .

After using UPPAAL as related tool, I decided to find SMV. (There may be better tools now.)

We modeled the FSM with respect to the MUST protocol, and described the CTL as an attribute that the model should have.

I specified CTL formula which means that  starvation does not occur in that protocol

So I did a couple of tries and done either by modifying the modeling or by modifying the CTL expression.

Then I went to the professor.

“Professor, I did it.”

The reaction was this.

“I know you did it, how can you believe it?”

This is a fundamental problem with model checking.

Can you be confident that you need a review to validate it, and that no matter how strict the review is, the attributes that the model or model should have are fully described?

Can I put my finger? Or can you bet on part of your body?

Honestly, you will not be confident. I did too.

I tried several times and tried to modify the model (debugging) because I felt that the bug model or attribute was perfect before I found the bug, but when I found the counter example in a mathematical proof, … then I am very embarrassed.

“Uh … is this not? … What’s wrong?”

I try to grasp and fix the problem of the model or the property. I think that it is perfect if I do it several times, but it is not that I am confident enough to take my name or honor.

After all, experts have to specify it. But even if it’s an expert, there’s no way to make mistakes …

It was then, but I do not know how it got better now.
At that time, I tried to perform formal verification of the software code, and personally I thought it was inferior, but I do not know if my idea turned out to be wrong. It may be possible because technology is good.

 

 

아래의 article을 읽다가 과거 경험담이 있어서 좀 설명해볼까 한다.

http://www.moreagile.net/2016/01/vdd.html

대학원때 formal verification에 대한 공부를 하다가 학교 내에 교과과정이 없어서 근처 학교에 가서 청강을 1년간 하고 왔었다. 그 당시 본인의 전공은 test에 대한 것이었으니 많이 비슷하다고 생각할 수도 있으나 formal verification이 훨씬 학문스럽고 고상했다. 그리고 적용이 될 수만 있다면 훨씬 강력했다.

  1. 수학적 증명 방식이기 때문에 강력함
  2. parallel system(concurrent system이 아님)에 대해서도 cover할 수 있음.

어느날 CAN 프로토콜이 가진 문제를 해결하기 위해 CAN에 상위 프로토콜을 얹어서 starvation이 발생하는 것을 막아보는 프로토콜에 대한 연구논문이 있었다. 그 프로토콜…지금은 이름도 기억나지 않는 …MUST였던 거 같은데..그 프로토콜에서 추구하고자 하는 starvation이 정말 발생하지 않는지에 대한 수학적 증명을 시도했었는데, 그 때 사용한 방식이 semi-formal verification이었다.

관련 도구로 UPPAAL을 쓰다가, 이것저것 알아보다가 결국은 SMV로 결정했다. (지금은 더 좋은 툴이 있을지도 모른다.)

MUST프로토콜에 대해 FSM으로 모델링을 하고 그 모델이 가져야 하는 속성에 대해서 CTL로 기술을 했다.

CTL식으로 starvation이 일어나지 않는다고 표현했을 것이다. 아마도…

그렇게 해서 몇번의 시도를 하고 모델링을 수정하거나 CTL식을 수정하거나 해서 완료했다.

그리고 교수님께 찾아갔다. 교수님, 다 했어요.

반응은 이랬다.

“네가 했다는 것은 알겠는데, 그것을 어떻게 믿을 수 있지?”

이것이 모델체킹이 가지고 있는 근본적인 문제점이다.

그것을 확인하려면 리뷰가 필요하고, 리뷰를 아무리 엄격하게 한다고 하더라도 그 모델이나 모델이 가져야 하는 속성이 완벽하게 기술되었다고 자신할 수 있을까?

손가락을 걸 수 있는가? 아니면 자신의 신체의 일부를 걸고 베팅할 수 있는가?

솔직히 자신없을 것이다. 나도 그랬다.

몇번 시도하고 모델을 수정하면서(디버깅) 느낀점은, 버그가 생겨난 모델이나 속성이 버그 발견시에는 완벽하다고 느꼈었지만, 수학적 증명 방식으로 counter example을 찾아줄 때, 내가 기대했던 그 counter example이 아니게 될때…그때 엄청 당황하게 된다..

“어..? 이게 아닌가?.. 뭐가 잘못된 것이지?”

찬찬히 뜯어보고 모델이나 속성에 문제가 있음을 파악하고 수정을 한다… 몇번을 하고 나름 완벽하다고 생각하긴 하지만, 그렇다고 나의 이름이나 명예를 걸 만큼 자신있는 건 아니었다.

결국 전문가가 기술해야 하는건데, 전문가라고 해도 실수를 하지 않는다는 법은 없고…

그 당시에는 그랬는데, 지금은 어떻게 더 나아졌는지는 모르겠다.
그 당시에는 소프트웨어 코드에 대해 정형 검증을 하려고 시도했고, 개인적으로는 그것이 부질없다고 생각하고 있었는데, 나의 이런 생각이 잘못된 것으로 판명이 났는지 아닌지는 아직 모르겠다. 기술이 좋아져서 가능하게 될 수도 있을지도 모른다.

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s