Technical Information

継続的インテグレーション/継続的デリバリー(CI/CD)における
品質確保について

maas15_hero.jpg

これまでアジャイル開発の現場で浸透してきた継続的インテグレーション/継続的デリバリー(=Continuous ntegration/Continuous Delivery。以下、CI/CD)※1ですが、昨今、開発スピードの加速が著しい車載製品開発業界でも活用されつつあります。一方で、その効果を感じられていないとお困りのお客様も多いのではないでしょうか。

本稿では、適切に構築・運用できればQCD向上が望めるはずのCI/CD導入で、期待した効果を感じられていないという方へ、失敗の原因と解決方法についてご紹介させていただきます。

  1. ※1 継続的インテグレーション/継続的デリバリーとは、ソフトウェアの変更後、テストや本番環境への反映準備までを自動で行うことです。


※この記事は、『Veriserve Mobility Initiative 2023』の講演内容を基にした内容です。

松尾 貴由

株式会社ベリサーブ
東日本オートモーティブ事業部
副事業部長
松尾 貴由 

CI/CD導入のメリットと注意点

CI/CDとは、ソフトウェア開発におけるビルドやテスト、デリバリーを自動化し、継続的に行う手法です。
CI/CD導入のメリットとしては、開発の効率化、工数削減、品質向上が挙げられます。ソースコードを構成管理システムにアップロードした瞬間に、ビルド・テストが人手を介さず実施でき、回を追うごとにその効果を期待できます。正しく運用できれば、図表1のようなメリットがあります。

CI/CD導入のメリット

図表1:適切に構築・運用することでQCD向上が望める

一方、CI/CDを実現するためにはいくつかの準備事項があり(それぞれ工数や期間が発生します)、これらの計画検討を怠ると、うまく活用できない、思うような効果が上がらないなどの問題を生じます。主な検討・準備事項は以下の通りです。

  1. 【CI/CDを実現するための準備・検討事項】
  2. Makeflie・ビルドスクリプトの整備とそのメンテナンス
  3. CIを運用する環境の整備
  4. 構成管理とブランチ戦略との整合(メインブランチとトピックブランチ)
  5. 複数の顧客に納入する場合に、S,O,Dの基準が異なり、切り替えが手間
  6. 各種メトリクス解析(静的解析やその他メトリクス)との統合

CI/CD活用の課題

■増加する車載製品開発におけるCI/CD

従来、車載組込みシステムの開発環境におけるCI/CDの活用度合いは、実機テストにおける自動化対応の難しさなどもあり、WEBシステムと比較し低い傾向にありました。

WEBシステムと組み込みシステムの比較

図表2:従来の組み込みシステムでは、ウォーターフォール型開発が主流。リリース頻度もWEBシステムの開発と比較して少なく、CI/CD導入による恩恵が得にくい環境であった

しかし昨今、Out-Carサービスの急拡大を背景に、車載器のタイムリーなソフトウェアアップデートへのニーズが高まっています。これに応えるため、車載製品開発の現場では、従来のウォーターフォール型開発を維持しながら、仕様を最後まで固めず実装を進めるアジャイル開発スタイルを取り入れるケースが増え、CI/CDを導入する企業も増加してきました。

一方、現場でヒアリングをすると、CI/CDを導入したものの「うまく運用できていない」「効果が感じられない」という声がよく聞かれ、CI/CDを上手に活用できていないケースが多数見られます。

■車載製品開発におけるCI/CD活用の課題

CI/CDをうまく活用できていないケースは主に以下の4つのケースに分類されます。 それぞれのケースに応じた検討・改善事項と共に紹介してまいります。

◆ケース1

CI/CDに何を期待しているか明確になっていない
本来期待できること以外のことを求めている

これらはCI/CDへの期待値がずれていることで、効果を感じられないケースです。CI/CD導入時のメリットや「できること」を正しく理解し、目的を明確にすることが重要です。その上で、明確化した目的はCI/CDを利用する人、さらには組織へ浸透させる必要があります。

◆ケース2

CI/CDツールがすべてやってくれると勘違いしている
CI/CD導入により開発プロセスが変わることが浸透していない

CI/CDは必ず何らかのトリガーが発生することで動作します。トリガーには、開発者がタスクを実施することなども含まれます。開発者がこのことを理解せずに必要なタスクを実施しなければ、開発業務は成り立たず、製品開発になりません。

必要となるのはCI/CD導入を想定したプロセスへの見直しと、見直したプロセスの浸透です。またCI/CD導入により、各タスクのインプット・アウトプットに変化がないか、処理タイミングの変化などがないかの確認を行います。

◆ケース3

CIの動作時にボトルネックになる処理ケースを想定・対処できていない
どういうケースがCIに時間がかかるのか想定できない

CIの処理時間がかかりすぎてしまい、効果を感じられないケースです。この場合にはボトルネック箇所の特定を行い、処理の分散や処理順番の変更などを行い、稼働時間の適正化を図ります。ただし、この見直しのためには、開発経験やCI/CD構築経験・ノウハウを持った技術者による環境構築が必要となります。

◆ケース4

CI/CDで必要となるハードウェア/ソフトウェアが未検討
自動化するための予算が想定できていない

これでは予算回収のめどが付かず、CI/CDの効果測定もできません。 必要なのはCI/CDの費用対効果分析の徹底です。例えば自動化/手動時の見積もり比較等も行い、自動化した場合の効果分析も必要です。また、自動化のカバレッジ・利用頻度・保守のしやすさ、今後の機能拡張予定などを鑑み、事前に予算改修計画を立案してください。

CTの導入 ~さらに効果を感じていただくために~

CI/CDの導入・運用に手応えを感じた時には、ぜひとも継続的テスト(=Continuous Testing。以下、CT)の導入をご検討ください。
CTとは、ECU※2へのソフトウェア書き込みや、結合テスト・システムテストの実行を自動化し継続的にテストを行うことです。CI/CDと併せて導入することで、インテグレーションからシステムテストまで一貫した自動化環境の構築が可能となり、車載製品開発でもCI/CD Pipeline環境を実現できます(図表3)。

CT(継続的テスト)導入のイメージ

図表3:CTの導入により、結合テストからシステムテストまでの自動化を実現

なお当社のCTソリューションをご利用いただければ、お客様がお持ちのテスト項目を生かし、結合テストからシステムテストまでの自動化を実現します。ソフトウェア書き込みも含めて、テスト工程まで包括したCTの運用による、さらなる開発効率向上と品質向上が可能となります

  1. ※2 ECU(Electronic Control Unit)は、エンジン、ライト、カーナビゲーションなど自動車のさまざまな機能を制御するための装置。

■CI/CD+CTのプロセスイメージ

図表4は、CI/CD+CTのソリューションイメージとなります。使用しているのはCI/CD環境構築で最もポピュラーなJenkins。Job1・2(青枠内)は現状で最も運用されているインテグレーション・ビルドおよび単体テストのフェーズ。赤枠内のJobはそれ以降のCTフェーズで、ECUソフトウェア書き込み、テストケース設計、結合テストやシステムテストの実行・レポート生成、課題管理ツールへのレポート・不具合登録などとなっています。

CI/CD+CTのプロセスイメージ

図表4:自動化対応の難しい点線枠のJobでも対応が可能

また、実線の枠はJenkinsの機能とVector様社のツールを用いることで、自動化が実現しやすい環境と言えます。しかし、点線枠のJobを自動化するには、さらに追加の検討や、ECUへのソフトウェア書き込みの自動化、結合テストやシステムテストの自動化、課題管理ツールへの書き込みの自動化などの開発が必要となります。そのため、対応できる技術者が少ないことや、リソースが足りないことで実現が難しいJobではないかと考えます。

この自動化対応の難しい点線枠のJobについて、当社は顧客環境の解析から自動化環境構築の豊富な実績があり、お客様のテスト内容やご希望のテストレベルに応じた環境構築に対応できます。 また、この点線枠の自動化が可能となれば、Jenkinsのトリガー機能と組み合わせることで、CT環境の構築が可能となります。

■CI/CD+CTのシステムイメージ

図表5は、CI/CDを含めたCTのシステムイメージです(ソースコードのアップロードから処理が開始される設定)。

CI/CD+CT のシステムイメージ

図表5:Jenkinsの設定、各種検査、結果の課題管理システムへの登録までを自動化する

処理の開始については、手動による処理開始、定期実行、時間指定などが可能です。開発者によりコードがアップロードされると、それをトリガーとし、次の処理であるビルド・インテグレーションがビルドサーバーで実行されます。
その後、単体検査の実施完了をトリガーとして、リプログラミング(リプロ)環境でECUへのソフトウェア書き込み処理が実行され、モデルベースドテスティング(MBT)※3ツールなどを用いてテスト設計工程が完了することで、結合検査用PCにテストケースが格納され、結合検査へのトリガーとなります。

全てのテストが完了すると最後のトリガーが発動し、テスト結果やバグなどが課題管理システムへ登録されます。
この際、各テスト環境から上がってきた各種検査レポート・不具合情報を整理し、必要な情報が課題管理サーバーへ登録されます。

当社では、Jenkinsで各駆動のための設定、各種検査自体の自動化、その結果を吸い上げ、課題管理システムへの登録までを自動化対応で支援しています。

  1. ※3 モデルベースドテスト(Model Based Testing)とは、対象のシステムをモデル化した情報からテストケースを作成するテスト技法のこと。

■HILSを用いたCI/CD+CTのシステムイメージ

こちらはHILS※4を用いた結合検査環境のシステム構成例です(図表6)。Jenkinsによるトリガーが発動することで、CT用PCが自動処理を実行し、CANIFを介してECUに通信を行います。

  1. ※4 HILS(Hardware-In-the-Loop-Simulation)とは、自動車システム開発で使用するシミュレーターのこと
CI/CD+CT のシステムイメージ(HILS のフェーズ)

図表6:HILSを用いたテストにおいてもCT導入が可能

HILSシステムでは検証対象以外のECUや電源等を模擬し、検証対象のECUがあたかも実際の車載システム環境の中で動作しているようにシミュレートします。

CT導入前に確認すべきこと

テスト内容や環境、テスト手法は千差万別ですが、これらの状況を顧みずに無理にCI/CD+CTを導入すると、さまざまな非効率や不具合、さらにはコストに見合う効果が得られないなどの問題が生じます。ここからは導入前の確認事項と、該当した場合の検討・改善ポイントを紹介していきます。

◆ケース1

テストケース設計のタイミングが遅い
テスト項目がインテグレーション前に存在しない

テスト設計のプロセス前倒しを行い、インテグレーション前にテスト項目が準備されているプロセスへ変更します。 また自動化ツールなどを用いたテスト設計の早期化を行い、テスト設計を上流工程で実施することで、インテグレーションの前にテスト項目が準備できている環境を整えます。

◆ケース2

機能の動作途中の動きが明確でない
期待値を見る観測点が決められていない

「動作途中の動き」とは、例えば画面遷移テストで A から B に画面が遷移する過程の動きで、これではテスト結果の成否判定を事前に決めることができず、自動化できないと考えられます。 これらのケースでは、テスト設計の段階で成否判定基準を設け、自動化する機能/しない機能の明確化を行う必要があります。また、動作途中の過程について動きが定義できないなどの項目は無理に自動化せず、手動テストの選択を行うことで無理のない自動化対応が可能となります。

◆ケース3

意地悪テストやランダムテストのような
テストケースの定義が難しいテストを自動化したいと考えている

意地悪テストやランダムテストはアドホック的なテストを行うことでその効果を発揮しますが、事前にテストケースの定義が難しいテストタイプでは、自動化は不向きと言えます。このようなケースの場合には、該当項目をCI/CDの対象から外す検討が必要です。

自動テストの長所を生かせるようなテスト項目なのか、ユースケースを想定して手動で実施した方が良いケースなのかを事前に検討することで、自動化対象のテストケースを見誤らず、環境構築に掛ける工数や期間が最適化されます。

◆ケース4

テスト自動化で必要となるハードウェアやソフトウェアが未検討
自動化するための予算が想定できていない

費用対効果分析を徹底的に行い、自動化/手動時の見積もり比較、さらに自動化によって効果が出るかなどについても見極めます。また、自動化のカバレッジ・利用頻度・保守のしやすさ、今後の機能拡張予定などを鑑み、事前に予算改修計画を立案してください。派生機種も考慮した改修計画を立案すると、より大きな自動化の効果につながります。

ここまで紹介してきたケース1から4をV字モデル上にプロットしたものが図表7です。 CI/CD/CT の効果を最大化するには、上流工程でのさまざまな分析やテスト内容などの検討が重要と考えられます。

CT 導入前に確認いただきたいこと

図表7:CI/CD/CT の効果を最大化するために、上流工程での検討が重要となる

おわりに

本稿では、車載製品開発で「CI/CDを活用できていない理由」、当社ソリューション「CT」について、さらに「CT環境を活用する前の確認事項」などについて紹介しました。このようなご報告が皆様にとって、より効率的なCI/CDの運用につながれば幸いです。

この記事をシェアする

Facebook  Twiter