静的解析とは? 静的解析ツール + 静的コード解析ツールの概要 【前編】

静的解析
セキュリティとコンプライアンス

静的解析は、プレッシャーにさらされている開発チームを支援します。品質の高いリリースを予定どおりに提供する必要がありますし、コーディングとコンプライアンスの規約を満たす必要もあるのです。間違いは許されません。
そのような理由から、開発チームは、この仕事に最適な静的コード解析ツール/ソースコード解析ツールを使用するのです。ここでは、静的解析と、静的コード解析ツールを使用する利点、および静的解析における制限について説明します。
このまま読み進めるか、最も興味のあるセクションにジャンプしてください。

目次

静的解析とは?

静的解析は、プログラムを実行せずにソースコードを自動的に検査することによって行われるデバッグ方法としてよく説明されます。これにより、開発者がコードベースをよく理解できるようになり、コードが規約に準拠し、安全で、セキュアであることを確認できます。

静的ソースコード解析とは?

静的ソースコード解析とは、ソースコード解析ツールによって実行される処理を指し、コーディングルールのセットを用いてソースコードを解析することです。

静的コード解析と静的解析は、ソースコード解析とともに、同じ意味で使用されることがよくあります。
静的コード解析は、脆弱性につながる可能性のあるソースコードの弱点を検出します。もちろん、これは人によるソースコードレビューによっても実現できます。ただし、自動化ツールを使用する方がはるかに効果的です。
静的解析は、MISRAなどのコーディングガイドラインに準拠するためによく使用されます。また、 ISO 26262などの業界標準に準拠するためにもよく使用されます。

静的解析ツール/ソースコード解析ツールによる静的解析はいつ実行されますか?

静的コード解析は、ソフトウェアテストが始まる前の、開発の早い時期に実施されます。DevOpsを採用している組織では、静的コード解析は「CODE」フェーズに行われます。

静的コード解析は、自動フィードバックループによりDevOpsをサポートできます。これにより開発者は、コードに問題があるかどうかを早い段階で知ることができ、コーディング時の記憶の新しいうちに修正を行うことが可能です。

静的解析と動的解析

では、静的解析と動的解析の違いは何でしょうか?
どちらのタイプのコード解析も欠陥を検出します。大きな違いは、開発ライフサイクルのどこで欠陥が見つかるかです。

静的解析と動的解析

静的解析は、プログラムを実行する前(コーディングと単体テストの間など)に欠陥を検出します。
動的コード解析では、プログラムの実行後(例えば、単体テスト中)に欠陥を検出します。ただし、一部のコーディングエラーは単体テスト中に表面化しない可能性があります。つまり、動的テストでは見逃される可能性のある欠陥が、静的コード解析では見つかる場合があるのです。

静的解析ツールと静的ソースコード解析ツールの制限は?

静的コード解析は、開発の特定のフェーズで特定の目的のために使用されます。ただし、静的コード解析ツールにはいくつかの制限があります。

開発者の意図を理解していない


int calculateArea(int length, int width)
{
    return (length + width);
}
    

静的解析ツールは、この計算でオーバーフローの可能性を検出する場合があります。ただし、関数が根本的に期待どおりに動作しないと判断することはできません。

静的に強制できないルール

一部のコーディングルールは外部のドキュメントに依存します。あるいは、主観的な解釈に左右されることもあります。

例:

CERT-C MSC04:
コメントの記法には一貫性を持たせ読みやすくする

起こりうる欠陥は偽陽性と偽陰性につながる

状況によっては、ツールは欠陥の可能性のみを報告することがあります。


int divide(void)
{
    int x;
    if(foo())
    {
        x = 0;
    }
    else
    {
        x = 5;
    }
    return (10/x);
}
    

foo() について何も知らなければ、 x がどのような値を持つかはわかりません。

この場合、結果は決定不可能です。つまり、解析ツールは実際には存在しない欠陥(偽陽性)を報告する可能性があります。または、真の欠陥を報告しない可能性があります(偽陰性)。

Perforce社コラムより
https://www.perforce.com/blog/sca/what-static-analysis

お問い合わせ

お問い合わせは下記までご連絡ください。
株式会社シーイーシー 営業本部 営業企画部
住所:〒150-0022 東京都渋谷区恵比寿南1-5-5 JR恵比寿ビル8F
TEL:03-5789-2455 FAX:03-5789-2575
HP :https://www.cec-ltd.co.jp

page top