T_NAKAの阿房ブログ

アクセスカウンタ

zoom RSS 「デバッグとテスト」について

<<   作成日時 : 2016/01/22 00:01   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

コンピュータサイエンスとプログラミング入門(Part2)の三回目の授業:"11. Testing and Debugging (テストとデバッグ)"の話題に入ります。

今回の内容はなかなか深いので、当然全部は語れません。ここでは、例題を追ってみます。
例題のプログラムは \(silly()\) といって、1文字ずつ入力して最後に \(Enter\) のみ入力することで出来た文または単語が、「上から読んでも下から読んでも同じ」つまり回文であるか?を判断するプログラムです。
画像

\(1,a,1\) と入力して、\(is\; a\; palindrome\) と出力されるのは良いのですが、\(1,a,2\) と入力したら、\(is\;Not\; a\; palindrome\) と出力されないといけませんね。つまり、\(Bug\) が存在するわけです。
これをデバッグしていくことにします。

さて、重要なデバッグ手法は
 @ コードを読むこと
 A \(print 文\)
の2つだそうです。


ここではAを使っていこうと思いますが、「バイナリーサーチ」の考え方を使うことにします。プログラムコードの約半分のところで、データを出力してみましょう。
画像

この時点では \(res\) の内容は正しいです。つまりプログラムの前半には \(Bug\) が存在しないことになります。

では「バイナリーサーチ」の考え方で後半の約半分のところに、\(resとtmp\) を出力する \(print 文\) を挿入してみます。
画像

つまり、

tmp = res
tmp.reverse()
isPal = (res == tmp)

の部分に \(Bug\) が在るということです。
コードを読んでいくと、\(tmp = res\) がおかしいことに気が付きます。Python において、これではリストのコピーにはなりません。同じメモリー領域にもう1つの名前を付けているだけなのです。片方の名前で順序を入れ替えると、もう1つの名前で呼んたときも順序が入れ替わってしまっているのです。それが不具合の原因でした。
内容をコピーして、もう1つのメモリー領域を確保するためには、次のようにします。

tmp = res [:]

プログラムを書き換えてみましょう。
画像

これで \(Bug\) が取り除かれたようです。

今日はこの辺で。。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
「デバッグとテスト」について T_NAKAの阿房ブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる