ステージ1
〜ブロックチェーンの目的と可能性を知る〜
・このステージでは技術的なことをスムーズに話し合えるように考え方の枠組みを体系化/標準化する。
・この学習ステージではソフトウェアアーキテクチャとソフトウェア完全性の2つの概念とブロックチェーンがどのような関係であるかも説明する。
ステップ1
〜レイヤ(階層)と機能面/非機能面について考える〜
・システムを分割して分析する。
➙皆さんは自分のスマートフォンをどこまで理解しているだろうか。ほとんどの人は細かい事をあまり知らない。僕らはスマートフォンをいくつかのパーツに分けて認識している。それは知っておく必要のあるパーツと考えるまでもない当たり前のパーツだ。こうしたモノの捉え方は個人の主観、具体的なテクノロジ、個人の目的や経験に依存するため個人差が大きい。こうした食い違いはコミュニケーションの妨げとなる。したがって技術的な事を話し合うにはシステムをどう分割して捉えるかを合わせておくことが重要となる。このステップでは分割方法とブロックチェーンについて話し合うベースを設定する方法について説明する。
➙システムを分割(レイヤ化)する方法として次の2つを使用する。
①アプリケーション層と実装層 ②機能面と非機能面
アプリケーション層とは
➙音楽を聞く、写真を撮る、ホテルを予約するなどユーザーのニーズに関連している。
実装層とは
➙デジタル情報を音響信号に変換する、メッセージをインターネット経由で予約システムに送信するなどユーザーのニーズを実現する事に関連している。実装層の要素は技術的であり目的を達成するための手段とみなされる。
➙この2つの違いを覚える方法は言語の文法にならうことである。動詞は「何をするか」を表し、副詞は「どのように行われるか」を表す。例えば人はゆっくり歩いたり速く歩いたりできる。どちらも「歩く」という動作は同じだが行われ方が違う。原則として機能面は動詞に相当し、非機能面は副詞に相当する。
機能面
➙例を挙げるとネットワーク経由のデータ送信、音楽の再生、写真撮影などが挙げられる。
非機能面
➙例を挙げるとソフトウェアのキビキビとした動作、ユーザーデータの気密性を保ち、保存する機能などが挙げられる。
アプリケーション層と実装層の分割と、機能面と非機能面の割り出しは同時の出来る。下写真のようになる。
上の写真においてアプリケーション層の機能面はユーザーのニーズを満たす事からシステムにおいて最も目立つ要素である。一方実装層の非機能面はシステムの主要な要素とはみなされない。
➙完全性とはシステムが意図したとおりに動作することを意味する。完全性はどのソフトウェアにおいても重要な非機能面である。3つの主な要素で構成される。
①データ完全性
➙システムによって使用され管理されるデータが完全かつ性格で矛盾がない。
②振る舞い完全性
➙システムが意図したとおりに動作し、論理的な誤りがない。
③セキュリティ
➙承認されたユーザーだけがシステムのデータや機能にアクセスできる
僕らがアクセスするのはたいてい完全性が確保されたシステムである。考えてみてほしい。もし完全性が確保されていなかったらどうだろうか。データが消失したり(データ完全性の侵害)ソフトウェアの動作がおかしくなったり(振る舞い完全性の侵害)個人データに何者かがアクセス出来る状態(セキュリティの侵害)であった事が判明したりする。
1−5 <まとめ>
●システムは次のように分けて解析できる
➙アプリケーション層と実装層、機能面と非機能面
●アプリケーション層はユーザーのニーズへ、実装層はニーズを満たす事へ焦点を合わせる。
●機能面は「何を行うか」に、非機能面は「それらをどのように行うか」に焦点を合わせる。
●ほぼすべてのユーザーの関心はシステムのアプリケーション層の機能面にある。システムの非機能面はユーザーからほとんど見えない。
●完全性はどのソフトウェアにとっても重要な非機能面であり主に3つの要素で構成される。
➙①データ完全性
➙②振る舞い完全性
➙③セキュリティ
●データの紛失、誤作動、機密データへの不審なアクセスといったソフトウェアエラーの殆どはシステムの完全性が侵害された結果である。
このステップではソフトウェアエンジニアリングの一般的な原理をいくつか紹介した。特にアプリケーション層と実装層、機能面と非機能面、そして完全性の概念を示した。これらの見方はブロックチェーンを広い視点で捉えるのに役立つ。次のステップではブロックチェーンをより俯瞰的に捉える。