宇宙機のソフトウェアの高度化に伴い,宇宙機開発においても現代的なソフトウェア開発手法を取り入れることが試みられ始めています.本記事では,現代的なCI/CDを宇宙機のソフトウェア開発に取り入れることについての考察と技術的課題について述べたいと思います.
宇宙機におけるシステム・テスト
宇宙機はミッションに失敗すると大きな経済的代償を払うことが多いため,宇宙機には高い信頼性が求められるものです.したがって,宇宙機のソフトウェア開発においては,ソフトウェア・テストの中でも,信頼性を含む非機能要件を確認するようなシステム・テストが重視されると考えられます.
宇宙機におけるCI
システム・テストはシステム全体を対象とします.そのため,ソースコードを構成管理ツールで管理している場合,全ての開発者の作業コピーをマージしたソースコードを対象に行う必要があります.
もし,それを頻繁かつ定期的に行うのであれば,すなわち,CI(継続的インテグレーション)を行なっているということです(CIの定義は,頻繁かつ定期的に全ての開発者の作業コピーをマージすることです).
宇宙機でCIを行う,すなわち頻繁かつ定期的にシステム・テストを行える状態にすることができれば,信頼性を含む非機能要件を確認するのを,ウォーターフォール的にシステム開発の最後の工程でまとめて行うのではなく,アジャイル・ソフトウェア開発的に工程の中で都度確認しながら実施できるように思います.これにより,早い段階で,信頼性を含む非機能要件にかかる問題点を検出することができるのではないかと期待します.
宇宙機におけるCD
また,システム・テストを行うのに,シミュレーターや実機を用いることも多いです.
前項で述べたようにCIを取り入れるのであれば,シミュレーターや実機にCD(継続的デプロイメント)を行うことで,システム・テストを効率よく行えるかもしれません.
下記の記事で,Nervesを宇宙機に用いることを提案しました.
Nervesの持つOver the air(OTA)を用いると,ネットワーク越しにセキュアにシステムをアップデートできます.これを用いれば,実機への効率的なデプロイメントを行えます.
さらに,GitHub ActionsのSelf-hosted runnerを用いることで,ローカル・マシンでGitHub Actionsを実行することができます.Self-hosted runnerを起点にして,Nervesシステムをビルドし,OTAで実機へデプロイメントできるのであれば,CDを実現できるでしょう.
技術的課題
しかし,システム・テストを頻繁かつ定期的に行うには,コストがかかります.宇宙機の場合,たとえば振動試験や衝撃試験,真空試験,放射線試験などを行うことがあります.そのような試験を行いながらの信頼性を含む非機能要件の確認を実施するには,大きなコストがかかります.それを常時行えるような環境を用意するのは,コスト面で非現実的だと思われます.
では,どうするのか?その答えについても私は考えていますが,その話は機会を改めてしたいと思います.
告知
関連する技術記事をCQ出版Interface誌に別冊付録されるFPGAマガジンに連載します! 直近では2月25日発売号に付録されます.この機会に是非定期購読ください.
20240210追記:
FPGAマガジン特別版No.2の目次が公開されました! https://fpga.tokyo/no2-2/
大変光栄なことに,トップを飾っております.
第1章 Verilator 5とGitHub Actionsによるテストベンチ自動検証
他にも有用な記事が満載ですので,ぜひこの機会にInterfaceを定期購読ください!