2020
DOI: 10.4204/eptcs.314.4
|View full text |Cite
|
Sign up to set email alerts
|

Bounded verification of message-passing concurrency in Go using Promela and Spin

Abstract: This paper describes a static verification framework for the message-passing fragment of the Go programming language. Our framework extracts models that over-approximate the message-passing behaviour of a program. These models, or behavioural types, are encoded in Promela, hence can be efficiently verified with Spin. We improve on previous works by verifying programs that include communication-related parameters that are unknown at compile-time, i.e., programs that spawn a parameterised number of threads or th… Show more

Help me understand this report
View preprint versions

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
1
1
1

Citation Types

0
6
0
1

Year Published

2021
2021
2024
2024

Publication Types

Select...
4
1
1

Relationship

1
5

Authors

Journals

citations
Cited by 14 publications
(7 citation statements)
references
References 15 publications
0
6
0
1
Order By: Relevance
“…В работах [18,19] Дилли и Ланге предлагают подход Gomela проверки программ на подмножестве языка Go путем генерации соответствующего кода на Promela. Проверяется корректность функций передачи сообщений.…”
Section: обзор связанных работunclassified
“…В работах [18,19] Дилли и Ланге предлагают подход Gomela проверки программ на подмножестве языка Go путем генерации соответствующего кода на Promela. Проверяется корректность функций передачи сообщений.…”
Section: обзор связанных работunclassified
“…It detects channel and mutex-related bugs and data-races, but it has limited applicability. Our work builds on a prototype by Dilley and Lange [5] which uses Promela as a behaviour type language. We extend their work with an inter-procedural extraction of concurrency parameters, support for more concurrency primitives (waitgroup and mutex), support for structures and methods, an automated verification algorithm (Algorithm 1), and an evaluation of our approach on real-world Go code.…”
Section: Related Workmentioning
confidence: 99%
“…Amongst recent works on static checkers for Go, we distinguish those that aim for soundness, e.g., using a behavioural type approach [5], [6], [18], [19], [23], and those that aim for completeness, e.g., GCatch [20]. Existing checkers based on behavioural types tend to raise too many false alarms, do not scale to large codebases, and support a very limited subset of Go.…”
Section: Introductionmentioning
confidence: 99%
“…Sulzmann and Stadtmuller attempted to solve the problem of dynamic verification of Go programs by proposing a track-based method to analyze Go programs that only use the synchronous channel in [26]; then they introduced an improved method that supports asynchronous channels and relies on vector clocks in [27]. Nicolas [28] et al used model checking to SPIN to verify the Go program, they converted the Go source code to the form of promela [29] and used SPIN [30] to check the program's properties.…”
Section: Study On Go Concurrency Bugs Nicolas Dilley Et Almentioning
confidence: 99%
“…The static approaches mentioned above provide limited support for detecting concurrency bugs in Go. For example, all of the static verification frameworks in [17], [18], [19], [20], [21], [28] can only be used to verify small Go programs or those with low usage of message passing primitives. The works in [21] and [22] take the program as a whole to find potential concurrency bugs, after which they can only get qualitative results, which is not conducive to the repair of concurrency bugs in the future, Meanwhile, existing static tools are not sensitive to dead codes, which may cause false positives or false negatives.…”
Section: Study On Go Concurrency Bugs Nicolas Dilley Et Almentioning
confidence: 99%