
ソフトウェアのテストを退屈じゃなくするコツは? 93
ストーリー by reo
TDD「どうやら俺の出番…え、違うの ?」 部門より
TDD「どうやら俺の出番…え、違うの ?」 部門より
ある Anonymous Coward 曰く、
本家 /. 記事「How Can I Make Testing Software More Stimulating?」より。
自分はソフトウェアを書くのが好きだ。楽しいと言ってもいい。しかし昔からソフトウェアをテストすることが好きではない。好きではないというか、死ぬほど嫌いとすら言ってもいい。
ソフトウェアをテストすることは余りに退屈で刺激が無さ過ぎて、任せられる時は完全に誰かに投げてしまう。誰もいない場合は仕方なく自分でやるのだが、はっきり言ってテストの仕方が下手である。自分が怠け者だからというのが原因ではなく(プログラミングなら何時間でもできる)、テストの時だけはどうしても他のことを考えてしまったりしてどうにも集中できない。
せめてきちんとテストできる習慣をつけたいとは思っているのだが、どうすればマニュアルで行うテストをもう少し退屈じゃなくできるだろうか?
本家 /. には「開発者とテストを行う人は分けるべき」との意見もあるが、いつもそれが可能とも限らないだろう。/.J 諸兄方はどう乗り切っている?
到達感を自分に与える (スコア:3, 参考になる)
2.その項目をひとつひとつ実行するごとにチェック印をつけるか、もしくはその項目の行を取り消し線で消す。
単純な方法だがこれをやると自分がいま全テスト行程のどのくらいの位置にいるのかを視覚的に確認でき、あとどれだけで終わるかなど、ゴールを認識できるので精神衛生上良い。
全行程を終了すると、テストを行なった項目とそれを消した線が残るので自分はこれだけのことをやったという到達感が残せる。
それによって、しだいにテスト作業に取り組む意識が変わってくる。
Re:到達感を自分に与える (スコア:1, すばらしい洞察)
あなたの仰っていることは正しい。全く正しい。
ただ、
>1.テスト項目、確認事項を箇条書きでもれなく書き出す。(できればあとから思いついた項目を追加できるよう紙媒体がベター)
これこそが果てしなく退屈な作業なんだ・・。
Re:到達感を自分に与える (スコア:2, おもしろおかしい)
真っ白な紙をイメージしてください。
紙はあなたにペンで文字を書き込まれ汚されることを望んでます。
真っ白な紙を黒い文字で埋め尽くしてあげてください。
書き込む内容はもちろんテスト作業の内容です。
それは作成された生まれたてのプログラムをいかにいじめるかです。
さぁ、妄想を膨らませてあなたの気が済むまでいじめてあげてください。
あなたの想像力しだい、思うがままです。いくらでもどうぞ。
ほら、退屈なんかじゃないでしょ
Re:到達感を自分に与える (スコア:2)
苦痛きわまりない作業を乗り越えてテスト項目を書き出したとしても、
膨大な組合せから成り立つ全てのテストパターンの数を見た瞬間に
あぁ、本当にこれを全部やるのか?
と嫌になるに決まっている。
Re:到達感を自分に与える (スコア:2, すばらしい洞察)
「手を使ってペンでビューっと線を引く」その所作に大きな意味があるんです。
時にシュレッダーは早くて便利だけど、紙を手で破く感触って、感覚的に自分自身に訴えかけるものありますよね。
そういうの分かんないですかね。そういうことです。
Re:到達感を自分に与える (スコア:1)
-- 哀れな日本人専用(sorry Japanese only) --
Re:到達感を自分に与える (スコア:1)
それ以前に、到達感は結果ではないし、積み上がった紙の山は成果物でもなんでもない
マネージャークラスの暇つぶしじゃないか……!
Re:到達感を自分に与える (スコア:1)
それは、楽しく仕事をするライフハックとして、Todoリストにたいしてやるべき事であって、
成果を残すべきテストでやる事じゃないでありますよ
後から渡されたチェック帳にたいして、
ふふん!こんなテストはとっくに終了してるぜ!
なにぃ!?こんなテストをやるのか!?過去の担当者は何をやらかしたんだ!
と一通りテストを堪能してから、報告書を外で焼くことが唯一の楽しみ
田舎の職場ならではでありますが……
Re:到達感を自分に与える (スコア:1)
テストをBTSで管理してるんですか?
それはそれで、ご苦労様です
Re:到達感を自分に与える (スコア:1)
バグの報告はBTS(ITS)でいいですが、テスト仕様書/テスト結果の管理は専用のツール(cf TestLink)を使ったほうが良いのではないでしょうか。
Excelはぱっと見手軽ですが、規模が大きくなると破綻します。
進捗管理もそうですが、テストのアサイン管理、テスト結果のマージなど、Excelシートでは難しいです。
無理 (スコア:3, すばらしい洞察)
自分で書いたソフトのテストを好きになる方法はまず存在しないと思われます。
自分で作ったものを自分で疑うという行為ですからね。心理的に抵抗が強いですよ。
開発者自身にテストさせると、想定パターンしか流されない事が非常に多いのは、そのあたりにも理由があるでしょう。
あと余談ですが、「プログラムは好きで何時間でもできる」という人は、得てしてプログラマーには向きません。
プログラムを書くことが苦痛ではなく快楽なので、問題解決の方法で「とにかくプログラムを書いて力尽くで解決する」しか選ばないことが多々ありますから。
なので、こういう人間にはむしろ積極的にテストまでやらせて、「プログラムを作ることは苦痛である」と刷り込ませるのが一番です。
Re:無理 (スコア:1)
Re:無理 (スコア:2)
「野球好きには二種類いる。
勝つために全力を尽くす奴と、そうでない奴だ」
ってのはどうでしょう。
勝利を掴めるのは大抵前者。
プログラミングは「勝ち負け」を競う競技ではないけれど、
本質は同じだと思う。
Re:無理 (スコア:1, すばらしい洞察)
問題は、もうあらかたバグも出尽くしていくらやっても品質が上がらなくなったあと、どうやってモチベーションを保つかってところで。
回帰試験とかまずバグが出ないだろうっていう状態で何日もテストやり続けてると、どうしてもテスト項目省略して帰りたい誘惑に駆られますね。
運用されている場面を想像しながら一晩寝る (スコア:3, 興味深い)
そうすると、トラブルが起きる夢を見るので
次の日の朝一にソースを見直して対策を考えます。
一度、使う立場になって考えてみるという事でしょうか?
昔のことで記憶曖昧だが (スコア:3, 興味深い)
PC用アプリとか大型アプリ用にそういうのないのかな?
Re:昔のことで記憶曖昧だが (スコア:2)
Androidにもmonkey test用のツールがありますね。
Monkey [taosoftware.co.jp]
SですかMですか (スコア:3, おもしろおかしい)
他人の作ったプログラムをテストする体制がある場合だけど
S=テスター
M=プログラマー
が適材適所かと。
Mしか居ない場合どうなるんだろ?Sに覚醒?
テストも設計する (スコア:2, すばらしい洞察)
テスト・ファーストの話だけど、テスト自身の構成・設計に凝ると結構楽しくなってくるよ。
モック・オブジェクトやらやらテストを記述しやすくするテスト用の補助メソッドやら…。
記述しやすい気のきいたテストの設計を思いついた時の感動はテスト対象本体の設計で感じる感動と近い。
それ以外にあるの? (スコア:1, おもしろおかしい)
>本家 /. には「開発者とテストを行う人は分けるべき」との意見もあるが、いつもそれが可能とも限らないだろう。
これ以外あるのかよ。
可能じゃないというなら、テストを面白くすること自体、可能じゃないといい切っちゃうぜ。
自分の描いた絵で抜けないのと同じさ。
Re:それ以外にあるの? (スコア:1, おもしろおかしい)
Re:それ以外にあるの? (スコア:1, すばらしい洞察)
で、テストするプログラムをテストするプログラムを書くわけですね
Re:それ以外にあるの? (スコア:5, おもしろおかしい)
Re:それ以外にあるの? (スコア:1, おもしろおかしい)
Re:それ以外にあるの? (スコア:1, おもしろおかしい)
で、テストするプ口グラムをテス卜するプログラムを〒ストするプログラムをテストするプログラムを書くわけですね
Re:それ以外にあるの? (スコア:3, おもしろおかしい)
Re:それ以外にあるの? (スコア:1)
自分で描いた絵については別投稿。
>テストを面白くすること自体、可能じゃないといい切っちゃうぜ。
プログラマさんの気質の一種ですね。
書いていたら楽しい、あとはどうでもいいや、書いたものの検証?やなこった...
うん、実は文字書きにもこういうお方が多いんだよね。
小説やエッセイや論文をすらすら書くけど、推敲や校正は「やなこった」。
でもって、他人のチェックできっちり調べるのが好きな人もいるのだけど、
また、この人に書かせると、自分の書いたものだと推敲とか校正は「やなこった」
が多かったりする。
ところが絵描きになると、描いていた絵にさらに上塗りやら、あーでもない
こーでもないと...なもんで絵描き(漫画家とかだと、割合は減るけどね)の
気質との差が結構あるんだよね。
漫画家でも、一カットにひっかかって...という人が結構いるし、出した後でも
「あああ、描き直していいですかぁ?」ってのが多かったな。
# 某同人の編集人としては、文字書きには校正/絵描きには催促が....
# しかしその編集人も、実は自分の書いた編集後記の校正は嫌いだ...www
Re:それ以外にあるの? (スコア:1)
>テスト段階でそんなことやってたら、仕様が変わっちゃうじゃないか。
たまにいるよね、「ここもうちょっと奇麗にならないかな?」
「短くならないかな?」「分けてみるかな?」...
>仕様を変えてもいいテストなら、全然楽。それはコーディングと同じだし
頭の中でどう動くかのテストをしていないプログラマですかね?
他人に投げたって (スコア:2, おもしろおかしい)
テストを投げたが、人に投げたなりのテストがなされなくてげんなりというのも。
しまいにはわざとバグ残して、「あるよ~」と言って投げてもまともなテストされず。
# 自分がドジなの分かってるので自分ともう一人誰かがテストするようにしている。
だけどその人、本稼働してからバグ見つけるのはとっても上手なんだ。
Re:他人に投げたって (スコア:3, 興味深い)
> だけどその人、本稼働してからバグ見つけるのはとっても上手なんだ。
たぶん自分の事じゃないよな と思いながら。
プログラマ引退後ソフトウェアテスト業に就いていた事がありますが、バグの発見率はチーム1でした。
# 性格が悪いからミスを起こしそうなところが予想できてしまう…
で、開発者に現象と(ぼかした表現で)原因と思われる事を連絡する。
おかげで開発者からは嫌われていたようです。テスターとしては勲章ですが。
それでも、自分で作るプログラムや書類のミスは減らない。不思議!
Re:それ以外にあるの? (スコア:1, おもしろおかしい)
とか一言添えておけばいいんですね
Re:それ以外にあるの? (スコア:1)
♂×♂でもケツ合はできですよ。
# HW的にはデイジーチェーンもできる優れもの!
# SW的にはスパゲッティ化の危険性あり。
Re:それ以外にあるの? (スコア:1)
それロケットえんぴつだからっ!
# 総合テストだったら……(ワクテカ
---- 何ぃ!ザシャー
Re:それ以外にあるの? (スコア:2, すばらしい洞察)
それが出来たら、それなりのが描けたと思っていい。
というのを、某エロ作家が言っていたな。
エロ作家も良いこと言うんだ (スコア:2)
結構良いこと言うんだね。
やはり、自分で使ってみたいソフトを書けないと一人前では
ありませんね。
Re:それ以外にあるの? (スコア:1)
カいてる過程が一番クルなー?
#真面目な話、絵を描いてる時は脳内に理想の対象を思い浮かべながら描いてるので本当にクル。
#出来上がりがその理想を表現できているかは残念ながら別の問題だが。
開発元でのテストは不要 (スコア:1)
開発元がテストをする必要なんて全くありませんよ
なぜならば、現場とお客様がテストするからです
開発元はテストなどせずに迅速に製品をだせばよろしい
……新パッケージがでる度にバグテンコ盛りなのはそういう事でありますよね!
有料βテストってレベルじゃねーぞ!
さっさとパッチを出してよ!!!
Re:開発元でのテストは不要 (スコア:1)
今は亡き某ゲームメーカを思い出した。
カラオケで延々と席取りをする、CG一覧に没CGの分の枠もあるのでCGが全部埋まらない、
キャラクターの表示で首から上しか表示されない、Hシーンで普通の人間のはずが耳としっぽを
パタパタと振る、etc
で、エンディングでスタッフロールが流れて、最後に「and プレイヤーのみなさん」というような
(言葉は違うけど)表示がなされるんだけども、やはり、プレイヤーはデバッグ要員でスタッフ扱いなんだ
という冗談(半ば本気)が流れてました。
「わたしのありか。」は特にひどかった…
らじゃったのだ
Re:開発元でのテストは不要 (スコア:1)
カラオケにヒロインたちと行って(娘さん5人、男2人)どこに座るかの選択肢が出るんだが
選択肢を選んでちょっとしたイベント発生後、またその選択肢が出てきて繰り返す
というバグです。
#ちなみに幼馴染のでっかいのを選ぶとその娘の膝の上に、幼馴染のちっちゃいのを選ぶと膝の上にその娘を乗せることになります。
らじゃったのだ
Re:開発元でのテストは不要 (スコア:1, おもしろおかしい)
テストでも開発しよう (スコア:1)
そうだとテストセット作成もプログラミングすることになり、それなりに楽しいかもしれないです。
Re:テストでも開発しよう (スコア:1)
そしてテスト自動化プログラムの動作テストとテストセットのデータテストが…。
Re:テストでも開発しよう (スコア:1)
ログ出力の工夫、テスト対象のバリエーションを用意すれば、
テストセットのバグにも気づくことが多いです。
テストを実行した結果について、目視確認じゃ効率はよくないので、
データテストも100%自動化しましょう。
テストセット作成は、本当に工夫次第なので、
プログラマの能力も問われます。
テストが必要ということは (スコア:1)
コードを見る前に頭のバグ取りをしましょう
困ったらとりあえずキーボードの前から離れること
栄養を取って早めに休む
それを可能にするための折衝能力もプログラマの腕です
テストを書かずにテストが終わっている
そういうコードを書くように心がければプログラミングも面白くなるでしょう
まあ医療系では稼働中も常にテストする必要はあるわけですが
ROM全体のCRCを常に取るとかそういう系の
テストが退屈というのはコメントを書くのがつまらないと言っているのと同じで悪の怠惰です
とテスト埋め込み派の俺はそう思いますけれど
Re:テストが必要ということは (スコア:1)
それってテストじゃなくて自己診断っすよね?
自己診断すればテスト不要って説は初耳ですが。
Re:部門名まま (スコア:1)
> TDD「どうやら俺の出番…え、違うの ?」部門より
テスト駆動開発 [wikipedia.org]ね。
IDEとかエディタでボタン一発で コンパイル→テスト が
できると開発もはかどるかと。
みなさまの Ruby, Java, Python, etc. のTDD環境を
自慢して下さい。
# クンタ・キンテかキンテ・クンタか
# バルトーク・ベーラかベーラ・バルトークか
# Test Unit か Unit Test か
# いつもわからなくなる
love && peace && free_software
t-nissie
Re:部門名まま (スコア:2, すばらしい洞察)
そんなに簡単にテストパターンが思いつく人は、最初からそのような間違いをしないか、なんど意識しても同じ間違いをする粗忽者。
故に、TDDが有効なのは粗忽者の集まりに対してだけである。
ところが、そのような粗忽者はテストを書くときに特定のパターンを書き忘れる、という粗忽さをも見せる。
結果として、TDDは役に立たないのだ。
fjの教祖様
Re:部門名まま (スコア:2)
一応マジレスしとくとTDDのケースは仕様書から起こすので
パターン忘れが起こるなら仕様書の時点で問題があるのです
Re:部門名まま (スコア:2)
そしてさらに突っ込んでおくとTDDが有効なのは、全てにテストが存在するので後から手を入れたときのバグ発生を補足できる点にあります。
全てのテストが常に通ったものがコミットされている安心感は何物にも代え難い。
# 粗忽者が全く関係ない所に新たにバグを作り込んでも、直ぐに発覚する。
Re:部門名まま (スコア:2)
運用的には、テストコードの妥当性はコードレビューで担保してますよ。
TDDの場合、テストを書き、そのテストを通るようにコードを書きます。
逆に言えば、テストさえ通ればどのように書いても許容されうるので、書いて欲しくないことは全てテストにしてあります。
# テストになっていないことは仕様じゃないし、仕様なら全てテストになっている。
長ったらしいコードを全部チェックしなくても「これ0以下の場合はちゃんと例外でる?」とか「文字列入れたら1が返る?」とか仕様見ながらテストコード読めば良いのでレビューが楽です。
# だいたい真偽判定、同値判定くらいしか使わないのでレビューが容易。
# テストコードでスパゲッティになることはまず無いので読むのも楽だし。
あとはまあ、テストコード書いてると仕様ヌケが見つかるのが利点かなあ。