- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
143 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:02:22.14 ID:qX3K4vQy - >>140
> どう組んでもチェック項目は絶対同じ数と内容になる そうでもないというか、その発想は抜けがあるよ。 たとえば数値が偶数か奇数かを文字列で返す関数があったとしよう。 function foo(value) { return (value % 2 == 0) ? 'even' : odd'; } これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。 だけどさ、関数の中身がこうなっていたらどうする? (1レスに収めるためにわざと改行せずに一行にしたけどそこは無視して) function foo(value) { var i = value % 10; if (i == 0) return 'even'; if (i == 1) return 'odd'; if (i == 2) return 'even'; if (i == 3) return 'odd'; if (i == 4) return 'even'; if (i == 5) return 'odd'; if (i == 6) return 'odd'; if (i == 7) return 'odd'; if (i == 8) return 'even'; if (i == 9) return 'odd'; } わざとバグを入れたけど、バグが無ければこの関数は仕様どおりに動くしfoo(0)とfoo(1)のテストにも通る。 だけどこの関数にはバグがあるし、だからチェック項目は2つでは十分ではないということになる。 コーディングの仕方でチェック項目数は変わらないっていうのは、半分は正しい。 もし2つあるコードのどちらも同じぐらい正しい品質であればその通り。 だけどこの例の場合は違う。2つのテストでは足りないということになっている。 この例のあるべき姿はチェック項目数を増やすのではなくて、コードをリファクタリングしてシンプルにすること。 そうすることでチェック項目は2つになるわけだが、ここまでの話で明らかなように 「コーディングの仕方でテスト項目は変わる」というか「悪いコードだとバグがないことを担保するためのテスト項目は増える」
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
145 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:11:25.02 ID:qX3K4vQy - >>144
これはわかりやすい例にしたからアホに見えるけど似たようなことはある。 もう一つの例が関数やコードのコピペ。 関数やコードがコピペされていると本来一箇所でいいテストを 何箇所でもやらないといけないはめになる。 テスト項目っていうのは無駄なコードがないという前提で仕様書から起こされている。 だから無駄なコードがあれば仕様書から起こしたテスト項目をテストしてもテスト項目が足りない。 正確に言えば理論上テスト項目は足りるはずなのだが、それでは品質を担保できないという現実に直面する。 だからテストする前にコードに無駄がないかを見ないといけない。 コードが想定通りでないとテストしても想定どおりの品質を保つことが出来ない。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
149 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:23:27.91 ID:qX3K4vQy - >>144
逆に無駄なテストっていうのもある。 たとえば、入力画面に数値入力項目が複数ある。 たとえば「原価」「定価価格」「値引価格」みたいに。 で仕様書では、それぞれの入力項目は数字しか入力できないこと。 という仕様だったとする。 このテストに「原価」「定価価格」「値引価格」の三箇所を それぞれ数字しか入力できないことをチェックするのか?ということ。 同じ画面ならば省こうと思うかもしれないが、 これが違う画面にある「年齢」だったらどうするか? 仕様書から起こせば、それぞれの項目でチェックしようってなりそうだろう? だけど開発者がこれらを、数値入力項目用の汎用コンポーネントで実装すれば 数字しか入力できないというテストは無駄でしかない。 ・・・が、開発者が馬鹿で、一箇所だけ普通の入力項目を使って 独自で数字のみ有効なんてコードを書いていたら?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
151 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:27:39.75 ID:qX3K4vQy - >>147
> これあるいはこのようなバグによりテストができていないことが判明した場合、 いや、だからテストは通ったって書いたじゃんw テストは通るけど、バグがある場合があるんだよ。 そして、テスト仕様書自体は正しく、コードが間違っている。 だから正確に言えばコードによってチェック項目が変わるのではなくて、 そのチェック項目では、コードに問題がないことを担保できない。 チェック項目が十分かつコードにも問題がないことを担保するには あらかじめコードのチェックが必要って話。 もし「コードの方を直さない」ならば、コーディングによって 問題がないことを担保するための、チェック項目は変わってしまう。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
153 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:35:08.33 ID:qX3K4vQy - >>152
担当範囲がおかしいかどうかは議論するべき所じゃないよ。 問題が起きた時に誰に責任があるかの話なんかするつもりはない。 今話しているのは、こういう問題をどうやって解決するか 現実の話として、コードのコピペ等によって 仕様書から起こされたテスト項目では、バグがないことを担保できない場合がある。 (逆にコードが汎用化されていたりで、無駄なテストをしている場合もある) バグがないことを担保するにはどうするか? コードのレビューを行って、コードに問題がないことを 確認するしかないだろうね。 それをしないならば(つまり開発者の書いたコードを信用するならば) コードにバグがないことを担保するためのテスト項目数は変わってしまう。 (ついでに言えば、どういうテストをすればいいかはコードを見ないとわからないので、やっぱりコードのレビューが必要)
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
157 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:42:37.96 ID:qX3K4vQy - >>154
> 要件にしたがってテストしたけどコードがアホ過ぎて検知できない場合もあるとしてもどうしようもない。 だからそのどうしようもないことが、現実として起きてるんだよ。 開発者の言う「このコードは汚い」というのはそういうこと。 コードの無駄やコピペがあって、本来十分であるはずのテスト項目では バグがないことを担保できない。 言い換えると、コードに問題がある場合のバグは、仕様書から起こしたテストでは検出できない。 バグが検出できない(問題ないと判断される)のだから、当然コードの問題もテストでは検出できない > どうやって検知すんだ?って話。 コードレビュー以外にも検知する方法はあるぞ。 コードメトリクス(複雑度)の測定や コードの重複の検出ツールなどを使えば良い。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
161 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:50:43.52 ID:qX3K4vQy - >>155
> コードレビューで問題が見つかったらコードを直すだけ。 > テスト漏れだとは思わない。 > もちろんテスト項目として追加するなら追加して。 > でも、テストが漏れていたとは思えない。 だからそういったじゃんw 正確にはテスト漏れじゃないが、開発者の書いたコードを素直に受け入れるならば、 コードによって問題がないことを担保するためのテスト項目は変わる。 コーディングによってテスト項目は変わるか?質問に対していうと、 「コードレビューで問題が見つかったらコードを直すだけ。」というならば 直さないならばテスト項目は変わるってことでしょう? テスト項目を変えないためにコーディングを直すっていうのは、 テスト項目が変わる原因の一つがコーディングであると言ってるのと 微妙にニュアンスは違うけど、結果として殆ど変わらないよ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
162 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:53:04.14 ID:qX3K4vQy - >>160
> 仕様書から起こす入力に対する正しい出力をチェックするだけ それはなんのためにやっているの? テストはバグを検出するためにやっていると思ったが、 コードに問題があると、バグを検出できないってことだよね?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
165 :デフォルトの名無しさん[sage]:2016/06/02(木) 00:59:05.09 ID:qX3K4vQy - >>163
だから責任問題の話なんかするつもり無いってばw どんなコードであっても、同じテストをすれば 同じ品質(バグがない)を担保できるような話をしてるから、 同じテストをしたとしても(そのテストに漏れがなかったとしても) コードにバグがないことを担保できないし、 コードの品質も同じにはならないよって話をしてるんだよ。 コードが悪ければ、品質を保つために必要なテスト項目は増えるし、 コードを直すことで、必要なテスト項目は減る。 (正確に言えば仕様書から起こした本来の最低限のテスト項目だけで済む)
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
169 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:08:17.44 ID:qX3K4vQy - >>166
だからテストとは別にコードレビューをテスト前に行い、 悪いコードをあらかじめ直すしかないだろ? 俺が品質ベースで考えてるから話がずれてるのか? 俺はバグがないようにすることを目標として どんなテストが必要か?を考えてる。 だからバグを無くすためには、コードによって必要なテスト項目が変わってくる。 そしてコードを良くすることで、必要なテスト項目が減るという話をしてるんだよ。 仕様書からテストを起こすっていうのは、当然コードは見てないから 必要な(最低限の)テストは何か?だけを考えてる。 テストの効果(バグを見落とすかどうか)は考えておらず、 その効果はコードによってばらばらで、テストしてもバグを検出できるとは限らない。 この場合のテストの目的は何なんだろうかねw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
171 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:12:05.80 ID:qX3K4vQy - >>167
> 何度も言うけどソースコードからテスト項目は増えない それはテストの効果(バグがないことの担保) を無視すればそうなるよね。 ソースコードからテスト項目は増えないが ソースコードが悪ければ、その増えないテスト項目では バグを見逃す可能性が高くなる。 テストの効果を低くしていいならば、 テスト項目は増やさなくていいよ。 そしてソースコードが汚いならばソースコードの方を直すんだろう? なぜなら、ソースコードが汚ければテスト項目を 増やさなければならなくなるから(アレ?w)
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
173 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:13:23.53 ID:qX3K4vQy - >>170
> うん。だからコードを直そうね。 > テスト漏れじゃないね。 コードを直さないとどうなる? 同じ品質を保つにはテストを増やす必要があるよね? えーと、それがコーディングによってテスト項目は 変わるってことだよねw コーディングによってテスト項目が増えるから コーディングを直すんだよね?w
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
176 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:18:59.63 ID:qX3K4vQy - >>172
俺の意見としては、テストとは別にコードレビューが必須であるということ。 仕様書からテストをおこすのは問題ないんだが、 そのテストで品質が保てるかどうかは コードで左右される。 コードが汚ければいくらまともなテスト行ったとしても それで品質を保つことは出来ない。 俺は品質を保つことを第一に考えてるので コードを直さずに品質を保つならばテスト項目が増えてしまうという話をしてる。 だからテスト項目を増やさずに品質を保つために、コードを直しましょうという話をしている。 で、最初の疑問「コーディングによってテスト項目は変わるか?」の 答えは、(品質を保つことを前提にすると)コーディングによってテスト項目は変わる。 悪いコードだと(品質を保つために)テスト項目が増えてしまう。だからコーディングを直しましょう。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
178 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:23:15.23 ID:qX3K4vQy - >>175
> そりゃバグがあることが判明したらテストを追加すべきだろうね。 リリースした後で、バグが有りました。すいません。ですむ会社なら それでもいいけどさぁw 「ちゃんとテストしたの?」の答えに テストは不足していません!ちゃんとテストしました! ちゃんとテストしたのに、コードが悪かったんです! ですむなら、それでもいいけどさぁw 理想の世界であれば、テストが不足してないのは事実だろうが、 そのテストで十分であるためには、コードが綺麗でなければならず、 コードが汚ければ、多くのテストが必要になるから コードレビューをして綺麗なコードにしましょうや。 それができて初めて、テストする意味が生まれる。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
179 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:24:18.99 ID:qX3K4vQy - >>177
> コードレビューで仕様の境界とは違うところで問題が見つかったらコードを直すだけ。 だから何度もそう言ってるだろうが。 人の話聞けよw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
182 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:26:39.31 ID:qX3K4vQy - 俺がはテストが足りないって言ってるんじゃないんだぜ?
品質を保つことを前提にするならば、 コードが汚ければ、品質を保つために必要なテストが増えてしまうから、 まずコードレビューしてコードを綺麗にしましょうって話。 コードが綺麗な状態であって初めて、仕様書から起こしたテストで十分だと言える。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
183 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:29:14.56 ID:qX3K4vQy - >>181
> だったらいちいち反論すんなよ。 お前が反論してるんだろw っていうかお前のは反論じゃない。 俺が言っていることと違うことをぶつけているだけ。 俺が言ってるのは、コードが汚いならば(品質を保つために) 必要なテストは増えるって話。 コードが汚くても、テストは増やさないで品質が保てるような 話をしているから、その発想は抜けがあるよってこと。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
186 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:30:30.71 ID:qX3K4vQy - >>180
> 見つける手段は? それもテスト前にコードレビューするって何度も言ったはずだが? 汚いコードは直さないと、テストした所で効果は低い
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
189 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:33:09.51 ID:qX3K4vQy - >>187
> 本来的にはテストは要件にしたがって動作することを確認するためのもの。 その確認の手間がコードによって変わってしまうんだよ。 すでにコードで例示したけど?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
193 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:34:52.13 ID:qX3K4vQy - >>188
「直接の関係はない」ってことは やっぱり間接的に関係があるって認めるんだw そりゃコードによって品質を保つための テストは変わりますからねw バグが有るかどうか知ったこっちゃない。 俺はテストをちゃんとやった。 テストしたのに漏れたのはコードが悪いんだ! ですむなら良い世界だねw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
198 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:38:47.83 ID:qX3K4vQy - >>192
> 本来は取りうる値の範囲をすべてチェックするんだから うん、ネタなのは分かってるよ(笑) 分かってて聞くけど、ある数値を二乗する関数があったとして Rubyで取りうる値の範囲はどうなるかい? なんでRubyと言ったかというと、RubyではIntの範囲を超えると 自動的にBignumに拡張されるからとても大きな整数を扱えるんだぜ!
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
199 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:39:44.45 ID:qX3K4vQy - >>195
> コードレビューで問題が見つかったらテストケースを追加してもいいよねってだけ。 誰がやんの? テスターのお仕事?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
203 :デフォルトの名無しさん[sage]:2016/06/02(木) 01:43:13.49 ID:qX3K4vQy - >>200
せやね。 コードが悪ければコードレビューで テスト項目が追加される。 コードが悪ければ、テスト項目が追加される。 おや? コーディングによってテスト項目が変わるって話に戻ったか。
|