HTTP 상호 작용, 즉 HTTPRequest/HTTPResponse 시퀀스를 모델링하고이를 전환 시스템으로 모델링하려고합니다. 내가 사용하여 클래스 상태에 순서를 정의 : 국가는 단순히 메시지의 집합입니다합금에서 HTTP 전환 시스템 모델링
open util/ordering[State]
:
sig State {
msgSet: set Message
}
의 각 쌍 (HTTPRequest-> HttpResponse에) 및 (HTTPResponse-> HTTPRequest)은 전환 시스템에서 규칙으로 표시됩니다. 규칙은 하나의 상태에서 다른 상태로 이동하게하는 술어로서 합금에서 표현됩니다.
pred rsp1 [s, s': State] {
one msg: Request, msg':Response | (
// Preconditions (previous Request)
msg.method=get &&
msg.address.url=sample_com &&
// Postconditions (next Response)
msg'.status=OK_200 &&
// previous Request has to be in previous state
msg in s.msgSet &&
// Response generated is added to next state
s'.msgSet = s.msgSet + msg'
}
불행하게도, 생성 한 모델이 너무 복잡 할 것 같다 :
예,이 특정의 HTTPRequest를 수신 한 후 HttpResponse에를 생성하는 규칙입니다 우리는 하나보다 규칙 다스 (더 복잡한이 위와 같지만 같은 패턴을 따른다.) 실행은 매우 느리다.
편집 : 특히 CNF 생성은 매우 느리며, 해결에는 상당한 시간이 걸립니다.
비슷한 전환 시스템을 모델링하는 방법에 대한 의견이 있으십니까?
대단히 감사합니다!
원칙적으로 잘못된 것은 아무것도하지 않는 것 같습니다. 하지만 일련의 상태를 만드는 경우 모델이 서버 (또는 전체 시스템)가 절대로 두 번 같은 상태가되는 것을 원하지 않습니까? 그렇게하지 않으면 훨씬 많은 주를 필요로하는 것처럼 보일 수 있습니다 (독자가 "대기, HTTP가 상태없는 프로토콜입니까?"라고 말하게 함). 상태 재사용을 허용하면 성능이 향상 될 수 있습니다. 많은 것들이 성능에 영향을 줄 수 있습니다. 당신은 많은 다른 SAT 해결사를 시도 했습니까? –
답장을 보내 주셔서 감사합니다! 오늘 아침, 저는 여러 SAT 솔버를 시도했지만 더 좋은 퍼포먼스를 얻지 못했습니다. 특히 대부분의 분석 시간은 CNF 절의 생성과 관련이 있음이 밝혀졌습니다. 그리고 당신은 똑같은 주에서 두 번이나 결코 얻을 수 없다는 사실에 대해 옳습니다. 그러나 이것은 내가 모델링 한 사례 연구에서 문제가되어서는 안됩니다. CNF 생성 단계를 개선하는 방법에 대한 제안이 있으십니까? – user3587081
자세한 내용이 없으면 아무 것도 제안 할 입장이 아닙니다. (다른 사람도 될 수 있습니다.) [최소 완료 예] (http : // stackoverflow)를 제공해야 할 수도 있습니다.co.kr/help/mcve) 문제를 보여줍니다. 성능 문제를 보여주는 가능한 가장 짧은 예제입니다. 최소한의 예제를 작성하는 데 필요한 노력은 중요 할 수 있지만 솔루션을 볼 때 도움이 될 수도 있습니다. –