組込み開発と開発手法
私はそろそろ情報処理業界やソフトウェア開発業界から引退を考えている年寄エンジニアです。エンジニアはどうあるべきか、など日頃考えている事、感じた事をとめどなく書いてみようと思います。このコラムを読まれた方の中には、違う意見や考えをお持ちの方もおられると思います。その時は無視して頂ければ幸いです。
組込みシステムにおける開発手法
皆さんは組込みシステムにおけるシステムの開発手法を考えたことはありますか?
筆者が仕事を始めた頃はウォーターフォール型開発手法が主流でした。しかし、近年ではアジャイル型開発手法を採用するケースが多いかもしれません。
そこでウォーターフォール型開発手法とアジャイル型開発手法を調べてみると、両者の開発手法は全く別物で相容れない開発手法のような説明もあるようですが、はたしてそうでしょうか?
ウォーターフォール型開発手法
「ウォーターフォール型開発手法」をChatGPTに質問すると、『ウォーターフォール型開発は、上流の「要件定義」工程から下流の「テスト」工程まで、滝の上から水が落ちていくかのごとく、順序に従って工程を進めていく開発手法です。各工程が完了してから次の工程に進むため、プロジェクトの安定的な進行が期待できます。』と回答しました。
アジャイル型開発手法
一方、「アジャイル型開発」は、『「アジャイル(agile)」は「すばやい」、「機敏な」という意味で、短い期間で小さな成果物を繰り返し作り上げることで、顧客ニーズに柔軟に対応することができます。ただし、要件定義や設計が柔軟に変更されるため、プロジェクトの進行が不安定になる可能性があります。』と回答しました。
ChatGPTの説明をみても、手法の違いを説明するだけで、その関係性についての説明はありません。
組込み開発における開発手法の本質
ウォーターフォール型開発手法の工程は、要件定義→基本設計→詳細設計→実装→単体テスト→システムテスト→受入テスト というのが一般的でしょう。じゃあ、アジャイル型開発手法には、要件定義→・・・→受入テスト という工程を含まないか、というと、一部を含んでいるのではないでしょうか。
つまり、アジャイル型の「短い期間で小さな成果物を繰り返し作り上げる」という工程にウォーターフォール型の要素を含んでいるのです。アジャイル型は、仕様やドキュメントもなく、必要と思われる個別の機能をお試しで作りこみながら、全体を作り上げる、という認識を持っている方もいらっしゃるかもしれませんが、それは違うと思うのです。
ウォーターフォール型開発手法とアジャイル型開発手法は、相互に関連した開発手法として捉えるべきなのです。
組込み開発におけるアジャイル開発の実践的進め方
実際の組込みシステム開発の現場では、以下のような流れになります。ポイントは、アジャイル型開発手法にウォーターフォール型開発手法を組み合わせた開発手法を採用することです。
- 組込みシステムで実現する全体機能と外部インターフェイスを検討(ウォーターフォール型の要件定義と基本設計に相当)
- 全体機能をウォーターフォール的な視点で個別機能にブレークダウンし、全体の工程と個別機能間のインターフェイスを検討
- 個別機能を統合した組込みシステムの全体機能をアジャイル型開発手法で開発
- イテレーション3-1:簡略化した全体機能を開発
- 各個別機能をアジャイル型開発手法で開発
- イテレーション3-1-1:個別機能をウォーターフォール的な視点で 計画→設計→実装→テスト→レビュー
- イテレーション3-1-2:深化させた個別機能を開発(内容はイテレーション3-1-1と同じ)
- イテレーション3-1-3以降:個別機能に必要な全機能の実装が完了するまでイテレーション3-1-xをリピート
- 個別機能を統合した全体機能組み上げ
- 組み上げた全体機能をテスト
- 全体機能と外部インターフェイス、個別機能および個別機能間のインターフェイスを再検討し、個別機能にフィードバック
- 各個別機能をアジャイル型開発手法で開発
- イテレーション3-2:深化させた全体機能を開発(内容はイテレーション1と同じ)
- イテレーション3-3:以降:全体機能の全機能の実装が完了するまでイテレーション3-xをリピート
- イテレーション3-1:簡略化した全体機能を開発
- ウォーターフォール的な受入テスト実施。不備があれば全体機能、個別機能を再検討して前工程に戻る。
- 場合によっては受入テストも、基本的なレベルから段階的に深化したレベルに分けて、繰り返しても良い。(アジャイル型の受入テスト)
組込みシステムの開発手法に絶対はありません。上記の例は私が経験的な視点から考える開発手法です。
皆さんは、いろいろな開発手法を勉強し、実際の開発で実践してみて、より良い開発手法を編み出してください。
ちなみに、当社では組込み開発を始め、様々なシステム開発の相談、設計、実装を全国対応で行なっています。無料相談も実施していますので、お気軽にご相談ください。