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系開発環境とツール活用
活用方法のナレッジが共有
仕様技術化
テスト駆動開発 自動テスト
成果物の一元共有と分散環境
問題共有と貢献の文化
新たな課題:セキュリティの問題
仕様技術化
自然言語の曖昧な定義が問題
インタフェースや入出力の厳密な定義
XML その後 JSON,YMLなど
前提:定義可能な単位に分割する
テスト駆動開発
コードを書く段階で,コードが満たす条件
先のインタフェース定義と連携
コードにassertionを入れる
テストを特別に書くではなく
通常のコーディングとして
assertionのパターンやハンドリング
用意されている
成果物の一元管理
「Gitを使う」と同義
ワークフローはいくつかある
違いは,プロダクトかサービス
サービスの場合は常に一元化
プルリクなど手順の順守
分散開発の同期
すべての記録を残す(残る)
問題共有と貢献の文化
高速開発の原動力は
並列分散開発
究極は個人単位のタスクに分割し
同時に複数のタスクを処理
コンフリクトが生ずる
issueとして処理する
issue処理の分化
プロジェクトへの貢献
ライブラリへのcommit件数
issue の件数
merge処理件数
誰がコア―メンバーか:自己組織
新たな脅威
サービス化により顕在化
プロダクトでもCANハック
新たなテスト手法
ファズイング
何れも公開された技術
事例を見るなら
SQLite テストについては
How SQLite Is Tested
SQLite 紹介は
SQLite Home Page
OSSだが,ちょっと宣伝の匂いがする
現在では稀な 「C言語」「組込み型」
装置への組込みではなくアプリへ
テスト関連のコードを含めて公開
長い歴史があるので,古いものもある