組込みシステム開発においても「生産性向上」は最重要課題となっており、企業や開発現場でも何らかの形で取り組みを行っているのではないだろうか。生産性向上は最終製品の性能、仕様、品質、リリース日程および価格すべてに影響するだけでなく、業務成果、サラリーおよびワークライフバランスにも影響する課題でもある。

組込み開発ツールで長年に渡ってソフトウェアエンジニアをサポートしてきた IAR システムズでは、コード品質を上げ、開発効率を向上して、開発期間を短縮し、結果として生産性アップが実現できるツールを提供している。商用の統合開発環境および解析ツールはグローバル市場で広く受け入れられており、組込みソフトウェア開発におけるスタンダードツール的なポジションを築いている。

ツールによる自動化を活用し、ソフトウェア開発プロセスを進化させることによって得られるベネフィットを理解していただき、生産性向上を実現するアクションへつなげてもらいたい。

効率的なソフトウェア開発を実現する「C-STAT」

ソフトウェアを実装するプラットフォーム(マイコンやプロセッサ)の処理能力とメモリ容量が益々大きくなるのに合わせて、プログラムサイズは飛躍的に大きくなり、2010 年代に入ってからは IoT という Buzz Word に牽引されスタンドアロンだった製品がネットワークに接続されるようになり、セキュリティ対応も必須になった。ソフトウェア開発を効率的に進めるためには、旧来の手法をブラッシュアップするだけでは到底対応できない。

そこで、本稿ではソフトウェアコーディング作業において、静的コード解析ツールを導入する方法と得られるメリットについて解説したい。意外なことに、IAR システムズの静的コード解析ツール「C-STAT(C スタット)」は、品質に対して最も厳しいといわれてきた日本よりも、海外企業の導入率の方が高く、積極的に活用されている。これは GDP では世界ランク 3 位の日本が、就労者1人あたり、もしくは時間あたりのGDP になるとOECD 加盟国中最下位の 21 位になってしまうことと無関係ではないのではないだろうか? (2018年の報告書より)

最近、C-STAT がメジャーアップデート(2020年2月17日のニュースリリース)され、解析能力が高まった。コーディング規格の CERT C に初めてフル対応したのはもちろん、MISRA と CWE にも従来通り対応しており、コード品質向上のために導入するツールとして最適だ。

  • CERT C:脆弱性につながる恐れのある危険なコーディング作法や未定義の動作を削減することを目的とした世界標準のコーディングルール。今後の組込みソフトウェア開発や IoT 機器開発において、最重要なガイドラインのひとつ。 (参照:https://www.jpcert.or.jp/sc-rules/)
  • CWE (The Common Weakness Enumeration):ソフトウェア脆弱性の問題を種類別に分類。各問題を発生させないためのコーディングが求められている。CERT C とは相互に参照している。 (参照:http://cwe.mitre.org/)
  • MISRA (Motor Industry Software Reliability Association):元々は車載ソフトウェアの「安全性」「信頼性」の確保を目的とした C 言語のサブセットルール。車載だけでなく、高品質が求められる組込みソフトウェアで広く導入されている。 (参照:https://www.misra.org.uk/)
  • ここまでのまとめ

    1. 製品開発に占めるソフトウェア開発の割合と規模の増大によって、コーディングと検証プロセスにおいて効率化と高品質化が急務になっている。
    2. IoT 時代になり組込みシステム、特にエッジ側やゲートウェイ側のデバイスに脆弱性の危険が指摘されるようになり、実装されるソフトウェアがコーディング規格に準拠したものであることが求められるようになっている。
    3. IAR システムズの静的解析ツール「C-STAT」最新バージョンが課題解決のためのソリューションとして有効。

    静的解析を行う理由とは

    静的解析機能とは、組込みソフトウェア設計で使用する C/C++言語におけるコーディングルール(規約)への準拠をチェックするものだ。ソフトウェア開発に従事している方には常識だが、C 言語には未定義の部分が多くあり、脆弱性を持った言語なのだ。(下図:プログラミング言語の問題)そのため、何らかの形でコードに潜む問題を出来るだけ取り除いてやらなければならない。

    業界における主要なルールは3つあり「MISRA」「CERT」「CWE」が用いられている。解析ツールはこれらに違反するコード(記述)をチェックしてくれる。ここでポイントとなるのは、コーディングルールとコンパイルエラーとの関係だ。コーディングにおける記述方法が上記のルールに準拠していなくても、コンパイル自体は問題なく通ってしまうことが多々ある。

    つまり、コンパイルそのものはコーディングの作法や危険度を検出するためのツールではなく、あくまでもコードをコンパイルするためのツールなので、コーディングルール違反もしくは懸念(リスク)のあるコーディングを排除することは出来ない。

    • プログラミング言語の問題

    そこで、ソフトウェア開発者としては、全てのコードをマニュアル作業でチェックすることは非効率であり、非現実的な作業となるため、静的解析ツールを使用する。ツールは、コンパイル前のコードを全てチェックして問題のある部分をワーニングとして知らせてくれるので、開発者はそれを見て修正作業を行えばよい。解析を行った結果、エンジニア個人のスキルに依存したコード品質の偏り、ソフトウェア資産の共有性、コードに潜む脆弱性が見える化され、コード品質を向上させることが出来る。

    一方で、ツールによるチェック項目を増やすのに比例して検出されるエラーが増えるためチェックおよび修正のためのリソースが増えてしまうというトレードオフがある。

    小規模のプログラムや、遠い過去の時代だと、1プロジェクトコード全てを1人の開発者が書くといったケースもあったが、アプリケーションが複雑になり、マイコンの性能が飛躍的に向上した現在では、プログラムの規模も構成も大きくなったため、複数の開発者が分担してコードを書くのが当たり前になっている。

    そうなると、開発者それぞれのコーディング作法やスキルレベルの違いが、各ソフトウェアのパーツを集めて統合した際に問題となる。コードを作った本人にしかわからないような部分はプロジェクトとしてのリスクとなるため、出来るだけ排除したい。そうすると、解析ツールによって予め共通のルールで統一されたコードに仕上げられている方が、品質が確保できるのでツールを使用するメリットとなる。

    静的解析ツール「C-STAT」を解説

    2つの大きなアドバンテージについて、分かりやすさにフォーカスして説明していきたい。

    • 静的解説ツールの解説

      IDEの画面キャプチャ

    静的コード解析ツール「C-STAT」は統合開発環境 IAR Embedded Workbench にビルトインされている。これまで単体の解析ツールを導入すると、開発環境から検証したいコード(プロジェクト)を Export して、解析ツール上で走らせ問題個所を抽出したら、また開発環境に Import して再コンパイルと検証の作業を繰り返すはずだ。

    この作業性が非常に優良で、 C-STAT の2つのアドバンテージのうちの1つ。 やってみればわかるが、簡単で、仕事の効率が上がる。煩わしい初期セットアップが不要で、GUI から適用したい解析ルールを選択するだけで導入した日から使えるのだ。

    • C-STATチェック

      チェックボックスをクリックするだけで設定完了

    スペックは下記のように基本性能を押さえつつお求めやすい価格を実現している。

    • C/C++言語対応
    • コマンドライン対応
    • ヘルプメニューやドキュメントによりエラー詳細チェックが容易
    • エラーリスト出力。HTML によるレポート作成
    • MISRA C:2004, MISRA C++:2008, MISRA C:2012 準拠
    • CWE, CERT C/C++準拠
    • Arm アーキテクチャ、自社独自アーキテクチャ、RISC-V アーキテクチャ採用デバイスに幅広く対応
      • Arm Cortex-M, Cortex-A, Cortex-R コアを搭載したマイコン、プロセッサ、SoC
      • ルネサスエレクトロニクス:RL78, RX, RH850, V850
      • ST マイクロエレクトロニクス:STM8
      • Texas Instruments:MSP430
      • Microchip:AVR, AVR32
      • RISC-V

      2020 年 2 月以降の最新バージョンからは、ついに、CERT C コーディング規格※への完全準拠を果たしている。(※ SEI CERT C Coding Standard 2020 年 1 月版)

      「開発効率の見える化」で費用対効果を最大限に

      また、開発ツールに毎度ついてまわる話だが「みんなで使うものなので自分だけでは決められない」ということが課題にあがる。そうすると、何かもっと良い説得材料が必要となる。

      そこで、2つめの C-STATのアドバンテージを紹介する。それが、効率が良く生産性の高いワークフローである。

      • コーディングと解析を担当者レベルで行えるからコード品質対応作業の効率がアップ

      上が従来の典型的な解析フローだ。一通りのコーディングが終わった段階で解析ツールにかける。実際には複数のソフトウェアエンジニアが分業しているケースが多いので、集めたプロジェクトを結合して解析ツールにかける。赤色の「解析」というボックスは QA テストもしくは結合テストと呼ばれる工程で、高性能で高価な解析ツールが使用されていることが多い。

      一方で、下が C-STAT による解析フローである。ソフトウェアエンジニア一人一人の開発環境に解析ツールがインストールされていて、毎日、もしくはコーディングの区切りで都度コード解析を行う。事前に解析と修正が行われたコードなので、QA テスト、結合テストで出る問題が少なく、修正ポイントが明確になるのだ。これを一般的に、手戻りが少ない開発フローと呼ぶ。

      作業性が効率化できることに加えて C-STAT のもうひとつのアドバンテージは、この開発効率が目に見えてアップすることにある。 ツールそのものの性能競争ではなく、開発プロジェクトの費用対効果を最大限にするために、ワークフローの改良にメスを入れたツールなのだ。 それならば従来のフローにもエンジニア全員に解析ツールをインストールすればいいと思うかもしれないが、C-STAT とはコスト感覚や使い易さが全く異なるのだ。

      今回のまとめ

      • ソフトウェアの品質と安全性への要求は高まる一方で、検証作業にもブレイクスルーが必要。
      • C-STAT は今までのツールに比べて使い勝手が圧倒的に良いため、作業性と生産性がアップする。
      • ソフトウェア開発における検証作業ワークフロー全体を見直せば、トータルの開発効率がアップする。
      • ソフトウェア品質にも費用対効果のアプローチが必要だから、C-STAT のようなソリューションを検討してみる。

      導入方法や価格について、 IAR システムズのツールエキスパートがアドバイスします!  様々なケースに対応可能なためお気軽にご相談下さい。

      • 新規に統合開発環境 IAR Embedded Workbench と同時購入
      • IAR Embedded Workbench は購入済みなので C-STAT だけをオプション購入
      • 他のプロジェクトともまとめて C-STAT 導入できるか知りたい

      >>お問い合わせはこちらから

[PR]提供: IARシステムズ