17. マイヤーズの三角形 まとめ
普段のバーベルよりは軽いかな
持ち上げないでくださいー……
できました……
みんな、お疲れさまだよ
確認の時はまず正常系は必須だね
二等辺三角形はそれぞれの辺についても確認した方がいいかもね
難しいところは三角形の性質。
これは「そんな中学の頃のこと覚えてない」じゃなくて…
テスト対象についてわかってないと出ないテスト観点があるってことだよ
実際の現場でもみんなの盲点になってるところがあるかも
三角形でこれなんだから、僕たちが扱う大きなシステムはもっと難しいんだ
今みたいにしっかり頭を回転させて考える必要があるよ
そだ、実際にプログラムも作っておいたんだ。
これで確認しても面白いかもね
マイヤーズのプログラムを実際に作ってみた
■普通(マイヤーズが挙げたテスト項目は押さえているモノ)
http://milk0824.sakura.ne.jp/services/myers/
■抜け漏れあり
http://milk0824.sakura.ne.jp/services/myers_bug/
(漏れ:三角形の性質、nullチェック、ゼロの確認、二等辺三角形のC=Aの場合、実数チェック)
今回は実際にマイヤーズのお題のプログラムを作ってみましたw
上はテストケースに挙げられた項目を押さえたもの、もう一方は抜け漏れありです。
中のJavascriptのコードも変えています。
入力それぞれをチェックするようなコードを書いてしまうと漏れが発生しやすい内容だと感じました。
例えばこのプログラム(抜け漏れありのほう)を使って、実際に会社でワークショップを行ってみても面白いかもしれません。
(利用は自由です)
- お題を出す
- みんなにテストケースを挙げてもらう
- 実際にそのテストケースで抜け漏れの方のプログラムを確認してみる。
- 最後に答え発表。確認漏れの場所をチェック
他に、プログラマのちょっとしたコードを競い合うものに使っても面白いかもしれません(FizzBuzzのようなイメージ。如何に効率化されたコードが書けるか)
マイヤーズの三角形の答え
- 有効な不等辺三角形を表す
- 有効な二等辺三角形を表す
- 有効な正三角形を表す
- 有効な二等辺三角形の場合に2つの等辺を含む3種類の組み合わせを3つ含(3.3.4/3.4.3/4.3.3)
- 一つの辺が0の値をもつ
- 一つの辺が負の値をもつ
- すべての辺が0の値をもつ
- 0より大きい3つの整数のうち、2つの数の和がそれ以外の1つと等しい
- 8.において、1辺の長さが他の2辺の長の和に等しいことを少なくとも3種類の順列のすべてに対して試すことのテストケースを持っているか?
- 0より大きい3つの整数のうち、2つの数の和がそれ以外の1つの数より小さくなるテストケースを持っているか?
- 10において、1辺の長さが他の2辺の長の和に等しいことを少なくとも3種類の順列のすべてに対して試すことのテストケースを持っているか?
- 整数でない値を持つテストケースを持っているか?
- 数値の個数が間違っていることを試すテストケースについて、入力の値に対して予想される出力を示したか?
- それぞれのテストケースについて、入力の値に対して予想される出力を示したか?
満点は14点。
専門プログラマの平均点は7.8点だったそうです。
さて、あなたは何点でしたでしょうか?
- 作者: J.マイヤーズ,M.トーマス,T.バジェット,C.サンドラー,Glenford J. Myers,Todd M. Thomas,Tom Badgett,Corey Sandler,長尾真,松尾正信
- 出版社/メーカー: 近代科学社
- 発売日: 2006/08/01
- メディア: 単行本
- 購入: 7人 クリック: 267回
- この商品を含むブログ (47件) を見る
テスト観点
どんな方向性、内容でテスト対象を攻めるか、というざっくりとした「攻めポイント」である。
マイヤーズの三角形問題であれば
- 整数以外を入力するというテスト観点
- 三角形の性質からのテスト観点
といった内容が考えられる。
私が作ったweb Appを確認するならば追加で
- UIのテスト観点
も出てくる。
テスト観点は一つということはほとんどなく、大体複数のテスト観点がある。
「物事を多面的に見よう」なんて一般的に言われるが、そんな感じのニュアンスだ。
ちなみにテスト観点を丸々見落とすとかなり大変な本番障害が発生する。
例えば……
- 多言語対応というテスト観点を丸々見逃していた結果、スマホが英語モードだったときにUIが壊滅した。
- Music Appで音楽が全部再生できるか、というテスト観点を丸々見逃していた結果、音楽の最後の方はキャッシュされておらず音がブチブチ途切れて聞けたものではなかった
こういったことが起きないように、テストするときはみんなとレビューをして「観点漏れ」がないかを確認するようにしよう。
……ちなみに作者経験済みの例です、はい……。
しっかり頭を回転させて考える必要がある
テストは考えなくてもできる、いっぱい雇ってテストしてもらえばいい。
なんていう人がいたりする。
恐らくイメージしているのは「モンキーテスト」であろう。
これは言葉の通り、お猿さんがごとく、適当にキーを押してポチポチしてればいける、という発想である。
今までの話で描いている通り、テストはそんな単純なものではない。
道を歩いている人1000人捕まえてテストをしてもらっても最高の品質にはならないのだ。
いかに効率よく、もれなく、確認するか。
どうやれば開発も企画も気付かなかったことに気付くのか。
何気なくやっていたらどちらも達成できないので、頭をフル回転する必要がある。
筋トレ思考
筋トレをしている人は重さを聞くと、自分がいつもつかっているダンベル、バーベルが思い浮かび、何回挙げれそうか考え始めるゾ。
【例】
米10キロ
「いつも使ってるダンベルと同じか……12回だな」
(これを12RMという)
水20リットル(20キロ)
「家に置いてるプレート全部付けたときのダンベルじゃん! 3回以上あがらん!」
(これを3RMという)
何気ない会話
「おま、体重何キロ?」
「65キロ」
「あー、なら10回9回8回ってとこだわ」
「え、何の話? え? え?」
筋トレ基礎
「よぅし、10回やったし終わりっ」
とやってる君! ちょっと待った!
筋トレは筋肉の限界に挑戦して初めて成長する…。
回数で制限をかけてはいけない。
「これ以上むり!」
となる回数にしよう。
そうすることでちょっとずつ筋肉が増えていくゾ。
RM
Repetition Maximumの略。
その重さで上がる限界の回数だ。
例えばダンベルカールで20kgが3回あがるけど4回行かないのであれば3RMである。
筋肉をどう鍛えたいかでRMは考えよう。
- 1~3RM : 筋力アップ
- 4~12RM : 筋肥大
- 13~ : 筋持続力アップ
ちなみに似た言葉にREP(レップ)があるが、これは「回」と同意。
10レップ=10回。
通報しますた
なんか悪いことを見かけたときに書き込むメッセージ。
基本はネタである。
が、たまに本気の通報があるので気を付けようね。