「ネットワークのテスト」は何が難しいのか? (1)

はじめに

先月くらいについカッとなってがーっと下書き書いたんだけど、下書き書いたらなんかちょっとすっきりしちゃって放置してたんですよね。それもなんか中途半端なのでとりあえず出してみようと思います。

さて。何か情報システムを作るとき、それに合わせてネットワーク作りますよね。で、作ったら、ちゃんとその上で通信ができて、アプリケーションが動いて、システム全体が動くかどうかをテストしますよね。情報システムを作ると、「ネットワークのテスト」……「情報システムを成立させるために必要な通信機能(通信サービス)それ自体のテスト」というのが必要になります。

さて、私はネットワーク作ってる側なのですが、「ネットワークのテスト」って結構面倒なんですよ。で、どうにかしたいなーと思うわけです。ただ、あまりネットワーク作るとかネットワークをテストするとか、そういうのになじみのない人からすると、どうも「ネットワークのテストの何がそんなに面倒くさいのかがよくわからん」というのがあるようです。(個人的な印象だけどね。)

これをどう説明するか? というのを考えてたんですが、そんな一口で上手く説明できないんですよね、なかなか。いろんな観点でいろんな面倒くささがあって、しかもそれらがいくつか相互に影響する(組み合わさる)ので。まずは個別にいろいろ挙げてみて、ちょっとでもその面倒くささとか、難しさとか、課題感を感じてもらう話ができないかな、と思ったのです。

地理的な分散性・物理環境の抽象化

ネットワークの役割

まずはじめに。

みなさん、インターネット使うときに、いまアクセスしているデータがどこ(国とか地域とか建物とか)に 保存されてるか、意識してますか? 情報系の方であれば、作業でログインしているサーバとかが、どの建物のどのフロアのどのラックにあるかとか、意識していますか? 意識していないとすれば、それはなぜでしょうか?

そう。場所をあまり考えずにいろんな計算機資源が使えるのは、ネットワークを通じて遠隔地からデータをやりとりできているからですね。ネットワークを使って、地理的に離れたところから接続できるので、接続しているシステムや機材が、(物理的に)どこにおいてあるのかをあまり意識しなくていい。ネットワークがちゃんと動いていれば、手元から、東京とか、大阪とか、北米とかに置いてある機材を操作したりできるわけです。ネットワークがあることによって、どこに何がおいてあるのかという地理的・物理的なことを抽象化できている。

操作のための操作

それでは「ネットワーク作る人」を起点に考えるとどうか? たとえば国内本社-支社間、東京・大阪・北海道をつながないといけないシステムがあったとして、何をしなければいけないか? まず、そもそも現地に回線とNW機器がないともうどうにもならないですよね。なので現地で構築作業です。回線と通信機能が用意できたら、その上で各支社から他の支社に対して必要なアプリケーション通信ができないといけないですよね。なので現地から、ほかの拠点に対して、必要な通信ができるかどうかの確認をします。

こういう作業って遠隔からはやりにくいんですよね。作業用の別回線(作るもの=「テスト対象」からは独立した経路)があれば、まあまだなんとかなるんですが。そういうのがない状態でネットワークに対する操作をするとどうなるか。うっかりNW機器の設定ミスしたり、何らかのトラブルが起きたりしたら、通信できなくなってもうお手上げになってしまう。なので、「最初に必要な通信ができる状態にする」という所はどうしても現地作業が必要になってきます。「作業用の別回線」があれば…と書いたけど、それだって誰かが用意しなければいけないわけで、こういう bootstrap 的な作業では、人が・現地に行って・現物の機材や回線を取り扱う必要がある…というのは逃れられません。

まずはネットワークに何が求められるのか、という役割の話でした。「物理的に何がどこにおいてあるのか」をどれくらい考えるかが、ネットワークそれ自体をターゲットにする人と、ネットワーク上の何かをターゲットにする人の違いなんじゃないかなーと思ったりします。

次は、ネットワークがその役割を果たすためにどういうことができないといけないのかという、ネットワークの機能とテストの話。