不適切なソフトウェアアーキテクチャは、必ずしもすぐに明らかになるわけではなく、問題は時間の経過とともに蓄積されていきます。顧客の要件が追加されたり、ハードウェア構成が変更されたり、業界標準が進化したりするにつれて、ソフトウェアの変更、検証、再利用がますます困難になっていきます。
半導体、電子機器、および先端製造装置は、今日使用されているシステムの中でも最も複雑なソフトウェア制御システムに数えられます。1つの装置に、ロボット工学、モーション制御、プロセスモジュール、レシピ管理、FA(ファクトリーオートメーション)インターフェース、データ収集、アラーム処理、資材追跡、オペレーターとの対話などが組み合わされていることがあり、これらはすべてソフトウェアによって実装されており、そのソフトウェアはしばしば数十年にわたって稼働し続けます。
課題は、単に現在機能するシステムを構築することだけでなく、新しいハードウェア、進化し続ける業界標準(SEMI規格など)、顧客固有の要件、そして将来の技術に適応できるシステムを構築することにあります。
だからこそ、ソフトウェアアーキテクチャは競争上の差別化要因となり得るのです。
PDFSolutions社のCimetrix® CIMControlFramework(CCF)は、機器制御アプリケーションを構築するためのソフトウェア基盤です。このフレームワークは、機器制御における一般的な課題に対応する再利用可能なサービスを提供するため、機器メーカー(OEM)は、自社製品の差別化やプロセスの革新に注力することができます。CCFのアーキテクチャは、CCF自体を変更することなく、多様性や柔軟性に対応できるため、機器の製品ライフサイクル全体を通じて価値を提供することが可能です。
CCFのような効果的なソフトウェアフレームワークは、多くの場合、柔軟性、保守性、拡張性を高めるためにロバート・C・マーティンによって広められた一連のアーキテクチャ原則であるSOLIDを反映しています。SOLIDは、以下の5つの原則を表す頭字語です:
- 単一責任の原則
- 開いている/閉まっている
- リスコフの置換原則
- インターフェースの分離
- 依存性の反転
これらの原則は、要件の変化、ハードウェアの多様性、製品ラインのバリエーションといった課題が常に存在する機器の自動化において、特に重要となります。
不適切なソフトウェアアーキテクチャには、どのようなコストがかかるのか?
多くの機器サプライヤーは、お決まりのパターンをたどっています:
- 最初のツールが無事に納品されました
- 顧客から特別な機能の要望があった
- ソフトウェアに修正が加えられました
- 別の顧客が、別のバリエーションを希望しています
- さらに変更が追加されました
- 新しいハードウェアが導入されました
- さらに例外が現れる
時間が経つにつれて、そのソフトウェアの保守は難しくなっていく。
一般的な症状には次のようなものがあります:
- 数千行ものコードからなる大規模なクラス
- モジュール間で重複しているロジック
- アプリケーション全体に散在する、ハードウェアや顧客固有のコード
- 難しいアップグレード
- 回帰不具合
- 既存の機能を変更することへの懸念
- 複数の分岐したコードベース
その時点で、開発のペースは劇的に鈍化する。
堅牢なアーキテクチャこそが、この悪循環を回避する最善の方法です。以下に説明する5つのSOLID原則は、機器制御ソフトウェアが脆弱になることなく進化していくのに役立ちます。
S — 単一責任の原則
モジュールは、単一の責任に焦点を当てることで、変更の理由を1つに絞るべきです。これにより、ある部分の変更が他の部分に及ぼす影響が少なくなり、コードの理解、修正、保守が容易になります。
機器制御ソフトウェアにおいては、この原則に違反する事例がしばしば見られる。
たとえば、レシピの検証、アラーム処理、データの公開、およびオペレータインターフェースの動作などは、1つのクラスにまとめてはなりません。それぞれの責任は、さまざまな理由で変化するため、分離すべきです。
CCFは、データ収集、資材追跡、工場自動化との統合といった特定の分野に焦点を当てた、再利用可能なフレームワーク機能を提供することで、「単一責任の原則」をサポートしています。
O — 開放・閉鎖の原則
ソフトウェアエンティティは、拡張には開放的であるべきだが、変更に対しては閉鎖的であるべきである。
これは、長寿命の機器用ソフトウェアにとって最も重要な原則の一つです。
いずれは、どの顧客も、フレームワークが提供していない動作を要求するようになります。CCFは、フレームワークそのものを修正するのではなく、基底クラスのオーバーライド、イベントフック、ファクトリ、ストラテジーといった拡張ポイントを通じて、そうした動作をサポートするように設計されています。これにより、機器固有の動作が進化していく中でも、フレームワークの安定性を維持することができます。
これはCCFのアーキテクチャにおける中核的な強みであり、OEM各社が共通の基盤を維持しつつ、独自の機器要件に対応できるようにするからです。
L — リスコフの置換の原則
リスコフの置換の原則とは、サブクラスやインターフェースの実装が、システムに支障をきたすことなく、その基底型の代わりとして使用できるべきであることを意味する。
これにより、システム内の他の部分を変更することなく、ある実装を別の実装に置き換えることが可能になります。機器制御ソフトウェアの場合、これは、期待される動作を維持したまま、履歴保存プロバイダ、資材追跡機能、あるいはハードウェアインターフェースを別のものに置き換えることを意味するかもしれません。
設備管理においては変化は避けられないため、この原則に基づいた枠組みであれば、混乱を最小限に抑えながら状況の変化に対応することができます。
I — インターフェース分離の原則
クライアントは、使用していないメソッドに依存することを強いられるべきではない。
自動化ソフトウェアでは、大規模なインターフェースがよく見られます。これらは不必要な結合を生み出し、コンポーネントの改良や置換を困難にします。
優れた設計では、より小規模で目的を絞ったインターフェースを採用することで、各クライアントが必要な機能のみに依存するようにします。これにより、交換可能なモジュールの差し替えも容易になります。
フレームワークが成熟するにつれて、そのモジュール性はさらに重要になってくる。
CCFが「インターフェース分離の原則」を採用することで、機器制御ソフトウェアのモジュール性と保守性が向上し、結合度が低減されます。これにより、特定の機器に合わせて動作を拡張・カスタマイズすることが容易になります。
D — 依存性反転の原則
高レベルのモジュールは、低レベルの実装ではなく、抽象化に依存すべきである。これにより結合度が低くなり、実装を変更しても高レベルのロジックに影響を与えないため、システムの修正、拡張、およびテストが容易になる。
CCFでは、ウェーハハンドリングなどの高レベルモジュールは、抽象化を通じて機器のハードウェアと連携します。ウェーハハンドリングシステムは、Brooks、Rorze、Kawasakiといった特定の実装ではなく、ロボットの抽象化に依存すべきです。ロボットベンダーが変更された場合でも、追加する必要があるのは低レベルの実装のみであり、ウェーハハンドリングソフトウェアは安定した状態を維持します。
結論
設備管理フレームワークの価値は、導入当初に何を提供するかだけでなく、長い製品ライフサイクルを通じてどれだけうまく適応できるかによって測られる。
SOLIDは、絶え間ない再設計を必要とせずに進化できるシステムのアーキテクチャ的基盤を提供し、その結果、以下のことが実現されます:
- ライフサイクルコストの削減
- 顧客のニーズに合わせたカスタマイズを迅速に実現
- 回帰分析の回数が減る
- コードの分岐が減少した
- 製品ラインの進化が容易になる
半導体および先端製造装置を製造するOEM企業にとって、これらの原則は単なるソフトウェアのベストプラクティス以上のものです。アーキテクチャは単なる実装上の詳細ではなく、フレームワークが今後数十年にわたり、どれほどうまく拡張・適応し、存続できるかを決定づける長期的なビジネス上の意思決定なのです。
CCFが貴社の長寿命で設定可能な制御アプリケーションをどのようにサポートできるかについて、ぜひお問い合わせください。