超スマート社会のシステムは、IoTなどの通信技術の進展により、異なる目的・機能・場所や環境・データ定義・時間といった様々なものがつながり相互作用を行います。システムが複雑になると指数関数的に開発工数が膨らみます。1つの機能の特殊な相互作用が、全体に大きな工数増大をもたらすこともあります。そのため、近年のシステム開発において、見積もり工数が膨大になり開発できない場合や、開発を開始してから工数が膨らみ、様々な問題を起こしている場合があります。システムの振る舞いや相互関係を配慮せずに機能を削っても利用者に不満足なシステムを提供するだけで、開発の複雑さや工数はほとんど減少しません。ここでは、システムの価値を下げずに開発工数を低減するための“剪定”について述べます。
■剪定
園芸における剪定は「余計な枝を切ること」ではなく、「庭木が健康に育つために枝を切り取り、形を整えること」を言います。庭木が「健康に育っている状態」とは、枝や葉がすくすくと成長して花が咲き、毎年実がなる状態のことです。剪定された木は、丈夫に成長します。そのため、剪定では庭木の健全な成長を妨げる「忌み枝」を取り除きます。剪定を行うためには、対象の庭木の特性・栄養の流れ・風通し・日当たりなど様々な観点が必要であり、庭木のことを知り尽くしていないと剪定はできません。また、剪定には適した時期があり、間違えると翌年に花や実が成らず、庭木が弱ります。
■システムの健全性を阻害する複雑性
システムが複雑な場合、開発関係者だけでなく利用者にも大きな悪影響を及ぼします。このシステムの複雑性を示す指標として、凝集度と結合度があります。凝集度は、システムの構成要素単位の責任分担が簡潔で集中している度合いです。凝集度が高く、他の構成要素と相互の影響が少なく独立性が高いことが望まれます。凝集度が高いことにより構成要素単独で内部を管理することができ、他の構成要素からは簡潔に状態を確認できるため、構成要素間の相互関係で悪い影響を受ける機会は確実に減ります。しかし、システムが実現する機能は構成要素間の連携動作により成り立ち、構成要素の絶対的な自立はありません。構成要素間の相互関係は、結合度で示されます。結合度は、相互の関係が明示的に管理できる度合いです。結合度が高い場合、全体動作の定義や理解が困難になります。
凝集度を高め過ぎると、一つの構成要素自体が大きく複雑になります。また、役割が縦割りになり柔軟性がなくなります。一方、凝集性が低くなると、結合度が高くなり相互関係が複雑で不明確になります。凝集度や結合度を最適にするためには、機能・役割・ふるまいを適切に設定する必要があります。しかし、正解はなく、妥協できるバランスを発見し定義するためには十分な分析と検討が必要です。
■システム開発の剪定
システム開発における剪定は生産性・品質・顧客満足向上であり、利用者へのサービスを低下させるのではなく、将来の拡張を含むシステムのパフォーマンスを最大に導くための作業です。そのためには、どのように利用者が振舞い、開発するシステムがどのように構成され、どのようにデータが流れ、構成する要素間がどのように関わりあうのかを把握していないと剪定できません。剪定の時期が早過ぎると、システムが運用されている状況を具体的にイメージできずに、中核的な機能をなくしてしまうかもしれません。逆に剪定の時期が遅いと、既に設計を行った機能との関係が絡み合うことにより、もはや本質的な剪定ができなくなってしまいます。
超スマート社会のシステムにおいて、様々なつながりにより複雑性の要因が爆発的に増えます。システム分析開始時は、システムの振る舞いもイメージできていない状況であり最善解を最初から構築することは不可能です。そのため、システム構造図を作成し、機能を実現する振る舞いを構造図上で実行させ矛盾や複雑性を検証し、機能の役割配置や相互関係の修正を何度も繰り返します。この繰り返しを通じてシステムの理解と記憶が深まることにより、頭の中でシステムの振る舞いがイメージできるようになり、複雑な動作の検討や検証を短時間で行えるようになります。これは、例えば将棋の棋士が、何万通りもある先の手を短時間で読めるのと同じです。この分析・設計時に、簡潔化の妨げとなる機能や制約条件について、その必要性や優先重度を考えながら剪定していきます。
■剪定の観点
運用中のシステムの価値を落とさないことに配慮しながらシステムが稼働している状況をイメージし、構成要素、機能・役割、状態を可能な限り簡潔にします。簡潔化できない場合は、階層化を行い同時にイメージしなければならない個数を削減します。さらに、簡潔化や階層化ができない要因を抽出しゼロベースで検討します。簡潔化や階層化ができない要因の必要性が低い場合には、取り除くか許容できる条件に変更します。逆に、要因の必要性が高い場合には、代替えできる機能や振る舞いの検討、あるいはシステム構造図レベルから見直しを行います。
例えば、2つの機能が同時に並行動作することが運用上必要でないのであれば、物理的に並行動作できないしくみにすることにより、二つの機能の組み合わせ状態はなくなります。これにより、万が一並行動作した場合の配慮を行う必要がなくなり、システムテストも大幅に削減することができます。また、機能・処理・データ・通信手順・状態遷移などの一貫性を配慮します。一貫性を持つことにより、理解が容易になるだけでなく、様々な処理の共通化を図ることが可能になります。
■異常処理や例外処理の剪定
異常処理や例外処理の抜け漏れや対応の誤りは、重大な品質問題を招きます。また、異常処理や例外処理を設計初期段階に配慮できておらず、開発中に追加しなければならない場合は、システム全体の振る舞いに大きな影響を与え複雑化の要因となります。例外や異常など正常からの逸脱を監視するためには時間的に継続した監視処理が必要になり、一時的な処理として特定の処理を変更すれば良いものではありません。また、異常や例外が発生した際には、連携できなくなる機能や不定となるデータが発生します。この機能やデータと直接的あるいは間接的に関係する処理に対して見直しが必要になります。さらに、異常から復帰した場合の復帰手順も様々な要素にまで影響を及ぼします。
一方で、例外や異常の発生は実際の運用中では極めて稀なケースになります。稀な状況においては、システムの安全性を保障しながら最低限の運用を維持する機能のみ継続し例外や異常の影響が連鎖しないようにすることが必要であり、可能な限り複雑性を回避します。そのため、異常や例外の発生リスクを設計初期段階で把握し、それらに対応した処理は剪定の重要な対象となります。例えば、ある機器の運転状態が変化し、その変化を相互連携している多くの機器に通知している過渡期において、機器間の認識状態が一致していないことによる処理の不整合が起こる場合があります。この過渡期の間、処理を一時的に中断する機能を付け加え、不整合が起こる原因を根本的に取り除くことにより、複雑な不整合回避処理の必要がなくなります。過渡期は、全体時間から見れば極めて短時間であり、たまたまそのタイミングの処理が遅れても問題となることはありません。
開発の上流段階における構造や振る舞いの全体検討時に剪定を考慮した構造設計を行うことにより、全体の簡潔性と一貫性が保たれ、健全な開発が行えます。
※分析方法など詳しくは、フォーラムエイトパブリッシング出版の「超スマート社会のためのシステム開発」をご覧ください。
|
|
超スマート社会のためのシステム開発
〜日本のものづくりを足元から見直しませんか〜
・・・第4次産業革命を実現する“コト”の生産技術革命・・・
(システムを扱う経営、企画、開発、品質保証、発注会社/受託会社のために)
■著者 : 三瀬 敏朗
■発行 : 2018年11月
■価格 : \2,800(税別)
■出版 : フォーラムエイトパブリッシング |
約30年間に渡って大手メーカー新規商品、特注品、試作機やマイコンソフトウェア等の受託開発に携わった豊富な経験にもとづいて、これからのスマート社会を支える上で不可欠な組込システム開発の考え方・知識・手法を紹介。システムを扱う経営、企画、開発、品質保証、発注/受託に関わる方は必読の手引き書です。 |
|
|