派生開発のテスト

概要

  • 派生開発の理解
    • 特殊な制御構造;RTOS/周期タスク
    • プロダクトラインの理解
  • 変化点管理(T社 生産管理)
  • 派生開発テストの要件
    • ロジックの変更とテスト
    • 回帰テスト
  • 派生手順を変える技術導入は困難
  1. 制御基板:RTOSの特殊性
  2. プロダクトラインと変化点管理
  3. 派生の要件は何か
  4. ロジック変更とテスト設計
  5. 回帰テスト/受け入れテスト

1 ハードリアルタイム制御:RTOS

1.1 歴史的な方式

  • 1980年代,MSDOSと同時代
  • 国内ではTRONの組込み版
    • ITRON(アイトロン)/μITRON
    • 仕様定義のみ
  • TOPPERSプロジェクト
    • μITRON仕様のオープンプロジェクト

1.2 チープなHWで動作

  • 動作環境:製造業のコスト課題対応
    • 最小構成は8ビットECU
    • 数キロバイトRAM
  • ソフトの実装は特殊構造
    • 周期タスク,イベントタスク

1.3 その後のトレンド

  • 21世紀初頭
    • ガラ携帯の複雑化,カーナビ高機能化
    • RTOS方式の限界
  • 複雑系はソフトリアルタイムへ
    • Andoroid, Ios, Linux_RT
  • 伝統的な車載製品は今も
    • RTOS(QNX,BSWなども)

1.4 派生開発として残っている

  • 複雑な新規開発には使われない
    • 3限目のテスト技術へ
  • 派生開発=RTOS
  • AUTOSAR(AUTomotive Open System ARchitecture)
    • Classic Platform はRTOS対応
  • 対象は機構部品のドライバー系製品

2 プロダクトラインと
変化点管理

2.1 ソフトウェアプロダクトライン

  • Software Product Line Engineering: SPLE
  • カーネギーメロン大学
  • Domain Engineering for Software Reuse
    • 1988年 G. Arango が提唱

2.2 プロダクトラインの基本原則

2つのライフサイクル活動を分離

  • ドメインエンジニアリング:コア資産開発
    • BSWやモデルベース,開発環境
  • アプリケーションエンジニアリング:製品開発
    • 製品固有の機能や振舞い

2.3 PL構成:主な活動

  1. コア資産開発
    • 製品群全体で共有するコア資産
  2. 派生製品開発
    • 特定の顧客や市場の要求への対応
    • アプリケーション派生開発
  3. プロダクトライン管理
    • コア資産の共有、再利用を促進
    • プロダクトライン全体の経済性を管理

2.4 変化点管理

  • トヨタ生産方式の一部
  • 部品のコストダウンや改善が原因となる不具合
    • リコールなど大きな損失
  • 対策として
    • 信頼性や安全性を保つための
    • 一連の管理手法

2.5 過去トラの教訓から

  • コスト改善,プロセス改善
    • 好ましい成果を求める一方で
  • 部品の信頼性低下や不具合
    • 結果的にコスト爆発的増大
  • そのため,派生開発の安全管理
    • 非常に保守的だが確実

2.6 変化点管理の目的

  • 派生開発による
    • 製品の信頼性や安全性の変化を分析
  • 変化が想定される場合,詳細な分析
    • 不明点があれば,派生中止の判断
  • この一連の管理プロセス
    • 信頼性や安全性への変化が無いか?
    • 変更箇所の管理とは異なる

3 派生源と要件定義

3.1 ライフサイクルと派生要件

  1. 頭出し開発
    ベース版の流用が中心
  2. OEM要件からの派生開発請負
  3. ECUのロット特性変化
  4. 仕向対応
  5. リファクタリング

3.2 OEM対応の場合(1,2)

  • 何らかの契約行為
  • その文書化:要件定義
    • 実体は要件概要と納期や付帯事項
  • 技術面より営業管理面がある
  • 安全性,信頼性の確保と変更特性

3.3 仕様変更の裏付け

  • 要件定義時に,双方の技術間で打ち合わせ
  • 主に外部仕様レベル
  • 内部仕様の詳細化は開始以降
    • 経験者に依存している

3.4 ポストモダン技術

  • 要件定義には,多様な関連情報の網羅が必要
    • 法規制や安全規格(欧州対応)
  • 過去からの引継ぎ
    • これらの資料リンク整理に活用
  • RAG(拡張検索)の利用
    • 課題:込み入ったエクセル表

3.5 ECU特性対応(3)

  • ECUメーカのリリース仕様から
    • 特性の変化(動作の応答時間など)
    • 機能の変化
  • などかを読み取り,I/O関連処理の変更
    • 専門的な知識が必要

3.6 ポストモダン技術

  • 膨大なECUリリース仕様(PDF)から
  • HW特性を抽出し要約
    • 例えばジッターの変化判定など
  • 既に使われている
    • コードの制御用定数の自動設計
  • 研究が進んでいる
    • 例えばジッタ時間の推測

3.7 車種や仕向対応(4)

  • この種のバリエーションは
  • 実装レベルで条件コンパイル
    • コンパイラーの機能
    • ヘッダファイルやライブラリ置換
  • 専用のconfig機能
    • BSWやモデルベースの定義ファイル
  • 仕向個別にコードを修正しない
    • 何らかの生成機構を使う(複雑)

3.8 モダン技術

  • xml/yaml/JSON などで記述
    • 相互変換可能
    • 人間でも理解できる
  • コンパイラ側に対応機能がある

3.9 ポストモダン

  • 「ワンストップ構築」のトレンド
    • 複雑なタスク連携で,多様なツールや設定を個別に行う煩雑さを解消するため,例えば,一つのIDEから,すべてのタスクを実行する. 「cursor」などは,このトレンドで進化している.
  • 派生開発での導入は進んでいない

3.10 リファクタリング(5)

  • 概念はあるが,組込み派生開発での事例はほぼ無い
  • 理由:変化管理=変えないことが原則
    • 費用を出すスポンサーが無い
    • 費用効果が示せない

4 ロジックの変更と
テスト設計

4.1 演習を使って考える

  • work12-12/
  • 【Exc04】割引問題ベース版
    • テストケースは41
  • 【Exc05】派生版
    • テストケースは48
  • 【Exc06】派生2版
    • テストケースは99
  • いずれも処理(機能)は単純化,
  • ロジックの追加,変更時の演習

4.2 Jupyter Lab にログイン

  • ログイン後,左側のフォルダ操作
  • work01/work12-12/Exc04
  • ファイルwaribiki_mini_spec.Rmd を開く
  • 内容をすべてコピーする
    • Ctrl + a その後で Ctrl + c
  • 使えるAI(Copilotなど)にテストケース設計を依頼
  • 結果を確認して

4.3 cursorの結果と比較

  • test_report.md
  • これは実行結果だが
  • これと比べて

4.4 プログラム開発も試す

  • copilot にテスト対象の作成を依頼
  • 多分,Python で回答するので
  • Cに変更して
  • waribiki.c と比べる

4.5 この一連の演習をグループで

  • 画面を共有しながら進めて
  • グループで討論して
  • どんなことが解ったか
  • 疑問は何か
  • など共有ノートに書き出して

Breakout Rooms
 15分

4.6 Cursor の能力差だけではない

  • 違いが出るのは
  • Cursor が関連情報を
  • テスト演習プロジェクトから見つけ
  • RAG機能で絞り込んでいるから

使うための環境設定,使い方に意味がある

5 回帰テスト/受け入れテスト

5.1 回帰テスト

  • 一般定義では
    • 以前のバグ対処の再発確認
    • 回帰:以前のバグが再発
  • 車載文化では
    • 派生開発の悪影響確認テスト
    • 基本機能や振舞いの確認
    • 製品,職場で多様

5.2 受け入れテスト

  • 請負側が納入前に行う
  • 内容は回帰テスト+派生要件
  • テストの範囲や規模は
  • 製品,職場で多様

5.3 ワークフロー

  • 派生開発の最終段階で実行
  • ここで「NG」=後戻り
    • 想定外事象で納期に影響
  • 派生要件は事前確認だが
    • 回帰部分の不具合は想定外
  • デバッグをスケジュール上,想定していない

5.4 対策

  • NGの原因処置:
    • 事案個別の問題
  • プロセス改善
    • 派生開発ワークフローの不足不備
    • チェック項目を追加

5.5 ポストモダン

  • RAG:検索拡張生成の利用
    • Retrieval-Augmented Generation
    • 検索範囲を自動的に絞り込んで精度向上
  • Agent/cursor の場合,自動でRAG
    • 指定したプロジェクトのファイル群
    • GPTの状態保持モデル(12/5 5限目)
    • 横展開に使える

6 まとめ

  • 安全性/信頼性の確保=変化させない
  • そのため固いワークフロー遵守
    • 原点はハード向けの対策だった

次は,