導入事例

  • カバレッジマスターwinAMS

    パイオニア株式会社 モバイルエンタテインメントビジネスグループ 川越事業所様

パイオニア株式会社に見る開発工程での単体テスト実施事例
単体テスト自動化システムの運用によるソフト品質改善
~自動化システムで工数をかけない反復単体テスト~

開発工程でのソフト品質管理や品質維持を目的として、単体テストを開発工程に取り入れるプロジェクトが多くなってきました。

本稿では、パイオニア株式会社 モバイルエンタテインメントビジネスグループ 川越事業所 技術統括部 メカ開発部様にご協力を頂き、単体テストの自動化によるソフト品質改善活動の事例について紹介いたします。

組込みソフト品質評価の現状開発者任せのデバッグとテスト

  • 最近の組込み機器開発においては、組込みソフトの設計品質改善が、共通の課題となっています。製品の機能のほとんどがソフトウエアで実装されるようなり、その裏側では、不十分なテストにより、市場での問題も多く発生しています。開発現場では、デバッグ、テストの工程は相変わらず開発者任せになっていることが多く、短い開発期間の中で、開発者各人の力量で開発が進んでいるケースが、まだまだ多く残っています。

最近脚光を浴びる「単体テスト」

  • 動車制御ソフトの分野では、古くから必須事項として単体テストを実施しているケースが多くありますが、その他の製品分野では、単体テストそのものの認識が薄く、開発プロセスから外れているのがほとんどです。現状は、ソフト開発者がデバッグの一環として関数テストを行っている程度です。
    しかしながら、ソフト実装量の増加に伴い、多くの開発人員が必要となった現状では、開発プロジェクト全体で、開発したソフトや関数に対する品質を、共通の指標によって判断、管理する必要がでてきました。
    自動車以外の分野でも、ソフト品質管理や改善のために、「単体テスト」を取り入れるプロジェクトが多くなっています。
  • 製品不具合の原因の半分はソフト実装バグによるもの

単体テストの目的は設計仕様と実装コードの一致性の確認

  • 本来、関数は、関数の詳細設計仕様に基づいてコーディングされる物です。そのため、単体テストの目的の1つは、関数の入出力テストによって、基の関数仕様と実装コードが一致しているかを確認することです。これは、実装上のミスが無いことを確認し、仕様定義通りに正しく機能するかを評価することになります。このためには、設計仕様書を基に関数入力データを想定し、関数をブラックボックスとして、仕様通りに関数が出力を出すことを確認するテストを行います。想定する入力データには、仕様に定義された範囲の値を網羅する様にテスト設計し、数値演算、条件による判断などが正しく行われることを評価します。
  • 関数をブラックボックスとして仕様に対する機能を評価

ソフトの品質評価には機能性以外の堅牢性評価も必要

  • また、関数の品質評価には、仕様書に定義されない入力条件に対する堅牢性(ロバスト性)の評価も含まれます。上で述べた関数の機能性とは別に、コーディングされたロジックの中で、ゼロ除算やNULLポインタアクセスに対する回避コードが実装されて、正しく異常を回避できるかについても、併せて評価する必要があります。
    また、不要なコード、意味の無いコードが関数に紛れて残っていないかを確認することも必要で、これには、実装したコードを網羅的に実行するカバレッジを適用して確認を行います。
  • 関数をホワイトボックスとしてコード実装ミスを評価

「カバレッジ」イコール「ソフト品質確保」ではない

  • 単体テストというと、「C0、C1、C2、MCDC」のような「カバレッジ」を話題にしがちですが、基も厳しいC2カバレッジを満たしたからと言って、ソフトに誤りが無いことを裏付ける訳ではありません。単体テストとは前述のように、関数仕様との一致性を評価し、実装コードに誤りが無いことを確認する作業です。カバレッジテストを行うことで、実装されているコードの範囲であれば、誤りが無いことを実証することは可能です。しかしながら、仕様に定義された機能が関数に漏れなく実装されているかどうかは、実装コードだけを相手にカバレッジを満たして見ても検証することはできず、やはり仕様を基に判断をする必要があるのは明らかです。
    単体テストには検証すべきポイントが3つあります。

    1. 設計した機能が実装されているか
    2. 実装時のミスによるデッドコード(あってはならないコード、分岐)がないか
    3. コード上の不具合(変数、分岐条件、演算過程での不具合)がないか

    単体テストには、 これらの検証ポイントに応じたテスト計画が必要になります。
  • 開発工程における単体テストの位置と検証のポイント

パイオニア株式会社のソフト品質改善への取り組み

  • ここからは、パイオニア株式会社 モバイルエンタテインメントビジネスグループ 川越事業所 技術統括部 メカ開発部様(以下、パイオニア:敬称略)のご協力を頂き、カバレッジマスターwinAMSのユーザー事例をご紹介致します。
    カバレッジマスターwinAMSは、パイオニアのカーナビ製品に使用するDVDドライブの開発に適用されています。DVDドライブは一部外販も行われており、装置の中心的な部品として扱われるため、高い信頼性を要求されます。また、市販カーナビの分野でトップシェアを持つパイオニアの企業目標として、設計品質についてもトップでありたいと言う意識が強くあります。
    そのため、この開発部署では、ソフト品質向上の取り組みの1つとして、単体テストが開発プロセスに組み込まれています。

ソフト開発の状況

  • ここで開発されるソフトのほとんどは、DVDドライブのメカ制御に関するものです。このためこの部署では、メカ、ソフトの開発が密接に開発が行えるよう、同じ部署内に、両方の開発者が所属しています。
    開発するDVDドライブは、搭載製品の要求に対して仕様を変える必要があります。メカとソフトの密接な連携で、これを行いますが、メカは変更が難しいため、完成したメカに対して、ソフトウエアでチューニングを加えることが多くなります。
    DVDドライブは、その機能性の基本部分は同じであるため、ソフト開発に置いては、基本ソフトとして開発された同一のソースコードに対して、要求に応じた変更を加える形で開発されています。

コーディングレベルでの人的ミス排除に単体テストを適用

  • この部署でのソフト開発担当者は、仕様確定の後、設計→コーディング→静的解析/コードレビュー→単体テスト→結合テスト(1機能範囲)までを行い、その後の結合システムテストは担当者全員で、また製品としてのシステムテストは別の選任部隊が行っています。
    過去の開発では、単体テストのフェーズに関しては、パスチェックを行うなどの規定は設けてはいたものの各担当に任されており、検証方法は基本的に目視チェックであったため、同一の指標で全てのソフトを評価することが難しい状況にありました。
    過去のソフト検証の結果を見ると、不具合の主原因の1つとして、コーディングレベルでの人的ミスによる物があり、これを結合テストの前で発見したいと言う理由で、単体テストに対する取り組みがなされました。
  • コーディング時の人的ミスを単体テストで排除する狙い

「カバレッジマスターwinAMS」の採用について

  • 単体テストツールとして「カバレッジマスターwinAMS」を採用した理由と目的をまとめると、以下のようになります。

    · 担当者毎に異なっていたソフト評価基準を、自動出力されるカバレッジ結果で標準的な指標にできること
    · マイコンシミュレータ(ISS)を使用することで、最も信頼性が高い実コード検証ができること
    · テストのためのコードの追加、変更、再コンパイルが不要で、作業効率が良いこと
    · 命令コードの実行時間が計測可能で、これがメカ制御チューニングに利用できること
    · テストの自動化システムが構築できること

    ハードウエアに近いメカ制御ソフトのテストには、マイコン実コード検証が可能な「カバレッジマスターwinAMS」のツールコンセプトが合っていました。本稿では、この中から特に、テストの自動化システムについてご紹介したいと思います。

単体テスト自動化システムでソフト全体の品質を定期確認

  • 各担当者が開発したソースコードに対する単体テストデータは、各担当者が作成します。この際には、テストの観点、テストデータ作成、スタブ関数の作成に対して、担当者毎のテスト品質の差が少なくなるように、テスト指針が設けられています。
    各担当者は、仕様確認とソースレビューを終えた後、開発したコードに対する単体テストを行います。指針に沿ったテストが出来ることを確認したら、開発したソースコードとテストデータを、別の1台のPCに構築した自動テストシステムへ登録します。
    自動テストシステムは、2時間おきに自動的に登録されたソースを再ビルドし、「カバレッジマスターwinAMS」を起動して、単体テスト実行を行い、結果を所定のフォルダに出力します。
    メカ制御のチューニングのために、同一のソースを複数の担当者が変更した場合でも、その変更に対する影響が、開発プロジェクトのどこに発生しているかを、2時間おきに確認出来ることになります。また、各担当者は、一度テストデータを作ってしまえば、日々のテスト作業から解放されるため、開発の効率化にも大きく貢献しています。
    以上のように、パイオニアでは、独自に構築した単体テスト自動システムにより、日々の開発業務におけるソフト品質確保を行っています。以前の、目視チェックによる確認に比較すると、自動化により品質確認の工程は、加速的に改善されており、大きな成果を上げています。
  • パイオニアでの単体テスト自動化の概念図

単体テスト自動化システムは容易に構築が可能

  • 最後に、ガイオから、「カバレッジマスターwinAMS」の単体テスト自動化について紹介します。

    自動化システムと言うと、大げさな印象を与えますが、実際は、Windowsのコマンドプロンプトで実行するバッチファイルを利用して、容易に構築することが可能です。
    処理の内容は、まず、Makefileを起動して各担当者がサーバー上の所定のフォルダにまとめたソースコードを再ビルドします。その後、「カバレッジマスターwinAMS」のテストプロジェクトをコマンドラインから起動して、順次テスト作業を実行するようにします。
    これだけで、単体テストの自動化を図ることが可能なのです。

さいごに

  • このように単体テストの自動化は、複数の開発者が関わるプロジェクトにおいて、1人の開発者による変更点が、プロジェクトのどこに影響するかを定期的に把握する上で、非常に有効です。

    みなさまの開発におかれましても、単体テスト自動化システムの採用をご検討下さい。
  • パイオニア株式会社 モバイルエンタテインメントビジネスグループ川越事業所 技術統括部メカ開発部
  • パイオニア株式会社 モバイルエンタテインメントビジネスグループ川越事業所 技術統括部メカ開発部

■取材協力・監修

パイオニア株式会社 モバイルエンタテインメントビジネスグループ
川越事業所 技術統括部 メカ開発部
氏家 敬明 (うじいえ たかあき)氏