4 モダン組込み
 開発とテスト

組込み・情報系
 開発とテスト

graph_name Pd 製品  プロダクト特性  Eg  エッジ系仕事  Pd->Eg It  情報系仕事  Pd->It Org  組織形態 チーム  プロダクト  S  チーム 小規模  Org->S M  プロジェクト 中規模  Org->M L  大規模プロジェクト  Org->L Eg->Org It->Org

  • 近年,純粋なエッジ開発から情報系のプロダクトが増加

このスライドの目的

  • 現代の組込みソフト開発について
    • 古い組込み開発との違い――歴史から
    • アジャイル導入: 考慮点
  • リアルタイム制御の変化

4.1 組込みソフト開発の歴史

  • 何が変化したのか?
  • 2015年以前は,機構部品の制御が主
  • 情報系は,カーナビやメータなどから
  • ADAS系へと発展
  • 対象製品は変わった.
  • 開発方法論,技法は??

組込み制御の始まりは?

  • 1950年代
    • デジタルコンピュータによる離散時間制御の研究
    • サンプリング制御と呼ばれている
  • 1960年代
    • 連続時間制御では反応が遅れると危険な分野で実用化.
    • 航空機,兵器,原子炉,大型火力発電所
    • 周期タスクによる処理方式:専用マシンに実装
  • 1970年代
    • 産業用では,ミニコンを使ったプラント制御
    • 鉄道信号システム(超高信頼化)
    • 民需分野にも広がり始める
    • PIC(Peripheral Interface Controllerマイコン)の出現
  • 1980年代
    • 家電製品への組込み マイコン型
    • 車載系の研究
    • RTOS (Real-Time Operating System)の研究
  • 1990年代
    • RTOSなしの制御(第一世代)が中心
    • MISRA-Cが指摘するキケンなコード問題
    • モデルベース開発の研究と実用化
  • 2000年代
    • 初期のRTOSへ移行が進む(第二世代)
    • AUTOSAR 2003 の3レイヤ勧告
      • BSW,ASW,RTE C言語化
    • AP動作仮想化の考え進展・・価格問題
  • 2010年代
    • HWの高機能化(64Bit)機能の拡大から
    • 高機能RTOSの出現(第三世代 Android)
      • POSIX インタフェース一般化
    • 個別開発から共通化へ
    • テスラは専用OS開発
  • 2020年代-
    • EV化,自動運転など,車のトレンドが大変化.
    • Tesla OS 方式 (第四世代)
    • 仮想化フレームワーク上にVM(virtual machine)配置
      • VMとして動作するのは第三世代から出現済み
    • ROS2 ロボット系の自動運転
    • LLM(大規模言語モデル)による革新的技術変化
    • 参入企業の成長/既存技術企業の衰退

4.2 変化は何か?

  • 組込み開発の技術の変化
    • 以前はハードリアルタイム制御ノウハウ
      • トリッキーな制御で製品個別,属人的
  • POSIX系環境とRTOS機能の分離
    • マイクロサービス的な独立環境
    • 制限付きLinuxから一般化へ
    • 豊富な人的資源(特殊技能ではない)

背景は携帯電話事例に近い

  • 垂直分業から水平分業へ
  • 垂直分業
    • 親企業と配下の系列企業による
  • 水平分業
    • モジュラー型:中国EV車両メーカー
  • 現自動車業界はハイブリッド型
    • 徐々に水平分業が増加
    • 垂直分業は戦略化で勝負途上

4.3 企業が求めるものは?

  • ADASなど市場での競争激化
    • 早く製品を出さないと負ける
    • ADASでコケたら車両が売れない!!
  • 派生開発の10倍以上のスピード要求
    • 情報系開発では並みの速さ?
  • 派生開発の経験から解がでない!
    • IT系から学ぶ必要性大だが

速い開発=アジャイル

  • 軽薄な導入は・・・・
    • 車載組込みの制約がある
  • 客観的な学びが必要
    • アジャイル スピードの根源は何か
    • 組込み系では,何が違うか

4.4 情報系開発の歴史

  • 組込み開発とは異次元の歴史
    • ざっくり観ると
  • 1980年代:事務処理のシステム化
  • 1990年代:不況 ダウンサイジング
  • 2000年代:Webの躍進
  • 2010年代:クラウドから分散システム
  • 2020年代:GAIの爆発

1980年代

  • ソフトウェア開発方法論
    • 予測型(ウォーターフォールなど)
  • 設計方法論
    • 機能中心で階層型
      • 保守の困難性で大変
    • データ中心型へ
      • DFD(データフロー)
      • ER(エンティティ定義書)

1990年代

  • 行き過ぎた品質規範
    • バグは少ないが役に立たないシステム
  • 反復型および増分型(ラピッド型)へ
    • スクラム,エクストリームプログラミング (XP)、
  • これらがボトムアップで広がる
  • 設計方法論はオブジェクト指向へ

2000年代

  • 特許訴訟混乱が沈静化 プロダクト衰退
  • Web系軽量開発の増大 サービス時代へ突入
  • アジャイル方法論の定着
    • 大手コンサル会社による推進
  • アジャイル宣言

2010年代

  • アジャイルをプロジェクトへ
    • 大手コンサル会社による展開
  • 様々なフレームワークが出現したが
    • 実証されなかった
  • 大規模複雑系のアジャイルで学んだのは
    • 組織,チーム間の膨大な調整が必要
    • 経営問題に帰着(技術判断ではない)

2020年代 AI導入

  • 従来の情報システム
    • コンピュータが理解する詳細論理
    • 詳細な動作を言語で指示
  • LLM(大規模言語モデル)
    • GAIが理解するプロンプトを指示.
    • ここで反復型,増分型
  • 組込み系は周回遅れ ?

迅速な開発の本質

  • 独立した部分への分割
    • 技術と戦略判断の分離
    • XPの成功はユーザーの参加
  • 部分間の調整機能
    • この機能の迅速性がスピードの本質
    • OSSだとIssue件数と処理時間
    • ダメな例はQA票の大量

4.5 技法の変化

  • 充実したLinux系開発環境とツール活用
  • 活用方法のナレッジが共有
  1. 仕様技術化
  2. テスト駆動開発 自動テスト
  3. 成果物の一元共有と分散環境
  4. 問題共有と貢献の文化
  • 新たな課題:セキュリティの問題

仕様技術化

  • 自然言語の曖昧な定義が問題
  • インタフェースや入出力の厳密な定義
    • XML その後 JSON,YMLなど
  • 前提:定義可能な単位に分割する

テスト駆動開発

  • コードを書く段階で,コードが満たす条件
    • 先のインタフェース定義と連携
  • コードにassertionを入れる
    • テストを特別に書くではなく
    • 通常のコーディングとして
  • assertionのパターンやハンドリング
    • 用意されている

成果物の一元管理

  • 「Gitを使う」と同義
  • ワークフローはいくつかある
    • 違いは,プロダクトかサービス
    • サービスの場合は常に一元化
  • プルリクなど手順の順守
  • 分散開発の同期
  • すべての記録を残す(残る)

問題共有と貢献の文化

  • 高速開発の原動力は
  • 並列分散開発
  • 究極は個人単位のタスクに分割し
  • 同時に複数のタスクを処理
  • コンフリクトが生ずる
    • issueとして処理する
  • issue処理の分化
  • プロジェクトへの貢献
    • ライブラリへのcommit件数
    • issue の件数
    • merge処理件数
  • 誰がコア―メンバーか:自己組織

新たな脅威

  • サービス化により顕在化
    • プロダクトでもCANハック
  • 新たなテスト手法
    • ファズイング

何れも公開された技術

  • OSSだが,ちょっと宣伝の匂いがする
  • 現在では稀な 「C言語」「組込み型」
    • 装置への組込みではなくアプリへ
  • テスト関連のコードを含めて公開
  • 長い歴史があるので,古いものもある