ナベアツを書いているときに14でアホになってしまうという現象が起きて、ちょっと悩みました。原因は
ret = IIf(((i mod 3) = 0) Or (Instr(CStr(i),”3″) > 0),ToAho(CStr(i)),CStr(i))
と書くべきところを
ret = IIf(((i mod 3) = 0) Or (Instr(ret,”3″) > 0),ToAho(CStr(i)),CStr(i))
と書いていたからです。これだと14がアホになる他、30番台のいくつかではアホにならないという障害になります。テストで気づいたからよかったのですが、仮に10までしかテストしていなかったら気付かなかった可能性があります。ヒヤリハットみたいなものなので、仮に10までしかテストしなくて障害を起こしてしまったとして(あるいはテストしたけど気づかなかったとして)、二度とこのような問題を起こさないように根本原因を解消しておきたいと思います。
根本原因を探る際に、なぜなぜ5回というのがありますが、なぜなぜを「なぜ発生させてしまったか(なぜそのような記述をしてしまったか)」と「なぜ流出してしまったのか(なぜテストで防げなかったのか)」という観点があるというのが面白かったので、そんな感じでやってみます。
一つの参考として:「なぜなぜ分析」手法 実践セミナー 「なぜなぜ分析」手法 実践セミナー(PDF)
なぜ発生させてしまったか
(1)Dimで初期化されると思い込んでいた
(2)思い込みのため初期化しなかった(現状もしていない!危険!)
(3)最初は「3の倍数のとき」という条件のみで記述して、後から「3のつく数字のとき」という条件を追加したが、その際当初のToAhoメソッドで使っていたInstr(ret,…という記述をコピペした
(4)CStr(i)は変数に入れてから使おうかと一瞬思ったが、まあこの程度はいいかと思った(現状もそうだ!)
なぜ流出してしまったか
(1)10までテストすれば十分だと思った
(2)14は3の倍数だと勘違いした
(3)OKボタンを連打して確認したので、期待値と異なる値になっていることを見逃した
発生させないための対策
(1)宣言の直後に必ず初期化する
(2)宣言と同時に初期化できないVB Scriptは使用しない
(3)宣言に対応する初期化があるかを機械的にチェックする
(4)関数の入れ子が複雑になるような場合は戻り値をいったん変数に入れてから引数として渡す
(5)前後関係等に依存する値は裸で使わずいったん変数に入れてから引数として渡す
(6)各ステップ毎に期待する動作になっていることを確認しながら記述する
(7)誤りの再利用を避けるためすぐに対策を取っておく
流出させないための対策
(1)どこまでテストすれば品質が保証されるかを、テスト仕様を決める際に論理的に導き出す
(2)原則として考えられる全パターンをテストする。例外的にリソース上の問題等で全パターンテストができないときは、論理的に絞り込みを行う
(3)テスト仕様を作成する際にはInとOutをデータとして準備する
こんなことを考えてみると、いろいろ感じることがあります。
・発生させないための対策の方がコストが小さそう
・もっとも、発生させないための対策(5)は言うほど簡単ではない
・発生させないための対策の方が適用範囲が広そう
・流出させないための対策の方が「ちゃんと対策をとりました」と言いやすそう
・対策の中には、発生対策の(2)のように、いろいろな理由で取りえないものもある
・「必ず」のような精神論的対策は実際は無意味(今回もさらすにあたって結構気は使っているのにこの有様)
・論理的絞り込みは結構難しそう(現在のロジックは2桁までの仕様ですが、では3桁に対応しようとした際にテスト範囲を論理的に決めうるかはなかなか難しいような気がする)。それよりも、徹底的な自動化で全パターンやってしまう方が良いような気がする。
ナベアツ
床屋の時間を待ちながら、1000speakersを見ながら、漫画喫茶でナベアツ。
なんてすてきな休日・・・
nabeatsu.vbs
—
MsgBox “3の倍数と3のつく数字のときにアホになり、5の倍数のときに犬っぽくなります。(40までいくよ)” Dim i For i = 1 To 40 Dim ret ret = IIf(((i mod 3) = 0) Or (Instr(CStr(i),“3”) 0),ToAho(CStr(i)),CStr(i)) ret = IIf((i mod 5) = 0,AddDog(ret),ret) MsgBox(ret) Next Function ToAho(str) Dim ret ret = str If Len(ret) = 2 Then ret = Left(ret,1) & “じゅう” & Right(ret,1) ret = Replace(ret,“1じゅう”,“じゅう”) End If ret = Replace(ret,“1”,“いてぃ”) ret = Replace(ret,“2”,“にぃ”) ret = Replace(ret,“3”,“しゃん”) ret = Replace(ret,"
ITpro Expo より ワークフローまとめ
デブサミも行けず、ITpro Expoっていつの話だよ、という感じですが、資料を放っておいても邪魔なので、整理。
そんな中から「ワークフロー」というキーワードを掲げている製品をまとめ。
サイボウズ ワークフロー for ガルーン 2
****X-point – ウェブフォーム・ワークフロー “エクスポイント”
desknet’s
MajorFlow for.NET
パソコン決裁DocGear
からすみを炙る
からすみを 炙って食べると 異様にうまい
ライターであぶってもいいんですよ。
AutoPagerize インストールしてみましたよ
tpircsさんに背中を押され、入れてみました。
Webブラウジングを快適にするAutoPagerize を参考。 ちょっとキモイ感じがいい感じ♪
SQLメモ 仕訳
こんな表から
こんな出力を得たい
借方・貸方を横に並べて、借方だけある場合は貸方NULL、貸方だけある場合は借方NULL、みたいな感じ。
—
SELECT
借方仕訳.伝票番号
, 借方仕訳.行番号
, 借方仕訳.科目 AS 借方科目
, 借方仕訳.金額 AS 借方金額
, 貸方仕訳.科目 AS 貸方科目
, 貸方仕訳.金額 AS 貸方金額
FROM
(
SELECT
伝票番号
, 行番号
, 科目
, 金額
FROM
仕訳サンプル
WHERE
貸借区分 = ‘借’
) AS 借方仕訳
LEFT OUTER JOIN (
SELECT
伝票番号
, 行番号
, 科目
, 金額
FROM
仕訳サンプル WHERE
貸借区分 = ‘貸’
) AS 貸方仕訳
ON 借方仕訳.伝票番号 = 貸方仕訳.伝票番号
KOSUGI-LT
懇親会でKOSUGIで検索してもヒットしないなんて話題が出てましたがちゃんと出ますね!
さて、昨日、じゃなくて一昨日になってしまいましたが、KOSUGI-LTにお邪魔してきました。
若い人たちの運営がさわやかでした。
さらに驚きの参加者約50人。発表者10人もすごかったです。
みなさん発表がうまいし、ネタも多様でためになることも多かったですが、そんな中から2点。
仕掛けを責める(攻める) なんで人を責めてしまうんだろう、というのがこの半年くらいの切実な悩みなのですが、この言葉を聞いて、ふと、「何を責めたらよいのか分からないのでは」という考えが。けどそんな考え自体が人を責めてる気もするし、やはり重たいテーマ・・・
Greasemonkey 基本IEなので、スルー気味だったのですが、クライアントストレージという方面からのお話にちょっと惹かれました。それについては別稿で。デモが見られなかったのが残念。AKIBA復活の際にはぜひ来てほしい!
システム開発現場のファシリテーション ~メンバーを活かす最強のチームづくり~
みんな買いましょう!
システム開発現場のファシリテーション ~メンバーを活かす最強のチームづくり~新岡 優子/前川 直也/西河 誠/小田 美奈子/上田 雅美 技術評論社 2008-01-30
売り上げランキング : 100433 Amazonで詳しく見るby G-Tools <p> しかし、知らなかったよ。教えてくれてもいいと思いますよ(笑) </p>
ありがたい記事
WEB+DB PRESS vol.42ですが、「ニコニコ動画構築ノウハウ大公開」という特集があります。
これがいい!特に第3章負荷対策。
ダブルバッファドサマリテーブルなどという名前をつけてやっているという検索用テーブルの作り方とかも面白いですし、もっと単純な話では、静的ファイルは後ろに「?ファイルの更新日時」を付けることで、キャッシュさせつつファイル更新も可能にするという、ベストプラクティスというべきテクも紹介されています。こういうのって、それなりに知識のある人こそ、いろいろ工夫しながら独自の方法を編み出してやっていると思うのですが、なかなか情報共有されにくいところだと思うので、こうして記事になっているのは本当にありがたいことだと思います。
WEB+DB PRESS Vol.42WEB+DB PRESS編集部 by G-Tools
ということで「旅する会社」読みました
「クリエイターは夢を食べると元気になる生き物だ」なんて、青臭いといえばあまりに青臭い。
旅する会社 (株)デジタルステージ代表 平野友康のすごいソフトウェア開発平野 友康
by G-Tools <p> でも、マンガしか読まないと書きながら、一番お気にいりの書籍は「ザ・ゴール」と言ってのけるのは、したたかというかずるい! </p> <h5> SI論 </h5> <p> 受注仕事がないから、自分たちが「やろう!」と思わないと何も生まれない。 </p> <p> こういう風に思って、逆にSIを嫌だと思ってしまう人も多いと思う。しかし、SIだって結局はそう。本書でもほかの部分で書いている。「ニーズからは何も生まれない」と。 </p> <h5> 大人 </h5> <p> ネットで新しいサービスの発表がされるとモヤモヤすることが多くて、あるときその理由に気づいたそうです。大きな会社が、大きな記者会見場でネクタイを締めて、メディアを集めて大々的に発表しているアイデアが、中学生がネットでやり取りしながら考えたり作ったりしていることと全然変わらない、要するに大人げないと。 </p> <p> この感覚は好き!いや、できない人からしたらできるということはすごいんだけど、そこはもう感覚の世界ですよね。自分たちの使命はそれか、という感覚。 </p> <p> — </p> <p> あとがきにもちょっとほろりとさせられました。 </p>