X



「単体テストを手動で行いエビデンス取る」の破壊力

0001デフォルトの名無しさん
垢版 |
2020/09/23(水) 12:29:11.02ID:irsqaiS+
単体テストは自動化するものだと思っていたから
一瞬何を言っているのかわからなかった
0006デフォルトの名無しさん
垢版 |
2020/09/23(水) 17:43:13.71ID:qBH8cAxU
自動化って

メソッドsumAtoFの場合
引数A,B,C,D,E,Fの
処理S=A+B+C+D+E+F
戻り値S
のチェックって

int S=sumAtoF(A,B,C,D,E,F);
int chkS=A+B+C+D+E+F;
if(S!=chkS)
{
エラー
}

みたいになるの?
無駄じゃね?
0007デフォルトの名無しさん
垢版 |
2020/09/23(水) 18:00:08.33ID:O1ICXtuo
>>5
指定されたテストケースを実行できない人はそういないだろうが
過不足ないテストケースを作り出すのはむしろできる人のほうが少ない
自動化を阻む一番の要因
0008デフォルトの名無しさん
垢版 |
2020/09/23(水) 18:10:37.43ID:9Qi89m1Q
>>6
1+2+3+4+5+6 の結果が 21 になってることを確かめるのがテストだろ
なんでテストで変数使うんだよw
00095
垢版 |
2020/09/23(水) 19:22:31.50ID:Sj03UQBW
>>7
それな。
4,000行近くの神クラスがあらゆるクラスと相互で強力な依存関係を持っていて、さぁ!単体テストやろう!
って言われても...単体って何だよ(哲学)

こんな感じになる。
いやもう俺の会社やだ。泣きたいわ。
0013デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:32:38.82ID:cCwBtdaA
>>8
エクセルとかで予め計算しておいた値と比較するんだろ?
俺とやってること変わんなくね?
0014デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:35:59.63ID:cCwBtdaA
別で書いた計算式と本処理を比較するって点は一緒じゃん
それがエクセルでも処理言語でもやってることに違いなくね?
0015デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:37:36.63ID:9Qi89m1Q
>>13
テストは、あらかじめわかっている答えと比較することなんですが?

あらかじめわかってるはずの答えを計算するなという話をしてる
その計算ロジックにバグがあったら、テスト(比較)で失敗したとしても
正しい値がなにかわからんだろ
0017デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:42:40.76ID:9Qi89m1Q
>>16
自分で仕様を考えたこと無いのか?

1,2,3,4,5,6を与えたら21になる関数を作るんだろ
21をだすなら電卓でもなんでも使えよ

電卓が不安なら色んな方法を使って21が正しいと
確信もてるまで努力しろよ

そして21と比較するだろうが、21と比較する場面で
計算式を使ったら今度はその計算式が正しいかを
努力するしかなくなるだろうーが
それこそ意味がない
0018デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:48:02.82ID:cCwBtdaA
>>17
だからエクセルだか、電卓だか、別で計算した値と比較するだけで
どっちが正しいかなんてわかんねんだろお前w
0019デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:53:07.37ID:9Qi89m1Q
>>18
どっちが正しいかわからないから
計算式を書くなと言ってる

両方が同じ計算式だったら間違っていてもわからんだろ
片方が固定値であれば、こちらが正しい値であると考えてることがわかる
0022デフォルトの名無しさん
垢版 |
2020/09/23(水) 19:58:00.53ID:9Qi89m1Q
テストはロジック(関数)と固定値を比較することでやるという
基本的なことも知らないやつが居るとはなw
0023デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:00:49.03ID:cCwBtdaA
>>21
固定値が欲しいんだろ?
だからログでも出せばいいじゃんってこと

結局さ
やってることは1つの仕様に対して2つ処理書いてその値を比べてるだけ
別にテストコードに書いた値や処理のが正しい根拠もないし
本処理のが不出来である根拠もないでしょ
0024デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:03:50.72ID:I97mf4gB
自動でやっても、テストコードとエビデンスのレビューをしろ、という
キチガイもいる
0025デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:04:30.50ID:cCwBtdaA
俺、この結論はどこまで行っても出ないと思うぜ
どっちが正しいかなんて誰にもわからん
0026デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:15:06.99ID:9Qi89m1Q
>>23
お前はログに21と出力されているのを見て
これがどうやって正しい答えだって判断するんだ?
正しい答えが21ってわからないって言ったのはお前だろw
0027デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:16:03.34ID:9Qi89m1Q
>>23
> やってることは1つの仕様に対して2つ処理書いてその値を比べてるだけ

それはお前がやってる無意味なことですよね?w

そんな無意味なことはしないで、
1つの処理と1つの正しい答えを比べろって
俺は言った
0028デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:17:23.00ID:cCwBtdaA
テストと言いつつできるのは計算過程と処理結果を残すだけだと思ってるよ俺は
長年考えた結果
正しい値なんてのは実は物理的に誰も知りえないということを理解した

なのでテストで重視するのは俺は組んだコードのエビデンスの方
どんな処理書いてどんなログ出したか
自動テストは結局同じやつが作ってる以上同じ不具合入ってるだろうなって思ってるw
0029デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:22:00.58ID:9Qi89m1Q
> テストと言いつつできるのは計算過程と処理結果を残すだけだと思ってるよ俺は

処理結果を残すだけというのは
間違った処理結果を残していてもいいって話ですか?w

そうですね。お前はログ取るまでで
そのログを見るのは他の人ですもんね(笑)


こいつに、盗まれないように見ててって言ったら
盗まれました。ちゃんと見てました。って言いそうw
0030デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:28:09.64ID:cCwBtdaA
>>29
うん
だってさっきの21みたいにどこまで突き詰めたって
同じ仕様に対して別で2つ処理書いて比較してるだけだもの
んでこれを同じやつがやってる以上こんなところに金なんかかけるだけ無駄
0031デフォルトの名無しさん
垢版 |
2020/09/23(水) 20:35:36.21ID:9Qi89m1Q
>>30
論点がずれてるね。

お前はログを見て21であることを知って
あとからこの21は正しいのだろうか?と考えて判断すると言ってる。
どうやって21が正しいか判断するの?w

俺は、最初に21が正しいと確信を持ってコードに書いてると言ってる。
だからお前がやってるログを取るだとかログを見るだとかいう無駄な作業がいらない
0032デフォルトの名無しさん
垢版 |
2020/09/23(水) 21:34:22.05ID:O1ICXtuo
世の中にはテストケース1個作ることすらできない人もいるんだな
これは驚いた
0033デフォルトの名無しさん
垢版 |
2020/09/23(水) 21:58:03.76ID:cCwBtdaA
>>31
確信ってw
無理なこと言うなよw

お前が本処理に書いたA+B+C+D+E+Fも
21を出すために書いたA+B+C+D+E+Fも
どっちも胡散臭ぇんだよw

こんな簡単なことがわからねーのかよ
0034デフォルトの名無しさん
垢版 |
2020/09/23(水) 21:58:08.70ID:9Qi89m1Q
ある関数を作ったその関数は
1, 2, 3 という引数を与えると3421という値がログに出力された

「これが書いたコードにバグなんてあるはずがない。3421は正しい計算結果だ。」

そういってログを取れば十分とつぶやいた
0035デフォルトの名無しさん
垢版 |
2020/09/23(水) 21:59:03.06ID:9Qi89m1Q
>>33
俺はそんなコード書いてないが?

こんな簡単なことがわからねーのかよw
IDも確認できねーのかよw
0038デフォルトの名無しさん
垢版 |
2020/09/24(木) 09:17:28.17ID:27/WCIy4
>>36
あのな、ソフトウェアの開発っていうのは
○○を入れたら○○になる関数が欲しい!
という考えの連鎖で作っていくんだよ

お前は誰かから課題を与えられるんだろうけどな
自分で考えて作るってことしたことないでしょ
0039デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:23:36.26ID:ZK3wgiUi
作って終わりのシステムだったら手動でも問題ないと思う
Sierのユーザはテストのエビデンスを欲しがる人が多いから
エビデンスは納品物として残さないといけない

開発者よりもユーザ側の事情が大きいのじゃないかな
0040デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:28:05.64ID:27/WCIy4
客「正しく動いているというエビデンスが欲しい」
SI「正しく動いてるかどうかなんてどうやって証明したらいいかしらん
テストやったというスクショ用意すりゃいいんじゃないか?」

これ
0041デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:41:05.69ID:2iTMkqwR
そうそう、結局こういう入力(ユーザによる操作や設定ファイルも含む)に対してこう動くようにしましたよ
としか言えない
だからエビデンスが重要だって言ってんじゃん
21が正解かどうかは誰にもわからないんだよ

もっと複雑な計算で客も式は知ってるけど
実際に計算した値はわからんようなのだったらどうやって出すよ?

PG「大丈夫、エクセルで数式でこのように出した値と一致しています!」
客「は?なんでそれが正しいの?」
PG「え?」

みたいになるやつはここの理解が足りない
どこまで突き詰めても究極的にはわからない
わからないものを説明しなければならない
0042デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:45:22.65ID:27/WCIy4
> 21が正解かどうかは誰にもわからないんだよ
じゃあログ出す意味ないじゃんw
どうせ文字化け出力してても正解かどうかわからないだろ
0043デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:47:21.97ID:27/WCIy4
> もっと複雑な計算で客も式は知ってるけど
> 実際に計算した値はわからんようなのだったらどうやって出すよ?

計算式は神が作り出したものとか、いきなり湧いて出てきたって思ってそうw
高校レベルの数学はそうだね。計算式は覚えるもの

だけどな、本当は計算式っていうのは、ある値を出したいと思って
「計算式を作る」ものなんだよ。作るのは計算式。それがコード
0044デフォルトの名無しさん
垢版 |
2020/09/24(木) 10:51:24.16ID:27/WCIy4
ゲームの当たり判定でも、あれとこれがぶつかったのは
どう計算すれば導き出されるんだ?って悩んで
ぶつかったという答えを出す計算式を作り出すものなんだが

本を読んで計算式をみて、ぶつかったかどうか?
この計算式を使えばぶつかったという答えが出るんだよ
みたいに思ってるんだろう。

自分でアルゴリズムを考えたことがないから
計算式ググって、そのとおり計算して
なるほど、これが計算した答えか。
答えなんて計算しないとわからんな。と言ってる
計算式を作り出したことがない
0046デフォルトの名無しさん
垢版 |
2020/09/24(木) 11:30:08.73ID:7nzCtSCV
内部にジェネレータとかIOとかを持ってて、冪等じゃない関数のテストってどうやったらいいの?
そういうのは単体テストの対象外?
0047デフォルトの名無しさん
垢版 |
2020/09/24(木) 12:04:18.26ID:27/WCIy4
>>45
1つぐらい何か言い返せよw
お前がやってるそれが遠吠えじゃねーかw

>>46
冪等性がなんで出てくるのか知らんが
与えられたデータ(引数だけじゃなくてすべての状態)が
同じであればその結果も同じになる

テストというのは、固定のデータを使って固定の結果と比較するもの
固定のデータが用意するのが難しいのであれば
その部分にスタブ(モック)を利用する

十分、単体テストの対象内
というか単体テストができないなら、その他のテストもできないだろ
0049デフォルトの名無しさん
垢版 |
2020/09/24(木) 12:37:03.68ID:sW11ypIO
>>41
>そうそう、結局こういう入力(ユーザによる操作や設定ファイルも含む)に対してこう動くようにしましたよ
>としか言えない

考え方が間違ってる
入力に対する出力が要求仕様通りになることをこういうテストケースで確認しましたよと言えればいい
21が正解かどうかは要求仕様による

テストケースを作る能力の有無の前に
要件定義がまともにできてることが必要
できてなければデスマーチ確定
0051デフォルトの名無しさん
垢版 |
2020/09/24(木) 12:51:30.19ID:27/WCIy4
>>48
> お前がエクセルで計算した値だろw
何で計算するとかどうでもいい話だろ

何をする関数を作りたいのか?
作りたい関数は「何を入力とし、何を出力とするのか」

その仕様を決めてから関数を実装する。そして正しく実装されてるかテストする

お前は仕様を決めずに、関数を実装して
その関数が出力する答えが正しい!バグなんてない!って言ってんのか?

繰り返すぞ
仕様を決めてないのに関数を実装してんのか?
0052デフォルトの名無しさん
垢版 |
2020/09/24(木) 13:00:15.99ID:wzh1JL/V
関数なんかフィーリングでつくるだろうふつう
関数の設計?関数仕様書みたいのをいちいち書かせるタイプのアフォなんか?
0055デフォルトの名無しさん
垢版 |
2020/09/24(木) 14:21:13.46ID:27/WCIy4
>>53
> だから>>6でもいいんだよな?

>>6には固定値が書かれてないから駄目だって言ってんだろ
理解できますか?

あ、そう。理解できない。
↓こうしろって言ってるだけなのに、理解できないのか?終わってるな

int S=sumAtoF(1,2,3,4,5,6);
int chkS=21;
if(S!=chkS)
{
エラー
}
0057デフォルトの名無しさん
垢版 |
2020/09/24(木) 14:29:36.05ID:27/WCIy4
> え?じゃあどうやって21って出したの?

最初に関数を実装するんじゃやなくて
仕様を定義しましょうと言ってる


お前は仕様を決めずにいきなり関数書いて、その関数の実行結果を出力して
俺がコードにバグを入れるなんてありえない。だから21が正しい!と言ってるだけ。
テストを全くしてない
0058デフォルトの名無しさん
垢版 |
2020/09/24(木) 14:31:27.33ID:2iTMkqwR
>>57
それで?
どうやって21を出したの?
ここが品質のすべてを担保してるのにどうでもいいわけないだろアホか
0059デフォルトの名無しさん
垢版 |
2020/09/24(木) 14:35:32.71ID:27/WCIy4
>>58
> どうやって21を出したの?

「例:1,2,3,4,5,6を引数に渡したら21を返す関数が欲しい」
という要件

最初は関数(コード)は存在しない
最初に関数(コード)を実装してはいけない
実装した関数(コード)で出してはいけない
実装する前に決める話


どうやって21を出したの?
それはその関数が欲しい人に聞け
0064デフォルトの名無しさん
垢版 |
2020/09/24(木) 19:32:55.83ID:eJ60na0U
なんか荒れてんな。

単体テストって固定された仕様に対して実装者次第で変化するロジックをテストするものだろ。

例題があまりにも単純コードだからロジックと実装が一致するなんて現象が起きるのであって、考え方はテスト仕様を満たしているかどうかが重要。

だと思うんだぜ。
0065デフォルトの名無しさん
垢版 |
2020/09/24(木) 19:36:00.81ID:eJ60na0U
>>64

> 例題があまりにも単純コードだからロジックと実装が一致するなんて現象が起きるのであって、

ロジック(実装内容)とテストコードの間違い
0066デフォルトの名無しさん
垢版 |
2020/09/24(木) 19:42:58.77ID:4CFVaDi9
>>65
そこじゃないよ。
あのアホは「足し算をすることで21になるかどうかわからない」から
コードを書いてそのコードの出力ログで21とでたからOKOK。
21になるかどうかわからないけどログにそう出てるからOKOKって言ってるわけだから
レスを投稿する


ニューススポーツなんでも実況