静的コード解析対応
こんにちは、iPX SDUの須山です。
私は先日まで、あるプロジェクトに携わっていました。
そのプロジェクトでの納品物のソースコードは静的コード解析ツールを通して納品を行いました。
(静的コード解析ツールの解析結果も納品物として共に)
静的コード解析とは?
静的コード解析では ソースコード上より
言語規格やコーディング標準等から逸脱している箇所を探し出し、検査することができます。
今回のプロジェクトではMISRA C規格対応を行いました。
静的コード解析 - Wikipedia
MISRA Cとは?
MISRA Cとは、自動車業界、車載製品のソフトウェアなどで利用されている
C言語ソフトウェア設計標準規格になります。
どちらかと言うと、組込み系向けなのかな?という感想です。
MISRA C - Wikipedia
規約としてはそこそこ膨大な量になるので
個人的に気になった点をいくつか
- 自動変数は宣言時に初期化するか、値を使用する直前に初期値を代入する
- 処理系により符号やサイズが異なるintなどの組み込み数値型を直接使わず、int32_tなどを利用する
- 変更されない変数をcons修飾子ありで宣言する
- int32_t⇔uint32_tのような符号付き整数型と符号なし整数型の間で暗黙の型変換を行わない
理由を考えてみるとなるほどなと思うのもありますが
(そもそも理由があるので規約としてあるのですからね~)
わかっててソースコードを書いているつもりでも、
細かいところで引っかかる点が出てきました。
ちなみに、個人的に最初のうちよく引っかかったなと思ったのは
変更されない変数をcons修飾子ありで宣言するです。
(最初は関数定義の引数の変数とかで引っかかりやすかったです。)
静的コード解析ツールは何を利用した?
ちなみに弊社では、静的コード解析ツールとして
Klocworkを導入しています。
開発をシンプルに 安全で高品質のコードを 素早くお客様のもとへ | ローグウェーブ
今回のプロジェクトでは上記 Klocworkを通しました。
過去に他のプロジェクト・他の言語ではこのようなことを行ったことはありますが、
C系では初めてで また、個人的にC++を触るのが久しぶりだったのもあったのか
直すのが大変な場合もあり 少々手間取った点もありましたが
静的コード解析を行うメリットとしては、
言語的にはエラーではない(コンパイルが通る)場合でも
エラーが発生しやすいパターンのコードが見つけられやすいという点を
コーディングしながら分かるのはやはり便利でもあるのだなと感じました。