‫このビデオと次の数回のビデオで､ デバッグとVisual Studioの使い方を紹介したいと思います｡
‫そして､ デバッグの考え方は､ バグをなくすことです｡
‫バグを発見するのは簡単な場合もあります｡
‫プログラムを実行してクラッシュし始めたら､
‫よし､ バグがあるんだとわかりますが､ 論理的なバグである場合もあります｡
‫そして､ Visual Studioでのデバッグの機能をお見せするために､ ここに小さなプログラムを作りました｡
‫そのために使うちょっとしたツールを用意したのですが､ そのツールはパーティーフレンドの招待ツールにする予定です｡
‫娘が3歳になったばかりで､ ちょっとしたパーティーをしました｡ もちろん､
‫幼稚園全員を招待したいところですが､ 3人の友達しか招待できないようにしました｡
‫そこで､ 今度はどの友人を招待するかを決めなければならない｡
‫そしてもちろん､ 彼女がもっと好きな友達もいるので､ 簡単なものでしたが､
‫結局は彼女の好きな友達が誰なのかわかりません｡
‫だから､ もし私が彼女を招待する人を決めなければならないとしたら､ 私は小さなプログラムを書いて､
‫短い名前と全体までの人はOKということにします｡
‫そう､ この場合は3人までがパーティーに招待されるんだ｡
‫それで､ 彼女は私たちの友達を全員指名したんです｡
‫そして､ よし､ 名前の短い人､ 3人が招待されるんだ､ と言うところです｡
‫そして､ それがここでのツールなのです｡
‫私が書いたこと､ まさにその通りです｡
‫フランク､ ジョー､ ミシェル､ アンディ､ マリア､ カルロス､ アンジェリーナの6人です｡
‫そして､ このget party friendsメソッドには､ リストと､ そのリストから選択すべき人数が必要です｡
‫そして､ for eachループで､ その人たちや子供たちの名前をコンソールに書き出すだけです｡
‫わかりました｡
‫あまり派手なものはありません｡
‫そして､ 誰が招待され､ 誰が招待されないかを決めるアルゴリズムがこの方式で､ ここではパーティーの友達を招待したり､ パーティーの友達が誰であるかを調べたりしています｡
‫もちろん､ チェックできる人のリストが必要です｡
‫そして､ 最短の名前をチェックし､ 常に比較しています｡
‫だから､ リストに載っている人たちを全部調べて､ いつも比較しているんです｡
‫名前は特定の長さより短くなるのか､ 他の人のものに入るのか？
‫だから結局､ 一番短い名前を出すだけなんです｡
‫しかし､ ここで私は内部的にバグが発生しています｡
‫わかりました｡
‫そこで､ その長さをgreater than shortest nameで比較してみることにします｡
‫だから今回は､ 短い名前を全部取りたいのに､ 長い名前を全部取ってしまうんです｡
‫これは意図的にバグを実装しているだけで､ 今となっては気づかないかもしれないことだからです｡
‫もちろん､ 論理的なバグであり､ コードを実行すれば､ そのまま実行されます｡
‫バグもエラーもないでしょう｡
‫クラッシュはしませんが､ 間違った名前が表示されるだけです｡
‫でも､ 今回の場合は､ ミシェル､ アンジェリーナ､ カルロスは長い名前だし､ リストも知っているので､
‫簡単です｡
‫だから､ ジョーやアンネ､ マリア､ そしてフランクがいたことも知っている｡
‫もっと短い名前もあるのですが､ 最短にしたいのになぜかリストには入っていませんでした｡
‫そうですね｡
‫人､ または名前の短い人｡
‫背が低いとか高いとか､ そんなことはここでは関係ない｡
‫重要なのは､ ここは開発者としてリストが見えるので､ 簡単だということです｡
‫しかし､ どこかからリストを入手したらどうだろう？
‫そこで､ 何千人もの名前を持つ巨大なXMLファイルからリストを取得したり､ インターネットからリストを取得して､
‫実際にソフトウェアで処理される前にリストを見ることができないとします｡
‫しかし､ このソフトウェアには小さなバグがあり､ get part
‫differentメソッドはそのバグを解消するためのものです｡
‫最も短い名前だけを返します｡
‫そして､ このget party friends pluralは､ ある金額までの短い名前の人たちのリストを返すだけで､
‫ここでパスを支払うことができます｡
‫だから､ 3という数字をパスして､ ちょうど3人の仲間ができることになる｡
‫4という数字を抜けば､ 4人の仲間ができる､ といった具合に｡
‫わかりました｡
‫今､ 私たちのソフトがやっているのは､ 基本的にそういうことなんですね｡
‫フランクとの商業用オリジナルカードがあるので､ この空のパーティーの友人リストがあるだけです｡
‫そして､ このパーティーフレンドリストが､ 渡された数より少ない数である限り､ 我々は｡
‫次のパーティーフレンドをチェックするだけです｡
‫そして､ それをパーティーの友達リストに追加します｡
‫そして､ 渡されたリストから削除するのです｡
‫これは非常に危険なことですが､ 私たちは初心者の開発者なので､
‫ちょっとしたトリックを使って､ 変数やリスト内の要素を削除してしまいます｡
‫そして､ それをプログラム的に行うのです｡
‫そして､ 段階を追って短いリストを作成し､ リストにない人たちだけを比較するようにします｡
‫わかりました｡
‫だから､ このリストでやっていることです｡
‫取り除く｡
‫それがクリーンなプログラミングでないとしても､ その修正方法も後で見てみましょう｡
‫しかし､ 今のところ､ ソフトがあり､ 動作しています｡
‫全く問題なく使えます｡
‫しかし､ このバグの修正方法をどう考えるか？
‫なぜなら､ バグがあることがわかったので､ もちろん､ コードを調べられるからです｡
‫しかも今回は､ 43行のコードだけなので簡単です｡
‫しかし､ それが何千行ものコードで､ 多くの異なるファイルがあり､ 多くの異なる人々が作業をしていて､ 何がバグなのかわからないと想像してください｡
‫さて､ Visual Studioのデバッグ機能を使うには､ ブレークポイントを追加すればいいのです｡
‫では､ まずブレークポイントを設定しましょう｡
‫これがあるんです｡
‫左側にある小さな赤い点｡
‫一般的には､ このグレーのバーがブレークポイントを追加できる場所です｡
‫F 9を押してブレークポイントを追加することもできますが､ 9を押すとビデオ録画ソフトが一時停止してしまうので､
‫これはやりません｡
‫だから､ マウスを使ってやる必要があるんです｡
‫そこで､ デバッグに移動して､ トグル・ブレークポイントを押すことができます｡
‫これにより､ このブレークポイントを作成することができます｡
‫もちろん､ f 9を押してもいい｡
‫ショートカットは9つあり､ デバッグの際にショートカットを使うことで､ デバッグ画面に行ってずっとクリックし続けるよりもずっと楽になります｡
‫わかりました｡
‫だから､ キーボードのボタンを使うことに慣れましょう｡
‫わかりました｡
‫では､ デバッグを始めましょう｡
‫では､ デバッグに移動してデバッグを開始するか､ F5キーを押してデバッグを開始します｡
‫現在､ この小さな黄色い矢印が表示されていますが､ これは現在ソフトウェアが停止している場所であることを示しています｡
‫そして､ ここにブレークポイントを作ったので､ そこで動かなくなったのです｡
‫その時点でソフトが壊れているわけですが､ 今は自分たちのペースでソフトを進められるので､ 一行一行､
‫さらに深く掘り下げることも可能です｡
‫では､ そうしましょう｡
‫F10キーを押すか､ このボタンを押すと､ ステップオーバーして次のステップに進むことができます｡
‫ところで､ これらのボタン､ 全部デバッグモードだから使えるんですよね？
‫ステップイン・ステップオーバー・ステップアウトの3種類があります｡
‫つまり､ 複数の異なる方法があるわけです｡
‫そう､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで､ 踏み込んで｡
‫わかりました｡
‫だから､ 今やっているのは､ 次の行に行くことです｡
‫そこで､ 次の行に進みました｡
‫そして､ friendsは7つの値を持つ値であることがおわかりいただけたと思います｡
‫フランク､ ジョー､ ミシェルなど7人の文字列のリストなんですね｡
‫インデックス0にはFrank､ インデックス1にはJoeと､ といった具合に｡
‫さて､ party friends 自身は､ 値を代入しているにもかかわらず､ まだ空のリストです｡
‫でもそれは､ 11行目の時点で､ 10行目は実行されたけど､ 11行目はまだ実行されていないからです｡
‫つまり､ もう一度ステップオーバーする必要があるので､ もう一度f 10を押して次の行に進みます｡
‫そして､ 私たちの13番線｡
‫つまり､ 12行目は何もないのでスキップされ､ そこには何のコードもないのです｡
‫そして､ ループごとにこのような状態になったのです｡
‫しかし､ 今度はもっと深く掘り下げたいと思ったらどうでしょう｡
‫では､ このget party friendsメソッドが呼ばれたときに何が起こったかを知りたい場合はどうすればいいのでしょうか？
‫この矢印を上にドラッグすると､ 戻ることができます｡
‫そこで､ ドラッグして戻すと､ 11行目に戻って､ 今度はできるようになりました｡
‫F10を押してステップオーバーする代わりに､ F11を押してステップインすることができるので､
‫F11を押してget party friendsメソッドにステップインします｡
‫そして､ ここでも行くことができます｡
‫ステップ・バイ・ステップ
‫パーティーフレンドが何であるかを確認できる｡
‫パーティーフレンドの価値を確認できる｡
‫カウントがゼロになっているのがわかります｡
‫つまり空リストで､ リストに含まれる項目がゼロであることを意味しているだけです｡
‫そして､ 次の行に進むと､ パーティ・フレンドの数が0であることがわかるので､
‫0と4を比較し､ 0は4未満であることを確認します｡
‫だから､ 野生のループは､ あるいは野生は真である｡
‫次の行に進み､ ここでは「Get Party Friend」と呼んで､ さらに深く､ 「get party
‫friend」に踏み込めるようにしています｡
‫そして今､ 私たちはこのメソッドの中にいることがおわかりいただけると思います｡
‫つまり､ step intoはメソッドのstep outに入るということで､ shift f 11はメソッドから飛び出すということですね｡
‫しかし､ ここでこのメソッド呼び出しを見てみましょう｡
‫この時点で最も短い名前､ Joeがあることがわかります｡
‫そして､ このforループの中で一歩一歩進んでいきます｡
‫そこで､ まず変数を設定し､ 次に比較する｡
‫比較がtrueになったら､ forループの中か､ forループの中に行く｡
‫そして､ このif文でもう一度比較してみると､ どうやら長さ3は長さや最短の長さ3より大きくはないようです｡
‫だから3はイマイチなんです｡
‫3 さて､ このif文は真でなかったので､ 次のforループの繰り返しに移りました｡
‫これで何度もforループを実行することになるわけです｡
‫これで､ このメソッドの実行からステップアウトし､ そこから先に進むことができるようになります｡
‫しかし､ この方法では､ 通常実行されるはずのforループを実行しないことになります｡
‫だから､ もう一度踏み出すと､ 範囲外の引数例外が発生するんだ｡
‫もちろん､ そのまま実行することもできますし､
‫デバッグを中止して､ デバッグのプロセスを再開することもできます｡
‫そこで､ 全体を再実行すればよいのです｡ もちろん､ もう一度､ 段階を踏んで行ってください｡
‫そして､ 私たちはできるのです｡
‫ステップオーバー､ ステップオーバー､ ステップオーバーで､ 名前を教えてくれるところまで来ました｡
‫だから､ 今､ 私たちはミッシェルにいるのだとわかるでしょう｡
‫今度はアンジェリーナがリストの次の名前に移動して､ カルロスになっています｡
‫つまり､ すべての変数と､ すべての変数の状態を逐一確認できることがおわかりいただけると思います｡
‫これは､ 物事を把握する上で超重要なことです｡
‫わかりました｡
‫以上､ ブレークポイントの使い方とデバッグの始め方について､ 大まかに説明しました｡
‫次のビデオでは､ この論理エラーを修正するために､ 変数とその状態をより良い方法で見る方法を紹介する予定です｡
‫というのも､ 変数の上にカーソルを置くと､ 特定のポイントでどのような値を持っているかを確認できるようになったからです｡
‫でも､ 複数の変数を同時に比較したい､ 複数の変数の状態を同時に見たい｡
‫それを､ 次の動画で確認するのです｡
‫それでは､ 会場でお会いしましょう｡