2011年1月30日日曜日

『ソフトウェア開発工程管理』 竹山寛 著

ソフトウェア開発の工程を理解するため、『ソフトウェア開発工程管理』を手に取りました。内容は、ソフトウェア開発工程・管理者のあり方・品質管理といったものでした。管理者といったプロジェクトを指揮する人が読む内容が多かったです。

PastedGraphic-2011-01-30-07-01.jpg


僕が、プロジェクトの管理をする(リーダーなりマネージャーなり)立場になったときのことを想像しながら読んでいきました。管理者って大変な仕事なんだと理解しました。開発の手順・方針をドキュメントにまとめ、チームを指揮し、チーム内での意識を高める、それでいて責任は全て管理者にある。大変な仕事です。

ソフトウェア開発は必ず納期に間に合わないといった話があります。前もって計画していないのか?と思う人もいますが、そんなことはありません。まだ出来て間もない手法を用いることが多いので、これから改良の余地はまだまだありますが、計画自体は緻密に計算されています。

ソフトウェアが、一つの製品にさまざまなプログラミングが絡み合ってできている特殊性がゆえに、一つの誤りが全体に影響します。複数の人が作ったプログラムが絡み合って、上手く動くことを期待しない方が良いのです。そのために、多くの時間がテストにさかれるわけです。

どのようにしたら、影響の少ない・品質の優れた製品を作ることができるのでしょうか。そのために管理者としてすべきことは何なのか。そのことが本書には書かれています。難しい内容ではなかったので読みやすかったです。管理者の立場になったらまた読みます。

2011年1月29日土曜日

パソコン解体記

『ハードディスクの知識と実務』を読んで以来、ずっと楽しみにしてた「パソコン解体」やりました。

もちろん、パソコンをまた組み直し再利用するという計画だったので壊さない程度に分解しました。なので、基板やら、のっかっているトランジスタ・ダイオード・抵抗などには一切触れないように注意しました(パソコン使えなくなったら触りたい)。結果、無事生き残ることができたので、安心してLinux使えます。


パソコンの紹介
まず、パソコンの紹介です。

RIMG0137-2011-01-29-11-34.JPG

僕は、Mac愛好家なのでWindowを使ったことがありませんでした。ただ、バイト先でWindowsを使うので慣れなきゃ、ということで中古PC買ったのですが使いこなせないうちにお蔵入りになった可哀想なPCです。(やっぱWindows分かんない!で諦めた・・・)

富士通のFMV-C8200です。
http://www.fmworld.net/biz/fmv/product/hard/blb0504/c8200/
メモリが256MBでは何もできない!と思って、メモリを拡張してもらいました。お蔵入りになるんだったら、Macで ”Boot Camp” 使ってWindows使えば良かったと後悔していたのですが、ここでまさかの活躍。といっても分解されるだけなんですが。

その下にあるドライバは、今回PCを分解するために使われたものです。



PCを分解する
・まずはじめに
電源を抜いて、PCの裏にあるバッテリーを外しておきましょう。
手は清潔にして、しっかり乾かしておきましょう

・キーボード上部の部分を外す
まず、裏面のネジは全て外しておきました。キーボード上部のスピーカーの隣にゴムパッキンがあるので、とってネジを外します。画面を180度に開いて、ヒンジカバーを外します。

RIMG0106-2011-01-29-11-34.JPG


・キーボードを外す
中は両面テープで固定されているので、気をつけながら外します。

RIMG0133-2011-01-29-11-34.JPG



・キーボードの真下です。

RIMG0111-2011-01-29-11-34.JPG


上の写真のフラッシュメモリを拡大してみました。
SSDにはSamsung製のMLC NAND型フラッシュメモリ「K4H511638B-TCB3」
書き込みや消去を高速に行える記憶装置です。やはりSamsung強し。個人的には東芝であって欲しかったです。

RIMG0126-2011-01-29-11-34.JPG


・パソコンの表面のカバーを外す
キーボードに続いて表面のカバーを全て外してみました。

気付くこと:ドライブが多いとかなり場所を取るんだな・・・
ドライブをかなり外すことで、軽量化を成功させたのがMacAirなのかな。(ちなみに、MacのPCはこういった組み立て方とは大きく違います)

RIMG0116-2011-01-29-11-34.JPG

内蔵されているハードディスクです。

RIMG0118-2011-01-29-11-34.JPG



・裏面のカバーを外す

ここで、メモリの増設を行います。
他のWindowsPCがどうなのかは分からないのですが、FMV-c8200では、1GBまでのメモリ増設ができます。ぼくは、購入時に512MBのメモリ増設をしています。

RIMG0134-2011-01-29-11-34.JPG




最後に
組み立て直したが、ネジが5本余っている・・・。不思議現象ですね。でも無事に使えるので良かったです。これからLinuxをインストールして動かすことにします。
お蔵入りは可哀想なのでなるべく使ってあげます。

ものすごく楽しかったです。ハードディスクについての知識が増えたと思います。心残りは、もっと分解したかった・・・。ただ内部を見ただけ、って感じでした。新しくPC買ったりしたら、さらに分解して、手にとって見ていきたいです。

PCを実際に作ってみたいとは思うのですが、今は市販のPCの方が軽いし使いやすいみたいですね。

2011年1月26日水曜日

『ハードウェアの知識と実務』 矢沢久雄 著

『ネットワークの知識と実務』に引き続き、『ハードウェアの知識と実務』を読みました。このシリーズ好印象です。どんどんはまっていく自分がいます。『データベースの知識と実務』、『オペレーションシステムの知識と実務』も読むかもです。とにかく分かりやすかったです。

51S%2BKjBBBYL._SL500_AA300_-2011-01-24-21-30.jpg

まず始めに、ハードウェアを学ぶことは意外に大変でした。身近にあるというか、毎日手で触れているものの、その仕組みは興味を持たないと学ぶ気になれないのではないでしょうか。僕もPCの中まで覗こうなんて考えたこともなかったです。なのでこの本を読んで思ったことは、見たことのない機械との遭遇ばかりだったな、ということです。

しかし、細かく物を見ていくと、一つ一つの部品にそれぞれの役割があり、それが集まってPCができあがっていることが分かりました(当たり前のことだけど)。でもそれが大事なのです。一つ一つの部品がどの役割を果たしているか、それを理解することがハードディスクを理解する早道なのです。

本を読み終わる頃には、”パソコンを分解したい” という気持ちを強く抱きました。しかもちょうど良い、古いPCが家にある!これはやるしかない。ということで、週末はPCを分解します。無事生き残れば、Linuxをインストールしようと思っています。←結構本気で、Linux使いたいので、必ず生かします。

2011年1月23日日曜日

MacJournalとPicaso連携

{diary}
僕は、MacJournalがなければ何も作業できないほど、愛用しています。これは、文書作成ソフトウェアで値段もそれなりに(¥5,000)したのだが、非常に満足しています。

ブログへの送信も、MacJournal上で文書を作成し、”共有”>”ふと思ったこと”に送信 をクリックの2ステップですることができます。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%882011-01-2312.40.10-2011-01-23-12-33.png

しかしブログサーバへ送信するものの、画像はローカルの環境にあるため、画像ごと持っていってはくれませんでした。
Picasoといったweb上に画像をアップロードした後に、ブログに再び貼付ける必要があったのです。

今日、簡単に写真をアップロードするやり方を見つけました。
“ジャーナル” > “ブログサーバーを編集” > “オプション” で以下の画面が出ます。
そこでPicasoの設定をすれば良いのです。
ユーザーは、googleに登録してあるユーザー名です。
”アルバム”欄の隣のぐるっとした矢印をクリックしてどのアルバムにアップロードをするのかの選択。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%882011-01-2312.46.42-2011-01-23-12-33.png

そして、共有からブログサーバーへ送信します。

画像の大きさの問題はあったものの下の画像のように問題なくおくれました。
画像の大きさは設定できるか調べてみます。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%882011-01-2312.53.04-2011-01-23-12-33.png

また、MacJournalの便利さを感じました。まだまだ知らない機能がありそうです。

トラブルシュート Mac編

トラブルが起きたとき、ネットワークがどのような状態になっているのかを調べたい。そこで使うのが、ping、traceroute、nslookupの3つの情報です。その3つの情報から想像力を働かせて問題点を絞っていくことになります。今回はMacユーザー定番のターミナルで紹介したいと思います。


『エレガントな問題解決』代数編

『エレガントな問題解決』にはたくさんの演習問題が記載されています。
せっかく買ったことだし、演習問題を解いていこう。
これからやる人たちに参考になると思って、自分なりの解答を載せていきます。

自分の解答が合ってるのかがすごく心配です。(間違ったものってネットに載せていいのかな・・・と思ったり)

誤解答や説明不足、どんどんつっこんでくれるとありがたいです。
このブログは、そういう場にしたいと思っています。
(ちなみに、ぼくは、証明が説明不足であるとよく言われます。)


2011年1月22日土曜日

『ネットワークの知識と業務』 村嶋修一 著

今日は1日中『ネットワークの知識と実務』村嶋修一著 を読んでいました。

ここ最近、セキュリティを学ぶことが楽しくなってきたのですが、深く学ぶためには、様々な知識が必要ということに気付きました。セキュリティに関連する知識として、ネットワークは必須分野ではないでしょうか。なぜなら、セキュリティ対策を施すにあたって、もっとも警戒すべきとこはネットワークといった外部からの攻撃だからです。

ということで、読みやすそう&セキュリティにも触れているネットワーク本ということで、この本を選びました。



内容は期待以上のものでした。読むとこ全てが新鮮で(何も知らなかったので・・・)、それでいて分かりやすかったです。今日読んだのは、「知識編」です。ネットワークに関して知っておくべき知識が書かれています。その後、「実務編」に続くのですが、実際にIPアドレスを調べたり、トラブルの処理などについて書かれています。今から、やります。すごく楽しみです。

この本読んで、ここに簡単にまとめる予定が、知らない内容ばかりで、うまくまとまってません。話題があっちこっち飛んでいます。なので、ぜひ購入して読んでみてください。



追記: 匿名コメントより
貴重な意見をありがとうございます。
著者の意見を僕が間違った解釈をしていました。
たとえば、
「この、ルータの中継をどのようにして最短距離を探しあてるか、がgoogleの使命なのです。」
これはまったくあっていません。

「最短経路演算アルゴリズムは何度も改善されており、これからも改善を続けていくことでしょう。」
これも「?」です。

これは本に書かれたことではなく、自分でまとめています。章の内容を自分なりにまとめていて、その際に間違った記述をしていました。

僕の書き方が悪かったです。章ごとにまとめるから、読者からすると、まるで著者の意見のように感じとられます。僕の解釈で、著者の印象が悪くなりそうなので、このブログ全体書き直すことにしますね。(なのでコメントも削除させてもらいました。ごめんなさい)

今日のコメントは非常に嬉しかったです。僕も勉強になりました。これからも、コメント期待しています。メールアドレスを自己紹介に載せています。意見・質問があれば、どんどん送ってきてください。

『事例で学ぶ情報セキュリティ』

情報セキュリティとはよく聞く言葉だが、なかなかぴんとくる人は少ないではなかろうか。
何回も被害にあってるっていう強者はなかなかいません。僕も、まだセキュリティに関して実際に被害を被って困ったという経験がないので、どのような被害例があるのか知りたくなりました。



本書では、事例を踏まえて、どのようなセキュリティ対策をすれば良いのかが分かりやすくかかれています。分量も少ないので、セキュリティ初心者の方にお薦めです。

組織に属していると、自分一人が被害にあうと、全体に迷惑がかかります。ただでさえ、社会は情報漏洩に厳しいです。大手企業が、個人情報を少しでも漏洩させると、新聞の一面を飾ることになります。一人一人がセキュリティを意識すること、会社でセキュリティを万全にしておくこと、このことが大事なのだと思います。

日本では、セキュリティやネットに関する法律が完璧に配備されているとは言いがたいです。ハッカーやウイルスなどの加害者を特定するのは困難です。それゆえ、被害者であるはずの企業が、取引先の会社に責められたり、社会の信頼を失う。今は、そんな怖い世の中なのです。法配備を訴えるより、一刻も早くセキュリティ対策を施すことが必要になってきます。

セキュリティ、もっと勉強しよう、そう思いました。
この本を簡単に以下にまとめてみました。


2011年1月19日水曜日

『いちばんやさしいソフトウェアの本』

ソフトウェア開発に携わる全ての人必見の本です。しかし、あくまで、初心者向け。この業界に就職が決まった人がまず読むべき本だと思います。ソフトウェア開発の流れ・品質の重要性といったことをざっくり学ぶことができます。
薄いわり(2時間で読める)に内容は濃かったです。お薦めの一冊です。

2011年1月18日火曜日

『エレガントな問題解決』

とても面白そうな本があったので思わず買いました。
『エレガントな問題解決』です。



ひそかな数学ブームの中、数学雑誌『数学セミナー』を買いに書店によるのだが、面白そうな題名にひかれ手を伸ばしました。
迷うことなく買い、今読んでいるところです。

面白そうな問題があったので載せます。

2011年1月16日日曜日

韓国人と友達になる(グローバリズム)

{diary}
今日、山本とクラブに行ってきました。(山本:大学の友達。タイで、童貞を捧げたとも噂されるイケメン)
あくまで、踊りたいからです。僕は、ちゃらくありません。踊りたいだけです。
そのクラブで、可愛い子いるなーと思って話しかけると”No Japanese!”。その子は韓国人でした。
前回の経験(シルビア事件)があったのが大きく、ひるむことなく、英語で話しかけてみました。
英語は苦手なのですが、意外に伝わるものです。
その子は、友達と二人で日本に旅行に来てて、たまたまクラブに来てたそうです。
23歳で、英語がペラペラ話せて、むしろこちらを気遣ってゆっくり話してくれました。
クラブを出てから日本名物?うどんを食べに行きました。

その子に言われたこと
・ほとんどの日本人は英語を話せないのですが、授業で英語をしないのですか?
・韓国では、生まれたとき1歳です。(日本では0歳から数える)

とくに最初の言葉はずっしりきました。
韓国に限らず、どの国でも英語は授業で学んでいて話すことができます。
普段から使っているのか尋ねても、こういう場(旅行)でしか英語を使ったことがない、と言っていました。
それにも関わらず、ぺらぺら話せています。(僕基準ですが・・・)

確かに日本人は英語が苦手というか、一生使わない人がほとんどなのではないでしょうか。
授業で英語は取り入れているが、実際に使うことがない。むしろ使うことをおそれているようです。

考えてみました。
日本人は、とくに英語を使わなくても生活に支障がないから、だという結論にいたりました。

ぼくは、アメリカの人に恋をしてから、英語を話せるように、日々勉強しています。
それまでは、英語が話せないからと言って困る場面など一切無かったです。
なので、英語を必死に学ぶ意義が掴めなかった。だから勉強しないという考えでした。
つまり、英語を話す必要性が迫られないから、英語を使わない・勉強しない、だったのです。

しかし、こうして同じアジアの人同士でも英語の方が会話がスムーズに進む。
間違いなく英語は世界の公用語なんだと実感しました。
英語を話せるようになることで、世界が広がるんだと実感できた今日一日でした。

僕はこれからも英語をペラペラ話せるように勉強します。
またクラブ行きます。お金かかるから、そろそろ、外国人の多いバーに切り替える予定。

2011年1月15日土曜日

『インターネット・セキュリティとは何か』① 板倉正俊著

『インターネット・セキュリティとは何か』板倉正俊著


ぼくのまわりでちらほら聞こえてくること・・・量子コンピュータの出現やリーマン予想の証明により、今のセキュリティのシステムだと危険なのではないか。確かに、現代のセキュリティは、とても大きな数の素因数分解やら離散対数問題の解法といったコンピュータにとって困難(かなり時間がかかる)という前提で、暗号化してセキュリティの武器として利用しています。なので、技術や学術が進歩し、コンピュータであっという間に計算できるようになれば、クレジットカードやその他もろもろの暗号はすぐに解読され、安心して生活することすらできなくなるでしょう。技術や学術の進歩は時として、私たちの生活システムの基盤を崩す可能性があるのも否めません。
もしかしたら、近い将来、別のシステムに変える必要が迫られるかもしれません。というか10年以内には、確実に別のシステムに変わると個人的に思っています。なぜなら、技術と学術はものすごい勢いで成長しているからです。

とはいえど、過ぎ去っていく今のセキュリティシステムだから学ぶ必要はない、そんなわけはありません。ということで、この本読んでみました。
セキュリティ関連の本は、昔少し読んだけどもさっぱり理解できなかった思い出があります。知らない用語の羅列・様々な知識(数学・ネットワーク・ハードウェア等)を前提とした説明に投げ出しました。なので簡単そうな本を選んでみました。実際、とても読みやすかったです。おすすめの一冊。



第1章 インターネット・セキュリティの考え方

セキュリティの本質
インターネットセキュリティにおいては、完璧を求めては、お金がいくらあっても足りません。また、そこまで手間をかけていられません。そうして点を勘案して、「何を守らなければならないのか」を考えると効率的だということに気付きます。
つまり、インターネットセキュリティの一つの基本として、守るべきものをよく考えた上でセキュリティ対応の検討に着手するということが挙げられます。
といっても、何が重要で何を守るべきか、ということはなかなかピンとこないと思います。そういうときは、自らが構築したサイトの仕組みや取り扱うデータの種類を正確に洗い出し、それらをインターネットの特性に重ね合わせてみる作業が必要です。
そうして、守るべきものを特定した後にセキュリティを施すのです。


インターネット・セキュリティという分野では一般人には慣れない語句ばかりが登場します。
ですので、ここでは、語句の定義と、その由来・課題・具体例を添えて紹介することにします。


インターネット上の脅威
インターネットセキュリティを達成するということは、以下に挙げる悪党たちから、自分あるいは自社のwebサイトを守り抜くことになります。

インターネット上の脅威について、語句の定義をします。
定義(ハッカー)
かつては純粋にコンピュータ技術に魅せられた、高度な知識を身につけているコンピュータ・マニアを意味してた。
現代では、ネットワークに奥深く入り込み悪さをするネットワーク犯罪者のことを指すことが多い。

由来:
米国MIT(マサチューセッツ工科大学)では、正規のプログラムをチューニングするプログラムのことをハック(hacks)と呼び、「ハッカー」はこうした素晴らしいプログラム技術を持つ尊敬するべき人々への敬称でした。

定義(クラッカー)
人のシステムに入り込んで不正を行う人のことを指す。

具体例:
商用のソフトウェアに対し、リバースエンジニアリングを行い、シリアルナンバーを勝手に偽造したり、不正使用排除機能自体を取り去ったりして無料でソフトを使えるようにしてしまう。

定義(ネット詐欺師)
インターネットの世界で、人を欺罔して錯誤に陥れ、財産を騙取したり瑕疵ある意思表示を行わせる人を指す。

課題:
クレジットカードの盗難などあるが、インターネット関連の法律が未整備な状況であるため、物理的な世界に比べて、被害者救済や犯人検挙が難しい。

定義(産業スパイ)
企業の機密情報を違法に収集・地用することによって、利益を得ようとする犯罪者。

課題:
1999年にフォーチュン1000社を対象として、機密情報を盗まれたことによるアメリカ企業の損失規模は450億ドル以上にのぼる。それにも関わらず、表面化されないのは、被害に遭った事実を隠蔽したがる傾向にあるからです。そのことが、産業スパイがますます増加する原因にもなっています。

定義(マフィア)
組織的な犯罪を実行する人々のことを指す。

具体例:
ロシア・マフィアによる米Citibank資金横領事件。このマフィアは、Citibankから1040万米ドルを世界中の銀行口座に分散移動させたという事件のことです。

定義(内部犯罪者)
内部犯罪とは、社内・企業内の事情に精通する内部者が悪事を働くこと。その人を指す。

具体例:
FBIとCSIの共同捜査によると、ネット犯罪・不法行為の55%が内部犯罪者だという。

定義(サイバー・ストーカー)
物理的な世界でいわゆる「ストーカー」がやっているのと同じことをネット上で行う人を指す。

原因:
「お互いの姿が見えない」がサイバーストーカーを増加させる可能性がある。

定義(コンピュータ・ウイルス)
人のパソコンに侵入すると同時に悪事をするように作られた小さなプログラムを指す。

感染経路:
主に電子メールからといわれている。外部のプログラムを受け入れる可能性が一番高いのがメールだから。




被害のかたち
インターネットの被害の種類は、以下の9つで大抵のことはカバーされます。ネットの犯罪として問題になっている事件の原因は、以下の9つの類型のどれか一つもしくは複合された状態に分類できます。インターネットセキュリティをまかされた場合は、以下の9つを全てカバーできれば十分です。むしろ、ここで挙げた全てに完璧な対応をすることが、大変なのです。

被害のかたちについて、語句の定義をします。

定義(盗聴)
ネット上で行き来するデータの盗み読みを指す。

盲点:
意外と認識されていませんが、暗号化しないかぎりインターネットで送受信するデータはいとも簡単に盗聴されてしまいます。ほとんど全てのメールは他人に読まれているものだと認識すべきです。

定義(改ざん)
行き交うデータの中身を変えてしまう行為を指します。

盲点:
盗聴と同様この改ざんも、データを暗号化せずに裸のまま送った場合にはいとも簡単にやられてしまいます。

定義(なりすまし)
他人の名やメールアドレスをかたってデータを送信したり、ホームページを開くことを指す。

盲点:
赤の他人である犯罪者だけでなく、なりすましは内部でも起こり得ます。

定義(事後否認)
取引後、自らその取引を否認すること。

対策:
本当にその人が注文したかどうかを証明するのは、大変難しい問題でしたが、今では、「認証」を使ってその問題を解決しています。

定義(データ破壊)
とにかく他人のデータを壊してしまうこと。

具体例:
コンピュータウイルス。

定義(ホームページの乗っ取り)
管理者用のパスワードを盗み出したりして、他人のホームページに不当なアクセスをすること

具体例:
気象庁のホームページが乗っ取られ、天気情報の変わりに卑猥な画像が掲載されたことがあります。

定義(不正アクセス)
不正アクセスは実際の権限者ではないのにwebサイトに入ってくることを指す。

具体例:
証券会社のサイトで「会費を支払っていただいている会員に限っては、分析情報まで閲覧可能」というサイトに、勝手にパスワードを盗んで、会員専用ページに侵入すること。

定義(スパムメール)
欲しいと思っていない人たちに宛ててメールを発信することを指す。

具体例:
自動発信機能を利用して数百万通といったサイトの処理能力の限界を超えるようなものすごい通数のメールを企業の取引サイトへ送り付け、サイト全体をダウンさせ、営業妨害を行うという事例もアメリカで起きています。
一時期はやった「不幸の手紙(1時間以内に10人以上に送りなさい)」といったチェーンメールもスパムメールの一種。

定義(サイバーテロ)
物理的な世界でのテロをインターネットを用いて実現させることを指す。

具体例:
・強力なコンピュータウイルスの短期間での広範は散布
・インターネット網の基幹部分のハッキングやクラッキング
・公安や国防関連のインターネット施設への不正侵入や破壊行為





インターネット・セキュリティの実現
セキュリティ技術とは、その名の通り、技術によってセキュリティを実現することをいいます。インターネットの世界の特殊性を反映して、インターネット・セキュリティの技術には結構特殊なものがあります。
以下、そのような技術を紹介していきます。

定義(監視)
ネットワーク上をどういった信号が行き交うのかをモニタリングすること。

具体例:
・ソフトウェアでの監視
        「危なさそうなパターン」のアタックを発見する、対応は限定的。
・人間による監視(専用のソフトウェアは必要だが)
        熟練したエンジニアになると、行き交う情報を大局的に分析し、経験に基づき危険を察知することができる。

欠点:
どちらにせよ、Webサイトは24時間運用が当たり前で、人員を雇ったり、ホスティングサービスにそのようなオプションをつけるとなると、費用はそうとう高いものになるという覚悟は必要。


定義(ログ取得)
ログ取得とは、自分のサイトに出入りした交信の履歴を記録しておくこと。

具体例:
侵入経路や操作の履歴が記録されるため、それを基に不正アクセス者をつきとめることができます。さらに、そのような悪者に対しての、威嚇にもなります。

欠点:
行き交う情報を捉えて後で解析可能な状態にしてディスクに書き込むために
・高いCPU性能が必要
・膨大なディスクの容量も必要
大抵は、どのレベルまでログを取るのかを予め決めておき、そのレベルにあわせてソフトウェアの設定をすることになります。


定義(暗号化)
暗号化は、「鍵」と呼ばれる暗号化のためのタネの数字と、「暗号アルゴリズム」(暗号化ロジック)と呼ばれる計算式を用いて、送信するデータをまったく異なる別のデータに変換すること。

具体例:
・電子メールで目にする「S/MIME」や「SSL」
・ブラウザの「HTTPS」

例題:「公開鍵暗方式」
公開鍵暗号方式とは、暗号化と複合化で鍵が違うということ。
例えば、家のドアの鍵について、「ドアを開ける専用の鍵」と「ドアを閉める専用の鍵」を作るのと原理は一緒です。自分が「ドアを閉める専用の鍵」を持っていて、弟が唯一その「ドアを開ける専用の鍵」を持っていたとします。私は、「ドアを閉める専用の鍵」家を閉じて、数時間後、ドアが空いていることを確認しました。それは、絶対弟の行為だと分かるわけです。
このような原理を数学的技術を使ってコンピュータに実現させたのが公開鍵暗号方式です。


定義(認証)
認証とは、インターネット上で出会った相手が誰かを判別する技術のこと。

具体例:
インターネット上で相手の存在や、身元を確認できる技術が必要となりますが、これが「認証技術」と呼ばれるものです。ただ、認証は画一的な技術ではなく、以下のようにいくつかのレベルに分類されます。
・実在確認(相手が本当にいるかどうかを確認する技術)
・本人確認(交信してきた相手の身元を確認する技術)
・権限確認(交信してきた相手が、どの程度の権限を持っているかを確認する技術)

また、その他にも、送られてきたメッセージが完全かどうかを確認する「メッセージ認証」などもあります。


定義(アクセス・コントロール)
アクセス・コントロールとは、自分のサイトにアクセスしてくる人たちに、それぞれ別々の権限を与えること。
必要な人に、必要なところにだけアクセスさせるということ。

具体例:
・会員制のサイト
        会費を払っている人にだけ重要なデータの置かれている領域に入ってもらう仕組みなど


定義(ウイルス・チェック)
ウイルス・チェックとは、自分のところのコンピュータが前述のウイルスに感染していないかを検査すること。

例題:(新種のウイルス対策)
新種のウイルスは毎月かなりの数発見されています。当然発見される以前に開発されたウイルス・チェックソフトでは、新しいウイルスは発見できないため、ウイルス・チェック・ソフトは頻繁にアップロードしなければなりません。

例題:(インターネットの場合)
インターネットの場合、「水際」でウイルスを阻止するのが肝要なので、インターネット用に使用しているサーバーにウイルスチェックソフトをインストールしたり、外部から取り込まれるメールやデータを徹底的にチェックする必要があります。


定義(サイバー・パトロール)
警視庁ハイテク犯罪対策総合センターの捜査員が行っているもの。

具体例:
違法サイトなどを縦覧するというもの

2011年1月14日金曜日

『情報を力に未来価値を創る』 朝純裕著

本書は、情報学分野における我が国唯一の総合研究所である国立情報研究所で独創的な研究に取り組む研究者たちの、日常生活から研究内容にいたるまでを取材したものです。ユニークな研究内容・研究者としての誇り・意外な一面などを垣間見ることのできる本です。



僕はこの本を読むまで、情報学を取り扱う国立研究所があるなんて知りませんでした。この研究所は、東京・神田にほど近い高層ビルで、創立されてまだ10年しか経っていない新しい研究所で、伸び盛りの研究者を積極的に採用して、国立からは想像もつかないようなユニークな研究をしています。4つの研究系、7つの研究センター等に、80名の精鋭研究者、多数の客員教授を擁し、IT関連の研究を中心に、幅広い分野について「情報」という視点から研究をしています。

本書を読んで、思ったこと。日本は、インターネットや携帯といった端末が生活に当たり前のように浸透しており、世界でも情報・ネットワークのインフラが最も進んだ国です。それにも関わらず、ソフトウェア・ハードウェアの分野で遅れをとっています。このような情報を取り扱った学問がかなり低い水準であるかのように思えます。人材不足や、そもそも情報系の分野に憧れる人が少ないという背景もあります。

しかし、日本から生まれる研究者は素晴らしい知能と想像力をもった人ばかりだということが分かりました。今でこそ、そのような優れた人材はGoogleやMicrosoftなどといった欧米の企業に抜き取られてしまいますが、その分野で第一線として活躍している日本人がたくさんいるということを忘れないでください。

日本の近代の物理学・化学の発展は目を見張るものがあります。ノーベル賞には、毎年のごとく日本人が選ばれています。日本には、様々な分野でトップを取るだけの才能が数多く存在するのです。情報学もその一つ。本書にもあるように、ここ国立研究所では、情報学を数学や物理といった学問みたいに体系付けようと研究に没頭している研究者や、世界でも最先端の技術を集結して量子コンピュータを開発を進めている研究者など、世界トップクラスの研究者が集結しています。この人たちは、決して自分たちの研究だけに没頭するのではなく、持っている知識を後継者に伝授すること・指導することにも積極的です。

決して2位に甘んじてはダメなのです。この分野では、トップを取れるだけの実力のある日本が、自ら負けフラグをたてて何になるのでしょうか。

色々話は脱線してしまいましたが、とても面白い本でした。

2011年1月10日月曜日

今日は成人式やね!

{diary}
成人式を迎えたみなさん、おめでとう。
今日は六本木にいたんだけど、着物を着た女の子がいっぱいでした。
ぼくの心もいっぱいです。幸せありがと。

僕の弟も成人式に参加してます。ずっと会ってないけど写真見る限り元気そうやな。
ほい、弟。目立ち過ぎや!あいかわらずやんちゃやな。
成人式って普通、スーツちゃうか?広島だけ?




懐かしいな。成人式楽しかったな。
あれから2年経つのかー。しみじみ・・・



この2年間は何があっただろう。

僕は人生の中でも最も濃い2年間だったと思っています。
本気で、将来の夢、よりも日本の未来を考え、自分がどの道を歩んでいくべきかを、真剣に考えました(今もですが)。
もう未成年ではないんだと自分に言い聞かせ、積極的に行動するようになりました。様々な人と出会い、学び、分かち合う。これからもそれはやめないつもりです。

不景気だと噂される日本ですが、ちょっとしたきっかけで大きく変わると僕は思っています。
そして、そのきっかけを作るのが、僕らの世代だろうな、とうすうす感じています。

僕たちと共にこれから日本を変えていく今日成人を迎えた仲間たちに乾杯。

『システムはなぜダウンするのか』① 大和田尚孝著

とても読みやすかったです。
私たちは、ネットがつながらない・電車が止まった・ATMでお金を降ろそうとしたらエラーが発生した、といった問題が起きても気にとめることはありません。「あ、そうなんだ。不便だなー」と思うぐらいでしょう。しかし、実は様々な事情が何重にも重なりあって引き起こされるのであって、開発者の人たちは毎日頭をかかえているのです。こうした裏事情?に触れることができるとても興味深い一冊だと思います。



まとまってないから、とりあえず1、2章だけ。


1章 システムが止まった・・・ 
                ーダウンとは何か



停止=ダウンは誤解
本書では、以下の定義を与えることにします。
定義1.1
ダウンとは、システムが本体の役割を果たせていない状態のこと

例題:
OSやミドルウェアは問題なく動作しているが、一部のアプリケーションの機能だけが止まったときもダウンとみなします。利用者から見れば、「システムの一部の機能が使えない」という状態だからです。

例題:
点検のためにあらかじめ決めた計画に従ってシステムを止めることはダウンとは言いません。
「システムが本体の役割を果たせていない」というわけではないからです。

例題:
システムが不意に停止しても、待機系のシステムがすぐに起動して処理を引き継ぐなど、システムが途切れなく動き続けている場合は、ダウンとは言いません。ダウンを回避できたと言えます。これも定義通り。

なぜダウンするの?
一番の疑問でしょう。理由は突き止めれば、ただのテスト不足です。
この条件でダウンするということを開発時に分かっていれば、少なくともその条件ではダウンしないように設計し直すことができるからです。
しかし、テストをする人を責めるのは酷です。
なぜなら、テストを完全にこなすのは現実に不可能だからです。
前提条件の組み合わせによって、テストケースは膨大な数に膨れあがるからです。

ダウンは原因から4種類に分類できる
実は、ダウンの原因は4種類に分類することができます。以下のグループに分類できます。
①ソフトウェアの不具合
②性能・容量不足
③設定・操作ミス
④不慮の事故

ダウンが起きたとき、ダウンの発生状況等を考慮して上の4つから原因を突き止めることになります。


2章 きちんとテストしたはずなのに・・・
                ーアプリケーション・ソフトの不具合



バグとダウンの関連性
バグとは、アプリケーションソフトの不具合です。
バグはテストで見つかれば「不良」として処理されます。表面化せずに本番稼働をむかえると「バグ」のまま残ります。それが本番稼働中に表面化すると「不具合」が発生し、システムがダウンします。

しかしながら、以下の定義を与えないわけにはいきません。
定義2.1
どんなにテストを繰り返してもバグは残る

例題:
メガバンクの合併に関わる大規模なシステムの総合テストで、考えうる100万を超えるテストケースを最大6000人がかりで、10ヶ月をテストだけに費やしました。
それでも、バグはゼロになりません。複数のプログラムからなるソフトウェアにおける処理ルートと入力データお組み合わせは、100万をはるかに超えるからです。

重要なことは、「あれだけテストをしたのだから、バグは残っていないだろう」と考えるのではなく、時間の許すかぎりのテストをするのと並行して、バグが表面化したときの対処方法をあらかじめ講じておくことです。


盲点:日付問題
簡単な紹介で終わりにさせてもらいます。
面白い内容なので、是非調べてみてください。

・うるう年
うるう年の正確な条件を知っていますか?ここでは取り上げませんが、プログラムによっては、正しい動作をしないこともあるみたいです。有名な”2100年問題”もこれにあたります。なぜなら、2100年はうるう年ではないですから。

・2038年問題
これはUNIX系のOSで、経過秒数を格納する領域の桁数が足りなくなるのではないか、という点です。実際に2004年日本で、その問題が表面化されATMの機能が一部時間切れになりました。

・2007年問題
面白かったです。終戦直後の1945年から数年間に生まれた「団塊の世代」が定年を迎え大量に退職することにより、ベテラン技術者のノウハウが消失し、何十年も稼働を続けているシステムに以上が発生したときの原因の究明などができなくなる危険を指摘して言葉です。意外に笑い話ではないかもしれませんね。

2011年1月9日日曜日

よし、Androidやろう!

これからはAndroidみたいだね。
Androidのアプリケーション開発やってみよっと。
プログラミング言語がJavaだからとっつきやすいかも。
iphoneのアプリ作りは先延ばしということで。

仮想Androidで動かすのも良いんだけど実際に使ってみたい!
Androidの携帯使って、必要なもの開発したい!
買おうかな・・・いや、待ちか・・・

僕のまわりでは批判の声しか聞こえてこないが・・・まだ使いづらいのかな?

僕の愛用携帯は、3年目に突入です。
手放すには、心が痛むので、様子見てみることに。

Processing を Eclipse で動かす 〜設定編〜

Processingは便利なので、Eclipse上で動かしたいと思っている人も多いでしょう。
それでは、Eclipse上で動かすための設定を紹介します。

Mac OS10.6、Eclipse galileo での設定なので、それ以外で上手くいかないようであれば報告してください。

新規プロジェクト”Proseccing”を作成
右クリック>Import を選択




General>File System を選択
”Next”をクリック



以下の画面で、
/Applications/Processing.app/Contents/java
を入力すると、選択画面が現れるので、core.jar を選択します。
“Finish”をクリックします。



再び、プロジェクト名で、右クリック>propertyを選択します。
JavaBuildPath を選択し、”Add JARs...”をクリック。
以下の画面が現れます。
core.jarを選択して”OK”をクリック。



これで設定は完了です。
以下のようにソースコードを書き込み、実行することで、アプレットが呼び出されます。





上手く設定がいかなければ、報告してください。

Bloggerからfacebookにブログを自動更新


facebookのノートの設定からブログのURLを入力すればブログがインポートされてノートに追加されます。
その後、ブログで作成するたびに、facebookにも自動更新されます。
ここでは、Bloggerで作成したブログをfacebookのノートに追加する設定を紹介します。

まずは自身のブログにRSSフィードを設定する必要があります。
RSSフィードとは何ぞや?という方は以下のURLにて説明があります。
http://www.google.com/support/feedburner/bin/answer.py?answer=79408

下は、Googleアカウントのベージです。
マイサービスのBloggerで作成したブログを、以下にあるFeedBurnerでRSSフィードとして配信できるように設定します。



FeedBurnnerをクリックすると以下の画面が現れます。
“Burn a feed right this instant”の欄に、Bloggerでブログを表示させたときのURLを入力し、”Next”をクリックします。



以下の選択肢からどれかを選びます。どちらを選択しても問題ありません。
“Next”をクリックします。



フィードのタイトルとアドレスを設定します。
良けれは、”Next” をクリックします。



この画面にある”http://feeds.feedburner.com/.....” をクリックすれば、RSSフィードとして配信された自身のブログを見ることができます。
これで良ければ、”Next” をクリックします。



次に、FeedBurner の集計機能の設定オプションが表示されます。
僕の場合は、集計機能をONにしています。
設定がこれで良ければ、”Next”をクリック



次にする作業は、自身のブログの設定画面を開きます。
ここにフィードリダイレクトURLの登録の欄に、RSSフィードで設定されたURLを入力します。
そして保存を押します。



以上で、ブログをRSSフィードとして配信する設定は終わりました。
次に、facebookのノートにブログをインポートする作業をします。

facebookにログインして、検索画面で”notes”を入力します。
自身のノートアプリが開かれます。左下に”インポート設定を編集”があるのでクリックします。
すると、以下の画面が出るので、RSSフィードで設定したURLを入力し、わいせつでないことを証明して、インポートを開始するをクリックします。




これで以下のような画面が出れば成功です。




長ったらしくなったなー。
FeedBurnerが日本語設定されていなかったから困る人がいると思って、ページ全ての画像を貼付けたからです。
ここまで読んでくれた人ありがとう。


2011年4月6日 書き足し
RSS登録のさいに、オプション(itune, iphone)を外すことで自動更新可能になったかたもおられました。

オプションの設定で、うまく自動更新されない場合もあるみたいです。

2011年1月8日土曜日

『Googleの全貌』 日経コンピュータ編


『Googleの全貌』表紙


誰もが一度はGoogleのWebアプリケーションを使ったことがあるではないでしょうか。
僕もGoogle愛好家として、様々なとこで利用しています。
今回はそんなGoogleの全貌?知られざるサービス戦略や技術等をつづった著書を読み進めていきます。

セキュリティテスト

『知識ゼロから学ぶ ソフトウェアテスト』   高橋寿一著

5. 攻撃に耐えうるソフトウェアの構築
        セキュリティテスト

2001年7月、Code Redというワームが世界中のMicrosoft llSサーバを攻撃し、30万台以上がダウンする大事件に発展しました。ソフトウェアのセキュリティ問題は、機能のバグと同じくらいユーザに迷惑をかけ、顧客の財産を侵害するものです。
しかし、残念ながら、現代の開発でセキュリティテスト手法が確立されているとは言いがたいです。
悪意のある攻撃が引き起こす問題を見つけることは、ソフトウェア開発の範疇外であったために、この分野のテスト手法はかなりの遅れを取ったのです。

攻撃手法 バファオーバーフロー
バッファオーバーフローは、現在最も多い攻撃手法といえます。
プログラミングで使われるリターンアドレスをハッカーに取られると、ハッカーは自由にアプリケーションやシステムをコントロールすることができます。
こうした自体を防ぐには、開発者は注意しながらプログラムを書く必要があります。
具体的には、使う関数を気をつけることです。strcpyやsprintfはまず使うべきではありません。

そうした情報はインターネット上に多く記載されているので、開発者が確実にセキュアなコーディングを実行するようにテスト担当者は見張らなければなりません。

攻撃手法 フォーマットバグ
これもバッファオーバーフロー同様スタック情報を取得して書き換えを許すバグです。
printfやsprintfなど書式付き文字列を扱う関数は正しく使わないと、スタック情報を書き換えられることがあります。
テスト開発者は、C言語でprintfを使うと非常に危険だということを認識するべきでしょう。
これらの情報もインターネット上に多く記載されているので、テスト担当者はチェックしておく必要があるでしょう。


セキュリティ機能テスト
プログラミング言語の選択がセキュリティテストに与える影響の大きさについて触れておきましょう。

まず、C/C++を選んだ場合、セキュリティテストチームは絶望的だと言えます。
毎週のようにセキュリティパッチをリリースする必要があります。実際にそんなプロジェクトをたくさん抱えている会社があります。Microsoftです。
優秀な人材が集まっている会社でもこの状況なのです。

Java言語を選ぶと、セキュリティに関するテストタスクは著しく減ります。
十分にCPUのパワーがあり、メモリが必要なだけ使える状態ならば、Javaをプログラミング言語として選ぶのは悪い選択ではありません。

そして、セキュリティ機能テストに関しては、以下の項目を徹底的にテストすることになります。
・コードレビュー
・入力テスト
・モジュール指向のテスト
・静的解析ツール


セキュリティシステムテスト
システムレベルのセキュリティを確保することがシステムセキュリティテストの目標になります。
ここでは、システムレベルで、期待されないデータやプログラムを侵入させないテストを紹介します。

セキュリティシステムテストでは実際の攻撃の種類に合わせてテストを行います。
主な攻撃方法としては次のようなものがあります。
・不正プログラム
・情報漏洩、なりすまし(パスワード)
・クロスサイトスクリプティング
・スパイウェア

具体的なテスト方法としては、上に挙げた攻撃を想定して、アプリケーションが、”解析”・”変更or削除”・”監視” を適切に行えるかをテストする必要があります。


最後に、セキュリティテストに携わる人材を確保することは非常に困難です。
一般にいわれているテスト担当者のスキルセット以外に、暗号化、セキュリティシステム、最低限のアセンブラの知識が必要になります。
セキュリティに興味あるテスト担当者は、目指すのも悪くないかもしれません。

システムテスト

『知識ゼロから学ぶ ソフトウェアテスト』   高橋寿一著  ④システムテスト


4. ソフトウェアの性能をチェックする
~システムテスト~



システムテストおという手法は、どんな状況下であってもソフトウェアが期待された動作をするかをテストする手法です。

“ システムテストの手法というものは存在しないので、テスト担当者は非常に多くの創造性が求められる ”   Edward Kit


構成テスト
「Windowsにはバグが多い」という話をよく聞きます。理由を考えたことがあるでしょうか。
開発されたプログラムは、多くの場合それ単独では動きません。その周辺にある多くのリソースを使って動作することがほとんどです。
つまり、上の答えは、「Windowsにはテストすべきシステム環境が多すぎる」ことにあるのです。
DellやNECのパソコン。CPUも命令セットも違う。無限に存在するビデオカード。開発者は、この全ての環境に合ったソフトウェアを作ることになります。

その様々な条件でプログラムが十分動作するためのテストを「構成テスト」と言います。

構成テストは、以下のような構成でソフトウェアをテストする必要があります。
・異なるOS (Windows, Linux 等)
・異なるメーカのコンピュータ (Dell, HP, IBM 等)
・異なるビデオカード (異なるメーカ, 解像度, ビデオメモリの大小)
・異なるメーカのプリンタ (HP, EPSON, Cannon等)


負荷テスト
短い時間に多量のデータを入力し、出力させ、それに伴う処理を実行させるテストのことです。
負荷テストで注意すべき点は以下の2つです。
・想定される最大サイズのデータが、システム上で既定時間内に問題なく処理されるかどうかをテストする。この場合のシステムとは、ソフトウェア・ネットワーク・データベースシステム等・ソフトウェアおよびそれに付随するものすべてです。
・ユーザーもしくはそのソフトウェアに関する人々が行う、目的を達成するための操作が十分可能である。

負荷テストとして、長時間プログラムを走らせるといった負荷を与えるテストもあります。

最後に、「負荷テストに関してはかならず自動化すべきだ」という意見が多いです。
手動の場合だと、どんな原因によって問題が起きたかが分かりにくく再現性のないバグになることが多いからです。


パフォーマンステスト
パフォーマンステストとは、ソフトウェアを設計もしくは企画する段階で、設定されたソフトウェアの性能が期待された通り出ているかをチャックするためのテストです。

パフォーマンステストを行う際には、以下の流れが推奨されています。
  1. アーキテクチャバリデーション(アーキテクチャ的に十分なパフォーマンスを発揮しているかをチェック)
  2. パフォーマンスベンチマーク(開発されたソフトウェアのテスト)
  3. パフォーマンス回帰テスト(回帰テスト)
  4. パフォーマンスチューニング、アクセプタンステスト(最終製品が要求定義に定められたパフォーマンスを発揮しているかをチェック)
  5. パフォーマンスモニタ(ERPアプリケーションでは、それに近いデータを用意して、パフォーマンスを発揮しているかをチェック)


ユーザビリティテスト
ユーザビリティテストとは、実際にプログラムを使いユーザもしくはそれに近い人に使用してもらい、ユーザインターフェースなどの使い勝手や仕様をチェックしてもらうテストです。

チェックポイントは以下の点です。
・アクセサリビリティ
・効率性
・学習性
・構造の明確さ
・操作性
・ユニバーサルデザインへの配慮

最後に、ユーザビリティテストは、テストチームがするべきでないテストだと著者は思っています。
確かに、テスト担当者がユーザの立場でテストをするのは無理があります。
いくらユーザの立場に立ったといえ、開発者やテスト担当者が一番そのソフトウェア製品を知っている事実に変わりありません。さらに開発に関わる人はコンピュータサイエンスを特別に勉強してきた人々です。

実際にターゲットユーザとなりうる人々を集めたり、第三者機関などを利用してテストすべきなのです。

ブラックボックステスト

『知識ゼロから学ぶ ソフトウェアテスト』   高橋寿一著  
 ブラックボックス




3. エンジニアが最もよく使う手法 ブラックテスト

ブラックボックステストは、プログラムを一種のブラックボックスと見立て、様々な入力を行うことによって、ソースコードを利用せずにテストを行う手法です。ほとんどのソフトウェアのテストがブラックボックステスト手法で行っています。それでは、ブラックボックステストの手法を紹介していきます。


同値分割法


予定の作成を例にとります。月を入力する際には、1~12までの整数を入れる必要があります。ここでは、1~12までの整数が有効同値、0以下の整数&13以上の整数は無効同値になります。その値を実際に入れてソフトウェアが十分対応できるかを確認するテスト手法です。
ここで考えるべきことは、組み合わせです。予定作成で必要なのは月入力だけではありません。日を入力する必要もあります。日も当然のように、0以下の整数&32(または31など)以上の整数は無効同値です。
「月は有効同値にして、日は無効同値に・・・」といったように全てのテストケースを抜き出すと、非常に時間がかかることはお分かりでしょう。ソフトウェアのテスト現場では、ある程度この無効同値のテストを省略する必要が出てきます。もちろん省略されたテストケースでバグが出ることは許されません。
実践的なテストケースを考える必要が出てくるわけです。

境界値分析法
同値分割法と境界値分析法は常にセットで用いられる方法であることを覚えていてください。
これは、その名の通り、境界をテストすることになります。
上の予定作成の例を考えると、テストすべきとこは、無効同値の上限である0と有効同値の下限である1、有効同値の上限である12と無効同値の下限である13をテストします。

*)現場の常識として、ゼロは常に境界値になります。入力値としてゼロが許されている場合は必ずゼロを入力する必要があります。


実践としてまとめます。
データを入力する機能がある場合、かならず『よいデータ』と『悪いデータ』を入力します。
<よいデータ>
・ユーザーがよく使いそうなデータ
・プログラムが許す最小のデータ
・プログラムが許す最大のデータ
・ゼロ(もしくは悪いデータとして)
・5cデータ
<悪いデータ>
・非常に小さなデータ
・非常に大きなデータ
・長いデータ
・無効なデータ


ディシジョンテーブル
ディシジョンテーブルテストも非常に古くから用いられている手法です。ディシジョンテーブルでは、全ての入力の組み合わせを表にし、その入力に対する動作もしくは出力を明記します。表にまとめることで全体のテスト構成を見ることができ、テストケースの抜けを発見しやすくなります。
ただし、多くの項目がある場合だと表を用いることが困難になるので、兼ね合いも考える必要がでてきます。


状態遷移テスト
状態遷移テストとは、「状態」をモデル化してテストを行う手法といえます。
状態遷移には、以下の図のように、大きく分けて状態(state)と遷移(transition)の2つによって表現されます。



ソフトウェアには、ある程度ユーザの操作に制限を加える必要があります。
そうしないと、大量のコードが必要になったり、思わぬとこでバグを生じたりと様々な不具合が発生するからです。
そのために、「状態(state)」という概念が生まれました。

一応の補足として、中には、状態の区別がはっきりしないソフトウェアもあります。
Linuxのコマンドラインインターフェースには、状態遷移テストを仕様する利点がほとんどありません。
なぜなら、いつでも全てのコマンドを受け入れる状態になっているため、状態が1つしかないからです。

さて、状態遷移テストで見るかるバグを紹介します。
・期待していない状態に遷移するバグ
これは、分岐やswitch文が正しく書かれていない場合に起こるバグです。
・遷移自体がない場合
ある状態からある状態に遷移できないバグを発見することができます。

状態遷移テストの問題点を挙げます。
状態遷移テストの場合はいくつか問題点が指摘されています。状態数が増えると、モデルが複雑化します。モデリングに時間がかかりすぎて実際にテストする時間が減ることさえあります。
本格的にソフトウェアテストが必要とされるアプリケーションでは、複雑でモデリングが難しいので、ツールを使うのは必須でしょう。

ランダムテスト
ランダムテストとは、いきあたりばったり、何も考えもなしに入力や操作を行う手法です。
問題点は、山のようにあります。
例えば、テスト手法にのっとったやり方で見つからないバグはありませんが、ランダムテストで見つからないバグは多岐にわたります。

とはいえ、このテスト手法は荒っぽいやり方ながら結構なバグが見つかってしまうところが問題です。全くテストをしていないソフトウェアの倍胃、全体の10%はランダムテストで見つかるとも言われています。

しかし、正当なテスト手法でないため、見つかったバグの何倍ものバグがプログラムの中に潜んでいることを認識すべきです。そして、そのバグは、ランダムテストでは見つからないことも認識すべきです。


*)ランダムテストが有効な場合だってあります。
たくさんの数をランダムに入力するプログラムを作成して、自動化しておくと、威力を発揮することがあります。
例えば、日本語入力テストなどでは、ご存知のように漢字は数万語もあり、その境界値を見つけるのは、かなり面倒です。そんなときは自動化ツールを使ってランダムに日本語を生成し一昼夜走らせておくのも1つの手です。

2011年1月7日金曜日

ホワイトボックステスト

『知識ゼロから学ぶ ソフトウェアテスト』   高橋寿一著  
ホワイトボックス

2. ソフトウェアテストの基本 ~ホワイトボックス~

ホワイトボックステスト手法を説明します。この手法はすべてのソフトウェアテストの基盤となるもので、盛んに研究された手法です。実務においてかならずしも有用でよく使われるテスト手法とは限りませんが、知っておく必要はあります。

一言で表すと、「プログラムの内部構造を徹底的に分析する」ということです。

何が問題なのか?
まだ、プログラムのファイルサイズが数キロバイトといった一昔前には、内部構造を徹底的に分析することができました。しかし、現代のソフトウェアは巨大で、ファイルサイズが数百メガのソフトウェアを扱うことが多々あります。そんなときに、ホワイトボックステストだのと言っている余裕はありません。

しかし、ホワイトボックステストを使用することで、ソフトウェアの品質が改善されることが証明されているのは確かです。大切なのは、テストをはじめる前にテスト手法を十分吟味・選択することでしょう。

では、具体的なテスト手法を紹介していきます。

制御パステスト法
制御パステスト法は、プログラムがどのような振る舞いをして、どうのように制御され実行されていくかをテストします。
主に、カバレッジ率(coverage rate) の値をとるために使われます。

if文などの分岐条件に対して、判定条件となる値をいれ、結果をチェックするテストです。
ステートメントカバレッジや、より厳密な判定条件でチェックするブランチカバレッジなどがあります。

さて、カバレッジテストで全てのバグを見つけることが理論的に不可能であることを先に述べておきます。
100%カバレッジを達成したからといって、ソフトウェアの品質がよいとはいえません。
なぜなら、カバレッジテストでは、以下に示すようなバグが見つけられないからです。
・プログラムのループに関するバグ
・仕様自体が間違っていたり、機能が備わっていないバグ
・データに関するバグ
・タイミングに関するバグ

まとめると、カバレッジテストはあくまで、数あるテストの一部です。他のテストの兼ね合いや予算等を考慮に入れて、製品によって品質の目標を妥当に設定することが必要です。

「バグ」とは何かを考える

『知識ゼロから学ぶ ソフトウェアテスト』高橋寿一著  
「バグ」とは何かを考える
    1. テストをはじめる前に (「バグ」とは何かを考える)

    まったくバグのないソフトウェアは存在するのでしょうか?
    答えはNo。完全なテスト手法が存在しないからです。

    先人の言葉より
    “バグを全部見つけるのは無理だと心得よ” Cem Kaner
    “エラーは見つからないだろうという仮定のもとにテストの計画を立ててはいけない” G.J.Mayers
    “プログラム開発グループは、自分たちのプログラムをテストしてはいけない” G.J.Mayers

    もちろん時代の背景とともにテストの意義・方法は変わってくるものなので、一概には言い切れませんが、開発者自身でのテストだけでは無理があるみたいです。
    何となくバグというものは、プログラムの中に平均的に散らばっているものだと思いがちですが、ある例では、80%のバグが20%のコードに含まれているという報告があります。以下の理由が考えられます。
    「プログラムは、単純な計算部分から複雑なアルゴリズムを伴った部分まで多種多様な要素から構成されている。」
    つまり、そこを徹底的にテストをする必要があります。

    まとめると、ソフトウェアで重要なのは、どの部分にバグが出やすいのか、そこにどのようなテスト手法を適用すれば十分な品質が得られるかを知ることです。

    とても興味深い診断テストがあったので紹介します。
    <問題>
    「このプログラムでは、ユーザが3つの数字を入力します。この3つの値は、それぞれ三角形の3辺の長さを表すものとします。プログラムは、三角形が不等辺三角形・二等辺三角形・正三角形のうちのどれであるかを決めるメッセージを印字します。このプログラムをテストするのに十分と思われる一連のテストケースを書いてください。」

    このプログラムを書くことは何の問題もないでしょう。
    しかし十分なテストケースを書くとなると非常に難しいみたいです。

    <答え>
    ・有効な不等辺三角形をテストする
    ・有効な正三角形をテストする
    ・有効な二等辺三角形をテストする
    ・有効な二等辺三角形で3種類の辺の組み合わせをテストする
    ・1つの辺の長さがゼロの値をテストする
    ・1つの辺の長さが負の値をテストする
    ・2辺の和がもう1辺と同じである (例:1, 2, 3)
    ・2辺の和がもう1辺より小さい (例:1, 2, 4)
    ・全ての辺の長さがゼロ
    ・入力の個数が間違っている
    ・それぞれのテストケースに対しその出力が正しいかをチェックする

    ソフトウェアテストという作業はプログラミングに劣らず難しい作業であり、かつ創造的な仕事であることが分かるでしょう。
    ソフトウェアのテストを不完全な形で実施させ、それを製品として出荷するということは、その製品を使う顧客にも迷惑がかかります。また、企業の良識を問われかねない自体を招く可能性もあります。

    2011年1月5日水曜日

    Web上にアップロード

    そうか、Web上にapplicationファイルをアップロードすれば昨日の問題は解決だ。

    googleでできるかなー。

    Google docs を使って.appファイルのアップロードをしてみた。
    読み込めない・・・
    ”Classic 環境ではないから開くことができません”
    よく分からない。

    .htmlファイルをアップロードしてみた。
    エラーが起きて開けない。
    よく分からない。

    んー今日は早く寝たいから諦めよう。

    忘れないうちにメモ。
    google apps engine でできるのかなー?(使い方分からんけども)
    もういっそのことJava使ってWebベージを作るのもあり。
    Spring Frameworkを勉強する良い機会だ。

    となると、週末までおあずけかなー。その間もう1つ、2つApplication作ろう。
    明日、内蔵カメラを使って、gameアプリ作ることにします。

    おやすみ。