メインコンテンツ

保守的な仮定を使用した AUTOSAR コードに対する Polyspace の実行

このトピックでは、Polyspace でのコンポーネント ベースの AUTOSAR コード検証方法について説明します。統合解析方法については、Polyspace で AUTOSAR コードのコンポーネント ベースの解析と統合解析のどちらかを選択するを参照してください。

AUTOSAR 対応の Polyspace® は、AUTOSAR ソフトウェア コンポーネントのコード実装に静的プログラム解析を実行します。解析では、潜在的なランタイム エラーや AUTOSAR XML (ARXML) 仕様との不一致を調査します。

既定の解析では、ランナブルへのポインター引数および Rte_ 関数から返されるポインターは NULL ではないと仮定します。たとえば、以下の例では、解析では aInputaOutput および aOut2 は NULL ではないと仮定します。これらの引数を NULL_PTR と比較する条件は常に false として評価され、結果ではグレーで表示されます。ここで、NULL_PTR は NULL を表すマクロです。

iOperations_ApplicationError foo(
    Rte_Instance const self,
    app_Array_2_n320to320ConstRef aInput,
    app_Array_2_n320to320Ref aOutput,
    app_Enum001Ref aOut2)
{
    iOperations_ApplicationError rc = E_NOT_OK;
    if (aInput==NULL_PTR) {
        rc = RTE_E_iOperations_ERR001;
    } else if (aOutput==NULL_PTR) {
        rc = 43;
    } else {
        unsigned int i=0;
        for (;i<2U;++i) {
            aOutput[1-i] = aInput[i];
        }
        if (aOut2!=NULL_PTR) {
            *aOut2 = 1234;
            rc = RTE_E_OK;
        }
    }
    return rc;
}

ランナブルへのポインター引数や Rte_ 関数から返されるポインターが NULL 値になる可能性がある、保守的な解析を実行する必要がある場合があります。保守的な解析は、ランナブル内に NULL 値のポインターが存在する可能性を排除したかどうかを判断するのに役立ちます。

外部ソースからの NULL 値のポインターが存在する可能性を容認するには、マクロ RTE_PTR2USERCODE_SAFE の定義を解除します。マクロの定義を解除するには、解析の実行方法に応じて、以下の方法のいずれかを使用します。

マクロを無効にすると、ランナブルへのポインターの引数を NULL と比較する際に到達不能コードが表示されなくなります。このマクロの効果を確認するには、polyspaceroot\polyspace\examples\doc_cxx\polyspace_autosar に含まれるデモ ファイルに対して保守的な Polyspace 解析を実行します。

参考

トピック