Personal tools
You are here: Home ブログ 井上 JavaScriptでくだらないバグ
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

JavaScriptでくだらないバグ

JavaScriptで実にくだらないバグを書いてしまいました。

実際のコードは違いますが、簡単に言えば、次のように変数lenを使ったループの中で、(別のlenを使っているつもりで)lenの値を書き換えてしまっていました。

for (var i = 0; len = arr1.length; i < len; i++) {
  ...
  for (var j = 0; len = arr2.length; j < len; j++) {
    ...
  }
}

ゼロから書いていればここまで自明なバグは起きない気がしますが、途中でのコードの書き換えで、ミスに気づきませんでした。

更に悲しいことに、バグの性質としては、以前Cで書いたバグと似たようなバグであることです(http://dev.ariel-networks.com/Members/inoue/pitiful-bug2.0)。半年周期で何かに憑かれてしまうのでしょうか。

[追記] 人間側のミスは同質ですが、言語仕様(JavaScriptにブロックスコープが無い)の違いのため、バグの現象は結構異なっています。

この手のイージーミスから身を守るには

  • 気をつける
  • ミスしにくい書き方にする(= ミスしやすい書き方を避ける)
  • ミスをコンピュータに発見させる

という手があります。

最初の「気をつける」は却下です。気をつけてもミスする時はミスをするからです。バグへの対策で「今度から気をつけます」は最悪の対策です。

2番目の「ミスしにくい書き方にする」は悪くない手です。もっとも、分かっていてもやってしまうのも人間の一面です。

一番良いのは最後の「ミスをコンピュータに発見させる」手です。過去記事にあるように、Cの場合は、-Wshadowオプションを渡してgccに発見させるようにしました。上のJavaScriptのコードパターンに対して警告をするツールはありそうな気がします。理想は静的コードチェックですが、事情により、実行時にチェックする必要があります(一部、JavaScriptコード生成のコードがあるため)。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/pitiful-js-bug/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.