2013
DOI: 10.1002/spe.2242
|View full text |Cite
|
Sign up to set email alerts
|

Model checking aircraft controller software: a case study

Abstract: SummaryThis paper documents an application of model checking to formally verify an interrupt‐driven Slats and Flaps Control Unit software programmed in C, one component of a certain type of Chinese aircraft. Our objective was to identify errors rather than to prove correctness. We focused on the correctness of the algorithms used in the buffer operations, which are very common and important in aircraft software. In the verification, a total of four flawed code fragments was identified, including a minor effici… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
1
1
1

Citation Types

1
14
0

Year Published

2014
2014
2021
2021

Publication Types

Select...
3
3
1

Relationship

3
4

Authors

Journals

citations
Cited by 23 publications
(15 citation statements)
references
References 34 publications
1
14
0
Order By: Relevance
“…(tail1 -beg1 -tail2) % DATA_FRAME_LENGTH == 0] void = if inline$process_frame (pf_buf | gv_get (pf_read)) then let val () = gv_set (pf_read | gv_get (pf_read) + 8) val tail = gv_get (pf_len) val tail1 = tail -gv_get (pf_read) in if tail1 >= DATA_FRAME_LENGTH then loop (pf_read, pf_len, pf_buf) else let val () = inline$move_data (pf_buf | gv_get (pf_read), tail) val () = gv_set (pf_len | tail1) in end end else let val () = gv_set (pf_read | gv_get (pf_read) + 8) // val () = gv_set (pf_read | gv_get (pf_read) + 8) // (*) val tail = gv_get (pf_len) val tail1 = tail -gv_get (pf_read) in if tail1 >= DATA_FRAME_LENGTH then loop (pf_read, pf_len, pf_buf) else let val () = inline$move_data (pf_buf | gv_get (pf_read), tail) val () = gv_set (pf_len | tail1) in end end val () = gv_set (pf_read | 0) in loop (pf_read, pf_len, pf_buf) end end While it is easy to find the cause of an error via type checking, it is very difficult to diagnose a bug in model checking. In this example, the same error was also found in the previous research (Chen et al, 2015) via model checking. However, the original problem turns into an integer overflow, and is then captured by the model checker as an array out-of-bound subscription error.…”
Section: Dependent Types and Linear Typessupporting
confidence: 86%
See 1 more Smart Citation
“…(tail1 -beg1 -tail2) % DATA_FRAME_LENGTH == 0] void = if inline$process_frame (pf_buf | gv_get (pf_read)) then let val () = gv_set (pf_read | gv_get (pf_read) + 8) val tail = gv_get (pf_len) val tail1 = tail -gv_get (pf_read) in if tail1 >= DATA_FRAME_LENGTH then loop (pf_read, pf_len, pf_buf) else let val () = inline$move_data (pf_buf | gv_get (pf_read), tail) val () = gv_set (pf_len | tail1) in end end else let val () = gv_set (pf_read | gv_get (pf_read) + 8) // val () = gv_set (pf_read | gv_get (pf_read) + 8) // (*) val tail = gv_get (pf_len) val tail1 = tail -gv_get (pf_read) in if tail1 >= DATA_FRAME_LENGTH then loop (pf_read, pf_len, pf_buf) else let val () = inline$move_data (pf_buf | gv_get (pf_read), tail) val () = gv_set (pf_len | tail1) in end end val () = gv_set (pf_read | 0) in loop (pf_read, pf_len, pf_buf) end end While it is easy to find the cause of an error via type checking, it is very difficult to diagnose a bug in model checking. In this example, the same error was also found in the previous research (Chen et al, 2015) via model checking. However, the original problem turns into an integer overflow, and is then captured by the model checker as an array out-of-bound subscription error.…”
Section: Dependent Types and Linear Typessupporting
confidence: 86%
“…My work is partly motivated by a previous research on verifying an interrupt-driven Slats and Flaps Control Unit Software programmed in C via model checking (Chen et al, 2015). The authors of the paper took part of the C code of the control unit, which had passed the unit testing stage and rewrote it in PROMELA so that model checking techniques can be applied to find slipped faults.…”
Section: Dependent Types and Linear Typesmentioning
confidence: 99%
“…The case study is based on the Slats and Flaps Control Unit (SFCU), which is one of the core units in Flight Control Systems. Our previous work focused on the verification of SFCU on code level. In this paper, we focus on model level safety analysis.…”
Section: Case Studymentioning
confidence: 99%
“…In this section, we will give a brief introduction to Promela and LTL. More details could be found in the literature [4] [3]. 1) Promela: A Promela program usually includes data objects, processes and message channels.…”
Section: B Model Checker Spinmentioning
confidence: 99%
“…If the properties are not satisfied, it provides a counter example. SPIN [2] [3] is an important model checker which has been widely applied in industrial [4] [5]. It is easy to use the Promela language and linear temporal logic (LTL) formulas to describe concurrent systems and properties respectively.…”
Section: Introductionmentioning
confidence: 99%