hn-classics/_stories/2006/12870899.md

61 lines
2.1 KiB
Markdown

---
created_at: '2016-11-04T07:29:03.000Z'
title: Rules for Writing Safety Critical Code (2006)
url: http://spinroot.com/p10/
author: mpweiher
points: 166
story_text:
comment_text:
num_comments: 81
story_id:
story_title:
story_url:
parent_id:
created_at_i: 1478244543
_tags:
- story
- author_mpweiher
- story_12870899
objectID: '12870899'
year: 2006
---
[Source](http://spinroot.com/p10/ "Permalink to The Power of Ten -- Rules for Writing Safety Critical Code")
# The Power of Ten -- Rules for Writing Safety Critical Code
# `The Power of Ten
10 Rules for Writing Safety Critical Code`
* * *
| ----- |
| 1 | | Restrict to simple control flow constructs. | [(details)][1] |
| 2 | | Give all loops a fixed upper-bound. | [(details)][2] |
| 3 | | Do not use dynamic memory allocation after initialization. | [(details)][3] |
| 4 | | Limit functions to no more than 60 lines of text. | [(details)][4] |
| 5 | | Use minimally two assertions per function on average. | [(details)][5] |
| 6 | | Declare data objects at the smallest possible level of scope. | [(details)][6] |
| 7 | | Check the return value of non-void functions, and check the validity of function parameters. | [(details)][7] |
| 8 | | Limit the use of the preprocessor to file inclusion and simple macros. | [(details)][8] |
| 9 | | Limit the use of pointers. Use no more than two levels of dereferencing per expression. | [(details)][9] |
| 10 | | Compile with all warnings enabled, and use one or more source code analyzers. | [(details)][10] |
* * *
Based on: ''The Power of Ten -- Rules for Developing Safety Critical Code,'' _IEEE Computer_, June 2006, pp. 93-95 [(PDF)][11].
* * *
[1]: http://spinroot.com/rule1.html
[2]: http://spinroot.com/rule2.html
[3]: http://spinroot.com/rule3.html
[4]: http://spinroot.com/rule4.html
[5]: http://spinroot.com/rule5.html
[6]: http://spinroot.com/rule6.html
[7]: http://spinroot.com/rule7.html
[8]: http://spinroot.com/rule8.html
[9]: http://spinroot.com/rule9.html
[10]: http://spinroot.com/rule10.html
[11]: http://spinroot.com/gerard/pdf/P10.pdf